/ student-intifada / node_modules / npm-pick-manifest /

[ICO]NameLast modifiedSizeDescription
[PARENTDIR]Parent Directory  -  
[DIR]lib/a year ago -  
[TXT]LICENSE.mda year ago755  
[TXT]README.mda year ago7.1K595aea1 more query options + view options [كارل مبارك]
[   ]package.jsona year ago1.4Kafd0ccc remove unused [كارل مبارك]
README.md

npm-pick-manifest npm version license Travis Coverage Status

npm-pick-manifest is a standalone implementation of npm's semver range resolution algorithm.

Install

$ npm install --save npm-pick-manifest

Table of Contents

Example

const pickManifest = require('npm-pick-manifest')

fetch('https://registry.npmjs.org/npm-pick-manifest').then(res => {
  return res.json()
}).then(packument => {
  return pickManifest(packument, '^1.0.0')
}) // get same manifest as npm would get if you `npm i npm-pick-manifest@^1.0.0`

Features

API

> pickManifest(packument, selector, [opts]) -> manifest

Returns the manifest that best matches selector, or throws an error.

Packuments are anything returned by metadata URLs from the npm registry. That is, they're objects with the following shape (only fields used by npm-pick-manifest included):

{
  name: 'some-package',
  'dist-tags': {
    foo: '1.0.1'
  },
  versions: {
    '1.0.0': { version: '1.0.0' },
    '1.0.1': { version: '1.0.1' },
    '1.0.2': { version: '1.0.2' },
    '2.0.0': { version: '2.0.0' }
  }
}

The algorithm will follow npm's algorithm for semver resolution, and only tag, range, and version selectors are supported.

The function will throw ETARGET if there was no matching manifest, and ENOVERSIONS if the packument object has no valid versions in versions. If the only matching manifest is included in a policyRestrictions section of the packument, then an E403 is raised.

Options

All options are optional.

Return value is the manifest as it exists in the packument, possibly decorated with the following boolean flags:

Algorithm

  1. Create list of all versions in versions, policyRestrictions.versions, and (if includeStaged is set) stagedVersions.versions.
  2. If a dist-tag is requested,
    1. If the manifest is not after the specified before date, then select that from the set.
    2. If the manifest is after the specified before date, then re-start the selection looking for the highest SemVer range that is equal to or less than the dist-tag target.
  3. If a specific version is requested,
    1. If the manifest is not after the specified before date, then select the specified manifest.
    2. If the manifest is after the specified before date, then raise ETARGET error. (NB: this is a breaking change from v5, where a specified version would override the before setting.)
  4. (At this point we know a range is requested.)
  5. If the defaultTag refers to a dist-tag that satisfies the range (or if the range is '*' or ''), and the manifest is published before the before setting, then select that manifest.
  6. If nothing is yet selected, sort by the following heuristics in order, and select the top item:
    1. Prioritize versions that are not in the avoid range over those that are.
    2. Prioritize versions that are not in policyRestrictions over those that are.
    3. Prioritize published versions over staged versions.
    4. Prioritize versions that are not deprecated, and which have a satisfied engines requirement, over those that are either deprecated or have an engines mismatch.
    5. Prioritize versions that have a satisfied engines requirement over those that do not.
    6. Prioritize versions that are not are not deprecated (but have a mismatched engines requirement) over those that are deprecated.
    7. Prioritize higher SemVer precedence over lower SemVer precedence.
  7. If no manifest was selected, raise an ETARGET error.
  8. If the selected item is in the policyRestrictions.versions list, raise an E403 error.
  9. Return the selected manifest.
Apache/2.4.38 (Debian) Server at www.karls.computer Port 80