feat!: remove the dev field from the lockfile (#7808)

This commit is contained in:
Zoltan Kochan
2024-03-22 15:21:26 +01:00
committed by GitHub
parent 4822311cb0
commit a22bdf0e29
92 changed files with 905 additions and 1384 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/lockfile.detect-dep-types": major
---
Initial release.

View File

@@ -31,23 +31,19 @@ snapshots:
d@1.0.0:
dependencies:
es5-ext: 0.10.24
dev: false
es5-ext@0.10.24:
dependencies:
es6-iterator: 2.0.1
es6-symbol: 3.1.1
dev: false
es6-iterator@2.0.1:
dependencies:
d: 1.0.0
es5-ext: 0.10.24
es6-symbol: 3.1.1
dev: false
es6-symbol@3.1.1:
dependencies:
d: 1.0.0
es5-ext: 0.10.24
dev: false

View File

@@ -31,8 +31,6 @@ packages:
snapshots:
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
is-positive@3.1.0:
dev: false
is-positive@3.1.0: {}

View File

@@ -10,7 +10,10 @@ importers:
packages:
/is-positive@1.0.0:
is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
snapshots:
is-positive@1.0.0: {}

View File

@@ -69,47 +69,36 @@ packages:
snapshots:
detect-indent@5.0.0:
dev: false
detect-indent@5.0.0: {}
graceful-fs@4.2.2:
dev: false
graceful-fs@4.2.2: {}
imurmurhash@0.1.4:
dev: false
imurmurhash@0.1.4: {}
is-negative@2.1.0:
dev: false
optional: true
is-plain-obj@1.1.0:
dev: false
is-plain-obj@1.1.0: {}
is-positive@3.1.0:
dev: true
is-positive@3.1.0: {}
make-dir@1.3.0:
dependencies:
pify: 3.0.0
dev: false
pify@3.0.0:
dev: false
pify@3.0.0: {}
signal-exit@3.0.2:
dev: false
signal-exit@3.0.2: {}
sort-keys@2.0.0:
dependencies:
is-plain-obj: 1.1.0
dev: false
write-file-atomic@2.4.3:
dependencies:
graceful-fs: 4.2.2
imurmurhash: 0.1.4
signal-exit: 3.0.2
dev: false
write-json-file@2.3.0:
dependencies:
@@ -119,4 +108,3 @@ snapshots:
pify: 3.0.0
sort-keys: 2.0.0
write-file-atomic: 2.4.3
dev: false

View File

@@ -69,47 +69,36 @@ packages:
snapshots:
detect-indent@5.0.0:
dev: false
detect-indent@5.0.0: {}
graceful-fs@4.2.2:
dev: false
graceful-fs@4.2.2: {}
imurmurhash@0.1.4:
dev: false
imurmurhash@0.1.4: {}
is-negative@2.1.0:
dev: false
optional: true
is-plain-obj@1.1.0:
dev: false
is-plain-obj@1.1.0: {}
is-positive@3.1.0:
dev: true
is-positive@3.1.0: {}
make-dir@1.3.0:
dependencies:
pify: 3.0.0
dev: false
pify@3.0.0:
dev: false
pify@3.0.0: {}
signal-exit@3.0.2:
dev: false
signal-exit@3.0.2: {}
sort-keys@2.0.0:
dependencies:
is-plain-obj: 1.1.0
dev: false
write-file-atomic@2.4.3:
dependencies:
graceful-fs: 4.2.2
imurmurhash: 0.1.4
signal-exit: 3.0.2
dev: false
write-json-file@2.3.0:
dependencies:
@@ -119,4 +108,3 @@ snapshots:
pify: 3.0.0
sort-keys: 2.0.0
write-file-atomic: 2.4.3
dev: false

View File

@@ -70,17 +70,14 @@ packages:
snapshots:
balanced-match@1.0.0:
dev: false
balanced-match@1.0.0: {}
brace-expansion@1.1.8:
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
glob@6.0.4:
dependencies:
@@ -89,41 +86,31 @@ snapshots:
minimatch: 3.0.4
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.3:
dev: false
inherits@2.0.3: {}
is-negative@1.0.0:
dev: false
optional: true
is-positive@1.0.0:
dev: true
is-positive@1.0.0: {}
minimatch@3.0.4:
dependencies:
brace-expansion: 1.1.8
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.5.1:
dependencies:
glob: 6.0.4
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -28,8 +28,6 @@ packages:
snapshots:
is-negative@1.0.1:
dev: false
is-negative@1.0.1: {}
is-positive@1.0.0:
dev: true
is-positive@1.0.0: {}

View File

@@ -28,8 +28,6 @@ packages:
snapshots:
is-negative@1.0.1:
dev: false
is-negative@1.0.1: {}
is-positive@1.0.0:
dev: true
is-positive@1.0.0: {}

View File

@@ -12,17 +12,20 @@ devDependencies:
packages:
/is-negative@1.0.0:
dev: false
is-negative@1.0.0:
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-clmHeoPIAKwxkd17nZ+80PdS1P4=
/is-positive@2.0.0:
dev: true
is-positive@2.0.0:
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-sU8GvS24EK5sixJ0HRNr+u8Nh70=
snapshots:
is-negative@1.0.0: {}
is-positive@2.0.0: {}

View File

@@ -12,16 +12,20 @@ devDependencies:
packages:
/is-negative@1.0.0:
dev: false
is-negative@1.0.0:
engines:
node: '>=0.10.0'
resolution:
integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==
/is-positive@2.0.0:
dev: true
is-positive@2.0.0:
engines:
node: '>=0.10.0'
resolution:
integrity: sha512-uJQLtRnc7RP/Xo8tjkK9MJsWdnuKhiD5e8x+idmkUqr2p0R+n/ZdDFG1LEt98WwoRzWhSefhPnyLBleKZhg/Lg==
snapshots:
is-negative@1.0.0: {}
is-positive@2.0.0: {}

View File

@@ -1,17 +1,31 @@
lockfileVersion: '6.0'
dependencies:
is-negative:
version: 2.1.0
specifier: ^2.1.0
is-positive:
version: 3.1.0
specifier: ^3.1.0
importers:
'.':
dependencies:
is-negative:
version: 2.1.0
specifier: ^2.1.0
is-positive:
version: 3.1.0
specifier: ^3.1.0
packages:
/is-negative@2.1.0:
dev: false
is-negative@2.1.0:
resolution:
integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==
/is-positive@3.1.0:
dev: false
is-positive@3.1.0:
resolution:
integrity: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==
snapshots:
is-negative@2.1.0: {}
is-positive@3.1.0: {}

View File

@@ -1,17 +1,31 @@
lockfileVersion: '7.0'
dependencies:
is-negative:
version: 2.1.0
specifier: ^2.1.0
is-positive:
version: 3.1.0
specifier: ^3.1.0
importers:
'.':
dependencies:
is-negative:
version: 2.1.0
specifier: ^2.1.0
is-positive:
version: 3.1.0
specifier: ^3.1.0
packages:
/is-negative@2.1.0:
dev: false
is-negative@2.1.0:
resolution:
integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==
/is-positive@3.1.0:
dev: false
is-positive@3.1.0:
resolution:
integrity: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==
snapshots:
is-negative@2.1.0: {}
is-positive@3.1.0: {}

View File

@@ -1,4 +1,5 @@
lockfileVersion: '7.0'
importers:
pkg:
dependencies:
@@ -8,10 +9,19 @@ importers:
is-positive:
version: 3.1.0
specifier: ^3.1.0
packages:
/is-negative@1.1.0:
is-negative@1.1.0:
resolution:
integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==
/is-positive@3.1.0:
is-positive@3.1.0:
resolution:
integrity: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==
snapshots:
is-negative@1.1.0: {}
is-positive@3.1.0: {}

View File

@@ -1,31 +1,42 @@
lockfileVersion: '6.0'
lockfileVersion: '7.0'
dependencies:
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^1.0.0
version: 1.0.0
importers:
devDependencies:
is-positive:
specifier: ^1.0.0
version: 1.0.0
'.':
dependencies:
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^1.0.0
version: 1.0.0
devDependencies:
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
snapshots:
'@pnpm.e2e/deprecated@1.0.0': {}
is-negative@1.0.0: {}
is-positive@1.0.0: {}

View File

@@ -1,31 +1,42 @@
lockfileVersion: '7.0'
dependencies:
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
importers:
devDependencies:
is-positive:
specifier: ^3.1.0
version: 3.1.0
'.':
dependencies:
'@pnpm.e2e/deprecated':
specifier: 1.0.0
version: 1.0.0
is-negative:
specifier: ^2.1.0
version: 2.1.0
devDependencies:
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: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==}
engines: {node: '>=0.10.0'}
dev: true
snapshots:
'@pnpm.e2e/deprecated@1.0.0': {}
is-negative@2.1.0: {}
is-positive@3.1.0: {}

View File

@@ -1,14 +1,20 @@
lockfileVersion: '7.0'
importers:
package:
dependencies:
is-positive: 3.1.0
specifiers:
is-positive: 3.1.0
lockfileVersion: 5
is-positive:
version: 3.1.0
specifier: 3.1.0
packages:
/is-positive/3.1.0:
dev: false
is-positive@3.1.0:
engines:
node: '>=0.10.0'
resolution:
integrity: sha512-8ND1j3y9/HP94TOvGzr69/FgbkX2ruOldhLEsTWwcJVfo4oRjwemJmJxt7RJkKYH8tz7vYBP9JcKQY8CLuJ90Q==
snapshots:
is-positive@3.1.0: {}

View File

@@ -1,6 +1,12 @@
scripts:
step1: node ../pnpm/dist/pnpm.cjs install -rf --frozen-lockfile --no-shared-workspace-lockfile --no-link-workspace-packages
step2: node ../pnpm/dist/pnpm.cjs install -rf --frozen-lockfile --no-shared-workspace-lockfile --no-link-workspace-packages
step3: node ../pnpm/dist/pnpm.cjs install -rf -C fixtureWithLinks --frozen-lockfile --link-workspace-packages --no-shared-workspace-lockfile
step4: cd ./fixture-with-external-shrinkwrap/pkg && node ../../../pnpm/dist/pnpm.cjs install -f --frozen-lockfile
step5: cd ./custom-modules-dir && node ../../pnpm/dist/pnpm.cjs install -f --frozen-lockfile
prepareFixtures: >
node ../pnpm/dist/pnpm.cjs install -rf --frozen-lockfile --no-shared-workspace-lockfile --no-link-workspace-packages &&
node ../pnpm/dist/pnpm.cjs install -rf -C fixtureWithLinks --frozen-lockfile --link-workspace-packages --no-shared-workspace-lockfile &&
cd ./fixture-with-external-shrinkwrap/pkg && node ../../../pnpm/dist/pnpm.cjs install -f --frozen-lockfile &&
cd ../../custom-modules-dir && node ../../pnpm/dist/pnpm.cjs install -f --frozen-lockfile
pnpm run step1 &&
pnpm run step2 &&
pnpm run step3 &&
pnpm run step4 &&
pnpm run step5

View File

