feat!: breaking config changes in v8 (#6035)

* auto-install-peers=true
* save-workspace-protocol=rolling
* publishConfig.linkDirectory true by default
* resolve-peers-from-workspace-root is true by default
* set dedupeDirectDeps to true by default in @pnpm/core.
This commit is contained in:
Zoltan Kochan
2023-02-05 11:43:22 +02:00
committed by GitHub
parent 11886f4c26
commit 47e45d717d
128 changed files with 3237 additions and 2770 deletions

View File

@@ -0,0 +1,7 @@
---
"@pnpm/core": major
"@pnpm/config": major
"pnpm": major
---
`auto-install-peers` is `true` by default.

View File

@@ -0,0 +1,7 @@
---
"@pnpm/core": major
"@pnpm/config": major
"pnpm": major
---
`save-workspace-protocol` is `rolling` by default.

View File

@@ -0,0 +1,7 @@
---
"@pnpm/core": major
"@pnpm/config": major
"pnpm": major
---
`resolve-peers-from-workspace-root` is `true` by default.

View File

@@ -0,0 +1,7 @@
---
"@pnpm/core": major
"@pnpm/config": major
"pnpm": major
---
`publishConfig.linkDirectory` is `true` by default.

View File

@@ -0,0 +1,6 @@
---
"@pnpm/core": major
"pnpm": major
---
Direct dependencies are deduped. So if the same dependency is both in a project and in the workspace root, then it is only linked to the workspace root.

View File

@@ -1,27 +1,26 @@
lockfileVersion: 5.4
specifiers:
es6-iterator: ^2.0.1
lockfileVersion: '6.0'
dependencies:
es6-iterator: 2.0.1
es6-iterator:
specifier: ^2.0.1
version: 2.0.1
packages:
/d/1.0.0:
/d@1.0.0:
resolution: {integrity: sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=}
dependencies:
es5-ext: 0.10.24
dev: false
/es5-ext/0.10.24:
/es5-ext@0.10.24:
resolution: {integrity: sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=}
dependencies:
es6-iterator: 2.0.1
es6-symbol: 3.1.1
dev: false
/es6-iterator/2.0.1:
/es6-iterator@2.0.1:
resolution: {integrity: sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=}
dependencies:
d: 1.0.0
@@ -29,7 +28,7 @@ packages:
es6-symbol: 3.1.1
dev: false
/es6-symbol/3.1.1:
/es6-symbol@3.1.1:
resolution: {integrity: sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=}
dependencies:
d: 1.0.0

View File

@@ -1,32 +1,32 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/bar:
specifiers:
is-positive: 1.0.0
dependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/foo:
specifiers:
'@scope/bar': workspace:*
is-positive: 3.1.0
dependencies:
'@scope/bar': link:../bar
is-positive: 3.1.0
'@scope/bar':
specifier: workspace:*
version: link:../bar
is-positive:
specifier: 3.1.0
version: 3.1.0
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,16 +1,16 @@
lockfileVersion: 5.3
lockfileVersion: '6.0'
importers:
pkg:
specifiers:
is-positive: 1.0.0
dependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,76 +1,77 @@
lockfileVersion: 5.4
specifiers:
is-negative: ^2.1.0
is-positive: ^3.1.0
write-json-file: ^2.2.0
lockfileVersion: '6.0'
dependencies:
write-json-file: 2.3.0
write-json-file:
specifier: ^2.2.0
version: 2.3.0
optionalDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
devDependencies:
is-positive: 3.1.0
is-positive:
specifier: ^3.1.0
version: 3.1.0
packages:
/detect-indent/5.0.0:
/detect-indent@5.0.0:
resolution: {integrity: sha1-OHHMCmoALow+Wzz38zYmRnXwa50=}
engines: {node: '>=4'}
dev: false
/graceful-fs/4.2.2:
/graceful-fs@4.2.2:
resolution: {integrity: sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==}
dev: false
/imurmurhash/0.1.4:
/imurmurhash@0.1.4:
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
engines: {node: '>=0.8.19'}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
optional: true
/is-plain-obj/1.1.0:
/is-plain-obj@1.1.0:
resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: true
/make-dir/1.3.0:
/make-dir@1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
dependencies:
pify: 3.0.0
dev: false
/pify/3.0.0:
/pify@3.0.0:
resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=}
engines: {node: '>=4'}
dev: false
/signal-exit/3.0.2:
/signal-exit@3.0.2:
resolution: {integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=}
dev: false
/sort-keys/2.0.0:
/sort-keys@2.0.0:
resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=}
engines: {node: '>=4'}
dependencies:
is-plain-obj: 1.1.0
dev: false
/write-file-atomic/2.4.3:
/write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
dependencies:
graceful-fs: 4.2.2
@@ -78,7 +79,7 @@ packages:
signal-exit: 3.0.2
dev: false
/write-json-file/2.3.0:
/write-json-file@2.3.0:
resolution: {integrity: sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=}
engines: {node: '>=4'}
dependencies:

View File

@@ -1,76 +1,77 @@
lockfileVersion: 5.4
specifiers:
is-negative: ^2.1.0
is-positive: ^3.1.0
write-json-file: ^2.2.0
lockfileVersion: '6.0'
dependencies:
write-json-file: 2.3.0
write-json-file:
specifier: ^2.2.0
version: 2.3.0
optionalDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
devDependencies:
is-positive: 3.1.0
is-positive:
specifier: ^3.1.0
version: 3.1.0
packages:
/detect-indent/5.0.0:
/detect-indent@5.0.0:
resolution: {integrity: sha1-OHHMCmoALow+Wzz38zYmRnXwa50=}
engines: {node: '>=4'}
dev: false
/graceful-fs/4.2.2:
/graceful-fs@4.2.2:
resolution: {integrity: sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==}
dev: false
/imurmurhash/0.1.4:
/imurmurhash@0.1.4:
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
engines: {node: '>=0.8.19'}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
optional: true
/is-plain-obj/1.1.0:
/is-plain-obj@1.1.0:
resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: true
/make-dir/1.3.0:
/make-dir@1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
dependencies:
pify: 3.0.0
dev: false
/pify/3.0.0:
/pify@3.0.0:
resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=}
engines: {node: '>=4'}
dev: false
/signal-exit/3.0.2:
/signal-exit@3.0.2:
resolution: {integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=}
dev: false
/sort-keys/2.0.0:
/sort-keys@2.0.0:
resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=}
engines: {node: '>=4'}
dependencies:
is-plain-obj: 1.1.0
dev: false
/write-file-atomic/2.4.3:
/write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
dependencies:
graceful-fs: 4.2.2
@@ -78,7 +79,7 @@ packages:
signal-exit: 3.0.2
dev: false
/write-json-file/2.3.0:
/write-json-file@2.3.0:
resolution: {integrity: sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=}
engines: {node: '>=4'}
dependencies:

View File

@@ -1,76 +1,77 @@
lockfileVersion: 5.4
specifiers:
is-negative: ^2.1.0
is-positive: ^3.1.0
write-json-file: ^2.2.0
lockfileVersion: '6.0'
dependencies:
write-json-file: 2.3.0
write-json-file:
specifier: ^2.2.0
version: 2.3.0
optionalDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
devDependencies:
is-positive: 3.1.0
is-positive:
specifier: ^3.1.0
version: 3.1.0
packages:
/detect-indent/5.0.0:
/detect-indent@5.0.0:
resolution: {integrity: sha1-OHHMCmoALow+Wzz38zYmRnXwa50=}
engines: {node: '>=4'}
dev: false
/graceful-fs/4.2.2:
/graceful-fs@4.2.2:
resolution: {integrity: sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==}
dev: false
/imurmurhash/0.1.4:
/imurmurhash@0.1.4:
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
engines: {node: '>=0.8.19'}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
optional: true
/is-plain-obj/1.1.0:
/is-plain-obj@1.1.0:
resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: true
/make-dir/1.3.0:
/make-dir@1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
dependencies:
pify: 3.0.0
dev: false
/pify/3.0.0:
/pify@3.0.0:
resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=}
engines: {node: '>=4'}
dev: false
/signal-exit/3.0.2:
/signal-exit@3.0.2:
resolution: {integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=}
dev: false
/sort-keys/2.0.0:
/sort-keys@2.0.0:
resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=}
engines: {node: '>=4'}
dependencies:
is-plain-obj: 1.1.0
dev: false
/write-file-atomic/2.4.3:
/write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
dependencies:
graceful-fs: 4.2.2
@@ -78,7 +79,7 @@ packages:
signal-exit: 3.0.2
dev: false
/write-json-file/2.3.0:
/write-json-file@2.3.0:
resolution: {integrity: sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=}
engines: {node: '>=4'}
dependencies:

View File

@@ -1,39 +1,41 @@
lockfileVersion: 5.3
specifiers:
is-negative: 1.0.0
is-positive: 1.0.0
minimatch: ^3.0.4
rimraf: 2.5.1
lockfileVersion: '6.0'
dependencies:
minimatch: 3.0.4
rimraf: 2.5.1
minimatch:
specifier: ^3.0.4
version: 3.0.4
rimraf:
specifier: 2.5.1
version: 2.5.1
optionalDependencies:
is-negative: 1.0.0
is-negative:
specifier: 1.0.0
version: 1.0.0
devDependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/glob/6.0.4:
/glob@6.0.4:
resolution: {integrity: sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=}
dependencies:
inflight: 1.0.6
@@ -43,52 +45,52 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.3:
/inherits@2.0.3:
resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
dev: false
/is-negative/1.0.0:
/is-negative@1.0.0:
resolution: {integrity: sha1-clmHeoPIAKwxkd17nZ+80PdS1P4=}
engines: {node: '>=0.10.0'}
dev: false
optional: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: true
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.5.1:
/rimraf@2.5.1:
resolution: {integrity: sha1-UuHpRvP5ubDV2JiLoxkaryotvUM=}
hasBin: true
dependencies:
glob: 6.0.4
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,7 +1,6 @@
lockfileVersion: 5.3
specifiers:
general: 0.0.0
lockfileVersion: '6.0'
dependencies:
general: link:../general
general:
specifier: 0.0.0
version: link:../general

View File

@@ -1,39 +1,41 @@
lockfileVersion: 5.4
specifiers:
is-negative: 1.0.0
is-positive: 1.0.0
minimatch: ^3.0.4
rimraf: 2.5.1
lockfileVersion: '6.0'
dependencies:
minimatch: 3.0.4
rimraf: 2.5.1
minimatch:
specifier: ^3.0.4
version: 3.0.4
rimraf:
specifier: 2.5.1
version: 2.5.1
optionalDependencies:
is-negative: 1.0.0
is-negative:
specifier: 1.0.0
version: 1.0.0
devDependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.8:
/brace-expansion@1.1.8:
resolution: {integrity: sha1-wHshHHyVLsH479Uad+8NHTmQopI=}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/glob/6.0.4:
/glob@6.0.4:
resolution: {integrity: sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=}
dependencies:
inflight: 1.0.6
@@ -43,53 +45,53 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.3:
/inherits@2.0.3:
resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
dev: false
/is-negative/1.0.0:
/is-negative@1.0.0:
resolution: {integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
optional: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: true
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.8
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.5.1:
/rimraf@2.5.1:
resolution: {integrity: sha1-UuHpRvP5ubDV2JiLoxkaryotvUM=}
hasBin: true
dependencies:
glob: 6.0.4
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,23 +1,23 @@
lockfileVersion: 5.4
specifiers:
is-negative: ^1.0.0
is-positive: ^1.0.0
lockfileVersion: '6.0'
dependencies:
is-negative: 1.0.1
is-negative:
specifier: ^1.0.0
version: 1.0.1
devDependencies:
is-positive: 1.0.0
is-positive:
specifier: ^1.0.0
version: 1.0.0
packages:
/is-negative/1.0.1:
/is-negative@1.0.1:
resolution: {integrity: sha1-3GuHKO69A8db+HYIftzVDpy1aZQ=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: true

View File

@@ -1,23 +1,23 @@
lockfileVersion: 5.4
specifiers:
is-negative: ^1.0.0
is-positive: ^1.0.0
lockfileVersion: '6.0'
dependencies:
is-negative: 1.0.1
is-negative:
specifier: ^1.0.0
version: 1.0.1
devDependencies:
is-positive: 1.0.0
is-positive:
specifier: ^1.0.0
version: 1.0.0
packages:
/is-negative/1.0.1:
/is-negative@1.0.1:
resolution: {integrity: sha1-3GuHKO69A8db+HYIftzVDpy1aZQ=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: true

View File

@@ -1,31 +1,31 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/deprecated': 1.0.0
is-negative: ^1.0.0
is-positive: ^1.0.0
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/deprecated': 1.0.0
is-negative: 1.0.0
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^1.0.0
version: 1.0.0
devDependencies:
is-positive: 1.0.0
is-positive:
specifier: ^1.0.0
version: 1.0.0
packages:
/@pnpm.e2e/deprecated/1.0.0:
/@pnpm.e2e/deprecated@1.0.0:
resolution: {integrity: sha512-oidipeQzM+eKHKOmDnruTG7wP+jySQAxskX54lMYTeaq1rBjC+G1u+l3TolCKShyyOz73mO2N9laBqyFB06t6A==}
deprecated: This package is deprecated. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
dev: false
/is-negative/1.0.0:
/is-negative@1.0.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: true

View File

@@ -1,31 +1,31 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/deprecated': 1.0.0
is-negative: ^2.1.0
is-positive: ^3.1.0
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/deprecated': 1.0.0
is-negative: 2.1.0
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
devDependencies:
is-positive: 3.1.0
is-positive:
specifier: ^3.1.0
version: 3.1.0
packages:
/@pnpm.e2e/deprecated/1.0.0:
/@pnpm.e2e/deprecated@1.0.0:
resolution: {integrity: sha512-oidipeQzM+eKHKOmDnruTG7wP+jySQAxskX54lMYTeaq1rBjC+G1u+l3TolCKShyyOz73mO2N9laBqyFB06t6A==}
deprecated: This package is deprecated. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: true

View File

@@ -1,14 +1,13 @@
lockfileVersion: 5.4
specifiers:
positive: npm:is-positive@1.0.0
lockfileVersion: '6.0'
dependencies:
positive: /is-positive/1.0.0
positive:
specifier: npm:is-positive@1.0.0
version: /is-positive@1.0.0
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,16 +1,16 @@
lockfileVersion: 5.4
specifiers:
general: link:../general
is-positive: ^3.1.0
lockfileVersion: '6.0'
dependencies:
general: link:../general
is-positive: 3.1.0
general:
specifier: link:../general
version: link:../general
is-positive:
specifier: ^3.1.0
version: 3.1.0
packages:
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,10 +1,9 @@
lockfileVersion: 5.4
specifiers:
camelcase: denolib/camelcase#aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b
lockfileVersion: '6.0'
dependencies:
camelcase: github.com/denolib/camelcase/aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b
camelcase:
specifier: denolib/camelcase#aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b
version: github.com/denolib/camelcase/aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b
packages:

View File

@@ -1,16 +1,16 @@
lockfileVersion: 5.4
specifiers:
ajv: ^6.10.2
ajv-keywords: ^3.4.1
lockfileVersion: '6.0'
dependencies:
ajv: 6.10.2
ajv-keywords: 3.4.1_ajv@6.10.2
ajv:
specifier: ^6.10.2
version: 6.10.2
ajv-keywords:
specifier: ^3.4.1
version: 3.4.1(ajv@6.10.2)
packages:
/ajv-keywords/3.4.1_ajv@6.10.2:
/ajv-keywords@3.4.1(ajv@6.10.2):
resolution: {integrity: sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==}
peerDependencies:
ajv: ^6.9.1
@@ -18,7 +18,7 @@ packages:
ajv: 6.10.2
dev: false
/ajv/6.10.2:
/ajv@6.10.2:
resolution: {integrity: sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==}
dependencies:
fast-deep-equal: 2.0.1
@@ -27,24 +27,24 @@ packages:
uri-js: 4.2.2
dev: false
/fast-deep-equal/2.0.1:
/fast-deep-equal@2.0.1:
resolution: {integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=}
dev: false
/fast-json-stable-stringify/2.0.0:
/fast-json-stable-stringify@2.0.0:
resolution: {integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=}
dev: false
/json-schema-traverse/0.4.1:
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
dev: false
/punycode/2.1.1:
/punycode@2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
dev: false
/uri-js/4.2.2:
/uri-js@4.2.2:
resolution: {integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==}
dependencies:
punycode: 2.1.1

View File

@@ -1,21 +1,21 @@
lockfileVersion: 5.4
specifiers:
is-negative: 1.0.0
is-positive: 1.0.0
lockfileVersion: '6.0'
dependencies:
is-negative: 1.0.0
is-positive: 1.0.0
is-negative:
specifier: 1.0.0
version: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/is-negative/1.0.0:
/is-negative@1.0.0:
resolution: {integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,50 +1,49 @@
lockfileVersion: 5.4
specifiers:
symlink-dir: 2.0.2
lockfileVersion: '6.0'
dependencies:
symlink-dir: 2.0.2
symlink-dir:
specifier: 2.0.2
version: 2.0.2
packages:
/@types/mz/0.0.32:
/@types/mz@0.0.32:
resolution: {integrity: sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==}
dependencies:
'@types/node': 10.12.9
dev: false
/@types/node/10.12.9:
/@types/node@10.12.9:
resolution: {integrity: sha512-eajkMXG812/w3w4a1OcBlaTwsFPO5F7fJ/amy+tieQxEMWBlbV1JGSjkFM+zkHNf81Cad+dfIRA+IBkvmvdAeA==}
dev: false
/any-promise/1.3.0:
/any-promise@1.3.0:
resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=}
dev: false
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/define-properties/1.1.3:
/define-properties@1.1.3:
resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==}
engines: {node: '>= 0.4'}
dependencies:
object-keys: 1.0.12
dev: false
/es-abstract/1.12.0:
/es-abstract@1.12.0:
resolution: {integrity: sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==}
engines: {node: '>= 0.4'}
dependencies:
@@ -55,7 +54,7 @@ packages:
is-regex: 1.0.4
dev: false
/es-to-primitive/1.2.0:
/es-to-primitive@1.2.0:
resolution: {integrity: sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==}
engines: {node: '>= 0.4'}
dependencies:
@@ -64,15 +63,15 @@ packages:
is-symbol: 1.0.2
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/function-bind/1.1.1:
/function-bind@1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: false
/glob/7.1.3:
/glob@7.1.3:
resolution: {integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==}
dependencies:
fs.realpath: 1.0.0
@@ -83,87 +82,87 @@ packages:
path-is-absolute: 1.0.1
dev: false
/graceful-fs/4.1.15:
/graceful-fs@4.1.15:
resolution: {integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==}
dev: false
/has-symbols/1.0.0:
/has-symbols@1.0.0:
resolution: {integrity: sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=}
engines: {node: '>= 0.4'}
dev: false
/has/1.0.3:
/has@1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.3:
/inherits@2.0.3:
resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
dev: false
/is-callable/1.1.4:
/is-callable@1.1.4:
resolution: {integrity: sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==}
engines: {node: '>= 0.4'}
dev: false
/is-date-object/1.0.1:
/is-date-object@1.0.1:
resolution: {integrity: sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=}
engines: {node: '>= 0.4'}
dev: false
/is-regex/1.0.4:
/is-regex@1.0.4:
resolution: {integrity: sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=}
engines: {node: '>= 0.4'}
dependencies:
has: 1.0.3
dev: false
/is-symbol/1.0.2:
/is-symbol@1.0.2:
resolution: {integrity: sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==}
engines: {node: '>= 0.4'}
dependencies:
has-symbols: 1.0.0
dev: false
/is-windows/1.0.2:
/is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
dev: false
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
/minimist/0.0.8:
/minimist@0.0.8:
resolution: {integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=}
dev: false
/mkdirp-promise/5.0.1:
/mkdirp-promise@5.0.1:
resolution: {integrity: sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=}
engines: {node: '>=4'}
dependencies:
mkdirp: 0.5.1
dev: false
/mkdirp/0.5.1:
/mkdirp@0.5.1:
resolution: {integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=}
hasBin: true
dependencies:
minimist: 0.0.8
dev: false
/mz/2.7.0:
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
any-promise: 1.3.0
@@ -171,17 +170,17 @@ packages:
thenify-all: 1.6.0
dev: false
/object-assign/4.1.1:
/object-assign@4.1.1:
resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
engines: {node: '>=0.10.0'}
dev: false
/object-keys/1.0.12:
/object-keys@1.0.12:
resolution: {integrity: sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==}
engines: {node: '>= 0.4'}
dev: false
/object.getownpropertydescriptors/2.0.3:
/object.getownpropertydescriptors@2.0.3:
resolution: {integrity: sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=}
engines: {node: '>= 0.8'}
dependencies:
@@ -189,13 +188,13 @@ packages:
es-abstract: 1.12.0
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
@@ -209,14 +208,14 @@ packages:
util.promisify: 1.0.0
dev: false
/rimraf/2.6.2:
/rimraf@2.6.2:
resolution: {integrity: sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==}
hasBin: true
dependencies:
glob: 7.1.3
dev: false
/symlink-dir/2.0.2:
/symlink-dir@2.0.2:
resolution: {integrity: sha512-jMqXkCcBVvpdyJKt8BLCp7FVIywe4sfEOL6Ugm1LpUGiwJzdj9q3ld/ECYV+seT/ly6duG0koT6d6jZbcSQ9mg==}
engines: {node: '>=6'}
hasBin: true
@@ -230,26 +229,26 @@ packages:
rename-overwrite: 1.0.3
dev: false
/thenify-all/1.6.0:
/thenify-all@1.6.0:
resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=}
engines: {node: '>=0.8'}
dependencies:
thenify: 3.3.0
dev: false
/thenify/3.3.0:
/thenify@3.3.0:
resolution: {integrity: sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=}
dependencies:
any-promise: 1.3.0
dev: false
/util.promisify/1.0.0:
/util.promisify@1.0.0:
resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==}
dependencies:
define-properties: 1.1.3
object.getownpropertydescriptors: 2.0.3
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,43 +1,45 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers:
is-positive: 1.0.0
dependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/f:
specifiers:
is-negative: 1.0.0
is-positive: 1.0.0
dependencies:
is-negative: 1.0.0
is-positive: 1.0.0
is-negative:
specifier: 1.0.0
version: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/g:
specifiers:
'@pnpm.e2e/external-depend-on-internal-dep': 1.0.0
is-positive: 1.0.0
dependencies:
'@pnpm.e2e/external-depend-on-internal-dep': 1.0.0
is-positive: 1.0.0
'@pnpm.e2e/external-depend-on-internal-dep':
specifier: 1.0.0
version: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/@pnpm.e2e/external-depend-on-internal-dep/1.0.0:
/@pnpm.e2e/external-depend-on-internal-dep@1.0.0:
resolution: {integrity: sha512-UPhSnFgg3p1acuOcuWgunypA7tTqhVCBUUC4laNotJw1RUbTldprdLJmrhOvGylvw4VBipHnXPm/y9wTIAf53A==}
dependencies:
'@pnpm.e2e/internal-f': link:packages/f
dev: false
/is-negative/1.0.0:
/is-negative@1.0.0:
resolution: {integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==}
engines: {node: '>=0.10.0'}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,19 +1,24 @@
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/bar:
dependencies:
is-positive: 1.0.0
specifiers:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/foo:
dependencies:
is-positive: 1.0.0
specifiers:
is-positive: 1.0.0
lockfileVersion: 5.1
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
dev: false
engines:
node: '>=0.10.0'

