summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-pick-manifest/index.js
diff options
context:
space:
mode:
authorKat Marchán <kzm@zkat.tech>2019-01-29 14:43:00 -0800
committerMyles Borins <mylesborins@google.com>2019-02-12 00:06:29 -0800
commit43dd49c9782848c25e5b03448c8a0f923f13c158 (patch)
treef7ac5d645019b2b844f26be66c291bbae734d097 /deps/npm/node_modules/npm-pick-manifest/index.js
parentb361f9577fbd72e518438d3fa0b01f7d34d814a5 (diff)
downloadandroid-node-v8-43dd49c9782848c25e5b03448c8a0f923f13c158.tar.gz
android-node-v8-43dd49c9782848c25e5b03448c8a0f923f13c158.tar.bz2
android-node-v8-43dd49c9782848c25e5b03448c8a0f923f13c158.zip
deps: upgrade npm to 6.7.0
PR-URL: https://github.com/nodejs/node/pull/25804 Reviewed-By: Myles Borins <myles.borins@gmail.com>
Diffstat (limited to 'deps/npm/node_modules/npm-pick-manifest/index.js')
-rw-r--r--deps/npm/node_modules/npm-pick-manifest/index.js62
1 files changed, 52 insertions, 10 deletions
diff --git a/deps/npm/node_modules/npm-pick-manifest/index.js b/deps/npm/node_modules/npm-pick-manifest/index.js
index 133b627234..d9a8373e57 100644
--- a/deps/npm/node_modules/npm-pick-manifest/index.js
+++ b/deps/npm/node_modules/npm-pick-manifest/index.js
@@ -1,19 +1,35 @@
'use strict'
+const figgyPudding = require('figgy-pudding')
const npa = require('npm-package-arg')
const semver = require('semver')
+const PickerOpts = figgyPudding({
+ defaultTag: { default: 'latest' },
+ enjoyBy: {},
+ includeDeprecated: { default: false }
+})
+
module.exports = pickManifest
function pickManifest (packument, wanted, opts) {
- opts = opts || {}
+ opts = PickerOpts(opts)
+ const time = opts.enjoyBy && packument.time && +(new Date(opts.enjoyBy))
const spec = npa.resolve(packument.name, wanted)
const type = spec.type
if (type === 'version' || type === 'range') {
wanted = semver.clean(wanted, true) || wanted
}
const distTags = packument['dist-tags'] || {}
- const versions = Object.keys(packument.versions || {}).filter(v => semver.valid(v, true))
- const undeprecated = versions.filter(v => !packument.versions[v].deprecated)
+ const versions = Object.keys(packument.versions || {}).filter(v => {
+ return semver.valid(v, true)
+ })
+
+ function enjoyableBy (v) {
+ return !time || (
+ packument.time[v] && time >= +(new Date(packument.time[v]))
+ )
+ }
+
let err
if (!versions.length) {
@@ -27,43 +43,69 @@ function pickManifest (packument, wanted, opts) {
let target
- if (type === 'tag') {
+ if (type === 'tag' && enjoyableBy(distTags[wanted])) {
target = distTags[wanted]
} else if (type === 'version') {
target = wanted
- } else if (type !== 'range') {
+ } else if (type !== 'range' && enjoyableBy(distTags[wanted])) {
throw new Error('Only tag, version, and range are supported')
}
- const tagVersion = distTags[opts.defaultTag || 'latest']
+ const tagVersion = distTags[opts.defaultTag]
if (
!target &&
tagVersion &&
packument.versions[tagVersion] &&
+ enjoyableBy(tagVersion) &&
semver.satisfies(tagVersion, wanted, true)
) {
target = tagVersion
}
if (!target && !opts.includeDeprecated) {
+ const undeprecated = versions.filter(v => !packument.versions[v].deprecated && enjoyableBy(v)
+ )
target = semver.maxSatisfying(undeprecated, wanted, true)
}
if (!target) {
- target = semver.maxSatisfying(versions, wanted, true)
+ const stillFresh = versions.filter(enjoyableBy)
+ target = semver.maxSatisfying(stillFresh, wanted, true)
}
- if (!target && wanted === '*') {
+ if (!target && wanted === '*' && enjoyableBy(tagVersion)) {
// This specific corner is meant for the case where
// someone is using `*` as a selector, but all versions
// are pre-releases, which don't match ranges at all.
target = tagVersion
}
- const manifest = target && packument.versions[target]
+ if (
+ !target &&
+ time &&
+ type === 'tag' &&
+ distTags[wanted] &&
+ !enjoyableBy(distTags[wanted])
+ ) {
+ const stillFresh = versions.filter(v =>
+ enjoyableBy(v) && semver.lte(v, distTags[wanted], true)
+ ).sort(semver.rcompare)
+ target = stillFresh[0]
+ }
+
+ const manifest = (
+ target &&
+ packument.versions[target]
+ )
if (!manifest) {
err = new Error(
- `No matching version found for ${packument.name}@${wanted}`
+ `No matching version found for ${packument.name}@${wanted}${
+ opts.enjoyBy
+ ? ` with an Enjoy By date of ${
+ new Date(opts.enjoyBy).toLocaleString()
+ }. Maybe try a different date?`
+ : ''
+ }`
)
err.code = 'ETARGET'
err.name = packument.name