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

Method parse

src/packagedcode/npm.py:621–797  ·  view source on GitHub ↗
(cls, location, package_only=False)

Source from the content-addressed store, hash-verified

619
620 @classmethod
621 def parse(cls, location, package_only=False):
622
623 with io.open(location, encoding='utf-8') as loc:
624 package_data = json.load(loc)
625
626 # we have two formats: v1 and v2
627 lockfile_version = package_data.get('lockfileVersion', 1)
628 root_name = package_data.get('name')
629 root_version = package_data.get('version')
630 root_ns, _ , root_name = root_name.rpartition('/')
631
632 extra_data = dict(lockfile_version=lockfile_version)
633 # this is the top level element that we return
634 root_package_mapping = dict(
635 datasource_id=cls.datasource_id,
636 type=cls.default_package_type,
637 primary_language=cls.default_primary_language,
638 namespace=root_ns,
639 name=root_name,
640 version=root_version,
641 extra_data=extra_data,
642 **get_urls(root_ns, root_name, root_version)
643 )
644 root_package_data = models.PackageData.from_data(root_package_mapping, package_only)
645
646 # https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json#lockfileversion
647 if lockfile_version == 1:
648 deps_key = 'dependencies'
649 else:
650 # v2 and may be v3???
651 deps_key = 'packages'
652
653 deps_mapping = package_data.get(deps_key) or {}
654
655 # Top level package metadata is present here
656 root_pkg = deps_mapping.get("")
657 if root_pkg:
658 pkg_name = root_pkg.get('name')
659 pkg_ns, _ , pkg_name = pkg_name.rpartition('/')
660 pkg_version = root_pkg.get('version')
661 pkg_purl = PackageURL(
662 type=cls.default_package_type,
663 namespace=pkg_ns,
664 name=pkg_name,
665 version=pkg_version,
666 ).to_string()
667 if pkg_purl != root_package_data.purl:
668 if TRACE_NPM:
669 logger_debug(f'BaseNpmLockHandler: parse: purl mismatch: {pkg_purl} vs {root_package_data.purl}')
670 else:
671 extracted_license_statement = root_pkg.get('license')
672 if extracted_license_statement:
673 root_package_data.extracted_license_statement = extracted_license_statement
674 root_package_data.populate_license_fields()
675
676 deps_mapper(
677 deps=root_pkg.get('devDependencies') or {},
678 package=root_package_data,

Callers

nothing calls this directly

Calls 15

deps_mapperFunction · 0.85
get_checksum_and_urlFunction · 0.85
get_algo_hexsumFunction · 0.85
from_dataMethod · 0.80
to_stringMethod · 0.80
get_urlsFunction · 0.70
logger_debugFunction · 0.70
getMethod · 0.65
openMethod · 0.45
loadMethod · 0.45

Tested by

no test coverage detected