@@ -14,21 +14,215 @@ importers:
packages:
/accepts@1.3.7:
accepts@1.3.7:
resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==}
engines: {node: '>= 0.6'}
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
body-parser@1.19.0:
resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==}
engines: {node: '>= 0.8'}
bytes@3.1.0:
resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
engines: {node: '>= 0.8'}
content-disposition@0.5.3:
resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==}
engines: {node: '>= 0.6'}
content-type@1.0.4:
resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
engines: {node: '>= 0.6'}
cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
cookie@0.4.0:
resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==}
engines: {node: '>= 0.6'}
debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
destroy@1.0.4:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
express@4.17.1:
resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==}
engines: {node: '>= 0.10.0'}
finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
forwarded@0.1.2:
resolution: {integrity: sha512-Ua9xNhH0b8pwE3yRbFfXJvfdWF0UHNCdeyb2sbi9Ul/M+r3PTdrz7Cv4SCfZRMjmzEM9PhraqfZFbGTIg3OMyA==}
engines: {node: '>= 0.6'}
fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
http-errors@1.7.2:
resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==}
engines: {node: '>= 0.6'}
http-errors@1.7.3:
resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
engines: {node: '>= 0.6'}
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
mime-db@1.44.0:
resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==}
engines: {node: '>= 0.6'}
mime-types@2.1.27:
resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==}
engines: {node: '>= 0.6'}
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
ms@2.1.1:
resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
negotiator@0.6.2:
resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==}
engines: {node: '>= 0.6'}
on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
proxy-addr@2.0.6:
resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==}
engines: {node: '>= 0.10'}
qs@6.7.0:
resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==}
engines: {node: '>=0.6'}
range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
raw-body@2.4.0:
resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==}
engines: {node: '>= 0.8'}
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
send@0.17.1:
resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==}
engines: {node: '>= 0.8.0'}
serve-static@1.14.1:
resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==}
engines: {node: '>= 0.8.0'}
setprototypeof@1.1.1:
resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
toidentifier@1.0.0:
resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
engines: {node: '>=0.6'}
type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
utils-merge@1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
snapshots:
accepts@1.3.7:
dependencies:
mime-types: 2.1.27
negotiator: 0.6.2
dev: false
/array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
dev: false
array-flatten@1.1.1: {}
/body-parser@1.19.0:
resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==}
engines: {node: '>= 0.8'}
body-parser@1.19.0:
dependencies:
bytes: 3.1.0
content-type: 1.0.4
@@ -42,75 +236,36 @@ packages:
type-is: 1.6.18
transitivePeerDependencies:
- supports-color
dev: false
/bytes@3.1.0:
resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
engines: {node: '>= 0.8'}
dev: false
bytes@3.1.0: {}
/content-disposition@0.5.3:
resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==}
engines: {node: '>= 0.6'}
content-disposition@0.5.3:
dependencies:
safe-buffer: 5.1.2
dev: false
/content-type@1.0.4:
resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
engines: {node: '>= 0.6'}
dev: false
content-type@1.0.4: {}
/cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
dev: false
cookie-signature@1.0.6: {}
/cookie@0.4.0:
resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==}
engines: {node: '>= 0.6'}
dev: false
cookie@0.4.0: {}
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
debug@2.6.9:
dependencies:
ms: 2.0.0
dev: false
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
dev: false
depd@1.1.2: {}
/destroy@1.0.4:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
dev: false
destroy@1.0.4: {}
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: false
ee-first@1.1.1: {}
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
dev: false
encodeurl@1.0.2: {}
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
dev: false
escape-html@1.0.3: {}
/etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
dev: false
etag@1.8.1: {}
/express@4.17.1:
resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==}
engines: {node: '>= 0.10.0'}
express@4.17.1:
dependencies:
accepts: 1.3.7
array-flatten: 1.1.1
@@ -144,11 +299,8 @@ packages:
vary: 1.1.2
transitivePeerDependencies:
- supports-color
dev: false
/finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
finalhandler@1.1.2:
dependencies:
debug: 2.6.9
encodeurl: 1.0.2
@@ -159,160 +311,86 @@ packages:
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: false
/forwarded@0.1.2:
resolution: {integrity: sha512-Ua9xNhH0b8pwE3yRbFfXJvfdWF0UHNCdeyb2sbi9Ul/M+r3PTdrz7Cv4SCfZRMjmzEM9PhraqfZFbGTIg3OMyA==}
engines: {node: '>= 0.6'}
dev: false
forwarded@0.1.2: {}
/fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
dev: false
fresh@0.5.2: {}
/http-errors@1.7.2:
resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==}
engines: {node: '>= 0.6'}
http-errors@1.7.2:
dependencies:
depd: 1.1.2
inherits: 2.0.3
setprototypeof: 1.1.1
statuses: 1.5.0
toidentifier: 1.0.0
dev: false
/http-errors@1.7.3:
resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
engines: {node: '>= 0.6'}
http-errors@1.7.3:
dependencies:
depd: 1.1.2
inherits: 2.0.4
setprototypeof: 1.1.1
statuses: 1.5.0
toidentifier: 1.0.0
dev: false
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
dev: false
/inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
dev: false
inherits@2.0.3: {}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
inherits@2.0.4: {}
/ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
dev: false
ipaddr.js@1.9.1: {}
/media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
dev: false
media-typer@0.3.0: {}
/merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
dev: false
merge-descriptors@1.0.1: {}
/methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
dev: false
methods@1.1.2: {}
/mime-db@1.44.0:
resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==}
engines: {node: '>= 0.6'}
dev: false
mime-db@1.44.0: {}
/mime-types@2.1.27:
resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==}
engines: {node: '>= 0.6'}
mime-types@2.1.27:
dependencies:
mime-db: 1.44.0
dev: false
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
dev: false
mime@1.6.0: {}
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
dev: false
ms@2.0.0: {}
/ms@2.1.1:
resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
dev: false
ms@2.1.1: {}
/negotiator@0.6.2:
resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==}
engines: {node: '>= 0.6'}
dev: false
negotiator@0.6.2: {}
/on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
dev: false
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
dev: false
parseurl@1.3.3: {}
/path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
dev: false
path-to-regexp@0.1.7: {}
/proxy-addr@2.0.6:
resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==}
engines: {node: '>= 0.10'}
proxy-addr@2.0.6:
dependencies:
forwarded: 0.1.2
ipaddr.js: 1.9.1
dev: false
/qs@6.7.0:
resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==}
engines: {node: '>=0.6'}
dev: false
qs@6.7.0: {}
/range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
dev: false
range-parser@1.2.1: {}
/raw-body@2.4.0:
resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==}
engines: {node: '>= 0.8'}
raw-body@2.4.0:
dependencies:
bytes: 3.1.0
http-errors: 1.7.2
iconv-lite: 0.4.24
unpipe: 1.0.0
dev: false
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: false
safe-buffer@5.1.2: {}
/safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
dev: false
safer-buffer@2.1.2: {}
/send@0.17.1:
resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==}
engines: {node: '>= 0.8.0'}
send@0.17.1:
dependencies:
debug: 2.6.9
depd: 1.1.2
@@ -329,11 +407,8 @@ packages:
statuses: 1.5.0
transitivePeerDependencies:
- supports-color
dev: false
/serve-static@1.14.1:
resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==}
engines: {node: '>= 0.8.0'}
serve-static@1.14.1:
dependencies:
encodeurl: 1.0.2
escape-html: 1.0.3
@@ -341,41 +416,20 @@ packages:
send: 0.17.1
transitivePeerDependencies:
- supports-color
dev: false
/setprototypeof@1.1.1:
resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
dev: false
setprototypeof@1.1.1: {}
/statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
dev: false
statuses@1.5.0: {}
/toidentifier@1.0.0:
resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
engines: {node: '>=0.6'}
dev: false
toidentifier@1.0.0: {}
/type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
type-is@1.6.18:
dependencies:
media-typer: 0.3.0
mime-types: 2.1.27
dev: false
/unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
dev: false
unpipe@1.0.0: {}
/utils-merge@1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
dev: false
utils-merge@1.0.1: {}
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
dev: false
vary@1.1.2: {}

View File

@@ -23,5 +23,4 @@ packages:
snapshots:
is-positive@3.1.0:
dev: false
is-positive@3.1.0: {}

View File

@@ -20,5 +20,4 @@ packages:
snapshots:
camelcase@https://codeload.github.com/denolib/camelcase/tar.gz/aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b:
dev: false
camelcase@https://codeload.github.com/denolib/camelcase/tar.gz/aeb6b15f9c9957c8fa56f9731e914c4d8a6d2f2b: {}

View File

@@ -46,7 +46,6 @@ snapshots:
ajv-keywords@3.4.1(ajv@6.10.2):
dependencies:
ajv: 6.10.2
dev: false
ajv@6.10.2:
dependencies:
@@ -54,21 +53,15 @@ snapshots:
fast-json-stable-stringify: 2.0.0
json-schema-traverse: 0.4.1
uri-js: 4.2.2
dev: false
fast-deep-equal@2.0.1:
dev: false
fast-deep-equal@2.0.1: {}
fast-json-stable-stringify@2.0.0:
dev: false
fast-json-stable-stringify@2.0.0: {}
json-schema-traverse@0.4.1:
dev: false
json-schema-traverse@0.4.1: {}
punycode@2.1.1:
dev: false
punycode@2.1.1: {}
uri-js@4.2.2:
dependencies:
punycode: 2.1.1
dev: false

View File

@@ -157,30 +157,23 @@ snapshots:
'@types/mz@0.0.32':
dependencies:
'@types/node': 10.12.9
dev: false
'@types/node@10.12.9':
dev: false
'@types/node@10.12.9': {}
any-promise@1.3.0:
dev: false
any-promise@1.3.0: {}
balanced-match@1.0.0:
dev: false
balanced-match@1.0.0: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.0
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
define-properties@1.1.3:
dependencies:
object-keys: 1.0.12
dev: false
es-abstract@1.12.0:
dependencies:
@@ -189,20 +182,16 @@ snapshots:
has: 1.0.3
is-callable: 1.1.4
is-regex: 1.0.4
dev: false
es-to-primitive@1.2.0:
dependencies:
is-callable: 1.1.4
is-date-object: 1.0.1
is-symbol: 1.0.2
dev: false
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
function-bind@1.1.1:
dev: false
function-bind@1.1.1: {}
glob@7.1.3:
dependencies:
@@ -212,103 +201,80 @@ snapshots:
minimatch: 3.0.4
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
graceful-fs@4.1.15:
dev: false
graceful-fs@4.1.15: {}
has-symbols@1.0.0:
dev: false
has-symbols@1.0.0: {}
has@1.0.3:
dependencies:
function-bind: 1.1.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.3:
dev: false
inherits@2.0.3: {}
is-callable@1.1.4:
dev: false
is-callable@1.1.4: {}
is-date-object@1.0.1:
dev: false
is-date-object@1.0.1: {}
is-regex@1.0.4:
dependencies:
has: 1.0.3
dev: false
is-symbol@1.0.2:
dependencies:
has-symbols: 1.0.0
dev: false
is-windows@1.0.2:
dev: false
is-windows@1.0.2: {}
minimatch@3.0.4:
dependencies:
brace-expansion: 1.1.11
dev: false
minimist@0.0.8:
dev: false
minimist@0.0.8: {}
mkdirp-promise@5.0.1:
dependencies:
mkdirp: 0.5.1
dev: false
mkdirp@0.5.1:
dependencies:
minimist: 0.0.8
dev: false
mz@2.7.0:
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
dev: false
object-assign@4.1.1:
dev: false
object-assign@4.1.1: {}
object-keys@1.0.12:
dev: false
object-keys@1.0.12: {}
object.getownpropertydescriptors@2.0.3:
dependencies:
define-properties: 1.1.3
es-abstract: 1.12.0
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rename-overwrite@1.0.3:
dependencies:
graceful-fs: 4.1.15
rimraf: 2.6.2
util.promisify: 1.0.0
dev: false
rimraf@2.6.2:
dependencies:
glob: 7.1.3
dev: false
symlink-dir@2.0.2:
dependencies:
@@ -319,23 +285,18 @@ snapshots:
mkdirp-promise: 5.0.1
mz: 2.7.0
rename-overwrite: 1.0.3
dev: false
thenify-all@1.6.0:
dependencies:
thenify: 3.3.0
dev: false
thenify@3.3.0:
dependencies:
any-promise: 1.3.0
dev: false
util.promisify@1.0.0:
dependencies:
define-properties: 1.1.3
object.getownpropertydescriptors: 2.0.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -28,18 +28,23 @@ importers:
packages:
/@pnpm.e2e/external-depend-on-internal-dep@1.0.0:
'@pnpm.e2e/external-depend-on-internal-dep@1.0.0':
resolution: {integrity: sha512-LAqiBIWE7ONGsqVizu0nGhAmqkQhAPHKTlXQVZSeCMrB1e8t5hbCtQs62KGSt81QYBYaQkhMdbv1/V9alZ98wA==}
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
snapshots:
'@pnpm.e2e/external-depend-on-internal-dep@1.0.0':
dependencies:
'@pnpm.e2e/internal-f': link:packages/f
is-negative@1.0.0: {}
is-positive@1.0.0: {}