View File

@@ -1,16 +1,20 @@
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/bar:
dependencies:
is-positive: 3.1.0
specifiers:
is-positive: 3.1.0
packages/foo:
specifiers: {}
lockfileVersion: 5.2
is-positive:
specifier: 3.1.0
version: 3.1.0
packages/foo: {}
packages:
/is-positive/3.1.0:
/is-positive@3.1.0:
dev: false
engines:
node: '>=0.10.0'

View File

@@ -1,6 +1,6 @@
{
"name": "foo",
"dependencies": {
"ajv": "^6.12.5"
"ajv": "^6.12.6"
}
}

View File

@@ -1,25 +1,24 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/bar:
specifiers:
ajv: ^6.10.2
dependencies:
ajv: 6.10.2
ajv:
specifier: ^6.10.2
version: 6.10.2
packages/foo:
specifiers:
ajv: ^6.12.5
dependencies:
ajv: 6.12.6
ajv:
specifier: ^6.12.6
version: 6.12.6
packages:
/ajv/6.10.2:
/ajv@6.10.2:
resolution: {integrity: sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==}
dependencies:
fast-deep-equal: 2.0.1
@@ -28,7 +27,7 @@ packages:
uri-js: 4.2.2
dev: false
/ajv/6.12.6:
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies:
fast-deep-equal: 3.1.3
@@ -37,43 +36,43 @@ packages:
uri-js: 4.4.1
dev: false
/fast-deep-equal/2.0.1:
/fast-deep-equal@2.0.1:
resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==}
dev: false
/fast-deep-equal/3.1.3:
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: false
/fast-json-stable-stringify/2.0.0:
/fast-json-stable-stringify@2.0.0:
resolution: {integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=}
dev: false
/fast-json-stable-stringify/2.1.0:
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
dev: false
/json-schema-traverse/0.4.1:
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
dev: false
/punycode/2.1.1:
/punycode@2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
dev: false
/punycode/2.3.0:
/punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
dev: false
/uri-js/4.2.2:
/uri-js@4.2.2:
resolution: {integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==}
dependencies:
punycode: 2.1.1
dev: false
/uri-js/4.4.1:
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.3.0

View File

@@ -1,41 +1,40 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/bar:
specifiers:
uri-js: '=4.2.2'
dependencies:
uri-js: 4.2.2
uri-js:
specifier: '=4.2.2'
version: 4.2.2
packages/foo:
specifiers:
uri-js: '=4.4.1'
dependencies:
uri-js: 4.4.1
uri-js:
specifier: '=4.4.1'
version: 4.4.1
packages:
/punycode/2.1.1:
/punycode@2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
dev: false
/punycode/2.3.0:
/punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
dev: false
/uri-js/4.2.2:
/uri-js@4.2.2:
resolution: {integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==}
dependencies:
punycode: 2.1.1
dev: false
/uri-js/4.4.1:
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.3.0

View File

@@ -1,33 +1,33 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers:
'@scope/a': workspace:*
dependencies:
'@scope/a': link:packages/a
'@scope/a':
specifier: workspace:*
version: link:packages/a
packages/a:
specifiers:
'@scope/b': workspace:*
dependencies:
'@scope/b': link:../b
'@scope/b':
specifier: workspace:*
version: link:../b
packages/b:
specifiers:
'@scope/c': workspace:*
is-positive: 1.0.0
dependencies:
'@scope/c': link:../c
is-positive: 1.0.0
'@scope/c':
specifier: workspace:*
version: link:../c
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/c:
specifiers: {}
packages/c: {}
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,25 +1,24 @@
lockfileVersion: 5.3
lockfileVersion: '6.0'
importers:
.:
specifiers: {}
.: {}
packages/private:
specifiers:
is-positive: 1.0.0
dependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages/public:
specifiers:
is-positive: 1.0.0
dependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -1,7 +1,7 @@
import path from 'path'
import { assertStore } from '@pnpm/assert-store'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { Lockfile, ProjectSnapshot } from '@pnpm/lockfile-types'
import { LockfileV6 as Lockfile, ProjectSnapshotV6 as ProjectSnapshot } from '@pnpm/lockfile-types'
import { Modules, readModulesManifest } from '@pnpm/modules-yaml'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import readYamlFile from 'read-yaml-file'

View File

@@ -1,14 +1,13 @@
lockfileVersion: 5.4
specifiers:
is-positive: 3.1.0
lockfileVersion: '6.0'
dependencies:
is-positive: 3.1.0
is-positive:
specifier: 3.1.0
version: 3.1.0
packages:
/is-positive/3.1.0:
/is-positive@3.1.0:
resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -180,7 +180,7 @@ export async function getConfig (
}
const rcOptionsTypes = { ...types, ...opts.rcOptionsTypes }
const { config: npmConfig, warnings, failedToLoadBuiltInConfig } = loadNpmConf(cliOptions, rcOptionsTypes, {
'auto-install-peers': false,
'auto-install-peers': true,
bail: true,
color: 'auto',
'enable-modules-dir': true,
@@ -217,8 +217,9 @@ export async function getConfig (
'recursive-install': true,
registry: npmDefaults.registry,
'resolution-mode': 'highest',
'resolve-peers-from-workspace-root': true,
'save-peer': false,
'save-workspace-protocol': true,
'save-workspace-protocol': 'rolling',
'scripts-prepend-node-path': false,
'side-effects-cache': true,
symlink: true,
@@ -229,6 +230,7 @@ export async function getConfig (
'strict-peer-dependencies': false,
'unsafe-perm': npmDefaults['unsafe-perm'],
'use-beta-cli': false,
'use-lockfile-v6': true,
'use-inline-specifiers-lockfile-format': false,
userconfig: npmDefaults.userconfig,
'verify-store-integrity': true,

View File

@@ -23,6 +23,29 @@ export interface ProjectSnapshot {
publishDirectory?: string
}
export interface LockfileV6 {
importers: Record<string, ProjectSnapshotV6>
lockfileVersion: number | string
time?: Record<string, string>
packages?: PackageSnapshots
neverBuiltDependencies?: string[]
onlyBuiltDependencies?: string[]
overrides?: Record<string, string>
packageExtensionsChecksum?: string
patchedDependencies?: Record<string, PatchFile>
}
export interface ProjectSnapshotV6 {
specifiers: ResolvedDependenciesOfImporters
dependencies?: ResolvedDependenciesOfImporters
optionalDependencies?: ResolvedDependenciesOfImporters
devDependencies?: ResolvedDependenciesOfImporters
dependenciesMeta?: DependenciesMeta
publishDirectory?: string
}
export type ResolvedDependenciesOfImporters = Record<string, { version: string, specifier: string }>
export interface PackageSnapshots {
[packagePath: string]: PackageSnapshot
}

View File

@@ -1036,6 +1036,10 @@ exports[`plugin-commands-audit audit --audit-level 1`] = `
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-896r-f27r-55mw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -1118,6 +1122,9 @@ exports[`plugin-commands-audit audit --audit-level 1`] = `
│ │ . > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > │
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-v88g-cgmw-v5xw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -2265,6 +2272,10 @@ exports[`plugin-commands-audit audit 1`] = `
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-896r-f27r-55mw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -2347,6 +2358,9 @@ exports[`plugin-commands-audit audit 1`] = `
│ │ . > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > │
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-v88g-cgmw-v5xw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -3395,6 +3409,10 @@ exports[`plugin-commands-audit audit: CVEs in ignoreCves do not show up 1`] = `
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ http-signature@1.2.0 > jsprim@1.4.1 > │
│ │ json-schema@0.2.3 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-896r-f27r-55mw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -3477,6 +3495,9 @@ exports[`plugin-commands-audit audit: CVEs in ignoreCves do not show up 1`] = `
│ │ . > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > │
│ │ requestretry@1.13.0 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
│ │ │
│ │ . > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > │
│ │ har-validator@5.1.3 > ajv@6.10.2 │
├─────────────────────┼────────────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-v88g-cgmw-v5xw │
└─────────────────────┴────────────────────────────────────────────────────────┘
@@ -4922,7 +4943,8 @@ exports[`plugin-commands-audit audit: CVEs in ignoreCves do not show up when JSO
"paths": [
". > karma@2.0.5 > log4js@2.11.0 > hipchat-notifier@1.1.0 > request@2.88.0 > http-signature@1.2.0 > jsprim@1.4.1 > json-schema@0.2.3",
". > karma@2.0.5 > log4js@2.11.0 > loggly@1.1.1 > request@2.75.0 > http-signature@1.1.1 > jsprim@1.4.1 > json-schema@0.2.3",
". > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > requestretry@1.13.0 > request@2.88.0 > http-signature@1.2.0 > jsprim@1.4.1 > json-schema@0.2.3"
". > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > requestretry@1.13.0 > request@2.88.0 > http-signature@1.2.0 > jsprim@1.4.1 > json-schema@0.2.3",
". > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > http-signature@1.2.0 > jsprim@1.4.1 > json-schema@0.2.3"
]
}
],
@@ -5338,7 +5360,8 @@ exports[`plugin-commands-audit audit: CVEs in ignoreCves do not show up when JSO
"version": "6.10.2",
"paths": [
". > karma@2.0.5 > log4js@2.11.0 > hipchat-notifier@1.1.0 > request@2.88.0 > har-validator@5.1.3 > ajv@6.10.2",
". > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > requestretry@1.13.0 > request@2.88.0 > har-validator@5.1.3 > ajv@6.10.2"
". > karma@2.0.5 > log4js@2.11.0 > slack-node@0.2.0 > requestretry@1.13.0 > request@2.88.0 > har-validator@5.1.3 > ajv@6.10.2",
". > karma@2.0.5 > useragent@2.2.1 > request@2.88.0 > har-validator@5.1.3 > ajv@6.10.2"
]
}
],

View File

File diff suppressed because it is too large Load Diff

View File

@@ -105,6 +105,10 @@ export function parse (dependencyPath: string) {
const parts = dependencyPath.split('/')
if (!_isAbsolute) parts.shift()
const host = _isAbsolute ? parts.shift() : undefined
if (parts.length === 0) return {
host,
isAbsolute: _isAbsolute,
}
const name = parts[0].startsWith('@')
? `${parts.shift()}/${parts.shift()}` // eslint-disable-line @typescript-eslint/restrict-template-expressions
: parts.shift()

View File

@@ -99,6 +99,11 @@ test('parse()', () => {
})
expect(() => parse('/foo/bar')).toThrow(/\/foo\/bar is an invalid relative dependency path/)
expect(parse('file:project(foo@1.0.0)')).toStrictEqual({
host: 'file:project(foo@1.0.0)',
isAbsolute: true,
})
})
test('refToAbsolute()', () => {

View File

@@ -1,28 +1,29 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
importers:
.:
specifiers:
'@zkochan/git-config': 0.1.0
is-positive: 1.0.0
dependencies:
'@zkochan/git-config': 0.1.0
is-positive: 1.0.0
'@zkochan/git-config':
specifier: 0.1.0
version: 0.1.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/@zkochan/git-config/0.1.0:
/@zkochan/git-config@0.1.0:
resolution: {integrity: sha1-lHdoOUuwyBsfrnA+/pjQDYyXl+A=}
dependencies:
ini: 1.3.8
dev: false
/ini/1.3.8:
/ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false

View File

@@ -75,6 +75,7 @@
"@pnpm/client": "workspace:*",
"@pnpm/core": "workspace:*",
"@pnpm/git-utils": "workspace:*",
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/package-store": "workspace:*",
"@pnpm/prepare": "workspace:*",
"@pnpm/registry-mock": "3.3.0",

View File

@@ -137,7 +137,7 @@ const defaults = async (opts: InstallOptions) => {
return {
allowedDeprecatedVersions: {},
allowNonAppliedPatches: false,
autoInstallPeers: false,
autoInstallPeers: true,
childConcurrency: 5,
depth: 0,
enablePnp: false,
@@ -179,7 +179,7 @@ const defaults = async (opts: InstallOptions) => {
rawConfig: {},
registries: DEFAULT_REGISTRIES,
resolutionMode: 'highest',
saveWorkspaceProtocol: true,
saveWorkspaceProtocol: 'rolling',
lockfileIncludeTarballUrl: false,
scriptsPrependNodePath: false,
shamefullyHoist: false,
@@ -197,6 +197,7 @@ const defaults = async (opts: InstallOptions) => {
process.getuid() !== 0,
update: false,
useLockfile: true,
useLockfileV6: true,
saveLockfile: true,
useGitBranchLockfile: false,
useInlineSpecifiersLockfileFormat: false,
@@ -207,8 +208,8 @@ const defaults = async (opts: InstallOptions) => {
enableModulesDir: true,
modulesCacheMaxAge: 7 * 24 * 60,
resolveSymlinksInInjectedDirs: false,
dedupeDirectDeps: false,
resolvePeersFromWorkspaceRoot: false,
dedupeDirectDeps: true,
resolvePeersFromWorkspaceRoot: true,
extendNodePath: true,
} as StrictInstallOptions
}

View File

@@ -25,7 +25,7 @@ test('installation breaks if the lockfile contains the wrong checksum', async ()
const corruptedLockfile = await project.readLockfile()
const correctLockfile = clone(corruptedLockfile)
// breaking the lockfile
;(corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity = (corruptedLockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity
;(corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity = (corruptedLockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity
await writeYamlFile(WANTED_LOCKFILE, corruptedLockfile, { lineWidth: 1000 })
await expect(mutateModulesInSingleProject({
@@ -68,9 +68,9 @@ test('installation breaks if the lockfile contains the wrong checksum and the st
)
const corruptedLockfile = await project.readLockfile()
const correctIntegrity = (corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity
const correctIntegrity = (corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity
// breaking the lockfile
;(corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity = 'sha512-pl8WtlGAnoIQ7gPxT187/YwhKRnsFBR4h0YY+v0FPQjT5WPuZbI9dPRaKWgKBFOqWHylJ8EyPy34V5u9YArfng=='
;(corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity = 'sha512-pl8WtlGAnoIQ7gPxT187/YwhKRnsFBR4h0YY+v0FPQjT5WPuZbI9dPRaKWgKBFOqWHylJ8EyPy34V5u9YArfng=='
await writeYamlFile(WANTED_LOCKFILE, corruptedLockfile, { lineWidth: 1000 })
await expect(
@@ -89,7 +89,7 @@ test('installation breaks if the lockfile contains the wrong checksum and the st
{
const lockfile = await project.readLockfile()
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity).toBe(correctIntegrity)
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity).toBe(correctIntegrity)
}
// Breaking the lockfile again
@@ -112,6 +112,6 @@ test('installation breaks if the lockfile contains the wrong checksum and the st
}))
{
const lockfile = await project.readLockfile()
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).integrity).toBe(correctIntegrity)
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).integrity).toBe(correctIntegrity)
}
})

View File

@@ -101,9 +101,9 @@ test('uninstall package with dependencies and do not touch other deps', async ()
const lockfile = await project.readLockfile()
expect(lockfile.dependencies).toStrictEqual({
'is-negative': '2.1.0',
})
expect(lockfile.specifiers).toStrictEqual({
'is-negative': '2.1.0',
'is-negative': {
specifier: '2.1.0',
version: '2.1.0',
},
})
})

View File

@@ -1,4 +1,4 @@
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION } from '@pnpm/constants'
import { prepareEmpty } from '@pnpm/prepare'
import { addDistTag, getIntegrity } from '@pnpm/registry-mock'
import { addDependenciesToPackage } from '@pnpm/core'
@@ -14,12 +14,18 @@ test('installing aliased dependency', async () => {
expect(await project.readLockfile()).toStrictEqual({
dependencies: {
negative: '/is-negative/1.0.0',
positive: '/is-positive/3.1.0',
negative: {
specifier: 'npm:is-negative@1.0.0',
version: '/is-negative@1.0.0',
},
positive: {
specifier: 'npm:is-positive@^3.1.0',
version: '/is-positive@3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative/1.0.0': {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -28,7 +34,7 @@ test('installing aliased dependency', async () => {
integrity: 'sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==',
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -38,10 +44,6 @@ test('installing aliased dependency', async () => {
},
},
},
specifiers: {
negative: 'npm:is-negative@1.0.0',
positive: 'npm:is-positive@^3.1.0',
},
})
})
@@ -69,19 +71,22 @@ test('a dependency has an aliased subdependency', async () => {
expect(await project.readLockfile()).toStrictEqual({
dependencies: {
'@pnpm.e2e/pkg-with-1-aliased-dep': '100.0.0',
'@pnpm.e2e/pkg-with-1-aliased-dep': {
specifier: '^100.0.0',
version: '100.0.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0': {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'),
},
},
'/@pnpm.e2e/pkg-with-1-aliased-dep/100.0.0': {
'/@pnpm.e2e/pkg-with-1-aliased-dep@100.0.0': {
dependencies: {
dep: '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0',
dep: '/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0',
},
dev: false,
resolution: {
@@ -89,9 +94,6 @@ test('a dependency has an aliased subdependency', async () => {
},
},
},
specifiers: {
'@pnpm.e2e/pkg-with-1-aliased-dep': '^100.0.0',
},
})
})

View File

@@ -4,7 +4,7 @@ import { addDependenciesToPackage, install, mutateModules, mutateModulesInSingle
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import rimraf from '@zkochan/rimraf'
import { createPeersFolderSuffix } from '@pnpm/dependency-path'
import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path'
import { testDefaults } from '../utils'
test('auto install non-optional peer dependencies', async () => {
@@ -13,8 +13,8 @@ test('auto install non-optional peer dependencies', async () => {
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers@1.0.0'], await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/abc-optional-peers/1.0.0_@pnpm.e2e+peer-a@1.0.0',
'/@pnpm.e2e/peer-a/1.0.0',
'/@pnpm.e2e/abc-optional-peers@1.0.0(@pnpm.e2e/peer-a@1.0.0)',
'/@pnpm.e2e/peer-a@1.0.0',
])
await project.hasNot('@pnpm.e2e/peer-a')
})
@@ -25,9 +25,9 @@ test('auto install the common peer dependency', async () => {
await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-1.0.0'], await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/peer-c/1.0.0',
'/@pnpm.e2e/wants-peer-c-1.0.0/1.0.0_@pnpm.e2e+peer-c@1.0.0',
'/@pnpm.e2e/wants-peer-c-1/1.0.0_@pnpm.e2e+peer-c@1.0.0',
'/@pnpm.e2e/peer-c@1.0.0',
'/@pnpm.e2e/wants-peer-c-1.0.0@1.0.0(@pnpm.e2e/peer-c@1.0.0)',
'/@pnpm.e2e/wants-peer-c-1@1.0.0(@pnpm.e2e/peer-c@1.0.0)',
])
})
@@ -36,8 +36,8 @@ test('do not auto install when there is no common peer dependency range intersec
await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-2'], await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/wants-peer-c-1/1.0.0',
'/@pnpm.e2e/wants-peer-c-2/1.0.0',
'/@pnpm.e2e/wants-peer-c-1@1.0.0',
'/@pnpm.e2e/wants-peer-c-2@1.0.0',
])
})
@@ -73,15 +73,15 @@ test('hoist a peer dependency in order to reuse it by other dependencies, when i
const lockfile = await project.readLockfile()
const suffix = createPeersFolderSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }])
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm/x/1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent/1.0.0${suffix}`,
'/@pnpm/xyz-parent-parent-with-xyz/1.0.0',
`/@pnpm/xyz-parent-parent/1.0.0${suffix}`,
`/@pnpm/xyz-parent/1.0.0${suffix}`,
`/@pnpm/xyz/1.0.0${suffix}`,
'/@pnpm/y/1.0.0',
'/@pnpm/z/1.0.0',
'/@pnpm/x@1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent@1.0.0${suffix}`,
'/@pnpm/xyz-parent-parent-with-xyz@1.0.0',
`/@pnpm/xyz-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent@1.0.0${suffix}`,
`/@pnpm/xyz@1.0.0${suffix}`,
'/@pnpm/y@1.0.0',
'/@pnpm/z@1.0.0',
])
})
@@ -97,19 +97,19 @@ test('don\'t hoist a peer dependency when there is a root dependency by that nam
const suffix1 = createPeersFolderSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }])
const suffix2 = createPeersFolderSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }])
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
'/@pnpm.e2e/peer-a/1.0.0',
'/@pnpm/x/1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix1}`,
`/@pnpm/xyz-parent-parent-parent/1.0.0${suffix1}`,
'/@pnpm/xyz-parent-parent-with-xyz/1.0.0',
`/@pnpm/xyz-parent-parent/1.0.0${suffix1}`,
`/@pnpm/xyz-parent/1.0.0${suffix1}`,
`/@pnpm/xyz-parent/1.0.0${suffix2}`,
`/@pnpm/xyz/1.0.0${suffix1}`,
`/@pnpm/xyz/1.0.0${suffix2}`,
'/@pnpm/y/1.0.0',
'/@pnpm/y/2.0.0',
'/@pnpm/z/1.0.0',
'/@pnpm.e2e/peer-a@1.0.0',
'/@pnpm/x@1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix1}`,
`/@pnpm/xyz-parent-parent-parent@1.0.0${suffix1}`,
'/@pnpm/xyz-parent-parent-with-xyz@1.0.0',
`/@pnpm/xyz-parent-parent@1.0.0${suffix1}`,
`/@pnpm/xyz-parent@1.0.0${suffix1}`,
`/@pnpm/xyz-parent@1.0.0${suffix2}`,
`/@pnpm/xyz@1.0.0${suffix1}`,
`/@pnpm/xyz@1.0.0${suffix2}`,
'/@pnpm/y@1.0.0',
'/@pnpm/y@2.0.0',
'/@pnpm/z@1.0.0',
].sort())
})
@@ -123,14 +123,14 @@ test('don\'t auto-install a peer dependency, when that dependency is in the root
const lockfile = await project.readLockfile()
const suffix = createPeersFolderSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }])
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
`/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent/1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent/1.0.0${suffix}`,
`/@pnpm/xyz-parent/1.0.0${suffix}`,
`/@pnpm/xyz/1.0.0${suffix}`,
'/@pnpm/y/2.0.0',
'/@pnpm/z/1.0.0',
'/@pnpm.e2e/peer-a/1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent@1.0.0${suffix}`,
`/@pnpm/xyz@1.0.0${suffix}`,
'/@pnpm/y@2.0.0',
'/@pnpm/z@1.0.0',
'/@pnpm.e2e/peer-a@1.0.0',
].sort())
})
@@ -142,9 +142,9 @@ test('don\'t install the same missing peer dependency twice', async () => {
], await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
'/@pnpm/y/1.0.0',
`/@pnpm.e2e/has-has-y-peer-peer/1.0.0${createPeersFolderSuffix([{ name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm.e2e/has-y-peer', version: '1.0.0' }])}`,
'/@pnpm.e2e/has-y-peer/1.0.0_@pnpm+y@1.0.0',
'/@pnpm/y@1.0.0',
`/@pnpm.e2e/has-has-y-peer-peer@1.0.0${createPeersFolderSuffix([{ name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm.e2e/has-y-peer', version: '1.0.0' }])}`,
'/@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0)',
].sort())
})
@@ -160,8 +160,8 @@ test('prefer the peer dependency version already used in the root', async () =>
}, await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
'/@pnpm/y/1.0.0',
'/@pnpm.e2e/has-y-peer/1.0.0_@pnpm+y@1.0.0',
'/@pnpm/y@1.0.0',
'/@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0)',
].sort())
})
@@ -175,20 +175,22 @@ test('automatically install root peer dependencies', async () => {
peerDependencies: {
'is-positive': '^1.0.0',
},
}, await testDefaults({ autoInstallPeers: true }))
}, await testDefaults({ autoInstallPeers: true, resolutionMode: 'lowest-direct' }))
await project.has('is-positive')
await project.has('is-negative')
{
const lockfile = await project.readLockfile()
expect(lockfile.specifiers).toStrictEqual({
'is-positive': '^1.0.0',
'is-negative': '^1.0.0',
})
expect(lockfile.dependencies).toStrictEqual({
'is-positive': '1.0.0',
'is-negative': '1.0.1',
'is-positive': {
specifier: '^1.0.0',
version: '1.0.0',
},
'is-negative': {
specifier: '^1.0.0',
version: '1.0.0',
},
})
}
@@ -201,22 +203,26 @@ test('automatically install root peer dependencies', async () => {
await project.has('is-negative')
// The auto installed peer is not removed when a new dependency is added
manifest = await addDependenciesToPackage(manifest, ['is-odd@1.0.0'], await testDefaults({ autoInstallPeers: true }))
manifest = await addDependenciesToPackage(manifest, ['is-odd@1.0.0'], await testDefaults({ autoInstallPeers: true, resolutionMode: 'lowest-direct' }))
await project.has('is-odd')
await project.has('is-positive')
await project.has('is-negative')
{
const lockfile = await project.readLockfile()
expect(lockfile.specifiers).toStrictEqual({
'is-odd': '1.0.0',
'is-positive': '^1.0.0',
'is-negative': '^1.0.0',
})
expect(lockfile.dependencies).toStrictEqual({
'is-odd': '1.0.0',
'is-positive': '1.0.0',
'is-negative': '1.0.1',
'is-odd': {
specifier: '1.0.0',
version: '1.0.0',
},
'is-positive': {
specifier: '^1.0.0',
version: '1.0.0',
},
'is-negative': {
specifier: '^1.0.0',
version: '1.0.0',
},
})
}
@@ -226,20 +232,22 @@ test('automatically install root peer dependencies', async () => {
manifest,
mutation: 'uninstallSome',
rootDir: process.cwd(),
}, await testDefaults({ autoInstallPeers: true }))
}, await testDefaults({ autoInstallPeers: true, resolutionMode: 'lowest-direct' }))
await project.hasNot('is-odd')
await project.has('is-positive')
await project.has('is-negative')
{
const lockfile = await project.readLockfile()
expect(lockfile.specifiers).toStrictEqual({
'is-positive': '^1.0.0',
'is-negative': '^1.0.0',
})
expect(lockfile.dependencies).toStrictEqual({
'is-positive': '1.0.0',
'is-negative': '1.0.1',
'is-positive': {
specifier: '^1.0.0',
version: '1.0.0',
},
'is-negative': {
specifier: '^1.0.0',
version: '1.0.0',
},
})
}
})
@@ -285,10 +293,16 @@ test('automatically install peer dependency when it is a dev dependency in anoth
const project = assertProject(process.cwd())
const lockfile = await project.readLockfile()
expect(lockfile.importers['project-1'].devDependencies).toStrictEqual({
'is-positive': '1.0.0',
'is-positive': {
specifier: '1.0.0',
version: '1.0.0',
},
})
expect(lockfile.importers['project-2'].dependencies).toStrictEqual({
'is-positive': '1.0.0',
'is-positive': {
specifier: '1.0.0',
version: '1.0.0',
},
})
})
@@ -571,5 +585,5 @@ test('do not override the direct dependency with an auto installed peer dependen
},
}))
const lockfile = await project.readLockfile()
expect(lockfile.dependencies.rxjs).toStrictEqual('6.6.7')
expect(lockfile.dependencies.rxjs.version).toStrictEqual('6.6.7')
})

