fix(outdated): on project with shared shrinkwrap and direct peers

This commit is contained in:
Zoltan Kochan
2018-10-31 02:30:31 +02:00
parent 2770336298
commit 6d68a19a18
9 changed files with 173 additions and 39 deletions

View File

@@ -156,15 +156,20 @@ async function _outdated (
throw new Error(`Invalid shrinkwrap.yaml file. ${relativeDepPath} not found in packages field`)
}
const currentRef = currentShrinkwrap.importers[importerId][depType][packageName]
const currentRelative = currentRef && dp.refToRelative(currentRef, packageName)
const current = currentRelative && dp.parse(currentRelative).version || currentRef
const wanted = dp.parse(relativeDepPath).version || ref
// It might be not the best solution to check for pkgSnapshot.name
// TODO: add some other field to distinct packages not from the registry
if (pkgSnapshot.resolution && (pkgSnapshot.resolution['type'] || pkgSnapshot.name)) { // tslint:disable-line:no-string-literal
if (currentShrinkwrap.importers[importerId][depType][packageName] !== wantedShrinkwrap.importers[importerId][depType]![packageName]) {
if (current !== wanted) {
outdated.push({
current: currentShrinkwrap.importers[importerId][depType]![packageName],
current,
latest: undefined,
packageName,
wanted: wantedShrinkwrap.importers[importerId][depType]![packageName],
wanted,
})
}
return
@@ -180,22 +185,21 @@ async function _outdated (
const latest = resolution.latest
if (!currentShrinkwrap.importers[importerId][depType][packageName]) {
if (!current) {
outdated.push({
latest,
packageName,
wanted: wantedShrinkwrap.importers[importerId][depType]![packageName],
wanted,
})
return
}
if (currentShrinkwrap.importers[importerId][depType][packageName] !== wantedShrinkwrap.importers[importerId][depType]![packageName] ||
latest !== currentShrinkwrap.importers[importerId][depType][packageName]) {
if (current !== wanted || latest !== current) {
outdated.push({
current: currentShrinkwrap.importers[importerId][depType][packageName],
current,
latest,
packageName,
wanted: wantedShrinkwrap.importers[importerId][depType]![packageName],
wanted,
})
}
}),

View File

@@ -0,0 +1 @@
!node_modules

View File

@@ -0,0 +1,52 @@
importers:
package:
dependencies:
ajv: 6.5.4
ajv-keywords: /ajv-keywords/3.2.0/ajv@6.5.4
specifiers:
ajv: 6.5.4
ajv-keywords: 3.2.0
packages:
/ajv-keywords/3.2.0/ajv@6.5.4:
dependencies:
ajv: 6.5.4
dev: false
id: registry.npmjs.org/ajv-keywords/3.2.0
peerDependencies:
ajv: ^6.0.0
resolution:
integrity: sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
/ajv/6.5.4:
dependencies:
fast-deep-equal: 2.0.1
fast-json-stable-stringify: 2.0.0
json-schema-traverse: 0.4.1
uri-js: 4.2.2
dev: false
resolution:
integrity: sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==
/fast-deep-equal/2.0.1:
dev: false
resolution:
integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
/fast-json-stable-stringify/2.0.0:
dev: false
resolution:
integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
/json-schema-traverse/0.4.1:
dev: false
resolution:
integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
/punycode/2.1.1:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
/uri-js/4.2.2:
dependencies:
punycode: 2.1.1
dev: false
resolution:
integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
shrinkwrapVersion: 4

View File

@@ -0,0 +1 @@
node_modules

View File

@@ -0,0 +1 @@
shrinkwrap-directory=..

View File

@@ -0,0 +1,8 @@
{
"name": "package",
"version": "0.0.0",
"dependencies": {
"ajv-keywords": "3.2.0",
"ajv": "6.5.4"
}
}

View File

@@ -0,0 +1,52 @@
importers:
package:
dependencies:
ajv: 6.5.4
ajv-keywords: /ajv-keywords/3.2.0/ajv@6.5.4
specifiers:
ajv: 6.5.4
ajv-keywords: 3.2.0
packages:
/ajv-keywords/3.2.0/ajv@6.5.4:
dependencies:
ajv: 6.5.4
dev: false
id: registry.npmjs.org/ajv-keywords/3.2.0
peerDependencies:
ajv: ^6.0.0
resolution:
integrity: sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
/ajv/6.5.4:
dependencies:
fast-deep-equal: 2.0.1
fast-json-stable-stringify: 2.0.0
json-schema-traverse: 0.4.1
uri-js: 4.2.2
dev: false
resolution:
integrity: sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==
/fast-deep-equal/2.0.1:
dev: false
resolution:
integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
/fast-json-stable-stringify/2.0.0:
dev: false
resolution:
integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
/json-schema-traverse/0.4.1:
dev: false
resolution:
integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
/punycode/2.1.1:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
/uri-js/4.2.2:
dependencies:
punycode: 2.1.1
dev: false
resolution:
integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
shrinkwrapVersion: 4

View File

@@ -140,3 +140,13 @@ test('outdated() on package that has one outdated dev dependency', async (t) =>
])
t.end()
})
// NOTE: this test is unstable. It will fail if a new version of ajv will be released!
test('outdated() on a package that has external shrinkwrap file and direct dependencies with resolved peers', async (t) => {
const outdatedPkgs = await outdated('package-with-external-shrinkwrap/package', {
...outdatedOpts,
shrinkwrapDirectory: path.resolve('package-with-external-shrinkwrap'),
})
t.deepEqual(outdatedPkgs, [])
t.end()
})