View File

@@ -24,5 +24,4 @@ packages:
snapshots:
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}

View File

@@ -20,5 +20,4 @@ packages:
snapshots:
is-positive@3.1.0:
dev: false
is-positive@3.1.0: {}

View File

@@ -65,7 +65,6 @@ snapshots:
fast-json-stable-stringify: 2.0.0
json-schema-traverse: 0.4.1
uri-js: 4.2.2
dev: false
ajv@6.12.6:
dependencies:
@@ -73,35 +72,25 @@ snapshots:
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
dev: false
fast-deep-equal@2.0.1:
dev: false
fast-deep-equal@2.0.1: {}
fast-deep-equal@3.1.3:
dev: false
fast-deep-equal@3.1.3: {}
fast-json-stable-stringify@2.0.0:
dev: false
fast-json-stable-stringify@2.0.0: {}
fast-json-stable-stringify@2.1.0:
dev: false
fast-json-stable-stringify@2.1.0: {}
json-schema-traverse@0.4.1:
dev: false
json-schema-traverse@0.4.1: {}
punycode@2.1.1:
dev: false
punycode@2.1.1: {}
punycode@2.3.0:
dev: false
punycode@2.3.0: {}
uri-js@4.2.2:
dependencies:
punycode: 2.1.1
dev: false
uri-js@4.4.1:
dependencies:
punycode: 2.3.0
dev: false

View File

@@ -38,18 +38,14 @@ packages:
snapshots:
punycode@2.1.1:
dev: false
punycode@2.1.1: {}
punycode@2.3.0:
dev: false
punycode@2.3.0: {}
uri-js@4.2.2:
dependencies:
punycode: 2.1.1
dev: false
uri-js@4.4.1:
dependencies:
punycode: 2.3.0
dev: false

View File

@@ -33,5 +33,4 @@ packages:
snapshots:
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}

View File

@@ -24,5 +24,4 @@ packages:
snapshots:
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}

View File

@@ -48,6 +48,7 @@
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/lockfile-utils": "workspace:*",
"@pnpm/lockfile-walker": "workspace:*",
"@pnpm/lockfile.detect-dep-types": "workspace:*",
"@pnpm/read-project-manifest": "workspace:*",
"@pnpm/types": "workspace:*",
"ramda": "npm:@pnpm/ramda@0.28.1"

View File