View File

@@ -19,8 +19,8 @@ test('prefer version ranges specified for top dependencies', async () => {
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('prefer version ranges specified for top dependencies, when doing named installation', async () => {
@@ -39,8 +39,8 @@ test('prefer version ranges specified for top dependencies, when doing named ins
await addDependenciesToPackage(manifest, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults())
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('prefer version ranges specified for top dependencies, even if they are aliased', async () => {
@@ -59,8 +59,8 @@ test('prefer version ranges specified for top dependencies, even if they are ali
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('prefer version ranges specified for top dependencies, even if the subdependencies are aliased', async () => {
@@ -79,8 +79,8 @@ test('prefer version ranges specified for top dependencies, even if the subdepen
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('ignore version of root dependency when it is incompatible with the indirect dependency\'s range', async () => {
@@ -99,8 +99,8 @@ test('ignore version of root dependency when it is incompatible with the indirec
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'])
})
test('prefer dist-tag specified for top dependency', async () => {
@@ -120,8 +120,8 @@ test('prefer dist-tag specified for top dependency', async () => {
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('prefer version ranges passed in via opts.preferredVersions', async () => {
@@ -148,8 +148,8 @@ test('prefer version ranges passed in via opts.preferredVersions', async () => {
)
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
// Covers https://github.com/pnpm/pnpm/issues/1187
@@ -169,9 +169,9 @@ test('prefer version of package that also satisfies the range of the same packag
Object.keys(lockfile.packages)
).toStrictEqual(
[
'/@pnpm.e2e/foo/100.0.0',
'/@pnpm.e2e/has-foo-as-dep-and-subdep/1.0.0',
'/@pnpm.e2e/requires-any-foo/1.0.0',
'/@pnpm.e2e/foo@100.0.0',
'/@pnpm.e2e/has-foo-as-dep-and-subdep@1.0.0',
'/@pnpm.e2e/requires-any-foo@1.0.0',
]
)
})
@@ -188,6 +188,6 @@ test('dedupe subdependency when a newer version of the same package is installed
await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'], await testDefaults())
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
})

View File

@@ -58,6 +58,6 @@ test('pick common range for a dependency used in two workspace projects', async
const project = assertProject(process.cwd())
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})

View File

@@ -3,7 +3,7 @@ import { prepareEmpty } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
import { addDependenciesToPackage } from '@pnpm/core'
import deepRequireCwd from 'deep-require-cwd'
import { createPeersFolderSuffix } from '@pnpm/dependency-path'
import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path'
import exists from 'path-exists'
import { testDefaults } from '../utils'
@@ -13,28 +13,31 @@ test('package with default peer dependency, when auto install peers is on', asyn
await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer'], await testDefaults({ autoInstallPeers: true }))
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
})
test('don\'t install the default peer dependency when it may be resolved from parent packages', async () => {
const project = prepareEmpty()
await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer', '@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'], await testDefaults())
await addDependenciesToPackage({},
['@pnpm.e2e/has-default-peer', '@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'],
await testDefaults({ autoInstallPeers: false })
)
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0',
`/@pnpm.e2e/has-default-peer/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '101.0.0' }])}`,
'/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0',
`/@pnpm.e2e/has-default-peer@1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '101.0.0' }])}`,
])
})
test('install the default peer dependency when it cannot be resolved from parent packages', async () => {
const project = prepareEmpty()
await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer'], await testDefaults())
await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer'], await testDefaults({ autoInstallPeers: false }))
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0',
'/@pnpm.e2e/has-default-peer/1.0.0',
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0',
'/@pnpm.e2e/has-default-peer@1.0.0',
])
})
@@ -49,7 +52,7 @@ test('package that resolves its own peer dependency', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0']?.peerDependencies).toStrictEqual({ '@pnpm.e2e/peer-c': '*' })
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0'].dependencies).toHaveProperty(['@pnpm.e2e/peer-c'])
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0'].optionalDependencies).toHaveProperty(['@pnpm.e2e/peer-b'])
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)']?.peerDependencies).toStrictEqual({ '@pnpm.e2e/peer-c': '*' })
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].dependencies).toHaveProperty(['@pnpm.e2e/peer-c'])
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].optionalDependencies).toHaveProperty(['@pnpm.e2e/peer-b'])
})

View File

@@ -1,5 +1,5 @@
import path from 'path'
import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { install, MutatedProject, mutateModules } from '@pnpm/core'
import writeYamlFile from 'write-yaml-file'
@@ -12,19 +12,25 @@ test('fix broken lockfile with --fix-lockfile', async () => {
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'@types/semver': '5.3.31',
'@types/semver': {
specifier: '^5.3.31',
version: '5.3.31',
},
},
devDependencies: {
fsevents: '2.3.2',
fsevents: {
specifier: '^2.3.2',
version: '2.3.2',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
// resolution: {
// integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
// },
},
'/core-js-pure/3.16.2': {
'/core-js-pure@3.16.2': {
resolution: {
integrity: 'sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==',
},
@@ -32,10 +38,6 @@ test('fix broken lockfile with --fix-lockfile', async () => {
// dev: true
},
},
specifiers: {
'@types/semver': '^5.3.31',
fsevents: '^2.3.2',
},
}, { lineWidth: 1000 })
await install({
@@ -49,16 +51,16 @@ test('fix broken lockfile with --fix-lockfile', async () => {
const lockfile: Lockfile = await readYamlFile(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages as PackageSnapshots).length).toBe(2)
expect(lockfile.packages?.['/@types/semver/5.3.31']).toBeTruthy()
expect(lockfile.packages?.['/@types/semver/5.3.31']?.resolution).toEqual({
expect(lockfile.packages?.['/@types/semver@5.3.31']).toBeTruthy()
expect(lockfile.packages?.['/@types/semver@5.3.31']?.resolution).toEqual({
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
})
expect(lockfile.packages?.['/core-js-pure/3.16.2']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.16.2']?.resolution).toEqual({
expect(lockfile.packages?.['/core-js-pure@3.16.2']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.16.2']?.resolution).toEqual({
integrity: 'sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==',
})
expect(lockfile.packages?.['/core-js-pure/3.16.2']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.16.2']?.dev).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.16.2']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.16.2']?.dev).toBeTruthy()
})
test('--fix-lockfile should preserve all locked dependencies version', async () => {
@@ -98,30 +100,28 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
* --fix-lockfile should not change the locked dependency version and only adding missing fields in this scene
*/
await writeYamlFile(WANTED_LOCKFILE, {
lockfileVersion: 5.3,
lockfileVersion: LOCKFILE_VERSION,
importers: {
'.': {
specifiers: {},
},
'.': {},
'project-1': {
specifiers: {
'@babel/runtime-corejs3': '7.15.3',
},
dependencies: {
'@babel/runtime-corejs3': '7.15.3',
'@babel/runtime-corejs3': {
specifier: '7.15.3',
version: '7.15.3',
},
},
},
'project-2': {
specifiers: {
'@babel/runtime-corejs3': '7.15.4',
},
dependencies: {
'@babel/runtime-corejs3': '7.15.4',
'@babel/runtime-corejs3': {
specifier: '7.15.4',
version: '7.15.4',
},
},
},
},
packages: {
'/@babel/runtime-corejs3/7.15.3': {
'/@babel/runtime-corejs3@7.15.3': {
resolution: { integrity: 'sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==' },
// engines: { node: '>=6.9.0' },
dependencies: {
@@ -130,7 +130,7 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
},
dev: false,
},
'/@babel/runtime-corejs3/7.15.4': {
'/@babel/runtime-corejs3@7.15.4': {
resolution: { integrity: 'sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==' },
engines: { node: '>=6.9.0' },
dependencies: {
@@ -139,17 +139,17 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
},
dev: false,
},
'/core-js-pure/3.17.2': {
'/core-js-pure@3.17.2': {
resolution: { integrity: 'sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==' },
// requiresBuild: true,
dev: false,
},
'/core-js-pure/3.17.3': {
'/core-js-pure@3.17.3': {
// resolution: { integrity: 'sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==' },
// requiresBuild: true,
// dev: false
},
'/regenerator-runtime/0.13.9': {
'/regenerator-runtime@0.13.9': {
resolution: { integrity: 'sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==' },
// dev: false
},
@@ -197,41 +197,41 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
expect(Object.keys(lockfile.packages as PackageSnapshots).length).toBe(5)
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.3']).toBeTruthy()
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.3']?.resolution).toEqual({
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']).toBeTruthy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']?.resolution).toEqual({
integrity: 'sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.3']?.engines).toEqual({
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.4']).toBeTruthy()
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.4']?.resolution).toEqual({
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']).toBeTruthy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.resolution).toEqual({
integrity: 'sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.4']?.engines).toEqual({
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3/7.15.4']?.dev).toBeFalsy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure/3.17.2']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.17.2']?.resolution).toHaveProperty('integrity', 'sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==')
expect(lockfile.packages?.['/core-js-pure/3.17.2']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.17.2']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure@3.17.2']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.2']?.resolution).toHaveProperty('integrity', 'sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==')
expect(lockfile.packages?.['/core-js-pure@3.17.2']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.2']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure/3.17.3']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.17.3']?.resolution).toEqual({
expect(lockfile.packages?.['/core-js-pure@3.17.3']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.3']?.resolution).toEqual({
integrity: 'sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==',
})
expect(lockfile.packages?.['/core-js-pure/3.17.3']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure/3.17.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure@3.17.3']?.requiresBuild).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/regenerator-runtime/0.13.9']).toBeTruthy()
expect(lockfile.packages?.['/regenerator-runtime/0.13.9']?.resolution).toEqual({
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']).toBeTruthy()
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']?.resolution).toEqual({
integrity: 'sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==',
})
expect(lockfile.packages?.['/regenerator-runtime/0.13.9']?.dev).toBeFalsy()
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']?.dev).toBeFalsy()
})
test(

View File

@@ -63,7 +63,10 @@ test('from a github repo with different name via named installation', async () =
const lockfile = await project.readLockfile()
expect(lockfile.dependencies).toStrictEqual({
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
'say-hi': {
specifier: 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
version: 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
},
})
await project.isExecutable('.bin/hi')
@@ -103,7 +106,10 @@ test('from a github repo with different name', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.dependencies).toStrictEqual({
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
'say-hi': {
specifier: 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
version: 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
},
})
await project.isExecutable('.bin/hi')
@@ -120,8 +126,8 @@ test('a subdependency is from a github repo with different name', async () => {
expect(m).toEqual('Hi')
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/has-aliased-git-dependency/1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/has-say-hi-peer': '1.0.0_hi@1.0.0',
expect(lockfile.packages['/@pnpm.e2e/has-aliased-git-dependency@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/has-say-hi-peer': '1.0.0(hi@1.0.0)',
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
})

View File

@@ -3,7 +3,7 @@ import path from 'path'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { install, mutateModules } from '@pnpm/core'
import { testDefaults } from '../utils'
import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { ProjectManifest } from '@pnpm/types'
import { getCurrentBranch } from '@pnpm/git-utils'
import writeYamlFile from 'write-yaml-file'
@@ -162,19 +162,19 @@ test('install with --merge-git-branch-lockfiles when merged lockfile is up to da
// @types/semver installed in the main branch
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'@types/semver': '5.3.31',
'@types/semver': {
specifier: '5.3.31',
version: '5.3.31',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
resolution: {
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
},
},
},
specifiers: {
'@types/semver': '5.3.31',
},
}, { lineWidth: 1000 })
const branchName: string = 'main-branch'
@@ -184,26 +184,28 @@ test('install with --merge-git-branch-lockfiles when merged lockfile is up to da
const otherLockfilePath: string = path.resolve('pnpm-lock.other.yaml')
const otherLockfileContent = {
dependencies: {
'@types/semver': '5.3.31',
'is-positive': '3.1.0',
'@types/semver': {
specifier: '5.3.31',
version: '5.3.31',
},
'is-positive': {
specifier: '^3.1.0',
version: '3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
resolution: {
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
resolution: {
integrity: 'sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==',
},
},
},
specifiers: {
'@types/semver': '5.3.31',
'is-positive': '^3.1.0',
},
}
await writeYamlFile(otherLockfilePath, otherLockfileContent, { lineWidth: 1000 })

View File

@@ -11,7 +11,7 @@ import {
} from '@pnpm/core'
import rimraf from '@zkochan/rimraf'
import resolveLinkTarget from 'resolve-link-target'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { addDistTag } from '@pnpm/registry-mock'
import symlinkDir from 'symlink-dir'
import writeYamlFile from 'write-yaml-file'
@@ -500,10 +500,10 @@ test('hoist when updating in one of the workspace projects', async () => {
Object.keys(lockfile.packages)
).toStrictEqual(
[
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0',
'/@pnpm.e2e/foo/100.0.0',
'/@pnpm.e2e/foo/100.1.0',
'/@pnpm.e2e/pkg-with-1-dep/100.0.0',
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0',
'/@pnpm.e2e/foo@100.0.0',
'/@pnpm.e2e/foo@100.1.0',
'/@pnpm.e2e/pkg-with-1-dep@100.0.0',
]
)
@@ -642,35 +642,33 @@ test('hoist packages which is in the dependencies tree of the selected projects'
* instead of using is-positive@2.0.0 and does not hoist anything
*/
await writeYamlFile(WANTED_LOCKFILE, {
lockfileVersion: 5.3,
lockfileVersion: LOCKFILE_VERSION,
importers: {
'.': {
specifiers: {},
},
'.': {},
'project-1': {
specifiers: {
'is-positive': '2.0.0',
},
dependencies: {
'is-positive': '2.0.0',
'is-positive': {
specifier: '2.0.0',
version: '2.0.0',
},
},
},
'project-2': {
specifiers: {
'is-positive': '3.0.0',
},
dependencies: {
'is-positive': '3.0.0',
'is-positive': {
specifier: '3.0.0',
version: '3.0.0',
},
},
},
},
packages: {
'/is-positive/2.0.0': {
'/is-positive@2.0.0': {
resolution: { integrity: 'sha1-sU8GvS24EK5sixJ0HRNr+u8Nh70=' },
engines: { node: '>=0.10.0' },
dev: false,
},
'/is-positive/3.0.0': {
'/is-positive@3.0.0': {
resolution: { integrity: 'sha1-jvDuIvfOJPdjP4kIAw7Ei2Ks9KM=' },
engines: { node: '>=0.10.0' },
dev: false,
@@ -702,30 +700,28 @@ test('only hoist packages which is in the dependencies tree of the selected proj
])
await writeYamlFile(WANTED_LOCKFILE, {
lockfileVersion: 5.3,
lockfileVersion: LOCKFILE_VERSION,
importers: {
'.': {
specifiers: {},
},
'.': {},
'project-1': {
specifiers: {
'@babel/runtime-corejs3': '7.15.3',
},
dependencies: {
'@babel/runtime-corejs3': '7.15.3',
'@babel/runtime-corejs3': {
specifier: '7.15.3',
version: '7.15.3',
},
},
},
'project-2': {
specifiers: {
'@babel/runtime-corejs3': '7.15.4',
},
dependencies: {
'@babel/runtime-corejs3': '7.15.4',
'@babel/runtime-corejs3': {
specifier: '7.15.4',
version: '7.15.4',
},
},
},
},
packages: {
'/@babel/runtime-corejs3/7.15.3': {
'/@babel/runtime-corejs3@7.15.3': {
resolution: { integrity: 'sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==' },
engines: { node: '>=6.9.0' },
dependencies: {
@@ -734,7 +730,7 @@ test('only hoist packages which is in the dependencies tree of the selected proj
},
dev: false,
},
'/@babel/runtime-corejs3/7.15.4': {
'/@babel/runtime-corejs3@7.15.4': {
resolution: { integrity: 'sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==' },
engines: { node: '>=6.9.0' },
dependencies: {
@@ -743,17 +739,17 @@ test('only hoist packages which is in the dependencies tree of the selected proj
},
dev: false,
},
'/core-js-pure/3.17.2': {
'/core-js-pure@3.17.2': {
resolution: { integrity: 'sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==' },
requiresBuild: true,
dev: false,
},
'/core-js-pure/3.17.3': {
'/core-js-pure@3.17.3': {
resolution: { integrity: 'sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==' },
requiresBuild: true,
dev: false,
},
'/regenerator-runtime/0.13.9': {
'/regenerator-runtime@0.13.9': {
resolution: { integrity: 'sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==' },
dev: false,
},

View File

@@ -1,4 +1,4 @@
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION } from '@pnpm/constants'
import { Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'

View File

@@ -119,6 +119,7 @@ test('inject local packages', async () => {
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))
@@ -143,7 +144,7 @@ test('inject local packages', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -160,7 +161,7 @@ test('inject local packages', async () => {
},
dev: false,
})
expect(lockfile.packages['file:project-2_is-positive@2.0.0']).toEqual({
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
@@ -169,7 +170,7 @@ test('inject local packages', async () => {
name: 'project-2',
version: '1.0.0',
dependencies: {
'project-1': 'file:project-1_is-positive@2.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
@@ -187,6 +188,7 @@ test('inject local packages', async () => {
await rimraf('project-3/node_modules')
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
frozenLockfile: true,
workspacePackages,
@@ -206,7 +208,7 @@ test('inject local packages', async () => {
// The injected project is updated when one of its dependencies needs to be updated
allProjects[0].manifest.dependencies!['is-negative'] = '2.0.0'
await mutateModules(importers, await testDefaults({ allProjects, workspacePackages }))
await mutateModules(importers, await testDefaults({ autoInstallPeers: false, allProjects, workspacePackages }))
{
const lockfile = await rootModules.readLockfile()
expect(lockfile.importers['project-2'].dependenciesMeta).toEqual({
@@ -214,7 +216,7 @@ test('inject local packages', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -349,6 +351,7 @@ test('inject local packages declared via file protocol', async () => {
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))
@@ -373,7 +376,7 @@ test('inject local packages declared via file protocol', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -390,7 +393,7 @@ test('inject local packages declared via file protocol', async () => {
},
dev: false,
})
expect(lockfile.packages['file:project-2_is-positive@2.0.0']).toEqual({
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
@@ -399,7 +402,7 @@ test('inject local packages declared via file protocol', async () => {
name: 'project-2',
version: '1.0.0',
dependencies: {
'project-1': 'file:project-1_is-positive@2.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
@@ -417,6 +420,7 @@ test('inject local packages declared via file protocol', async () => {
await rimraf('project-3/node_modules')
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
frozenLockfile: true,
workspacePackages,
@@ -437,7 +441,7 @@ test('inject local packages declared via file protocol', async () => {
// The injected project is updated when one of its dependencies needs to be updated
allProjects[0].manifest.dependencies!['is-negative'] = '2.0.0'
writeJsonFile('project-1/package.json', allProjects[0].manifest)
await mutateModules(importers, await testDefaults({ allProjects, workspacePackages }))
await mutateModules(importers, await testDefaults({ autoInstallPeers: false, allProjects, workspacePackages }))
{
const lockfile = await rootModules.readLockfile()
expect(lockfile.importers['project-2'].dependenciesMeta).toEqual({
@@ -445,7 +449,7 @@ test('inject local packages declared via file protocol', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -570,6 +574,7 @@ test('inject local packages when the file protocol is used', async () => {
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))
@@ -589,7 +594,7 @@ test('inject local packages when the file protocol is used', async () => {
const rootModules = assertProject(process.cwd())
{
const lockfile = await rootModules.readLockfile()
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -606,7 +611,7 @@ test('inject local packages when the file protocol is used', async () => {
},
dev: false,
})
expect(lockfile.packages['file:project-2_is-positive@2.0.0']).toEqual({
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
@@ -615,7 +620,7 @@ test('inject local packages when the file protocol is used', async () => {
name: 'project-2',
version: '1.0.0',
dependencies: {
'project-1': 'file:project-1_is-positive@2.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
@@ -633,6 +638,7 @@ test('inject local packages when the file protocol is used', async () => {
await rimraf('project-3/node_modules')
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
frozenLockfile: true,
workspacePackages,
@@ -654,12 +660,13 @@ test('inject local packages when the file protocol is used', async () => {
allProjects[0].manifest.dependencies!['is-negative'] = '2.0.0'
writeJsonFile('project-1/package.json', allProjects[0].manifest)
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))
{
const lockfile = await rootModules.readLockfile()
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -761,6 +768,7 @@ test('inject local packages and relink them after build', async () => {
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))
@@ -781,7 +789,7 @@ test('inject local packages and relink them after build', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -805,6 +813,7 @@ test('inject local packages and relink them after build', async () => {
await rimraf('project-2/node_modules')
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
frozenLockfile: true,
workspacePackages,
@@ -878,7 +887,7 @@ test('inject local packages and relink them after build (file protocol is used)'
rootDir: path.resolve('project-2'),
},
]
await mutateModules(importers, await testDefaults({ allProjects }))
await mutateModules(importers, await testDefaults({ autoInstallPeers: false, allProjects }))
await projects['project-1'].has('is-negative')
await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep')
@@ -891,7 +900,7 @@ test('inject local packages and relink them after build (file protocol is used)'
const rootModules = assertProject(process.cwd())
const lockfile = await rootModules.readLockfile()
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -915,6 +924,7 @@ test('inject local packages and relink them after build (file protocol is used)'
await rimraf('project-2/node_modules')
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
frozenLockfile: true,
}))
@@ -1039,6 +1049,7 @@ test('inject local packages when node-linker is hoisted', async () => {
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
nodeLinker: 'hoisted',
workspacePackages,
@@ -1063,7 +1074,7 @@ test('inject local packages when node-linker is hoisted', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -1081,7 +1092,7 @@ test('inject local packages when node-linker is hoisted', async () => {
},
dev: false,
})
expect(lockfile.packages['file:project-2_is-positive@2.0.0']).toEqual({
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
@@ -1091,7 +1102,7 @@ test('inject local packages when node-linker is hoisted', async () => {
version: '1.0.0',
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'project-1': 'file:project-1_is-positive@2.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
@@ -1204,6 +1215,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
nodeLinker: 'hoisted',
workspacePackages,
@@ -1247,7 +1259,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
injected: true,
},
})
expect(lockfile.packages['file:project-1_is-positive@1.0.0']).toEqual({
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
@@ -1265,7 +1277,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
},
dev: false,
})
expect(lockfile.packages['file:project-2_is-positive@2.0.0']).toEqual({
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
@@ -1275,7 +1287,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
version: '1.0.0',
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'project-1': 'file:project-1_is-positive@2.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
@@ -1384,6 +1396,7 @@ test('peer dependency of injected project should be resolved correctly', async (
},
}
await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
nodeLinker: 'hoisted',
workspacePackages,
@@ -1391,7 +1404,7 @@ test('peer dependency of injected project should be resolved correctly', async (
const rootModules = assertProject(process.cwd())
const lockfile = await rootModules.readLockfile()
expect(lockfile.packages?.['file:project-2_project-1@project-1'].dependencies?.['project-1']).toEqual('link:project-1')
expect(lockfile.packages?.['file:project-2(project-1@project-1)'].dependencies?.['project-1']).toEqual('link:project-1')
})
// There was a bug related to this. The manifests in the workspacePackages object were modified
@@ -1469,6 +1482,7 @@ test('do not modify the manifest of the injected workpspace project', async () =
},
}
const [project1] = await mutateModules(importers, await testDefaults({
autoInstallPeers: false,
allProjects,
workspacePackages,
}))

View File

@@ -26,7 +26,7 @@ test('do not fail if installed package does not support the current engine and e
await project.storeHas('@pnpm.e2e/not-compatible-with-any-os', '1.0.0')
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].os).toStrictEqual(['this-os-does-not-exist'])
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'].os).toStrictEqual(['this-os-does-not-exist'])
})
test('do not fail if installed package requires the node version that was passed in and engine-strict = true', async () => {
@@ -41,7 +41,7 @@ test('do not fail if installed package requires the node version that was passed
await project.storeHas('@pnpm.e2e/for-legacy-node', '1.0.0')
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/for-legacy-node/1.0.0'].engines).toStrictEqual({ node: '0.10' })
expect(lockfile.packages['/@pnpm.e2e/for-legacy-node@1.0.0'].engines).toStrictEqual({ node: '0.10' })
})
test(`save cpu field to ${WANTED_LOCKFILE}`, async () => {
@@ -52,7 +52,7 @@ test(`save cpu field to ${WANTED_LOCKFILE}`, async () => {
const lockfile = await project.readLockfile()
expect(
lockfile.packages['/@pnpm.e2e/has-cpu-specified/1.0.0'].cpu
lockfile.packages['/@pnpm.e2e/has-cpu-specified@1.0.0'].cpu
).toStrictEqual(
['x64', 'ia32']
)
@@ -65,5 +65,5 @@ test(`engines field is not added to ${WANTED_LOCKFILE} when "node": "*" is in "e
const lockfile = await project.readLockfile()
expect(lockfile.packages['/jsonify/0.0.0']).not.toHaveProperty(['engines'])
expect(lockfile.packages['/jsonify@0.0.0']).not.toHaveProperty(['engines'])
})

View File

@@ -54,7 +54,7 @@ test('run pre/postinstall scripts', async () => {
}
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild)
})
test('run pre/postinstall scripts, when PnP is used and no symlinks', async () => {
@@ -416,8 +416,8 @@ test('selectively ignore scripts in some dependencies by neverBuiltDependencies'
const lockfile = await project.readLockfile()
expect(lockfile.neverBuiltDependencies).toStrictEqual(neverBuiltDependencies)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBeTruthy()
await rimraf('node_modules')
@@ -454,8 +454,8 @@ test('selectively allow scripts in some dependencies by onlyBuiltDependencies',
const lockfile = await project.readLockfile()
expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(true)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBe(true)
await rimraf('node_modules')
@@ -476,8 +476,8 @@ test('lockfile is updated if neverBuiltDependencies is changed', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.neverBuiltDependencies).toBeFalsy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBeTruthy()
}
const neverBuiltDependencies = ['@pnpm.e2e/pre-and-postinstall-scripts-example']
@@ -490,8 +490,8 @@ test('lockfile is updated if neverBuiltDependencies is changed', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.neverBuiltDependencies).toStrictEqual(neverBuiltDependencies)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBeTruthy()
}
})
@@ -505,8 +505,8 @@ test('lockfile is updated if onlyBuiltDependencies is changed', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.onlyBuiltDependencies).toBeFalsy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBeTruthy()
}
const onlyBuiltDependencies: string[] = []
@@ -519,8 +519,8 @@ test('lockfile is updated if onlyBuiltDependencies is changed', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBe(undefined)
}
onlyBuiltDependencies.push('@pnpm.e2e/pre-and-postinstall-scripts-example')
@@ -533,8 +533,8 @@ test('lockfile is updated if onlyBuiltDependencies is changed', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(true)
expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(undefined)
expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'].requiresBuild).toBe(true)
expect(lockfile.packages['/@pnpm.e2e/install-script-example@1.0.0'].requiresBuild).toBe(undefined)
}
})

View File

@@ -1,6 +1,6 @@
import { promises as fs } from 'fs'
import path from 'path'
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION } from '@pnpm/constants'
import { Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
@@ -46,10 +46,12 @@ test('local file', async () => {
expect(lockfile).toStrictEqual({
dependencies: {
'local-pkg': 'link:../local-pkg',
'local-pkg': {
specifier: expectedSpecs['local-pkg'],
version: 'link:../local-pkg',
},
},
lockfileVersion: LOCKFILE_VERSION,
specifiers: expectedSpecs,
})
})
@@ -87,10 +89,12 @@ test('local file via link:', async () => {
expect(lockfile).toStrictEqual({
dependencies: {
'local-pkg': 'link:../local-pkg',
'local-pkg': {
specifier: expectedSpecs['local-pkg'],
version: 'link:../local-pkg',
},
},
lockfileVersion: LOCKFILE_VERSION,
specifiers: expectedSpecs,
})
})
@@ -113,10 +117,12 @@ test('local file with symlinked node_modules', async () => {
expect(lockfile).toStrictEqual({
dependencies: {
'local-pkg': 'link:../local-pkg',
'local-pkg': {
specifier: expectedSpecs['local-pkg'],
version: 'link:../local-pkg',
},
},
lockfileVersion: LOCKFILE_VERSION,
specifiers: expectedSpecs,
})
})
@@ -141,7 +147,7 @@ test('tarball local package', async () => {
expect(manifest.dependencies).toStrictEqual({ 'tar-pkg': pkgSpec })
const lockfile = await project.readLockfile()
expect(lockfile.packages[lockfile.dependencies['tar-pkg']]).toStrictEqual({
expect(lockfile.packages[lockfile.dependencies['tar-pkg'].version]).toStrictEqual({
dev: false,
name: 'tar-pkg',
resolution: {
@@ -171,8 +177,8 @@ test('tarball local package from project directory', async () => {
expect(manifest.dependencies).toStrictEqual({ 'tar-pkg': pkgSpec })
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['tar-pkg']).toBe(pkgSpec)
expect(lockfile.packages[lockfile.dependencies['tar-pkg']]).toStrictEqual({
expect(lockfile.dependencies['tar-pkg'].version).toBe(pkgSpec)
expect(lockfile.packages[lockfile.dependencies['tar-pkg'].version]).toStrictEqual({
dev: false,
name: 'tar-pkg',
resolution: {

View File

@@ -29,8 +29,7 @@ test('install with lockfileOnly = true', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0']).toBeTruthy()
expect(lockfile.specifiers['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0']).toBeTruthy()
const currentLockfile = await project.readCurrentLockfile()
expect(currentLockfile).toBeFalsy()
@@ -70,11 +69,10 @@ test('warn when installing with lockfileOnly = true and node_modules exists', as
const lockfile = await project.readLockfile()
expect(lockfile.dependencies.rimraf).toBeTruthy()
expect(lockfile.packages['/rimraf/2.5.1']).toBeTruthy()
expect(lockfile.specifiers.rimraf).toBeTruthy()
expect(lockfile.packages['/rimraf@2.5.1']).toBeTruthy()
const currentLockfile = await project.readCurrentLockfile()
expect(currentLockfile.packages['/rimraf/2.5.1']).toBeFalsy()
expect(currentLockfile.packages['/rimraf@2.5.1']).toBeFalsy()
})
// For @pnpm/core it might make sense to throw an exception in this case but for now it is better than having
@@ -94,5 +92,5 @@ test('always update the lockfile when lockfileOnly is used, even if frozenLockfi
}))
const lockfile = await project.readLockfile()
expect(lockfile.specifiers['is-positive']).toBe('2.0.0')
expect(lockfile.dependencies['is-positive'].specifier).toBe('2.0.0')
})

View File

@@ -1,6 +1,6 @@
import * as path from 'path'
import { promises as fs } from 'fs'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { prepare, prepareEmpty, preparePackages } from '@pnpm/prepare'
import { PnpmError } from '@pnpm/error'
import {
PackageManifestLog,
@@ -9,7 +9,7 @@ import {
StageLog,
StatsLog,
} from '@pnpm/core-loggers'
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION } from '@pnpm/constants'
import { fixtures } from '@pnpm/test-fixtures'
import { ProjectManifest } from '@pnpm/types'
import { addDistTag, getIntegrity, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
@@ -46,7 +46,7 @@ test('spec not specified in package.json.dependencies', async () => {
}, await testDefaults())
const lockfile = await project.readLockfile()
expect(lockfile.specifiers['is-positive']).toBe('')
expect(lockfile.dependencies['is-positive'].specifier).toBe('')
})
test('ignoring some files in the dependency', async () => {
@@ -507,7 +507,7 @@ test('bundledDependencies (pkg-with-bundled-dependencies@1.0.0)', async () => {
const lockfile = await project.readLockfile()
expect(
lockfile.packages['/@pnpm.e2e/pkg-with-bundled-dependencies/1.0.0'].bundledDependencies
lockfile.packages['/@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'].bundledDependencies
).toStrictEqual(
['@pnpm.e2e/hello-world-js-bin']
)
@@ -522,7 +522,7 @@ test('bundleDependencies (pkg-with-bundle-dependencies@1.0.0)', async () => {
const lockfile = await project.readLockfile()
expect(
lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies/1.0.0'].bundledDependencies
lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'].bundledDependencies
).toStrictEqual(
['@pnpm.e2e/hello-world-js-bin']
)
@@ -535,7 +535,7 @@ test('installing a package with bundleDependencies set to false (pkg-with-bundle
const lockfile = await project.readLockfile()
expect(
typeof lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies-false/1.0.0'].bundledDependencies
typeof lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies-false@1.0.0'].bundledDependencies
).toEqual('undefined')
})
@@ -583,7 +583,7 @@ testOnNonWindows('building native addons', async () => {
expect(await exists('node_modules/diskusage/build')).toBeTruthy()
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/diskusage/1.1.3', 'requiresBuild'], true)
expect(lockfile.packages).toHaveProperty(['/diskusage@1.1.3', 'requiresBuild'], true)
})
test('should update subdep on second install', async () => {
@@ -597,7 +597,7 @@ test('should update subdep on second install', async () => {
let lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' })
@@ -616,8 +616,8 @@ test('should update subdep on second install', async () => {
lockfile = await project.readLockfile()
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
expect(deepRequireCwd(['@pnpm.e2e/pkg-with-1-dep', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.1.0')
})
@@ -633,7 +633,7 @@ test('should not update subdep when depth is smaller than depth of package', asy
let lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' })
@@ -643,8 +643,8 @@ test('should not update subdep when depth is smaller than depth of package', asy
lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'])
expect(deepRequireCwd(['@pnpm.e2e/pkg-with-1-dep', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.0.0')
})
@@ -715,6 +715,7 @@ test('lockfile locks npm dependencies', async () => {
const project = prepareEmpty()
const reporter = sinon.spy()
await addDistTag({ package: '@pnpm.e2e/pkg-with-1-dep', version: '100.0.0', distTag: 'latest' })
await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'latest' })
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ save: true, reporter }))
@@ -815,7 +816,7 @@ test('should throw error when trying to install a package without name', async (
// Covers https://github.com/pnpm/pnpm/issues/1193
test('rewrites node_modules created by npm', async () => {
const project = prepareEmpty()
const project = prepare()
await execa('npm', ['install', 'rimraf@2.5.1', '@types/node', '--save'])
@@ -938,23 +939,26 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall
await writeYamlFile(path.resolve('pnpm-lock.yaml'), {
dependencies: {
'@pnpm.e2e/foobarqar': '1.0.1',
'@pnpm.e2e/foobarqar': {
specifier: '1.0.1',
version: '1.0.1',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/bar/100.0.0': {
'/@pnpm.e2e/bar@100.0.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/bar', '100.0.0'),
},
},
'/@pnpm.e2e/foo/100.1.0': {
'/@pnpm.e2e/foo@100.1.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/foo', '100.1.0'),
},
},
'/@pnpm.e2e/foobarqar/1.0.1': {
'/@pnpm.e2e/foobarqar@1.0.1': {
dependencies: {
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.1.0',
@@ -965,7 +969,7 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall
integrity: getIntegrity('@pnpm.e2e/foobarqar', '1.0.1'),
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -975,9 +979,6 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall
},
},
},
specifiers: {
'@pnpm.e2e/foobarqar': '1.0.1',
},
}, { lineWidth: 1000 })
await mutateModulesInSingleProject({
@@ -1022,25 +1023,28 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
Object.keys(lockfile.packages)
).toStrictEqual(
[
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0',
'/@pnpm.e2e/parent-of-pkg-with-1-dep/1.0.0',
'/@pnpm.e2e/pkg-with-1-dep/100.0.0',
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0',
'/@pnpm.e2e/parent-of-pkg-with-1-dep@1.0.0',
'/@pnpm.e2e/pkg-with-1-dep@100.0.0',
]
)
await writeYamlFile(path.resolve('pnpm-lock.yaml'), {
dependencies: {
'@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0',
'@pnpm.e2e/parent-of-pkg-with-1-dep': {
specifier: '1.0.0',
version: '1.0.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0': {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'),
},
},
'/@pnpm.e2e/parent-of-pkg-with-1-dep/1.0.0': {
'/@pnpm.e2e/parent-of-pkg-with-1-dep@1.0.0': {
dependencies: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
},
@@ -1049,7 +1053,7 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
integrity: getIntegrity('@pnpm.e2e/parent-of-pkg-with-1-dep', '1.0.0'),
},
},
'/@pnpm.e2e/pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/pkg-with-1-dep@100.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0',
},
@@ -1059,9 +1063,6 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
},
},
},
specifiers: {
'@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0',
},
}, { lineWidth: 1000 })
await mutateModulesInSingleProject({

View File

@@ -1,6 +1,6 @@
import path from 'path'
import { assertProject } from '@pnpm/assert-project'
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION } from '@pnpm/constants'
import { readCurrentLockfile } from '@pnpm/lockfile-file'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
@@ -12,7 +12,7 @@ import {
mutateModulesInSingleProject,
} from '@pnpm/core'
import rimraf from '@zkochan/rimraf'
import { createPeersFolderSuffix } from '@pnpm/dependency-path'
import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix } from '@pnpm/dependency-path'
import loadJsonFile from 'load-json-file'
import exists from 'path-exists'
import pick from 'ramda/src/pick'
@@ -162,7 +162,7 @@ test('install only the dependencies of the specified importer. The current lockf
const rootModules = assertProject(process.cwd())
const currentLockfile = await rootModules.readCurrentLockfile()
expect(currentLockfile.importers).toHaveProperty(['project-3'])
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/foobar/100.0.0'])
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/foobar@100.0.0'])
})
test('some projects were removed from the workspace and the ones that are left depend on them', async () => {
@@ -304,8 +304,8 @@ test('dependencies of other importers are not pruned when installing for a subse
const lockfile = await rootModules.readCurrentLockfile()
expect(Object.keys(lockfile.importers)).toStrictEqual(['project-1', 'project-2'])
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/is-negative/1.0.0',
'/is-positive/2.0.0',
'/is-negative@1.0.0',
'/is-positive@2.0.0',
])
})
@@ -701,30 +701,30 @@ test('partial installation in a monorepo does not remove dependencies of other w
importers: {
'project-1': {
dependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '1.0.0',
'is-positive': {
specifier: '1.0.0',
vesrion: '1.0.0',
},
},
},
'project-2': {
dependencies: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
},
specifiers: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
'@pnpm.e2e/pkg-with-1-ep': {
specifier: '100.0.0',
version: '100.0.0',
},
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
resolution: {
integrity: 'sha512-RWObNQIluSr56fVbOwD75Dt5CE2aiPReTMMUblYEMEqUI+iJw5ovTyO7LzUG/VJ4iVL2uUrbkQ6+rq4z4WOdDw==',
},
},
'/is-positive/1.0.0': {
'/is-positive@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -733,7 +733,7 @@ test('partial installation in a monorepo does not remove dependencies of other w
integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==',
},
},
'/@pnpm.e2e/pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/pkg-with-1-dep@100.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
},
@@ -800,30 +800,30 @@ test('partial installation in a monorepo does not remove dependencies of other w
importers: {
'project-1': {
dependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '1.0.0',
'is-positive': {
specifier: '1.0.0',
version: '1.0.0',
},
},
},
'project-2': {
dependencies: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
},
specifiers: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
'@pnpm.e2e/pkg-with-1-dep': {
specifier: '100.0.0',
version: '100.0.0',
},
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
resolution: {
integrity: 'sha512-RWObNQIluSr56fVbOwD75Dt5CE2aiPReTMMUblYEMEqUI+iJw5ovTyO7LzUG/VJ4iVL2uUrbkQ6+rq4z4WOdDw==',
},
},
'/is-positive/1.0.0': {
'/is-positive@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -832,7 +832,7 @@ test('partial installation in a monorepo does not remove dependencies of other w
integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==',
},
},
'/@pnpm.e2e/pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/pkg-with-1-dep@100.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
},
@@ -1047,6 +1047,7 @@ test('update workspace range', async () => {
},
},
},
saveWorkspaceProtocol: true,
}))
const expected = {
@@ -1241,11 +1242,11 @@ test('remove dependencies of a project that was removed from the workspace (duri
{
const wantedLockfile = await project.readLockfile()
expect(Object.keys(wantedLockfile.importers)).toStrictEqual(['project-1'])
expect(Object.keys(wantedLockfile.packages)).toStrictEqual(['/is-positive/1.0.0'])
expect(Object.keys(wantedLockfile.packages)).toStrictEqual(['/is-positive@1.0.0'])
const currentLockfile = await project.readCurrentLockfile()
expect(Object.keys(currentLockfile.importers)).toStrictEqual(['project-1', 'project-2'])
expect(Object.keys(currentLockfile.packages)).toStrictEqual(['/is-negative/1.0.0', '/is-positive/1.0.0'])
expect(Object.keys(currentLockfile.packages)).toStrictEqual(['/is-negative@1.0.0', '/is-positive@1.0.0'])
await project.has('.pnpm/is-positive@1.0.0')
await project.has('.pnpm/is-negative@1.0.0')
@@ -1259,7 +1260,7 @@ test('remove dependencies of a project that was removed from the workspace (duri
{
const currentLockfile = await project.readCurrentLockfile()
expect(Object.keys(currentLockfile.importers)).toStrictEqual(['project-1'])
expect(Object.keys(currentLockfile.packages)).toStrictEqual(['/is-positive/1.0.0'])
expect(Object.keys(currentLockfile.packages)).toStrictEqual(['/is-positive@1.0.0'])
await project.has('.pnpm/is-positive@1.0.0')
await project.hasNot('.pnpm/is-negative@1.0.0')
@@ -1327,7 +1328,7 @@ test('do not resolve a subdependency from the workspace by default', async () =>
const project = assertProject(process.cwd())
const wantedLockfile = await project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0')
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0')
})
test('resolve a subdependency from the workspace', async () => {
@@ -1390,7 +1391,7 @@ test('resolve a subdependency from the workspace', async () => {
const project = assertProject(process.cwd())
const wantedLockfile = await project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
await rimraf('node_modules')
@@ -1461,6 +1462,7 @@ test('resolve a subdependency from the workspace and use it as a peer', async ()
}
await mutateModules(importers, await testDefaults({
allProjects,
autoInstallPeers: false,
linkWorkspacePackagesDepth: Infinity,
strictPeerDependencies: false,
workspacePackages,
@@ -1473,19 +1475,19 @@ test('resolve a subdependency from the workspace and use it as a peer', async ()
const suffix2 = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '@pnpm.e2e+peer-a' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.1' }])
expect(Object.keys(wantedLockfile.packages).sort()).toStrictEqual(
[
'/@pnpm.e2e/abc-grand-parent-with-c/1.0.0',
'/@pnpm.e2e/abc-parent-with-ab/1.0.0',
'/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.1',
`/@pnpm.e2e/abc/1.0.0${suffix1}`,
`/@pnpm.e2e/abc/1.0.0${suffix2}`,
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0',
'/is-positive/1.0.0',
'/@pnpm.e2e/peer-b/1.0.0',
'/@pnpm.e2e/peer-c/1.0.1',
'/@pnpm.e2e/abc-grand-parent-with-c@1.0.0',
'/@pnpm.e2e/abc-parent-with-ab@1.0.0',
'/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.1)',
`/@pnpm.e2e/abc@1.0.0${suffix1}`,
`/@pnpm.e2e/abc@1.0.0${suffix2}`,
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0',
'/is-positive@1.0.0',
'/@pnpm.e2e/peer-b@1.0.0',
'/@pnpm.e2e/peer-c@1.0.1',
].sort()
)
expect(wantedLockfile.packages['/@pnpm.e2e/abc-parent-with-ab/1.0.0'].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.packages[`/@pnpm.e2e/abc/1.0.0${suffix1}`].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.packages['/@pnpm.e2e/abc-parent-with-ab@1.0.0'].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.packages[`/@pnpm.e2e/abc@1.0.0${suffix1}`].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
})
test('resolve a subdependency from the workspace, when it uses the workspace protocol', async () => {
@@ -1556,7 +1558,7 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro
const project = assertProject(process.cwd())
const wantedLockfile = await project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
await rimraf('node_modules')
@@ -1641,11 +1643,14 @@ test('install the dependency that is already present in the workspace when addin
const rootModules = assertProject(process.cwd())
const currentLockfile = await rootModules.readCurrentLockfile()
expect(currentLockfile.importers['project-1'].specifiers?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^100.0.0')
expect(currentLockfile.importers['project-2'].specifiers?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^100.0.0')
expect(currentLockfile.importers['project-1'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0')
expect(currentLockfile.importers['project-2'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0')
expect(currentLockfile.importers['project-1'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toStrictEqual({
specifier: '^100.0.0',
version: '100.0.0',
})
expect(currentLockfile.importers['project-2'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toStrictEqual({
specifier: '^100.0.0',
version: '100.0.0',
})
})
test('do not update dependency that has the same name as a dependency in the workspace', async () => {
@@ -1720,8 +1725,8 @@ test('do not update dependency that has the same name as a dependency in the wor
const rootModules = assertProject(process.cwd())
const currentLockfile = await rootModules.readCurrentLockfile()
expect(Object.keys(currentLockfile.packages)).toStrictEqual([
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0',
'/is-negative/2.1.0',
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0',
'/is-negative@2.1.0',
])
})
@@ -1834,6 +1839,7 @@ test('do not symlink local package from the location described in its publishCon
version: '1.0.0',
publishConfig: {
directory: 'dist',
linkDirectory: false,
},
}
const project2Manifest = {

View File

@@ -92,12 +92,12 @@ test('install dev dependencies only', async () => {
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/is-positive/1.0.0'].dev === false).toBeTruthy()
expect(lockfile.packages['/is-positive@1.0.0'].dev === false).toBeTruthy()
}
{
const currentLockfile = await project.readCurrentLockfile()
expect(currentLockfile.packages['/is-positive/1.0.0']).toBeFalsy()
expect(currentLockfile.packages['/is-positive@1.0.0']).toBeFalsy()
}
// Repeat normal installation adds missing deps to node_modules
@@ -107,7 +107,7 @@ test('install dev dependencies only', async () => {
{
const currentLockfile = await project.readCurrentLockfile()
expect(currentLockfile.packages['/is-positive/1.0.0']).toBeTruthy()
expect(currentLockfile.packages['/is-positive@1.0.0']).toBeTruthy()
}
})

View File

@@ -56,7 +56,7 @@ test('skip non-existing optional dependency', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.specifiers).toStrictEqual({ 'is-positive': '*' })
expect(lockfile.dependencies['is-positive'].specifier).toBe('*')
})
test('skip optional dependency that does not support the current OS', async () => {
@@ -74,13 +74,13 @@ test('skip optional dependency that does not support the current OS', async () =
expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+dep-of-optional-pkg@1.0.0'))).toBeFalsy()
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os@1.0.0']).toBeTruthy()
// optional dependencies always get requiresBuild: true
// this is to resolve https://github.com/pnpm/pnpm/issues/2038
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'].requiresBuild).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg@1.0.0']).toBeTruthy()
const currentLockfile = await project.readCurrentLockfile()
@@ -252,7 +252,7 @@ test('optional subdependency is not removed from current lockfile when new depen
expect(modulesInfo.skipped).toStrictEqual(['/@pnpm.e2e/dep-of-optional-pkg/1.0.0', '/@pnpm.e2e/not-compatible-with-any-os/1.0.0'])
const currentLockfile = await readYamlFile<Lockfile>(path.resolve('node_modules/.pnpm/lock.yaml'))
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'])
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'])
}
await mutateModules([
@@ -265,7 +265,7 @@ test('optional subdependency is not removed from current lockfile when new depen
{
const currentLockfile = await readYamlFile<Lockfile>(path.resolve('node_modules/.pnpm/lock.yaml'))
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'])
expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'])
}
})
@@ -309,7 +309,7 @@ test('optional subdependency is skipped', async () => {
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages).length).toBe(3)
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'])
// forced headless install should install non-compatible optional deps
@@ -341,7 +341,7 @@ test('optional subdependency of newly added optional dependency is skipped', asy
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages).length).toBe(3)
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'])
})
test('only that package is skipped which is an optional dependency only and not installable', async () => {
@@ -360,7 +360,7 @@ test('only that package is skipped which is an optional dependency only and not
}
const lockfile = await project.readLockfile()
expect(typeof lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0'].optional).toBe('undefined')
expect(typeof lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg@1.0.0'].optional).toBe('undefined')
await rimraf('node_modules')
@@ -533,8 +533,8 @@ test('do not fail on unsupported dependency of optional dependency', async () =>
)
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].optional).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'].optional).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg@1.0.0']).toBeTruthy()
})
test('fail on unsupported dependency of optional dependency', async () => {

View File

@@ -24,10 +24,10 @@ test('versions are replaced with versions specified through overrides option', a
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('/@pnpm.e2e/qar/100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foobar/100.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0')
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar/100.1.0'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('/@pnpm.e2e/qar@100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foobar@100.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0')
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar@100.1.0'])
expect(lockfile.overrides).toStrictEqual({
'@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0',
'@pnpm.e2e/bar@^100.0.0': '100.1.0',
@@ -55,9 +55,9 @@ test('versions are replaced with versions specified through overrides option', a
{
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar@100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.overrides).toStrictEqual({
'@pnpm.e2e/foobarqar': '1.0.1',
'@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0',

View File

@@ -25,7 +25,7 @@ test('manifests are extended with fields specified by packageExtensions', async
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0')
expect(lockfile.packages['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0')
expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({
'is-positive': {
dependencies: {
@@ -47,7 +47,7 @@ test('manifests are extended with fields specified by packageExtensions', async
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['@pnpm.e2e/foobar']).toBe('100.0.0')
expect(lockfile.packages['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/foobar']).toBe('100.0.0')
expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({
'is-positive': {
dependencies: {
@@ -104,7 +104,7 @@ test('manifests are patched by extensions from the compatibility database', asyn
)
const lockfile = await project.readLockfile()
expect(lockfile.packages['/debug/4.0.0'].peerDependenciesMeta?.['supports-color']?.optional).toBe(true)
expect(lockfile.packages['/debug@4.0.0'].peerDependenciesMeta?.['supports-color']?.optional).toBe(true)
})
test('manifests are not patched by extensions from the compatibility database when ignoreCompatibilityDb is true', async () => {
@@ -119,5 +119,5 @@ test('manifests are not patched by extensions from the compatibility database wh
)
const lockfile = await project.readLockfile()
expect(lockfile.packages['/debug/4.0.0'].peerDependenciesMeta).toBeUndefined()
expect(lockfile.packages['/debug@4.0.0'].peerDependenciesMeta).toBeUndefined()
})

View File

@@ -40,7 +40,7 @@ test('patch package', async () => {
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive/1.0.0_${patchFileHash}`]).toBeTruthy()
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = await loadJsonFile<PackageFilesIndex>(filesIndexFile)
@@ -207,7 +207,7 @@ test('patch package when scripts are ignored', async () => {
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive/1.0.0_${patchFileHash}`]).toBeTruthy()
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = await loadJsonFile<PackageFilesIndex>(filesIndexFile)
@@ -294,7 +294,7 @@ test('patch package when the package is not in onlyBuiltDependencies list', asyn
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive/1.0.0_${patchFileHash}`]).toBeTruthy()
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = await loadJsonFile<PackageFilesIndex>(filesIndexFile)
@@ -378,8 +378,8 @@ test('patch package when the patched package has no dependencies and appears mul
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/is-not-positive/1.0.0',
'/is-positive/1.0.0_jnbpamcxayl5i4ehrkoext3any',
'/is-not-positive@1.0.0',
'/is-positive@1.0.0(patch_hash=jnbpamcxayl5i4ehrkoext3any)',
])
})

View File

@@ -19,7 +19,7 @@ import rimraf from '@zkochan/rimraf'
import exists from 'path-exists'
import sinon from 'sinon'
import deepRequireCwd from 'deep-require-cwd'
import { createPeersFolderSuffix } from '@pnpm/dependency-path'
import { createPeersFolderSuffixNewFormat as createPeersFolderSuffix, depPathToFilename } from '@pnpm/dependency-path'
import { testDefaults } from '../utils'
const f = fixtures(__dirname)
@@ -49,15 +49,16 @@ test('peer dependency is grouped with dependency when peer is resolved not from
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/using-ajv/1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0_ajv@4.10.4')
expect(lockfile.packages['/@pnpm.e2e/using-ajv@1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0(ajv@4.10.4)')
// covers https://github.com/pnpm/pnpm/issues/1150
expect(lockfile.packages).toHaveProperty(['/ajv-keywords/1.5.0_ajv@4.10.4'])
expect(lockfile.packages).toHaveProperty(['/ajv-keywords@1.5.0(ajv@4.10.4)'])
})
// Covers https://github.com/pnpm/pnpm/issues/1133
test('nothing is needlessly removed from node_modules', async () => {
prepareEmpty()
const opts = await testDefaults({
autoInstallPeers: false,
modulesCacheMaxAge: 0,
strictPeerDependencies: false,
})
@@ -98,7 +99,7 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
}, await testDefaults({ preferFrozenLockfile: false }))
const lockfile = await project.readLockfile()
expect(lockfile.packages['/ajv-keywords/1.5.0_ajv@4.10.4'].dependencies).toHaveProperty(['ajv'])
expect(lockfile.packages['/ajv-keywords@1.5.0(ajv@4.10.4)'].dependencies).toHaveProperty(['ajv'])
})
test('the right peer dependency is used in every workspace package', async () => {
@@ -150,16 +151,25 @@ test('the right peer dependency is used in every workspace package', async () =>
rootDir: path.resolve('project-2'),
},
]
await mutateModules(importers, await testDefaults({ allProjects, lockfileOnly: true, strictPeerDependencies: false }))
await mutateModules(importers, await testDefaults({ allProjects, autoInstallPeers: false, lockfileOnly: true, strictPeerDependencies: false }))
const lockfile = await readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
expect(lockfile.importers['project-1'].dependencies).toStrictEqual({
'ajv-keywords': '1.5.0',
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0',
},
})
expect(lockfile.importers['project-2'].dependencies).toStrictEqual({
ajv: '4.10.4',
'ajv-keywords': '1.5.0_ajv@4.10.4',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0(ajv@4.10.4)',
},
})
})
@@ -168,7 +178,11 @@ test('warning is reported when cannot resolve peer dependency for top-level depe
const reporter = jest.fn()
await addDependenciesToPackage({}, ['ajv-keywords@1.5.0'], await testDefaults({ reporter, strictPeerDependencies: false }))
await addDependenciesToPackage(
{},
['ajv-keywords@1.5.0'],
await testDefaults({ autoInstallPeers: false, reporter, strictPeerDependencies: false })
)
expect(reporter).toHaveBeenCalledWith(
expect.objectContaining({
@@ -208,7 +222,7 @@ test('strict-peer-dependencies: error is thrown when cannot resolve peer depende
dependencies: {
'ajv-keywords': '1.5.0',
},
}, await testDefaults({ strictPeerDependencies: true }))
}, await testDefaults({ autoInstallPeers: false, strictPeerDependencies: true }))
} catch (_err: any) { // eslint-disable-line
err = _err
}
@@ -289,7 +303,7 @@ test('peer dependency is resolved from the dependencies of the workspace root pr
{
const lockfile = await projects.root.readLockfile()
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0')
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords'].version).toBe('1.5.0(ajv@4.10.0)')
}
allProjects[1].manifest.dependencies!['is-positive'] = '1.0.0'
@@ -306,7 +320,7 @@ test('peer dependency is resolved from the dependencies of the workspace root pr
{
const lockfile = await projects.root.readLockfile()
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0')
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords'].version).toBe('1.5.0(ajv@4.10.0)')
}
})
@@ -316,7 +330,11 @@ test('warning is reported when cannot resolve peer dependency for non-top-level
const reporter = jest.fn()
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-without-c'], await testDefaults({ reporter, strictPeerDependencies: false }))
await addDependenciesToPackage(
{},
['@pnpm.e2e/abc-grand-parent-without-c'],
await testDefaults({ autoInstallPeers: false, reporter, strictPeerDependencies: false })
)
expect(reporter).toHaveBeenCalledWith(
expect.objectContaining({
@@ -481,7 +499,7 @@ test('the list of transitive peer dependencies is kept up to date', async () =>
expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-grand-parent@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-grand-parent'))).toBeTruthy()
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent/1.0.0_@pnpm.e2e+peer-c@1.0.0'].transitivePeerDependencies).toStrictEqual(['@pnpm.e2e/peer-c'])
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent@1.0.0(@pnpm.e2e/peer-c@1.0.0)'].transitivePeerDependencies).toStrictEqual(['@pnpm.e2e/peer-c'])
}
await mutateModulesInSingleProject({
@@ -494,7 +512,7 @@ test('the list of transitive peer dependencies is kept up to date', async () =>
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent/1.0.0'].transitivePeerDependencies).toBeFalsy()
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent@1.0.0'].transitivePeerDependencies).toBeFalsy()
}
})
@@ -522,18 +540,24 @@ test('peer dependencies are linked when running one named installation', async (
prepareEmpty()
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false }))
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ autoInstallPeers: false, strictPeerDependencies: false }))
const pkgVariationsDir = path.resolve('node_modules/.pnpm/@pnpm.e2e+abc@1.0.0')
const pkgVariation1 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules')
const pkgVariation1 = path.join(
'node_modules/.pnpm',
depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])),
'node_modules'
)
await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-a'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-b'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-c'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/dep-of-pkg-with-1-dep'))
const pkgVariation2 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules')
const pkgVariation2 = path.join(
'node_modules/.pnpm',
depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])),
'node_modules'
)
await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc'))
await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-a'))
await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-b'))
@@ -545,7 +569,7 @@ test('peer dependencies are linked when running one named installation', async (
// this part was failing. See issue: https://github.com/pnpm/pnpm/issues/1201
await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' })
await install(manifest, await testDefaults({ update: true, depth: 100, strictPeerDependencies: false }))
await install(manifest, await testDefaults({ autoInstallPeers: false, update: true, depth: 100, strictPeerDependencies: false }))
})
test('peer dependencies are linked when running two separate named installations', async () => {
@@ -557,16 +581,22 @@ test('peer dependencies are linked when running two separate named installations
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false }))
await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc-parent-with-ab'], await testDefaults({ strictPeerDependencies: false }))
const pkgVariationsDir = path.resolve('node_modules/.pnpm/@pnpm.e2e+abc@1.0.0')
const pkgVariation1 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules')
const pkgVariation1 = path.join(
'node_modules/.pnpm',
depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])),
'node_modules'
)
await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-a'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-b'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-c'))
await okFile(path.join(pkgVariation1, '@pnpm.e2e/dep-of-pkg-with-1-dep'))
const pkgVariation2 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '2.0.0' }]), 'node_modules')
const pkgVariation2 = path.join(
'node_modules/.pnpm',
depPathToFilename('/@pnpm.e2e/abc/1.0.0' + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '2.0.0' }])),
'node_modules'
)
await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc'))
await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-a'))
await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-b'))
@@ -625,7 +655,7 @@ test('peer bins are linked', async () => {
await addDependenciesToPackage({}, ['@pnpm.e2e/for-testing-peers-having-bins'], await testDefaults({ fastUnpack: false }))
const suffix = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-with-bin', version: '1.0.0' }])
const pkgVariation = path.join(`.pnpm/@pnpm.e2e+pkg-with-peer-having-bin@1.0.0${suffix}/node_modules`)
const pkgVariation = path.join('.pnpm', depPathToFilename(`/@pnpm.e2e/pkg-with-peer-having-bin/1.0.0${suffix}`), 'node_modules')
await project.isExecutable(path.join(pkgVariation, '@pnpm.e2e/pkg-with-peer-having-bin/node_modules/.bin', 'peer-with-bin'))
@@ -652,8 +682,8 @@ test('package that has parent as peer dependency', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer/1.0.0_@pnpm.e2e+alpha@1.0.0'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer/1.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0(@pnpm.e2e/alpha@1.0.0)'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0'])
})
test('own peer installed in root as well is linked to root', async () => {
@@ -681,12 +711,14 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
expect(lockfile.importers.project).toStrictEqual({
dependencies: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0_ajv@4.10.4',
},
specifiers: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0(ajv@4.10.4)',
},
},
})
})
@@ -702,8 +734,12 @@ test('peer dependency is grouped correctly with peer installed via separate inst
dependencies: {
'@pnpm.e2e/abc': '1.0.0',
},
}, await testDefaults({ reporter, lockfileDir, strictPeerDependencies: false }))
await addDependenciesToPackage(manifest, ['@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, lockfileDir, strictPeerDependencies: false }))
}, await testDefaults({ autoInstallPeers: false, reporter, lockfileDir, strictPeerDependencies: false }))
await addDependenciesToPackage(
manifest,
['@pnpm.e2e/peer-c@2.0.0'],
await testDefaults({ autoInstallPeers: false, reporter, lockfileDir, strictPeerDependencies: false })
)
expect(await exists(path.join('../node_modules/.pnpm/@pnpm.e2e+abc@1.0.0_@pnpm.e2e+peer-c@2.0.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep'))).toBeTruthy()
})
@@ -720,12 +756,14 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0_ajv@4.10.4',
},
specifiers: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0(ajv@4.10.4)',
},
},
})
}
@@ -736,12 +774,14 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0_ajv@4.10.4',
},
specifiers: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0(ajv@4.10.4)',
},
},
})
}
@@ -753,6 +793,7 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
mutation: 'uninstallSome',
rootDir: process.cwd(),
}, await testDefaults({
autoInstallPeers: false,
lockfileDir,
strictPeerDependencies: false,
})
@@ -762,10 +803,10 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
'ajv-keywords': '1.5.0',
},
specifiers: {
'ajv-keywords': '1.5.0',
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0',
},
},
})
}
@@ -783,12 +824,14 @@ test('external lockfile: peer dependency is grouped with dependent even after a
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
ajv: '4.10.4',
'ajv-keywords': '1.4.0_ajv@4.10.4',
},
specifiers: {
ajv: '4.10.4',
'ajv-keywords': '1.4.0',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.4.0',
version: '1.4.0(ajv@4.10.4)',
},
},
})
}
@@ -799,12 +842,14 @@ test('external lockfile: peer dependency is grouped with dependent even after a
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0_ajv@4.10.4',
},
specifiers: {
ajv: '4.10.4',
'ajv-keywords': '1.5.0',
ajv: {
specifier: '4.10.4',
version: '4.10.4',
},
'ajv-keywords': {
specifier: '1.5.0',
version: '1.5.0(ajv@4.10.4)',
},
},
})
}
@@ -822,12 +867,14 @@ test('external lockfile: peer dependency is grouped with dependent even after a
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0_@pnpm.e2e+peer-c@1.0.0',
'@pnpm.e2e/peer-c': '1.0.0',
},
specifiers: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0',
'@pnpm.e2e/peer-c': '1.0.0',
'@pnpm.e2e/abc-parent-with-ab': {
specifier: '1.0.0',
version: '1.0.0(@pnpm.e2e/peer-c@1.0.0)',
},
'@pnpm.e2e/peer-c': {
specifier: '1.0.0',
version: '1.0.0',
},
},
})
}
@@ -838,12 +885,14 @@ test('external lockfile: peer dependency is grouped with dependent even after a
const lockfile = await readYamlFile<Lockfile>(path.resolve('..', WANTED_LOCKFILE))
expect(lockfile.importers._).toStrictEqual({
dependencies: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0_@pnpm.e2e+peer-c@2.0.0',
'@pnpm.e2e/peer-c': '2.0.0',
},
specifiers: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0',
'@pnpm.e2e/peer-c': '2.0.0',
'@pnpm.e2e/abc-parent-with-ab': {
specifier: '1.0.0',
version: '1.0.0(@pnpm.e2e/peer-c@2.0.0)',
},
'@pnpm.e2e/peer-c': {
specifier: '2.0.0',
version: '2.0.0',
},
},
})
}
@@ -882,8 +931,8 @@ test('peer dependency is resolved from parent package', async () => {
const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([
'/@pnpm.e2e/has-tango-as-peer-dep/1.0.0_@pnpm.e2e+tango@1.0.0',
'/@pnpm.e2e/tango/1.0.0',
'/@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango@1.0.0)',
'/@pnpm.e2e/tango@1.0.0',
])
})
@@ -909,7 +958,7 @@ test('transitive peerDependencies field does not break the lockfile on subsequen
const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages!['/most/1.7.3'].dependencies!)).toStrictEqual([
expect(Object.keys(lockfile.packages!['/most@1.7.3'].dependencies!)).toStrictEqual([
'@most/multicast',
'@most/prelude',
'symbol-observable',
@@ -932,8 +981,8 @@ test('peer dependency is resolved from parent package via its alias', async () =
const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)
const suffix = createPeersFolderSuffix([{ name: '@pnpm.e2e/tango-tango', version: '1.0.0' }])
expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([
`/@pnpm.e2e/has-tango-as-peer-dep/1.0.0${suffix}`,
`/@pnpm.e2e/tango-tango/1.0.0${suffix}`,
`/@pnpm.e2e/has-tango-as-peer-dep@1.0.0${suffix}`,
`/@pnpm.e2e/tango-tango@1.0.0${suffix}`,
])
})
@@ -976,7 +1025,11 @@ test('warning is not reported when cannot resolve optional peer dependency', asy
const reporter = jest.fn()
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers@1.0.0', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false }))
await addDependenciesToPackage(
{},
['@pnpm.e2e/abc-optional-peers@1.0.0', '@pnpm.e2e/peer-c@2.0.0'],
await testDefaults({ autoInstallPeers: false, reporter, strictPeerDependencies: false })
)
expect(reporter).toHaveBeenCalledWith(
expect.objectContaining({
@@ -1033,7 +1086,7 @@ test('warning is not reported when cannot resolve optional peer dependency', asy
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependenciesMeta).toStrictEqual({
'@pnpm.e2e/peer-b': {
optional: true,
},
@@ -1048,7 +1101,11 @@ test('warning is not reported when cannot resolve optional peer dependency (spec
const reporter = jest.fn()
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers-meta-only@1.0.0', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false }))
await addDependenciesToPackage(
{},
['@pnpm.e2e/abc-optional-peers-meta-only@1.0.0', '@pnpm.e2e/peer-c@2.0.0'],
await testDefaults({ autoInstallPeers: false, reporter, strictPeerDependencies: false })
)
expect(reporter).toHaveBeenCalledWith(
expect.objectContaining({
@@ -1092,12 +1149,12 @@ test('warning is not reported when cannot resolve optional peer dependency (spec
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependencies).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependencies).toStrictEqual({
'@pnpm.e2e/peer-a': '^1.0.0',
'@pnpm.e2e/peer-b': '*',
'@pnpm.e2e/peer-c': '*',
})
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependenciesMeta).toStrictEqual({
'@pnpm.e2e/peer-b': {
optional: true,
},
@@ -1156,7 +1213,7 @@ test('peer dependency that is resolved by a dev dependency', async () => {
}, await testDefaults({ fastUnpack: false, lockfileOnly: true, strictPeerDependencies: false }))
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@types/mongoose/5.7.32'].dev).toBeUndefined()
expect(lockfile.packages['/@types/mongoose@5.7.32'].dev).toBeUndefined()
await mutateModulesInSingleProject({
manifest,
@@ -1223,5 +1280,5 @@ test('peer dependency is grouped with dependency when peer is resolved not from
await mutateModules(importers, await testDefaults({ allProjects }))
const lockfile = await readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
expect(lockfile.packages?.['/ajv-keywords/1.5.0_ajv@ajv'].dependencies?.['ajv']).toBe('link:ajv')
expect(lockfile.packages?.['/ajv-keywords@1.5.0(ajv@ajv)'].dependencies?.['ajv']).toBe('link:ajv')
})

View File

@@ -21,7 +21,7 @@ test('reports warning when installing deprecated packages', async () => {
} as DeprecationLog))
const lockfile = await project.readLockfile()
expect(lockfile.packages['/express/0.14.1'].deprecated).toBe('express 0.x series is deprecated')
expect(lockfile.packages['/express@0.14.1'].deprecated).toBe('express 0.x series is deprecated')
reporter.mockReset()

View File

@@ -10,10 +10,10 @@ test('time-based resolution mode', async () => {
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/bravo-dep/1.0.1',
'/@pnpm.e2e/bravo/1.0.0',
'/@pnpm.e2e/romeo-dep/1.0.0',
'/@pnpm.e2e/romeo/1.0.0',
'/@pnpm.e2e/bravo-dep@1.0.1',
'/@pnpm.e2e/bravo@1.0.0',
'/@pnpm.e2e/romeo-dep@1.0.0',
'/@pnpm.e2e/romeo@1.0.0',
])
})
@@ -27,10 +27,10 @@ test('time-based resolution mode with a registry that supports the time field in
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
'/@pnpm.e2e/bravo-dep/1.0.1',
'/@pnpm.e2e/bravo/1.0.0',
'/@pnpm.e2e/romeo-dep/1.0.0',
'/@pnpm.e2e/romeo/1.0.0',
'/@pnpm.e2e/bravo-dep@1.0.1',
'/@pnpm.e2e/bravo@1.0.0',
'/@pnpm.e2e/romeo-dep@1.0.0',
'/@pnpm.e2e/romeo@1.0.0',
])
})
@@ -46,14 +46,14 @@ test('the lowest version of a direct dependency is installed when resolution mod
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/foo/100.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/foo@100.0.0']).toBeTruthy()
}
manifest = await install(manifest, await testDefaults({ resolutionMode: 'time-based', update: true }))
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/foo/100.1.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/foo@100.1.0']).toBeTruthy()
}
expect(manifest.dependencies).toStrictEqual({
'@pnpm.e2e/foo': '^100.1.0',
@@ -78,15 +78,15 @@ test('the lowest version of a direct dependency is installed when resolution mod
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0']).toBeTruthy()
}
manifest = await install(manifest, await testDefaults({ resolutionMode: 'lowest-direct', update: true }))
{
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.1.0']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.1.0']).toBeTruthy()
}
expect(manifest.dependencies).toStrictEqual({
'@pnpm.e2e/pkg-with-1-dep': '^100.1.0',

View File

@@ -34,9 +34,9 @@ test('preserve subdeps on update', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.packages).toBeTruthy()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -70,9 +70,9 @@ test('preserve subdeps on update when no node_modules is present', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.packages).toBeTruthy()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -112,7 +112,7 @@ test('update dependency when external lockfile directory is used', async () => {
const lockfile = await readYamlFile<Lockfile>(path.join('..', WANTED_LOCKFILE))
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo@100.1.0'])
})
// Covers https://github.com/pnpm/pnpm/issues/2191
@@ -143,9 +143,9 @@ test('preserve subdeps when installing on a package that has one dependency spec
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -169,7 +169,7 @@ test('update only the packages that were requested to be updated when hoisting i
expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/bar': '^100.0.0', '@pnpm.e2e/foo': '^100.1.0' })
const lockfile = await project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual(['/@pnpm.e2e/bar/100.0.0', '/@pnpm.e2e/foo/100.1.0'])
expect(Object.keys(lockfile.packages)).toStrictEqual(['/@pnpm.e2e/bar@100.0.0', '/@pnpm.e2e/foo@100.1.0'])
})
test('update only the specified package', async () => {
@@ -202,9 +202,9 @@ test('update only the specified package', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.0'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.0'].dependencies).toStrictEqual({
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.0'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.1.0',
'is-positive': '3.1.0',

View File

@@ -74,11 +74,11 @@ test('dependency should not be added to package.json if it is already there', as
const lockfile = await project.readLockfile()
expect(lockfile.devDependencies['@pnpm.e2e/foo']).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foo/100.0.0'].dev).toBeTruthy()
expect(lockfile.devDependencies['@pnpm.e2e/foo'].version).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foo@100.0.0'].dev).toBeTruthy()
expect(lockfile.optionalDependencies['@pnpm.e2e/bar']).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/bar/100.0.0'].optional).toBeTruthy()
expect(lockfile.optionalDependencies['@pnpm.e2e/bar'].version).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/bar@100.0.0'].optional).toBeTruthy()
})
test('dependencies should be updated in the fields where they already are', async () => {
@@ -184,6 +184,7 @@ test('multiple save to package.json with `exact` versions (@rstacruz/tap-spec &
})
test('save to package.json with save prefix ~', async () => {
await addDistTag({ package: '@pnpm.e2e/pkg-with-1-dep', version: '100.0.0', distTag: 'latest' })
prepareEmpty()
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ pinnedVersion: 'minor' }))

View File

@@ -62,7 +62,10 @@ test('relative link is linked by the name of the alias', async () => {
const wantedLockfile = await project.readLockfile()
expect(wantedLockfile.dependencies).toStrictEqual({
hello: 'link:../hello-world-js-bin',
hello: {
specifier: 'link:../hello-world-js-bin',
version: 'link:../hello-world-js-bin',
},
})
})
@@ -146,10 +149,10 @@ test('relative link is rewritten by named installation to regular dependency', a
expect(project.requireModule('@pnpm.e2e/hello-world-js-bin/package.json').isLocal).toBeFalsy()
const wantedLockfile = await project.readLockfile()
expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('1.0.0')
expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0')
const currentLockfile = await project.readCurrentLockfile()
expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('1.0.0')
expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0')
})
test('relative link uses realpath when contained in a symlinked dir', async () => {

View File

@@ -1,9 +1,10 @@
import { promises as fs } from 'fs'
import path from 'path'
import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { RootLog } from '@pnpm/core-loggers'
import { PnpmError } from '@pnpm/error'
import { Lockfile, TarballResolution } from '@pnpm/lockfile-file'
import { LockfileV6 } from '@pnpm/lockfile-types'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { readPackageJsonFromDir } from '@pnpm/read-package-json'
import { addDistTag, getIntegrity, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
@@ -45,15 +46,14 @@ test('lockfile has correct format', async () => {
expect(modules!.pendingBuilds.length).toBe(0)
const lockfile = await project.readLockfile()
const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0'
const id = '/@pnpm.e2e/pkg-with-1-dep@100.0.0'
expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION)
expect(lockfile.specifiers).toBeTruthy()
expect(lockfile.dependencies).toBeTruthy()
expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0')
expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep'].version).toBe('100.0.0')
expect(lockfile.dependencies).toHaveProperty(['@rstacruz/tap-spec'])
expect(lockfile.dependencies['is-negative']).toContain('/') // has not shortened tarball from the non-standard registry
expect(lockfile.dependencies['is-negative'].version).toContain('/') // has not shortened tarball from the non-standard registry
expect(lockfile.packages).toBeTruthy() // has packages field
expect(lockfile.packages).toHaveProperty([id])
@@ -78,11 +78,11 @@ test('lockfile has dev deps even when installing for prod only', async () => {
}, await testDefaults({ production: true }))
const lockfile = await project.readLockfile()
const id = '/is-negative/2.1.0'
const id = '/is-negative@2.1.0'
expect(lockfile.devDependencies).toBeTruthy()
expect(lockfile.devDependencies['is-negative']).toBe('2.1.0')
expect(lockfile.devDependencies['is-negative'].version).toBe('2.1.0')
expect(lockfile.packages[id]).toBeTruthy()
})
@@ -92,19 +92,19 @@ test('lockfile with scoped package', async () => {
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'@types/semver': '5.3.31',
'@types/semver': {
specifier: '^5.3.31',
version: '5.3.31',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
resolution: {
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
},
},
},
specifiers: {
'@types/semver': '^5.3.31',
},
}, { lineWidth: 1000 })
await install({
@@ -118,10 +118,19 @@ test("lockfile doesn't lock subdependencies that don't satisfy the new specs", a
const project = prepareEmpty()
// dependends on react-onclickoutside@5.9.0
const manifest = await addDependenciesToPackage({}, ['react-datetime@2.8.8'], await testDefaults({ fastUnpack: false, save: true, strictPeerDependencies: false }))
const manifest = await addDependenciesToPackage({}, ['react-datetime@2.8.8'], await testDefaults({
autoInstallPeers: false,
fastUnpack: false,
save: true,
strictPeerDependencies: false,
}))
// dependends on react-onclickoutside@0.3.4
await addDependenciesToPackage(manifest, ['react-datetime@1.3.0'], await testDefaults({ save: true, strictPeerDependencies: false }))
await addDependenciesToPackage(manifest, ['react-datetime@1.3.0'], await testDefaults({
autoInstallPeers: false,
save: true,
strictPeerDependencies: false,
}))
expect(
project.requireModule('.pnpm/react-datetime@1.3.0/node_modules/react-onclickoutside/package.json').version
@@ -146,19 +155,19 @@ test('lockfile removed when no deps in package.json', async () => {
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'is-negative': '2.1.0',
'is-negative': {
specifier: '2.1.0',
version: '2.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative/2.1.0': {
'/is-negative@2.1.0': {
resolution: {
tarball: `http://localhost:${REGISTRY_MOCK_PORT}/is-negative/-/is-negative-2.1.0.tgz`,
},
},
},
specifiers: {
'is-negative': '2.1.0',
},
}, { lineWidth: 1000 })
await install({}, await testDefaults())
@@ -171,33 +180,37 @@ test('lockfile is fixed when it does not match package.json', async () => {
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'@types/semver': '5.3.31',
'is-negative': '2.1.0',
'is-positive': '3.1.0',
'@types/semver': {
specifier: '5.3.31',
version: '5.3.31',
},
'is-negative': {
specifier: '^2.1.0',
version: '2.1.0',
},
'is-positive': {
specifier: '^3.1.0',
version: '3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
resolution: {
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
},
},
'/is-negative/2.1.0': {
'/is-negative@2.1.0': {
resolution: {
tarball: `http://localhost:${REGISTRY_MOCK_PORT}/is-negative/-/is-negative-2.1.0.tgz`,
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
resolution: {
integrity: 'sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==',
},
},
},
specifiers: {
'@types/semver': '5.3.31',
'is-negative': '^2.1.0',
'is-positive': '^3.1.0',
},
}, { lineWidth: 1000 })
const reporter = sinon.spy()
@@ -218,10 +231,10 @@ test('lockfile is fixed when it does not match package.json', async () => {
const lockfile = await project.readLockfile()
expect(lockfile.devDependencies['is-negative']).toBe('2.1.0')
expect(lockfile.optionalDependencies['is-positive']).toBe('3.1.0')
expect(lockfile.devDependencies['is-negative'].version).toBe('2.1.0')
expect(lockfile.optionalDependencies['is-positive'].version).toBe('3.1.0')
expect(lockfile.dependencies).toBeFalsy()
expect(lockfile.packages).not.toHaveProperty(['/@types/semver/5.3.31'])
expect(lockfile.packages).not.toHaveProperty(['/@types/semver@5.3.31'])
})
test(`doing named installation when ${WANTED_LOCKFILE} exists already`, async () => {
@@ -229,33 +242,37 @@ test(`doing named installation when ${WANTED_LOCKFILE} exists already`, async ()
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'@types/semver': '5.3.31',
'is-negative': '2.1.0',
'is-positive': '3.1.0',
'@types/semver': {
specifier: '5.3.31',
version: '5.3.31',
},
'is-negative': {
specifier: '^2.1.0',
version: '2.1.0',
},
'is-positive': {
specifier: '^3.1.0',
version: '3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@types/semver/5.3.31': {
'/@types/semver@5.3.31': {
resolution: {
integrity: 'sha512-WBv5F9HrWTyG800cB9M3veCVkFahqXN7KA7c3VUCYZm/xhNzzIFiXiq+rZmj75j7GvWelN3YNrLX7FjtqBvhMw==',
},
},
'/is-negative/2.1.0': {
'/is-negative@2.1.0': {
resolution: {
tarball: `http://localhost:${REGISTRY_MOCK_PORT}/is-negative/-/is-negative-2.1.0.tgz`,
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
resolution: {
integrity: 'sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==',
},
},
},
specifiers: {
'@types/semver': '5.3.31',
'is-negative': '^2.1.0',
'is-positive': '^3.1.0',
},
}, { lineWidth: 1000 })
const reporter = sinon.spy()
@@ -339,17 +356,17 @@ test(`subdeps are updated on repeat install if outer ${WANTED_LOCKFILE} does not
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']
delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0']
lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'] = {
lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'] = {
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'),
},
}
lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0'
lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0'
await writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 })
@@ -366,8 +383,8 @@ test("recreates lockfile if it doesn't match the dependencies in package.json",
manifest = await addDependenciesToPackage(manifest, ['map-obj@1.0.0'], await testDefaults({ pinnedVersion: 'patch', targetDependenciesField: 'optionalDependencies' }))
const lockfile1 = await project.readLockfile()
expect(lockfile1.dependencies['is-negative']).toBe('1.0.0')
expect(lockfile1.specifiers['is-negative']).toBe('1.0.0')
expect(lockfile1.dependencies['is-negative'].version).toBe('1.0.0')
expect(lockfile1.dependencies['is-negative'].specifier).toBe('1.0.0')
manifest.dependencies!['is-negative'] = '^2.1.0'
manifest.devDependencies!['is-positive'] = '^2.0.0'
@@ -377,14 +394,14 @@ test("recreates lockfile if it doesn't match the dependencies in package.json",
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['is-negative']).toBe('2.1.0')
expect(lockfile.specifiers['is-negative']).toBe('^2.1.0')
expect(lockfile.dependencies['is-negative'].version).toBe('2.1.0')
expect(lockfile.dependencies['is-negative'].specifier).toBe('^2.1.0')
expect(lockfile.devDependencies['is-positive']).toBe('2.0.0')
expect(lockfile.specifiers['is-positive']).toBe('^2.0.0')
expect(lockfile.devDependencies['is-positive'].version).toBe('2.0.0')
expect(lockfile.devDependencies['is-positive'].specifier).toBe('^2.0.0')
expect(lockfile.optionalDependencies['map-obj']).toBe('1.0.1')
expect(lockfile.specifiers['map-obj']).toBe('1.0.1')
expect(lockfile.optionalDependencies['map-obj'].version).toBe('1.0.1')
expect(lockfile.optionalDependencies['map-obj'].specifier).toBe('1.0.1')
})
test('repeat install with lockfile should not mutate lockfile when dependency has version specified with v prefix', async () => {
@@ -394,7 +411,7 @@ test('repeat install with lockfile should not mutate lockfile when dependency ha
const lockfile1 = await project.readLockfile()
expect(lockfile1.dependencies['highmaps-release']).toBe('5.0.11')
expect(lockfile1.dependencies['highmaps-release'].version).toBe('5.0.11')
await rimraf('node_modules')
@@ -421,7 +438,7 @@ test('package is not marked dev if it is also a subdep of a regular dependency',
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].dev).toBeFalsy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].dev).toBeFalsy()
})
test('package is not marked optional if it is also a subdep of a regular dependency', async () => {
@@ -435,7 +452,7 @@ test('package is not marked optional if it is also a subdep of a regular depende
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].optional).toBeFalsy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].optional).toBeFalsy()
})
test('scoped module from different registry', async () => {
@@ -453,13 +470,22 @@ test('scoped module from different registry', async () => {
expect(lockfile).toStrictEqual({
dependencies: {
'@foo/has-dep-from-same-scope': '1.0.0',
'@zkochan/foo': '1.0.0',
'is-positive': '3.1.0',
'@foo/has-dep-from-same-scope': {
specifier: '^1.0.0',
version: '1.0.0',
},
'@zkochan/foo': {
specifier: '^1.0.0',
version: '1.0.0',
},
'is-positive': {
specifier: '^3.1.0',
version: '3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@foo/has-dep-from-same-scope/1.0.0': {
'/@foo/has-dep-from-same-scope@1.0.0': {
dependencies: {
'@foo/no-deps': '1.0.0',
'is-negative': '1.0.0',
@@ -469,19 +495,19 @@ test('scoped module from different registry', async () => {
integrity: getIntegrity('@foo/has-dep-from-same-scope', '1.0.0'),
},
},
'/@foo/no-deps/1.0.0': {
'/@foo/no-deps@1.0.0': {
dev: false,
resolution: {
integrity: getIntegrity('@foo/no-deps', '1.0.0'),
},
},
'/@zkochan/foo/1.0.0': {
'/@zkochan/foo@1.0.0': {
dev: false,
resolution: {
integrity: 'sha512-IFvrYpq7E6BqKex7A7czIFnFncPiUVdhSzGhAOWpp8RlkXns4y/9ZdynxaA/e0VkihRxQkihE2pTyvxjfe/wBg==',
},
},
'/is-negative/1.0.0': {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -490,7 +516,7 @@ test('scoped module from different registry', async () => {
integrity: 'sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==',
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
dev: false,
engines: {
node: '>=0.10.0',
@@ -500,11 +526,6 @@ test('scoped module from different registry', async () => {
},
},
},
specifiers: {
'@foo/has-dep-from-same-scope': '^1.0.0',
'@zkochan/foo': '^1.0.0',
'is-positive': '^3.1.0',
},
})
})
@@ -631,7 +652,7 @@ test('dev property is correctly set for package that is duplicated to both the d
await addDependenciesToPackage({}, ['overlap@2.2.8'], await testDefaults())
const lockfile = await project.readLockfile()
expect(lockfile.packages['/couleurs/5.0.0'].dev === false).toBeTruthy()
expect(lockfile.packages['/couleurs@5.0.0'].dev === false).toBeTruthy()
})
test('no lockfile', async () => {
@@ -652,20 +673,20 @@ test('lockfile is ignored when lockfile = false', async () => {
await writeYamlFile(WANTED_LOCKFILE, {
dependencies: {
'is-negative': '2.1.0',
'is-negative': {
specifier: '2.1.0',
version: '2.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative/2.1.0': {
'/is-negative@2.1.0': {
resolution: {
integrity: 'sha1-uZnX2TX0P1IHsBsA094ghS9Mp10=', // Invalid integrity
tarball: `http://localhost:${REGISTRY_MOCK_PORT}/is-negative/-/is-negative-2.1.0.tgz`,
},
},
},
specifiers: {
'is-negative': '2.1.0',
},
}, { lineWidth: 1000 })
const reporter = sinon.spy()
@@ -741,7 +762,7 @@ test('save tarball URL when it is non-standard', async () => {
const lockfile = await project.readLockfile()
expect((lockfile.packages['/esprima-fb/3001.1.0-dev-harmony-fb'].resolution as TarballResolution).tarball).toBe('esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz')
expect((lockfile.packages['/esprima-fb@3001.1.0-dev-harmony-fb'].resolution as TarballResolution).tarball).toBe('esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz')
})
test('packages installed via tarball URL from the default registry are normalized', async () => {
@@ -756,18 +777,24 @@ test('packages installed via tarball URL from the default registry are normalize
expect(lockfile).toStrictEqual({
dependencies: {
'is-positive': '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz',
'@pnpm.e2e/pkg-with-tarball-dep-from-registry': '1.0.0',
'is-positive': {
specifier: 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz',
version: '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz',
},
'@pnpm.e2e/pkg-with-tarball-dep-from-registry': {
specifier: `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`,
version: '1.0.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0'),
},
},
'/@pnpm.e2e/pkg-with-tarball-dep-from-registry/1.0.0': {
'/@pnpm.e2e/pkg-with-tarball-dep-from-registry@1.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
},
@@ -786,10 +813,6 @@ test('packages installed via tarball URL from the default registry are normalize
version: '1.0.0',
},
},
specifiers: {
'is-positive': 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz',
'@pnpm.e2e/pkg-with-tarball-dep-from-registry': `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`,
},
})
})
@@ -818,18 +841,18 @@ test('lockfile file has correct format when lockfile directory does not equal th
expect(modules.pendingBuilds.length).toBe(0)
{
const lockfile: Lockfile = await readYamlFile(WANTED_LOCKFILE)
const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0'
const lockfile: LockfileV6 = await readYamlFile(WANTED_LOCKFILE)
const id = '/@pnpm.e2e/pkg-with-1-dep@100.0.0'
expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION)
expect(lockfile.importers).toBeTruthy()
expect(lockfile.importers.project).toBeTruthy()
expect(lockfile.importers.project.specifiers).toBeTruthy()
expect(lockfile.importers.project).toBeTruthy()
expect(lockfile.importers.project.dependencies).toBeTruthy()
expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0')
expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep'].version).toBe('100.0.0')
expect(lockfile.importers.project.dependencies!['@zkochan/foo']).toBeTruthy()
expect(lockfile.importers.project.dependencies!['is-negative']).toContain('/')
expect(lockfile.importers.project.dependencies!['is-negative'].version).toContain('/')
expect(lockfile.packages![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.packages![id].resolution).toHaveProperty(['integrity'])
@@ -852,17 +875,16 @@ test('lockfile file has correct format when lockfile directory does not equal th
}))
{
const lockfile = await readYamlFile<Lockfile>(path.join('..', WANTED_LOCKFILE))
const lockfile = await readYamlFile<LockfileV6>(path.join('..', WANTED_LOCKFILE))
expect(lockfile.importers).toHaveProperty(['project-2'])
// previous entries are not removed
const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0'
const id = '/@pnpm.e2e/pkg-with-1-dep@100.0.0'
expect(lockfile.importers.project.specifiers).toBeTruthy()
expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0')
expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep'].version).toBe('100.0.0')
expect(lockfile.importers.project.dependencies).toHaveProperty(['@zkochan/foo'])
expect(lockfile.importers.project.dependencies!['is-negative']).toContain('/')
expect(lockfile.importers.project.dependencies!['is-negative'].version).toContain('/')
expect(lockfile.packages).toHaveProperty([id])
expect(lockfile.packages![id].dependencies).toBeTruthy()
@@ -902,29 +924,29 @@ test(`doing named installation when shared ${WANTED_LOCKFILE} exists already`, a
importers: {
pkg1: {
dependencies: {
'is-negative': '2.1.0',
},
specifiers: {
'is-negative': '^2.1.0',
'is-negative': {
specifier: '^2.1.0',
version: '2.1.0',
},
},
},
pkg2: {
dependencies: {
'is-positive': '3.1.0',
},
specifiers: {
'is-positive': '^3.1.0',
'is-positive': {
specifier: '^3.1.0',
version: '3.1.0',
},
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative/2.1.0': {
'/is-negative@2.1.0': {
resolution: {
tarball: `http://localhost:${REGISTRY_MOCK_PORT}/is-negative/-/is-negative-2.1.0.tgz`,
},
},
'/is-positive/3.1.0': {
'/is-positive@3.1.0': {
resolution: {
integrity: 'sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==',
},
@@ -941,7 +963,7 @@ test(`doing named installation when shared ${WANTED_LOCKFILE} exists already`, a
})
)
const currentLockfile = await readYamlFile<Lockfile>(path.resolve('node_modules/.pnpm/lock.yaml'))
const currentLockfile = await readYamlFile<LockfileV6>(path.resolve('node_modules/.pnpm/lock.yaml'))
expect(Object.keys(currentLockfile['importers'])).toStrictEqual(['pkg2'])
@@ -1037,8 +1059,8 @@ test('lockfile is not getting broken if the used registry changes', async () =>
await addDependenciesToPackage(manifest, ['is-negative@1'], newOpts)
expect(Object.keys((await project.readLockfile()).packages)).toStrictEqual([
'/is-negative/1.0.1',
'/is-positive/1.0.0',
'/is-negative@1.0.1',
'/is-positive@1.0.0',
])
})
@@ -1050,8 +1072,8 @@ test('broken lockfile is fixed even if it seems like up to date at first. Unless
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ lockfileOnly: true }))
{
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0']
await writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 })
}
@@ -1075,7 +1097,7 @@ test('broken lockfile is fixed even if it seems like up to date at first. Unless
await project.has('@pnpm.e2e/pkg-with-1-dep')
const lockfile = await project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
})
const REGISTRY_MIRROR_DIR = path.join(__dirname, './registry-mirror')
@@ -1113,11 +1135,14 @@ test('tarball domain differs from registry domain', async () => {
expect(lockfile).toStrictEqual({
dependencies: {
'is-positive': 'registry.npmjs.org/is-positive/3.1.0',
'is-positive': {
specifier: '^3.1.0',
version: 'registry.npmjs.org/is-positive@3.1.0',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'registry.npmjs.org/is-positive/3.1.0': {
'registry.npmjs.org/is-positive@3.1.0': {
dev: false,
engines: { node: '>=0.10.0' },
name: 'is-positive',
@@ -1129,7 +1154,6 @@ test('tarball domain differs from registry domain', async () => {
version: '3.1.0',
},
},
specifiers: { 'is-positive': '^3.1.0' },
})
})
@@ -1157,7 +1181,10 @@ test('tarball installed through non-standard URL endpoint from the registry doma
expect(lockfile).toStrictEqual({
dependencies: {
'is-positive': '@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz',
'is-positive': {
specifier: 'https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz',
version: '@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz',
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
@@ -1171,35 +1198,33 @@ test('tarball installed through non-standard URL endpoint from the registry doma
version: '3.1.0',
},
},
specifiers: {
'is-positive': 'https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz',
},
})
})
test('a lockfile with merge conflicts is autofixed', async () => {
// TODO: fix merge conflicts with the new lockfile format (TODOv8)
test.skip('a lockfile with merge conflicts is autofixed', async () => {
const project = prepareEmpty()
await fs.writeFile(WANTED_LOCKFILE, `\
importers:
.:
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep':
specifier: '>100.0.0'
<<<<<<< HEAD
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0
version: 100.0.0
=======
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.1.0
version: 100.1.0
>>>>>>> next
specifiers:
'@pnpm.e2e/dep-of-pkg-with-1-dep': '>100.0.0'
lockfileVersion: ${LOCKFILE_VERSION}
packages:
<<<<<<< HEAD
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
dev: false
resolution:
integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}
=======
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0:
dev: false
resolution:
integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0')}
@@ -1212,7 +1237,7 @@ packages:
}, await testDefaults())
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0')
expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.1.0')
})
test('a lockfile with duplicate keys is fixed', async () => {
@@ -1222,12 +1247,12 @@ test('a lockfile with duplicate keys is fixed', async () => {
importers:
.:
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0
specifiers:
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0'
'@pnpm.e2e/dep-of-pkg-with-1-dep':
specifier: '100.0.0'
version: 100.0.0
lockfileVersion: ${LOCKFILE_VERSION}
packages:
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
dev: false
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
@@ -1241,7 +1266,7 @@ packages:
}, await testDefaults({ reporter }))
const lockfile = await project.readLockfile()
expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0')
expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0')
expect(reporter).toBeCalledWith(expect.objectContaining({
level: 'warn',
@@ -1258,12 +1283,12 @@ test('a lockfile with duplicate keys is causes an exception, when frozenLockfile
importers:
.:
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0
specifiers:
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0'
'@pnpm.e2e/dep-of-pkg-with-1-dep':
specifier: '100.0.0'
version: 100.0.0
lockfileVersion: ${LOCKFILE_VERSION}
packages:
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
dev: false
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
@@ -1296,7 +1321,7 @@ importers:
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0'
lockfileVersion: ${LOCKFILE_VERSION}
packages:
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
dev: false
resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}}
@@ -1328,7 +1353,7 @@ test('build metadata is always ignored in versions and the lockfile is not flick
'@monorepolint/cli@0.5.0-alpha.51',
], await testDefaults({ lockfileOnly: true }))
const depPath = '/@monorepolint/core/0.5.0-alpha.51'
const depPath = '/@monorepolint/core@0.5.0-alpha.51'
const initialLockfile = await project.readLockfile()
const initialPkgEntry = initialLockfile.packages[depPath]
expect(initialPkgEntry?.resolution).toStrictEqual({
@@ -1348,8 +1373,8 @@ test('a broken lockfile should not break the store', async () => {
const manifest = await addDependenciesToPackage({}, ['is-positive@1.0.0'], { ...opts, lockfileOnly: true })
const lockfile: Lockfile = await readYamlFile(WANTED_LOCKFILE)
lockfile.packages!['/is-positive/1.0.0'].name = 'bad-name'
lockfile.packages!['/is-positive/1.0.0'].version = '1.0.0'
lockfile.packages!['/is-positive@1.0.0'].name = 'bad-name'
lockfile.packages!['/is-positive@1.0.0'].version = '1.0.0'
await writeYamlFile(WANTED_LOCKFILE, lockfile)
@@ -1359,8 +1384,8 @@ test('a broken lockfile should not break the store', async () => {
rootDir: process.cwd(),
}, await testDefaults({ lockfileOnly: true, storeDir: path.resolve('store2') }))
delete lockfile.packages!['/is-positive/1.0.0'].name
delete lockfile.packages!['/is-positive/1.0.0'].version
delete lockfile.packages!['/is-positive@1.0.0'].name
delete lockfile.packages!['/is-positive@1.0.0'].version
await writeYamlFile(WANTED_LOCKFILE, lockfile)
await rimraf(path.resolve('node_modules'))
@@ -1379,7 +1404,7 @@ test('include tarball URL', async () => {
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], opts)
const lockfile = await project.readLockfile()
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).tarball)
expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].resolution as TarballResolution).tarball)
.toBe(`http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep/-/pkg-with-1-dep-100.0.0.tgz`)
})
@@ -1407,7 +1432,7 @@ test('lockfile v6', async () => {
test('lockfile v5 is converted to lockfile v6', async () => {
prepareEmpty()
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], await testDefaults())
const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], await testDefaults({ useLockfileV6: false }))
{
const lockfile = await readYamlFile<any>(WANTED_LOCKFILE) // eslint-disable-line @typescript-eslint/no-explicit-any

View File

@@ -20,5 +20,5 @@ test('copy does not fail on package that self-requires itself', async () => {
expect(m).toBeTruthy() // requires-itself is available with packageImportMethod = copy
const lockfile = await project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/requires-itself/1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' })
expect(lockfile.packages['/@pnpm.e2e/requires-itself@1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' })
})

View File

@@ -1,5 +1,5 @@
import path from 'path'
import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { LOCKFILE_VERSION_V6 as LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import {
PackageManifestLog,
RootLog,
@@ -161,10 +161,10 @@ test('uninstall package with dependencies and do not touch other deps', async ()
const lockfile = await project.readLockfile()
expect(lockfile.dependencies).toStrictEqual({
'is-negative': '2.1.0',
})
expect(lockfile.specifiers).toStrictEqual({
'is-negative': '2.1.0',
'is-negative': {
specifier: '2.1.0',
version: '2.1.0',
},
})
})
@@ -318,21 +318,19 @@ test('uninstalling a dependency from package that uses shared lockfile', async (
expect(lockfile).toStrictEqual({
importers: {
'project-1': {
specifiers: {},
},
'project-1': {},
'project-2': {
dependencies: {
'is-negative': '1.0.0',
},
specifiers: {
'is-negative': '1.0.0',
'is-negative': {
specifier: '1.0.0',
version: '1.0.0',
},
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative/1.0.0': {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',

View File

@@ -33,7 +33,8 @@ test('unlink 1 package that exists in package.json', async () => {
}),
])
const opts = await testDefaults({ fastUnpack: false, store: path.resolve('.store') })
// TODO: unset useLockfileV6
const opts = await testDefaults({ fastUnpack: false, store: path.resolve('.store'), useLockfileV6: false })
let manifest = await link(
['is-subdir', 'is-positive'],
@@ -96,7 +97,7 @@ test("don't update package when unlinking", async () => {
test(`don't update package when unlinking. Initial link is done on a package w/o ${WANTED_LOCKFILE}`, async () => {
const project = prepareEmpty()
const opts = await testDefaults({ dir: process.cwd() })
const opts = await testDefaults({ dir: process.cwd(), resolutionMode: 'lowest-direct' })
process.chdir('..')
await writeJsonFile('foo/package.json', {
@@ -122,7 +123,7 @@ test(`don't update package when unlinking. Initial link is done on a package w/o
rootDir: process.cwd(),
}, opts)
expect(project.requireModule('@pnpm.e2e/foo/package.json').version).toBe('100.1.0')
expect(project.requireModule('@pnpm.e2e/foo/package.json').version).toBe('100.0.0')
expect(unlinkResult.manifest.dependencies).toStrictEqual({ '@pnpm.e2e/foo': '^100.0.0' })
})

View File

@@ -51,6 +51,9 @@
{
"path": "../../lockfile/lockfile-to-pnp"
},
{
"path": "../../lockfile/lockfile-types"
},
{
"path": "../../lockfile/lockfile-utils"
},

View File

@@ -1,32 +1,32 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/pre-and-postinstall-scripts-example': '*'
json-append: 1.1.1
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0
json-append: 1.1.1
'@pnpm.e2e/pre-and-postinstall-scripts-example':
specifier: '*'
version: 1.0.0
json-append:
specifier: 1.1.1
version: 1.1.1
packages:
/@pnpm.e2e/hello-world-js-bin/1.0.0:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==}
hasBin: true
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0:
/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0:
resolution: {integrity: sha512-p2L5hqNZFiWX/4tQiuawjhh4xVy2QObs21HzZa6DdGZfWlgzdKiMN5MLuwh5ehI0GxuNWSrq0+/T+DEEr7kWVw==}
requiresBuild: true
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false
/buffer-from/1.1.2:
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: false
/concat-stream/1.6.2:
/concat-stream@1.6.2:
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
engines: {'0': node >= 0.8}
dependencies:
@@ -36,30 +36,30 @@ packages:
typedarray: 0.0.6
dev: false
/core-util-is/1.0.3:
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/isarray/1.0.0:
/isarray@1.0.0:
resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
dev: false
/json-append/1.1.1:
/json-append@1.1.1:
resolution: {integrity: sha1-Pnu6YqBHvzHJjexDGaU5uyhrsQQ=}
hasBin: true
dependencies:
concat-stream: 1.6.2
dev: false
/process-nextick-args/2.0.1:
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: false
/readable-stream/2.3.7:
/readable-stream@2.3.7:
resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
dependencies:
core-util-is: 1.0.3
@@ -71,20 +71,20 @@ packages:
util-deprecate: 1.0.2
dev: false
/safe-buffer/5.1.2:
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: false
/string_decoder/1.1.1:
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
dev: false
/typedarray/0.0.6:
/typedarray@0.0.6:
resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=}
dev: false
/util-deprecate/1.0.2:
/util-deprecate@1.0.2:
resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
dev: false

View File

@@ -1,35 +1,35 @@
lockfileVersion: 5.4
specifiers:
glob: ^7.0.5
rimraf: ^2.6.2
lockfileVersion: '6.0'
dependencies:
glob: 7.2.0
rimraf: 2.7.1
glob:
specifier: ^7.0.5
version: 7.2.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
packages:
/balanced-match/1.0.2:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.2.0:
/glob@7.2.0:
resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
dependencies:
fs.realpath: 1.0.0
@@ -40,41 +40,41 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch/3.1.2:
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.0
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,33 +1,32 @@
lockfileVersion: 5.4
specifiers:
glob: ^7.0.5
lockfileVersion: '6.0'
dependencies:
glob: 7.2.0
glob:
specifier: ^7.0.5
version: 7.2.0
packages:
/balanced-match/1.0.2:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.2.0:
/glob@7.2.0:
resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
dependencies:
fs.realpath: 1.0.0
@@ -38,34 +37,34 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch/3.1.2:
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,19 +1,18 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/pkg-with-optional': 1.0.0
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/pkg-with-optional': 1.0.0
'@pnpm.e2e/pkg-with-optional':
specifier: 1.0.0
version: 1.0.0
packages:
/@pnpm.e2e/dep-of-optional-pkg/1.0.0:
/@pnpm.e2e/dep-of-optional-pkg@1.0.0:
resolution: {integrity: sha512-ouCWx8q98JzIJ/Ef2Ny6uvHYWxe+T2irzTBhntx/31Jd+1QxbGVETO8yJXrDZyuD3rBGaZULj78gIcwa068fAA==}
dev: false
optional: true
/@pnpm.e2e/not-compatible-with-any-os/1.0.0:
/@pnpm.e2e/not-compatible-with-any-os@1.0.0:
resolution: {integrity: sha512-8sAm2PvHtibzjUYOXrmvmHXhthl7mD582GNDjhQ7CrQblo084OiAjNGaLka4vXXWF93LVaJ91btIRCECJPFLXw==}
os: [this-os-does-not-exist]
requiresBuild: true
@@ -22,7 +21,7 @@ packages:
dev: false
optional: true
/@pnpm.e2e/pkg-with-optional/1.0.0:
/@pnpm.e2e/pkg-with-optional@1.0.0:
resolution: {integrity: sha512-Er5ld8foGmtV7tEzjy8NPYoA9MkUfAe7iU4dx/5wpPYhX32+SUqML8iG2RmjqrVdCDFzRepG3zSP6RcCTVaMPQ==}
optionalDependencies:
'@pnpm.e2e/not-compatible-with-any-os': 1.0.0

View File

@@ -1,10 +1,9 @@
lockfileVersion: 5.4
specifiers:
tar-pkg: file:../tar-pkg-1.0.0.tgz
lockfileVersion: '6.0'
dependencies:
tar-pkg: file:../tar-pkg-1.0.0.tgz
tar-pkg:
specifier: file:../tar-pkg-1.0.0.tgz
version: file:../tar-pkg-1.0.0.tgz
packages:

View File

@@ -1,7 +1,6 @@
lockfileVersion: 5.4
specifiers:
example: link:example
lockfileVersion: '6.0'
dependencies:
example: link:example
example:
specifier: link:example
version: link:example

View File

@@ -1,49 +1,51 @@
lockfileVersion: 5.4
specifiers:
'@zkochan/not-exists': 1.2.0
is-negative: ^2.1.0
is-positive: ^1.0.0
rimraf: ^2.6.2
lockfileVersion: '6.0'
dependencies:
is-positive: 1.0.0
rimraf: 2.7.1
is-positive:
specifier: ^1.0.0
version: 1.0.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
optionalDependencies:
'@zkochan/not-exists': 1.2.0
'@zkochan/not-exists':
specifier: 1.2.0
version: 1.2.0
devDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
packages:
/@zkochan/not-exists/1.2.0:
/@zkochan/not-exists@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
dev: false
optional: true
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.1.6:
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
fs.realpath: 1.0.0
@@ -54,51 +56,51 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.1.6
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,18 +1,19 @@
lockfileVersion: 5.4
specifiers:
has-flag: 1.0.0
ms: 1.0.0
send: 0.17.2
lockfileVersion: '6.0'
dependencies:
has-flag: 1.0.0
ms: 1.0.0
send: 0.17.2
has-flag:
specifier: 1.0.0
version: 1.0.0
ms:
specifier: 1.0.0
version: 1.0.0
send:
specifier: 0.17.2
version: 0.17.2
packages:
/debug/2.6.9:
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
@@ -23,44 +24,44 @@ packages:
ms: 2.0.0
dev: false
/depd/1.1.2:
/depd@1.1.2:
resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
engines: {node: '>= 0.6'}
dev: false
/destroy/1.0.4:
/destroy@1.0.4:
resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
dev: false
/ee-first/1.1.1:
/ee-first@1.1.1:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
dev: false
/encodeurl/1.0.2:
/encodeurl@1.0.2:
resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
engines: {node: '>= 0.8'}
dev: false
/escape-html/1.0.3:
/escape-html@1.0.3:
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
dev: false
/etag/1.8.1:
/etag@1.8.1:
resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
engines: {node: '>= 0.6'}
dev: false
/fresh/0.5.2:
/fresh@0.5.2:
resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
engines: {node: '>= 0.6'}
dev: false
/has-flag/1.0.0:
/has-flag@1.0.0:
resolution: {integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=}
engines: {node: '>=0.10.0'}
dev: false
/http-errors/1.8.1:
/http-errors@1.8.1:
resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
engines: {node: '>= 0.6'}
dependencies:
@@ -71,41 +72,41 @@ packages:
toidentifier: 1.0.1
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/mime/1.6.0:
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
dev: false
/ms/1.0.0:
/ms@1.0.0:
resolution: {integrity: sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM=}
dev: false
/ms/2.0.0:
/ms@2.0.0:
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
dev: false
/ms/2.1.3:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false
/on-finished/2.3.0:
/on-finished@2.3.0:
resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
engines: {node: '>= 0.8'}
dependencies:
ee-first: 1.1.1
dev: false
/range-parser/1.2.1:
/range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
dev: false
/send/0.17.2:
/send@0.17.2:
resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==}
engines: {node: '>= 0.8.0'}
dependencies:
@@ -126,16 +127,16 @@ packages:
- supports-color
dev: false
/setprototypeof/1.2.0:
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
dev: false
/statuses/1.5.0:
/statuses@1.5.0:
resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
engines: {node: '>= 0.6'}
dev: false
/toidentifier/1.0.1:
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
dev: false

View File

@@ -1,39 +1,53 @@
lockfileVersion: '6.0'
dependencies:
is-positive: 1.0.0
rimraf: 2.7.1
devDependencies:
is-negative: 2.1.0
lockfileVersion: 5.1
is-positive:
specifier: ^1.0.0
version: 1.0.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
optionalDependencies:
colors: 1.2.0
colors:
specifier: 1.2.0
version: 1.2.0
devDependencies:
is-negative:
specifier: ^2.1.0
version: 2.1.0
packages:
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
resolution:
integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
resolution:
integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
/colors/1.2.0:
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
engines:
node: '>=0.1.90'
optional: true
resolution:
integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
resolution:
integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
resolution:
integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
/glob/7.1.6:
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -42,62 +56,52 @@ packages:
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
resolution:
integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
resolution:
integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: true
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
resolution:
integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
resolution:
integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.1.6
dev: false
hasBin: true
resolution:
integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false
resolution:
integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
specifiers:
colors: 1.2.0
is-negative: ^2.1.0
is-positive: ^1.0.0
rimraf: ^2.6.2

View File

@@ -1,35 +1,36 @@
lockfileVersion: 5.4
specifiers:
inflight: 1.0.6
is-positive: 1.0.0
once: ^1.4.0
lockfileVersion: '6.0'
dependencies:
is-positive: 1.0.0
once: 1.4.0
is-positive:
specifier: 1.0.0
version: 1.0.0
once:
specifier: ^1.4.0
version: 1.4.0
devDependencies:
inflight: 1.0.6
inflight:
specifier: 1.0.6
version: 1.0.6
packages:
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}

View File

@@ -1,13 +1,13 @@
lockfileVersion: 5.4
lockfileVersion: '6.0'
specifiers:
'@pnpm.e2e/abc': 1.0.0
devDependencies:
'@pnpm.e2e/abc': 1.0.0_glqo5zmflraj4jc2fza4v4hjou
'@pnpm.e2e/abc':
specifier: 1.0.0
version: 1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.1)
packages:
/@pnpm.e2e/abc/1.0.0_glqo5zmflraj4jc2fza4v4hjou:
/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.1):
resolution: {integrity: sha512-/BCMmCRQ58DLWtF5iU97Lbf0s+llpWHvvZvQfFnCYFBpa1pfYnlJW1k6+Z4UzcUdYrUvyDmYPwxGVvPStAUw1w==}
peerDependencies:
'@pnpm.e2e/peer-a': ^1.0.0
@@ -20,18 +20,18 @@ packages:
'@pnpm.e2e/peer-c': 1.0.1
dev: true
/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: sha512-KUmwlEiE3pzpmPCfrLkoOO7fmL4Tft+dcm6YQlUfOUJvHO73xlcKVoA/xOHP/ayUO8GiPlIqWRbKHrsxvXGE8g==}
dev: true
/@pnpm.e2e/peer-a/1.0.1:
/@pnpm.e2e/peer-a@1.0.1:
resolution: {integrity: sha512-eKxesosmflSp5xnW1gyRhMZ75RLI7SupTZNe1SK6EPDDgNmswNxbwdpyUDFUDWa3yHd5WSQbRDH2IysqMWIs2g==}
dev: true
/@pnpm.e2e/peer-b/1.0.0:
/@pnpm.e2e/peer-b@1.0.0:
resolution: {integrity: sha512-jvRKPPRU2qx/AxfcpyO/aSX8TQclpXUXOnUbSLxgBi+P4+InCRkK2u+jFQbcc+b8rIFzR0jr7YCIYLIjRDPPcw==}
dev: true
/@pnpm.e2e/peer-c/1.0.1:
/@pnpm.e2e/peer-c@1.0.1:
resolution: {integrity: sha512-6ag+AQOLJgsioiG8aInnOJGautKz7lNf3zKQ8FJHOb4b3yIclmUofTaDwth9ydp9W56qzwbHWXjkdrqfW5JViQ==}
dev: true

View File

@@ -0,0 +1 @@
auto-install-peers=false

View File

@@ -1,14 +1,13 @@
lockfileVersion: 5.4
specifiers:
pnpm-default-reporter: 0.14.7
lockfileVersion: '6.0'
dependencies:
pnpm-default-reporter: 0.14.7
pnpm-default-reporter:
specifier: 0.14.7
version: 0.14.7
packages:
/@most/multicast/1.3.0_most@1.9.0:
/@most/multicast@1.3.0(most@1.9.0):
resolution: {integrity: sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==}
peerDependencies:
most: ^1.0.1
@@ -17,57 +16,57 @@ packages:
most: 1.9.0
dev: false
/@most/prelude/1.8.0:
/@most/prelude@1.8.0:
resolution: {integrity: sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==}
dev: false
/@types/common-tags/1.8.1:
/@types/common-tags@1.8.1:
resolution: {integrity: sha512-20R/mDpKSPWdJs5TOpz3e7zqbeCNuMCPhV7Yndk9KU2Rbij2r5W4RzwDPkzC+2lzUqXYu9rFzTktCBnDjHuNQg==}
dev: false
/@types/node/9.6.61:
/@types/node@9.6.61:
resolution: {integrity: sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==}
dev: false
/@types/ramda/0.25.51:
/@types/ramda@0.25.51:
resolution: {integrity: sha512-xcmtfHIgF9SYjhGdsZR1nQslxG4hu0cIpFfLQ4CWdw3KzHvl7ki1AzFLQUkbDTG42ZN3ZsQfdRzXRlkAvbIy5Q==}
dev: false
/@types/semver/5.5.0:
/@types/semver@5.5.0:
resolution: {integrity: sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==}
dev: false
/ansi-diff/1.1.1:
/ansi-diff@1.1.1:
resolution: {integrity: sha512-XnTdFDQzbEewrDx8epWXdw7oqHMvv315vEtfqDiEhhWghIf4++h26c3/FMz7iTLhNrnj56DNIXpbxHZq+3s6qw==}
dependencies:
ansi-split: 1.0.1
dev: false
/ansi-regex/3.0.0:
/ansi-regex@3.0.0:
resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=}
engines: {node: '>=4'}
dev: false
/ansi-split/1.0.1:
/ansi-split@1.0.1:
resolution: {integrity: sha512-RRxQym4DFtDNmHIkW6aeFVvrXURb11lGAEPXNiryjCe8bK8RsANjzJ0M2aGOkvBYwP4Bl/xZ8ijtr6D3j1x/eg==}
dependencies:
ansi-regex: 3.0.0
dev: false
/ansi-styles/3.2.1:
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
dev: false
/as-table/1.0.55:
/as-table@1.0.55:
resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
dependencies:
printable-characters: 1.0.42
dev: false
/chalk/2.4.2:
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
dependencies:
@@ -76,89 +75,89 @@ packages:
supports-color: 5.5.0
dev: false
/cli-cursor/2.1.0:
/cli-cursor@2.1.0:
resolution: {integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=}
engines: {node: '>=4'}
dependencies:
restore-cursor: 2.0.0
dev: false
/color-convert/1.9.3:
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
dev: false
/color-name/1.1.3:
/color-name@1.1.3:
resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
dev: false
/common-tags/1.8.2:
/common-tags@1.8.2:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
dev: false
/core-util-is/1.0.3:
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: false
/data-uri-to-buffer/2.0.2:
/data-uri-to-buffer@2.0.2:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
dev: false
/define-properties/1.1.3:
/define-properties@1.1.3:
resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==}
engines: {node: '>= 0.4'}
dependencies:
object-keys: 1.1.1
dev: false
/escape-string-regexp/1.0.5:
/escape-string-regexp@1.0.5:
resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
engines: {node: '>=0.8.0'}
dev: false
/get-source/1.0.42:
/get-source@1.0.42:
resolution: {integrity: sha512-uM5xCIG5w2meVbiZaID4ajH6J8OfApqhlKXtZwsS/IIM9PLb0b2kc5sRdy78yEDfxsIYEWNk0OVxai6OpDCExA==}
dependencies:
data-uri-to-buffer: 2.0.2
source-map: 0.6.1
dev: false
/globalthis/1.0.2:
/globalthis@1.0.2:
resolution: {integrity: sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==}
engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.1.3
dev: false
/has-flag/3.0.0:
/has-flag@3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
engines: {node: '>=4'}
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/isarray/1.0.0:
/isarray@1.0.0:
resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
dev: false
/json-stringify-safe/5.0.1:
/json-stringify-safe@5.0.1:
resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=}
dev: false
/mimic-fn/1.2.0:
/mimic-fn@1.2.0:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
engines: {node: '>=4'}
dev: false
/minimist/1.2.5:
/minimist@1.2.5:
resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
dev: false
/most-last/1.0.1_most@1.9.0:
/most-last@1.0.1(most@1.9.0):
resolution: {integrity: sha512-ycc+leSrXoGRjxhsZJW/l+Sk0CXj9e/z6EP5ebZ8A+zDWGRq1v/oeNkyQF4TG95LnT5Q0ysG+5piJYSR86k58A==}
peerDependencies:
most: ^1.0.3
@@ -166,16 +165,16 @@ packages:
most: 1.9.0
dev: false
/most/1.9.0:
/most@1.9.0:
resolution: {integrity: sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==}
dependencies:
'@most/multicast': 1.3.0_most@1.9.0
'@most/multicast': 1.3.0(most@1.9.0)
'@most/prelude': 1.8.0
globalthis: 1.0.2
symbol-observable: 2.0.3
dev: false
/ndjson/1.5.0:
/ndjson@1.5.0:
resolution: {integrity: sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=}
hasBin: true
dependencies:
@@ -185,19 +184,19 @@ packages:
through2: 2.0.5
dev: false
/object-keys/1.1.1:
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
dev: false
/onetime/2.0.1:
/onetime@2.0.1:
resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=}
engines: {node: '>=4'}
dependencies:
mimic-fn: 1.2.0
dev: false
/pnpm-default-reporter/0.14.7:
/pnpm-default-reporter@0.14.7:
resolution: {integrity: sha512-uHBIrBDxS/K82cGaxSQnhMYPJyYI4mX/28voWxqtFwIqhR0Gjf73EGN1wUc3lD38HdQDkCrSk5HBwp5N21AONw==}
engines: {node: '>=4'}
hasBin: true
@@ -213,7 +212,7 @@ packages:
cli-cursor: 2.1.0
common-tags: 1.8.2
most: 1.9.0
most-last: 1.0.1_most@1.9.0
most-last: 1.0.1(most@1.9.0)
ndjson: 1.5.0
pretty-bytes: 4.0.2
ramda: 0.25.0
@@ -222,24 +221,24 @@ packages:
zen-push: 0.2.1
dev: false
/pretty-bytes/4.0.2:
/pretty-bytes@4.0.2:
resolution: {integrity: sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=}
engines: {node: '>=4'}
dev: false
/printable-characters/1.0.42:
/printable-characters@1.0.42:
resolution: {integrity: sha1-Pxjpd6m9jrN/zE/1ZZ176Qhos9g=}
dev: false
/process-nextick-args/2.0.1:
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: false
/ramda/0.25.0:
/ramda@0.25.0:
resolution: {integrity: sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==}
dev: false
/readable-stream/2.3.7:
/readable-stream@2.3.7:
resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
dependencies:
core-util-is: 1.0.3
@@ -251,7 +250,7 @@ packages:
util-deprecate: 1.0.2
dev: false
/restore-cursor/2.0.0:
/restore-cursor@2.0.0:
resolution: {integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=}
engines: {node: '>=4'}
dependencies:
@@ -259,76 +258,76 @@ packages:
signal-exit: 3.0.7
dev: false
/safe-buffer/5.1.2:
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: false
/semver/5.7.1:
/semver@5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
hasBin: true
dev: false
/signal-exit/3.0.7:
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: false
/source-map/0.6.1:
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: false
/split2/2.2.0:
/split2@2.2.0:
resolution: {integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==}
dependencies:
through2: 2.0.5
dev: false
/stacktracey/1.2.127:
/stacktracey@1.2.127:
resolution: {integrity: sha512-tj3BObW/adLIAQGGQ0flRTADrCv6KQ4VgncUO8NrQ7pk/H6pGMtXxQLjZYw66eqPDTC1DHtnBwGSmG+Wx/D/kg==}
dependencies:
as-table: 1.0.55
get-source: 1.0.42
dev: false
/string_decoder/1.1.1:
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
dev: false
/supports-color/5.5.0:
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
dev: false
/symbol-observable/2.0.3:
/symbol-observable@2.0.3:
resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==}
engines: {node: '>=0.10'}
dev: false
/through2/2.0.5:
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
dependencies:
readable-stream: 2.3.7
xtend: 4.0.2
dev: false
/util-deprecate/1.0.2:
/util-deprecate@1.0.2:
resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
dev: false
/xtend/4.0.2:
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
dev: false
/zen-observable/0.7.1:
/zen-observable@0.7.1:
resolution: {integrity: sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==}
dev: false
/zen-push/0.2.1:
/zen-push@0.2.1:
resolution: {integrity: sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==}
dependencies:
zen-observable: 0.7.1

View File

@@ -1,14 +1,13 @@
lockfileVersion: 5.4
specifiers:
expire-fs: 2.2.3
lockfileVersion: '6.0'
dependencies:
expire-fs: 2.2.3
expire-fs:
specifier: 2.2.3
version: 2.2.3
packages:
/debug/4.3.3:
/debug@4.3.3:
resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
engines: {node: '>=6.0'}
peerDependencies:
@@ -20,7 +19,7 @@ packages:
ms: 2.1.2
dev: false
/diskusage/1.1.3:
/diskusage@1.1.3:
resolution: {integrity: sha512-EAyaxl8hy4Ph07kzlzGTfpbZMNAAAHXSZtNEMwdlnSd1noHzvA6HsgKt4fEMSvaEXQYLSphe5rPMxN4WOj0hcQ==}
requiresBuild: true
dependencies:
@@ -28,11 +27,11 @@ packages:
nan: 2.15.0
dev: false
/es6-promise/4.2.8:
/es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
dev: false
/expire-fs/2.2.3:
/expire-fs@2.2.3:
resolution: {integrity: sha512-ofQ0zNXKProir7/dtNAJiOucthMhraUznLiPd2MpoFexVi21BfGj0owPO5wMleO5cmSVOPRPJf8+XZqLpix4Ew==}
dependencies:
debug: 4.3.3
@@ -41,10 +40,10 @@ packages:
- supports-color
dev: false
/ms/2.1.2:
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: false
/nan/2.15.0:
/nan@2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
dev: false

View File

@@ -1,19 +1,18 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0
'@pnpm.e2e/pre-and-postinstall-scripts-example':
specifier: 1.0.0
version: 1.0.0
packages:
/@pnpm.e2e/hello-world-js-bin/1.0.0:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==}
hasBin: true
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0:
/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0:
resolution: {integrity: sha512-p2L5hqNZFiWX/4tQiuawjhh4xVy2QObs21HzZa6DdGZfWlgzdKiMN5MLuwh5ehI0GxuNWSrq0+/T+DEEr7kWVw==}
requiresBuild: true
dependencies:

View File

@@ -0,0 +1 @@
auto-install-peers=false

View File

@@ -1,31 +1,34 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/pkg-with-peer-having-bin': 1.0.0
colors: 1.2.0
is-negative: ^2.1.0
is-positive: ^1.0.0
rimraf: ^2.6.2
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/pkg-with-peer-having-bin': 1.0.0
is-positive: 1.0.0
rimraf: 2.7.1
'@pnpm.e2e/pkg-with-peer-having-bin':
specifier: 1.0.0
version: 1.0.0
is-positive:
specifier: ^1.0.0
version: 1.0.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
optionalDependencies:
colors: 1.2.0
colors:
specifier: 1.2.0
version: 1.2.0
devDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
packages:
/@pnpm.e2e/hello-world-js-bin/1.0.0:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==}
hasBin: true
dev: false
/@pnpm.e2e/pkg-with-peer-having-bin/1.0.0:
/@pnpm.e2e/pkg-with-peer-having-bin@1.0.0:
resolution: {integrity: sha512-bbL3oe5SBIz54k276vb4pR5T0ZrKZ2p2+OObfMMtkG43nCfwRBca3+WAqKjs9pIu2c4vUFhnU4rcqdbeuJkIbg==}
peerDependencies:
'@pnpm.e2e/peer-with-bin': ^1.0.0
@@ -33,33 +36,33 @@ packages:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false
/balanced-match/1.0.2:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/colors/1.2.0:
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.2.0:
/glob@7.2.0:
resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
dependencies:
fs.realpath: 1.0.0
@@ -70,51 +73,51 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
/minimatch/3.1.2:
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.0
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,52 +1,55 @@
lockfileVersion: 5.4
specifiers:
colors: 1.2.0
is-negative: ^2.1.0
is-positive: ^1.0.0
resolve-from: 4.0.0
rimraf: ^2.6.2
lockfileVersion: '6.0'
dependencies:
is-positive: 1.0.0
resolve-from: 4.0.0
rimraf: 2.7.1
is-positive:
specifier: ^1.0.0
version: 1.0.0
resolve-from:
specifier: 4.0.0
version: 4.0.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
optionalDependencies:
colors: 1.2.0
colors:
specifier: 1.2.0
version: 1.2.0
devDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
packages:
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/colors/1.2.0:
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.1.6:
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
fs.realpath: 1.0.0
@@ -57,56 +60,56 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/resolve-from/4.0.0:
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
dev: false
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.1.6
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,22 +1,22 @@
lockfileVersion: 5.4
specifiers:
'@pnpm.e2e/pkg-with-good-optional': '*'
is-positive: 1.0.0
lockfileVersion: '6.0'
dependencies:
'@pnpm.e2e/pkg-with-good-optional': 1.0.0
'@pnpm.e2e/pkg-with-good-optional':
specifier: '*'
version: 1.0.0
optionalDependencies:
is-positive: 1.0.0
is-positive:
specifier: 1.0.0
version: 1.0.0
packages:
/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0:
/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0:
resolution: {integrity: sha512-v/FQPTv+Y6j/J5a7ymlifFIhJa28wROyiTfg1vcAVKdJ9S94E32CHVUbzgvdcu9pAkLqe7INiwJ2ynqmgiTiiw==}
dev: false
/@pnpm.e2e/pkg-with-good-optional/1.0.0:
/@pnpm.e2e/pkg-with-good-optional@1.0.0:
resolution: {integrity: sha512-nHI1OeIwd3u8wEhHBIgbJmK6ryrums0YrxVB3RHkpbXXeI3YFsxiv0T0+MuQc7ajXT5/pwUvkyo2g2n37cWuRA==}
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 101.0.0
@@ -24,7 +24,7 @@ packages:
is-positive: 1.0.0
dev: false
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
requiresBuild: true

View File

@@ -1,50 +1,52 @@
lockfileVersion: 5.4
specifiers:
colors: 1.2.0
is-negative: ^2.1.0
is-positive: ^1.0.0
rimraf: ^2.6.2
lockfileVersion: '6.0'
dependencies:
is-positive: 1.0.0
rimraf: 2.7.1
is-positive:
specifier: ^1.0.0
version: 1.0.0
rimraf:
specifier: ^2.6.2
version: 2.7.1
optionalDependencies:
colors: 1.2.0
colors:
specifier: 1.2.0
version: 1.2.0
devDependencies:
is-negative: 2.1.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
packages:
/balanced-match/1.0.0:
/balanced-match@1.0.0:
resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
/colors/1.2.0:
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/fs.realpath/1.0.0:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: false
/glob/7.1.6:
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
fs.realpath: 1.0.0
@@ -55,51 +57,51 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative/2.1.0:
/is-negative@2.1.0:
resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=}
engines: {node: '>=0.10.0'}
dev: true
/is-positive/1.0.0:
/is-positive@1.0.0:
resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=}
engines: {node: '>=0.10.0'}
dev: false
/minimatch/3.0.4:
/minimatch@3.0.4:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.7.1:
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.1.6
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,29 +1,28 @@
lockfileVersion: 5.4
specifiers:
rimraf: 2.5.1
lockfileVersion: '6.0'
dependencies:
rimraf: 2.5.1
rimraf:
specifier: 2.5.1
version: 2.5.1
packages:
/balanced-match/1.0.2:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion/1.1.11:
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map/0.0.1:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/glob/6.0.4:
/glob@6.0.4:
resolution: {integrity: sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=}
dependencies:
inflight: 1.0.6
@@ -33,41 +32,41 @@ packages:
path-is-absolute: 1.0.1
dev: false
/inflight/1.0.6:
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits/2.0.4:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch/3.1.2:
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once/1.4.0:
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute/1.0.1:
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: false
/rimraf/2.5.1:
/rimraf@2.5.1:
resolution: {integrity: sha1-UuHpRvP5ubDV2JiLoxkaryotvUM=}
hasBin: true
dependencies:
glob: 6.0.4
dev: false
/wrappy/1.0.2:
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: false

View File

@@ -1,25 +1,32 @@
lockfileVersion: '6.0'
importers:
bar:
dependencies:
foo: 'link:../foo'
is-positive: 1.0.0
specifiers:
foo: 1.0.0
is-positive: 1.0.0
foo:
specifier: 1.0.0
version: 'link:../foo'
is-positive:
specifier: 1.0.0
version: 1.0.0
foo:
dependencies:
is-negative: 1.0.0
specifiers:
is-negative: 1.0.0
lockfileVersion: 5
is-negative:
specifier: 1.0.0
version: 1.0.0
packages:
/is-negative/1.0.0:
/is-negative@1.0.0:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-clmHeoPIAKwxkd17nZ+80PdS1P4=
/is-positive/1.0.0:
/is-positive@1.0.0:
dev: false
engines:
node: '>=0.10.0'

Some files were not shown because too many files have changed in this diff Show More