From a22bdf0e29b9bebbde388c1f9a56ca26b25372ee Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 22 Mar 2024 15:21:26 +0100 Subject: [PATCH] feat!: remove the dev field from the lockfile (#7808) --- .changeset/tricky-feet-heal.md | 5 + __fixtures__/circular/pnpm-lock.yaml | 4 - .../custom-modules-dir/pnpm-lock.yaml | 6 +- .../pnpm-lock.yaml | 7 +- .../pnpm-lock.yaml | 26 +- .../pnpm-lock.yaml | 26 +- __fixtures__/general/pnpm-lock.yaml | 25 +- .../node_modules/.pnpm/lock.yaml | 6 +- .../has-2-outdated-deps/pnpm-lock.yaml | 6 +- .../node_modules/.pnpm/lock.yaml | 11 +- .../has-major-outdated-deps/pnpm-lock.yaml | 12 +- .../node_modules/.pnpm/lock.yaml | 36 +- .../has-not-outdated-deps/pnpm-lock.yaml | 36 +- .../pnpm-lock.yaml | 14 +- .../node_modules/.pnpm/lock.yaml | 47 +- __fixtures__/has-outdated-deps/pnpm-lock.yaml | 45 +- __fixtures__/monorepo/pnpm-lock.yaml | 18 +- __fixtures__/package.yaml | 14 +- .../pkg-with-external-lockfile/pnpm-lock.yaml | 448 ++++++++++-------- __fixtures__/with-file-dep/pnpm-lock.yaml | 3 +- .../with-non-package-dep/pnpm-lock.yaml | 3 +- __fixtures__/with-peer/pnpm-lock.yaml | 15 +- __fixtures__/with-unsaved-deps/pnpm-lock.yaml | 73 +-- .../pnpm-lock.yaml | 21 +- .../workspace-with-2-pkgs/pnpm-lock.yaml | 3 +- .../pnpm-lock.yaml | 3 +- .../pnpm-lock.yaml | 25 +- .../pnpm-lock.yaml | 8 +- .../pnpm-lock.yaml | 3 +- .../pnpm-lock.yaml | 3 +- lockfile/audit/package.json | 1 + lockfile/audit/src/lockfileToAuditTree.ts | 10 +- lockfile/audit/tsconfig.json | 3 + lockfile/detect-dep-types/README.md | 13 + lockfile/detect-dep-types/package.json | 44 ++ lockfile/detect-dep-types/src/index.ts | 77 +++ lockfile/detect-dep-types/tsconfig.json | 20 + lockfile/detect-dep-types/tsconfig.lint.json | 8 + .../filter-lockfile/src/filterLockfile.ts | 23 +- .../filter-lockfile/test/filterByImporters.ts | 3 - .../test/filterByImportersAndEngine.ts | 6 - lockfile/lockfile-types/src/index.ts | 3 +- .../lockfile-types/src/lockfileFileTypes.ts | 2 +- lockfile/lockfile-walker/package.json | 4 +- lockfile/prune-lockfile/src/index.ts | 18 +- lockfile/prune-lockfile/test/index.ts | 311 ------------ pkg-manager/core/test/install/aliases.ts | 10 +- pkg-manager/core/test/install/fixLockfile.ts | 6 - .../core/test/install/injectLocalPackages.ts | 16 - pkg-manager/core/test/install/local.ts | 6 +- pkg-manager/core/test/install/misc.ts | 15 +- .../core/test/install/multipleImporters.ts | 1 - pkg-manager/core/test/install/only.ts | 5 - .../core/test/install/peerDependencies.ts | 5 +- .../core/test/install/updatingPkgJson.ts | 1 - pkg-manager/core/test/lockfile.ts | 79 +-- pkg-manager/core/test/uninstall.ts | 4 +- .../pnpm-lock.yaml | 4 +- .../has-glob-and-rimraf/pnpm-lock.yaml | 24 +- .../test/fixtures/has-glob/pnpm-lock.yaml | 23 +- .../pnpm-lock.yaml | 3 - .../fixtures/has-local-dep/pkg/pnpm-lock.yaml | 3 +- .../pnpm-lock.yaml | 30 +- .../pnpm-lock.yaml | 55 +-- .../ignore-package-manifest/pnpm-lock.yaml | 31 +- .../prod-dep-is-dev-subdep/pnpm-lock.yaml | 4 +- .../reinstall-peer-deps/pnpm-lock.yaml | 13 +- .../pnpm-lock.yaml | 115 ++--- .../side-effects-of-subdep/pnpm-lock.yaml | 12 +- .../test/fixtures/side-effects/pnpm-lock.yaml | 4 +- .../simple-shamefully-flatten/pnpm-lock.yaml | 35 +- .../simple-with-more-deps/pnpm-lock.yaml | 34 +- .../simple-with-optional-dep/pnpm-lock.yaml | 5 +- .../test/fixtures/simple/pnpm-lock.yaml | 31 +- .../test/fixtures/with-1-dep/pnpm-lock.yaml | 21 +- pkg-manager/headless/test/index.ts | 5 - .../test/__snapshots__/dedupe.ts.snap | 81 ++-- .../src/updateLockfile.ts | 5 - pnpm-lock.yaml | 31 +- pnpm/test/monorepo/index.ts | 12 +- reviewing/dependencies-hierarchy/package.json | 1 + .../src/buildDependenciesHierarchy.ts | 4 + .../dependencies-hierarchy/src/getPkgInfo.ts | 12 +- .../dependencies-hierarchy/src/getTree.ts | 6 +- .../test/getTree.test.ts | 3 + .../dependencies-hierarchy/tsconfig.json | 3 + reviewing/license-scanner/package.json | 1 + reviewing/license-scanner/src/licenses.ts | 3 + .../src/lockfileToLicenseNodeTree.ts | 6 +- reviewing/license-scanner/tsconfig.json | 3 + reviewing/outdated/test/outdated.spec.ts | 10 - .../plugin-commands-store/test/storePrune.ts | 10 - 92 files changed, 905 insertions(+), 1384 deletions(-) create mode 100644 .changeset/tricky-feet-heal.md create mode 100644 lockfile/detect-dep-types/README.md create mode 100644 lockfile/detect-dep-types/package.json create mode 100644 lockfile/detect-dep-types/src/index.ts create mode 100644 lockfile/detect-dep-types/tsconfig.json create mode 100644 lockfile/detect-dep-types/tsconfig.lint.json diff --git a/.changeset/tricky-feet-heal.md b/.changeset/tricky-feet-heal.md new file mode 100644 index 0000000000..473df9cd41 --- /dev/null +++ b/.changeset/tricky-feet-heal.md @@ -0,0 +1,5 @@ +--- +"@pnpm/lockfile.detect-dep-types": major +--- + +Initial release. diff --git a/__fixtures__/circular/pnpm-lock.yaml b/__fixtures__/circular/pnpm-lock.yaml index 43d19cc40b..367f784d65 100644 --- a/__fixtures__/circular/pnpm-lock.yaml +++ b/__fixtures__/circular/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/custom-modules-dir/pnpm-lock.yaml b/__fixtures__/custom-modules-dir/pnpm-lock.yaml index 55e39f0cc7..77bb5783e7 100644 --- a/__fixtures__/custom-modules-dir/pnpm-lock.yaml +++ b/__fixtures__/custom-modules-dir/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/fixture-with-external-shrinkwrap/pnpm-lock.yaml b/__fixtures__/fixture-with-external-shrinkwrap/pnpm-lock.yaml index 7f2654b3d0..fa01421b39 100644 --- a/__fixtures__/fixture-with-external-shrinkwrap/pnpm-lock.yaml +++ b/__fixtures__/fixture-with-external-shrinkwrap/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/fixture-with-no-pkg-name-and-no-version/pnpm-lock.yaml b/__fixtures__/fixture-with-no-pkg-name-and-no-version/pnpm-lock.yaml index 7ae88408af..d38a4b7dd9 100644 --- a/__fixtures__/fixture-with-no-pkg-name-and-no-version/pnpm-lock.yaml +++ b/__fixtures__/fixture-with-no-pkg-name-and-no-version/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/fixture-with-no-pkg-version/pnpm-lock.yaml b/__fixtures__/fixture-with-no-pkg-version/pnpm-lock.yaml index 7ae88408af..d38a4b7dd9 100644 --- a/__fixtures__/fixture-with-no-pkg-version/pnpm-lock.yaml +++ b/__fixtures__/fixture-with-no-pkg-version/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/general/pnpm-lock.yaml b/__fixtures__/general/pnpm-lock.yaml index 138a09d119..795567e4ad 100644 --- a/__fixtures__/general/pnpm-lock.yaml +++ b/__fixtures__/general/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml b/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml index 01ed630866..09e408e1b1 100644 --- a/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml @@ -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: {} diff --git a/__fixtures__/has-2-outdated-deps/pnpm-lock.yaml b/__fixtures__/has-2-outdated-deps/pnpm-lock.yaml index 01ed630866..09e408e1b1 100644 --- a/__fixtures__/has-2-outdated-deps/pnpm-lock.yaml +++ b/__fixtures__/has-2-outdated-deps/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/has-major-outdated-deps/node_modules/.pnpm/lock.yaml b/__fixtures__/has-major-outdated-deps/node_modules/.pnpm/lock.yaml index 755ac4f162..b82f33f6e2 100644 --- a/__fixtures__/has-major-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/__fixtures__/has-major-outdated-deps/node_modules/.pnpm/lock.yaml @@ -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: {} diff --git a/__fixtures__/has-major-outdated-deps/pnpm-lock.yaml b/__fixtures__/has-major-outdated-deps/pnpm-lock.yaml index a4cee8526e..577697c31d 100644 --- a/__fixtures__/has-major-outdated-deps/pnpm-lock.yaml +++ b/__fixtures__/has-major-outdated-deps/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/has-not-outdated-deps/node_modules/.pnpm/lock.yaml b/__fixtures__/has-not-outdated-deps/node_modules/.pnpm/lock.yaml index d8a3687644..ffa4bf7517 100644 --- a/__fixtures__/has-not-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/__fixtures__/has-not-outdated-deps/node_modules/.pnpm/lock.yaml @@ -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: {} diff --git a/__fixtures__/has-not-outdated-deps/pnpm-lock.yaml b/__fixtures__/has-not-outdated-deps/pnpm-lock.yaml index fe13c0be02..3c77b4d012 100644 --- a/__fixtures__/has-not-outdated-deps/pnpm-lock.yaml +++ b/__fixtures__/has-not-outdated-deps/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/has-outdated-deps-and-external-shrinkwrap/pnpm-lock.yaml b/__fixtures__/has-outdated-deps-and-external-shrinkwrap/pnpm-lock.yaml index 1adbb03f79..06d7059fdc 100644 --- a/__fixtures__/has-outdated-deps-and-external-shrinkwrap/pnpm-lock.yaml +++ b/__fixtures__/has-outdated-deps-and-external-shrinkwrap/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/has-outdated-deps/node_modules/.pnpm/lock.yaml b/__fixtures__/has-outdated-deps/node_modules/.pnpm/lock.yaml index c92a108aca..1c4501b98b 100644 --- a/__fixtures__/has-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/__fixtures__/has-outdated-deps/node_modules/.pnpm/lock.yaml @@ -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: {} diff --git a/__fixtures__/has-outdated-deps/pnpm-lock.yaml b/__fixtures__/has-outdated-deps/pnpm-lock.yaml index d4e6596134..f149e3fd74 100644 --- a/__fixtures__/has-outdated-deps/pnpm-lock.yaml +++ b/__fixtures__/has-outdated-deps/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/monorepo/pnpm-lock.yaml b/__fixtures__/monorepo/pnpm-lock.yaml index 2f2268b010..7a9b1279a2 100644 --- a/__fixtures__/monorepo/pnpm-lock.yaml +++ b/__fixtures__/monorepo/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/package.yaml b/__fixtures__/package.yaml index 7898391a9a..6d8c5b671a 100644 --- a/__fixtures__/package.yaml +++ b/__fixtures__/package.yaml @@ -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 diff --git a/__fixtures__/pkg-with-external-lockfile/pnpm-lock.yaml b/__fixtures__/pkg-with-external-lockfile/pnpm-lock.yaml index d23a35bc42..7f5845df17 100644 --- a/__fixtures__/pkg-with-external-lockfile/pnpm-lock.yaml +++ b/__fixtures__/pkg-with-external-lockfile/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/with-file-dep/pnpm-lock.yaml b/__fixtures__/with-file-dep/pnpm-lock.yaml index 885fcefd1f..c7adffc952 100644 --- a/__fixtures__/with-file-dep/pnpm-lock.yaml +++ b/__fixtures__/with-file-dep/pnpm-lock.yaml @@ -23,5 +23,4 @@ packages: snapshots: - is-positive@3.1.0: - dev: false + is-positive@3.1.0: {} diff --git a/__fixtures__/with-non-package-dep/pnpm-lock.yaml b/__fixtures__/with-non-package-dep/pnpm-lock.yaml index c76680c31d..7f660aa839 100644 --- a/__fixtures__/with-non-package-dep/pnpm-lock.yaml +++ b/__fixtures__/with-non-package-dep/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/with-peer/pnpm-lock.yaml b/__fixtures__/with-peer/pnpm-lock.yaml index b22fcb6f08..1d4e991f0a 100644 --- a/__fixtures__/with-peer/pnpm-lock.yaml +++ b/__fixtures__/with-peer/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/with-unsaved-deps/pnpm-lock.yaml b/__fixtures__/with-unsaved-deps/pnpm-lock.yaml index c9695266f4..fc82804f7d 100644 --- a/__fixtures__/with-unsaved-deps/pnpm-lock.yaml +++ b/__fixtures__/with-unsaved-deps/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/workspace-external-depends-deep/pnpm-lock.yaml b/__fixtures__/workspace-external-depends-deep/pnpm-lock.yaml index 01978e8a58..a943ae152c 100644 --- a/__fixtures__/workspace-external-depends-deep/pnpm-lock.yaml +++ b/__fixtures__/workspace-external-depends-deep/pnpm-lock.yaml @@ -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: {} diff --git a/__fixtures__/workspace-with-2-pkgs/pnpm-lock.yaml b/__fixtures__/workspace-with-2-pkgs/pnpm-lock.yaml index b2a3d35ebe..b82461045d 100644 --- a/__fixtures__/workspace-with-2-pkgs/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-2-pkgs/pnpm-lock.yaml @@ -24,5 +24,4 @@ packages: snapshots: - is-positive@1.0.0: - dev: false + is-positive@1.0.0: {} diff --git a/__fixtures__/workspace-with-different-deps/pnpm-lock.yaml b/__fixtures__/workspace-with-different-deps/pnpm-lock.yaml index a017016107..db2438b0d9 100644 --- a/__fixtures__/workspace-with-different-deps/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-different-deps/pnpm-lock.yaml @@ -20,5 +20,4 @@ packages: snapshots: - is-positive@3.1.0: - dev: false + is-positive@3.1.0: {} diff --git a/__fixtures__/workspace-with-lockfile-dupes/pnpm-lock.yaml b/__fixtures__/workspace-with-lockfile-dupes/pnpm-lock.yaml index 12e84eb786..66453d388b 100644 --- a/__fixtures__/workspace-with-lockfile-dupes/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-lockfile-dupes/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/workspace-with-lockfile-subdep-dupes/pnpm-lock.yaml b/__fixtures__/workspace-with-lockfile-subdep-dupes/pnpm-lock.yaml index f79f250d17..228d7e4cf3 100644 --- a/__fixtures__/workspace-with-lockfile-subdep-dupes/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-lockfile-subdep-dupes/pnpm-lock.yaml @@ -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 diff --git a/__fixtures__/workspace-with-nested-workspace-deps/pnpm-lock.yaml b/__fixtures__/workspace-with-nested-workspace-deps/pnpm-lock.yaml index 6fcae6aed4..d67291e3a3 100644 --- a/__fixtures__/workspace-with-nested-workspace-deps/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-nested-workspace-deps/pnpm-lock.yaml @@ -33,5 +33,4 @@ packages: snapshots: - is-positive@1.0.0: - dev: false + is-positive@1.0.0: {} diff --git a/__fixtures__/workspace-with-private-pkgs/pnpm-lock.yaml b/__fixtures__/workspace-with-private-pkgs/pnpm-lock.yaml index d2bd65d036..2c7df47b51 100644 --- a/__fixtures__/workspace-with-private-pkgs/pnpm-lock.yaml +++ b/__fixtures__/workspace-with-private-pkgs/pnpm-lock.yaml @@ -24,5 +24,4 @@ packages: snapshots: - is-positive@1.0.0: - dev: false + is-positive@1.0.0: {} diff --git a/lockfile/audit/package.json b/lockfile/audit/package.json index d5164026eb..b0d3c820f4 100644 --- a/lockfile/audit/package.json +++ b/lockfile/audit/package.json @@ -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" diff --git a/lockfile/audit/src/lockfileToAuditTree.ts b/lockfile/audit/src/lockfileToAuditTree.ts index ad5fd40175..81e11aaaac 100644 --- a/lockfile/audit/src/lockfileToAuditTree.ts +++ b/lockfile/audit/src/lockfileToAuditTree.ts @@ -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 { const importerWalkers = lockfileWalkerGroupImporterSteps(lockfile, Object.keys(lockfile.importers), { include: opts?.include }) const dependencies: Record = {} + 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 { +function lockfileToAuditNode (depTypes: DepTypes, step: LockfileWalkerStep): Record { const dependencies: Record = {} 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, } diff --git a/lockfile/audit/tsconfig.json b/lockfile/audit/tsconfig.json index 044657a173..213261d58e 100644 --- a/lockfile/audit/tsconfig.json +++ b/lockfile/audit/tsconfig.json @@ -33,6 +33,9 @@ { "path": "../../reviewing/list" }, + { + "path": "../detect-dep-types" + }, { "path": "../lockfile-file" }, diff --git a/lockfile/detect-dep-types/README.md b/lockfile/detect-dep-types/README.md new file mode 100644 index 0000000000..bf43af226b --- /dev/null +++ b/lockfile/detect-dep-types/README.md @@ -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) diff --git a/lockfile/detect-dep-types/package.json b/lockfile/detect-dep-types/package.json new file mode 100644 index 0000000000..7bf11e199e --- /dev/null +++ b/lockfile/detect-dep-types/package.json @@ -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" + } +} diff --git a/lockfile/detect-dep-types/src/index.ts b/lockfile/detect-dep-types/src/index.ts new file mode 100644 index 0000000000..cedae3b1b2 --- /dev/null +++ b/lockfile/detect-dep-types/src/index.ts @@ -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 + +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(), + notProdOnly: new Set(), + dev, + } + detectDepTypesInSubGraph(ctx, devDepPaths, { + dev: true, + }) + detectDepTypesInSubGraph(ctx, optionalDepPaths, { + dev: false, + }) + detectDepTypesInSubGraph(ctx, prodDepPaths, { + dev: false, + }) + return dev +} + +function detectDepTypesInSubGraph ( + ctx: { + notProdOnly: Set + packages: PackageSnapshots + walked: Set + dev: Record + }, + 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[] +} diff --git a/lockfile/detect-dep-types/tsconfig.json b/lockfile/detect-dep-types/tsconfig.json new file mode 100644 index 0000000000..cb75560c88 --- /dev/null +++ b/lockfile/detect-dep-types/tsconfig.json @@ -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 +} diff --git a/lockfile/detect-dep-types/tsconfig.lint.json b/lockfile/detect-dep-types/tsconfig.lint.json new file mode 100644 index 0000000000..1bbe711971 --- /dev/null +++ b/lockfile/detect-dep-types/tsconfig.lint.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src/**/*.ts", + "test/**/*.ts", + "../../__typings__/**/*.d.ts" + ] +} diff --git a/lockfile/filter-lockfile/src/filterLockfile.ts b/lockfile/filter-lockfile/src/filterLockfile.ts index 836adbbf94..cae9b9da63 100644 --- a/lockfile/filter-lockfile/src/filterLockfile.ts +++ b/lockfile/filter-lockfile/src/filterLockfile.ts @@ -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 } ): 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, + }) } diff --git a/lockfile/filter-lockfile/test/filterByImporters.ts b/lockfile/filter-lockfile/test/filterByImporters.ts index 7b09a25c53..0f760059a0 100644 --- a/lockfile/filter-lockfile/test/filterByImporters.ts +++ b/lockfile/filter-lockfile/test/filterByImporters.ts @@ -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': { diff --git a/lockfile/filter-lockfile/test/filterByImportersAndEngine.ts b/lockfile/filter-lockfile/test/filterByImportersAndEngine.ts index 586a9a7186..86ec229d72 100644 --- a/lockfile/filter-lockfile/test/filterByImportersAndEngine.ts +++ b/lockfile/filter-lockfile/test/filterByImportersAndEngine.ts @@ -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': { diff --git a/lockfile/lockfile-types/src/index.ts b/lockfile/lockfile-types/src/index.ts index 57ba69391c..c785d4cd31 100644 --- a/lockfile/lockfile-types/src/index.ts +++ b/lockfile/lockfile-types/src/index.ts @@ -88,13 +88,12 @@ export type LockfileResolution = Resolution | { integrity: string } -export type PackageSnapshotV7 = Pick +export type PackageSnapshotV7 = Pick export type PackageInfo = Pick export interface PackageSnapshot { id?: string - dev?: true | false optional?: true patched?: true hasBin?: true diff --git a/lockfile/lockfile-types/src/lockfileFileTypes.ts b/lockfile/lockfile-types/src/lockfileFileTypes.ts index 79bddfcd0b..37a890af5a 100644 --- a/lockfile/lockfile-types/src/lockfileFileTypes.ts +++ b/lockfile/lockfile-types/src/lockfileFileTypes.ts @@ -9,7 +9,7 @@ export type LockfileFileV7 = Omit & Partial> & { packages?: Record> - snapshots?: Record> + snapshots?: Record> } /** diff --git a/lockfile/lockfile-walker/package.json b/lockfile/lockfile-walker/package.json index 5337b81702..c289fe5511 100644 --- a/lockfile/lockfile-walker/package.json +++ b/lockfile/lockfile-walker/package.json @@ -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": { diff --git a/lockfile/prune-lockfile/src/index.ts b/lockfile/prune-lockfile/src/index.ts index 6e9f0db9bc..16a7fc9770 100644 --- a/lockfile/prune-lockfile/src/index.ts +++ b/lockfile/prune-lockfile/src/index.ts @@ -127,22 +127,18 @@ function copyPackageSnapshots ( const ctx = { copiedSnapshots, nonOptional: new Set(), - notProdOnly: new Set(), originalPackages, walked: new Set(), 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 - notProdOnly: Set originalPackages: PackageSnapshots walked: Set 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 }) } } diff --git a/lockfile/prune-lockfile/test/index.ts b/lockfile/prune-lockfile/test/index.ts index 3b24284243..d5cf978fd8 100644 --- a/lockfile/prune-lockfile/test/index.ts +++ b/lockfile/prune-lockfile/test/index.ts @@ -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=', }, diff --git a/pkg-manager/core/test/install/aliases.ts b/pkg-manager/core/test/install/aliases.ts index a0cb14b2ab..59186589a4 100644 --- a/pkg-manager/core/test/install/aliases.ts +++ b/pkg-manager/core/test/install/aliases.ts @@ -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, }, }, }) diff --git a/pkg-manager/core/test/install/fixLockfile.ts b/pkg-manager/core/test/install/fixLockfile.ts index 42c26fc4cc..4ead67ecbc 100644 --- a/pkg-manager/core/test/install/fixLockfile.ts +++ b/pkg-manager/core/test/install/fixLockfile.ts @@ -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( diff --git a/pkg-manager/core/test/install/injectLocalPackages.ts b/pkg-manager/core/test/install/injectLocalPackages.ts index a8dc53edb6..faff1c3716 100644 --- a/pkg-manager/core/test/install/injectLocalPackages.ts +++ b/pkg-manager/core/test/install/injectLocalPackages.ts @@ -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: { diff --git a/pkg-manager/core/test/install/local.ts b/pkg-manager/core/test/install/local.ts index 45cff8fdf6..1d2dd45395 100644 --- a/pkg-manager/core/test/install/local.ts +++ b/pkg-manager/core/test/install/local.ts @@ -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', }, diff --git a/pkg-manager/core/test/install/misc.ts b/pkg-manager/core/test/install/misc.ts index 844a53f3df..277eea73a6 100644 --- a/pkg-manager/core/test/install/misc.ts +++ b/pkg-manager/core/test/install/misc.ts @@ -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'), }, diff --git a/pkg-manager/core/test/install/multipleImporters.ts b/pkg-manager/core/test/install/multipleImporters.ts index e5e0c7dc53..930a9a5d14 100644 --- a/pkg-manager/core/test/install/multipleImporters.ts +++ b/pkg-manager/core/test/install/multipleImporters.ts @@ -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') diff --git a/pkg-manager/core/test/install/only.ts b/pkg-manager/core/test/install/only.ts index 646133fe25..ae82190d7c 100644 --- a/pkg-manager/core/test/install/only.ts +++ b/pkg-manager/core/test/install/only.ts @@ -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() diff --git a/pkg-manager/core/test/install/peerDependencies.ts b/pkg-manager/core/test/install/peerDependencies.ts index 968d5867db..d661f2e6e4 100644 --- a/pkg-manager/core/test/install/peerDependencies.ts +++ b/pkg-manager/core/test/install/peerDependencies.ts @@ -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', diff --git a/pkg-manager/core/test/install/updatingPkgJson.ts b/pkg-manager/core/test/install/updatingPkgJson.ts index 5d507733b5..1777e54dd0 100644 --- a/pkg-manager/core/test/install/updatingPkgJson.ts +++ b/pkg-manager/core/test/install/updatingPkgJson.ts @@ -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() diff --git a/pkg-manager/core/test/lockfile.ts b/pkg-manager/core/test/lockfile.ts index 1ac3e677aa..39a9f94b21 100644 --- a/pkg-manager/core/test/lockfile.ts +++ b/pkg-manager/core/test/lockfile.ts @@ -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': {}, }, }) }) diff --git a/pkg-manager/core/test/uninstall.ts b/pkg-manager/core/test/uninstall.ts index ed6f969e64..a6b22845ac 100644 --- a/pkg-manager/core/test/uninstall.ts +++ b/pkg-manager/core/test/uninstall.ts @@ -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': {}, }, }) }) diff --git a/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml index 75af94071b..3068cbc9a6 100644 --- a/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml @@ -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 diff --git a/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml index beff48a3ba..ba51c4d5c5 100644 --- a/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml index 53e0143147..6fc2d083a1 100644 --- a/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml index 22b9a4f797..b5cec7043b 100644 --- a/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml @@ -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 diff --git a/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml index 3cbc5fee70..eef4b56a6f 100644 --- a/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml index f7e5adfb92..0a4a3da818 100644 --- a/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml index a7ba16fa2e..cbb7f6d80f 100644 --- a/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/ignore-package-manifest/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/ignore-package-manifest/pnpm-lock.yaml index 519c773957..ba5282b22c 100644 --- a/pkg-manager/headless/test/fixtures/ignore-package-manifest/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/ignore-package-manifest/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml index 001e609986..2f3bdfae9a 100644 --- a/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml @@ -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: diff --git a/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml index 246af87402..5d8788909e 100644 --- a/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml index 75ae595999..40af24e407 100644 --- a/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml index 9f52f0573a..d0aabde163 100644 --- a/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml index 252dd47826..4f4f1d18cb 100644 --- a/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml @@ -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 diff --git a/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml index ce05a497fa..5624d7677e 100644 --- a/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml index c1ae6e7c16..4520111bfe 100644 --- a/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml index f019b1fbd4..702a03081e 100644 --- a/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml index 519c773957..ba5282b22c 100644 --- a/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml index 18eead6f8c..4519605009 100644 --- a/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml @@ -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: {} diff --git a/pkg-manager/headless/test/index.ts b/pkg-manager/headless/test/index.ts index 78952417f4..634c980983 100644 --- a/pkg-manager/headless/test/index.ts +++ b/pkg-manager/headless/test/index.ts @@ -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']) diff --git a/pkg-manager/plugin-commands-installation/test/__snapshots__/dedupe.ts.snap b/pkg-manager/plugin-commands-installation/test/__snapshots__/dedupe.ts.snap index adbc7d85f8..9967c26c03 100644 --- a/pkg-manager/plugin-commands-installation/test/__snapshots__/dedupe.ts.snap +++ b/pkg-manager/plugin-commands-installation/test/__snapshots__/dedupe.ts.snap @@ -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 {" `; diff --git a/pkg-manager/resolve-dependencies/src/updateLockfile.ts b/pkg-manager/resolve-dependencies/src/updateLockfile.ts index 2dcd94d3e0..83976240b8 100644 --- a/pkg-manager/resolve-dependencies/src/updateLockfile.ts +++ b/pkg-manager/resolve-dependencies/src/updateLockfile.ts @@ -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 } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e61dafa43..568680d762 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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 diff --git a/pnpm/test/monorepo/index.ts b/pnpm/test/monorepo/index.ts index eb147dba57..9357847cbe 100644 --- a/pnpm/test/monorepo/index.ts +++ b/pnpm/test/monorepo/index.ts @@ -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': {}, }, }) }) diff --git a/reviewing/dependencies-hierarchy/package.json b/reviewing/dependencies-hierarchy/package.json index 750d09929e..1ffe151bbb 100644 --- a/reviewing/dependencies-hierarchy/package.json +++ b/reviewing/dependencies-hierarchy/package.json @@ -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:*", diff --git a/reviewing/dependencies-hierarchy/src/buildDependenciesHierarchy.ts b/reviewing/dependencies-hierarchy/src/buildDependenciesHierarchy.ts index c30ba2af79..5a7344e524 100644 --- a/reviewing/dependencies-hierarchy/src/buildDependenciesHierarchy.ts +++ b/reviewing/dependencies-hierarchy/src/buildDependenciesHierarchy.ts @@ -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, diff --git a/reviewing/dependencies-hierarchy/src/getPkgInfo.ts b/reviewing/dependencies-hierarchy/src/getPkgInfo.ts index b7ede3282f..3e140ed48b 100644 --- a/reviewing/dependencies-hierarchy/src/getPkgInfo.ts +++ b/reviewing/dependencies-hierarchy/src/getPkgInfo.ts @@ -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 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 } diff --git a/reviewing/dependencies-hierarchy/src/getTree.ts b/reviewing/dependencies-hierarchy/src/getTree.ts index a6190e5478..b59105b8f8 100644 --- a/reviewing/dependencies-hierarchy/src/getTree.ts +++ b/reviewing/dependencies-hierarchy/src/getTree.ts @@ -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 registries: Registries importers: Record + 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, diff --git a/reviewing/dependencies-hierarchy/test/getTree.test.ts b/reviewing/dependencies-hierarchy/test/getTree.test.ts index ef645d07ab..c7e7cf806b 100644 --- a/reviewing/dependencies-hierarchy/test/getTree.test.ts +++ b/reviewing/dependencies-hierarchy/test/getTree.test.ts @@ -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(), 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(), registries: { default: 'mock-registry-for-testing.example', diff --git a/reviewing/dependencies-hierarchy/tsconfig.json b/reviewing/dependencies-hierarchy/tsconfig.json index d75e60871a..5714f64920 100644 --- a/reviewing/dependencies-hierarchy/tsconfig.json +++ b/reviewing/dependencies-hierarchy/tsconfig.json @@ -21,6 +21,9 @@ { "path": "../../fs/read-modules-dir" }, + { + "path": "../../lockfile/detect-dep-types" + }, { "path": "../../lockfile/lockfile-file" }, diff --git a/reviewing/license-scanner/package.json b/reviewing/license-scanner/package.json index 5267e9600a..5aa27e2503 100644 --- a/reviewing/license-scanner/package.json +++ b/reviewing/license-scanner/package.json @@ -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:*", diff --git a/reviewing/license-scanner/src/licenses.ts b/reviewing/license-scanner/src/licenses.ts index 48b51495ae..28acd60266 100644 --- a/reviewing/license-scanner/src/licenses.ts +++ b/reviewing/license-scanner/src/licenses.ts @@ -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 diff --git a/reviewing/license-scanner/src/lockfileToLicenseNodeTree.ts b/reviewing/license-scanner/src/lockfileToLicenseNodeTree.ts index c573abeee7..895e51106b 100644 --- a/reviewing/license-scanner/src/lockfileToLicenseNodeTree.ts +++ b/reviewing/license-scanner/src/lockfileToLicenseNodeTree.ts @@ -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, diff --git a/reviewing/license-scanner/tsconfig.json b/reviewing/license-scanner/tsconfig.json index 45c267a985..ac9d77aaf8 100644 --- a/reviewing/license-scanner/tsconfig.json +++ b/reviewing/license-scanner/tsconfig.json @@ -15,6 +15,9 @@ { "path": "../../fetching/directory-fetcher" }, + { + "path": "../../lockfile/detect-dep-types" + }, { "path": "../../lockfile/lockfile-file" }, diff --git a/reviewing/outdated/test/outdated.spec.ts b/reviewing/outdated/test/outdated.spec.ts index 0ca0dbed48..f65061fa85 100644 --- a/reviewing/outdated/test/outdated.spec.ts +++ b/reviewing/outdated/test/outdated.spec.ts @@ -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', }, diff --git a/store/plugin-commands-store/test/storePrune.ts b/store/plugin-commands-store/test/storePrune.ts index d9bc1475cb..24ef5e852f 100644 --- a/store/plugin-commands-store/test/storePrune.ts +++ b/store/plugin-commands-store/test/storePrune.ts @@ -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(),