swh.loader.package.npm.loader module

class swh.loader.package.npm.loader.NpmPackageInfo(url: str, filename: Optional[str], raw_info: Dict[str, Any], date: Optional[str], shasum: str, version: str, *, directory_extrinsic_metadata: List[swh.loader.package.loader.RawExtrinsicMetadataCore] = [])[source]

Bases: swh.loader.package.loader.BasePackageInfo


sha1 checksum

classmethod from_metadata(project_metadata: Dict[str, Any], version: str)swh.loader.package.npm.loader.NpmPackageInfo[source]
class swh.loader.package.npm.loader.NpmLoader(url: str)[source]

Bases: swh.loader.package.loader.PackageLoader[swh.loader.package.npm.loader.NpmPackageInfo]

Load npm origin’s artifact releases into swh archive.

visit_type = 'npm'
info() → Dict[source]

Return the project metadata information (fetched from npm registry)

get_versions() → Sequence[str][source]

Return the list of all published package versions.


Sequence of published versions

get_default_version() → str[source]

Retrieve the latest release version if any.


Latest version


For package loaders that get extrinsic metadata, returns the authority the metadata are coming from.

get_package_info(version: str) → Iterator[Tuple[str, swh.loader.package.npm.loader.NpmPackageInfo]][source]
Given a release version of a package, retrieve the associated

package information for such version.


version – Package version


(branch name, package metadata)

resolve_revision_from(known_artifacts: Dict, p_info: swh.loader.package.npm.loader.NpmPackageInfo) → Optional[bytes][source]

Resolve the revision from a snapshot and an artifact metadata dict.

If the artifact has already been downloaded, this will return the existing revision targeting that uncompressed artifact directory. Otherwise, this returns None.

  • snapshot – Snapshot

  • p_info – Package information


None or revision identifier

build_revision(p_info: swh.loader.package.npm.loader.NpmPackageInfo, uncompressed_path: str, directory: bytes) → Optional[swh.model.model.Revision][source]

Build the revision from the archive metadata (extrinsic artifact metadata) and the intrinsic metadata.

  • p_info – Package information

  • uncompressed_path – Artifact uncompressed path on disk


Revision object

storage: StorageInterface
swh.loader.package.npm.loader.artifact_to_revision_id(known_artifacts: Dict, p_info: swh.loader.package.npm.loader.NpmPackageInfo) → Optional[bytes][source]

Given metadata artifact, solves the associated revision id.

The following code allows to deal with 2 metadata formats:

  • old format sample:

        'package_source': {
            'sha1': '05181c12cd8c22035dd31155656826b85745da37',
  • new format sample:

        'original_artifact': [{
            'checksums': {
                'sha256': '6975816f2c5ad4046acc676ba112f2fff945b01522d63948531f11f11e0892ec', # noqa
swh.loader.package.npm.loader.extract_npm_package_author(package_json: Dict[str, Any])swh.model.model.Person[source]

Extract package author from a package.json file content and return it in swh format.


package_json – Dict holding the content of parsed package.json file




Try to load JSON from bytes and return a dictionary.

First try to decode from utf-8. If the decoding failed, try to detect the encoding and decode again with replace error handling.

If JSON is malformed, an empty dictionary will be returned.


json_bytes (bytes) – binary content of a JSON file


JSON data loaded in a dictionary

Return type


swh.loader.package.npm.loader.extract_intrinsic_metadata(dir_path: str) → Dict[source]
Given an uncompressed path holding the pkginfo file, returns a

pkginfo parsed structure as a dict.

The release artifact contains at their root one folder. For example: $ tar tvf zprint-0.0.6.tar.gz drwxr-xr-x root/root 0 2018-08-22 11:01 zprint-0.0.6/ …


dir_path (str) – Path to the uncompressed directory representing a release artifact from npm.


the pkginfo parsed structure as a dict if any or None if none was present.