MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / _parse

Method _parse

src/packagedcode/npm.py:521–608  ·  view source on GitHub ↗
(cls, json_data, package_only=False)

Source from the content-addressed store, hash-verified

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:

Callers 1

parseMethod · 0.45

Calls 11

partialFunction · 0.85
npm_download_urlFunction · 0.85
from_dataMethod · 0.80
get_urlsFunction · 0.70
licenses_mapperFunction · 0.70
logger_debugFunction · 0.70
getMethod · 0.65
funcFunction · 0.50
to_dictMethod · 0.45

Tested by

no test coverage detected