View File

@@ -1657,8 +1657,8 @@ packages:
integrity: sha512-RxNNNvEO8Ogl6VGOx1t9ET5MgewcRSPCUriRMnIMgUguynG1hbc4uBkJ5WqCPCuwk2glvPvMShy6RySuYj5GHw==
/@pnpm/exec/1.1.5:
dependencies:
'@pnpm/self-installer': 2.0.5
'@types/got': 8.3.4
'@pnpm/self-installer': 2.0.7
'@types/got': 8.3.5
'@types/node': 10.12.0
command-exists: 1.2.8
cross-spawn: 6.0.5
@@ -1686,7 +1686,7 @@ packages:
integrity: sha512-ASULw2KzrapsjQVSMYdDc3f6+wYOs9cPt0M5Ip9VUkTfYfPrfxd0UYXcOPoUHkk7L12HUj0vwUYK0DE1da2gww==
/@pnpm/git-fetcher/1.0.1:
dependencies:
'@types/node': 10.12.0
'@types/node': 10.12.1
dint: 3.0.2
execa: 1.0.0
path-temp: 1.0.0
@@ -1699,7 +1699,7 @@ packages:
/@pnpm/git-resolver/1.0.1:
dependencies:
'@pnpm/resolver-base': 2.0.0
'@types/node': 10.12.0
'@types/node': 10.12.1
'@types/semver': 5.5.0
got: 8.3.2
graceful-git: 2.0.0
@@ -1752,7 +1752,7 @@ packages:
'@pnpm/resolver-base': 2.0.0
'@pnpm/types': 2.0.0
'@types/graceful-fs': 4.1.2
'@types/node': 10.12.0
'@types/node': 10.12.1
graceful-fs: 4.1.11
normalize-path: 3.0.0
osenv: 0.1.5
@@ -1765,7 +1765,7 @@ packages:
integrity: sha512-/6KP7OXtwlE1tgepR5vB1FyL64F4+RZP8IIdvkwkHWL1rnLPprRvZ1Lwd1vecIlwjY1MrXmY7awL2H7MQqBg5Q==
/@pnpm/logger/2.1.0:
dependencies:
'@types/node': 10.12.0
'@types/node': 10.12.1
bole: 3.0.2
ndjson: 1.5.0
engines:
@@ -1779,7 +1779,7 @@ packages:
'@pnpm/types': 2.0.0
'@types/load-json-file': 2.0.7
'@types/mem': 1.1.2
'@types/node': 10.12.0
'@types/node': 10.12.1
'@types/semver': 5.5.0
credentials-by-uri: 1.0.0
encode-registry: 1.1.0
@@ -1835,12 +1835,12 @@ packages:
node: '>=6'
resolution:
integrity: sha512-+pYMLgBlp242xn0qEK3JsU2fNgMSejTflzu1NLXV8J9QTIxTILmxz5ayFcudtimKP0o49dnMysoWihQ/ven7wA==
/@pnpm/self-installer/2.0.5:
/@pnpm/self-installer/2.0.7:
dev: true
engines:
node: '>=4'
resolution:
integrity: sha512-NnkmxKFQJMkHL2TcLAl2sof7mVu8dgode4zGzwtvEaZ/xjOHm3CfUJomincmZcpWoXrjHkvbPxjczEPP41Wmqg==
integrity: sha512-FGKMmjqP0S+E1n9M6BcsVVkOVB0NfhBzXGZK6bLmerRT3EOvQ09KY++hBXoq0+/TqCvbsth6ER+EO0i46uJttQ==
/@pnpm/store-path/1.0.3:
dependencies:
'@types/node': 9.6.35
@@ -1863,7 +1863,7 @@ packages:
'@pnpm/logger': 2.1.0
'@types/mem': 1.1.2
'@types/mz': 0.0.32
'@types/node': 10.12.0
'@types/node': 10.12.1
'@types/retry': 0.10.2
'@types/rimraf': 2.0.2
credentials-by-uri: 1.0.0
@@ -1904,12 +1904,12 @@ packages:
node: '>=4'
resolution:
integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
/@sinonjs/commons/1.0.2:
/@sinonjs/commons/1.3.0:
dependencies:
type-detect: 4.0.8
dev: true
resolution:
integrity: sha512-WR3dlgqJP4QNrLC4iXN/5/2WaLQQ0VijOOkmflqFGVJ6wLEpbSjo7c0ZeGIdtY8Crk7xBBp87sM6+Mkerz7alw==
integrity: sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==
/@sinonjs/formatio/3.0.0:
dependencies:
'@sinonjs/samsam': 2.1.0
@@ -1973,11 +1973,18 @@ packages:
/@types/got/8.3.4:
dependencies:
'@types/node': 10.12.0
dev: false
resolution:
integrity: sha512-0AbIQzpqQafYPFg26nwg5PfNgPLYwHeTP6z5F1u+5oypLIdpx34o5r8wYTTj3X3YYF2yPHtZPO/KYwlI8Nu/hQ==
/@types/graceful-fs/4.1.2:
/@types/got/8.3.5:
dependencies:
'@types/node': 10.12.0
dev: true
resolution:
integrity: sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==
/@types/graceful-fs/4.1.2:
dependencies:
'@types/node': 10.12.1
resolution:
integrity: sha512-epDhsJAVxJsWfeqpzEDFhLnhHMbHie/VMFY+2Hvt5p7FemeW5ELM+6gcVYL/ZsUwdu3zrWpDE3VUTddXW+EMYg==
/@types/is-windows/0.2.0:
@@ -2026,6 +2033,9 @@ packages:
/@types/node/10.12.0:
resolution:
integrity: sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==
/@types/node/10.12.1:
resolution:
integrity: sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==
/@types/node/8.10.36:
dev: false
resolution:
@@ -4365,7 +4375,7 @@ packages:
integrity: sha1-oB6c2cnkkXFcmKdaQtXwu9EH/3Y=
/fetch-from-npm-registry/1.0.0:
dependencies:
'@types/node': 10.12.0
'@types/node': 10.12.1
make-fetch-happen: 4.0.1
engines:
node: '>=6'
@@ -5119,7 +5129,7 @@ packages:
dependencies:
assert-plus: 1.0.0
jsprim: 1.4.1
sshpk: 1.15.1
sshpk: 1.15.2
engines:
node: '>=0.8'
npm: '>=1.3.7'
@@ -7546,11 +7556,6 @@ packages:
node: '>=4'
resolution:
integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
/pify/4.0.0:
engines:
node: '>=6'
resolution:
integrity: sha512-zrSP/KDf9DH3K3VePONoCstgPiYJy9z0SCatZuTpOc7YdnWIqwkWdXOuwlr4uDc7em8QZRsFWsT/685x5InjYg==
/pify/4.0.1:
engines:
node: '>=6'
@@ -8573,7 +8578,7 @@ packages:
integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
/sinon/7.1.0:
dependencies:
'@sinonjs/commons': 1.0.2
'@sinonjs/commons': 1.3.0
'@sinonjs/formatio': 3.0.0
'@sinonjs/samsam': 2.1.2
diff: 3.5.0
@@ -8789,7 +8794,7 @@ packages:
/sprintf-js/1.0.3:
resolution:
integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
/sshpk/1.15.1:
/sshpk/1.15.2:
dependencies:
asn1: 0.2.4
assert-plus: 1.0.0
@@ -8804,7 +8809,7 @@ packages:
node: '>=0.10.0'
hasBin: true
resolution:
integrity: sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==
integrity: sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
/ssri/5.3.0:
dependencies:
safe-buffer: 5.1.2
@@ -9397,7 +9402,7 @@ packages:
doctrine: 0.7.2
tslib: 1.9.0
tslint: /tslint/5.11.0/typescript@3.1.3
tsutils: /tsutils/3.1.0/typescript@3.1.3
tsutils: /tsutils/3.2.0/typescript@3.1.3
typescript: 3.1.3
dev: true
id: registry.npmjs.org/tslint-eslint-rules/5.4.0
@@ -9440,18 +9445,18 @@ packages:
typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev'
resolution:
integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
/tsutils/3.1.0/typescript@3.1.3:
/tsutils/3.2.0/typescript@3.1.3:
dependencies:
tslib: 1.9.3
typescript: 3.1.3
dev: true
engines:
node: '>= 6'
id: registry.npmjs.org/tsutils/3.1.0
id: registry.npmjs.org/tsutils/3.2.0
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev'
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev'
resolution:
integrity: sha512-rmGhespW+nZMtdkc4JJefYSjux2uCDZxCTLU+nu8gvm+gM+YT0W5XAygHxaeOwRAHZ+SoPdrovZmAlZ2a0KSlw==
integrity: sha512-CvWEadl8VwlxOq6F3hfNbGrrRVSAjN2EPCEBgcbCUVDUxmwkV5254OGKsITNxDz8IGDQPAw7YJMtBHniHu2tbA==
/tunnel-agent/0.6.0:
dependencies:
safe-buffer: 5.1.2
@@ -9614,7 +9619,7 @@ packages:
integrity: sha512-h3Ii7ThTL7P5LlX1RuMPsuW4V5EZnLyjPwStIMQ4V0F6rblgmXIS+IkpAOu9THHDZYUO/D8TTJddVc6HIY4S5g==
/unpack-stream/4.0.0:
dependencies:
'@types/node': 10.12.0
'@types/node': 10.12.1
decompress-maybe: 1.0.0
ssri: 6.0.1
tar-fs: 1.16.3
@@ -9961,7 +9966,7 @@ packages:
detect-indent: 5.0.0
graceful-fs: 4.1.11
make-dir: 1.3.0
pify: 4.0.0
pify: 4.0.1
sort-keys: 2.0.0
write-file-atomic: 2.3.0
engines: