(cls, json_data, package_only=False)
| 519 | |
| 520 | @classmethod |
| 521 | def _parse(cls, json_data, package_only=False): |
| 522 | name = json_data.get('name') |
| 523 | version = json_data.get('version') |
| 524 | homepage_url = json_data.get('homepage', '') |
| 525 | |
| 526 | # a package.json without name and version can be a private package |
| 527 | |
| 528 | if homepage_url and isinstance(homepage_url, list): |
| 529 | # TODO: should we keep other URLs |
| 530 | homepage_url = homepage_url[0] |
| 531 | homepage_url = homepage_url.strip() or None |
| 532 | |
| 533 | namespace, name = split_scoped_package_name(name) |
| 534 | |
| 535 | is_private = False |
| 536 | if json_data.get('private'): |
| 537 | is_private = True |
| 538 | if is_private: |
| 539 | urls = {} |
| 540 | else: |
| 541 | urls = get_urls(namespace, name, version) |
| 542 | package_data = dict( |
| 543 | datasource_id=cls.datasource_id, |
| 544 | type=cls.default_package_type, |
| 545 | primary_language=cls.default_primary_language, |
| 546 | namespace=namespace or None, |
| 547 | name=name, |
| 548 | version=version or None, |
| 549 | description=json_data.get('description', '').strip() or None, |
| 550 | homepage_url=homepage_url, |
| 551 | is_private=is_private, |
| 552 | **urls, |
| 553 | ) |
| 554 | package = models.PackageData.from_data(package_data, package_only) |
| 555 | vcs_revision = json_data.get('gitHead') or None |
| 556 | |
| 557 | # mapping of top level package.json items to a function accepting as |
| 558 | # arguments the package.json element value and returning an iterable of (key, |
| 559 | # values) to update on a package |
| 560 | field_mappers = [ |
| 561 | ('author', partial(party_mapper, party_type='author')), |
| 562 | ('contributors', partial(party_mapper, party_type='contributor')), |
| 563 | ('maintainers', partial(party_mapper, party_type='maintainer')), |
| 564 | ('dependencies', partial(deps_mapper, field_name='dependencies')), |
| 565 | ('devDependencies', partial(deps_mapper, field_name='devDependencies')), |
| 566 | ('peerDependencies', partial(deps_mapper, field_name='peerDependencies')), |
| 567 | ('optionalDependencies', partial(deps_mapper, field_name='optionalDependencies')), |
| 568 | ('bundledDependencies', bundle_deps_mapper), |
| 569 | ('resolutions', partial(deps_mapper, field_name='resolutions')), |
| 570 | ('repository', partial(vcs_repository_mapper, vcs_revision=vcs_revision)), |
| 571 | ('keywords', keywords_mapper,), |
| 572 | ('bugs', bugs_mapper), |
| 573 | ('dist', dist_mapper), |
| 574 | ] |
| 575 | |
| 576 | extra_data = {} |
| 577 | extra_data_fields = ['workspaces', 'engines', 'packageManager'] |
| 578 | for extra_data_field in extra_data_fields: |
no test coverage detected