@@ -2,6 +2,7 @@ import path from 'path'
import { type Lockfile, type TarballResolution } from '@pnpm/lockfile-types'
import { nameVerFromPkgSnapshot } from '@pnpm/lockfile-utils'
import { lockfileWalkerGroupImporterSteps, type LockfileWalkerStep } from '@pnpm/lockfile-walker'
import { detectDepTypes, type DepTypes, DepType } from '@pnpm/lockfile.detect-dep-types'
import { type DependenciesField } from '@pnpm/types'
import { safeReadProjectManifestOnly } from '@pnpm/read-project-manifest'
import mapValues from 'ramda/src/map'
@@ -30,9 +31,10 @@ export async function lockfileToAuditTree (
): Promise<AuditTree> {
const importerWalkers = lockfileWalkerGroupImporterSteps(lockfile, Object.keys(lockfile.importers), { include: opts?.include })
const dependencies: Record<string, AuditNode> = {}
const depTypes = detectDepTypes(lockfile)
await Promise.all(
importerWalkers.map(async (importerWalker) => {
const importerDeps = lockfileToAuditNode(importerWalker.step)
const importerDeps = lockfileToAuditNode(depTypes, importerWalker.step)
// For some reason the registry responds with 500 if the keys in dependencies have slashes
// see issue: https://github.com/pnpm/pnpm/issues/2848
const depName = importerWalker.importerId.replace(/\//g, '__')
@@ -60,13 +62,13 @@ export async function lockfileToAuditTree (
return auditTree
}
function lockfileToAuditNode (step: LockfileWalkerStep): Record<string, AuditNode> {
function lockfileToAuditNode (depTypes: DepTypes, step: LockfileWalkerStep): Record<string, AuditNode> {
const dependencies: Record<string, AuditNode> = {}
for (const { depPath, pkgSnapshot, next } of step.dependencies) {
const { name, version } = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const subdeps = lockfileToAuditNode(next())
const subdeps = lockfileToAuditNode(depTypes, next())
const dep: AuditNode = {
dev: pkgSnapshot.dev === true,
dev: depTypes[depPath] === DepType.DevOnly,
integrity: (pkgSnapshot.resolution as TarballResolution).integrity,
version,
}

View File

@@ -33,6 +33,9 @@
{
"path": "../../reviewing/list"
},
{
"path": "../detect-dep-types"
},
{
"path": "../lockfile-file"
},

View File

@@ -0,0 +1,13 @@
# @pnpm/lockfile.detect-dep-types
> Detect the types of dependencies
## Install
```
pnpm add @pnpm/lockfile.detect-dep-types
```
## License
[MIT](LICENSE)

View File

@@ -0,0 +1,44 @@
{
"name": "@pnpm/lockfile.detect-dep-types",
"version": "0.0.0",
"description": "Detect the types of dependencies",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"engines": {
"node": ">=18.12"
},
"files": [
"lib",
"!*.map"
],
"scripts": {
"lint": "eslint \"src/**/*.ts\"",
"test": "pnpm run compile",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"
},
"repository": "https://github.com/pnpm/pnpm/blob/main/lockfile/detect-dep-types",
"keywords": [
"pnpm9",
"pnpm",
"shrinkwrap",
"lockfile"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/pnpm/pnpm/issues"
},
"homepage": "https://github.com/pnpm/pnpm/blob/main/lockfile/detect-dep-types#readme",
"devDependencies": {
"@pnpm/lockfile.detect-dep-types": "workspace:*",
"tempy": "^1.0.1"
},
"dependencies": {
"@pnpm/dependency-path": "workspace:*",
"@pnpm/lockfile-types": "workspace:*"
},
"funding": "https://opencollective.com/pnpm",
"exports": {
".": "./lib/index.js"
}
}

View File

@@ -0,0 +1,77 @@
import { type Lockfile, type PackageSnapshots, type ResolvedDependencies } from '@pnpm/lockfile-types'
import * as dp from '@pnpm/dependency-path'
export enum DepType {
DevOnly,
DevAndProd,
ProdOnly
}
export type DepTypes = Record<string, DepType>
export function detectDepTypes (lockfile: Lockfile): DepTypes {
const dev: DepTypes = {}
const devDepPaths = Object.values(lockfile.importers)
.map((deps) => resolvedDepsToDepPaths(deps.devDependencies ?? {})).flat()
const optionalDepPaths = Object.values(lockfile.importers)
.map((deps) => resolvedDepsToDepPaths(deps.optionalDependencies ?? {})).flat()
const prodDepPaths = Object.values(lockfile.importers)
.map((deps) => resolvedDepsToDepPaths(deps.dependencies ?? {})).flat()
const ctx = {
packages: lockfile.packages ?? {},
walked: new Set<string>(),
notProdOnly: new Set<string>(),
dev,
}
detectDepTypesInSubGraph(ctx, devDepPaths, {
dev: true,
})
detectDepTypesInSubGraph(ctx, optionalDepPaths, {
dev: false,
})
detectDepTypesInSubGraph(ctx, prodDepPaths, {
dev: false,
})
return dev
}
function detectDepTypesInSubGraph (
ctx: {
notProdOnly: Set<string>
packages: PackageSnapshots
walked: Set<string>
dev: Record<string, DepType>
},
depPaths: string[],
opts: {
dev: boolean
}
) {
for (const depPath of depPaths) {
const key = `${depPath}:${opts.dev.toString()}`
if (ctx.walked.has(key)) continue
ctx.walked.add(key)
if (!ctx.packages[depPath]) {
continue
}
if (opts.dev) {
ctx.notProdOnly.add(depPath)
ctx.dev[depPath] = DepType.DevOnly
} else if (ctx.dev[depPath] === DepType.DevOnly) { // keeping if dev is explicitly false
ctx.dev[depPath] = DepType.DevAndProd
} else if (ctx.dev[depPath] === undefined && !ctx.notProdOnly.has(depPath)) {
ctx.dev[depPath] = DepType.ProdOnly
}
const depLockfile = ctx.packages[depPath]
const newDependencies = resolvedDepsToDepPaths(depLockfile.dependencies ?? {})
detectDepTypesInSubGraph(ctx, newDependencies, opts)
const newOptionalDependencies = resolvedDepsToDepPaths(depLockfile.optionalDependencies ?? {})
detectDepTypesInSubGraph(ctx, newOptionalDependencies, { dev: opts.dev })
}
}
function resolvedDepsToDepPaths (deps: ResolvedDependencies) {
return Object.entries(deps)
.map(([alias, ref]) => dp.refToRelative(ref, alias))
.filter((depPath) => depPath !== null) as string[]
}

View File

@@ -0,0 +1,20 @@
{
"extends": "@pnpm/tsconfig",
"compilerOptions": {
"outDir": "lib",
"rootDir": "src"
},
"include": [
"src/**/*.ts",
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../packages/dependency-path"
},
{
"path": "../lockfile-types"
}
],
"composite": true
}

View File

@@ -0,0 +1,8 @@
{
"extends": "./tsconfig.json",
"include": [
"src/**/*.ts",
"test/**/*.ts",
"../../__typings__/**/*.d.ts"
]
}

View File

@@ -1,7 +1,6 @@
import { type Lockfile } from '@pnpm/lockfile-types'
import { type DependenciesField } from '@pnpm/types'
import mapValues from 'ramda/src/map'
import { filterImporter } from './filterImporter'
import { filterLockfileByImporters } from './filterLockfileByImporters'
export function filterLockfile (
lockfile: Lockfile,
@@ -10,20 +9,8 @@ export function filterLockfile (
skipped: Set<string>
}
): Lockfile {
let pairs = Object.entries(lockfile.packages ?? {})
.filter(([depPath]) => !opts.skipped.has(depPath))
if (!opts.include.dependencies) {
pairs = pairs.filter(([_, pkg]) => pkg.dev !== false || pkg.optional)
}
if (!opts.include.devDependencies) {
pairs = pairs.filter(([_, pkg]) => pkg.dev !== true)
}
if (!opts.include.optionalDependencies) {
pairs = pairs.filter(([_, pkg]) => !pkg.optional)
}
return {
...lockfile,
importers: mapValues((importer) => filterImporter(importer, opts.include), lockfile.importers),
packages: Object.fromEntries(pairs),
}
return filterLockfileByImporters(lockfile, Object.keys(lockfile.importers), {
...opts,
failOnMissingDependencies: false,
})
}

View File

@@ -33,7 +33,6 @@ test('filterByImporters(): only prod dependencies of one importer', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'optional-dep@1.0.0': {
@@ -259,7 +258,6 @@ test('filterByImporters(): do not include skipped packages', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'optional-dep@1.0.0': {
@@ -325,7 +323,6 @@ test('filterByImporters(): do not include skipped packages', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'prod-dep-dep@1.0.0': {

View File

@@ -61,7 +61,6 @@ test('filterByImportersAndEngine(): skip packages that are not installable', ()
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {
@@ -161,7 +160,6 @@ test('filterByImportersAndEngine(): skip packages that are not installable', ()
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {
@@ -248,7 +246,6 @@ test('filterByImportersAndEngine(): filter the packages that set os and cpu', ()
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {
@@ -347,7 +344,6 @@ test('filterByImportersAndEngine(): filter the packages that set os and cpu', ()
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {
@@ -424,7 +420,6 @@ test('filterByImportersAndEngine(): filter the packages that set libc', () => {
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {
@@ -522,7 +517,6 @@ test('filterByImportersAndEngine(): filter the packages that set libc', () => {
resolution: { integrity: '' },
},
'dev-dep@1.0.0': {
dev: true,
resolution: { integrity: '' },
},
'foo@1.0.0': {

View File

@@ -88,13 +88,12 @@ export type LockfileResolution = Resolution | {
integrity: string
}
export type PackageSnapshotV7 = Pick<PackageSnapshot, 'dev' | 'optional' | 'dependencies' | 'optionalDependencies' | 'transitivePeerDependencies'>
export type PackageSnapshotV7 = Pick<PackageSnapshot, 'optional' | 'dependencies' | 'optionalDependencies' | 'transitivePeerDependencies'>
export type PackageInfo = Pick<PackageSnapshot, 'id' | 'patched' | 'hasBin' | 'name' | 'version' | 'resolution' | 'peerDependencies' | 'peerDependenciesMeta' | 'bundledDependencies' | 'engines' | 'cpu' | 'os' | 'libc' | 'deprecated'>
export interface PackageSnapshot {
id?: string
dev?: true | false
optional?: true
patched?: true
hasBin?: true

View File

@@ -9,7 +9,7 @@ export type LockfileFileV7 = Omit<InlineSpecifiersLockfile, 'importers' | 'packa
Partial<InlineSpecifiersProjectSnapshot> &
Partial<Pick<InlineSpecifiersLockfile, 'importers'>> & {
packages?: Record<string, Pick<PackageSnapshot, 'resolution' | 'engines' | 'cpu' | 'os' | 'hasBin' | 'name' | 'version' | 'bundledDependencies' | 'peerDependencies' | 'peerDependenciesMeta' | 'deprecated'>>
snapshots?: Record<string, Pick<PackageSnapshot, 'dependencies' | 'optionalDependencies' | 'patched' | 'dev' | 'optional' | 'transitivePeerDependencies' | 'id'>>
snapshots?: Record<string, Pick<PackageSnapshot, 'dependencies' | 'optionalDependencies' | 'patched' | 'optional' | 'transitivePeerDependencies' | 'id'>>
}
/**

View File

@@ -31,14 +31,12 @@
"homepage": "https://github.com/pnpm/pnpm/blob/main/lockfile/lockfile-walker#readme",
"devDependencies": {
"@pnpm/lockfile-walker": "workspace:*",
"@types/ramda": "0.28.20",
"tempy": "^1.0.1"
},
"dependencies": {
"@pnpm/dependency-path": "workspace:*",
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/types": "workspace:*",
"ramda": "npm:@pnpm/ramda@0.28.1"
"@pnpm/types": "workspace:*"
},
"funding": "https://opencollective.com/pnpm",
"exports": {

View File

@@ -127,22 +127,18 @@ function copyPackageSnapshots (
const ctx = {
copiedSnapshots,
nonOptional: new Set<string>(),
notProdOnly: new Set<string>(),
originalPackages,
walked: new Set<string>(),
warn: opts.warn,
}
copyDependencySubGraph(ctx, opts.devDepPaths, {
dev: true,
optional: false,
})
copyDependencySubGraph(ctx, opts.optionalDepPaths, {
dev: false,
optional: true,
})
copyDependencySubGraph(ctx, opts.prodDepPaths, {
dev: false,
optional: false,
})
@@ -159,19 +155,17 @@ function copyDependencySubGraph (
ctx: {
copiedSnapshots: PackageSnapshots
nonOptional: Set<string>
notProdOnly: Set<string>
originalPackages: PackageSnapshots
walked: Set<string>
warn: (msg: string) => void
},
depPaths: string[],
opts: {
dev: boolean
optional: boolean
}
) {
for (const depPath of depPaths) {
const key = `${depPath}:${opts.optional.toString()}:${opts.dev.toString()}`
const key = `${depPath}:${opts.optional.toString()}`
if (ctx.walked.has(key)) continue
ctx.walked.add(key)
if (!ctx.originalPackages[depPath]) {
@@ -190,17 +184,9 @@ function copyDependencySubGraph (
ctx.nonOptional.add(depPath)
delete depLockfile.optional
}
if (opts.dev) {
ctx.notProdOnly.add(depPath)
depLockfile.dev = true
} else if (depLockfile.dev === true) { // keeping if dev is explicitly false
delete depLockfile.dev
} else if (depLockfile.dev === undefined && !ctx.notProdOnly.has(depPath)) {
depLockfile.dev = false
}
const newDependencies = resolvedDepsToDepPaths(depLockfile.dependencies ?? {})
copyDependencySubGraph(ctx, newDependencies, opts)
const newOptionalDependencies = resolvedDepsToDepPaths(depLockfile.optionalDependencies ?? {})
copyDependencySubGraph(ctx, newOptionalDependencies, { dev: opts.dev, optional: true })
copyDependencySubGraph(ctx, newOptionalDependencies, { optional: true })
}
}

View File

@@ -27,13 +27,11 @@ test('remove one redundant package', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -60,7 +58,6 @@ test('remove one redundant package', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -118,19 +115,16 @@ test('keep all', () => {
dependencies: {
'is-positive': '2.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -163,19 +157,16 @@ test('keep all', () => {
dependencies: {
'is-positive': '2.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -220,7 +211,6 @@ test('optional dependency should have optional = true', () => {
},
},
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -229,13 +219,11 @@ test('optional dependency should have optional = true', () => {
dependencies: {
foo: '1.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
optionalDependencies: {
foo: '1.0.0',
'is-positive': '1.0.0',
@@ -276,7 +264,6 @@ test('optional dependency should have optional = true', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'foo-child@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -285,13 +272,11 @@ test('optional dependency should have optional = true', () => {
dependencies: {
'foo-child': '1.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@1.0.0': {
dev: false,
optional: true,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
@@ -301,13 +286,11 @@ test('optional dependency should have optional = true', () => {
dependencies: {
foo: '1.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
optionalDependencies: {
foo: '1.0.0',
'is-positive': '1.0.0',
@@ -337,13 +320,11 @@ test('optional dependency should not have optional = true if used not only as op
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
optionalDependencies: {
'is-positive': '1.0.0',
},
@@ -376,13 +357,11 @@ test('optional dependency should not have optional = true if used not only as op
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
optionalDependencies: {
'is-positive': '1.0.0',
},
@@ -394,207 +373,6 @@ test('optional dependency should not have optional = true if used not only as op
})
})
test('dev dependency should have dev = true', () => {
expect(pruneLockfile({
importers: {
'.': {
dependencies: {
'pkg-with-good-optional': '1.0.0',
},
devDependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '^1.0.0',
'pkg-with-good-optional': '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
}, {
name: 'foo',
version: '1.0.0',
dependencies: {
'pkg-with-good-optional': '^1.0.0',
},
devDependencies: {
'is-positive': '^1.0.0',
},
}, '.', DEFAULT_OPTS)).toStrictEqual({
importers: {
'.': {
dependencies: {
'pkg-with-good-optional': '1.0.0',
},
devDependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '^1.0.0',
'pkg-with-good-optional': '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: true,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'pkg-with-good-optional@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
})
})
test('dev dependency should not have dev = true if it is used not only as dev', () => {
expect(pruneLockfile({
importers: {
'.': {
dependencies: {
'some-pkg': '1.0.0',
},
devDependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '^1.0.0',
'some-pkg': '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'some-pkg@1.0.0': {
dependencies: {
'is-positive': '1.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
}, {
name: 'foo',
version: '1.0.0',
dependencies: {
'some-pkg': '^1.0.0',
},
devDependencies: {
'is-positive': '^1.0.0',
},
}, '.', DEFAULT_OPTS)).toStrictEqual({
importers: {
'.': {
dependencies: {
'some-pkg': '1.0.0',
},
devDependencies: {
'is-positive': '1.0.0',
},
specifiers: {
'is-positive': '^1.0.0',
'some-pkg': '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'some-pkg@1.0.0': {
dependencies: {
'is-positive': '1.0.0',
},
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
})
})
test('the dev field should be updated to dev = false if it is not a dev dependency anymore', () => {
expect(pruneLockfile({
importers: {
'.': {
dependencies: {
a: '1.0.0',
},
specifiers: {
a: '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'a@1.0.0': {
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
}, {
name: 'foo',
version: '1.0.0',
dependencies: {
a: '^1.0.0',
},
}, '.', DEFAULT_OPTS)).toStrictEqual({
importers: {
'.': {
dependencies: {
a: '1.0.0',
},
specifiers: {
a: '^1.0.0',
},
},
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'a@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
},
})
})
test('subdependency is both optional and dev', () => {
expect(pruneLockfile(yaml`
importers:
@@ -648,20 +426,17 @@ test('subdependency is both optional and dev', () => {
lockfileVersion: 5
packages:
parent@1.0.0:
dev: true
optionalDependencies:
subdep: 1.0.0
subdep2: 1.0.0
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
prod-parent@1.0.0:
dev: false
dependencies:
subdep2: 1.0.0
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
subdep@1.0.0:
dev: true
optional: true
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
@@ -671,75 +446,6 @@ test('subdependency is both optional and dev', () => {
`)
})
test('dev = true is removed if dependency is used both as dev and prod dependency', () => {
expect(pruneLockfile(yaml`
importers:
.:
dependencies:
foo: inflight@1.0.6
devDependencies:
inflight: 1.0.6
specifiers:
foo: 'npm:inflight@^1.0.6'
inflight: ^1.0.6
lockfileVersion: 5
packages:
inflight@1.0.6:
dev: true
dependencies:
once: 1.4.0
wrappy: 1.0.2
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
once@1.4.0:
dev: true
dependencies:
wrappy: 1.0.2
resolution:
integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
wrappy@1.0.2:
dev: true
resolution:
integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
`, {
name: 'foo',
version: '1.0.0',
dependencies: {
foo: 'npm:inflight@^1.0.6',
},
devDependencies: {
inflight: '^1.0.6',
},
}, '.', DEFAULT_OPTS)).toStrictEqual(yaml`
importers:
.:
dependencies:
foo: inflight@1.0.6
devDependencies:
inflight: 1.0.6
specifiers:
foo: 'npm:inflight@^1.0.6'
inflight: ^1.0.6
lockfileVersion: 5
packages:
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
once@1.4.0:
dependencies:
wrappy: 1.0.2
resolution:
integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
wrappy@1.0.2:
resolution:
integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
`)
})
test('optional = true is removed if dependency is used both as optional and prod dependency', () => {
expect(pruneLockfile(yaml`
importers:
@@ -793,20 +499,17 @@ test('optional = true is removed if dependency is used both as optional and prod
lockfileVersion: 5
packages:
inflight@1.0.6:
dev: false
dependencies:
once: 1.4.0
wrappy: 1.0.2
resolution:
integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
once@1.4.0:
dev: false
dependencies:
wrappy: 1.0.2
resolution:
integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
wrappy@1.0.2:
dev: false
resolution:
integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
`)
@@ -878,7 +581,6 @@ test(`ignore dependencies that are in package.json but are not in ${WANTED_LOCKF
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -906,7 +608,6 @@ test(`ignore dependencies that are in package.json but are not in ${WANTED_LOCKF
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -931,7 +632,6 @@ test('keep lockfileMinorVersion, if present', () => {
lockfileVersion: 5.2,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -958,7 +658,6 @@ test('keep lockfileMinorVersion, if present', () => {
lockfileVersion: 5.2,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -983,7 +682,6 @@ test('keep linked package even if it is not in package.json', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-negative@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -1011,7 +709,6 @@ test('keep linked package even if it is not in package.json', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-negative@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -1043,19 +740,16 @@ test("prune: don't remove package used by another importer", () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-negative@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -1088,13 +782,11 @@ test("prune: don't remove package used by another importer", () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-negative@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -1118,13 +810,11 @@ test('pruneSharedLockfile: remove one redundant package', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
},
'is-positive@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},
@@ -1144,7 +834,6 @@ test('pruneSharedLockfile: remove one redundant package', () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'is-positive@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=',
},

View File

@@ -51,11 +51,8 @@ test('installing aliased dependency', async () => {
},
},
snapshots: {
'is-negative@1.0.0': {
dev: false,
},
'is-negative@1.0.0': {},
'is-positive@3.1.0': {
dev: false,
},
},
})
@@ -112,14 +109,11 @@ test('a dependency has an aliased subdependency', async () => {
},
},
snapshots: {
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {
dev: false,
},
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {},
'@pnpm.e2e/pkg-with-1-aliased-dep@100.0.0': {
dependencies: {
dep: '@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0',
},
dev: false,
},
},
})

View File

@@ -58,7 +58,6 @@ test('fix broken lockfile with --fix-lockfile', async () => {
expect(lockfile.packages?.['core-js-pure@3.16.2']?.resolution).toEqual({
integrity: 'sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==',
})
expect(lockfile.snapshots?.['core-js-pure@3.16.2']?.dev).toBeTruthy()
})
test('--fix-lockfile should preserve all locked dependencies version', async () => {
@@ -214,7 +213,6 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
expect(lockfile.packages?.['@babel/runtime-corejs3@7.15.3']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.snapshots?.['@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({
@@ -223,23 +221,19 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
expect(lockfile.packages?.['@babel/runtime-corejs3@7.15.4']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.snapshots?.['@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.snapshots?.['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({
integrity: 'sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==',
})
expect(lockfile.snapshots?.['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({
integrity: 'sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==',
})
expect(lockfile.snapshots?.['regenerator-runtime@0.13.9']?.dev).toBeFalsy()
})
test(

View File

@@ -157,7 +157,6 @@ test('inject local packages', async () => {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {
@@ -170,7 +169,6 @@ test('inject local packages', async () => {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
const modulesState = rootModules.readModulesManifest()
@@ -227,7 +225,6 @@ test('inject local packages', async () => {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
@@ -377,7 +374,6 @@ test('inject local packages declared via file protocol', async () => {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -393,7 +389,6 @@ test('inject local packages declared via file protocol', async () => {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {
@@ -448,7 +443,6 @@ test('inject local packages declared via file protocol', async () => {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -592,7 +586,6 @@ test('inject local packages when the file protocol is used', async () => {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -608,7 +601,6 @@ test('inject local packages when the file protocol is used', async () => {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {
@@ -662,7 +654,6 @@ test('inject local packages when the file protocol is used', async () => {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -784,7 +775,6 @@ test('inject local packages and relink them after build', async () => {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -894,7 +884,6 @@ test('inject local packages and relink them after build (file protocol is used)'
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -1068,7 +1057,6 @@ test('inject local packages when node-linker is hoisted', async () => {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['project-1@file:project-1']).toEqual({
resolution: {
@@ -1085,7 +1073,6 @@ test('inject local packages when node-linker is hoisted', async () => {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {
@@ -1246,7 +1233,6 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
},
})
expect(lockfile.snapshots['project-1@file:project-1(is-positive@1.0.0)']).toEqual({
dev: false,
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
'is-negative': '1.0.0',
@@ -1268,7 +1254,6 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {
@@ -1990,7 +1975,6 @@ test('injected local packages are deduped', async () => {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['project-2@file:project-2']).toEqual({
resolution: {

View File

@@ -428,9 +428,7 @@ test('re-install should update local file dependency', async () => {
},
},
snapshots: {
'local-pkg@file:../local-pkg': {
dev: false,
},
'local-pkg@file:../local-pkg': {},
},
lockfileVersion: LOCKFILE_VERSION,
})
@@ -460,7 +458,6 @@ test('re-install should update local file dependency', async () => {
expect(lockfile).toMatchObject({
snapshots: {
'local-pkg@file:../local-pkg': {
dev: false,
dependencies: {
'is-positive': '1.0.0',
},
@@ -492,7 +489,6 @@ test('re-install should update local file dependency', async () => {
},
snapshots: {
'local-pkg@file:../local-pkg': {
dev: false,
dependencies: {
'is-positive': '2.0.0',
},

View File

@@ -914,31 +914,27 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall
},
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/bar@100.0.0': {
dev: false,
'@pnpm.e2e/bar@100.0.0': {
resolution: {
integrity: getIntegrity('@pnpm.e2e/bar', '100.0.0'),
},
},
'/@pnpm.e2e/foo@100.1.0': {
dev: false,
'@pnpm.e2e/foo@100.1.0': {
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',
'is-positive': '3.1.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/foobarqar', '1.0.1'),
},
},
'/is-positive@3.1.0': {
dev: false,
'is-positive@3.1.0': {
engines: {
node: '>=0.10.0',
},
@@ -1008,7 +1004,6 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
lockfileVersion: LOCKFILE_VERSION,
packages: {
'@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'),
},
@@ -1017,7 +1012,6 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
dependencies: {
'@pnpm.e2e/pkg-with-1-dep': '100.0.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/parent-of-pkg-with-1-dep', '1.0.0'),
},
@@ -1026,7 +1020,6 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/pkg-with-1-dep', '100.0.0'),
},

View File

@@ -1401,7 +1401,6 @@ test('resolve a subdependency from the workspace', async () => {
const project = assertProject(process.cwd())
const wantedLockfile = project.readLockfile()
console.log(JSON.stringify(wantedLockfile, null, 2))
expect(wantedLockfile.snapshots['@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')
rimraf('node_modules')

View File

@@ -90,11 +90,6 @@ test('install dev dependencies only', async () => {
project.has('inflight')
project.hasNot('once')
{
const lockfile = project.readLockfile()
expect(lockfile.snapshots['is-positive@1.0.0'].dev === false).toBeTruthy()
}
{
const currentLockfile = project.readCurrentLockfile()
expect(currentLockfile.packages['is-positive@1.0.0']).toBeFalsy()

View File

@@ -643,7 +643,7 @@ test.skip('peer dependencies are linked', async () => {
expect(deepRequireCwd(['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/abc', '@pnpm.e2e/peer-c', './package.json']).version).toBe('1.0.0')
const lockfile = project.readLockfile()
expect(lockfile.snapshots['@pnpm.e2e/abc-parent-with-ab/1.0.0/@pnpm.e2e/peer-a@1.0.0+@pnpm.e2e+peer-b@1.0.0'].dev).toBeTruthy()
expect(lockfile.snapshots['@pnpm.e2e/abc-parent-with-ab/1.0.0/@pnpm.e2e/peer-a@1.0.0+@pnpm.e2e+peer-b@1.0.0']).toBeTruthy()
})
test('scoped peer dependency is linked', async () => {
@@ -1217,9 +1217,6 @@ test('peer dependency that is resolved by a dev dependency', async () => {
rootDir: process.cwd(),
}, testDefaults({ fastUnpack: false, lockfileOnly: true, strictPeerDependencies: false }))
const lockfile = project.readLockfile()
expect(lockfile.snapshots['@types/mongoose@5.7.32'].dev).toBeUndefined()
await mutateModulesInSingleProject({
manifest,
mutation: 'install',

View File

@@ -75,7 +75,6 @@ test('dependency should not be added to package.json if it is already there', as
const lockfile = project.readLockfile()
expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/foo'].version).toBe('100.0.0')
expect(lockfile.snapshots['@pnpm.e2e/foo@100.0.0'].dev).toBeTruthy()
expect(lockfile.importers['.'].optionalDependencies?.['@pnpm.e2e/bar'].version).toBe('100.0.0')
expect(lockfile.snapshots['@pnpm.e2e/bar@100.0.0'].optional).toBeTruthy()

View File

@@ -429,25 +429,6 @@ test('repeat install with lockfile should not mutate lockfile when dependency ha
expect(lockfile1).toStrictEqual(lockfile2) // lockfile hasn't been changed
})
test('package is not marked dev if it is also a subdep of a regular dependency', async () => {
const project = prepareEmpty()
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'], testDefaults())
// console.log('installed @pnpm.e2e/pkg-with-1-dep')
await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep'], testDefaults({ targetDependenciesField: 'devDependencies' }))
// console.log('installed optional dependency which is also a dependency of @pnpm.e2e/pkg-with-1-dep')
const lockfile = project.readLockfile()
expect(lockfile.snapshots['@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 () => {
const project = prepareEmpty()
@@ -538,20 +519,11 @@ test('scoped module from different registry', async () => {
'@foo/no-deps': '1.0.0',
'is-negative': '1.0.0',
},
dev: false,
},
'@foo/no-deps@1.0.0': {
dev: false,
},
'@zkochan/foo@1.0.0': {
dev: false,
},
'is-negative@1.0.0': {
dev: false,
},
'is-positive@3.1.0': {
dev: false,
},
'@foo/no-deps@1.0.0': {},
'@zkochan/foo@1.0.0': {},
'is-negative@1.0.0': {},
'is-positive@3.1.0': {},
},
})
})
@@ -646,22 +618,6 @@ test('pendingBuilds gets updated if install removes packages', async () => {
expect(modules1!.pendingBuilds.length > modules2!.pendingBuilds.length).toBeTruthy()
})
test('dev properties are correctly updated on named install', async () => {
const project = prepareEmpty()
const manifest = await addDependenciesToPackage(
{},
['inflight@1.0.6'],
testDefaults({ targetDependenciesField: 'devDependencies' })
)
await addDependenciesToPackage(manifest, ['foo@npm:inflight@1.0.6'], testDefaults({}))
const lockfile = project.readLockfile()
expect(
Object.values(lockfile.snapshots).filter((dep) => typeof dep.dev !== 'undefined')
).toStrictEqual([])
})
test('optional properties are correctly updated on named install', async () => {
const project = prepareEmpty()
@@ -672,16 +628,6 @@ test('optional properties are correctly updated on named install', async () => {
expect(Object.values(lockfile.snapshots).filter((dep) => typeof dep.optional !== 'undefined')).toStrictEqual([])
})
test('dev property is correctly set for package that is duplicated to both the dependencies and devDependencies group', async () => {
const project = prepareEmpty()
// TODO: use a smaller package for testing
await addDependenciesToPackage({}, ['overlap@2.2.8'], testDefaults())
const lockfile = project.readLockfile()
expect(lockfile.snapshots['couleurs@5.0.0'].dev === false).toBeTruthy()
})
test('no lockfile', async () => {
const project = prepareEmpty()
const reporter = sinon.spy()
@@ -842,18 +788,13 @@ test('packages installed via tarball URL from the default registry are normalize
},
},
snapshots: {
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
},
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.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',
},
dev: false,
},
'is-positive@https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {
dev: false,
},
'is-positive@https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {},
},
})
})
@@ -1171,9 +1112,7 @@ test('tarball domain differs from registry domain', async () => {
},
},
snapshots: {
'is-positive@3.1.0': {
dev: false,
},
'is-positive@3.1.0': {},
},
})
})
@@ -1226,9 +1165,7 @@ test('tarball installed through non-standard URL endpoint from the registry doma
},
},
snapshots: {
'is-positive@https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz': {
dev: false,
},
'is-positive@https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz': {},
},
})
})

View File

@@ -344,9 +344,7 @@ test('uninstalling a dependency from package that uses shared lockfile', async (
},
},
snapshots: {
'is-negative@1.0.0': {
dev: false,
},
'is-negative@1.0.0': {},
},
})
})

View File

@@ -23,10 +23,8 @@ packages:
snapshots:
'@pnpm.e2e/hello-world-js-bin@1.0.0':
dev: false
'@pnpm.e2e/hello-world-js-bin@1.0.0': {}
'@pnpm.e2e/pre-and-postinstall-scripts-example@2.0.0':
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false

View File

@@ -57,20 +57,16 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -80,34 +76,26 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -50,20 +50,16 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -73,29 +69,22 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -27,16 +27,13 @@ packages:
snapshots:
'@pnpm.e2e/dep-of-optional-pkg@1.0.0':
dev: false
optional: true
'@pnpm.e2e/not-compatible-with-any-os@1.0.0':
dependencies:
'@pnpm.e2e/dep-of-optional-pkg': 1.0.0
dev: false
optional: true
'@pnpm.e2e/pkg-with-optional@1.0.0':
optionalDependencies:
'@pnpm.e2e/not-compatible-with-any-os': 1.0.0
dev: false

View File

@@ -20,5 +20,4 @@ packages:
snapshots:
tar-pkg@file:../tar-pkg-1.0.0.tgz:
dev: false
tar-pkg@file:../tar-pkg-1.0.0.tgz: {}

View File

@@ -69,20 +69,16 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -92,40 +88,30 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
is-negative@2.1.0:
dev: true
is-negative@2.1.0: {}
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -106,31 +106,22 @@ snapshots:
debug@2.6.9:
dependencies:
ms: 2.0.0
dev: false
depd@1.1.2:
dev: false
depd@1.1.2: {}
destroy@1.0.4:
dev: false
destroy@1.0.4: {}
ee-first@1.1.1:
dev: false
ee-first@1.1.1: {}
encodeurl@1.0.2:
dev: false
encodeurl@1.0.2: {}
escape-html@1.0.3:
dev: false
escape-html@1.0.3: {}
etag@1.8.1:
dev: false
etag@1.8.1: {}
fresh@0.5.2:
dev: false
fresh@0.5.2: {}
has-flag@1.0.0:
dev: false
has-flag@1.0.0: {}
http-errors@1.8.1:
dependencies:
@@ -139,30 +130,22 @@ snapshots:
setprototypeof: 1.2.0
statuses: 1.5.0
toidentifier: 1.0.1
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
mime@1.6.0:
dev: false
mime@1.6.0: {}
ms@1.0.0:
dev: false
ms@1.0.0: {}
ms@2.0.0:
dev: false
ms@2.0.0: {}
ms@2.1.3:
dev: false
ms@2.1.3: {}
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
dev: false
range-parser@1.2.1:
dev: false
range-parser@1.2.1: {}
send@0.17.2:
dependencies:
@@ -181,13 +164,9 @@ snapshots:
statuses: 1.5.0
transitivePeerDependencies:
- supports-color
dev: false
setprototypeof@1.2.0:
dev: false
setprototypeof@1.2.0: {}
statuses@1.5.0:
dev: false
statuses@1.5.0: {}
toidentifier@1.0.1:
dev: false
toidentifier@1.0.1: {}

View File

@@ -77,24 +77,19 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
colors@1.2.0:
dev: false
optional: true
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -104,40 +99,30 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
is-negative@2.1.0:
dev: true
is-negative@2.1.0: {}
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -40,10 +40,8 @@ snapshots:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
once@1.4.0:
dependencies:

View File

@@ -41,18 +41,13 @@ snapshots:
'@pnpm.e2e/peer-a': 1.0.1
'@pnpm.e2e/peer-b': 1.0.0
'@pnpm.e2e/peer-c': 1.0.1
dev: true
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0':
dev: true
'@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {}
'@pnpm.e2e/peer-a@1.0.1':
dev: true
'@pnpm.e2e/peer-a@1.0.1': {}
'@pnpm.e2e/peer-b@1.0.0':
dev: true
'@pnpm.e2e/peer-b@1.0.0': {}
'@pnpm.e2e/peer-c@1.0.1':
dev: true
'@pnpm.e2e/peer-c@1.0.1': {}
time: {}

View File

@@ -211,129 +211,98 @@ snapshots:
dependencies:
'@most/prelude': 1.7.0
most: 1.7.3
dev: false
'@most/prelude@1.7.0':
dev: false
'@most/prelude@1.7.0': {}
'@types/common-tags@1.4.0':
dev: false
'@types/common-tags@1.4.0': {}
'@types/node@8.10.0':
dev: false
'@types/node@8.10.0': {}
'@types/node@9.6.0':
dev: false
'@types/node@9.6.0': {}
'@types/ramda@0.25.20':
dev: false
'@types/ramda@0.25.20': {}
'@types/semver@5.5.0':
dev: false
'@types/semver@5.5.0': {}
ansi-diff@1.0.10:
dependencies:
ansi-split: 1.0.1
dev: false
ansi-regex@3.0.0:
dev: false
ansi-regex@3.0.0: {}
ansi-split@1.0.1:
dependencies:
ansi-regex: 3.0.0
dev: false
ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.1
dev: false
as-table@1.0.31:
dependencies:
printable-characters: 1.0.38
dev: false
babel-runtime@6.26.0:
dependencies:
core-js: 2.5.3
regenerator-runtime: 0.11.1
dev: false
chalk@2.3.2:
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.3.0
dev: false
cli-cursor@2.1.0:
dependencies:
restore-cursor: 2.0.0
dev: false
color-convert@1.9.1:
dependencies:
color-name: 1.1.3
dev: false
color-name@1.1.3:
dev: false
color-name@1.1.3: {}
common-tags@1.7.2:
dependencies:
babel-runtime: 6.26.0
dev: false
core-js@2.5.3:
dev: false
core-js@2.5.3: {}
core-util-is@1.0.2:
dev: false
core-util-is@1.0.2: {}
data-uri-to-buffer@2.0.0:
dependencies:
'@types/node': 8.10.0
dev: false
escape-string-regexp@1.0.5:
dev: false
escape-string-regexp@1.0.5: {}
get-source@1.0.24:
dependencies:
data-uri-to-buffer: 2.0.0
source-map: 0.6.1
dev: false
has-flag@3.0.0:
dev: false
has-flag@3.0.0: {}
inherits@2.0.3:
dev: false
inherits@2.0.3: {}
isarray@1.0.0:
dev: false
isarray@1.0.0: {}
json-stringify-safe@5.0.1:
dev: false
json-stringify-safe@5.0.1: {}
mimic-fn@1.2.0:
dev: false
mimic-fn@1.2.0: {}
minimist@1.2.0:
dev: false
minimist@1.2.0: {}
most-last@1.0.0(most@1.7.3):
dependencies:
most: 1.7.3
dev: false
most@1.7.3:
dependencies:
'@most/multicast': 1.3.0(most@1.7.3)
'@most/prelude': 1.7.0
symbol-observable: 1.2.0
dev: false
ndjson@1.5.0:
dependencies:
@@ -341,12 +310,10 @@ snapshots:
minimist: 1.2.0
split2: 2.2.0
through2: 2.0.3
dev: false
onetime@2.0.1:
dependencies:
mimic-fn: 1.2.0
dev: false
pnpm-default-reporter@0.14.7:
dependencies:
@@ -366,19 +333,14 @@ snapshots:
semver: 5.5.0
stacktracey: 1.2.100
zen-push: 0.2.1
dev: false
pretty-bytes@4.0.2:
dev: false
pretty-bytes@4.0.2: {}
printable-characters@1.0.38:
dev: false
printable-characters@1.0.38: {}
process-nextick-args@2.0.0:
dev: false
process-nextick-args@2.0.0: {}
ramda@0.25.0:
dev: false
ramda@0.25.0: {}
readable-stream@2.3.5:
dependencies:
@@ -389,71 +351,54 @@ snapshots:
safe-buffer: 5.1.1
string_decoder: 1.0.3
util-deprecate: 1.0.2
dev: false
regenerator-runtime@0.11.1:
dev: false
regenerator-runtime@0.11.1: {}
restore-cursor@2.0.0:
dependencies:
onetime: 2.0.1
signal-exit: 3.0.2
dev: false
safe-buffer@5.1.1:
dev: false
safe-buffer@5.1.1: {}
semver@5.5.0:
dev: false
semver@5.5.0: {}
signal-exit@3.0.2:
dev: false
signal-exit@3.0.2: {}
source-map@0.6.1:
dev: false
source-map@0.6.1: {}
split2@2.2.0:
dependencies:
through2: 2.0.3
dev: false
stacktracey@1.2.100:
dependencies:
as-table: 1.0.31
get-source: 1.0.24
dev: false
string_decoder@1.0.3:
dependencies:
safe-buffer: 5.1.1
dev: false
supports-color@5.3.0:
dependencies:
has-flag: 3.0.0
dev: false
symbol-observable@1.2.0:
dev: false
symbol-observable@1.2.0: {}
through2@2.0.3:
dependencies:
readable-stream: 2.3.5
xtend: 4.0.1
dev: false
util-deprecate@1.0.2:
dev: false
util-deprecate@1.0.2: {}
xtend@4.0.1:
dev: false
xtend@4.0.1: {}
zen-observable@0.7.1:
dev: false
zen-observable@0.7.1: {}
zen-push@0.2.1:
dependencies:
zen-observable: 0.7.1
dev: false
time: {}

View File

@@ -43,16 +43,13 @@ snapshots:
debug@4.1.1:
dependencies:
ms: 2.1.2
dev: false
diskusage@1.1.3:
dependencies:
es6-promise: 4.2.8
nan: 2.14.0
dev: false
es6-promise@4.2.8:
dev: false
es6-promise@4.2.8: {}
expire-fs@2.2.3:
dependencies:
@@ -60,12 +57,9 @@ snapshots:
diskusage: 1.1.3
transitivePeerDependencies:
- supports-color
dev: false
ms@2.1.2:
dev: false
ms@2.1.2: {}
nan@2.14.0:
dev: false
nan@2.14.0: {}
time: {}

View File

@@ -23,10 +23,8 @@ packages:
snapshots:
'@pnpm.e2e/hello-world-js-bin@1.0.0':
dev: false
'@pnpm.e2e/hello-world-js-bin@1.0.0': {}
'@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0':
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false

View File

@@ -89,32 +89,25 @@ packages:
snapshots:
'@pnpm.e2e/hello-world-js-bin@1.0.0':
dev: false
'@pnpm.e2e/hello-world-js-bin@1.0.0': {}
'@pnpm.e2e/pkg-with-peer-having-bin@1.0.0':
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
colors@1.2.0:
dev: false
optional: true
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -124,42 +117,32 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
is-negative@2.1.0:
dev: true
is-negative@2.1.0: {}
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.6.2:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}
time: {}

View File

@@ -84,24 +84,19 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
colors@1.2.0:
dev: false
optional: true
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -111,43 +106,32 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
is-negative@2.1.0:
dev: true
is-negative@2.1.0: {}
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
resolve-from@4.0.0:
dev: false
resolve-from@4.0.0: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -30,18 +30,15 @@ packages:
snapshots:
'@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0':
dev: false
'@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0': {}
'@pnpm.e2e/pkg-with-good-optional@1.0.0':
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 101.0.0
optionalDependencies:
is-positive: 1.0.0
dev: false
is-positive@1.0.0:
dev: false
optional: true
time: {}

View File

@@ -77,24 +77,19 @@ packages:
snapshots:
balanced-match@1.0.2:
dev: false
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
colors@1.2.0:
dev: false
optional: true
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
fs.realpath@1.0.0:
dev: false
fs.realpath@1.0.0: {}
glob@7.2.3:
dependencies:
@@ -104,40 +99,30 @@ snapshots:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
inherits@2.0.4:
dev: false
inherits@2.0.4: {}
is-negative@2.1.0:
dev: true
is-negative@2.1.0: {}
is-positive@1.0.0:
dev: false
is-positive@1.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
once@1.4.0:
dependencies:
wrappy: 1.0.2
dev: false
path-is-absolute@1.0.1:
dev: false
path-is-absolute@1.0.1: {}
rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
wrappy@1.0.2:
dev: false
wrappy@1.0.2: {}

View File

@@ -52,17 +52,14 @@ packages:
snapshots:
balanced-match@0.3.0:
dev: false
balanced-match@0.3.0: {}
brace-expansion@1.1.2:
dependencies:
balanced-match: 0.3.0
concat-map: 0.0.1
dev: false
concat-map@0.0.1:
dev: false
concat-map@0.0.1: {}
glob@6.0.4:
dependencies:
@@ -71,36 +68,28 @@ snapshots:
minimatch: 3.0.0
once: 1.3.3
path-is-absolute: 1.0.0
dev: false
inflight@1.0.4:
dependencies:
once: 1.3.3
wrappy: 1.0.1
dev: false
inherits@2.0.1:
dev: false
inherits@2.0.1: {}
minimatch@3.0.0:
dependencies:
brace-expansion: 1.1.2
dev: false
once@1.3.3:
dependencies:
wrappy: 1.0.1
dev: false
path-is-absolute@1.0.0:
dev: false
path-is-absolute@1.0.0: {}
rimraf@2.5.1:
dependencies:
glob: 6.0.4
dev: false
wrappy@1.0.1:
dev: false
wrappy@1.0.1: {}
time: {}

View File

@@ -223,11 +223,6 @@ test('installing non-prod deps then all deps', async () => {
project.hasNot('once')
{
const lockfile = project.readLockfile()
expect(lockfile.snapshots['is-positive@1.0.0'].dev === false).toBeTruthy()
}
{
const currentLockfile = project.readCurrentLockfile()
expect(currentLockfile.packages).not.toHaveProperty(['is-positive@1.0.0'])

View File

@@ -25,12 +25,12 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
"ajv@6.12.6": Object {
"resolution": Object {
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- },
},
},
- "fast-deep-equal@2.0.1": Object {
- "resolution": Object {
- "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
- },
},
- },
"fast-deep-equal@3.1.3": Object {
"resolution": Object {
@@ -45,33 +45,36 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
"fast-json-stable-stringify@2.1.0": Object {
"resolution": Object {
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
@@ -55,25 +40,12 @@
@@ -53,14 +38,6 @@
"json-schema-traverse@0.4.1": Object {
"resolution": Object {
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
},
},
- },
- },
- "punycode@2.1.1": Object {
- "engines": Object {
- "node": ">=6",
- },
- "resolution": Object {
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- },
- },
},
},
"punycode@2.3.0": Object {
"engines": Object {
"node": ">=6",
@@ -69,13 +46,8 @@
},
"resolution": Object {
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- },
- },
},
- "uri-js@4.2.2": Object {
- "resolution": Object {
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
},
},
- },
"uri-js@4.4.1": Object {
@@ -87,49 +59,25 @@
"resolution": Object {
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
@@ -87,14 +59,6 @@
"excludeLinksFromLockfile": false,
},
"snapshots": Object {
@@ -82,45 +85,29 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
- "json-schema-traverse": "0.4.1",
- "uri-js": "4.2.2",
- },
- "dev": false,
- },
"ajv@6.12.6": Object {
"dependencies": Object {
"fast-deep-equal": "3.1.3",
"fast-json-stable-stringify": "2.1.0",
"json-schema-traverse": "0.4.1",
@@ -103,18 +67,10 @@
"uri-js": "4.4.1",
- },
- "dev": false,
},
- "fast-deep-equal@2.0.1": Object {
"dev": false,
},
"fast-deep-equal@3.1.3": Object {
"dev": false,
},
- "fast-json-stable-stringify@2.0.0": Object {
- "dev": false,
- },
"fast-json-stable-stringify@2.1.0": Object {
"dev": false,
},
"json-schema-traverse@0.4.1": Object {
- "dev": false,
- },
- "punycode@2.1.1": Object {
"dev": false,
},
"punycode@2.3.0": Object {
- "dev": false,
- },
- "fast-deep-equal@2.0.1": Object {},
"fast-deep-equal@3.1.3": Object {},
- "fast-json-stable-stringify@2.0.0": Object {},
"fast-json-stable-stringify@2.1.0": Object {},
"json-schema-traverse@0.4.1": Object {},
- "punycode@2.1.1": Object {},
"punycode@2.3.0": Object {},
- "uri-js@4.2.2": Object {
- "dependencies": Object {
- "punycode": "2.1.1",
- },
"dev": false,
},
"uri-js@4.4.1": Object {"
- },
"uri-js@4.4.1": Object {
"dependencies": Object {
"punycode": "2.3.0","
`;
exports[`pnpm dedupe updates old resolutions from package block 1`] = `
@@ -142,21 +129,17 @@ exports[`pnpm dedupe updates old resolutions from package block 1`] = `
"punycode@2.3.0": Object {
"engines": Object {
"node": ">=6",
@@ -52,15 +44,12 @@
@@ -52,11 +44,10 @@
"excludeLinksFromLockfile": false,
},
"snapshots": Object {
- "punycode@2.1.1": Object {
- "dev": false,
- },
"punycode@2.3.0": Object {
"dev": false,
},
- "punycode@2.1.1": Object {},
"punycode@2.3.0": Object {},
"uri-js@4.2.2": Object {
"dependencies": Object {
- "punycode": "2.1.1",
+ "punycode": "2.3.0",
},
"dev": false,
},"
},
"uri-js@4.4.1": Object {"
`;

View File

@@ -91,11 +91,6 @@ function toLockfileDependency (
if (Object.keys(newResolvedOptionalDeps).length > 0) {
result['optionalDependencies'] = newResolvedOptionalDeps
}
if (pkg.dev && !pkg.prod) {
result['dev'] = true
} else if (pkg.prod && !pkg.dev) {
result['dev'] = false
}
if (pkg.optional) {
result['optional'] = true
}

31
pnpm-lock.yaml generated
View File

@@ -2007,6 +2007,9 @@ importers:
'@pnpm/lockfile-walker':
specifier: workspace:*
version: link:../lockfile-walker
'@pnpm/lockfile.detect-dep-types':
specifier: workspace:*
version: link:../detect-dep-types
'@pnpm/logger':
specifier: ^5.0.0
version: 5.0.0
@@ -2039,6 +2042,22 @@ importers:
specifier: 13.3.4
version: 13.3.4
lockfile/detect-dep-types:
dependencies:
'@pnpm/dependency-path':
specifier: workspace:*
version: link:../../packages/dependency-path
'@pnpm/lockfile-types':
specifier: workspace:*
version: link:../lockfile-types
devDependencies:
'@pnpm/lockfile.detect-dep-types':
specifier: workspace:*
version: 'link:'
tempy:
specifier: ^1.0.1
version: 1.0.1
lockfile/filter-lockfile:
dependencies:
'@pnpm/constants':
@@ -2283,16 +2302,10 @@ importers:
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
ramda:
specifier: npm:@pnpm/ramda@0.28.1
version: '@pnpm/ramda@0.28.1'
devDependencies:
'@pnpm/lockfile-walker':
specifier: workspace:*
version: 'link:'
'@types/ramda':
specifier: 0.28.20
version: 0.28.20
tempy:
specifier: ^1.0.1
version: 1.0.1
@@ -5243,6 +5256,9 @@ importers:
'@pnpm/lockfile-utils':
specifier: workspace:*
version: link:../../lockfile/lockfile-utils
'@pnpm/lockfile.detect-dep-types':
specifier: workspace:*
version: link:../../lockfile/detect-dep-types
'@pnpm/matcher':
specifier: workspace:*
version: link:../../config/matcher
@@ -5316,6 +5332,9 @@ importers:
'@pnpm/lockfile-walker':
specifier: workspace:*
version: link:../../lockfile/lockfile-walker
'@pnpm/lockfile.detect-dep-types':
specifier: workspace:*
version: link:../../lockfile/detect-dep-types
'@pnpm/logger':
specifier: ^5.0.0
version: 5.0.0

View File

@@ -984,9 +984,7 @@ test("shared-workspace-lockfile: don't install dependencies in projects that are
},
},
snapshots: {
'is-positive@1.0.0': {
dev: false,
},
'is-positive@1.0.0': {},
},
})
})
@@ -1097,12 +1095,8 @@ test('shared-workspace-lockfile: install dependencies in projects that are relat
},
},
snapshots: {
'is-negative@1.0.0': {
dev: false,
},
'is-positive@1.0.0': {
dev: false,
},
'is-negative@1.0.0': {},
'is-positive@1.0.0': {},
},
})
})

View File

@@ -35,6 +35,7 @@
"@pnpm/dependency-path": "workspace:*",
"@pnpm/lockfile-file": "workspace:*",
"@pnpm/lockfile-utils": "workspace:*",
"@pnpm/lockfile.detect-dep-types": "workspace:*",
"@pnpm/matcher": "workspace:*",
"@pnpm/modules-yaml": "workspace:*",
"@pnpm/normalize-registries": "workspace:*",

View File

@@ -6,6 +6,7 @@ import {
readCurrentLockfile,
readWantedLockfile,
} from '@pnpm/lockfile-file'
import { detectDepTypes } from '@pnpm/lockfile.detect-dep-types'
import { readModulesManifest } from '@pnpm/modules-yaml'
import { normalizeRegistries } from '@pnpm/normalize-registries'
import { readModulesDir } from '@pnpm/read-modules-dir'
@@ -123,6 +124,7 @@ async function dependenciesHierarchyForPackage (
currentPackages: currentLockfile.packages ?? {},
importers: currentLockfile.importers,
includeOptionalDependencies: opts.include.optionalDependencies,
lockfile: currentLockfile,
lockfileDir: opts.lockfileDir,
onlyProjects: opts.onlyProjects,
rewriteLinkVersionDir: projectPath,
@@ -139,10 +141,12 @@ async function dependenciesHierarchyForPackage (
for (const dependenciesField of DEPENDENCIES_FIELDS.sort().filter(dependenciesField => opts.include[dependenciesField])) {
const topDeps = currentLockfile.importers[importerId][dependenciesField] ?? {}
result[dependenciesField] = []
const depTypes = detectDepTypes(currentLockfile)
Object.entries(topDeps).forEach(([alias, ref]) => {
const packageInfo = getPkgInfo({
alias,
currentPackages: currentLockfile.packages ?? {},
depTypes,
rewriteLinkVersionDir: projectPath,
linkedPathBaseDir: projectPath,
ref,

View File

@@ -8,6 +8,7 @@ import {
nameVerFromPkgSnapshot,
pkgSnapshotToResolution,
} from '@pnpm/lockfile-utils'
import { type DepTypes, DepType } from '@pnpm/lockfile.detect-dep-types'
import { type Registries } from '@pnpm/types'
import { depPathToFilename, refToRelative } from '@pnpm/dependency-path'
import normalizePath from 'normalize-path'
@@ -21,6 +22,7 @@ export interface GetPkgInfoOpts {
readonly skipped: Set<string>
readonly wantedPackages: PackageSnapshots
readonly virtualStoreDir?: string
readonly depTypes: DepTypes
/**
* The base dir if the `ref` argument is a `"link:"` relative path.
@@ -41,7 +43,7 @@ export function getPkgInfo (opts: GetPkgInfoOpts): PackageInfo {
let name!: string
let version: string
let resolved: string | undefined
let dev: boolean | undefined
let depType: DepType | undefined
let optional: true | undefined
let isSkipped: boolean = false
let isMissing: boolean = false
@@ -67,7 +69,7 @@ export function getPkgInfo (opts: GetPkgInfoOpts): PackageInfo {
isSkipped = opts.skipped.has(depPath)
}
resolved = (pkgSnapshotToResolution(depPath, pkgSnapshot, opts.registries) as TarballResolution).tarball
dev = pkgSnapshot.dev
depType = opts.depTypes[depPath]
optional = pkgSnapshot.optional
} else {
name = opts.alias
@@ -99,8 +101,10 @@ export function getPkgInfo (opts: GetPkgInfoOpts): PackageInfo {
if (optional === true) {
packageInfo.optional = true
}
if (typeof dev === 'boolean') {
packageInfo.dev = dev
if (depType === DepType.DevOnly) {
packageInfo.dev = true
} else if (depType === DepType.ProdOnly) {
packageInfo.dev = false
}
return packageInfo
}

View File

@@ -1,5 +1,6 @@
import path from 'path'
import { type PackageSnapshots, type ProjectSnapshot } from '@pnpm/lockfile-file'
import { type Lockfile, type PackageSnapshots, type ProjectSnapshot } from '@pnpm/lockfile-file'
import { detectDepTypes } from '@pnpm/lockfile.detect-dep-types'
import { type Registries } from '@pnpm/types'
import { type SearchFunction } from './types'
import { type PackageNode } from './PackageNode'
@@ -18,6 +19,7 @@ interface GetTreeOpts {
skipped: Set<string>
registries: Registries
importers: Record<string, ProjectSnapshot>
lockfile: Lockfile
currentPackages: PackageSnapshots
wantedPackages: PackageSnapshots
virtualStoreDir?: string
@@ -121,10 +123,12 @@ function getTreeHelper (
let resultHeight: number | 'unknown' = 0
let resultCircular: boolean = false
const depTypes = detectDepTypes(opts.lockfile)
Object.entries(deps).forEach(([alias, ref]) => {
const packageInfo = getPkgInfo({
alias,
currentPackages: opts.currentPackages,
depTypes,
rewriteLinkVersionDir: opts.rewriteLinkVersionDir,
linkedPathBaseDir,
peers,

View File

@@ -95,6 +95,7 @@ describe('getTree', () => {
},
currentPackages,
wantedPackages: currentPackages,
lockfile: { lockfileVersion: '7.0', importers: {} },
}
test('full test case to print when max depth is large', () => {
@@ -164,6 +165,7 @@ describe('getTree', () => {
importers: {},
includeOptionalDependencies: false,
lockfileDir: '',
lockfile: { lockfileVersion: '7.0', importers: {} },
skipped: new Set<string>(),
registries: {
default: 'mock-registry-for-testing.example',
@@ -299,6 +301,7 @@ describe('getTree', () => {
importers: {},
includeOptionalDependencies: false,
lockfileDir: '',
lockfile: { lockfileVersion: '7.0', importers: {} },
skipped: new Set<string>(),
registries: {
default: 'mock-registry-for-testing.example',

View File

@@ -21,6 +21,9 @@
{
"path": "../../fs/read-modules-dir"
},
{
"path": "../../lockfile/detect-dep-types"
},
{
"path": "../../lockfile/lockfile-file"
},

View File

@@ -40,6 +40,7 @@
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/lockfile-utils": "workspace:*",
"@pnpm/lockfile-walker": "workspace:*",
"@pnpm/lockfile.detect-dep-types": "workspace:*",
"@pnpm/package-is-installable": "workspace:*",
"@pnpm/read-package-json": "workspace:*",
"@pnpm/store.cafs": "workspace:*",

View File

@@ -1,5 +1,6 @@
import { PnpmError } from '@pnpm/error'
import { type Lockfile } from '@pnpm/lockfile-file'
import { detectDepTypes } from '@pnpm/lockfile.detect-dep-types'
import {
type SupportedArchitectures,
type DependenciesField,
@@ -85,6 +86,7 @@ export async function findDependencyLicenses (opts: {
)
}
const depTypes = detectDepTypes(opts.wantedLockfile)
const licenseNodeTree = await lockfileToLicenseNodeTree(opts.wantedLockfile, {
dir: opts.lockfileDir,
modulesDir: opts.modulesDir,
@@ -94,6 +96,7 @@ export async function findDependencyLicenses (opts: {
registries: opts.registries,
includedImporterIds: opts.includedImporterIds,
supportedArchitectures: opts.supportedArchitectures,
depTypes,
})
// map: name@ver -> LicensePackage

View File

@@ -5,6 +5,7 @@ import {
lockfileWalkerGroupImporterSteps,
type LockfileWalkerStep,
} from '@pnpm/lockfile-walker'
import { type DepTypes, DepType, detectDepTypes } from '@pnpm/lockfile.detect-dep-types'
import { type SupportedArchitectures, type DependenciesField, type Registries } from '@pnpm/types'
import { getPkgInfo } from './getPkgInfo'
import mapValues from 'ramda/src/map'
@@ -37,6 +38,7 @@ export interface LicenseExtractOptions {
dir: string
registries: Registries
supportedArchitectures?: SupportedArchitectures
depTypes: DepTypes
}
export async function lockfileToLicenseNode (
@@ -87,7 +89,7 @@ export async function lockfileToLicenseNode (
const dep: LicenseNode = {
name,
dev: pkgSnapshot.dev === true,
dev: options.depTypes[depPath] === DepType.DevOnly,
integrity: (pkgSnapshot.resolution as TarballResolution).integrity,
version,
license: packageInfo.license,
@@ -131,6 +133,7 @@ export async function lockfileToLicenseNodeTree (
opts.includedImporterIds ?? Object.keys(lockfile.importers),
{ include: opts?.include }
)
const depTypes = detectDepTypes(lockfile)
const dependencies = Object.fromEntries(
await Promise.all(
importerWalkers.map(async (importerWalker) => {
@@ -141,6 +144,7 @@ export async function lockfileToLicenseNodeTree (
dir: opts.dir,
registries: opts.registries,
supportedArchitectures: opts.supportedArchitectures,
depTypes,
})
return [importerWalker.importerId, {
dependencies: importerDeps,

View File

@@ -15,6 +15,9 @@
{
"path": "../../fetching/directory-fetcher"
},
{
"path": "../../lockfile/detect-dep-types"
},
{
"path": "../../lockfile/lockfile-file"
},

View File

@@ -48,13 +48,11 @@ test('outdated()', async () => {
lockfileVersion: 5,
packages: {
'is-negative@2.1.0': {
dev: true,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
},
'is-positive@1.0.0': {
dev: true,
resolution: {
integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==',
},
@@ -62,7 +60,6 @@ test('outdated()', async () => {
'from-github@https://codeload.github.com/blabla/from-github/tar.gz/d5f8d5500f7faf593d32e134c1b0043ff69151b4': {
version: '1.1.0',
dev: false,
resolution: {
tarball: 'https://codeload.github.com/blabla/from-github/tar.gz/d5f8d5500f7faf593d32e134c1b0043ff69151b3',
},
@@ -200,7 +197,6 @@ test('outdated() should return deprecated package even if its current version is
lockfileVersion: 5,
packages: {
'deprecated-pkg@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
@@ -454,19 +450,16 @@ test('a dependency is not outdated if it is newer than the latest version', asyn
lockfileVersion: 5,
packages: {
'foo@1.0.0': {
dev: false,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
},
'foo2@2.0.0-0': {
dev: false,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
},
'foo3@2.0.0': {
dev: false,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
@@ -561,13 +554,11 @@ test('should ignore dependencies as expected', async () => {
lockfileVersion: 5,
packages: {
'is-negative@2.1.0': {
dev: true,
resolution: {
integrity: 'sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=',
},
},
'is-positive@1.0.0': {
dev: true,
resolution: {
integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==',
},
@@ -576,7 +567,6 @@ test('should ignore dependencies as expected', async () => {
name: 'from-github',
version: '1.1.0',
dev: false,
resolution: {
tarball: 'https://codeload.github.com/blabla/from-github/tar.gz/d5f8d5500f7faf593d32e134c1b0043ff69151b3',
},

View File

@@ -1,13 +1,11 @@
import fs from 'fs'
import path from 'path'
import { assertStore } from '@pnpm/assert-store'
import { type LockfileFileV7 as LockfileFile } from '@pnpm/lockfile-file'
import { store } from '@pnpm/plugin-commands-store'
import { prepare } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import { sync as rimraf } from '@zkochan/rimraf'
import execa from 'execa'
import isEmpty from 'ramda/src/isEmpty'
import ssri from 'ssri'
const STORE_VERSION = 'v3'
@@ -135,14 +133,6 @@ test('keep dependencies used by others', async () => {
project.storeHas('map-obj', '1.0.1')
project.hasNot('map-obj')
// all dependencies are marked as dev
const lockfile = project.readLockfile() as LockfileFile
expect(isEmpty(lockfile.snapshots)).toBeFalsy()
Object.entries(lockfile.snapshots ?? {}).forEach(([_, dep]) => {
expect(dep.dev).toBeTruthy()
})
await store.handler({
cacheDir,
dir: process.cwd(),