diff --git a/fixtures/circular/pnpm-lock.yaml b/fixtures/circular/pnpm-lock.yaml index 142055ac505..4b974c238e1 100644 --- a/fixtures/circular/pnpm-lock.yaml +++ b/fixtures/circular/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: es6-iterator: ^2.0.1 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 54a9dfc32e3..0df1ef17148 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 @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: ^2.1.0 @@ -31,8 +31,9 @@ packages: dev: false /is-negative/2.1.0: - resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=} + resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false optional: true diff --git a/fixtures/fixture-with-no-pkg-version/pnpm-lock.yaml b/fixtures/fixture-with-no-pkg-version/pnpm-lock.yaml index 54a9dfc32e3..0df1ef17148 100644 --- a/fixtures/fixture-with-no-pkg-version/pnpm-lock.yaml +++ b/fixtures/fixture-with-no-pkg-version/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: ^2.1.0 @@ -31,8 +31,9 @@ packages: dev: false /is-negative/2.1.0: - resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=} + resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false optional: true diff --git a/fixtures/fixture/pnpm-lock.yaml b/fixtures/fixture/pnpm-lock.yaml index 54a9dfc32e3..0df1ef17148 100644 --- a/fixtures/fixture/pnpm-lock.yaml +++ b/fixtures/fixture/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: ^2.1.0 @@ -31,8 +31,9 @@ packages: dev: false /is-negative/2.1.0: - resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=} + resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false optional: true diff --git a/fixtures/general/pnpm-lock.yaml b/fixtures/general/pnpm-lock.yaml index 0c91e6d6d32..25a4060b654 100644 --- a/fixtures/general/pnpm-lock.yaml +++ b/fixtures/general/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: 1.0.0 @@ -55,8 +55,9 @@ packages: dev: false /is-negative/1.0.0: - resolution: {integrity: sha1-clmHeoPIAKwxkd17nZ+80PdS1P4=} + resolution: {integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false optional: true 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 d2f2ecc08a4..db21a9ced16 100644 --- a/fixtures/has-2-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/fixtures/has-2-outdated-deps/node_modules/.pnpm/lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: ^1.0.0 diff --git a/fixtures/has-2-outdated-deps/pnpm-lock.yaml b/fixtures/has-2-outdated-deps/pnpm-lock.yaml index d2f2ecc08a4..db21a9ced16 100644 --- a/fixtures/has-2-outdated-deps/pnpm-lock.yaml +++ b/fixtures/has-2-outdated-deps/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: is-negative: ^1.0.0 diff --git a/fixtures/has-npm-shrinkwrap-json/npm-shrinkwrap.json b/fixtures/has-npm-shrinkwrap-json/npm-shrinkwrap.json index 58537de35c5..c9fb40c95b2 100644 --- a/fixtures/has-npm-shrinkwrap-json/npm-shrinkwrap.json +++ b/fixtures/has-npm-shrinkwrap-json/npm-shrinkwrap.json @@ -3,13 +3,13 @@ "version": "0.0.0", "lockfileVersion": 1, "dependencies": { - "dep-of-pkg-with-1-dep": { + "@pnpm.e2e/dep-of-pkg-with-1-dep": { "version": "101.0.0" }, - "pkg-with-1-dep": { + "@pnpm.e2e/pkg-with-1-dep": { "version": "100.0.0", "dependencies": { - "dep-of-pkg-with-1-dep": { + "@pnpm.e2e/dep-of-pkg-with-1-dep": { "version": "100.0.0" } } diff --git a/fixtures/has-npm-shrinkwrap-json/package.json b/fixtures/has-npm-shrinkwrap-json/package.json index ff740bbde85..a9bcfb28f16 100644 --- a/fixtures/has-npm-shrinkwrap-json/package.json +++ b/fixtures/has-npm-shrinkwrap-json/package.json @@ -2,7 +2,7 @@ "name": "has-npm-shrinkwrap-json", "version": "0.0.0", "dependencies": { - "dep-of-pkg-with-1-dep": "^101.0.0", - "pkg-with-1-dep": "*" + "@pnpm.e2e/dep-of-pkg-with-1-dep": "^101.0.0", + "@pnpm.e2e/pkg-with-1-dep": "*" } } diff --git a/fixtures/has-outdated-deps/node_modules/.pnpm/lock.yaml b/fixtures/has-outdated-deps/node_modules/.pnpm/lock.yaml index abd7a2fa0fe..357dbf58866 100644 --- a/fixtures/has-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/fixtures/has-outdated-deps/node_modules/.pnpm/lock.yaml @@ -1,23 +1,31 @@ +lockfileVersion: 5.4 + +specifiers: + '@pnpm.e2e/deprecated': 1.0.0 + is-negative: ^1.0.0 + is-positive: ^1.0.0 + dependencies: - deprecated: 1.0.0 + '@pnpm.e2e/deprecated': 1.0.0 is-negative: 1.0.0 + devDependencies: is-positive: 1.0.0 -lockfileVersion: 5 + packages: - /deprecated/1.0.0: - deprecated: This package is deprecated + + /@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 - resolution: - integrity: sha512-IXOehroEnYcbv/C4Kam/SWp7doHhGuRU5PHwxkOsjPjMy+lZSICgMasAK74AkrulthvBxVvZqdDvjK63RfOY+w== + /is-negative/1.0.0: - resolution: - integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc= + resolution: {integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc=} + engines: {node: '>=0.10.0'} + dev: false + /is-positive/1.0.0: - dev: true - resolution: - integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss= -specifiers: - deprecated: 1.0.0 - is-negative: ^1.0.0 - is-positive: ^1.0.0 + resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=} + engines: {node: '>=0.10.0'} + dev: true + diff --git a/fixtures/has-outdated-deps/package.json b/fixtures/has-outdated-deps/package.json index 721ab212c9e..11b1a6317b5 100644 --- a/fixtures/has-outdated-deps/package.json +++ b/fixtures/has-outdated-deps/package.json @@ -2,7 +2,7 @@ "name": "wanted-shrinkwrap", "version": "1.0.0", "dependencies": { - "deprecated": "1.0.0", + "@pnpm.e2e/deprecated": "1.0.0", "is-negative": "^2.1.0" }, "devDependencies": { diff --git a/fixtures/has-outdated-deps/pnpm-lock.yaml b/fixtures/has-outdated-deps/pnpm-lock.yaml index 2ec178479c9..2b7ac5ada9e 100644 --- a/fixtures/has-outdated-deps/pnpm-lock.yaml +++ b/fixtures/has-outdated-deps/pnpm-lock.yaml @@ -1,23 +1,31 @@ +lockfileVersion: 5.4 + +specifiers: + '@pnpm.e2e/deprecated': 1.0.0 + is-negative: ^2.1.0 + is-positive: ^3.1.0 + dependencies: - deprecated: 1.0.0 - is-negative: 1.1.0 + '@pnpm.e2e/deprecated': 1.0.0 + is-negative: 2.1.0 + devDependencies: is-positive: 3.1.0 -lockfileVersion: 5 + packages: - /deprecated/1.0.0: - deprecated: This package is deprecated + + /@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: + resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==} + engines: {node: '>=0.10.0'} dev: false - resolution: - integrity: sha512-IXOehroEnYcbv/C4Kam/SWp7doHhGuRU5PHwxkOsjPjMy+lZSICgMasAK74AkrulthvBxVvZqdDvjK63RfOY+w== - /is-negative/1.1.0: - resolution: - integrity: sha1-8Nhjd6oVpkw0lh84rCqb4rQKEYc= + /is-positive/3.1.0: + resolution: {integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0=} + engines: {node: '>=0.10.0'} dev: true - resolution: - integrity: sha1-hX21hKG6XRyymAUn/DtsQ103sP0= -specifiers: - deprecated: 1.0.0 - is-negative: ^1.1.0 - is-positive: ^3.1.0 + diff --git a/fixtures/has-package-lock-json/package-lock.json b/fixtures/has-package-lock-json/package-lock.json index 8976e5ecaad..7f3e3591109 100644 --- a/fixtures/has-package-lock-json/package-lock.json +++ b/fixtures/has-package-lock-json/package-lock.json @@ -3,13 +3,13 @@ "version": "0.0.0", "lockfileVersion": 1, "dependencies": { - "dep-of-pkg-with-1-dep": { + "@pnpm.e2e/dep-of-pkg-with-1-dep": { "version": "101.0.0" }, - "pkg-with-1-dep": { + "@pnpm.e2e/pkg-with-1-dep": { "version": "100.0.0", "dependencies": { - "dep-of-pkg-with-1-dep": { + "@pnpm.e2e/dep-of-pkg-with-1-dep": { "version": "100.0.0" } } diff --git a/fixtures/has-package-lock-json/package.json b/fixtures/has-package-lock-json/package.json index 328e8926466..a0957ae18aa 100644 --- a/fixtures/has-package-lock-json/package.json +++ b/fixtures/has-package-lock-json/package.json @@ -2,8 +2,8 @@ "name": "has-package-lock-json", "version": "0.0.0", "dependencies": { - "dep-of-pkg-with-1-dep": "^101.0.0", - "pkg-with-1-dep": "*" + "@pnpm.e2e/dep-of-pkg-with-1-dep": "^101.0.0", + "@pnpm.e2e/pkg-with-1-dep": "*" }, "scripts": { "prepare": "exit 1" diff --git a/fixtures/has-yarn-lock/.npmrc b/fixtures/has-yarn-lock/.npmrc new file mode 100644 index 00000000000..5c919f06674 --- /dev/null +++ b/fixtures/has-yarn-lock/.npmrc @@ -0,0 +1 @@ +registry=http://localhost:4873/ diff --git a/fixtures/has-yarn-lock/package.json b/fixtures/has-yarn-lock/package.json index bc75e952aba..0e370a1d6fe 100644 --- a/fixtures/has-yarn-lock/package.json +++ b/fixtures/has-yarn-lock/package.json @@ -2,7 +2,7 @@ "name": "has-yarn-lock", "version": "0.0.0", "dependencies": { - "dep-of-pkg-with-1-dep": "^101.0.0", - "pkg-with-1-dep": "*" + "@pnpm.e2e/dep-of-pkg-with-1-dep": "^100.0.0", + "@pnpm.e2e/pkg-with-1-dep": "*" } } diff --git a/fixtures/has-yarn-lock/yarn.lock b/fixtures/has-yarn-lock/yarn.lock index c36d617d270..b0ec62c6a64 100644 --- a/fixtures/has-yarn-lock/yarn.lock +++ b/fixtures/has-yarn-lock/yarn.lock @@ -2,14 +2,14 @@ # yarn lockfile v1 -dep-of-pkg-with-1-dep@^1.0.0, dep-of-pkg-with-1-dep@^101.0.0: - version "1.1.0" - resolved "https://registry.nlark.com/dep-of-pkg-with-1-dep/download/dep-of-pkg-with-1-dep-1.1.0.tgz#67d3ac196cb08162e543b87b3b1829c76072c927" - integrity sha1-Z9OsGWywgWLlQ7h7Oxgpx2ByySc= +"@pnpm.e2e/dep-of-pkg-with-1-dep@^100.0.0": + version "100.0.0" + resolved "http://localhost:4873/@pnpm.e2e%2fdep-of-pkg-with-1-dep/-/dep-of-pkg-with-1-dep-100.0.0.tgz#a95f834b4a4d9661623a0cf2bd76acbc213192fc" + integrity sha512-KUmwlEiE3pzpmPCfrLkoOO7fmL4Tft+dcm6YQlUfOUJvHO73xlcKVoA/xOHP/ayUO8GiPlIqWRbKHrsxvXGE8g== -pkg-with-1-dep@*: - version "1.0.0" - resolved "https://registry.nlark.com/pkg-with-1-dep/download/pkg-with-1-dep-1.0.0.tgz#0d4ed129376f707bac0bf5f6a58410f663e27c80" - integrity sha1-DU7RKTdvcHusC/X2pYQQ9mPifIA= +"@pnpm.e2e/pkg-with-1-dep@*": + version "100.0.0" + resolved "http://localhost:4873/@pnpm.e2e%2fpkg-with-1-dep/-/pkg-with-1-dep-100.0.0.tgz#2845d276feb3153c4abc107728ddbe0f7ce75a45" + integrity sha512-tZBohBD7WeOtm0hBUQl0FlPvuTwyrdSn2V45P4jd2arjwKxM5YULEAtD1J42bKuEOJls4vS4/1v3lgS8qTfA2Q== dependencies: - dep-of-pkg-with-1-dep "^1.0.0" + "@pnpm.e2e/dep-of-pkg-with-1-dep" "^100.0.0" diff --git a/fixtures/hello-world-js-bin/package.json b/fixtures/hello-world-js-bin/package.json index e6a7a7ec4ca..537c78e3916 100644 --- a/fixtures/hello-world-js-bin/package.json +++ b/fixtures/hello-world-js-bin/package.json @@ -1,5 +1,5 @@ { - "name": "hello-world-js-bin", + "name": "@pnpm.e2e/hello-world-js-bin", "version": "1.0.0", "description": "A package with a hello world js bin", "bin": "./index.js", diff --git a/fixtures/with-aliased-dep/pnpm-lock.yaml b/fixtures/with-aliased-dep/pnpm-lock.yaml index fcfde64bce4..3078e8b381c 100644 --- a/fixtures/with-aliased-dep/pnpm-lock.yaml +++ b/fixtures/with-aliased-dep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: positive: npm:is-positive@1.0.0 @@ -9,6 +9,6 @@ dependencies: packages: /is-positive/1.0.0: - resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=} + resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==} engines: {node: '>=0.10.0'} dev: false diff --git a/fixtures/with-file-dep/pnpm-lock.yaml b/fixtures/with-file-dep/pnpm-lock.yaml index 97b354ee1af..e36284a6d06 100644 --- a/fixtures/with-file-dep/pnpm-lock.yaml +++ b/fixtures/with-file-dep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: general: link:../general diff --git a/fixtures/with-peer/pnpm-lock.yaml b/fixtures/with-peer/pnpm-lock.yaml index a1c71f66f7a..f04c9ace38b 100644 --- a/fixtures/with-peer/pnpm-lock.yaml +++ b/fixtures/with-peer/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: ajv: ^6.10.2 diff --git a/fixtures/with-unsaved-deps/pnpm-lock.yaml b/fixtures/with-unsaved-deps/pnpm-lock.yaml index 8a067eb6128..9992cc7366b 100644 --- a/fixtures/with-unsaved-deps/pnpm-lock.yaml +++ b/fixtures/with-unsaved-deps/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: symlink-dir: 2.0.2 diff --git a/package.json b/package.json index c9d4a53fb74..3d38373b7ba 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@commitlint/prompt-cli": "^17.0.3", "@pnpm/eslint-config": "workspace:*", "@pnpm/meta-updater": "0.0.6", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/tsconfig": "workspace:*", "@types/jest": "^28.1.6", "@types/node": "^14.18.23", diff --git a/packages/core/package.json b/packages/core/package.json index 85b18d06e30..5b326d5c5bf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -77,7 +77,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/package-store": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/store-path": "workspace:*", "@pnpm/test-fixtures": "workspace:*", "@types/fs-extra": "^9.0.13", diff --git a/packages/core/test/brokenLockfileIntegrity.ts b/packages/core/test/brokenLockfileIntegrity.ts index 4938f6e56ee..6b9f820dc6f 100644 --- a/packages/core/test/brokenLockfileIntegrity.ts +++ b/packages/core/test/brokenLockfileIntegrity.ts @@ -11,12 +11,12 @@ import writeYamlFile from 'write-yaml-file' import { testDefaults } from './utils' test('installation breaks if the lockfile contains the wrong checksum', async () => { - await addDistTag({ package: 'dep-of-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 project = prepareEmpty() const manifest = await addDependenciesToPackage({}, [ - 'pkg-with-1-dep@100.0.0', + '@pnpm.e2e/pkg-with-1-dep@100.0.0', ], await testDefaults({ lockfileOnly: true }) ) @@ -24,7 +24,7 @@ test('installation breaks if the lockfile contains the wrong checksum', async () const corruptedLockfile = await project.readLockfile() const correctLockfile = clone(corruptedLockfile) // breaking the lockfile - corruptedLockfile.packages['/pkg-with-1-dep/100.0.0'].resolution['integrity'] = corruptedLockfile.packages['/dep-of-pkg-with-1-dep/100.0.0'].resolution['integrity'] + corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution['integrity'] = corruptedLockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].resolution['integrity'] await writeYamlFile(WANTED_LOCKFILE, corruptedLockfile, { lineWidth: 1000 }) await expect(mutateModules([ @@ -65,20 +65,20 @@ test('installation breaks if the lockfile contains the wrong checksum', async () }) test('installation breaks if the lockfile contains the wrong checksum and the store is clean', async () => { - await addDistTag({ package: 'dep-of-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 project = prepareEmpty() const manifest = await addDependenciesToPackage({}, [ - 'pkg-with-1-dep@100.0.0', + '@pnpm.e2e/pkg-with-1-dep@100.0.0', ], await testDefaults({ lockfileOnly: true }) ) const corruptedLockfile = await project.readLockfile() - const correctIntegrity = corruptedLockfile.packages['/pkg-with-1-dep/100.0.0'].resolution['integrity'] + const correctIntegrity = corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution['integrity'] // breaking the lockfile - corruptedLockfile.packages['/pkg-with-1-dep/100.0.0'].resolution['integrity'] = 'sha512-pl8WtlGAnoIQ7gPxT187/YwhKRnsFBR4h0YY+v0FPQjT5WPuZbI9dPRaKWgKBFOqWHylJ8EyPy34V5u9YArfng==' + corruptedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution['integrity'] = 'sha512-pl8WtlGAnoIQ7gPxT187/YwhKRnsFBR4h0YY+v0FPQjT5WPuZbI9dPRaKWgKBFOqWHylJ8EyPy34V5u9YArfng==' await writeYamlFile(WANTED_LOCKFILE, corruptedLockfile, { lineWidth: 1000 }) await expect( @@ -104,7 +104,7 @@ test('installation breaks if the lockfile contains the wrong checksum and the st { const lockfile = await project.readLockfile() - expect(lockfile.packages['/pkg-with-1-dep/100.0.0'].resolution['integrity']).toBe(correctIntegrity) + expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution['integrity']).toBe(correctIntegrity) } // Breaking the lockfile again @@ -130,6 +130,6 @@ test('installation breaks if the lockfile contains the wrong checksum and the st })) { const lockfile = await project.readLockfile() - expect(lockfile.packages['/pkg-with-1-dep/100.0.0'].resolution['integrity']).toBe(correctIntegrity) + expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution['integrity']).toBe(correctIntegrity) } }) diff --git a/packages/core/test/cache.ts b/packages/core/test/cache.ts index 8abf82fddab..d02f610b662 100644 --- a/packages/core/test/cache.ts +++ b/packages/core/test/cache.ts @@ -8,31 +8,31 @@ test('should fail to update when requests are cached', async () => { const opts = await testDefaults() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], opts) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install(manifest, { ...opts, depth: 1, update: true }) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('should not cache when cache is not used', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults({ save: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ save: true })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install(manifest, await testDefaults({ depth: 1, update: true })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') }) diff --git a/packages/core/test/getPeerDependencyIssues.test.ts b/packages/core/test/getPeerDependencyIssues.test.ts index cd18d56b951..ea1bd055eb4 100644 --- a/packages/core/test/getPeerDependencyIssues.test.ts +++ b/packages/core/test/getPeerDependencyIssues.test.ts @@ -26,8 +26,8 @@ test('a conflict is detected when the same peer is required with ranges that do { manifest: { dependencies: { - 'has-foo100-peer': '1.0.0', - 'has-foo101-peer': '1.0.0', + '@pnpm.e2e/has-foo100-peer': '1.0.0', + '@pnpm.e2e/has-foo101-peer': '1.0.0', }, }, rootDir: process.cwd(), diff --git a/packages/core/test/hoistedNodeLinker/install.ts b/packages/core/test/hoistedNodeLinker/install.ts index f376c5a20dc..3c23c81f502 100644 --- a/packages/core/test/hoistedNodeLinker/install.ts +++ b/packages/core/test/hoistedNodeLinker/install.ts @@ -83,23 +83,23 @@ test('overwriting existing files in node_modules', async () => { test('preserve subdeps on update', async () => { prepareEmpty() - await addDistTag({ package: 'foobarqar', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.0', distTag: 'latest' }) const manifest = await addDependenciesToPackage( {}, - ['foobarqar@1.0.0', 'bar@100.1.0'], + ['@pnpm.e2e/foobarqar@1.0.0', '@pnpm.e2e/bar@100.1.0'], await testDefaults({ nodeLinker: 'hoisted' }) ) await addDependenciesToPackage( manifest, - ['foobarqar@1.0.1'], + ['@pnpm.e2e/foobarqar@1.0.1'], await testDefaults({ nodeLinker: 'hoisted' }) ) - expect(loadJsonFile<{ version: string }>('node_modules/bar/package.json').version).toBe('100.1.0') - expect(loadJsonFile<{ version: string }>('node_modules/foobarqar/package.json').version).toBe('1.0.1') - expect(loadJsonFile<{ version: string }>('node_modules/foobarqar/node_modules/bar/package.json').version).toBe('100.0.0') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/bar/package.json').version).toBe('100.1.0') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/foobarqar/package.json').version).toBe('1.0.1') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/foobarqar/node_modules/@pnpm.e2e/bar/package.json').version).toBe('100.0.0') }) test('adding a new dependency to one of the workspace projects', async () => { @@ -113,7 +113,7 @@ test('adding a new dependency to one of the workspace projects', async () => { version: '1.0.0', dependencies: { - bar: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', }, }, mutation: 'install', @@ -126,7 +126,7 @@ test('adding a new dependency to one of the workspace projects', async () => { version: '1.0.0', dependencies: { - foobarqar: '1.0.0', + '@pnpm.e2e/foobarqar': '1.0.0', }, }, mutation: 'install', @@ -139,41 +139,41 @@ test('adding a new dependency to one of the workspace projects', async () => { await testDefaults({ nodeLinker: 'hoisted', prefix: path.resolve('project-1'), targetDependenciesField: 'devDependencies' }) ) - expect(manifest.dependencies).toStrictEqual({ bar: '100.0.0' }) + expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/bar': '100.0.0' }) expect(manifest.devDependencies).toStrictEqual({ 'is-negative': '1.0.0' }) - expect(loadJsonFile<{ version: string }>('node_modules/bar/package.json').version).toBe('100.0.0') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/bar/package.json').version).toBe('100.0.0') expect(loadJsonFile<{ version: string }>('node_modules/is-negative/package.json').version).toBe('1.0.0') }) test('installing the same package with alias and no alias', async () => { - await addDistTag({ package: 'dep-of-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' }) prepareEmpty() await addDependenciesToPackage( {}, - ['pkg-with-1-aliased-dep@100.0.0', 'dep-of-pkg-with-1-dep@^100.0.0'], + ['@pnpm.e2e/pkg-with-1-aliased-dep@100.0.0', '@pnpm.e2e/dep-of-pkg-with-1-dep@^100.0.0'], await testDefaults({ nodeLinker: 'hoisted' }) ) - expect(loadJsonFile<{ version: string }>('node_modules/pkg-with-1-aliased-dep/package.json').version).toBe('100.0.0') - expect(loadJsonFile<{ version: string }>('node_modules/dep-of-pkg-with-1-dep/package.json').version).toBe('100.0.0') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/pkg-with-1-aliased-dep/package.json').version).toBe('100.0.0') + expect(loadJsonFile<{ version: string }>('node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep/package.json').version).toBe('100.0.0') expect(loadJsonFile<{ version: string }>('node_modules/dep/package.json').version).toBe('100.0.0') }) test('run pre/postinstall scripts. bin files should be linked in a hoisted node_modules', async () => { const project = prepareEmpty() await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example'], await testDefaults({ fastUnpack: false, nodeLinker: 'hoisted', targetDependenciesField: 'devDependencies' }) ) - expect(fs.existsSync('node_modules/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() - expect(fs.existsSync('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') }) @@ -189,7 +189,7 @@ test('running install scripts in a workspace that has no root project', async () version: '1.0.0', dependencies: { - 'pre-and-postinstall-scripts-example': '1.0.0', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0', }, }, mutation: 'install', @@ -197,7 +197,7 @@ test('running install scripts in a workspace that has no root project', async () }, ], await testDefaults({ fastUnpack: false, nodeLinker: 'hoisted' })) - expect(fs.existsSync('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() + expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() }) test('hoistingLimits should prevent packages to be hoisted', async () => { diff --git a/packages/core/test/install/aliases.ts b/packages/core/test/install/aliases.ts index 0d30a44fbe4..ae2571c7261 100644 --- a/packages/core/test/install/aliases.ts +++ b/packages/core/test/install/aliases.ts @@ -50,47 +50,47 @@ test('aliased dependency w/o version spec, with custom tag config', async () => const tag = 'beta' - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: tag }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: tag }) - await addDependenciesToPackage({}, ['foo@npm:dep-of-pkg-with-1-dep'], await testDefaults({ tag })) + await addDependenciesToPackage({}, ['foo@npm:@pnpm.e2e/dep-of-pkg-with-1-dep'], await testDefaults({ tag })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('a dependency has an aliased subdependency', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-1-aliased-dep'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-aliased-dep'], await testDefaults({ fastUnpack: false })) - expect(project.requireModule('pkg-with-1-aliased-dep')().name).toEqual('dep-of-pkg-with-1-dep') + expect(project.requireModule('@pnpm.e2e/pkg-with-1-aliased-dep')().name).toEqual('@pnpm.e2e/dep-of-pkg-with-1-dep') expect(await project.readLockfile()).toStrictEqual({ dependencies: { - 'pkg-with-1-aliased-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-aliased-dep': '100.0.0', }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/dep-of-pkg-with-1-dep/100.1.0': { + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0': { dev: false, resolution: { - integrity: getIntegrity('dep-of-pkg-with-1-dep', '100.1.0'), + integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'), }, }, - '/pkg-with-1-aliased-dep/100.0.0': { + '/@pnpm.e2e/pkg-with-1-aliased-dep/100.0.0': { dependencies: { - dep: '/dep-of-pkg-with-1-dep/100.1.0', + dep: '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0', }, dev: false, resolution: { - integrity: getIntegrity('pkg-with-1-aliased-dep', '100.0.0'), + integrity: getIntegrity('@pnpm.e2e/pkg-with-1-aliased-dep', '100.0.0'), }, }, }, specifiers: { - 'pkg-with-1-aliased-dep': '^100.0.0', + '@pnpm.e2e/pkg-with-1-aliased-dep': '^100.0.0', }, }) }) diff --git a/packages/core/test/install/auth.ts b/packages/core/test/install/auth.ts index 4db6745aced..45f1e300545 100644 --- a/packages/core/test/install/auth.ts +++ b/packages/core/test/install/auth.ts @@ -20,13 +20,13 @@ test('a package that need authentication', async () => { [`//localhost:${REGISTRY_MOCK_PORT}/:_authToken`]: data.token, registry: `http://localhost:${REGISTRY_MOCK_PORT}/`, } - const manifest = await addDependenciesToPackage({}, ['needs-auth'], await testDefaults({}, { + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/needs-auth'], await testDefaults({}, { authConfig, }, { authConfig, })) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') // should work when a lockfile is available // and the registry in .npmrc is not the same as the one in lockfile @@ -37,14 +37,14 @@ test('a package that need authentication', async () => { [`//localhost:${REGISTRY_MOCK_PORT}/:_authToken`]: data.token, registry: 'https://registry.npmjs.org/', } - await addDependenciesToPackage(manifest, ['needs-auth'], await testDefaults({}, { + await addDependenciesToPackage(manifest, ['@pnpm.e2e/needs-auth'], await testDefaults({}, { authConfig, registry: 'https://registry.npmjs.org/', }, { authConfig, })) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') }) test('installing a package that need authentication, using password', async () => { @@ -62,13 +62,13 @@ test('installing a package that need authentication, using password', async () = [`//localhost:${REGISTRY_MOCK_PORT}/:username`]: 'foo', registry: `http://localhost:${REGISTRY_MOCK_PORT}/`, } - await addDependenciesToPackage({}, ['needs-auth'], await testDefaults({}, { + await addDependenciesToPackage({}, ['@pnpm.e2e/needs-auth'], await testDefaults({}, { authConfig, }, { authConfig, })) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') }) test('a package that need authentication, legacy way', async () => { @@ -85,13 +85,13 @@ test('a package that need authentication, legacy way', async () => { 'always-auth': true, registry: `http://localhost:${REGISTRY_MOCK_PORT}`, } - await addDependenciesToPackage({}, ['needs-auth'], await testDefaults({}, { + await addDependenciesToPackage({}, ['@pnpm.e2e/needs-auth'], await testDefaults({}, { authConfig, }, { authConfig, })) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') }) test('a scoped package that need authentication specific to scope', async () => { @@ -189,7 +189,7 @@ skipOnNode17('a package that need authentication reuses authorization tokens for [`//127.0.0.1:${REGISTRY_MOCK_PORT}/:always-auth`]: true, registry: `http://127.0.0.1:${REGISTRY_MOCK_PORT}`, } - await addDependenciesToPackage({}, ['needs-auth'], await testDefaults({ + await addDependenciesToPackage({}, ['@pnpm.e2e/needs-auth'], await testDefaults({ registries: { default: `http://127.0.0.1:${REGISTRY_MOCK_PORT}`, }, @@ -200,7 +200,7 @@ skipOnNode17('a package that need authentication reuses authorization tokens for authConfig, })) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') }) skipOnNode17('a package that need authentication reuses authorization tokens for tarball fetching when meta info is cached', async () => { @@ -228,7 +228,7 @@ skipOnNode17('a package that need authentication reuses authorization tokens for authConfig, }) - const manifest = await addDependenciesToPackage({}, ['needs-auth'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/needs-auth'], opts) await rimraf('node_modules') await rimraf(path.join('..', '.registry')) @@ -247,5 +247,5 @@ skipOnNode17('a package that need authentication reuses authorization tokens for }) await install(manifest, opts) - await project.has('needs-auth') + await project.has('@pnpm.e2e/needs-auth') }) diff --git a/packages/core/test/install/autoInstallPeers.ts b/packages/core/test/install/autoInstallPeers.ts index 3e5a455102f..a63e16f815b 100644 --- a/packages/core/test/install/autoInstallPeers.ts +++ b/packages/core/test/install/autoInstallPeers.ts @@ -2,39 +2,40 @@ import { addDependenciesToPackage, install, mutateModules } from '@pnpm/core' import { prepareEmpty, preparePackages } from '@pnpm/prepare' import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import rimraf from '@zkochan/rimraf' +import { createPeersFolderSuffix } from 'dependency-path' import { testDefaults } from '../utils' test('auto install non-optional peer dependencies', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) const project = prepareEmpty() - await addDependenciesToPackage({}, ['abc-optional-peers@1.0.0'], await testDefaults({ autoInstallPeers: true })) + await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers@1.0.0'], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/abc-optional-peers/1.0.0_peer-a@1.0.0', - '/peer-a/1.0.0', + '/@pnpm.e2e/abc-optional-peers/1.0.0_@pnpm.e2e+peer-a@1.0.0', + '/@pnpm.e2e/peer-a/1.0.0', ]) - await project.hasNot('peer-a') + await project.hasNot('@pnpm.e2e/peer-a') }) test('auto install the common peer dependency', async () => { - await addDistTag({ package: 'peer-c', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.1', distTag: 'latest' }) const project = prepareEmpty() - await addDependenciesToPackage({}, ['wants-peer-c-1', 'wants-peer-c-1.0.0'], await testDefaults({ autoInstallPeers: true })) + await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-1.0.0'], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/peer-c/1.0.0', - '/wants-peer-c-1.0.0/1.0.0_peer-c@1.0.0', - '/wants-peer-c-1/1.0.0_peer-c@1.0.0', + '/@pnpm.e2e/peer-c/1.0.0', + '/@pnpm.e2e/wants-peer-c-1.0.0/1.0.0_@pnpm.e2e+peer-c@1.0.0', + '/@pnpm.e2e/wants-peer-c-1/1.0.0_@pnpm.e2e+peer-c@1.0.0', ]) }) test('do not auto install when there is no common peer dependency range intersection', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['wants-peer-c-1', 'wants-peer-c-2'], await testDefaults({ autoInstallPeers: true })) + await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-2'], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/wants-peer-c-1/1.0.0', - '/wants-peer-c-2/1.0.0', + '/@pnpm.e2e/wants-peer-c-1/1.0.0', + '/@pnpm.e2e/wants-peer-c-2/1.0.0', ]) }) @@ -60,22 +61,23 @@ test('don\'t fail on linked package, when peers are auto installed', async () => }, ]) process.chdir('pkg') - const updatedManifest = await addDependenciesToPackage(pkgManifest, ['peer-b'], await testDefaults({ autoInstallPeers: true })) - expect(Object.keys(updatedManifest.dependencies ?? {})).toStrictEqual(['linked', 'peer-b']) + const updatedManifest = await addDependenciesToPackage(pkgManifest, ['@pnpm.e2e/peer-b'], await testDefaults({ autoInstallPeers: true })) + expect(Object.keys(updatedManifest.dependencies ?? {})).toStrictEqual(['linked', '@pnpm.e2e/peer-b']) }) test('hoist a peer dependency in order to reuse it by other dependencies, when it satisfies them', async () => { const project = prepareEmpty() await addDependenciesToPackage({}, ['@pnpm/xyz-parent-parent-parent-parent', '@pnpm/xyz-parent-parent-with-xyz'], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() + const suffix = createPeersFolderSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }]) expect(Object.keys(lockfile.packages)).toStrictEqual([ '/@pnpm/x/1.0.0', - '/@pnpm/xyz-parent-parent-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi', - '/@pnpm/xyz-parent-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi', + `/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix}`, + `/@pnpm/xyz-parent-parent-parent/1.0.0${suffix}`, '/@pnpm/xyz-parent-parent-with-xyz/1.0.0', - '/@pnpm/xyz-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi', - '/@pnpm/xyz-parent/1.0.0_e5suan7fvtov6fikg25btc2odi', - '/@pnpm/xyz/1.0.0_e5suan7fvtov6fikg25btc2odi', + `/@pnpm/xyz-parent-parent/1.0.0${suffix}`, + `/@pnpm/xyz-parent/1.0.0${suffix}`, + `/@pnpm/xyz/1.0.0${suffix}`, '/@pnpm/y/1.0.0', '/@pnpm/z/1.0.0', ]) @@ -86,59 +88,62 @@ test('don\'t hoist a peer dependency when there is a root dependency by that nam await addDependenciesToPackage({}, [ '@pnpm/xyz-parent-parent-parent-parent', '@pnpm/xyz-parent-parent-with-xyz', - '@pnpm/x@npm:peer-a@1.0.0', + '@pnpm/x@npm:@pnpm.e2e/peer-a@1.0.0', `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm/y/-/y-2.0.0.tgz`, ], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() - expect(Object.keys(lockfile.packages)).toStrictEqual([ + const suffix1 = createPeersFolderSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }]) + const suffix2 = createPeersFolderSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }]) + expect(Object.keys(lockfile.packages).sort()).toStrictEqual([ + '/@pnpm.e2e/peer-a/1.0.0', '/@pnpm/x/1.0.0', - '/@pnpm/xyz-parent-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', + `/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix1}`, + `/@pnpm/xyz-parent-parent-parent/1.0.0${suffix1}`, '/@pnpm/xyz-parent-parent-with-xyz/1.0.0', - '/@pnpm/xyz-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent/1.0.0_e5suan7fvtov6fikg25btc2odi', - '/@pnpm/xyz/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz/1.0.0_e5suan7fvtov6fikg25btc2odi', + `/@pnpm/xyz-parent-parent/1.0.0${suffix1}`, + `/@pnpm/xyz-parent/1.0.0${suffix1}`, + `/@pnpm/xyz-parent/1.0.0${suffix2}`, + `/@pnpm/xyz/1.0.0${suffix1}`, + `/@pnpm/xyz/1.0.0${suffix2}`, '/@pnpm/y/1.0.0', '/@pnpm/y/2.0.0', '/@pnpm/z/1.0.0', - '/peer-a/1.0.0', - ]) + ].sort()) }) test('don\'t auto-install a peer dependency, when that dependency is in the root', async () => { const project = prepareEmpty() await addDependenciesToPackage({}, [ '@pnpm/xyz-parent-parent-parent-parent', - '@pnpm/x@npm:peer-a@1.0.0', + '@pnpm/x@npm:@pnpm.e2e/peer-a@1.0.0', `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm/y/-/y-2.0.0.tgz`, ], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() - expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/@pnpm/xyz-parent-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li', - '/@pnpm/xyz/1.0.0_c3hmehglzcfufab5hu6m6d76li', + const suffix = createPeersFolderSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }]) + expect(Object.keys(lockfile.packages).sort()).toStrictEqual([ + `/@pnpm/xyz-parent-parent-parent-parent/1.0.0${suffix}`, + `/@pnpm/xyz-parent-parent-parent/1.0.0${suffix}`, + `/@pnpm/xyz-parent-parent/1.0.0${suffix}`, + `/@pnpm/xyz-parent/1.0.0${suffix}`, + `/@pnpm/xyz/1.0.0${suffix}`, '/@pnpm/y/2.0.0', '/@pnpm/z/1.0.0', - '/peer-a/1.0.0', - ]) + '/@pnpm.e2e/peer-a/1.0.0', + ].sort()) }) test('don\'t install the same missing peer dependency twice', async () => { await addDistTag({ package: '@pnpm/y', version: '2.0.0', distTag: 'latest' }) const project = prepareEmpty() await addDependenciesToPackage({}, [ - 'has-has-y-peer-peer', + '@pnpm.e2e/has-has-y-peer-peer', ], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() - expect(Object.keys(lockfile.packages)).toStrictEqual([ + expect(Object.keys(lockfile.packages).sort()).toStrictEqual([ '/@pnpm/y/1.0.0', - '/has-has-y-peer-peer/1.0.0_c7ewbmm644hn6ztbh6kbjiyhkq', - '/has-y-peer/1.0.0_@pnpm+y@1.0.0', - ]) + `/@pnpm.e2e/has-has-y-peer-peer/1.0.0${createPeersFolderSuffix([{ name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm.e2e/has-y-peer', version: '1.0.0' }])}`, + '/@pnpm.e2e/has-y-peer/1.0.0_@pnpm+y@1.0.0', + ].sort()) }) test('automatically install root peer dependencies', async () => { diff --git a/packages/core/test/install/dedupe.ts b/packages/core/test/install/dedupe.ts index dd741bbae52..5a7d580d5ce 100644 --- a/packages/core/test/install/dedupe.ts +++ b/packages/core/test/install/dedupe.ts @@ -6,140 +6,140 @@ import { testDefaults } from '../utils' test('prefer version ranges specified for top dependencies', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install( { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', - 'pkg-with-1-dep': '*', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '*', }, }, await testDefaults() ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('prefer version ranges specified for top dependencies, when doing named installation', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const manifest = await install( { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, }, await testDefaults() ) - await addDependenciesToPackage(manifest, ['pkg-with-1-dep'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('prefer version ranges specified for top dependencies, even if they are aliased', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install( { dependencies: { - foo: 'npm:dep-of-pkg-with-1-dep@100.0.0', - 'pkg-with-1-dep': '*', + foo: 'npm:@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '*', }, }, await testDefaults() ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('prefer version ranges specified for top dependencies, even if the subdependencies are aliased', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install( { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', - 'pkg-with-1-aliased-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-aliased-dep': '100.0.0', }, }, await testDefaults() ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('ignore version of root dependency when it is incompatible with the indirect dependency\'s range', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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' }) await install( { dependencies: { - 'dep-of-pkg-with-1-dep': '101.0.0', - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, await testDefaults() ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/101.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0']) }) test('prefer dist-tag specified for top dependency', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'stable' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'stable' }) await install( { dependencies: { - 'dep-of-pkg-with-1-dep': 'stable', - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': 'stable', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, await testDefaults() ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('prefer version ranges passed in via opts.preferredVersions', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const project = prepareEmpty() await install( { dependencies: { - 'dep-of-pkg-with-1-dep': '^100.0.0', - 'pkg-with-1-dep': '*', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '^100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '*', }, }, await testDefaults( { preferredVersions: { - 'dep-of-pkg-with-1-dep': { + '@pnpm.e2e/dep-of-pkg-with-1-dep': { '100.0.0': 'version', }, }, @@ -148,18 +148,18 @@ test('prefer version ranges passed in via opts.preferredVersions', async () => { ) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) // Covers https://github.com/pnpm/pnpm/issues/1187 test('prefer version of package that also satisfies the range of the same package higher in the dependency graph', async () => { const project = prepareEmpty() - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) await addDependenciesToPackage( {}, - ['has-foo-as-dep-and-subdep'], + ['@pnpm.e2e/has-foo-as-dep-and-subdep'], await testDefaults() ) @@ -169,9 +169,9 @@ test('prefer version of package that also satisfies the range of the same packag Object.keys(lockfile.packages) ).toStrictEqual( [ - '/foo/100.0.0', - '/has-foo-as-dep-and-subdep/1.0.0', - '/requires-any-foo/1.0.0', + '/@pnpm.e2e/foo/100.0.0', + '/@pnpm.e2e/has-foo-as-dep-and-subdep/1.0.0', + '/@pnpm.e2e/requires-any-foo/1.0.0', ] ) }) @@ -179,15 +179,15 @@ test('prefer version of package that also satisfies the range of the same packag test('dedupe subdependency when a newer version of the same package is installed', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['dep-of-pkg-with-1-dep@100.0.0', 'pkg-with-1-dep@100.0.0'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', '@pnpm.e2e/pkg-with-1-dep@100.0.0'], await testDefaults()) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDependenciesToPackage(manifest, ['dep-of-pkg-with-1-dep@100.1.0'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0'], await testDefaults()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) }) diff --git a/packages/core/test/install/defaultPeerDependencies.ts b/packages/core/test/install/defaultPeerDependencies.ts index 11f3e1eb6b9..eb055f40454 100644 --- a/packages/core/test/install/defaultPeerDependencies.ts +++ b/packages/core/test/install/defaultPeerDependencies.ts @@ -3,52 +3,53 @@ import { prepareEmpty } from '@pnpm/prepare' import { addDistTag } from '@pnpm/registry-mock' import { addDependenciesToPackage } from '@pnpm/core' import deepRequireCwd from 'deep-require-cwd' +import { createPeersFolderSuffix } from 'dependency-path' import exists from 'path-exists' import { testDefaults } from '../utils' test('package with default peer dependency, when auto install peers is on', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-default-peer'], await testDefaults({ autoInstallPeers: true })) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer'], await testDefaults({ autoInstallPeers: true })) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('don\'t install the default peer dependency when it may be resolved from parent packages', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-default-peer', 'dep-of-pkg-with-1-dep@101.0.0'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer', '@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'], await testDefaults()) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/dep-of-pkg-with-1-dep/101.0.0', - '/has-default-peer/1.0.0_ptp3ffmxbab2qqs6nxppnituqi', + '/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0', + `/@pnpm.e2e/has-default-peer/1.0.0${createPeersFolderSuffix([{ name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '101.0.0' }])}`, ]) }) test('install the default peer dependency when it cannot be resolved from parent packages', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-default-peer'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-default-peer'], await testDefaults()) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages)).toStrictEqual([ - '/dep-of-pkg-with-1-dep/100.0.0', - '/has-default-peer/1.0.0', + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/has-default-peer/1.0.0', ]) }) test('package that resolves its own peer dependency', async () => { - await addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }) const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-resolved-peer', 'peer-c@2.0.0'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-resolved-peer', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults()) - expect(deepRequireCwd(['pkg-with-resolved-peer', 'peer-c', './package.json']).version).toBe('2.0.0') + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-resolved-peer', '@pnpm.e2e/peer-c', './package.json']).version).toBe('2.0.0') - expect(await exists(path.resolve('node_modules/.pnpm/pkg-with-resolved-peer@1.0.0_peer-c@2.0.0/node_modules/pkg-with-resolved-peer'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-resolved-peer@1.0.0_@pnpm.e2e+peer-c@2.0.0/node_modules/@pnpm.e2e/pkg-with-resolved-peer'))).toBeTruthy() const lockfile = await project.readLockfile() - expect(lockfile.packages['/pkg-with-resolved-peer/1.0.0_peer-c@2.0.0']?.peerDependencies).toStrictEqual({ 'peer-c': '*' }) - expect(lockfile.packages['/pkg-with-resolved-peer/1.0.0_peer-c@2.0.0'].dependencies).toHaveProperty(['peer-c']) - expect(lockfile.packages['/pkg-with-resolved-peer/1.0.0_peer-c@2.0.0'].optionalDependencies).toHaveProperty(['peer-b']) + expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0']?.peerDependencies).toStrictEqual({ '@pnpm.e2e/peer-c': '*' }) + expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0'].dependencies).toHaveProperty(['@pnpm.e2e/peer-c']) + expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer/1.0.0_@pnpm.e2e+peer-c@2.0.0'].optionalDependencies).toHaveProperty(['@pnpm.e2e/peer-b']) }) diff --git a/packages/core/test/install/fromRepo.ts b/packages/core/test/install/fromRepo.ts index 2ed81b57112..33fa7149321 100644 --- a/packages/core/test/install/fromRepo.ts +++ b/packages/core/test/install/fromRepo.ts @@ -112,22 +112,22 @@ test('from a github repo with different name', async () => { test('a subdependency is from a github repo with different name', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-aliased-git-dependency'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-aliased-git-dependency'], await testDefaults({ fastUnpack: false })) - const m = project.requireModule('has-aliased-git-dependency') + const m = project.requireModule('@pnpm.e2e/has-aliased-git-dependency') expect(m).toEqual('Hi') const lockfile = await project.readLockfile() - expect(lockfile.packages['/has-aliased-git-dependency/1.0.0'].dependencies).toStrictEqual({ - 'has-say-hi-peer': '1.0.0_hi@1.0.0', + expect(lockfile.packages['/@pnpm.e2e/has-aliased-git-dependency/1.0.0'].dependencies).toStrictEqual({ + '@pnpm.e2e/has-say-hi-peer': '1.0.0_hi@1.0.0', 'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd', }) - await project.isExecutable('has-aliased-git-dependency/node_modules/.bin/hi') - await project.isExecutable('has-aliased-git-dependency/node_modules/.bin/szia') + await project.isExecutable('@pnpm.e2e/has-aliased-git-dependency/node_modules/.bin/hi') + await project.isExecutable('@pnpm.e2e/has-aliased-git-dependency/node_modules/.bin/szia') - expect(await exists(path.resolve('node_modules/.pnpm/has-say-hi-peer@1.0.0_hi@1.0.0/node_modules/has-say-hi-peer'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+has-say-hi-peer@1.0.0_hi@1.0.0/node_modules/@pnpm.e2e/has-say-hi-peer'))).toBeTruthy() }) test('from a git repo', async () => { diff --git a/packages/core/test/install/frozenLockfile.ts b/packages/core/test/install/frozenLockfile.ts index 7fa208bae0f..a908ac052fd 100644 --- a/packages/core/test/install/frozenLockfile.ts +++ b/packages/core/test/install/frozenLockfile.ts @@ -185,11 +185,11 @@ test(`prefer-frozen-lockfile+hoistPattern: should prefer headless installation w const manifest = await install({ dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, await testDefaults({ lockfileOnly: true })) - await project.hasNot('pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') const reporter = sinon.spy() await install(manifest, await testDefaults({ @@ -204,8 +204,8 @@ test(`prefer-frozen-lockfile+hoistPattern: should prefer headless installation w name: 'pnpm', })).toBeTruthy() - await project.has('pkg-with-1-dep') - await project.has('.pnpm/node_modules/dep-of-pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') + await project.has('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') }) test('prefer-frozen-lockfile: should prefer frozen-lockfile when package has linked dependency', async () => { diff --git a/packages/core/test/install/hoist.ts b/packages/core/test/install/hoist.ts index 18603626874..719a4ee500b 100644 --- a/packages/core/test/install/hoist.ts +++ b/packages/core/test/install/hoist.ts @@ -207,36 +207,36 @@ test('hoistPattern=undefined throws exception when executed on node_modules inst }) test('hoist by alias', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const project = prepareEmpty() - // pkg-with-1-aliased-dep aliases dep-of-pkg-with-1-dep as just "dep" - await addDependenciesToPackage({}, ['pkg-with-1-aliased-dep'], await testDefaults({ hoistPattern: '*' })) + // pkg-with-1-aliased-dep aliases @pnpm.e2e/dep-of-pkg-with-1-dep as just "dep" + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-aliased-dep'], await testDefaults({ hoistPattern: '*' })) - await project.has('pkg-with-1-aliased-dep') + await project.has('@pnpm.e2e/pkg-with-1-aliased-dep') await project.has('.pnpm/node_modules/dep') - await project.hasNot('.pnpm/node_modules/dep-of-pkg-with-1-dep') + await project.hasNot('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') const modules = await project.readModulesManifest() expect(modules).toBeTruthy() - expect(modules!.hoistedDependencies).toStrictEqual({ '/dep-of-pkg-with-1-dep/100.1.0': { dep: 'private' } }) + expect(modules!.hoistedDependencies).toStrictEqual({ '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0': { dep: 'private' } }) }) test('should remove aliased hoisted dependencies', async () => { const project = prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['pkg-with-1-aliased-dep'], await testDefaults({ hoistPattern: '*' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-aliased-dep'], await testDefaults({ hoistPattern: '*' })) await mutateModules([ { - dependencyNames: ['pkg-with-1-aliased-dep'], + dependencyNames: ['@pnpm.e2e/pkg-with-1-aliased-dep'], manifest, mutation: 'uninstallSome', rootDir: process.cwd(), }, ], await testDefaults({ hoistPattern: '*' })) - await project.hasNot('pkg-with-1-aliased-dep') - await project.hasNot('dep-of-pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/pkg-with-1-aliased-dep') + await project.hasNot('@pnpm.e2e/dep-of-pkg-with-1-dep') try { await resolveLinkTarget('./node_modules/dep') throw new Error('should have failed') @@ -252,7 +252,7 @@ test('should update .modules.yaml when pruning if we are flattening', async () = await install({ dependencies: { - 'pkg-with-1-aliased-dep': '*', + '@pnpm.e2e/pkg-with-1-aliased-dep': '*', }, }, await testDefaults({ hoistPattern: '*' })) @@ -297,17 +297,17 @@ test('should rehoist after pruning', async () => { test('should hoist correctly peer dependencies', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['using-ajv'], await testDefaults({ hoistPattern: '*' })) + await addDependenciesToPackage({}, ['@pnpm.e2e/using-ajv'], await testDefaults({ hoistPattern: '*' })) await project.has('.pnpm/node_modules/ajv-keywords') }) test('should uninstall correctly peer dependencies', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['using-ajv'], await testDefaults({ hoistPattern: '*' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/using-ajv'], await testDefaults({ hoistPattern: '*' })) await mutateModules([ { - dependencyNames: ['using-ajv'], + dependencyNames: ['@pnpm.e2e/using-ajv'], manifest, mutation: 'uninstallSome', rootDir: process.cwd(), @@ -323,14 +323,14 @@ test('hoist-pattern: hoist all dependencies to the virtual store node_modules', name: 'root', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, } const workspacePackageManifest = { name: 'package', dependencies: { - foobar: '100.0.0', + '@pnpm.e2e/foobar': '100.0.0', }, } const projects = preparePackages([ @@ -360,53 +360,53 @@ test('hoist-pattern: hoist all dependencies to the virtual store node_modules', ] await mutateModules(mutatedProjects, await testDefaults({ hoistPattern: '*' })) - await projects['root'].has('pkg-with-1-dep') - await projects['root'].has('.pnpm/node_modules/dep-of-pkg-with-1-dep') - await projects['root'].has('.pnpm/node_modules/foobar') - await projects['root'].has('.pnpm/node_modules/foo') - await projects['root'].has('.pnpm/node_modules/bar') - await projects['root'].hasNot('foobar') - await projects['root'].hasNot('foo') - await projects['root'].hasNot('bar') + await projects['root'].has('@pnpm.e2e/pkg-with-1-dep') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/foobar') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/foo') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/bar') + await projects['root'].hasNot('@pnpm.e2e/foobar') + await projects['root'].hasNot('@pnpm.e2e/foo') + await projects['root'].hasNot('@pnpm.e2e/bar') - await projects['package'].has('foobar') - await projects['package'].hasNot('foo') - await projects['package'].hasNot('bar') + await projects['package'].has('@pnpm.e2e/foobar') + await projects['package'].hasNot('@pnpm.e2e/foo') + await projects['package'].hasNot('@pnpm.e2e/bar') await rimraf('node_modules') await rimraf('package/node_modules') await mutateModules(mutatedProjects, await testDefaults({ frozenLockfile: true, hoistPattern: '*' })) - await projects['root'].has('pkg-with-1-dep') - await projects['root'].has('.pnpm/node_modules/dep-of-pkg-with-1-dep') - await projects['root'].has('.pnpm/node_modules/foobar') - await projects['root'].has('.pnpm/node_modules/foo') - await projects['root'].has('.pnpm/node_modules/bar') - await projects['root'].hasNot('foobar') - await projects['root'].hasNot('foo') - await projects['root'].hasNot('bar') - - await projects['package'].has('foobar') - await projects['package'].hasNot('foo') - await projects['package'].hasNot('bar') + await projects['root'].has('@pnpm.e2e/pkg-with-1-dep') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/foobar') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/foo') + await projects['root'].has('.pnpm/node_modules/@pnpm.e2e/bar') + await projects['root'].hasNot('@pnpm.e2e/foobar') + await projects['root'].hasNot('@pnpm.e2e/foo') + await projects['root'].hasNot('@pnpm.e2e/bar') + + await projects['package'].has('@pnpm.e2e/foobar') + await projects['package'].hasNot('@pnpm.e2e/foo') + await projects['package'].hasNot('@pnpm.e2e/bar') }) test('hoist when updating in one of the workspace projects', async () => { - await addDistTag({ package: 'dep-of-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 workspaceRootManifest = { name: 'root', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, } const workspacePackageManifest = { name: 'package', dependencies: { - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, } preparePackages([ @@ -440,15 +440,15 @@ test('hoist when updating in one of the workspace projects', async () => { { const modulesManifest = await rootModules.readModulesManifest() expect(modulesManifest?.hoistedDependencies).toStrictEqual({ - '/dep-of-pkg-with-1-dep/100.0.0': { 'dep-of-pkg-with-1-dep': 'private' }, - '/foo/100.0.0': { foo: 'private' }, + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': { '@pnpm.e2e/dep-of-pkg-with-1-dep': 'private' }, + '/@pnpm.e2e/foo/100.0.0': { '@pnpm.e2e/foo': 'private' }, }) } await mutateModules([ { ...mutatedProjects[0], - dependencySelectors: ['foo@100.1.0'], + dependencySelectors: ['@pnpm.e2e/foo@100.1.0'], mutation: 'installSome', }, ], await testDefaults({ hoistPattern: '*', pruneLockfileImporters: false })) @@ -459,26 +459,26 @@ test('hoist when updating in one of the workspace projects', async () => { Object.keys(lockfile.packages) ).toStrictEqual( [ - '/dep-of-pkg-with-1-dep/100.0.0', - '/foo/100.0.0', - '/foo/100.1.0', - '/pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/foo/100.0.0', + '/@pnpm.e2e/foo/100.1.0', + '/@pnpm.e2e/pkg-with-1-dep/100.0.0', ] ) { const modulesManifest = await rootModules.readModulesManifest() expect(modulesManifest?.hoistedDependencies).toStrictEqual({ - '/dep-of-pkg-with-1-dep/100.0.0': { 'dep-of-pkg-with-1-dep': 'private' }, + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': { '@pnpm.e2e/dep-of-pkg-with-1-dep': 'private' }, }) } }) test('should recreate node_modules with hoisting', async () => { const project = prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ hoistPattern: undefined })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ hoistPattern: undefined })) - await project.hasNot('.pnpm/node_modules/dep-of-pkg-with-1-dep') + await project.hasNot('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') { const modulesManifest = await project.readModulesManifest() expect(modulesManifest?.hoistPattern).toBeFalsy() @@ -494,8 +494,8 @@ test('should recreate node_modules with hoisting', async () => { }, ], await testDefaults({ hoistPattern: '*' })) - await project.has('pkg-with-1-dep') - await project.has('.pnpm/node_modules/dep-of-pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') + await project.has('.pnpm/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') { const modulesManifest = await project.readModulesManifest() expect(modulesManifest?.hoistPattern).toBeTruthy() @@ -512,13 +512,13 @@ test('hoisting should not create a broken symlink to a skipped optional dependen 'is-positive': '1.0.0', }, optionalDependencies: { - 'not-compatible-with-any-os': '*', + '@pnpm.e2e/not-compatible-with-any-os': '*', }, } await install(manifest, await testDefaults({ publicHoistPattern: '*' })) - await project.hasNot('dep-of-optional-pkg') + await project.hasNot('@pnpm.e2e/dep-of-optional-pkg') expect(await rootModules.readCurrentLockfile()).toStrictEqual(await rootModules.readLockfile()) // Verifying the same with headless installation @@ -526,14 +526,14 @@ test('hoisting should not create a broken symlink to a skipped optional dependen await install(manifest, await testDefaults({ publicHoistPattern: '*' })) - await project.hasNot('dep-of-optional-pkg') + await project.hasNot('@pnpm.e2e/dep-of-optional-pkg') expect(await rootModules.readCurrentLockfile()).toStrictEqual(await rootModules.readLockfile()) }) test('the hoisted packages should not override the bin files of the direct dependencies', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['hello-world-js-bin-parent'], await testDefaults({ fastUnpack: false, publicHoistPattern: '*' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/hello-world-js-bin-parent'], await testDefaults({ fastUnpack: false, publicHoistPattern: '*' })) { const cmd = await fs.promises.readFile('node_modules/.bin/hello-world-js-bin', 'utf-8') diff --git a/packages/core/test/install/hooks.ts b/packages/core/test/install/hooks.ts index bf725c89939..ab8f46b4225 100644 --- a/packages/core/test/install/hooks.ts +++ b/packages/core/test/install/hooks.ts @@ -12,15 +12,15 @@ test('readPackage, afterAllResolved hooks', async () => { const project = prepareEmpty() // w/o the hook, 100.1.0 would be installed - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) function readPackageHook (manifest: PackageManifest) { switch (manifest.name) { - case 'pkg-with-1-dep': + case '@pnpm.e2e/pkg-with-1-dep': if (manifest.dependencies == null) { - throw new Error('pkg-with-1-dep expected to have a dependencies field') + throw new Error('@pnpm.e2e/pkg-with-1-dep expected to have a dependencies field') } - manifest.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + manifest.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' break } return manifest @@ -31,14 +31,14 @@ test('readPackage, afterAllResolved hooks', async () => { return lockfile }) - await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ hooks: { afterAllResolved, readPackage: readPackageHook, }, })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') expect(afterAllResolved).toHaveBeenCalledTimes(1) expect(afterAllResolved.mock.calls[0][0].lockfileVersion).toEqual(LOCKFILE_VERSION) @@ -50,15 +50,15 @@ test('readPackage, afterAllResolved async hooks', async () => { const project = prepareEmpty() // w/o the hook, 100.1.0 would be installed - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) async function readPackageHook (manifest: PackageManifest) { switch (manifest.name) { - case 'pkg-with-1-dep': + case '@pnpm.e2e/pkg-with-1-dep': if (manifest.dependencies == null) { - throw new Error('pkg-with-1-dep expected to have a dependencies field') + throw new Error('@pnpm.e2e/pkg-with-1-dep expected to have a dependencies field') } - manifest.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + manifest.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' break } return manifest @@ -69,14 +69,14 @@ test('readPackage, afterAllResolved async hooks', async () => { return lockfile }) - await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ hooks: { afterAllResolved, readPackage: readPackageHook, }, })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') expect(afterAllResolved).toHaveBeenCalledTimes(1) expect(afterAllResolved.mock.calls[0][0].lockfileVersion).toEqual(LOCKFILE_VERSION) diff --git a/packages/core/test/install/injectLocalPackages.ts b/packages/core/test/install/injectLocalPackages.ts index 27bb734f9a2..ec9cba952e7 100644 --- a/packages/core/test/install/injectLocalPackages.ts +++ b/packages/core/test/install/injectLocalPackages.ts @@ -16,7 +16,7 @@ test('inject local packages', async () => { 'is-negative': '1.0.0', }, devDependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '>=1.0.0', @@ -112,7 +112,7 @@ test('inject local packages', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -180,7 +180,7 @@ test('inject local packages', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -233,7 +233,7 @@ test('inject local packages declared via file protocol', async () => { 'is-negative': '1.0.0', }, devDependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '>=1.0.0', @@ -329,7 +329,7 @@ test('inject local packages declared via file protocol', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -397,7 +397,7 @@ test('inject local packages declared via file protocol', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -451,7 +451,7 @@ test('inject local packages when the file protocol is used', async () => { 'is-negative': '1.0.0', }, devDependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '>=1.0.0', @@ -537,7 +537,7 @@ test('inject local packages when the file protocol is used', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -600,7 +600,7 @@ test('inject local packages when the file protocol is used', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -649,7 +649,7 @@ test('inject local packages and relink them after build', async () => { 'is-negative': '1.0.0', }, devDependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '1.0.0', @@ -715,7 +715,7 @@ test('inject local packages and relink them after build', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -759,7 +759,7 @@ test('inject local packages and relink them after build', async () => { })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -776,7 +776,7 @@ test('inject local packages and relink them after build (file protocol is used)' 'is-negative': '1.0.0', }, devDependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '1.0.0', @@ -821,7 +821,7 @@ test('inject local packages and relink them after build (file protocol is used)' await mutateModules(importers, await testDefaults()) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -859,7 +859,7 @@ test('inject local packages and relink them after build (file protocol is used)' })) await projects['project-1'].has('is-negative') - await projects['project-1'].has('dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-1'].hasNot('is-positive') await projects['project-2'].has('is-positive') @@ -874,7 +874,7 @@ test('inject local packages when node-linker is hoisted', async () => { version: '1.0.0', dependencies: { 'is-negative': '1.0.0', - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '>=1.0.0', @@ -885,7 +885,7 @@ test('inject local packages when node-linker is hoisted', async () => { version: '1.0.0', dependencies: { 'project-1': 'workspace:1.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }, devDependencies: { 'is-positive': '1.0.0', @@ -973,11 +973,11 @@ test('inject local packages when node-linker is hoisted', async () => { const rootModules = assertProject(process.cwd()) await rootModules.has('is-negative') - await rootModules.has('dep-of-pkg-with-1-dep') + await rootModules.has('@pnpm.e2e/dep-of-pkg-with-1-dep') await rootModules.has('is-positive') await projects['project-2'].has('project-1') - await projects['project-2'].has('project-1/node_modules/dep-of-pkg-with-1-dep') + await projects['project-2'].has('project-1/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-3'].has('project-1') await projects['project-3'].has('project-2') @@ -1002,7 +1002,7 @@ test('inject local packages when node-linker is hoisted', async () => { 'is-positive': '>=1.0.0', }, dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', 'is-negative': '1.0.0', 'is-positive': '1.0.0', }, @@ -1017,7 +1017,7 @@ test('inject local packages when node-linker is hoisted', async () => { name: 'project-2', version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', 'project-1': 'file:project-1_is-positive@2.0.0', }, transitivePeerDependencies: ['is-positive'], @@ -1037,7 +1037,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is version: '1.0.0', dependencies: { 'is-negative': '1.0.0', - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, peerDependencies: { 'is-positive': '>=1.0.0', @@ -1048,7 +1048,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is version: '1.0.0', dependencies: { 'project-1': 'workspace:1.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }, devDependencies: { 'is-positive': '1.0.0', @@ -1145,11 +1145,11 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is const rootModules = assertProject(process.cwd()) await rootModules.has('is-negative') - await rootModules.has('dep-of-pkg-with-1-dep') + await rootModules.has('@pnpm.e2e/dep-of-pkg-with-1-dep') await rootModules.has('is-positive') await projects['project-2'].has('project-1') - await projects['project-2'].has('project-1/node_modules/dep-of-pkg-with-1-dep') + await projects['project-2'].has('project-1/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep') await projects['project-3'].has('project-1') await projects['project-3'].has('project-2') @@ -1174,7 +1174,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is 'is-positive': '>=1.0.0', }, dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', 'is-negative': '1.0.0', 'is-positive': '1.0.0', }, @@ -1189,7 +1189,7 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is name: 'project-2', version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', 'project-1': 'file:project-1_is-positive@2.0.0', }, transitivePeerDependencies: ['is-positive'], diff --git a/packages/core/test/install/installationChecks.ts b/packages/core/test/install/installationChecks.ts index d19ff2adcf8..4e89a5b91ce 100644 --- a/packages/core/test/install/installationChecks.ts +++ b/packages/core/test/install/installationChecks.ts @@ -7,52 +7,52 @@ test('fail if installed package does not support the current engine and engine-s const project = prepareEmpty() await expect( - addDependenciesToPackage({}, ['not-compatible-with-any-os'], await testDefaults({}, {}, {}, { + addDependenciesToPackage({}, ['@pnpm.e2e/not-compatible-with-any-os'], await testDefaults({}, {}, {}, { engineStrict: true, })) ).rejects.toThrow() - await project.hasNot('not-compatible-with-any-os') - await project.storeHasNot('not-compatible-with-any-os', '1.0.0') + await project.hasNot('@pnpm.e2e/not-compatible-with-any-os') + await project.storeHasNot('@pnpm.e2e/not-compatible-with-any-os', '1.0.0') }) test('do not fail if installed package does not support the current engine and engine-strict = false', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['not-compatible-with-any-os'], await testDefaults({ + await addDependenciesToPackage({}, ['@pnpm.e2e/not-compatible-with-any-os'], await testDefaults({ engineStrict: false, })) - await project.has('not-compatible-with-any-os') - await project.storeHas('not-compatible-with-any-os', '1.0.0') + await project.has('@pnpm.e2e/not-compatible-with-any-os') + await project.storeHas('@pnpm.e2e/not-compatible-with-any-os', '1.0.0') const lockfile = await project.readLockfile() - expect(lockfile.packages['/not-compatible-with-any-os/1.0.0'].os).toStrictEqual(['this-os-does-not-exist']) + expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].os).toStrictEqual(['this-os-does-not-exist']) }) test('do not fail if installed package requires the node version that was passed in and engine-strict = true', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['for-legacy-node'], await testDefaults({ + await addDependenciesToPackage({}, ['@pnpm.e2e/for-legacy-node'], await testDefaults({ engineStrict: true, nodeVersion: '0.10.0', })) - await project.has('for-legacy-node') - await project.storeHas('for-legacy-node', '1.0.0') + await project.has('@pnpm.e2e/for-legacy-node') + await project.storeHas('@pnpm.e2e/for-legacy-node', '1.0.0') const lockfile = await project.readLockfile() - expect(lockfile.packages['/for-legacy-node/1.0.0'].engines).toStrictEqual({ node: '0.10' }) + expect(lockfile.packages['/@pnpm.e2e/for-legacy-node/1.0.0'].engines).toStrictEqual({ node: '0.10' }) }) test(`save cpu field to ${WANTED_LOCKFILE}`, async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-cpu-specified'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-cpu-specified'], await testDefaults()) const lockfile = await project.readLockfile() expect( - lockfile.packages['/has-cpu-specified/1.0.0'].cpu + lockfile.packages['/@pnpm.e2e/has-cpu-specified/1.0.0'].cpu ).toStrictEqual( ['x64', 'ia32'] ) diff --git a/packages/core/test/install/lifecycleScripts.ts b/packages/core/test/install/lifecycleScripts.ts index e9850280d3f..e6651525d11 100644 --- a/packages/core/test/install/lifecycleScripts.ts +++ b/packages/core/test/install/lifecycleScripts.ts @@ -20,18 +20,18 @@ const testOnNonWindows = isWindows() ? test.skip : test test('run pre/postinstall scripts', async () => { const project = prepareEmpty() const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example'], await testDefaults({ fastUnpack: false, targetDependenciesField: 'devDependencies' }) ) { - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') } @@ -43,21 +43,21 @@ test('run pre/postinstall scripts', async () => { await install(manifest, await testDefaults({ fastUnpack: false, production: true })) { - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') } const lockfile = await project.readLockfile() - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild) + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild) }) test('run pre/postinstall scripts, when PnP is used and no symlinks', async () => { prepareEmpty() await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example'], await testDefaults({ fastUnpack: false, enablePnp: true, @@ -66,7 +66,7 @@ test('run pre/postinstall scripts, when PnP is used and no symlinks', async () = }) ) - const pkgDir = 'node_modules/.pnpm/pre-and-postinstall-scripts-example@1.0.0/node_modules/pre-and-postinstall-scripts-example' + const pkgDir = 'node_modules/.pnpm/@pnpm.e2e+pre-and-postinstall-scripts-example@1.0.0/node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example' expect(await exists(path.resolve(pkgDir, 'generated-by-prepare.js'))).toBeFalsy() expect(await exists(path.resolve(pkgDir, 'generated-by-preinstall.js'))).toBeTruthy() expect(await exists(path.resolve(pkgDir, 'generated-by-postinstall.js'))).toBeTruthy() @@ -75,21 +75,21 @@ test('run pre/postinstall scripts, when PnP is used and no symlinks', async () = test('testing that the bins are linked when the package with the bins was already in node_modules', async () => { const project = prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['hello-world-js-bin'], await testDefaults({ fastUnpack: false })) - await addDependenciesToPackage(manifest, ['pre-and-postinstall-scripts-example'], await testDefaults({ fastUnpack: false, targetDependenciesField: 'devDependencies' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/hello-world-js-bin'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/pre-and-postinstall-scripts-example'], await testDefaults({ fastUnpack: false, targetDependenciesField: 'devDependencies' })) - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') }) test('run install scripts', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['install-script-example'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/install-script-example'], await testDefaults({ fastUnpack: false })) - const generatedByInstall = project.requireModule('install-script-example/generated-by-install') + const generatedByInstall = project.requireModule('@pnpm.e2e/install-script-example/generated-by-install') expect(typeof generatedByInstall).toBe('function') }) @@ -152,7 +152,7 @@ test('INIT_CWD is always set to lockfile directory', async () => { manifest: { dependencies: { 'json-append': '1.1.1', - 'write-lifecycle-env': '1.0.0', + '@pnpm.e2e/write-lifecycle-env': '1.0.0', }, scripts: { install: 'node -e "process.stdout.write(process.env.INIT_CWD)" | json-append output.json', @@ -165,7 +165,7 @@ test('INIT_CWD is always set to lockfile directory', async () => { lockfileDir: rootDir, })) - const childEnv = await loadJsonFile<{ INIT_CWD: string }>(path.join(rootDir, 'node_modules/write-lifecycle-env/env.json')) + const childEnv = await loadJsonFile<{ INIT_CWD: string }>(path.join(rootDir, 'node_modules/@pnpm.e2e/write-lifecycle-env/env.json')) expect(childEnv.INIT_CWD).toBe(rootDir) const output = await loadJsonFile(path.join(rootDir, 'output.json')) @@ -178,17 +178,17 @@ test("reports child's output", async () => { const reporter = sinon.spy() - await addDependenciesToPackage({}, ['count-to-10'], await testDefaults({ fastUnpack: false, reporter })) + await addDependenciesToPackage({}, ['@pnpm.e2e/count-to-10'], await testDefaults({ fastUnpack: false, reporter })) expect(reporter.calledWithMatch({ - depPath: '/count-to-10/1.0.0', + depPath: '/@pnpm.e2e/count-to-10/1.0.0', level: 'debug', name: 'pnpm:lifecycle', script: 'node postinstall', stage: 'postinstall', } as LifecycleLog)).toBeTruthy() expect(reporter.calledWithMatch({ - depPath: '/count-to-10/1.0.0', + depPath: '/@pnpm.e2e/count-to-10/1.0.0', level: 'debug', line: '1', name: 'pnpm:lifecycle', @@ -196,7 +196,7 @@ test("reports child's output", async () => { stdio: 'stdout', } as LifecycleLog)).toBeTruthy() expect(reporter.calledWithMatch({ - depPath: '/count-to-10/1.0.0', + depPath: '/@pnpm.e2e/count-to-10/1.0.0', level: 'debug', line: '2', name: 'pnpm:lifecycle', @@ -204,7 +204,7 @@ test("reports child's output", async () => { stdio: 'stdout', } as LifecycleLog)).toBeTruthy() expect(reporter.calledWithMatch({ - depPath: '/count-to-10/1.0.0', + depPath: '/@pnpm.e2e/count-to-10/1.0.0', level: 'debug', line: '6', name: 'pnpm:lifecycle', @@ -212,7 +212,7 @@ test("reports child's output", async () => { stdio: 'stderr', } as LifecycleLog)).toBeTruthy() expect(reporter.calledWithMatch({ - depPath: '/count-to-10/1.0.0', + depPath: '/@pnpm.e2e/count-to-10/1.0.0', exitCode: 0, level: 'debug', name: 'pnpm:lifecycle', @@ -226,11 +226,11 @@ test("reports child's close event", async () => { const reporter = sinon.spy() await expect( - addDependenciesToPackage({}, ['failing-postinstall'], await testDefaults({ reporter })) + addDependenciesToPackage({}, ['@pnpm.e2e/failing-postinstall'], await testDefaults({ reporter })) ).rejects.toThrow() expect(reporter.calledWithMatch({ - depPath: '/failing-postinstall/1.0.0', + depPath: '/@pnpm.e2e/failing-postinstall/1.0.0', exitCode: 1, level: 'debug', name: 'pnpm:lifecycle', @@ -262,9 +262,9 @@ testOnNonWindows('lifecycle scripts have access to node-gyp', async () => { test('run lifecycle scripts of dependent packages after running scripts of their deps', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['with-postinstall-a'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/with-postinstall-a'], await testDefaults({ fastUnpack: false })) - expect(+project.requireModule('.pnpm/with-postinstall-b@1.0.0/node_modules/with-postinstall-b/output.json')[0] < +project.requireModule('with-postinstall-a/output.json')[0]).toBeTruthy() + expect(+project.requireModule('.pnpm/@pnpm.e2e+with-postinstall-b@1.0.0/node_modules/@pnpm.e2e/with-postinstall-b/output.json')[0] < +project.requireModule('@pnpm.e2e/with-postinstall-a/output.json')[0]).toBeTruthy() }) test('run prepare script for git-hosted dependencies', async () => { @@ -290,7 +290,7 @@ test('run prepare script for git-hosted dependencies', async () => { test('lifecycle scripts run before linking bins', async () => { const project = prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['generated-bins'], await testDefaults({ fastUnpack: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/generated-bins'], await testDefaults({ fastUnpack: false })) await project.isExecutable('.bin/cmd1') await project.isExecutable('.bin/cmd2') @@ -316,7 +316,7 @@ test('lifecycle scripts run before linking bins', async () => { test('hoisting does not fail on commands that will be created by lifecycle scripts on a later stage', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['has-generated-bins-as-dep'], await testDefaults({ fastUnpack: false, hoistPattern: '*' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/has-generated-bins-as-dep'], await testDefaults({ fastUnpack: false, hoistPattern: '*' })) // await project.isExecutable('.pnpm/node_modules/.bin/cmd1') // await project.isExecutable('.pnpm/node_modules/.bin/cmd2') @@ -346,19 +346,19 @@ test('bins are linked even if lifecycle scripts are ignored', async () => { const manifest = await addDependenciesToPackage( {}, [ - 'pkg-with-peer-having-bin', - 'peer-with-bin', - 'pre-and-postinstall-scripts-example', + '@pnpm.e2e/pkg-with-peer-having-bin', + '@pnpm.e2e/peer-with-bin', + '@pnpm.e2e/pre-and-postinstall-scripts-example', ], await testDefaults({ fastUnpack: false, ignoreScripts: true }) ) await project.isExecutable('.bin/peer-with-bin') - await project.isExecutable('pkg-with-peer-having-bin/node_modules/.bin/hello-world-js-bin') + await project.isExecutable('@pnpm.e2e/pkg-with-peer-having-bin/node_modules/.bin/hello-world-js-bin') // Verifying that the scripts were ignored - expect(await exists('node_modules/pre-and-postinstall-scripts-example/package.json')).toBeTruthy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/package.json')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() await rimraf('node_modules') @@ -375,11 +375,11 @@ test('bins are linked even if lifecycle scripts are ignored', async () => { ) await project.isExecutable('.bin/peer-with-bin') - await project.isExecutable('pkg-with-peer-having-bin/node_modules/.bin/hello-world-js-bin') + await project.isExecutable('@pnpm.e2e/pkg-with-peer-having-bin/node_modules/.bin/hello-world-js-bin') // Verifying that the scripts were ignored - expect(await exists('node_modules/pre-and-postinstall-scripts-example/package.json')).toBeTruthy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/package.json')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() }) test('dependency should not be added to current lockfile if it was not built successfully during headless install', async () => { @@ -388,7 +388,7 @@ test('dependency should not be added to current lockfile if it was not built suc const manifest = await addDependenciesToPackage( {}, [ - 'package-that-cannot-be-installed@0.0.0', + 'package-that-cannot-be-installed@0.0.0', // TODO: this package should be replaced ], await testDefaults({ ignoreScripts: true, @@ -418,37 +418,37 @@ test('scripts have access to unlisted bins when hoisting is used', async () => { await addDependenciesToPackage( {}, - ['pkg-that-calls-unlisted-dep-in-hooks'], + ['@pnpm.e2e/pkg-that-calls-unlisted-dep-in-hooks'], await testDefaults({ fastUnpack: false, hoistPattern: '*' }) ) - expect(project.requireModule('pkg-that-calls-unlisted-dep-in-hooks/output.json')).toStrictEqual(['Hello world!']) + expect(project.requireModule('@pnpm.e2e/pkg-that-calls-unlisted-dep-in-hooks/output.json')).toStrictEqual(['Hello world!']) }) test('selectively ignore scripts in some dependencies by neverBuiltDependencies', async () => { const project = prepareEmpty() - const neverBuiltDependencies = ['pre-and-postinstall-scripts-example'] + const neverBuiltDependencies = ['@pnpm.e2e/pre-and-postinstall-scripts-example'] const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example', 'install-script-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example', '@pnpm.e2e/install-script-example'], await testDefaults({ fastUnpack: false, neverBuiltDependencies }) ) - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() - expect(await exists('node_modules/install-script-example/generated-by-install.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() const lockfile = await project.readLockfile() expect(lockfile.neverBuiltDependencies).toStrictEqual(neverBuiltDependencies) - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy() await rimraf('node_modules') await install(manifest, await testDefaults({ fastUnpack: false, frozenLockfile: true, neverBuiltDependencies })) - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() - expect(await exists('node_modules/install-script-example/generated-by-install.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() }) test('throw an exception when both neverBuiltDependencies and onlyBuiltDependencies are used', async () => { @@ -457,53 +457,53 @@ test('throw an exception when both neverBuiltDependencies and onlyBuiltDependenc await expect( addDependenciesToPackage( {}, - ['pre-and-postinstall-scripts-example'], - await testDefaults({ onlyBuiltDependencies: ['foo'], neverBuiltDependencies: ['bar'] }) + ['@pnpm.e2e/pre-and-postinstall-scripts-example'], + await testDefaults({ onlyBuiltDependencies: ['@pnpm.e2e/foo'], neverBuiltDependencies: ['@pnpm.e2e/bar'] }) ) ).rejects.toThrow(/Cannot have both/) }) test('selectively allow scripts in some dependencies by onlyBuiltDependencies', async () => { const project = prepareEmpty() - const onlyBuiltDependencies = ['install-script-example'] + const onlyBuiltDependencies = ['@pnpm.e2e/install-script-example'] const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example', 'install-script-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example', '@pnpm.e2e/install-script-example'], await testDefaults({ fastUnpack: false, onlyBuiltDependencies }) ) - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() - expect(await exists('node_modules/install-script-example/generated-by-install.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() const lockfile = await project.readLockfile() expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies) - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBe(true) + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(true) await rimraf('node_modules') await install(manifest, await testDefaults({ fastUnpack: false, frozenLockfile: true, onlyBuiltDependencies })) - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() - expect(await exists('node_modules/install-script-example/generated-by-install.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeTruthy() }) test('lockfile is updated if neverBuiltDependencies is changed', async () => { const project = prepareEmpty() const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example', 'install-script-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example', '@pnpm.e2e/install-script-example'], await testDefaults({ fastUnpack: false }) ) { const lockfile = await project.readLockfile() expect(lockfile.neverBuiltDependencies).toBeFalsy() - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy() - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy() } - const neverBuiltDependencies = ['pre-and-postinstall-scripts-example'] + const neverBuiltDependencies = ['@pnpm.e2e/pre-and-postinstall-scripts-example'] await mutateModules([ { buildIndex: 0, @@ -516,23 +516,23 @@ test('lockfile is updated if neverBuiltDependencies is changed', async () => { { const lockfile = await project.readLockfile() expect(lockfile.neverBuiltDependencies).toStrictEqual(neverBuiltDependencies) - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy() } }) test('lockfile is updated if onlyBuiltDependencies is changed', async () => { const project = prepareEmpty() const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example', 'install-script-example'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example', '@pnpm.e2e/install-script-example'], await testDefaults({ fastUnpack: false }) ) { const lockfile = await project.readLockfile() expect(lockfile.onlyBuiltDependencies).toBeFalsy() - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy() - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBeTruthy() } const onlyBuiltDependencies: string[] = [] @@ -548,11 +548,11 @@ test('lockfile is updated if onlyBuiltDependencies is changed', async () => { { const lockfile = await project.readLockfile() expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies) - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(undefined) } - onlyBuiltDependencies.push('pre-and-postinstall-scripts-example') + onlyBuiltDependencies.push('@pnpm.e2e/pre-and-postinstall-scripts-example') await mutateModules([ { buildIndex: 0, @@ -565,19 +565,19 @@ test('lockfile is updated if onlyBuiltDependencies is changed', async () => { { const lockfile = await project.readLockfile() expect(lockfile.onlyBuiltDependencies).toStrictEqual(onlyBuiltDependencies) - expect(lockfile.packages['/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(true) - expect(lockfile.packages['/install-script-example/1.0.0'].requiresBuild).toBe(undefined) + expect(lockfile.packages['/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0'].requiresBuild).toBe(true) + expect(lockfile.packages['/@pnpm.e2e/install-script-example/1.0.0'].requiresBuild).toBe(undefined) } }) test('lifecycle scripts have access to package\'s own binary by binary name', async () => { const project = prepareEmpty() await addDependenciesToPackage({}, - ['runs-own-bin'], + ['@pnpm.e2e/runs-own-bin'], await testDefaults({ fastUnpack: false }) ) - await project.isExecutable('.pnpm/runs-own-bin@1.0.0/node_modules/runs-own-bin/node_modules/.bin/runs-own-bin') + await project.isExecutable('.pnpm/@pnpm.e2e+runs-own-bin@1.0.0/node_modules/@pnpm.e2e/runs-own-bin/node_modules/.bin/runs-own-bin') }) test('lifecycle scripts run after linking root dependencies', async () => { @@ -586,7 +586,7 @@ test('lifecycle scripts run after linking root dependencies', async () => { const manifest = { dependencies: { 'is-positive': '1.0.0', - 'postinstall-requires-is-positive': '1.0.0', + '@pnpm.e2e/postinstall-requires-is-positive': '1.0.0', }, } @@ -630,7 +630,7 @@ test('ignore-dep-scripts', async () => { }, dependencies: { 'json-append': '1.1.1', - 'pre-and-postinstall-scripts-example': '1.0.0', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0', }, } await install(manifest, await testDefaults({ fastUnpack: false, ignoreDepScripts: true })) @@ -641,7 +641,7 @@ test('ignore-dep-scripts', async () => { expect(output).toStrictEqual(['preinstall', 'install', 'postinstall']) expect(await exists('test.txt')).toBeTruthy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() } await rimraf('node_modules') @@ -653,6 +653,6 @@ test('ignore-dep-scripts', async () => { expect(output).toStrictEqual(['preinstall', 'install', 'postinstall']) expect(await exists('test.txt')).toBeTruthy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeFalsy() } }) diff --git a/packages/core/test/install/local.ts b/packages/core/test/install/local.ts index 717cbdeed32..ba2803208d6 100644 --- a/packages/core/test/install/local.ts +++ b/packages/core/test/install/local.ts @@ -202,15 +202,15 @@ test('update tarball local package when its integrity changes', async () => { // Covers https://github.com/pnpm/pnpm/issues/1878 test('do not update deps when installing in a project that has local tarball dep', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) const project = prepareEmpty() f.copy('tar-pkg-with-dep-1/tar-pkg-with-dep-1.0.0.tgz', path.resolve('..', 'tar.tgz')) - const manifest = await addDependenciesToPackage({}, ['../tar.tgz', 'peer-a'], await testDefaults({ lockfileOnly: true })) + const manifest = await addDependenciesToPackage({}, ['../tar.tgz', '@pnpm.e2e/peer-a'], await testDefaults({ lockfileOnly: true })) const initialLockfile = await project.readLockfile() - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) await mutateModules([ { diff --git a/packages/core/test/install/lockfileOnly.ts b/packages/core/test/install/lockfileOnly.ts index 8594963373d..fcc938ac768 100644 --- a/packages/core/test/install/lockfileOnly.ts +++ b/packages/core/test/install/lockfileOnly.ts @@ -12,25 +12,25 @@ import sinon from 'sinon' import { testDefaults } from '../utils' test('install with lockfileOnly = true', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const project = prepareEmpty() const opts = await testDefaults({ lockfileOnly: true, pinnedVersion: 'patch' as const }) - const manifest = await addDependenciesToPackage({}, ['pkg-with-1-dep@100.0.0'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], opts) const { cafsHas } = assertStore(opts.storeDir) - await cafsHas('pkg-with-1-dep', '100.0.0') - expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep.json`))).toBeTruthy() - await cafsHas('dep-of-pkg-with-1-dep', '100.1.0') - expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/dep-of-pkg-with-1-dep.json`))).toBeTruthy() - await project.hasNot('pkg-with-1-dep') + await cafsHas('@pnpm.e2e/pkg-with-1-dep', '100.0.0') + expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep.json`))).toBeTruthy() + await cafsHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') + expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/dep-of-pkg-with-1-dep.json`))).toBeTruthy() + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') - expect(manifest.dependencies!['pkg-with-1-dep']).toBeTruthy() + expect(manifest.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() const lockfile = await project.readLockfile() - expect(lockfile.dependencies['pkg-with-1-dep']).toBeTruthy() - expect(lockfile.packages['/pkg-with-1-dep/100.0.0']).toBeTruthy() - expect(lockfile.specifiers['pkg-with-1-dep']).toBeTruthy() + expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0']).toBeTruthy() + expect(lockfile.specifiers['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() const currentLockfile = await project.readCurrentLockfile() expect(currentLockfile).toBeFalsy() @@ -38,11 +38,11 @@ test('install with lockfileOnly = true', async () => { console.log(`doing repeat install when ${WANTED_LOCKFILE} is available already`) await install(manifest, opts) - await cafsHas('pkg-with-1-dep', '100.0.0') - expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep.json`))).toBeTruthy() - await cafsHas('dep-of-pkg-with-1-dep', '100.1.0') - expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/dep-of-pkg-with-1-dep.json`))).toBeTruthy() - await project.hasNot('pkg-with-1-dep') + await cafsHas('@pnpm.e2e/pkg-with-1-dep', '100.0.0') + expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep.json`))).toBeTruthy() + await cafsHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') + expect(await exists(path.join(opts.cacheDir, `metadata/localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/dep-of-pkg-with-1-dep.json`))).toBeTruthy() + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') expect(await project.readCurrentLockfile()).toBeFalsy() }) diff --git a/packages/core/test/install/misc.ts b/packages/core/test/install/misc.ts index b15cc27ccc6..b85f893ceac 100644 --- a/packages/core/test/install/misc.ts +++ b/packages/core/test/install/misc.ts @@ -173,26 +173,26 @@ test('modules without version spec, with custom tag config', async () => { const tag = 'beta' - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: tag }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: tag }) - await addDependenciesToPackage({}, ['dep-of-pkg-with-1-dep'], await testDefaults({ tag })) + await addDependenciesToPackage({}, ['@pnpm.e2e/dep-of-pkg-with-1-dep'], await testDefaults({ tag })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('modules without version spec but with a trailing @', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['dep-of-pkg-with-1-dep@'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/dep-of-pkg-with-1-dep@'], await testDefaults()) - await project.has('dep-of-pkg-with-1-dep') + await project.has('@pnpm.e2e/dep-of-pkg-with-1-dep') }) test('aliased modules without version spec but with a trailing @', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['foo@npm:dep-of-pkg-with-1-dep@'], await testDefaults()) + await addDependenciesToPackage({}, ['foo@npm:@pnpm.e2e/dep-of-pkg-with-1-dep@'], await testDefaults()) await project.has('foo') }) @@ -200,32 +200,32 @@ test('aliased modules without version spec but with a trailing @', async () => { test('installing a package by specifying a specific dist-tag', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'beta' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'beta' }) - await addDependenciesToPackage({}, ['dep-of-pkg-with-1-dep@beta'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/dep-of-pkg-with-1-dep@beta'], await testDefaults()) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('update a package when installing with a dist-tag', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'beta' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'beta' }) - const manifest = await addDependenciesToPackage({}, ['dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'devDependencies' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'devDependencies' })) const reporter = sinon.spy() - await addDependenciesToPackage(manifest, ['dep-of-pkg-with-1-dep@beta'], await testDefaults({ targetDependenciesField: 'devDependencies', reporter })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep@beta'], await testDefaults({ targetDependenciesField: 'devDependencies', reporter })) expect(reporter.calledWithMatch({ level: 'debug', name: 'pnpm:root', removed: { dependencyType: 'dev', - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.0.0', }, } as RootLog)).toBeTruthy() @@ -233,17 +233,17 @@ test('update a package when installing with a dist-tag', async () => { expect(reporter.calledWithMatch({ added: { dependencyType: 'dev', - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, level: 'debug', name: 'pnpm:root', } as RootLog)).toBeTruthy() - await project.has('dep-of-pkg-with-1-dep') - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.has('@pnpm.e2e/dep-of-pkg-with-1-dep') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') - expect(manifest.devDependencies!['dep-of-pkg-with-1-dep']).toBe('^100.1.0') + expect(manifest.devDependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^100.1.0') }) test('scoped modules with versions', async () => { @@ -263,16 +263,16 @@ test('multiple scoped modules (@rstacruz/...)', async () => { test('installing a beta version of a package', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['beta-version'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/beta-version'], await testDefaults()) - expect(manifest.dependencies?.['beta-version']).toBe('1.0.0-beta.0') + expect(manifest.dependencies?.['@pnpm.e2e/beta-version']).toBe('1.0.0-beta.0') }) test('nested scoped modules (test-pnpm-issue219 -> @zkochan/test-pnpm-issue219)', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['test-pnpm-issue219@1.0.2'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/test-pnpm-issue219@1.0.3'], await testDefaults({ fastUnpack: false })) - const m = project.requireModule('test-pnpm-issue219') + const m = project.requireModule('@pnpm.e2e/test-pnpm-issue219') expect(m).toBe('test-pnpm-issue219,@zkochan/test-pnpm-issue219') }) @@ -281,12 +281,12 @@ test('idempotency', async () => { const reporter = sinon.spy() const opts = await testDefaults({ reporter }) - const manifest = await addDependenciesToPackage({}, ['pkg-with-1-dep@100.0.0'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], opts) expect(reporter.calledWithMatch({ added: { dependencyType: 'prod', - name: 'pkg-with-1-dep', + name: '@pnpm.e2e/pkg-with-1-dep', version: '100.0.0', }, level: 'debug', @@ -295,19 +295,19 @@ test('idempotency', async () => { reporter.resetHistory() - await addDependenciesToPackage(manifest, ['pkg-with-1-dep@100.0.0'], opts) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], opts) expect(reporter.calledWithMatch({ added: { dependencyType: 'prod', - name: 'pkg-with-1-dep', + name: '@pnpm.e2e/pkg-with-1-dep', version: '100.0.0', }, level: 'debug', name: 'pnpm:root', } as RootLog)).toBeFalsy() - await project.has('pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') }) test('reporting adding root package', async () => { @@ -363,11 +363,11 @@ test('overwriting (is-positive@3.0.0 with is-positive@latest)', async () => { test('keeping existing specs untouched when adding new dependency', async () => { prepareEmpty() - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) - const manifest = await addDependenciesToPackage({ dependencies: { bar: '^100.0.0' } }, ['foo@100.1.0'], await testDefaults()) + const manifest = await addDependenciesToPackage({ dependencies: { '@pnpm.e2e/bar': '^100.0.0' } }, ['@pnpm.e2e/foo@100.1.0'], await testDefaults()) - expect(manifest.dependencies).toStrictEqual({ bar: '^100.0.0', foo: '100.1.0' }) + expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/bar': '^100.0.0', '@pnpm.e2e/foo': '100.1.0' }) }) test('forcing', async () => { @@ -451,13 +451,13 @@ test.skip('relink package to project if the dependency is not linked from store' test('circular deps', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['circular-deps-1-of-2'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/circular-deps-1-of-2'], await testDefaults({ fastUnpack: false })) - const m = project.requireModule('circular-deps-1-of-2/mirror') + const m = project.requireModule('@pnpm.e2e/circular-deps-1-of-2/mirror') - expect(m()).toEqual('circular-deps-1-of-2') + expect(m()).toEqual('@pnpm.e2e/circular-deps-1-of-2') - expect(await exists(path.join('node_modules', 'circular-deps-1-of-2', 'node_modules', 'circular-deps-2-of-2', 'node_modules', 'circular-deps-1-of-2'))).toBeFalsy() + expect(await exists(path.join('node_modules', '@pnpm.e2e/circular-deps-1-of-2', 'node_modules', '@pnpm.e2e/circular-deps-2-of-2', 'node_modules', '@pnpm.e2e/circular-deps-1-of-2'))).toBeFalsy() }) test('concurrent circular deps', async () => { @@ -501,41 +501,41 @@ test('big with dependencies and circular deps (babel-preset-2015)', async () => test('bundledDependencies (pkg-with-bundled-dependencies@1.0.0)', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-bundled-dependencies@1.0.0'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'], await testDefaults({ fastUnpack: false })) - await project.isExecutable('pkg-with-bundled-dependencies/node_modules/.bin/hello-world-js-bin') + await project.isExecutable('@pnpm.e2e/pkg-with-bundled-dependencies/node_modules/.bin/hello-world-js-bin') const lockfile = await project.readLockfile() expect( - lockfile.packages['/pkg-with-bundled-dependencies/1.0.0'].bundledDependencies + lockfile.packages['/@pnpm.e2e/pkg-with-bundled-dependencies/1.0.0'].bundledDependencies ).toStrictEqual( - ['hello-world-js-bin'] + ['@pnpm.e2e/hello-world-js-bin'] ) }) test('bundleDependencies (pkg-with-bundle-dependencies@1.0.0)', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-bundle-dependencies@1.0.0'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'], await testDefaults({ fastUnpack: false })) - await project.isExecutable('pkg-with-bundle-dependencies/node_modules/.bin/hello-world-js-bin') + await project.isExecutable('@pnpm.e2e/pkg-with-bundle-dependencies/node_modules/.bin/hello-world-js-bin') const lockfile = await project.readLockfile() expect( - lockfile.packages['/pkg-with-bundle-dependencies/1.0.0'].bundledDependencies + lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies/1.0.0'].bundledDependencies ).toStrictEqual( - ['hello-world-js-bin'] + ['@pnpm.e2e/hello-world-js-bin'] ) }) test('installing a package with bundleDependencies set to false (pkg-with-bundle-dependencies-false)', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-bundle-dependencies-false'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies-false'], await testDefaults({ fastUnpack: false })) const lockfile = await project.readLockfile() expect( - typeof lockfile.packages['/pkg-with-bundle-dependencies-false/1.0.0'].bundledDependencies + typeof lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies-false/1.0.0'].bundledDependencies ).toEqual('undefined') }) @@ -556,7 +556,7 @@ test('compiled modules (ursa@0.9.1)', async () => { test('bin specified in the directories property linked to .bin folder', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-directories-bin'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-directories-bin'], await testDefaults({ fastUnpack: false })) await project.isExecutable('.bin/pkg-with-directories-bin') }) @@ -565,7 +565,7 @@ test('bin specified in the directories property symlinked to .bin folder when pr const project = prepareEmpty() const opts = await testDefaults({ fastUnpack: false, preferSymlinkedExecutables: true }) - await addDependenciesToPackage({}, ['pkg-with-directories-bin'], opts) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-directories-bin'], opts) await project.isExecutable('.bin/pkg-with-directories-bin') @@ -589,17 +589,17 @@ testOnNonWindows('building native addons', async () => { test('should update subdep on second install', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults({ save: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ save: true })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') let lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const reporter = sinon.spy() @@ -612,54 +612,54 @@ test('should update subdep on second install', async () => { prefix: process.cwd(), } as StatsLog)).toBeTruthy() - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') lockfile = await project.readLockfile() - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) - expect(deepRequireCwd(['pkg-with-1-dep', 'dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.1.0') + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-1-dep', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.1.0') }) test('should not update subdep when depth is smaller than depth of package', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults({ save: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ save: true })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') let lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await install(manifest, await testDefaults({ depth: 0, update: true })) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) - expect(deepRequireCwd(['pkg-with-1-dep', 'dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.0.0') + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-1-dep', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json']).version).toEqual('100.0.0') }) test('should install dependency in second project', async () => { const project1 = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ fastUnpack: false, save: true, store: '../store' })) - expect(project1.requireModule('pkg-with-1-dep')().name).toEqual('dep-of-pkg-with-1-dep') + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ fastUnpack: false, save: true, store: '../store' })) + expect(project1.requireModule('@pnpm.e2e/pkg-with-1-dep')().name).toEqual('@pnpm.e2e/dep-of-pkg-with-1-dep') const project2 = prepareEmpty() - await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ fastUnpack: false, save: true, store: '../store' })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ fastUnpack: false, save: true, store: '../store' })) - expect(project2.requireModule('pkg-with-1-dep')().name).toEqual('dep-of-pkg-with-1-dep') + expect(project2.requireModule('@pnpm.e2e/pkg-with-1-dep')().name).toEqual('@pnpm.e2e/dep-of-pkg-with-1-dep') }) test('should throw error when trying to install using a different store then the previous one', async () => { @@ -715,27 +715,27 @@ test('lockfile locks npm dependencies', async () => { const project = prepareEmpty() const reporter = sinon.spy() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults({ save: true, reporter })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ save: true, reporter })) expect(reporter.calledWithMatch({ level: 'debug', name: 'pnpm:progress', - packageId: `localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep/100.0.0`, + packageId: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep/100.0.0`, requester: process.cwd(), status: 'resolved', } as ProgressLog)).toBeTruthy() expect(reporter.calledWithMatch({ level: 'debug', - packageId: `localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep/100.0.0`, + packageId: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep/100.0.0`, requester: process.cwd(), status: 'fetched', } as ProgressLog)).toBeTruthy() - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await rimraf('node_modules') @@ -744,27 +744,28 @@ test('lockfile locks npm dependencies', async () => { expect(reporter.calledWithMatch({ level: 'debug', - packageId: `localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep/100.0.0`, + packageId: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep/100.0.0`, requester: process.cwd(), status: 'resolved', } as ProgressLog)).toBeTruthy() expect(reporter.calledWithMatch({ level: 'debug', - packageId: `localhost+${REGISTRY_MOCK_PORT}/pkg-with-1-dep/100.0.0`, + packageId: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-1-dep/100.0.0`, requester: process.cwd(), status: 'found_in_store', } as ProgressLog)).toBeTruthy() - const m = project.requireModule('.pnpm/pkg-with-1-dep@100.0.0/node_modules/dep-of-pkg-with-1-dep/package.json') + const m = project.requireModule('.pnpm/@pnpm.e2e+pkg-with-1-dep@100.0.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep/package.json') expect(m.version).toEqual('100.0.0') }) + test('self-require should work', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['uses-pkg-with-self-usage'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/uses-pkg-with-self-usage'], await testDefaults({ fastUnpack: false })) - expect(project.requireModule('uses-pkg-with-self-usage')).toBeTruthy() + expect(project.requireModule('@pnpm.e2e/uses-pkg-with-self-usage')).toBeTruthy() }) test('install on project with lockfile and no node_modules', async () => { @@ -788,18 +789,18 @@ test('install a dependency with * range', async () => { await install({ dependencies: { - 'has-beta-only': '*', + '@pnpm.e2e/has-beta-only': '*', }, }, await testDefaults({ reporter })) - await project.has('has-beta-only') + await project.has('@pnpm.e2e/has-beta-only') expect(reporter.calledWithMatch({ level: 'debug', name: 'pnpm:package-manifest', updated: { dependencies: { - 'has-beta-only': '*', + '@pnpm.e2e/has-beta-only': '*', }, } as ProjectManifest, } as PackageManifestLog)).toBeTruthy() @@ -837,9 +838,9 @@ test("don't fail on case insensitive filesystems when package has 2 files with s const reporter = sinon.spy() const opts = await testDefaults({ reporter }) - await addDependenciesToPackage({}, ['with-same-file-in-different-cases'], opts) + await addDependenciesToPackage({}, ['@pnpm.e2e/with-same-file-in-different-cases'], opts) - await project.has('with-same-file-in-different-cases') + await project.has('@pnpm.e2e/with-same-file-in-different-cases') }) // Covers https://github.com/pnpm/pnpm/issues/1134 @@ -902,14 +903,14 @@ test('reinstalls missing packages to node_modules during headless install', asyn }) test('do not update deps when lockfile is present', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) const project = prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['peer-a'], await testDefaults({ lockfileOnly: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/peer-a'], await testDefaults({ lockfileOnly: true })) const initialLockfile = await project.readLockfile() - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) await mutateModules([ { @@ -933,7 +934,7 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall buildIndex: 0, manifest: { dependencies: { - foobarqar: '1.0.0', + '@pnpm.e2e/foobarqar': '1.0.0', }, }, mutation: 'install', @@ -943,31 +944,31 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall await writeYamlFile(path.resolve('pnpm-lock.yaml'), { dependencies: { - foobarqar: '1.0.1', + '@pnpm.e2e/foobarqar': '1.0.1', }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/bar/100.0.0': { + '/@pnpm.e2e/bar/100.0.0': { dev: false, resolution: { - integrity: getIntegrity('bar', '100.0.0'), + integrity: getIntegrity('@pnpm.e2e/bar', '100.0.0'), }, }, - '/foo/100.1.0': { + '/@pnpm.e2e/foo/100.1.0': { dev: false, resolution: { - integrity: getIntegrity('foo', '100.1.0'), + integrity: getIntegrity('@pnpm.e2e/foo', '100.1.0'), }, }, - '/foobarqar/1.0.1': { + '/@pnpm.e2e/foobarqar/1.0.1': { dependencies: { - bar: '100.0.0', - foo: '100.1.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.1.0', 'is-positive': '3.1.0', }, dev: false, resolution: { - integrity: getIntegrity('foobarqar', '1.0.1'), + integrity: getIntegrity('@pnpm.e2e/foobarqar', '1.0.1'), }, }, '/is-positive/3.1.0': { @@ -981,7 +982,7 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall }, }, specifiers: { - foobarqar: '1.0.1', + '@pnpm.e2e/foobarqar': '1.0.1', }, }, { lineWidth: 1000 }) @@ -990,7 +991,7 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall buildIndex: 0, manifest: { dependencies: { - foobarqar: '1.0.1', + '@pnpm.e2e/foobarqar': '1.0.1', }, }, mutation: 'install', @@ -999,19 +1000,19 @@ test('all the subdeps of dependencies are linked when a node_modules is partiall ], await testDefaults({ preferFrozenLockfile: false })) expect( - [...await fs.readdir(path.resolve('node_modules/.pnpm/foobarqar@1.0.1/node_modules'))] + [...await fs.readdir(path.resolve('node_modules/.pnpm/@pnpm.e2e+foobarqar@1.0.1/node_modules/@pnpm.e2e'))].sort() ).toStrictEqual( [ 'bar', 'foo', 'foobarqar', 'qar', - ] + ].sort() ) }) test('subdep symlinks are updated if the lockfile has new subdep versions specified', async () => { - await addDistTag({ package: 'dep-of-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 project = prepareEmpty() await mutateModules([ @@ -1019,7 +1020,7 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif buildIndex: 0, manifest: { dependencies: { - 'parent-of-pkg-with-1-dep': '1.0.0', + '@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0', }, }, mutation: 'install', @@ -1033,45 +1034,45 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif Object.keys(lockfile.packages) ).toStrictEqual( [ - '/dep-of-pkg-with-1-dep/100.0.0', - '/parent-of-pkg-with-1-dep/1.0.0', - '/pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/parent-of-pkg-with-1-dep/1.0.0', + '/@pnpm.e2e/pkg-with-1-dep/100.0.0', ] ) await writeYamlFile(path.resolve('pnpm-lock.yaml'), { dependencies: { - 'parent-of-pkg-with-1-dep': '1.0.0', + '@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0', }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/dep-of-pkg-with-1-dep/100.1.0': { + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0': { dev: false, resolution: { - integrity: getIntegrity('dep-of-pkg-with-1-dep', '100.1.0'), + integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'), }, }, - '/parent-of-pkg-with-1-dep/1.0.0': { + '/@pnpm.e2e/parent-of-pkg-with-1-dep/1.0.0': { dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, dev: false, resolution: { - integrity: getIntegrity('parent-of-pkg-with-1-dep', '1.0.0'), + integrity: getIntegrity('@pnpm.e2e/parent-of-pkg-with-1-dep', '1.0.0'), }, }, - '/pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/pkg-with-1-dep/100.0.0': { dependencies: { - 'dep-of-pkg-with-1-dep': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0', }, dev: false, resolution: { - integrity: getIntegrity('pkg-with-1-dep', '100.0.0'), + integrity: getIntegrity('@pnpm.e2e/pkg-with-1-dep', '100.0.0'), }, }, }, specifiers: { - 'parent-of-pkg-with-1-dep': '1.0.0', + '@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0', }, }, { lineWidth: 1000 }) @@ -1080,7 +1081,7 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif buildIndex: 0, manifest: { dependencies: { - 'parent-of-pkg-with-1-dep': '1.0.0', + '@pnpm.e2e/parent-of-pkg-with-1-dep': '1.0.0', }, }, mutation: 'install', @@ -1088,7 +1089,7 @@ test('subdep symlinks are updated if the lockfile has new subdep versions specif }, ], await testDefaults({ preferFrozenLockfile: false })) - expect(await exists(path.resolve('node_modules/.pnpm/pkg-with-1-dep@100.0.0/node_modules/dep-of-pkg-with-1-dep/package.json'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-1-dep@100.0.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep/package.json'))).toBeTruthy() }) test('fail if none of the available resolvers support a version spec', async () => { @@ -1312,9 +1313,9 @@ test('two dependencies have the same version and name. The only difference is th test('installing a package with broken bin', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['broken-bin@1.0.0'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/broken-bin@1.0.0'], await testDefaults({ fastUnpack: false })) - await project.has('broken-bin') + await project.has('@pnpm.e2e/broken-bin') }) test('a package should be able to be a dependency of itself', async () => { diff --git a/packages/core/test/install/multipleImporters.ts b/packages/core/test/install/multipleImporters.ts index 66c5043f54c..07912c5ccf6 100644 --- a/packages/core/test/install/multipleImporters.ts +++ b/packages/core/test/install/multipleImporters.ts @@ -11,6 +11,7 @@ import { mutateModules, } from '@pnpm/core' import rimraf from '@zkochan/rimraf' +import { createPeersFolderSuffix } from 'dependency-path' import loadJsonFile from 'load-json-file' import exists from 'path-exists' import pick from 'ramda/src/pick' @@ -120,7 +121,7 @@ test('install only the dependencies of the specified importer. The current lockf version: '1.0.0', dependencies: { - foobar: '100.0.0', + '@pnpm.e2e/foobar': '100.0.0', }, }, mutation: 'install', @@ -133,7 +134,7 @@ test('install only the dependencies of the specified importer. The current lockf await mutateModules([ { ...importers[0], - dependencySelectors: ['pkg-with-1-dep'], + dependencySelectors: ['@pnpm.e2e/pkg-with-1-dep'], mutation: 'installSome', }, ], await testDefaults({ hoistPattern: '*' })) @@ -141,7 +142,7 @@ test('install only the dependencies of the specified importer. The current lockf const rootModules = assertProject(process.cwd()) const currentLockfile = await rootModules.readCurrentLockfile() expect(currentLockfile.importers).toHaveProperty(['project-3']) - expect(currentLockfile.packages).toHaveProperty(['/foobar/100.0.0']) + expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/foobar/100.0.0']) }) test('some projects were removed from the workspace and the ones that are left depend on them', async () => { @@ -473,26 +474,26 @@ test('headless install is used with an up-to-date lockfile when package referenc test('headless install is used when packages are not linked from the workspace (unless workspace ranges are used)', async () => { const foo = { - name: 'foo', + name: '@pnpm.e2e/foo', version: '1.0.0', dependencies: { - qar: 'workspace:*', + '@pnpm.e2e/qar': 'workspace:*', }, } const bar = { - name: 'bar', + name: '@pnpm.e2e/bar', version: '1.0.0', dependencies: { - qar: '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }, } const qar = { - name: 'qar', + name: '@pnpm.e2e/qar', version: '100.0.0', } - preparePackages([foo, bar, qar]) + preparePackages([{ location: 'foo', package: foo }, { location: 'bar', package: bar }, { location: 'qar', package: qar }]) const importers: MutatedProject[] = [ { @@ -515,7 +516,7 @@ test('headless install is used when packages are not linked from the workspace ( }, ] const workspacePackages = { - qar: { + '@pnpm.e2e/qar': { '100.0.0': { dir: path.resolve('qar'), manifest: qar, @@ -585,7 +586,7 @@ test('current lockfile contains only installed dependencies when adding a new im }) test('partial installation in a monorepo does not remove dependencies of other workspace projects', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) prepareEmpty() await mutateModules([ @@ -603,7 +604,7 @@ test('partial installation in a monorepo does not remove dependencies of other w buildIndex: 0, manifest: { dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -623,16 +624,16 @@ test('partial installation in a monorepo does not remove dependencies of other w }, 'project-2': { dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, specifiers: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/dep-of-pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': { dev: false, resolution: { integrity: 'sha512-RWObNQIluSr56fVbOwD75Dt5CE2aiPReTMMUblYEMEqUI+iJw5ovTyO7LzUG/VJ4iVL2uUrbkQ6+rq4z4WOdDw==', @@ -647,9 +648,9 @@ test('partial installation in a monorepo does not remove dependencies of other w integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==', }, }, - '/pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/pkg-with-1-dep/100.0.0': { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, dev: false, resolution: { @@ -673,12 +674,12 @@ test('partial installation in a monorepo does not remove dependencies of other w ], await testDefaults()) expect(await exists(path.resolve('node_modules/.pnpm/is-positive@2.0.0/node_modules/is-positive'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/.pnpm/pkg-with-1-dep@100.0.0/node_modules/pkg-with-1-dep'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/.pnpm/dep-of-pkg-with-1-dep@100.1.0/node_modules/dep-of-pkg-with-1-dep'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-1-dep@100.0.0/node_modules/@pnpm.e2e/pkg-with-1-dep'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+dep-of-pkg-with-1-dep@100.1.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep'))).toBeTruthy() }) test('partial installation in a monorepo does not remove dependencies of other workspace projects when lockfile is frozen', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) prepareEmpty() await mutateModules([ @@ -696,7 +697,7 @@ test('partial installation in a monorepo does not remove dependencies of other w buildIndex: 0, manifest: { dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -716,16 +717,16 @@ test('partial installation in a monorepo does not remove dependencies of other w }, 'project-2': { dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, specifiers: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/dep-of-pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': { dev: false, resolution: { integrity: 'sha512-RWObNQIluSr56fVbOwD75Dt5CE2aiPReTMMUblYEMEqUI+iJw5ovTyO7LzUG/VJ4iVL2uUrbkQ6+rq4z4WOdDw==', @@ -740,9 +741,9 @@ test('partial installation in a monorepo does not remove dependencies of other w integrity: 'sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==', }, }, - '/pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/pkg-with-1-dep/100.0.0': { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, dev: false, resolution: { @@ -766,8 +767,8 @@ test('partial installation in a monorepo does not remove dependencies of other w ], await testDefaults({ frozenLockfile: true })) expect(await exists(path.resolve('node_modules/.pnpm/is-positive@1.0.0/node_modules/is-positive'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/.pnpm/pkg-with-1-dep@100.0.0/node_modules/pkg-with-1-dep'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/.pnpm/dep-of-pkg-with-1-dep@100.1.0/node_modules/dep-of-pkg-with-1-dep'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-1-dep@100.0.0/node_modules/@pnpm.e2e/pkg-with-1-dep'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+dep-of-pkg-with-1-dep@100.1.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep'))).toBeTruthy() }) test('adding a new dependency with the workspace: protocol', async () => { @@ -1133,15 +1134,15 @@ test('remove dependencies of a project that was removed from the workspace (duri }) test('do not resolve a subdependency from the workspace by default', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) preparePackages([ { location: 'project', package: { name: 'project' }, }, { - location: 'dep-of-pkg-with-1-dep', - package: { name: 'dep-of-pkg-with-1-dep' }, + location: '@pnpm.e2e/dep-of-pkg-with-1-dep', + package: { name: '@pnpm.e2e/dep-of-pkg-with-1-dep' }, }, ]) @@ -1153,7 +1154,7 @@ test('do not resolve a subdependency from the workspace by default', async () => version: '1.0.0', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -1162,19 +1163,19 @@ test('do not resolve a subdependency from the workspace by default', async () => { buildIndex: 0, manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, mutation: 'install', - rootDir: path.resolve('dep-of-pkg-with-1-dep'), + rootDir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), }, ] const workspacePackages = { - 'dep-of-pkg-with-1-dep': { + '@pnpm.e2e/dep-of-pkg-with-1-dep': { '100.1.0': { - dir: path.resolve('dep-of-pkg-with-1-dep'), + dir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, }, @@ -1185,7 +1186,7 @@ test('do not resolve a subdependency from the workspace by default', async () => const project = assertProject(process.cwd()) const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.packages['/pkg-with-1-dep/100.0.0'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.1.0') + expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0') }) test('resolve a subdependency from the workspace', async () => { @@ -1195,8 +1196,8 @@ test('resolve a subdependency from the workspace', async () => { package: { name: 'project' }, }, { - location: 'dep-of-pkg-with-1-dep', - package: { name: 'dep-of-pkg-with-1-dep' }, + location: '@pnpm.e2e/dep-of-pkg-with-1-dep', + package: { name: '@pnpm.e2e/dep-of-pkg-with-1-dep' }, }, ]) @@ -1208,7 +1209,7 @@ test('resolve a subdependency from the workspace', async () => { version: '1.0.0', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -1217,19 +1218,19 @@ test('resolve a subdependency from the workspace', async () => { { buildIndex: 0, manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, mutation: 'install', - rootDir: path.resolve('dep-of-pkg-with-1-dep'), + rootDir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), }, ] const workspacePackages = { - 'dep-of-pkg-with-1-dep': { + '@pnpm.e2e/dep-of-pkg-with-1-dep': { '100.1.0': { - dir: path.resolve('dep-of-pkg-with-1-dep'), + dir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, }, @@ -1240,7 +1241,7 @@ test('resolve a subdependency from the workspace', async () => { const project = assertProject(process.cwd()) const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.packages['/pkg-with-1-dep/100.0.0'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('link:dep-of-pkg-with-1-dep') + expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep') await rimraf('node_modules') @@ -1252,15 +1253,15 @@ test('resolve a subdependency from the workspace', async () => { }) test('resolve a subdependency from the workspace and use it as a peer', async () => { - await addDistTag({ package: 'peer-c', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.1', distTag: 'latest' }) preparePackages([ { location: 'project', package: { name: 'project' }, }, { - location: 'peer-a', - package: { name: 'peer-a' }, + location: '@pnpm.e2e/peer-a', + package: { name: '@pnpm.e2e/peer-a' }, }, ]) @@ -1272,8 +1273,8 @@ test('resolve a subdependency from the workspace and use it as a peer', async () version: '1.0.0', dependencies: { - 'abc-grand-parent-with-c': '1.0.0', - 'abc-parent-with-ab': '1.0.0', + '@pnpm.e2e/abc-grand-parent-with-c': '1.0.0', + '@pnpm.e2e/abc-parent-with-ab': '1.0.0', }, }, mutation: 'install', @@ -1282,19 +1283,19 @@ test('resolve a subdependency from the workspace and use it as a peer', async () { buildIndex: 0, manifest: { - name: 'peer-a', + name: '@pnpm.e2e/peer-a', version: '1.0.1', }, mutation: 'install', - rootDir: path.resolve('peer-a'), + rootDir: path.resolve('@pnpm.e2e/peer-a'), }, ] const workspacePackages = { - 'peer-a': { + '@pnpm.e2e/peer-a': { '1.0.1': { - dir: path.resolve('peer-a'), + dir: path.resolve('@pnpm.e2e/peer-a'), manifest: { - name: 'peer-a', + name: '@pnpm.e2e/peer-a', version: '1.0.1', }, }, @@ -1305,21 +1306,23 @@ test('resolve a subdependency from the workspace and use it as a peer', async () const project = assertProject(process.cwd()) const wantedLockfile = await project.readLockfile() - expect(Object.keys(wantedLockfile.packages)).toStrictEqual( + const suffix1 = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '@pnpm.e2e+peer-a' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }]) + const suffix2 = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '@pnpm.e2e+peer-a' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.1' }]) + expect(Object.keys(wantedLockfile.packages).sort()).toStrictEqual( [ - '/abc-grand-parent-with-c/1.0.0', - '/abc-parent-with-ab/1.0.0', - '/abc-parent-with-ab/1.0.0_peer-c@1.0.1', - '/abc/1.0.0_f7z7ngphs5rjimyr5x4q43qtai', - '/abc/1.0.0_peer-a@peer-a+peer-b@1.0.0', - '/dep-of-pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/abc-grand-parent-with-c/1.0.0', + '/@pnpm.e2e/abc-parent-with-ab/1.0.0', + '/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.1', + `/@pnpm.e2e/abc/1.0.0${suffix1}`, + `/@pnpm.e2e/abc/1.0.0${suffix2}`, + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0', '/is-positive/1.0.0', - '/peer-b/1.0.0', - '/peer-c/1.0.1', - ] + '/@pnpm.e2e/peer-b/1.0.0', + '/@pnpm.e2e/peer-c/1.0.1', + ].sort() ) - expect(wantedLockfile.packages['/abc-parent-with-ab/1.0.0'].dependencies?.['peer-a']).toBe('link:peer-a') - expect(wantedLockfile.packages['/abc/1.0.0_peer-a@peer-a+peer-b@1.0.0'].dependencies?.['peer-a']).toBe('link:peer-a') + expect(wantedLockfile.packages['/@pnpm.e2e/abc-parent-with-ab/1.0.0'].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a') + expect(wantedLockfile.packages[`/@pnpm.e2e/abc/1.0.0${suffix1}`].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a') }) test('resolve a subdependency from the workspace, when it uses the workspace protocol', async () => { @@ -1329,8 +1332,8 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro package: { name: 'project' }, }, { - location: 'dep-of-pkg-with-1-dep', - package: { name: 'dep-of-pkg-with-1-dep' }, + location: '@pnpm.e2e/dep-of-pkg-with-1-dep', + package: { name: '@pnpm.e2e/dep-of-pkg-with-1-dep' }, }, ]) @@ -1342,7 +1345,7 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro version: '1.0.0', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -1351,26 +1354,26 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro { buildIndex: 0, manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, mutation: 'install', - rootDir: path.resolve('dep-of-pkg-with-1-dep'), + rootDir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), }, ] const workspacePackages = { - 'dep-of-pkg-with-1-dep': { + '@pnpm.e2e/dep-of-pkg-with-1-dep': { '100.1.0': { - dir: path.resolve('dep-of-pkg-with-1-dep'), + dir: path.resolve('@pnpm.e2e/dep-of-pkg-with-1-dep'), manifest: { - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, }, }, } const overrides = { - 'dep-of-pkg-with-1-dep': 'workspace:*', + '@pnpm.e2e/dep-of-pkg-with-1-dep': 'workspace:*', } await mutateModules(importers, await testDefaults({ linkWorkspacePackagesDepth: -1, @@ -1381,7 +1384,7 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro const project = assertProject(process.cwd()) const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.packages['/pkg-with-1-dep/100.0.0'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('link:dep-of-pkg-with-1-dep') + expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep') await rimraf('node_modules') @@ -1394,13 +1397,13 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro }) test('install the dependency that is already present in the workspace when adding a new direct dependency', async () => { - await addDistTag({ package: 'dep-of-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 manifest1: ProjectManifest = { name: 'project-1', version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '^100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '^100.0.0', }, } const manifest2: ProjectManifest = { name: 'project-2' } @@ -1432,13 +1435,13 @@ test('install the dependency that is already present in the workspace when addin ] await mutateModules(importers, await testDefaults()) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await mutateModules([ importers[0], { ...importers[1], - dependencySelectors: ['dep-of-pkg-with-1-dep'], + dependencySelectors: ['@pnpm.e2e/dep-of-pkg-with-1-dep'], mutation: 'installSome', }, ], await testDefaults({ @@ -1456,23 +1459,23 @@ test('install the dependency that is already present in the workspace when addin const rootModules = assertProject(process.cwd()) const currentLockfile = await rootModules.readCurrentLockfile() - expect(currentLockfile.importers['project-1'].specifiers?.['dep-of-pkg-with-1-dep']).toBe('^100.0.0') - expect(currentLockfile.importers['project-2'].specifiers?.['dep-of-pkg-with-1-dep']).toBe('^100.0.0') + expect(currentLockfile.importers['project-1'].specifiers?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^100.0.0') + expect(currentLockfile.importers['project-2'].specifiers?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^100.0.0') - expect(currentLockfile.importers['project-1'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(currentLockfile.importers['project-2'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(currentLockfile.importers['project-1'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(currentLockfile.importers['project-2'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') }) test('do not update dependency that has the same name as a dependency in the workspace', async () => { - await addDistTag({ package: 'dep-of-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 manifest1: ProjectManifest = { name: 'project-1', version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '^100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '^100.0.0', }, } - const manifest2: ProjectManifest = { name: 'dep-of-pkg-with-1-dep', version: '100.1.0' } + const manifest2: ProjectManifest = { name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0' } preparePackages([ { @@ -1506,7 +1509,7 @@ test('do not update dependency that has the same name as a dependency in the wor manifest: manifest1, }, }, - 'dep-of-pkg-with-1-dep': { + '@pnpm.e2e/dep-of-pkg-with-1-dep': { '100.1.0': { dir: path.resolve('project-2'), manifest: manifest2, @@ -1514,7 +1517,7 @@ test('do not update dependency that has the same name as a dependency in the wor }, } await mutateModules(importers, await testDefaults({ linkWorkspacePackagesDepth: -1, workspacePackages })) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await mutateModules([ { ...importers[0], @@ -1527,7 +1530,7 @@ test('do not update dependency that has the same name as a dependency in the wor const rootModules = assertProject(process.cwd()) const currentLockfile = await rootModules.readCurrentLockfile() expect(Object.keys(currentLockfile.packages)).toStrictEqual([ - '/dep-of-pkg-with-1-dep/100.0.0', + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0', '/is-negative/2.1.0', ]) }) diff --git a/packages/core/test/install/only.ts b/packages/core/test/install/only.ts index e99851db069..5d241e508ce 100644 --- a/packages/core/test/install/only.ts +++ b/packages/core/test/install/only.ts @@ -9,7 +9,7 @@ test('production install (with --production flag)', async () => { await install({ dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', 'write-yaml': '1.0.0', }, devDependencies: { @@ -30,7 +30,7 @@ test('production install (with --production flag)', async () => { expect(await exists(path.resolve('node_modules/.pnpm/@zkochan/foo@1.0.0'))).toBeFalsy() expect(await exists(path.resolve('node_modules/.pnpm/js-yaml@3.14.0'))).toBeTruthy() - await project.has('pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') await project.has('write-yaml') await project.hasNot('@zkochan/foo') await project.hasNot('js-yaml') @@ -41,7 +41,7 @@ test('production install with --no-optional', async () => { await install({ dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', 'write-yaml': '1.0.0', }, optionalDependencies: { @@ -62,7 +62,7 @@ test('production install with --no-optional', async () => { expect(await exists(path.resolve('node_modules/.pnpm/@zkochan/foo@1.0.0'))).toBeFalsy() expect(await exists(path.resolve('node_modules/.pnpm/js-yaml@3.14.0'))).toBeTruthy() - await project.has('pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') await project.has('write-yaml') await project.hasNot('@zkochan/foo') await project.hasNot('js-yaml') diff --git a/packages/core/test/install/optionalDependencies.ts b/packages/core/test/install/optionalDependencies.ts index 10eac330938..4e84ed733bd 100644 --- a/packages/core/test/install/optionalDependencies.ts +++ b/packages/core/test/install/optionalDependencies.ts @@ -38,13 +38,13 @@ test('skip non-existing optional dependency', async () => { 'is-positive': '*', }, optionalDependencies: { - 'i-do-not-exist': '1000', + '@pnpm.e2e/i-do-not-exist': '1000', }, }, await testDefaults({ reporter })) expect(reporter.calledWithMatch({ package: { - name: 'i-do-not-exist', + name: '@pnpm.e2e/i-do-not-exist', version: '1000', }, parents: [], @@ -64,22 +64,22 @@ test('skip optional dependency that does not support the current OS', async () = let manifest = await install({ optionalDependencies: { - 'not-compatible-with-any-os': '*', + '@pnpm.e2e/not-compatible-with-any-os': '*', }, }, await testDefaults({ reporter })) - await project.hasNot('not-compatible-with-any-os') - await project.storeHas('not-compatible-with-any-os', '1.0.0') - expect(await exists(path.resolve('node_modules/.pnpm/dep-of-optional-pkg@1.0.0'))).toBeFalsy() + await project.hasNot('@pnpm.e2e/not-compatible-with-any-os') + await project.storeHas('@pnpm.e2e/not-compatible-with-any-os', '1.0.0') + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+dep-of-optional-pkg@1.0.0'))).toBeFalsy() const lockfile = await project.readLockfile() - expect(lockfile.packages['/not-compatible-with-any-os/1.0.0']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']).toBeTruthy() // optional dependencies always get requiresBuild: true // this is to resolve https://github.com/pnpm/pnpm/issues/2038 - expect(lockfile.packages['/not-compatible-with-any-os/1.0.0'].requiresBuild).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].requiresBuild).toBeTruthy() - expect(lockfile.packages['/dep-of-optional-pkg/1.0.0']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0']).toBeTruthy() const currentLockfile = await project.readCurrentLockfile() @@ -87,14 +87,14 @@ test('skip optional dependency that does not support the current OS', async () = const modulesInfo = await readYamlFile<{skipped: string[]}>(path.join('node_modules', '.modules.yaml')) expect(modulesInfo.skipped).toStrictEqual([ - '/dep-of-optional-pkg/1.0.0', - '/not-compatible-with-any-os/1.0.0', + '/@pnpm.e2e/dep-of-optional-pkg/1.0.0', + '/@pnpm.e2e/not-compatible-with-any-os/1.0.0', ]) const logMatcher = sinon.match({ package: { - id: `localhost+${REGISTRY_MOCK_PORT}/not-compatible-with-any-os/1.0.0`, - name: 'not-compatible-with-any-os', + id: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/not-compatible-with-any-os/1.0.0`, + name: '@pnpm.e2e/not-compatible-with-any-os', version: '1.0.0', }, reason: 'unsupported_platform', @@ -102,15 +102,15 @@ test('skip optional dependency that does not support the current OS', async () = const reportedTimes = reporter.withArgs(logMatcher).callCount expect(reportedTimes).toBe(1) - console.log('a previously skipped package is successfully installed') + // a previously skipped package is successfully installed - manifest = await addDependenciesToPackage(manifest, ['dep-of-optional-pkg'], await testDefaults()) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-optional-pkg'], await testDefaults()) - await project.has('dep-of-optional-pkg') + await project.has('@pnpm.e2e/dep-of-optional-pkg') { const modules = await project.readModulesManifest() - expect(modules?.skipped).toStrictEqual(['/not-compatible-with-any-os/1.0.0']) + expect(modules?.skipped).toStrictEqual(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) } await rimraf('node_modules') @@ -127,12 +127,12 @@ test('skip optional dependency that does not support the current OS', async () = await testDefaults({ frozenLockfile: true }) ) - await project.hasNot('not-compatible-with-any-os') - await project.has('dep-of-optional-pkg') + await project.hasNot('@pnpm.e2e/not-compatible-with-any-os') + await project.has('@pnpm.e2e/dep-of-optional-pkg') { const modules = await project.readModulesManifest() - expect(modules?.skipped).toStrictEqual(['/not-compatible-with-any-os/1.0.0']) + expect(modules?.skipped).toStrictEqual(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) } }) @@ -142,17 +142,17 @@ test('skip optional dependency that does not support the current Node version', await install({ optionalDependencies: { - 'for-legacy-node': '*', + '@pnpm.e2e/for-legacy-node': '*', }, }, await testDefaults({ reporter })) - await project.hasNot('for-legacy-node') - await project.storeHas('for-legacy-node', '1.0.0') + await project.hasNot('@pnpm.e2e/for-legacy-node') + await project.storeHas('@pnpm.e2e/for-legacy-node', '1.0.0') const logMatcher = sinon.match({ package: { - id: `localhost+${REGISTRY_MOCK_PORT}/for-legacy-node/1.0.0`, - name: 'for-legacy-node', + id: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/for-legacy-node/1.0.0`, + name: '@pnpm.e2e/for-legacy-node', version: '1.0.0', }, reason: 'unsupported_engine', @@ -167,7 +167,7 @@ test('skip optional dependency that does not support the current pnpm version', await install({ optionalDependencies: { - 'for-legacy-pnpm': '*', + '@pnpm.e2e/for-legacy-pnpm': '*', }, }, await testDefaults({ reporter, @@ -175,13 +175,13 @@ test('skip optional dependency that does not support the current pnpm version', pnpmVersion: '4.0.0', })) - await project.hasNot('for-legacy-pnpm') - await project.storeHas('for-legacy-pnpm', '1.0.0') + await project.hasNot('@pnpm.e2e/for-legacy-pnpm') + await project.storeHas('@pnpm.e2e/for-legacy-pnpm', '1.0.0') const logMatcher = sinon.match({ package: { - id: `localhost+${REGISTRY_MOCK_PORT}/for-legacy-pnpm/1.0.0`, - name: 'for-legacy-pnpm', + id: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/for-legacy-pnpm/1.0.0`, + name: '@pnpm.e2e/for-legacy-pnpm', version: '1.0.0', }, reason: 'unsupported_engine', @@ -195,12 +195,12 @@ test('don\'t skip optional dependency that does not support the current OS when await install({ optionalDependencies: { - 'not-compatible-with-any-os': '*', + '@pnpm.e2e/not-compatible-with-any-os': '*', }, }, await testDefaults({}, {}, {}, { force: true })) - await project.has('not-compatible-with-any-os') - await project.storeHas('not-compatible-with-any-os', '1.0.0') + await project.has('@pnpm.e2e/not-compatible-with-any-os') + await project.storeHas('@pnpm.e2e/not-compatible-with-any-os', '1.0.0') }) // Covers https://github.com/pnpm/pnpm/issues/2636 @@ -224,7 +224,7 @@ test('optional subdependency is not removed from current lockfile when new depen version: '1.0.0', dependencies: { - 'pkg-with-optional': '1.0.0', + '@pnpm.e2e/pkg-with-optional': '1.0.0', }, }, mutation: 'install', @@ -246,10 +246,10 @@ test('optional subdependency is not removed from current lockfile when new depen { const modulesInfo = await readYamlFile<{ skipped: string[] }>(path.join('node_modules', '.modules.yaml')) - expect(modulesInfo.skipped).toStrictEqual(['/dep-of-optional-pkg/1.0.0', '/not-compatible-with-any-os/1.0.0']) + expect(modulesInfo.skipped).toStrictEqual(['/@pnpm.e2e/dep-of-optional-pkg/1.0.0', '/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) const currentLockfile = await readYamlFile(path.resolve('node_modules/.pnpm/lock.yaml')) - expect(currentLockfile.packages).toHaveProperty(['/not-compatible-with-any-os/1.0.0']) + expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) } await mutateModules([ @@ -262,7 +262,7 @@ test('optional subdependency is not removed from current lockfile when new depen { const currentLockfile = await readYamlFile(path.resolve('node_modules/.pnpm/lock.yaml')) - expect(currentLockfile.packages).toHaveProperty(['/not-compatible-with-any-os/1.0.0']) + expect(currentLockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) } }) @@ -270,20 +270,20 @@ test('optional subdependency is skipped', async () => { const project = prepareEmpty() const reporter = sinon.spy() - const manifest = await addDependenciesToPackage({}, ['pkg-with-optional', 'dep-of-optional-pkg'], await testDefaults({ reporter })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-optional', '@pnpm.e2e/dep-of-optional-pkg'], await testDefaults({ reporter })) { const modulesInfo = await readYamlFile<{ skipped: string[] }>(path.join('node_modules', '.modules.yaml')) - expect(modulesInfo.skipped).toStrictEqual(['/not-compatible-with-any-os/1.0.0']) + expect(modulesInfo.skipped).toStrictEqual(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) } - expect(await exists('node_modules/.pnpm/pkg-with-optional@1.0.0')).toBeTruthy() - expect(await exists('node_modules/.pnpm/not-compatible-with-any-os@1.0.0')).toBeFalsy() + expect(await exists('node_modules/.pnpm/@pnpm.e2e+pkg-with-optional@1.0.0')).toBeTruthy() + expect(await exists('node_modules/.pnpm/@pnpm.e2e+not-compatible-with-any-os@1.0.0')).toBeFalsy() const logMatcher = sinon.match({ package: { - id: `localhost+${REGISTRY_MOCK_PORT}/not-compatible-with-any-os/1.0.0`, - name: 'not-compatible-with-any-os', + id: `localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/not-compatible-with-any-os/1.0.0`, + name: '@pnpm.e2e/not-compatible-with-any-os', version: '1.0.0', }, reason: 'unsupported_platform', @@ -291,7 +291,7 @@ test('optional subdependency is skipped', async () => { const reportedTimes = reporter.withArgs(logMatcher).callCount expect(reportedTimes).toBe(1) - console.log('recreate the lockfile with optional dependencies present') + // recreate the lockfile with optional dependencies present expect(await exists('pnpm-lock.yaml')).toBeTruthy() await rimraf('pnpm-lock.yaml') @@ -311,9 +311,9 @@ test('optional subdependency is skipped', async () => { const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages).length).toBe(3) - expect(lockfile.packages).toHaveProperty(['/not-compatible-with-any-os/1.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) - console.log('forced headless install should install non-compatible optional deps') + // forced headless install should install non-compatible optional deps // TODO: move next case to @pnpm/headless tests await mutateModules( @@ -328,7 +328,7 @@ test('optional subdependency is skipped', async () => { await testDefaults({ force: true, frozenLockfile: true }) ) - expect(await exists('node_modules/.pnpm/not-compatible-with-any-os@1.0.0')).toBeTruthy() + expect(await exists('node_modules/.pnpm/@pnpm.e2e+not-compatible-with-any-os@1.0.0')).toBeTruthy() { const modulesInfo = await readYamlFile<{ skipped: string[] }>(path.join('node_modules', '.modules.yaml')) @@ -341,15 +341,15 @@ test('optional subdependency of newly added optional dependency is skipped', asy const project = prepareEmpty() const reporter = sinon.spy() - await addDependenciesToPackage({}, ['pkg-with-optional'], await testDefaults({ reporter, targetDependenciesField: 'optionalDependencies' })) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-optional'], await testDefaults({ reporter, targetDependenciesField: 'optionalDependencies' })) const modulesInfo = await readYamlFile<{ skipped: string[] }>(path.join('node_modules', '.modules.yaml')) - expect(modulesInfo.skipped).toStrictEqual(['/dep-of-optional-pkg/1.0.0', '/not-compatible-with-any-os/1.0.0']) + expect(modulesInfo.skipped).toStrictEqual(['/@pnpm.e2e/dep-of-optional-pkg/1.0.0', '/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages).length).toBe(3) - expect(lockfile.packages).toHaveProperty(['/not-compatible-with-any-os/1.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/not-compatible-with-any-os/1.0.0']) }) test('only that package is skipped which is an optional dependency only and not installable', async () => { @@ -357,9 +357,9 @@ test('only that package is skipped which is an optional dependency only and not const reporter = sinon.spy() const manifest = await addDependenciesToPackage({}, [ - 'peer-c@1.0.0', - 'has-optional-dep-with-peer', - 'not-compatible-with-any-os-and-has-peer', + '@pnpm.e2e/peer-c@1.0.0', + '@pnpm.e2e/has-optional-dep-with-peer', + '@pnpm.e2e/not-compatible-with-any-os-and-has-peer', ], await testDefaults({ reporter })) { @@ -368,7 +368,7 @@ test('only that package is skipped which is an optional dependency only and not } const lockfile = await project.readLockfile() - expect(typeof lockfile.packages['/dep-of-optional-pkg/1.0.0'].optional).toBe('undefined') + expect(typeof lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0'].optional).toBe('undefined') await rimraf('node_modules') @@ -398,7 +398,7 @@ test('not installing optional dependencies when optional is false', async () => await install( { dependencies: { - 'pkg-with-good-optional': '*', + '@pnpm.e2e/pkg-with-good-optional': '*', }, optionalDependencies: { 'is-positive': '1.0.0', @@ -414,10 +414,10 @@ test('not installing optional dependencies when optional is false', async () => ) await project.hasNot('is-positive') - await project.has('pkg-with-good-optional') + await project.has('@pnpm.e2e/pkg-with-good-optional') - expect(deepRequireCwd(['pkg-with-good-optional', 'dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() - expect(deepRequireCwd.silent(['pkg-with-good-optional', 'is-positive', './package.json'])).toBeFalsy() + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-good-optional', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() + expect(deepRequireCwd.silent(['@pnpm.e2e/pkg-with-good-optional', 'is-positive', './package.json'])).toBeFalsy() }) test('optional dependency has bigger priority than regular dependency', async () => { @@ -490,7 +490,7 @@ test('skip optional dependency that does not support the current OS, when doing version: '1.0.0', optionalDependencies: { - 'not-compatible-with-any-os': '*', + '@pnpm.e2e/not-compatible-with-any-os': '*', }, }, mutation: 'install', @@ -503,7 +503,7 @@ test('skip optional dependency that does not support the current OS, when doing version: '1.0.0', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, mutation: 'install', @@ -534,21 +534,21 @@ test('skip optional dependency that does not support the current OS, when doing const modulesInfo = await readYamlFile<{skipped: string[]}>(path.join('node_modules', '.modules.yaml')) expect(modulesInfo.skipped).toStrictEqual([ - '/dep-of-optional-pkg/1.0.0', - '/not-compatible-with-any-os/1.0.0', + '/@pnpm.e2e/dep-of-optional-pkg/1.0.0', + '/@pnpm.e2e/not-compatible-with-any-os/1.0.0', ]) }) test('do not fail on unsupported dependency of optional dependency', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['not-compatible-with-not-compatible-dep@1.0.0'], + await addDependenciesToPackage({}, ['@pnpm.e2e/not-compatible-with-not-compatible-dep@1.0.0'], await testDefaults({ targetDependenciesField: 'optionalDependencies' }, {}, {}, { engineStrict: true }) ) const lockfile = await project.readLockfile() - expect(lockfile.packages['/not-compatible-with-any-os/1.0.0'].optional).toBeTruthy() - expect(lockfile.packages['/dep-of-optional-pkg/1.0.0']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os/1.0.0'].optional).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg/1.0.0']).toBeTruthy() }) test('fail on unsupported dependency of optional dependency', async () => { @@ -556,7 +556,7 @@ test('fail on unsupported dependency of optional dependency', async () => { await expect( addDependenciesToPackage( {}, - ['has-not-compatible-dep@1.0.0'], + ['@pnpm.e2e/has-not-compatible-dep@1.0.0'], await testDefaults({ targetDependenciesField: 'optionalDependencies' }, {}, {}, { engineStrict: true }) ) ).rejects.toThrow() diff --git a/packages/core/test/install/overrides.ts b/packages/core/test/install/overrides.ts index 51bf8eb5df7..19bfd6ca72e 100644 --- a/packages/core/test/install/overrides.ts +++ b/packages/core/test/install/overrides.ts @@ -9,29 +9,29 @@ import { test('versions are replaced with versions specified through overrides option', async () => { const project = prepareEmpty() - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) const overrides = { - 'foobarqar>foo': 'npm:qar@100.0.0', - 'bar@^100.0.0': '100.1.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/bar@^100.0.0': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', } const manifest = await addDependenciesToPackage({}, - ['pkg-with-1-dep@100.0.0', 'foobar@100.0.0', 'foobarqar@1.0.0'], + ['@pnpm.e2e/pkg-with-1-dep@100.0.0', '@pnpm.e2e/foobar@100.0.0', '@pnpm.e2e/foobarqar@1.0.0'], await testDefaults({ overrides }) ) { const lockfile = await project.readLockfile() - expect(lockfile.packages['/foobarqar/1.0.0'].dependencies?.['foo']).toBe('/qar/100.0.0') - expect(lockfile.packages['/foobar/100.0.0'].dependencies?.['foo']).toBe('100.0.0') - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/101.0.0']) - expect(lockfile.packages).toHaveProperty(['/bar/100.1.0']) + expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('/@pnpm.e2e/qar/100.0.0') + expect(lockfile.packages['/@pnpm.e2e/foobar/100.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0') + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar/100.1.0']) expect(lockfile.overrides).toStrictEqual({ - 'foobarqar>foo': 'npm:qar@100.0.0', - 'bar@^100.0.0': '100.1.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/bar@^100.0.0': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }) const currentLockfile = await project.readCurrentLockfile() expect(lockfile.overrides).toStrictEqual(currentLockfile.overrides) @@ -47,9 +47,9 @@ test('versions are replaced with versions specified through overrides option', a ], { ...await testDefaults(), ignorePackageManifest: true, overrides }) // The lockfile is updated if the overrides are changed - overrides['bar@^100.0.0'] = '100.0.0' + overrides['@pnpm.e2e/bar@^100.0.0'] = '100.0.0' // A direct dependency may be overriden as well - overrides['foobarqar'] = '1.0.1' + overrides['@pnpm.e2e/foobarqar'] = '1.0.1' await mutateModules([ { buildIndex: 0, @@ -61,14 +61,14 @@ test('versions are replaced with versions specified through overrides option', a { const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/101.0.0']) - expect(lockfile.packages).toHaveProperty(['/bar/100.0.0']) - expect(lockfile.packages).toHaveProperty(['/foobarqar/1.0.1']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1']) expect(lockfile.overrides).toStrictEqual({ - foobarqar: '1.0.1', - 'foobarqar>foo': 'npm:qar@100.0.0', - 'bar@^100.0.0': '100.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foobarqar': '1.0.1', + '@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/bar@^100.0.0': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }) const currentLockfile = await project.readCurrentLockfile() expect(lockfile.overrides).toStrictEqual(currentLockfile.overrides) @@ -86,16 +86,16 @@ test('versions are replaced with versions specified through overrides option', a { const lockfile = await project.readLockfile() expect(lockfile.overrides).toStrictEqual({ - foobarqar: '1.0.1', - 'foobarqar>foo': 'npm:qar@100.0.0', - 'bar@^100.0.0': '100.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foobarqar': '1.0.1', + '@pnpm.e2e/foobarqar>@pnpm.e2e/foo': 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/bar@^100.0.0': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }) const currentLockfile = await project.readCurrentLockfile() expect(lockfile.overrides).toStrictEqual(currentLockfile.overrides) } - overrides['bar@^100.0.0'] = '100.0.1' + overrides['@pnpm.e2e/bar@^100.0.0'] = '100.0.1' await expect( mutateModules([ { @@ -115,32 +115,32 @@ test('versions are replaced with versions specified through overrides option', a test('when adding a new dependency that is present in the overrides, use the spec from the override', async () => { prepareEmpty() - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) const overrides = { - bar: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', } const manifest = await addDependenciesToPackage({}, - ['bar'], + ['@pnpm.e2e/bar'], await testDefaults({ overrides }) ) - expect(manifest.dependencies?.bar).toBe(overrides.bar) + expect(manifest.dependencies?.['@pnpm.e2e/bar']).toBe(overrides['@pnpm.e2e/bar']) }) test('explicitly specifying a version at install will ignore overrides', async () => { prepareEmpty() - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) const overrides = { - bar: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', } const EXACT_VERSION = '100.0.0' const manifest = await addDependenciesToPackage({}, - [`bar@${EXACT_VERSION}`], + [`@pnpm.e2e/bar@${EXACT_VERSION}`], await testDefaults({ overrides }) ) - expect(manifest.dependencies?.bar).toBe(EXACT_VERSION) + expect(manifest.dependencies?.['@pnpm.e2e/bar']).toBe(EXACT_VERSION) }) diff --git a/packages/core/test/install/packageExtensions.ts b/packages/core/test/install/packageExtensions.ts index 58fa17a6d0d..f4bfddfb28f 100644 --- a/packages/core/test/install/packageExtensions.ts +++ b/packages/core/test/install/packageExtensions.ts @@ -12,7 +12,7 @@ test('manifests are extended with fields specified by packageExtensions', async const packageExtensions = { 'is-positive': { dependencies: { - bar: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', }, }, } @@ -24,11 +24,11 @@ test('manifests are extended with fields specified by packageExtensions', async { const lockfile = await project.readLockfile() - expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['bar']).toBe('100.1.0') + expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0') expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({ 'is-positive': { dependencies: { - bar: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', }, }, })) @@ -37,7 +37,7 @@ test('manifests are extended with fields specified by packageExtensions', async } // The lockfile is updated if the overrides are changed - packageExtensions['is-positive'].dependencies!['foobar'] = '100.0.0' + packageExtensions['is-positive'].dependencies!['@pnpm.e2e/foobar'] = '100.0.0' await mutateModules([ { buildIndex: 0, @@ -49,12 +49,12 @@ test('manifests are extended with fields specified by packageExtensions', async { const lockfile = await project.readLockfile() - expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['foobar']).toBe('100.0.0') + expect(lockfile.packages['/is-positive/1.0.0'].dependencies?.['@pnpm.e2e/foobar']).toBe('100.0.0') expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({ 'is-positive': { dependencies: { - bar: '100.1.0', - foobar: '100.0.0', + '@pnpm.e2e/bar': '100.1.0', + '@pnpm.e2e/foobar': '100.0.0', }, }, })) @@ -76,8 +76,8 @@ test('manifests are extended with fields specified by packageExtensions', async expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({ 'is-positive': { dependencies: { - bar: '100.1.0', - foobar: '100.0.0', + '@pnpm.e2e/bar': '100.1.0', + '@pnpm.e2e/foobar': '100.0.0', }, }, })) @@ -85,7 +85,7 @@ test('manifests are extended with fields specified by packageExtensions', async expect(lockfile.packageExtensionsChecksum).toStrictEqual(currentLockfile.packageExtensionsChecksum) } - packageExtensions['is-positive'].dependencies!['bar'] = '100.0.1' + packageExtensions['is-positive'].dependencies!['@pnpm.e2e/bar'] = '100.0.1' await expect( mutateModules([ { diff --git a/packages/core/test/install/peerDependencies.ts b/packages/core/test/install/peerDependencies.ts index ae60626ce97..4b899e874cc 100644 --- a/packages/core/test/install/peerDependencies.ts +++ b/packages/core/test/install/peerDependencies.ts @@ -17,22 +17,23 @@ import rimraf from '@zkochan/rimraf' import exists from 'path-exists' import sinon from 'sinon' import deepRequireCwd from 'deep-require-cwd' +import { createPeersFolderSuffix } from 'dependency-path' import { testDefaults } from '../utils' const f = fixtures(__dirname) test("don't fail when peer dependency is fetched from GitHub", async () => { prepareEmpty() - await addDependenciesToPackage({}, ['test-pnpm-peer-deps'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/test-pnpm-peer-deps'], await testDefaults()) }) test('peer dependency is grouped with dependency when peer is resolved not from a top dependency', async () => { const project = prepareEmpty() const opts = await testDefaults() - let manifest = await addDependenciesToPackage({}, ['using-ajv'], opts) + let manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/using-ajv'], opts) expect(await exists(path.resolve('node_modules/.pnpm/ajv-keywords@1.5.0_ajv@4.10.4/node_modules/ajv'))).toBeTruthy() - expect(deepRequireCwd(['using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') + expect(deepRequireCwd(['@pnpm.e2e/using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') // testing that peers are reinstalled correctly using info from the lockfile await rimraf('node_modules') @@ -40,13 +41,13 @@ test('peer dependency is grouped with dependency when peer is resolved not from manifest = await install(manifest, await testDefaults()) expect(await exists(path.resolve('node_modules/.pnpm/ajv-keywords@1.5.0_ajv@4.10.4/node_modules/ajv'))).toBeTruthy() - expect(deepRequireCwd(['using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') + expect(deepRequireCwd(['@pnpm.e2e/using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') - await addDependenciesToPackage(manifest, ['using-ajv'], await testDefaults({ update: true })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/using-ajv'], await testDefaults({ update: true })) const lockfile = await project.readLockfile() - expect(lockfile.packages['/using-ajv/1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0_ajv@4.10.4') + expect(lockfile.packages['/@pnpm.e2e/using-ajv/1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0_ajv@4.10.4') // covers https://github.com/pnpm/pnpm/issues/1150 expect(lockfile.packages).toHaveProperty(['/ajv-keywords/1.5.0_ajv@4.10.4']) }) @@ -58,11 +59,11 @@ test('nothing is needlessly removed from node_modules', async () => { modulesCacheMaxAge: 0, strictPeerDependencies: false, }) - const manifest = await addDependenciesToPackage({}, ['using-ajv', 'ajv-keywords@1.5.0'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/using-ajv', 'ajv-keywords@1.5.0'], opts) expect(await exists(path.resolve('node_modules/.pnpm/ajv-keywords@1.5.0_ajv@4.10.4/node_modules/ajv'))).toBeTruthy() expect(await exists(path.resolve('node_modules/.pnpm/ajv-keywords@1.5.0/node_modules/ajv-keywords'))).toBeTruthy() - expect(deepRequireCwd(['using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') + expect(deepRequireCwd(['@pnpm.e2e/using-ajv', 'ajv-keywords', 'ajv', './package.json']).version).toBe('4.10.4') await mutateModules([ { @@ -230,11 +231,11 @@ test('strict-peer-dependencies: error is thrown when cannot resolve peer depende test('warning is reported when cannot resolve peer dependency for non-top-level dependency', async () => { prepareEmpty() - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) const reporter = jest.fn() - await addDependenciesToPackage({}, ['abc-grand-parent-without-c'], await testDefaults({ reporter, strictPeerDependencies: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-without-c'], await testDefaults({ reporter, strictPeerDependencies: false })) expect(reporter).toHaveBeenCalledWith( expect.objectContaining({ @@ -244,19 +245,19 @@ test('warning is reported when cannot resolve peer dependency for non-top-level '.': { bad: {}, missing: { - 'peer-c': [ + '@pnpm.e2e/peer-c': [ { parents: [ { - name: 'abc-grand-parent-without-c', + name: '@pnpm.e2e/abc-grand-parent-without-c', version: '1.0.0', }, { - name: 'abc-parent-with-ab', + name: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', }, { - name: 'abc', + name: '@pnpm.e2e/abc', version: '1.0.0', }, ], @@ -266,7 +267,7 @@ test('warning is reported when cannot resolve peer dependency for non-top-level ], }, conflicts: [], - intersections: { 'peer-c': '^1.0.0' }, + intersections: { '@pnpm.e2e/peer-c': '^1.0.0' }, }, }, }) @@ -274,12 +275,12 @@ test('warning is reported when cannot resolve peer dependency for non-top-level }) test('warning is reported when bad version of resolved peer dependency for non-top-level dependency', async () => { - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) prepareEmpty() const reporter = jest.fn() - await addDependenciesToPackage({}, ['abc-grand-parent-without-c', 'peer-c@2'], await testDefaults({ reporter, strictPeerDependencies: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-without-c', '@pnpm.e2e/peer-c@2'], await testDefaults({ reporter, strictPeerDependencies: false })) expect(reporter).toHaveBeenCalledWith( expect.objectContaining({ @@ -288,19 +289,19 @@ test('warning is reported when bad version of resolved peer dependency for non-t issuesByProjects: { '.': { bad: { - 'peer-c': [ + '@pnpm.e2e/peer-c': [ { parents: [ { - name: 'abc-grand-parent-without-c', + name: '@pnpm.e2e/abc-grand-parent-without-c', version: '1.0.0', }, { - name: 'abc-parent-with-ab', + name: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', }, { - name: 'abc', + name: '@pnpm.e2e/abc', version: '1.0.0', }, ], @@ -321,15 +322,15 @@ test('warning is reported when bad version of resolved peer dependency for non-t }) test('strict-peer-dependencies: error is thrown when bad version of resolved peer dependency for non-top-level dependency', async () => { - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) prepareEmpty() let err!: PeerDependencyIssuesError try { await install({ dependencies: { - 'abc-grand-parent-without-c': '1.0.0', - 'peer-c': '2', + '@pnpm.e2e/abc-grand-parent-without-c': '1.0.0', + '@pnpm.e2e/peer-c': '2', }, }, await testDefaults({ strictPeerDependencies: true })) } catch (_err: any) { // eslint-disable-line @@ -338,19 +339,19 @@ test('strict-peer-dependencies: error is thrown when bad version of resolved pee expect(err?.issuesByProjects['.']).toStrictEqual({ bad: { - 'peer-c': [ + '@pnpm.e2e/peer-c': [ { parents: [ { - name: 'abc-grand-parent-without-c', + name: '@pnpm.e2e/abc-grand-parent-without-c', version: '1.0.0', }, { - name: 'abc-parent-with-ab', + name: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', }, { - name: 'abc', + name: '@pnpm.e2e/abc', version: '1.0.0', }, ], @@ -370,36 +371,36 @@ test('strict-peer-dependencies: error is thrown when bad version of resolved pee test('top peer dependency is linked on subsequent install', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['peer-c@1.0.0'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/peer-c@1.0.0'], await testDefaults()) - await addDependenciesToPackage(manifest, ['abc-parent-with-ab@1.0.0'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc-parent-with-ab@1.0.0'], await testDefaults()) - expect(await exists(path.resolve('node_modules/.pnpm/abc-parent-with-ab@1.0.0/node_modules/abc-parent-with-ab'))).toBeFalsy() - expect(await exists(path.resolve('node_modules/.pnpm/abc-parent-with-ab@1.0.0_peer-c@1.0.0/node_modules/abc-parent-with-ab'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0/node_modules/@pnpm.e2e/abc-parent-with-ab'))).toBeFalsy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-parent-with-ab'))).toBeTruthy() }) test('top peer dependency is linked on subsequent install, through transitive peer', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent@1.0.0'], await testDefaults({ strictPeerDependencies: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent@1.0.0'], await testDefaults({ strictPeerDependencies: false })) - await addDependenciesToPackage(manifest, ['peer-c@1.0.0'], await testDefaults({ strictPeerDependencies: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/peer-c@1.0.0'], await testDefaults({ strictPeerDependencies: false })) - expect(await exists(path.resolve('node_modules/.pnpm/abc-grand-parent@1.0.0_peer-c@1.0.0/node_modules/abc-grand-parent'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-grand-parent@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-grand-parent'))).toBeTruthy() }) test('the list of transitive peer dependencies is kept up to date', async () => { const project = prepareEmpty() - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent@1.0.0', 'peer-c@1.0.0'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent@1.0.0', '@pnpm.e2e/peer-c@1.0.0'], await testDefaults()) - await addDistTag({ package: 'abc-parent-with-ab', version: '1.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.1.0', distTag: 'latest' }) - expect(await exists(path.resolve('node_modules/.pnpm/abc-grand-parent@1.0.0_peer-c@1.0.0/node_modules/abc-grand-parent'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-grand-parent@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-grand-parent'))).toBeTruthy() { const lockfile = await project.readLockfile() - expect(lockfile.packages['/abc-grand-parent/1.0.0_peer-c@1.0.0'].transitivePeerDependencies).toStrictEqual(['peer-c']) + expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent/1.0.0_@pnpm.e2e+peer-c@1.0.0'].transitivePeerDependencies).toStrictEqual(['@pnpm.e2e/peer-c']) } await mutateModules([ @@ -411,24 +412,24 @@ test('the list of transitive peer dependencies is kept up to date', async () => }, ], await testDefaults({ update: true, depth: Infinity })) - expect(await exists(path.resolve('node_modules/.pnpm/abc-grand-parent@1.0.0/node_modules/abc-grand-parent'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-grand-parent@1.0.0/node_modules/@pnpm.e2e/abc-grand-parent'))).toBeTruthy() { const lockfile = await project.readLockfile() - expect(lockfile.packages['/abc-grand-parent/1.0.0'].transitivePeerDependencies).toBeFalsy() + expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent/1.0.0'].transitivePeerDependencies).toBeFalsy() } }) test('top peer dependency is linked on subsequent install. Reverse order', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['abc-parent-with-ab@1.0.0'], await testDefaults({ strictPeerDependencies: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-parent-with-ab@1.0.0'], await testDefaults({ strictPeerDependencies: false })) - await addDependenciesToPackage(manifest, ['peer-c@1.0.0'], await testDefaults({ modulesCacheMaxAge: 0, strictPeerDependencies: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/peer-c@1.0.0'], await testDefaults({ modulesCacheMaxAge: 0, strictPeerDependencies: false })) - expect(await exists(path.resolve('node_modules/.pnpm/abc-parent-with-ab@1.0.0/node_modules/abc-parent-with-ab'))).toBeFalsy() - expect(await exists(path.resolve('node_modules/.pnpm/abc-parent-with-ab@1.0.0_peer-c@1.0.0/node_modules/abc-parent-with-ab'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/.pnpm/abc-parent-with-ab@1.0.0_peer-c@1.0.0/node_modules/is-positive'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0/node_modules/@pnpm.e2e/abc-parent-with-ab'))).toBeFalsy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-parent-with-ab'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/is-positive'))).toBeTruthy() }) async function okFile (filename: string) { @@ -437,103 +438,103 @@ async function okFile (filename: string) { // This usecase was failing. See https://github.com/pnpm/supi/issues/15 test('peer dependencies are linked when running one named installation', async () => { - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }) - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }) prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent-with-c', 'abc-parent-with-ab', 'peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false })) - const pkgVariationsDir = path.resolve('node_modules/.pnpm/abc@1.0.0') + const pkgVariationsDir = path.resolve('node_modules/.pnpm/@pnpm.e2e+abc@1.0.0') - const pkgVariation1 = path.join(pkgVariationsDir + '_6ea473aweg4rki46lsbci3nehq/node_modules') - await okFile(path.join(pkgVariation1, 'abc')) - await okFile(path.join(pkgVariation1, 'peer-a')) - await okFile(path.join(pkgVariation1, 'peer-b')) - await okFile(path.join(pkgVariation1, 'peer-c')) - await okFile(path.join(pkgVariation1, 'dep-of-pkg-with-1-dep')) + const pkgVariation1 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules') + await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-c')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/dep-of-pkg-with-1-dep')) - const pkgVariation2 = path.join(pkgVariationsDir + '_czpb4cfd67t7o7o3k4vnbzkwma/node_modules') - await okFile(path.join(pkgVariation2, 'abc')) - await okFile(path.join(pkgVariation2, 'peer-a')) - await okFile(path.join(pkgVariation2, 'peer-b')) - await okFile(path.join(pkgVariation2, 'peer-c')) - await okFile(path.join(pkgVariation2, 'dep-of-pkg-with-1-dep')) + const pkgVariation2 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules') + await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-c')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/dep-of-pkg-with-1-dep')) - expect(deepRequireCwd(['abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('2.0.0') - expect(deepRequireCwd(['abc-grand-parent-with-c', 'abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('1.0.0') + expect(deepRequireCwd(['@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/abc', '@pnpm.e2e/peer-c', './package.json']).version).toBe('2.0.0') + 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') // this part was failing. See issue: https://github.com/pnpm/pnpm/issues/1201 - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) await install(manifest, await testDefaults({ update: true, depth: 100, strictPeerDependencies: false })) }) test('peer dependencies are linked when running two separate named installations', async () => { - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }) prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent-with-c', 'peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false })) - await addDependenciesToPackage(manifest, ['abc-parent-with-ab'], await testDefaults({ strictPeerDependencies: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ strictPeerDependencies: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc-parent-with-ab'], await testDefaults({ strictPeerDependencies: false })) - const pkgVariationsDir = path.resolve('node_modules/.pnpm/abc@1.0.0') + const pkgVariationsDir = path.resolve('node_modules/.pnpm/@pnpm.e2e+abc@1.0.0') + + const pkgVariation1 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }]), 'node_modules') + await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-c')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/dep-of-pkg-with-1-dep')) + + const pkgVariation2 = path.join(pkgVariationsDir + createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '2.0.0' }]), 'node_modules') + await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/dep-of-pkg-with-1-dep')) - const pkgVariation1 = path.join(pkgVariationsDir + '_6ea473aweg4rki46lsbci3nehq/node_modules') - await okFile(path.join(pkgVariation1, 'abc')) - await okFile(path.join(pkgVariation1, 'peer-a')) - await okFile(path.join(pkgVariation1, 'peer-b')) - await okFile(path.join(pkgVariation1, 'peer-c')) - await okFile(path.join(pkgVariation1, 'dep-of-pkg-with-1-dep')) - - const pkgVariation2 = path.join(pkgVariationsDir + '_6ea473aweg4rki46lsbci3nehq/node_modules') - await okFile(path.join(pkgVariation2, 'abc')) - await okFile(path.join(pkgVariation2, 'peer-a')) - await okFile(path.join(pkgVariation2, 'peer-b')) - await okFile(path.join(pkgVariation2, 'dep-of-pkg-with-1-dep')) - - expect(deepRequireCwd(['abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('2.0.0') - expect(deepRequireCwd(['abc-grand-parent-with-c', 'abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('1.0.0') + expect(deepRequireCwd(['@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/abc', '@pnpm.e2e/peer-c', './package.json']).version).toBe('2.0.0') + 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') }) test.skip('peer dependencies are linked', async () => { const project = prepareEmpty() await install({ dependencies: { - 'abc-grand-parent-with-c': '*', - 'peer-c': '2.0.0', + '@pnpm.e2e/abc-grand-parent-with-c': '*', + '@pnpm.e2e/peer-c': '2.0.0', }, devDependencies: { - 'abc-parent-with-ab': '*', + '@pnpm.e2e/abc-parent-with-ab': '*', }, }, await testDefaults()) const pkgVariationsDir = path.resolve('node_modules/.pnpm/abc@1.0.0') const pkgVariation1 = path.join(pkgVariationsDir, '165e1e08a3f7e7f77ddb572ad0e55660/node_modules') - await okFile(path.join(pkgVariation1, 'abc')) - await okFile(path.join(pkgVariation1, 'peer-a')) - await okFile(path.join(pkgVariation1, 'peer-b')) - await okFile(path.join(pkgVariation1, 'peer-c')) - await okFile(path.join(pkgVariation1, 'dep-of-pkg-with-1-dep')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/peer-c')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/dep-of-pkg-with-1-dep')) - const pkgVariation2 = path.join(pkgVariationsDir, 'peer-a@1.0.0+peer-b@1.0.0/node_modules') - await okFile(path.join(pkgVariation2, 'abc')) - await okFile(path.join(pkgVariation2, 'peer-a')) - await okFile(path.join(pkgVariation2, 'peer-b')) - await okFile(path.join(pkgVariation2, 'dep-of-pkg-with-1-dep')) + const pkgVariation2 = path.join(pkgVariationsDir, '@pnpm.e2e+peer-a@1.0.0+@pnpm.e2e+peer-b@1.0.0/node_modules') + await okFile(path.join(pkgVariation2, '@pnpm.e2e/abc')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-a')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/peer-b')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/dep-of-pkg-with-1-dep')) - expect(deepRequireCwd(['abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('2.0.0') - expect(deepRequireCwd(['abc-grand-parent-with-c', 'abc-parent-with-ab', 'abc', 'peer-c', './package.json']).version).toBe('1.0.0') + expect(deepRequireCwd(['@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/abc', '@pnpm.e2e/peer-c', './package.json']).version).toBe('2.0.0') + 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 = await project.readLockfile() - expect(lockfile.packages['/abc-parent-with-ab/1.0.0/peer-a@1.0.0+peer-b@1.0.0'].dev).toBeTruthy() + expect(lockfile.packages['/@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() }) test('scoped peer dependency is linked', async () => { prepareEmpty() - await addDependenciesToPackage({}, ['for-testing-scoped-peers'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/for-testing-scoped-peers'], await testDefaults()) const pkgVariation = path.resolve('node_modules/.pnpm/@having+scoped-peer@1.0.0_@scoped+peer@1.0.0/node_modules') await okFile(path.join(pkgVariation, '@having', 'scoped-peer')) @@ -543,43 +544,44 @@ test('scoped peer dependency is linked', async () => { test('peer bins are linked', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['for-testing-peers-having-bins'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/for-testing-peers-having-bins'], await testDefaults({ fastUnpack: false })) - const pkgVariation = path.join('.pnpm/pkg-with-peer-having-bin@1.0.0_peer-with-bin@1.0.0/node_modules') + const suffix = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-with-bin', version: '1.0.0' }]) + const pkgVariation = path.join(`.pnpm/@pnpm.e2e+pkg-with-peer-having-bin@1.0.0${suffix}/node_modules`) - await project.isExecutable(path.join(pkgVariation, 'pkg-with-peer-having-bin/node_modules/.bin', 'peer-with-bin')) + await project.isExecutable(path.join(pkgVariation, '@pnpm.e2e/pkg-with-peer-having-bin/node_modules/.bin', 'peer-with-bin')) - await project.isExecutable(path.join(pkgVariation, 'pkg-with-peer-having-bin/node_modules/.bin', 'hello-world-js-bin')) + await project.isExecutable(path.join(pkgVariation, '@pnpm.e2e/pkg-with-peer-having-bin/node_modules/.bin', 'hello-world-js-bin')) }) test('run pre/postinstall scripts of each variations of packages with peer dependencies', async () => { - await addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }) prepareEmpty() - await addDependenciesToPackage({}, ['parent-of-pkg-with-events-and-peers', 'pkg-with-events-and-peers', 'peer-c@2.0.0'], await testDefaults({ fastUnpack: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/parent-of-pkg-with-events-and-peers', '@pnpm.e2e/pkg-with-events-and-peers', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ fastUnpack: false })) - const pkgVariation1 = path.resolve('node_modules/.pnpm/pkg-with-events-and-peers@1.0.0_peer-c@1.0.0/node_modules') - await okFile(path.join(pkgVariation1, 'pkg-with-events-and-peers', 'generated-by-preinstall.js')) - await okFile(path.join(pkgVariation1, 'pkg-with-events-and-peers', 'generated-by-postinstall.js')) + const pkgVariation1 = path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-events-and-peers@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules') + await okFile(path.join(pkgVariation1, '@pnpm.e2e/pkg-with-events-and-peers', 'generated-by-preinstall.js')) + await okFile(path.join(pkgVariation1, '@pnpm.e2e/pkg-with-events-and-peers', 'generated-by-postinstall.js')) - const pkgVariation2 = path.resolve('node_modules/.pnpm/pkg-with-events-and-peers@1.0.0_peer-c@2.0.0/node_modules') - await okFile(path.join(pkgVariation2, 'pkg-with-events-and-peers', 'generated-by-preinstall.js')) - await okFile(path.join(pkgVariation2, 'pkg-with-events-and-peers', 'generated-by-postinstall.js')) + const pkgVariation2 = path.resolve('node_modules/.pnpm/@pnpm.e2e+pkg-with-events-and-peers@1.0.0_@pnpm.e2e+peer-c@2.0.0/node_modules') + await okFile(path.join(pkgVariation2, '@pnpm.e2e/pkg-with-events-and-peers', 'generated-by-preinstall.js')) + await okFile(path.join(pkgVariation2, '@pnpm.e2e/pkg-with-events-and-peers', 'generated-by-postinstall.js')) }) test('package that has parent as peer dependency', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['has-alpha', 'alpha'], await testDefaults()) + await addDependenciesToPackage({}, ['@pnpm.e2e/has-alpha', '@pnpm.e2e/alpha'], await testDefaults()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/has-alpha-as-peer/1.0.0_alpha@1.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/has-alpha-as-peer/1.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer/1.0.0_@pnpm.e2e+alpha@1.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer/1.0.0']) }) test('own peer installed in root as well is linked to root', async () => { prepareEmpty() - await addDependenciesToPackage({}, ['is-negative@kevva/is-negative#2.1.0', 'peer-deps-in-child-pkg'], await testDefaults()) + await addDependenciesToPackage({}, ['is-negative@kevva/is-negative#2.1.0', '@pnpm.e2e/peer-deps-in-child-pkg'], await testDefaults()) expect(deepRequireCwd.silent(['is-negative', './package.json'])).toBeTruthy() }) @@ -620,12 +622,12 @@ test('peer dependency is grouped correctly with peer installed via separate inst const manifest = await install({ dependencies: { - abc: '1.0.0', + '@pnpm.e2e/abc': '1.0.0', }, }, await testDefaults({ reporter, lockfileDir, strictPeerDependencies: false })) - await addDependenciesToPackage(manifest, ['peer-c@2.0.0'], await testDefaults({ reporter, lockfileDir, strictPeerDependencies: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, lockfileDir, strictPeerDependencies: false })) - expect(await exists(path.join('../node_modules/.pnpm/abc@1.0.0_peer-c@2.0.0/node_modules/dep-of-pkg-with-1-dep'))).toBeTruthy() + expect(await exists(path.join('../node_modules/.pnpm/@pnpm.e2e+abc@1.0.0_@pnpm.e2e+peer-c@2.0.0/node_modules/@pnpm.e2e/dep-of-pkg-with-1-dep'))).toBeTruthy() }) test('peer dependency is grouped with dependent when the peer is a top dependency and external node_modules is used', async () => { @@ -740,39 +742,39 @@ test('external lockfile: peer dependency is grouped with dependent even after a process.chdir('_') const lockfileDir = path.resolve('..') - const manifest = await addDependenciesToPackage({}, ['peer-c@1.0.0', 'abc-parent-with-ab@1.0.0'], await testDefaults({ lockfileDir, strictPeerDependencies: false })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/peer-c@1.0.0', '@pnpm.e2e/abc-parent-with-ab@1.0.0'], await testDefaults({ lockfileDir, strictPeerDependencies: false })) { const lockfile = await readYamlFile(path.resolve('..', WANTED_LOCKFILE)) expect(lockfile.importers._).toStrictEqual({ dependencies: { - 'abc-parent-with-ab': '1.0.0_peer-c@1.0.0', - 'peer-c': '1.0.0', + '@pnpm.e2e/abc-parent-with-ab': '1.0.0_@pnpm.e2e+peer-c@1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', }, specifiers: { - 'abc-parent-with-ab': '1.0.0', - 'peer-c': '1.0.0', + '@pnpm.e2e/abc-parent-with-ab': '1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', }, }) } - await addDependenciesToPackage(manifest, ['peer-c@2.0.0'], await testDefaults({ lockfileDir, strictPeerDependencies: false })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ lockfileDir, strictPeerDependencies: false })) { const lockfile = await readYamlFile(path.resolve('..', WANTED_LOCKFILE)) expect(lockfile.importers._).toStrictEqual({ dependencies: { - 'abc-parent-with-ab': '1.0.0_peer-c@2.0.0', - 'peer-c': '2.0.0', + '@pnpm.e2e/abc-parent-with-ab': '1.0.0_@pnpm.e2e+peer-c@2.0.0', + '@pnpm.e2e/peer-c': '2.0.0', }, specifiers: { - 'abc-parent-with-ab': '1.0.0', - 'peer-c': '2.0.0', + '@pnpm.e2e/abc-parent-with-ab': '1.0.0', + '@pnpm.e2e/peer-c': '2.0.0', }, }) } - expect(await exists(path.join('../node_modules/.pnpm/abc-parent-with-ab@1.0.0_peer-c@2.0.0/node_modules/is-positive'))).toBeTruthy() + expect(await exists(path.join('../node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.0_@pnpm.e2e+peer-c@2.0.0/node_modules/is-positive'))).toBeTruthy() }) test('regular dependencies are not removed on update from transitive packages that have children with peers resolved from above', async () => { @@ -780,15 +782,15 @@ test('regular dependencies are not removed on update from transitive packages th await fs.mkdir('_') process.chdir('_') const lockfileDir = path.resolve('..') - await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }) - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent-with-c@1.0.0'], await testDefaults({ lockfileDir })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c@1.0.0'], await testDefaults({ lockfileDir })) - await addDistTag({ package: 'peer-c', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.1', distTag: 'latest' }) await install(manifest, await testDefaults({ lockfileDir, update: true, depth: 2 })) - expect(await exists(path.join('../node_modules/.pnpm/abc-parent-with-ab@1.0.1_peer-c@1.0.1/node_modules/is-positive'))).toBeTruthy() + expect(await exists(path.join('../node_modules/.pnpm/@pnpm.e2e+abc-parent-with-ab@1.0.1_@pnpm.e2e+peer-c@1.0.1/node_modules/is-positive'))).toBeTruthy() }) test('peer dependency is resolved from parent package', async () => { @@ -799,7 +801,7 @@ test('peer dependency is resolved from parent package', async () => { ]) await mutateModules([ { - dependencySelectors: ['tango@1.0.0'], + dependencySelectors: ['@pnpm.e2e/tango@1.0.0'], manifest: {}, mutation: 'installSome', rootDir: path.resolve('pkg'), @@ -808,8 +810,8 @@ test('peer dependency is resolved from parent package', async () => { const lockfile = await readYamlFile(WANTED_LOCKFILE) expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([ - '/has-tango-as-peer-dep/1.0.0_tango@1.0.0', - '/tango/1.0.0', + '/@pnpm.e2e/has-tango-as-peer-dep/1.0.0_@pnpm.e2e+tango@1.0.0', + '/@pnpm.e2e/tango/1.0.0', ]) }) @@ -854,7 +856,7 @@ test('peer dependency is resolved from parent package via its alias', async () = ]) await mutateModules([ { - dependencySelectors: ['tango@npm:tango-tango@1.0.0'], + dependencySelectors: ['@pnpm.e2e/tango@npm:@pnpm.e2e/tango-tango@1.0.0'], manifest: {}, mutation: 'installSome', rootDir: path.resolve('pkg'), @@ -862,9 +864,10 @@ test('peer dependency is resolved from parent package via its alias', async () = ], await testDefaults()) const lockfile = await readYamlFile(WANTED_LOCKFILE) + const suffix = createPeersFolderSuffix([{ name: '@pnpm.e2e/tango-tango', version: '1.0.0' }]) expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([ - '/has-tango-as-peer-dep/1.0.0_tango-tango@1.0.0', - '/tango-tango/1.0.0_tango-tango@1.0.0', + `/@pnpm.e2e/has-tango-as-peer-dep/1.0.0${suffix}`, + `/@pnpm.e2e/tango-tango/1.0.0${suffix}`, ]) }) @@ -909,7 +912,7 @@ test('warning is not reported when cannot resolve optional peer dependency', asy const reporter = jest.fn() - await addDependenciesToPackage({}, ['abc-optional-peers@1.0.0', 'peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers@1.0.0', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false })) expect(reporter).toHaveBeenCalledWith( expect.objectContaining({ @@ -918,10 +921,10 @@ test('warning is not reported when cannot resolve optional peer dependency', asy issuesByProjects: { '.': { bad: { - 'peer-c': [{ + '@pnpm.e2e/peer-c': [{ parents: [ { - name: 'abc-optional-peers', + name: '@pnpm.e2e/abc-optional-peers', version: '1.0.0', }, ], @@ -932,11 +935,11 @@ test('warning is not reported when cannot resolve optional peer dependency', asy }], }, missing: { - 'peer-a': [ + '@pnpm.e2e/peer-a': [ { parents: [ { - name: 'abc-optional-peers', + name: '@pnpm.e2e/abc-optional-peers', version: '1.0.0', }, ], @@ -944,11 +947,11 @@ test('warning is not reported when cannot resolve optional peer dependency', asy wantedRange: '^1.0.0', }, ], - 'peer-b': [ + '@pnpm.e2e/peer-b': [ { parents: [ { - name: 'abc-optional-peers', + name: '@pnpm.e2e/abc-optional-peers', version: '1.0.0', }, ], @@ -958,7 +961,7 @@ test('warning is not reported when cannot resolve optional peer dependency', asy ], }, conflicts: [], - intersections: { 'peer-a': '^1.0.0' }, + intersections: { '@pnpm.e2e/peer-a': '^1.0.0' }, }, }, }) @@ -966,11 +969,11 @@ test('warning is not reported when cannot resolve optional peer dependency', asy const lockfile = await project.readLockfile() - expect(lockfile.packages['/abc-optional-peers/1.0.0_peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({ - 'peer-b': { + expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({ + '@pnpm.e2e/peer-b': { optional: true, }, - 'peer-c': { + '@pnpm.e2e/peer-c': { optional: true, }, }) @@ -981,7 +984,7 @@ test('warning is not reported when cannot resolve optional peer dependency (spec const reporter = jest.fn() - await addDependenciesToPackage({}, ['abc-optional-peers-meta-only@1.0.0', 'peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false })) + await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers-meta-only@1.0.0', '@pnpm.e2e/peer-c@2.0.0'], await testDefaults({ reporter, strictPeerDependencies: false })) expect(reporter).toHaveBeenCalledWith( expect.objectContaining({ @@ -991,11 +994,11 @@ test('warning is not reported when cannot resolve optional peer dependency (spec '.': { bad: {}, missing: { - 'peer-a': [ + '@pnpm.e2e/peer-a': [ { parents: [ { - name: 'abc-optional-peers-meta-only', + name: '@pnpm.e2e/abc-optional-peers-meta-only', version: '1.0.0', }, ], @@ -1003,11 +1006,11 @@ test('warning is not reported when cannot resolve optional peer dependency (spec wantedRange: '^1.0.0', }, ], - 'peer-b': [ + '@pnpm.e2e/peer-b': [ { parents: [ { - name: 'abc-optional-peers-meta-only', + name: '@pnpm.e2e/abc-optional-peers-meta-only', version: '1.0.0', }, ], @@ -1017,7 +1020,7 @@ test('warning is not reported when cannot resolve optional peer dependency (spec ], }, conflicts: [], - intersections: { 'peer-a': '^1.0.0' }, + intersections: { '@pnpm.e2e/peer-a': '^1.0.0' }, }, }, }) @@ -1025,16 +1028,16 @@ test('warning is not reported when cannot resolve optional peer dependency (spec const lockfile = await project.readLockfile() - expect(lockfile.packages['/abc-optional-peers-meta-only/1.0.0_peer-c@2.0.0'].peerDependencies).toStrictEqual({ - 'peer-a': '^1.0.0', - 'peer-b': '*', - 'peer-c': '*', + expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependencies).toStrictEqual({ + '@pnpm.e2e/peer-a': '^1.0.0', + '@pnpm.e2e/peer-b': '*', + '@pnpm.e2e/peer-c': '*', }) - expect(lockfile.packages['/abc-optional-peers-meta-only/1.0.0_peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({ - 'peer-b': { + expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only/1.0.0_@pnpm.e2e+peer-c@2.0.0'].peerDependenciesMeta).toStrictEqual({ + '@pnpm.e2e/peer-b': { optional: true, }, - 'peer-c': { + '@pnpm.e2e/peer-c': { optional: true, }, }) @@ -1047,8 +1050,8 @@ test('local tarball dependency with peer dependency', async () => { const manifest = await addDependenciesToPackage({}, [ `file:${f.find('tar-pkg-with-peers/tar-pkg-with-peers-1.0.0.tgz')}`, - 'bar@100.0.0', - 'foo@100.0.0', + 'bar@npm:@pnpm.e2e/bar@100.0.0', + 'foo@npm:@pnpm.e2e/foo@100.0.0', ], await testDefaults({ reporter })) const integrityLocalPkgDirs = (await fs.readdir('node_modules/.pnpm')) diff --git a/packages/core/test/install/sideEffects.ts b/packages/core/test/install/sideEffects.ts index f3f25705887..896f58f1459 100644 --- a/packages/core/test/install/sideEffects.ts +++ b/packages/core/test/install/sideEffects.ts @@ -80,12 +80,13 @@ test('using side effects cache', async () => { sideEffectsCacheWrite: true, verifyStoreIntegrity: false, }, {}, {}, { packageImportMethod: 'copy' }) - const manifest = await addDependenciesToPackage({}, ['pre-and-postinstall-scripts-example@1.0.0'], opts) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'], opts) - const filesIndexFile = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') + const cafsDir = path.join(opts.storeDir, 'files') + const filesIndexFile = getFilePathInCafs(cafsDir, getIntegrity('@pnpm.e2e/pre-and-postinstall-scripts-example', '1.0.0'), 'index') const filesIndex = await loadJsonFile(filesIndexFile) expect(filesIndex.sideEffects).toBeTruthy() // files index has side effects - const sideEffectsKey = `${ENGINE_NAME}-${JSON.stringify({ '/hello-world-js-bin/1.0.0': {} })}` + const sideEffectsKey = `${ENGINE_NAME}-${JSON.stringify({ '/@pnpm.e2e/hello-world-js-bin/1.0.0': {} })}` expect(filesIndex.sideEffects).toHaveProperty([sideEffectsKey, 'generated-by-preinstall.js']) expect(filesIndex.sideEffects).toHaveProperty([sideEffectsKey, 'generated-by-postinstall.js']) delete filesIndex.sideEffects![sideEffectsKey]['generated-by-postinstall.js'] @@ -100,10 +101,10 @@ test('using side effects cache', async () => { storeDir: opts.storeDir, verifyStoreIntegrity: false, }, {}, {}, { packageImportMethod: 'copy' }) - await addDependenciesToPackage(manifest, ['pre-and-postinstall-scripts-example@1.0.0'], opts2) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'], opts2) - expect(await exists(path.resolve('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() // side effects cache correctly used - expect(await exists(path.resolve('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() // side effects cache correctly used + expect(await exists(path.resolve('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() // side effects cache correctly used + expect(await exists(path.resolve('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() // side effects cache correctly used }) test.skip('readonly side effects cache', async () => { @@ -151,11 +152,12 @@ test('uploading errors do not interrupt installation', async () => { opts.storeController.upload = async () => { throw new Error('an unexpected error') } - await addDependenciesToPackage({}, ['pre-and-postinstall-scripts-example@1.0.0'], opts) + await addDependenciesToPackage({}, ['@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0'], opts) - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeTruthy() - const filesIndexFile = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') + const cafsDir = path.join(opts.storeDir, 'files') + const filesIndexFile = getFilePathInCafs(cafsDir, getIntegrity('@pnpm.e2e/pre-and-postinstall-scripts-example', '1.0.0'), 'index') const filesIndex = await loadJsonFile(filesIndexFile) expect(filesIndex.sideEffects).toBeFalsy() }) diff --git a/packages/core/test/install/update.ts b/packages/core/test/install/update.ts index 23b656891b2..67a966bbe71 100644 --- a/packages/core/test/install/update.ts +++ b/packages/core/test/install/update.ts @@ -11,22 +11,22 @@ test('preserve subdeps on update', async () => { const project = prepareEmpty() await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }), ]) - const manifest = await addDependenciesToPackage({}, ['foobarqar', 'abc-grand-parent-with-c'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foobarqar', '@pnpm.e2e/abc-grand-parent-with-c'], await testDefaults()) await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.1', distTag: 'latest' }), ]) await install(manifest, await testDefaults({ update: true, depth: 0 })) @@ -34,12 +34,12 @@ test('preserve subdeps on update', async () => { const lockfile = await project.readLockfile() expect(lockfile.packages).toBeTruthy() - expect(lockfile.packages).toHaveProperty(['/abc-parent-with-ab/1.0.0_peer-c@1.0.0']) - expect(lockfile.packages).toHaveProperty(['/foobarqar/1.0.1']) - expect(lockfile.packages['/foobarqar/1.0.1'].dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '100.0.0', - qar: '100.0.0', + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1']) + expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({ + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }) }) @@ -47,22 +47,22 @@ test('preserve subdeps on update when no node_modules is present', async () => { const project = prepareEmpty() await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }), ]) - const manifest = await addDependenciesToPackage({}, ['foobarqar', 'abc-grand-parent-with-c'], await testDefaults({ lockfileOnly: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foobarqar', '@pnpm.e2e/abc-grand-parent-with-c'], await testDefaults({ lockfileOnly: true })) await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.1', distTag: 'latest' }), ]) await install(manifest, await testDefaults({ update: true, depth: 0 })) @@ -70,19 +70,19 @@ test('preserve subdeps on update when no node_modules is present', async () => { const lockfile = await project.readLockfile() expect(lockfile.packages).toBeTruthy() - expect(lockfile.packages).toHaveProperty(['/abc-parent-with-ab/1.0.0_peer-c@1.0.0']) // preserve version of package that has resolved peer deps - expect(lockfile.packages).toHaveProperty(['/foobarqar/1.0.1']) - expect(lockfile.packages['/foobarqar/1.0.1'].dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '100.0.0', - qar: '100.0.0', + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) // preserve version of package that has resolved peer deps + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1']) + expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({ + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }) }) test('update does not fail when package has only peer dependencies', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['has-pkg-with-peer-only'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/has-pkg-with-peer-only'], await testDefaults()) await install(manifest, await testDefaults({ update: true, depth: Infinity })) }) @@ -101,18 +101,18 @@ test('update does not install the package if it is not present in package.json', test('update dependency when external lockfile directory is used', async () => { prepareEmpty() - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) const lockfileDir = path.resolve('..') - const manifest = await addDependenciesToPackage({}, ['foo'], await testDefaults({ lockfileDir })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foo'], await testDefaults({ lockfileDir })) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) await install(manifest, await testDefaults({ update: true, depth: 0, lockfileDir })) const lockfile = await readYamlFile(path.join('..', WANTED_LOCKFILE)) - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) }) // Covers https://github.com/pnpm/pnpm/issues/2191 @@ -120,35 +120,35 @@ test('preserve subdeps when installing on a package that has one dependency spec const project = prepareEmpty() await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }), ]) - const manifest = await addDependenciesToPackage({}, ['foobarqar', 'abc-grand-parent-with-c'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foobarqar', '@pnpm.e2e/abc-grand-parent-with-c'], await testDefaults()) - manifest.dependencies!['foobarqar'] = '^1.0.1' + manifest.dependencies!['@pnpm.e2e/foobarqar'] = '^1.0.1' await Promise.all([ - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.1', distTag: 'latest' }), ]) await install(manifest, await testDefaults()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/abc-parent-with-ab/1.0.0_peer-c@1.0.0']) // preserve version of package that has resolved peer deps - expect(lockfile.packages).toHaveProperty(['/foobarqar/1.0.1']) - expect(lockfile.packages['/foobarqar/1.0.1'].dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '100.0.0', - qar: '100.0.0', + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) // preserve version of package that has resolved peer deps + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.1']) + expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.1'].dependencies).toStrictEqual({ + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }) }) @@ -156,57 +156,57 @@ test('preserve subdeps when installing on a package that has one dependency spec test('update only the packages that were requested to be updated when hoisting is on', async () => { const project = prepareEmpty() - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) - let manifest = await addDependenciesToPackage({}, ['bar', 'foo'], await testDefaults({ hoistPattern: ['*'] })) + let manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/bar', '@pnpm.e2e/foo'], await testDefaults({ hoistPattern: ['*'] })) - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) - manifest = await addDependenciesToPackage(manifest, ['foo'], await testDefaults({ allowNew: false, update: true, hoistPattern: ['*'] })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/foo'], await testDefaults({ allowNew: false, update: true, hoistPattern: ['*'] })) - expect(manifest.dependencies).toStrictEqual({ bar: '^100.0.0', foo: '^100.1.0' }) + expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/bar': '^100.0.0', '@pnpm.e2e/foo': '^100.1.0' }) const lockfile = await project.readLockfile() - expect(Object.keys(lockfile.packages)).toStrictEqual(['/bar/100.0.0', '/foo/100.1.0']) + expect(Object.keys(lockfile.packages)).toStrictEqual(['/@pnpm.e2e/bar/100.0.0', '/@pnpm.e2e/foo/100.1.0']) }) test('update only the specified package', async () => { const project = prepareEmpty() await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.0', distTag: 'latest' }), - addDistTag({ package: 'peer-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/peer-c', version: '1.0.0', distTag: 'latest' }), ]) - const manifest = await addDependenciesToPackage({}, ['foobarqar', 'abc-grand-parent-with-c'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foobarqar', '@pnpm.e2e/abc-grand-parent-with-c'], await testDefaults()) await Promise.all([ - addDistTag({ package: 'abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), - addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }), - addDistTag({ package: 'foobarqar', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-grand-parent-with-c', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/abc-parent-with-ab', version: '1.0.1', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }), + addDistTag({ package: '@pnpm.e2e/foobarqar', version: '1.0.1', distTag: 'latest' }), ]) await install(manifest, await testDefaults({ depth: Infinity, update: true, - updateMatching: (pkgName: string) => pkgName === 'foo', + updateMatching: (pkgName: string) => pkgName === '@pnpm.e2e/foo', })) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/abc-parent-with-ab/1.0.0_peer-c@1.0.0']) - expect(lockfile.packages).toHaveProperty(['/foobarqar/1.0.0']) - expect(lockfile.packages['/foobarqar/1.0.0'].dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '100.1.0', + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab/1.0.0_@pnpm.e2e+peer-c@1.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar/1.0.0']) + expect(lockfile.packages['/@pnpm.e2e/foobarqar/1.0.0'].dependencies).toStrictEqual({ + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.1.0', 'is-positive': '3.1.0', }) }) diff --git a/packages/core/test/install/updatingPkgJson.ts b/packages/core/test/install/updatingPkgJson.ts index eefcfa092ee..dcc80027fff 100644 --- a/packages/core/test/install/updatingPkgJson.ts +++ b/packages/core/test/install/updatingPkgJson.ts @@ -50,100 +50,100 @@ test('saveDev scoped module to package.json (@rstacruz/tap-spec)', async () => { }) test('dependency should not be added to package.json if it is already there', async () => { - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) const project = prepareEmpty() const manifest = await addDependenciesToPackage({ devDependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, optionalDependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, - }, ['foo', 'bar'], await testDefaults()) + }, ['@pnpm.e2e/foo', '@pnpm.e2e/bar'], await testDefaults()) expect(manifest).toStrictEqual({ devDependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, optionalDependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, }) const lockfile = await project.readLockfile() - expect(lockfile.devDependencies.foo).toBe('100.0.0') - expect(lockfile.packages['/foo/100.0.0'].dev).toBeTruthy() + expect(lockfile.devDependencies['@pnpm.e2e/foo']).toBe('100.0.0') + expect(lockfile.packages['/@pnpm.e2e/foo/100.0.0'].dev).toBeTruthy() - expect(lockfile.optionalDependencies.bar).toBe('100.0.0') - expect(lockfile.packages['/bar/100.0.0'].optional).toBeTruthy() + expect(lockfile.optionalDependencies['@pnpm.e2e/bar']).toBe('100.0.0') + expect(lockfile.packages['/@pnpm.e2e/bar/100.0.0'].optional).toBeTruthy() }) test('dependencies should be updated in the fields where they already are', async () => { - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) prepareEmpty() const manifest = await addDependenciesToPackage({ devDependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, optionalDependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, - }, ['foo@latest', 'bar@latest'], await testDefaults()) + }, ['@pnpm.e2e/foo@latest', '@pnpm.e2e/bar@latest'], await testDefaults()) expect(manifest).toStrictEqual({ devDependencies: { - foo: '^100.1.0', + '@pnpm.e2e/foo': '^100.1.0', }, optionalDependencies: { - bar: '^100.1.0', + '@pnpm.e2e/bar': '^100.1.0', }, }) }) test('dependency should be removed from the old field when installing it as a different type of dependency', async () => { - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'qar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/qar', version: '100.0.0', distTag: 'latest' }) const project = prepareEmpty() let manifest = await addDependenciesToPackage({ dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, devDependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, optionalDependencies: { - qar: '^100.0.0', + '@pnpm.e2e/qar': '^100.0.0', }, - }, ['foo'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) - manifest = await addDependenciesToPackage(manifest, ['bar'], await testDefaults({ targetDependenciesField: 'dependencies' })) - manifest = await addDependenciesToPackage(manifest, ['qar'], await testDefaults({ targetDependenciesField: 'devDependencies' })) + }, ['@pnpm.e2e/foo'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/bar'], await testDefaults({ targetDependenciesField: 'dependencies' })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/qar'], await testDefaults({ targetDependenciesField: 'devDependencies' })) expect(manifest).toStrictEqual({ dependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, devDependencies: { - qar: '^100.0.0', + '@pnpm.e2e/qar': '^100.0.0', }, optionalDependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }) - manifest = await addDependenciesToPackage(manifest, ['bar', 'foo', 'qar'], await testDefaults({ targetDependenciesField: 'dependencies' })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar'], await testDefaults({ targetDependenciesField: 'dependencies' })) expect(manifest).toStrictEqual({ dependencies: { - bar: '^100.0.0', - foo: '^100.0.0', - qar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', + '@pnpm.e2e/qar': '^100.0.0', }, devDependencies: {}, optionalDependencies: {}, @@ -151,10 +151,10 @@ test('dependency should be removed from the old field when installing it as a di { const lockfile = await project.readCurrentLockfile() - expect(Object.keys(lockfile.dependencies)).toStrictEqual(['bar', 'foo', 'qar']) + expect(Object.keys(lockfile.dependencies)).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) } - console.log('manually editing package.json. Converting all prod deps to dev deps') + // manually editing package.json. Converting all prod deps to dev deps manifest.devDependencies = manifest.dependencies delete manifest.dependencies @@ -163,7 +163,7 @@ test('dependency should be removed from the old field when installing it as a di { const lockfile = await project.readCurrentLockfile() - expect(Object.keys(lockfile.devDependencies)).toStrictEqual(['bar', 'foo', 'qar']) + expect(Object.keys(lockfile.devDependencies)).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) expect(lockfile.dependencies).toBeFalsy() } }) @@ -185,15 +185,15 @@ test('multiple save to package.json with `exact` versions (@rstacruz/tap-spec & test('save to package.json with save prefix ~', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['pkg-with-1-dep'], await testDefaults({ pinnedVersion: 'minor' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ pinnedVersion: 'minor' })) - expect(manifest.dependencies).toStrictEqual({ 'pkg-with-1-dep': '~100.0.0' }) + expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/pkg-with-1-dep': '~100.0.0' }) }) test('an update bumps the versions in the manifest', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '2.0.0', distTag: 'latest' }) prepareEmpty() @@ -202,13 +202,13 @@ test('an update bumps the versions in the manifest', async () => { buildIndex: 0, manifest: { dependencies: { - 'peer-a': '~1.0.0', + '@pnpm.e2e/peer-a': '~1.0.0', }, devDependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, optionalDependencies: { - 'peer-c': '^1.0.1', + '@pnpm.e2e/peer-c': '^1.0.1', }, }, mutation: 'install', @@ -221,13 +221,13 @@ test('an update bumps the versions in the manifest', async () => { expect(manifest).toStrictEqual({ dependencies: { - 'peer-a': '~1.0.1', + '@pnpm.e2e/peer-a': '~1.0.1', }, devDependencies: { - foo: '^100.1.0', + '@pnpm.e2e/foo': '^100.1.0', }, optionalDependencies: { - 'peer-c': '^1.0.1', + '@pnpm.e2e/peer-c': '^1.0.1', }, }) }) diff --git a/packages/core/test/link.ts b/packages/core/test/link.ts index f7ca94d227f..068f11798b8 100644 --- a/packages/core/test/link.ts +++ b/packages/core/test/link.ts @@ -27,7 +27,7 @@ test('relative link', async () => { dir: process.cwd(), manifest: { dependencies: { - 'hello-world-js-bin': '*', + '@pnpm.e2e/hello-world-js-bin': '*', }, }, })) @@ -35,11 +35,11 @@ test('relative link', async () => { await project.isExecutable('.bin/hello-world-js-bin') const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') - expect(wantedLockfile.specifiers['hello-world-js-bin']).toBe('*') + expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') + expect(wantedLockfile.specifiers['@pnpm.e2e/hello-world-js-bin']).toBe('*') const currentLockfile = await project.readCurrentLockfile() - expect(currentLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') + expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') }) test('relative link is linked by the name of the alias', async () => { @@ -90,8 +90,8 @@ test('relative link is not rewritten by argumentless install', async () => { added: { dependencyType: undefined, linkedFrom: linkedPkgPath, - name: 'hello-world-js-bin', - realName: 'hello-world-js-bin', + name: '@pnpm.e2e/hello-world-js-bin', + realName: '@pnpm.e2e/hello-world-js-bin', version: '1.0.0', }, level: 'debug', @@ -101,11 +101,11 @@ test('relative link is not rewritten by argumentless install', async () => { await install(manifest, opts) - expect(project.requireModule('hello-world-js-bin/package.json').isLocal).toBeTruthy() + expect(project.requireModule('@pnpm.e2e/hello-world-js-bin/package.json').isLocal).toBeTruthy() }) test('relative link is rewritten by named installation to regular dependency', async () => { - await addDistTag({ package: 'hello-world-js-bin', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/hello-world-js-bin', version: '1.0.0', distTag: 'latest' }) const project = prepareEmpty() const linkedPkgName = 'hello-world-js-bin' @@ -130,8 +130,8 @@ test('relative link is rewritten by named installation to regular dependency', a added: { dependencyType: undefined, linkedFrom: linkedPkgPath, - name: 'hello-world-js-bin', - realName: 'hello-world-js-bin', + name: '@pnpm.e2e/hello-world-js-bin', + realName: '@pnpm.e2e/hello-world-js-bin', version: '1.0.0', }, level: 'debug', @@ -139,17 +139,17 @@ test('relative link is rewritten by named installation to regular dependency', a prefix: process.cwd(), } as RootLog)).toBeTruthy() - manifest = await addDependenciesToPackage(manifest, ['hello-world-js-bin'], opts) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/hello-world-js-bin'], opts) - expect(manifest.dependencies).toStrictEqual({ 'hello-world-js-bin': '^1.0.0' }) + expect(manifest.dependencies).toStrictEqual({ '@pnpm.e2e/hello-world-js-bin': '^1.0.0' }) - expect(project.requireModule('hello-world-js-bin/package.json').isLocal).toBeFalsy() + expect(project.requireModule('@pnpm.e2e/hello-world-js-bin/package.json').isLocal).toBeFalsy() const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.dependencies['hello-world-js-bin']).toBe('1.0.0') + expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('1.0.0') const currentLockfile = await project.readCurrentLockfile() - expect(currentLockfile.dependencies['hello-world-js-bin']).toBe('1.0.0') + expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('1.0.0') }) test('relative link uses realpath when contained in a symlinked dir', async () => { diff --git a/packages/core/test/lockfile.ts b/packages/core/test/lockfile.ts index 74a2b0d4987..0ecfc62d6f8 100644 --- a/packages/core/test/lockfile.ts +++ b/packages/core/test/lockfile.ts @@ -33,7 +33,7 @@ test('lockfile has correct format', async () => { await addDependenciesToPackage({}, [ - 'pkg-with-1-dep', + '@pnpm.e2e/pkg-with-1-dep', '@rstacruz/tap-spec@4.1.1', 'kevva/is-negative#1d7e288222b53a0cab90a331f1865220ec29560c', ], await testDefaults({ fastUnpack: false, save: true })) @@ -43,20 +43,20 @@ test('lockfile has correct format', async () => { expect(modules!.pendingBuilds.length).toBe(0) const lockfile = await project.readLockfile() - const id = '/pkg-with-1-dep/100.0.0' + const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0' expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION) expect(lockfile.specifiers).toBeTruthy() expect(lockfile.dependencies).toBeTruthy() - expect(lockfile.dependencies['pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0') expect(lockfile.dependencies).toHaveProperty(['@rstacruz/tap-spec']) expect(lockfile.dependencies['is-negative']).toContain('/') // has not shortened tarball from the non-standard registry expect(lockfile.packages).toBeTruthy() // has packages field expect(lockfile.packages).toHaveProperty([id]) expect(lockfile.packages[id].dependencies).toBeTruthy() - expect(lockfile.packages[id].dependencies).toHaveProperty(['dep-of-pkg-with-1-dep']) + expect(lockfile.packages[id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) expect(lockfile.packages[id].resolution).toBeTruthy() expect((lockfile.packages[id].resolution as {integrity: string}).integrity).toBeTruthy() expect((lockfile.packages[id].resolution as TarballResolution).tarball).toBeFalsy() @@ -283,20 +283,20 @@ test(`respects ${WANTED_LOCKFILE} for top dependencies`, async () => { // }, // }) - const pkgs = ['foo', 'bar', 'qar'] + const pkgs = ['@pnpm.e2e/foo', '@pnpm.e2e/bar', '@pnpm.e2e/qar'] await Promise.all(pkgs.map(async (pkgName) => addDistTag({ package: pkgName, version: '100.0.0', distTag: 'latest' }))) - let manifest = await addDependenciesToPackage({}, ['foo'], await testDefaults({ save: true, reporter })) + let manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foo'], await testDefaults({ save: true, reporter })) // t.equal(reporter.withArgs(fooProgress).callCount, 1, 'reported foo once') - manifest = await addDependenciesToPackage(manifest, ['bar'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) - manifest = await addDependenciesToPackage(manifest, ['qar'], await testDefaults({ addDependenciesToPackage: 'devDependencies' })) - manifest = await addDependenciesToPackage(manifest, ['foobar'], await testDefaults({ save: true })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/bar'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/qar'], await testDefaults({ addDependenciesToPackage: 'devDependencies' })) + manifest = await addDependenciesToPackage(manifest, ['@pnpm.e2e/foobar'], await testDefaults({ save: true })) - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'foo'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'bar'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'qar'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/foobar@100.0.0/node_modules/foo'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/foobar@100.0.0/node_modules/bar'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/foo'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/bar'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/qar'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/@pnpm.e2e+foobar@100.0.0/node_modules/@pnpm.e2e/foo'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/@pnpm.e2e+foobar@100.0.0/node_modules/@pnpm.e2e/bar'))).version).toBe('100.0.0') await Promise.all(pkgs.map(async (pkgName) => addDistTag({ package: pkgName, version: '100.1.0', distTag: 'latest' }))) @@ -317,42 +317,42 @@ test(`respects ${WANTED_LOCKFILE} for top dependencies`, async () => { // t.equal(reporter.withArgs(fooProgress).callCount, 0, 'not reported foo') - await project.storeHasNot('foo', '100.1.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'foo'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'bar'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules', 'qar'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/foobar@100.0.0/node_modules/foo'))).version).toBe('100.0.0') - expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/foobar@100.0.0/node_modules/bar'))).version).toBe('100.0.0') + await project.storeHasNot('@pnpm.e2e/foo', '100.1.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/foo'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/bar'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules', '@pnpm.e2e/qar'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/@pnpm.e2e+foobar@100.0.0/node_modules/@pnpm.e2e/foo'))).version).toBe('100.0.0') + expect((await readPackageJsonFromDir(path.resolve('node_modules/.pnpm/@pnpm.e2e+foobar@100.0.0/node_modules/@pnpm.e2e/bar'))).version).toBe('100.0.0') }) test(`subdeps are updated on repeat install if outer ${WANTED_LOCKFILE} does not match the inner one`, async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults()) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) - delete lockfile.packages['/dep-of-pkg-with-1-dep/100.0.0'] + delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'] - lockfile.packages['/dep-of-pkg-with-1-dep/100.1.0'] = { + lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0'] = { resolution: { - integrity: getIntegrity('dep-of-pkg-with-1-dep', '100.1.0'), + integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'), }, } - lockfile.packages['/pkg-with-1-dep/100.0.0'].dependencies!['dep-of-pkg-with-1-dep'] = '100.1.0' + lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].dependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' await writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 }) await install(manifest, await testDefaults()) - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') }) test("recreates lockfile if it doesn't match the dependencies in package.json", async () => { @@ -405,32 +405,32 @@ test('repeat install with lockfile should not mutate lockfile when dependency ha test('package is not marked dev if it is also a subdep of a regular dependency', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults()) - console.log('installed pkg-with-1-dep') + console.log('installed @pnpm.e2e/pkg-with-1-dep') - await addDependenciesToPackage(manifest, ['dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'devDependencies' })) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'devDependencies' })) - console.log('installed optional dependency which is also a dependency of pkg-with-1-dep') + console.log('installed optional dependency which is also a dependency of @pnpm.e2e/pkg-with-1-dep') const lockfile = await project.readLockfile() - expect(lockfile.packages['/dep-of-pkg-with-1-dep/100.0.0'].dev).toBeFalsy() + expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].dev).toBeFalsy() }) test('package is not marked optional if it is also a subdep of a regular dependency', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults()) - await addDependenciesToPackage(manifest, ['dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/dep-of-pkg-with-1-dep'], await testDefaults({ targetDependenciesField: 'optionalDependencies' })) const lockfile = await project.readLockfile() - expect(lockfile.packages['/dep-of-pkg-with-1-dep/100.0.0'].optional).toBeFalsy() + expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'].optional).toBeFalsy() }) test('scoped module from different registry', async () => { @@ -518,25 +518,25 @@ test('repeat install with no inner lockfile should not rewrite packages in node_ test('packages are placed in devDependencies even if they are present as non-dev as well', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) const reporter = sinon.spy() await install({ devDependencies: { - 'dep-of-pkg-with-1-dep': '^100.1.0', - 'pkg-with-1-dep': '^100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '^100.1.0', + '@pnpm.e2e/pkg-with-1-dep': '^100.0.0', }, }, await testDefaults({ reporter })) const lockfile = await project.readLockfile() - expect(lockfile.devDependencies).toHaveProperty(['dep-of-pkg-with-1-dep']) - expect(lockfile.devDependencies).toHaveProperty(['pkg-with-1-dep']) + expect(lockfile.devDependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) + expect(lockfile.devDependencies).toHaveProperty(['@pnpm.e2e/pkg-with-1-dep']) expect(reporter.calledWithMatch({ added: { dependencyType: 'dev', - name: 'dep-of-pkg-with-1-dep', + name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', }, level: 'debug', @@ -545,7 +545,7 @@ test('packages are placed in devDependencies even if they are present as non-dev expect(reporter.calledWithMatch({ added: { dependencyType: 'dev', - name: 'pkg-with-1-dep', + name: '@pnpm.e2e/pkg-with-1-dep', version: '100.0.0', }, level: 'debug', @@ -558,15 +558,15 @@ test('packages are placed in devDependencies even if they are present as non-dev test('updating package that has a github-hosted dependency', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['has-github-dep@1'], await testDefaults()) - await addDependenciesToPackage(manifest, ['has-github-dep@latest'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/has-github-dep@1'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/has-github-dep@latest'], await testDefaults()) }) test('updating package that has deps with peers', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['abc-grand-parent-with-c@0'], await testDefaults()) - await addDependenciesToPackage(manifest, ['abc-grand-parent-with-c@1'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/abc-grand-parent-with-c@0'], await testDefaults()) + await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc-grand-parent-with-c@1'], await testDefaults()) }) test('pendingBuilds gets updated if install removes packages', async () => { @@ -574,15 +574,15 @@ test('pendingBuilds gets updated if install removes packages', async () => { await install({ dependencies: { - 'pre-and-postinstall-scripts-example': '*', - 'with-postinstall-b': '*', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', + '@pnpm.e2e/with-postinstall-b': '*', }, }, await testDefaults({ fastUnpack: false, ignoreScripts: true })) const modules1 = await project.readModulesManifest() await install({ dependencies: { - 'pre-and-postinstall-scripts-example': '*', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', }, }, await testDefaults({ fastUnpack: false, ignoreScripts: true })) const modules2 = await project.readModulesManifest() @@ -744,7 +744,7 @@ test('packages installed via tarball URL from the default registry are normalize const project = prepareEmpty() await addDependenciesToPackage({}, [ - `http://localhost:${REGISTRY_MOCK_PORT}/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, + `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', ], await testDefaults()) @@ -753,23 +753,23 @@ test('packages installed via tarball URL from the default registry are normalize expect(lockfile).toStrictEqual({ dependencies: { 'is-positive': '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', - 'pkg-with-tarball-dep-from-registry': '1.0.0', + '@pnpm.e2e/pkg-with-tarball-dep-from-registry': '1.0.0', }, lockfileVersion: LOCKFILE_VERSION, packages: { - '/dep-of-pkg-with-1-dep/100.0.0': { + '/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0': { dev: false, resolution: { - integrity: getIntegrity('dep-of-pkg-with-1-dep', '100.0.0'), + integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0'), }, }, - '/pkg-with-tarball-dep-from-registry/1.0.0': { + '/@pnpm.e2e/pkg-with-tarball-dep-from-registry/1.0.0': { dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, dev: false, resolution: { - integrity: getIntegrity('pkg-with-tarball-dep-from-registry', '1.0.0'), + integrity: getIntegrity('@pnpm.e2e/pkg-with-tarball-dep-from-registry', '1.0.0'), }, }, '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': { @@ -784,7 +784,7 @@ test('packages installed via tarball URL from the default registry are normalize }, specifiers: { 'is-positive': 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', - 'pkg-with-tarball-dep-from-registry': `http://localhost:${REGISTRY_MOCK_PORT}/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, + '@pnpm.e2e/pkg-with-tarball-dep-from-registry': `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, }, }) }) @@ -797,7 +797,7 @@ test('lockfile file has correct format when lockfile directory does not equal th const manifest = await addDependenciesToPackage( {}, [ - 'pkg-with-1-dep', + '@pnpm.e2e/pkg-with-1-dep', '@zkochan/foo@1.0.0', 'kevva/is-negative#1d7e288222b53a0cab90a331f1865220ec29560c', ], @@ -814,7 +814,7 @@ test('lockfile file has correct format when lockfile directory does not equal th { const lockfile: Lockfile = await readYamlFile(WANTED_LOCKFILE) - const id = '/pkg-with-1-dep/100.0.0' + const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0' expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION) @@ -822,11 +822,11 @@ test('lockfile file has correct format when lockfile directory does not equal th expect(lockfile.importers.project).toBeTruthy() expect(lockfile.importers.project.specifiers).toBeTruthy() expect(lockfile.importers.project.dependencies).toBeTruthy() - expect(lockfile.importers.project.dependencies!['pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0') expect(lockfile.importers.project.dependencies!['@zkochan/foo']).toBeTruthy() expect(lockfile.importers.project.dependencies!['is-negative']).toContain('/') - expect(lockfile.packages![id].dependencies).toHaveProperty(['dep-of-pkg-with-1-dep']) + expect(lockfile.packages![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) expect(lockfile.packages![id].resolution).toHaveProperty(['integrity']) expect(lockfile.packages![id].resolution).not.toHaveProperty(['tarball']) @@ -852,16 +852,16 @@ test('lockfile file has correct format when lockfile directory does not equal th expect(lockfile.importers).toHaveProperty(['project-2']) // previous entries are not removed - const id = '/pkg-with-1-dep/100.0.0' + const id = '/@pnpm.e2e/pkg-with-1-dep/100.0.0' expect(lockfile.importers.project.specifiers).toBeTruthy() - expect(lockfile.importers.project.dependencies!['pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.importers.project.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0') expect(lockfile.importers.project.dependencies).toHaveProperty(['@zkochan/foo']) expect(lockfile.importers.project.dependencies!['is-negative']).toContain('/') expect(lockfile.packages).toHaveProperty([id]) expect(lockfile.packages![id].dependencies).toBeTruthy() - expect(lockfile.packages![id].dependencies).toHaveProperty(['dep-of-pkg-with-1-dep']) + expect(lockfile.packages![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) expect(lockfile.packages![id].resolution).toHaveProperty(['integrity']) expect(lockfile.packages![id].resolution).not.toHaveProperty(['tarball']) @@ -980,14 +980,14 @@ test(`use current ${WANTED_LOCKFILE} as initial wanted one, when wanted was remo test('existing dependencies are preserved when updating a lockfile to a newer format', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults()) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults()) const initialLockfile = await project.readLockfile() await writeYamlFile(WANTED_LOCKFILE, { ...initialLockfile, lockfileVersion: 5.01 }, { lineWidth: 1000 }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) await mutateModules([ { @@ -1035,13 +1035,13 @@ test('lockfile is not getting broken if the used registry changes', async () => test('broken lockfile is fixed even if it seems like up to date at first. Unless frozenLockfile option is set to true', async () => { const project = prepareEmpty() - await addDistTag({ package: 'dep-of-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({}, ['pkg-with-1-dep'], await testDefaults({ lockfileOnly: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep'], await testDefaults({ lockfileOnly: true })) { const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - delete lockfile.packages['/dep-of-pkg-with-1-dep/100.0.0'] + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0'] await writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 }) } @@ -1069,9 +1069,9 @@ test('broken lockfile is fixed even if it seems like up to date at first. Unless }, ], await testDefaults({ preferFrozenLockfile: true })) - await project.has('pkg-with-1-dep') + await project.has('@pnpm.e2e/pkg-with-1-dep') const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) }) const REGISTRY_MIRROR_DIR = path.join(__dirname, '../../../registry-mirror') @@ -1181,34 +1181,34 @@ importers: .: dependencies: <<<<<<< HEAD - dep-of-pkg-with-1-dep: 100.0.0 + '@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0 ======= - dep-of-pkg-with-1-dep: 100.1.0 + '@pnpm.e2e/dep-of-pkg-with-1-dep': 100.1.0 >>>>>>> next specifiers: - dep-of-pkg-with-1-dep: '>100.0.0' + '@pnpm.e2e/dep-of-pkg-with-1-dep': '>100.0.0' lockfileVersion: ${LOCKFILE_VERSION} packages: <<<<<<< HEAD - /dep-of-pkg-with-1-dep/100.0.0: + /@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0: dev: false resolution: - integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')} + integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')} ======= - /dep-of-pkg-with-1-dep/100.1.0: + /@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0: dev: false resolution: - integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.1.0')} + integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0')} >>>>>>> next`, 'utf8') await install({ dependencies: { - 'dep-of-pkg-with-1-dep': '>100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '>100.0.0', }, }, await testDefaults()) const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('100.1.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0') }) test('a lockfile with duplicate keys is fixed', async () => { @@ -1218,26 +1218,26 @@ test('a lockfile with duplicate keys is fixed', async () => { importers: .: dependencies: - dep-of-pkg-with-1-dep: 100.0.0 + '@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0 specifiers: - dep-of-pkg-with-1-dep: '100.0.0' + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0' lockfileVersion: ${LOCKFILE_VERSION} packages: - /dep-of-pkg-with-1-dep/100.0.0: - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + /@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0: + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} dev: false - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} `, 'utf8') const reporter = jest.fn() await install({ dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, }, await testDefaults({ reporter })) const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') expect(reporter).toBeCalledWith(expect.objectContaining({ level: 'warn', @@ -1254,21 +1254,21 @@ test('a lockfile with duplicate keys is causes an exception, when frozenLockfile importers: .: dependencies: - dep-of-pkg-with-1-dep: 100.0.0 + '@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0 specifiers: - dep-of-pkg-with-1-dep: '100.0.0' + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0' lockfileVersion: ${LOCKFILE_VERSION} packages: - /dep-of-pkg-with-1-dep/100.0.0: - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + /@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0: + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} dev: false - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} `, 'utf8') await expect( install({ dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, }, await testDefaults({ frozenLockfile: true })) ).rejects.toThrow(/^The lockfile at .* is broken: duplicated mapping key/) @@ -1279,7 +1279,7 @@ test('a broken private lockfile is ignored', async () => { const manifest = await install({ dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, }, await testDefaults()) @@ -1287,15 +1287,15 @@ test('a broken private lockfile is ignored', async () => { importers: .: dependencies: - dep-of-pkg-with-1-dep: 100.0.0 + '@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0 specifiers: - dep-of-pkg-with-1-dep: '100.0.0' + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0' lockfileVersion: ${LOCKFILE_VERSION} packages: - /dep-of-pkg-with-1-dep/100.0.0: - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + /@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0: + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} dev: false - resolution: {integrity: ${getIntegrity('dep-of-pkg-with-1-dep', '100.0.0')}} + resolution: {integrity: ${getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0')}} `, 'utf8') const reporter = jest.fn() @@ -1381,9 +1381,9 @@ test('include tarball URL', async () => { const project = prepareEmpty() const opts = await testDefaults({ fastUnpack: false, lockfileIncludeTarballUrl: true }) - await addDependenciesToPackage({}, ['pkg-with-1-dep@100.0.0'], opts) + await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-1-dep@100.0.0'], opts) const lockfile = await project.readLockfile() - expect((lockfile.packages['/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).tarball) - .toBe(`http://localhost:${REGISTRY_MOCK_PORT}/pkg-with-1-dep/-/pkg-with-1-dep-100.0.0.tgz`) + expect((lockfile.packages['/@pnpm.e2e/pkg-with-1-dep/100.0.0'].resolution as TarballResolution).tarball) + .toBe(`http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e%2fpkg-with-1-dep/-/pkg-with-1-dep-100.0.0.tgz`) }) diff --git a/packages/core/test/packageImportMethods.ts b/packages/core/test/packageImportMethods.ts index d8c8f27b243..a457818174a 100644 --- a/packages/core/test/packageImportMethods.ts +++ b/packages/core/test/packageImportMethods.ts @@ -14,11 +14,11 @@ test('packageImportMethod can be set to copy', async () => { test('copy does not fail on package that self-requires itself', async () => { const project = prepareEmpty() - await addDependenciesToPackage({}, ['requires-itself'], await testDefaults({}, {}, {}, { packageImportMethod: 'copy' })) + await addDependenciesToPackage({}, ['@pnpm.e2e/requires-itself'], await testDefaults({}, {}, {}, { packageImportMethod: 'copy' })) - const m = project.requireModule('requires-itself/package.json') + const m = project.requireModule('@pnpm.e2e/requires-itself/package.json') expect(m).toBeTruthy() // requires-itself is available with packageImportMethod = copy const lockfile = await project.readLockfile() - expect(lockfile.packages['/requires-itself/1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' }) + expect(lockfile.packages['/@pnpm.e2e/requires-itself/1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' }) }) diff --git a/packages/core/test/prune.ts b/packages/core/test/prune.ts index f5a653f0396..ced35cd03d5 100644 --- a/packages/core/test/prune.ts +++ b/packages/core/test/prune.ts @@ -24,7 +24,7 @@ test('prune removes extraneous packages', async () => { manifest = await addDependenciesToPackage(manifest, ['is-positive@2.0.0', '@zkochan/logger@0.1.0'], opts) manifest = await link([linkedPkg], path.resolve('node_modules'), { ...opts, manifest, dir: process.cwd() }) - await project.has('hello-world-js-bin') // external link added + await project.has('@pnpm.e2e/hello-world-js-bin') // external link added delete manifest.dependencies!['is-positive'] delete manifest.dependencies!['@zkochan/logger'] @@ -53,12 +53,12 @@ test('prune removes extraneous packages', async () => { name: 'pnpm:root', removed: { dependencyType: undefined, - name: 'hello-world-js-bin', + name: '@pnpm.e2e/hello-world-js-bin', version: '1.0.0', }, } as RootLog)).toBeTruthy() - await project.hasNot('hello-world-js-bin') // external link pruned + await project.hasNot('@pnpm.e2e/hello-world-js-bin') // external link pruned await project.storeHasNot('is-positive', '2.0.0') await project.hasNot('is-positive') diff --git a/packages/core/test/uninstall.ts b/packages/core/test/uninstall.ts index 57eb203d7e5..bf0583fcfdf 100644 --- a/packages/core/test/uninstall.ts +++ b/packages/core/test/uninstall.ts @@ -179,10 +179,10 @@ test('uninstall package with dependencies and do not touch other deps', async () test('uninstall package with its bin files', async () => { prepareEmpty() - const manifest = await addDependenciesToPackage({}, ['sh-hello-world@1.0.1'], await testDefaults({ fastUnpack: false, save: true })) + const manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/sh-hello-world@1.0.1'], await testDefaults({ fastUnpack: false, save: true })) await mutateModules([ { - dependencyNames: ['sh-hello-world'], + dependencyNames: ['@pnpm.e2e/sh-hello-world'], manifest, mutation: 'uninstallSome', rootDir: process.cwd(), @@ -223,7 +223,7 @@ test('pendingBuilds gets updated after uninstall', async () => { const project = prepareEmpty() const manifest = await addDependenciesToPackage({}, - ['pre-and-postinstall-scripts-example', 'with-postinstall-b'], + ['@pnpm.e2e/pre-and-postinstall-scripts-example', '@pnpm.e2e/with-postinstall-b'], await testDefaults({ fastUnpack: false, save: true, ignoreScripts: true }) ) @@ -233,7 +233,7 @@ test('pendingBuilds gets updated after uninstall', async () => { await mutateModules([ { - dependencyNames: ['with-postinstall-b'], + dependencyNames: ['@pnpm.e2e/with-postinstall-b'], manifest, mutation: 'uninstallSome', rootDir: process.cwd(), diff --git a/packages/core/test/unlink.ts b/packages/core/test/unlink.ts index 11e9515b916..7cda6095feb 100644 --- a/packages/core/test/unlink.ts +++ b/packages/core/test/unlink.ts @@ -73,25 +73,25 @@ test('unlink 1 package that exists in package.json', async () => { test("don't update package when unlinking", async () => { const project = prepareEmpty() - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) const opts = await testDefaults({ dir: process.cwd() }) - let manifest = await addDependenciesToPackage({}, ['foo'], opts) + let manifest = await addDependenciesToPackage({}, ['@pnpm.e2e/foo'], opts) process.chdir('..') await writeJsonFile('foo/package.json', { - name: 'foo', + name: '@pnpm.e2e/foo', version: '100.0.0', }) manifest = await link(['foo'], path.join('project', 'node_modules'), { ...opts, manifest }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) process.chdir('project') await mutateModules( [ { - dependencyNames: ['foo'], + dependencyNames: ['@pnpm.e2e/foo'], manifest, mutation: 'unlinkSome', rootDir: process.cwd(), @@ -100,7 +100,7 @@ test("don't update package when unlinking", async () => { opts ) - expect(project.requireModule('foo/package.json').version).toBe('100.0.0') + expect(project.requireModule('@pnpm.e2e/foo/package.json').version).toBe('100.0.0') }) test(`don't update package when unlinking. Initial link is done on a package w/o ${WANTED_LOCKFILE}`, async () => { @@ -110,7 +110,7 @@ test(`don't update package when unlinking. Initial link is done on a package w/o process.chdir('..') await writeJsonFile('foo/package.json', { - name: 'foo', + name: '@pnpm.e2e/foo', version: '100.0.0', }) @@ -118,17 +118,17 @@ test(`don't update package when unlinking. Initial link is done on a package w/o ...opts, manifest: { dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) process.chdir('project') const unlinkResult = await mutateModules( [ { - dependencyNames: ['foo'], + dependencyNames: ['@pnpm.e2e/foo'], manifest, mutation: 'unlinkSome', rootDir: process.cwd(), @@ -137,8 +137,8 @@ test(`don't update package when unlinking. Initial link is done on a package w/o opts ) - expect(project.requireModule('foo/package.json').version).toBe('100.1.0') - expect(unlinkResult[0].manifest.dependencies).toStrictEqual({ foo: '^100.0.0' }) + expect(project.requireModule('@pnpm.e2e/foo/package.json').version).toBe('100.1.0') + expect(unlinkResult[0].manifest.dependencies).toStrictEqual({ '@pnpm.e2e/foo': '^100.0.0' }) }) test('unlink 2 packages. One of them exists in package.json', async () => { diff --git a/packages/headless/package.json b/packages/headless/package.json index e859a5cac02..9bf473d9359 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -16,13 +16,14 @@ }, "devDependencies": { "@pnpm/assert-project": "workspace:*", + "@pnpm/cafs": "4.3.0", "@pnpm/client": "workspace:*", "@pnpm/headless": "workspace:*", "@pnpm/logger": "^4.0.0", "@pnpm/package-store": "workspace:*", "@pnpm/prepare": "workspace:*", "@pnpm/read-projects-context": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/store-path": "workspace:*", "@pnpm/test-fixtures": "workspace:*", "@types/fs-extra": "^9.0.13", diff --git a/packages/headless/test/fixtures/deps-have-lifecycle-scripts/package.json b/packages/headless/test/fixtures/deps-have-lifecycle-scripts/package.json index 898577429f5..ad2858bdcb1 100644 --- a/packages/headless/test/fixtures/deps-have-lifecycle-scripts/package.json +++ b/packages/headless/test/fixtures/deps-have-lifecycle-scripts/package.json @@ -5,6 +5,6 @@ }, "dependencies": { "json-append": "1.1.1", - "pre-and-postinstall-scripts-example": "*" + "@pnpm.e2e/pre-and-postinstall-scripts-example": "*" } } diff --git a/packages/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml b/packages/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml index f4db968a9f6..d5868dcf2f2 100644 --- a/packages/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml @@ -1,15 +1,27 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*' json-append: 1.1.1 - pre-and-postinstall-scripts-example: '*' dependencies: + '@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0 json-append: 1.1.1 - pre-and-postinstall-scripts-example: 1.0.0 packages: + /@pnpm.e2e/hello-world-js-bin/1.0.0: + resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==} + hasBin: true + dev: false + + /@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0: + resolution: {integrity: sha512-RWys6ZQfGRl4enR2IZv+Ear9h5v0p1LjwY36bxkBgJCEAV9lP1DksvXa3hATKgG9r3/FrkESKSwlMwZ8vLNgAg==} + requiresBuild: true + dependencies: + '@pnpm.e2e/hello-world-js-bin': 1.0.0 + dev: false + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false @@ -28,11 +40,6 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false - /hello-world-js-bin/1.0.0: - resolution: {integrity: sha512-0wmzOwltlD4Vy3XHbJlASP2OOZOOk39jbxWVQdohHQPiSPq7UDKUMkykrl+09FjPhanu2c3DuCmRA0Jy9Hf8rQ==} - hasBin: true - dev: false - /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: false @@ -48,13 +55,6 @@ packages: concat-stream: 1.6.2 dev: false - /pre-and-postinstall-scripts-example/1.0.0: - resolution: {integrity: sha512-LiigIO18SIBX0gjNcFRC4nU1L8+Ioysy0NMSZoMIy4fbOm35FxzpDVAcPeFisqbdXPYu166MdlMvla36ySS5qA==} - requiresBuild: true - dependencies: - hello-world-js-bin: 1.0.0 - dev: false - /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false diff --git a/packages/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml b/packages/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml index 812b395d936..55a1abba17d 100644 --- a/packages/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: glob: ^7.0.5 diff --git a/packages/headless/test/fixtures/has-glob/pnpm-lock.yaml b/packages/headless/test/fixtures/has-glob/pnpm-lock.yaml index 399f3a263bc..8e6e2f6bce7 100644 --- a/packages/headless/test/fixtures/has-glob/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-glob/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: glob: ^7.0.5 diff --git a/packages/headless/test/fixtures/has-incompatible-optional-subdep/package.json b/packages/headless/test/fixtures/has-incompatible-optional-subdep/package.json index 8756f9f504d..83a67382f21 100644 --- a/packages/headless/test/fixtures/has-incompatible-optional-subdep/package.json +++ b/packages/headless/test/fixtures/has-incompatible-optional-subdep/package.json @@ -2,6 +2,6 @@ "name": "has-incompatible-optional-subdep", "version": "1.0.0", "dependencies": { - "pkg-with-optional": "1.0.0" + "@pnpm.e2e/pkg-with-optional": "1.0.0" } } diff --git a/packages/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml b/packages/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml index c8c5c82549e..cb942b7313e 100644 --- a/packages/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml @@ -1,29 +1,29 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: - pkg-with-optional: 1.0.0 + '@pnpm.e2e/pkg-with-optional': 1.0.0 dependencies: - pkg-with-optional: 1.0.0 + '@pnpm.e2e/pkg-with-optional': 1.0.0 packages: - /dep-of-optional-pkg/1.0.0: - resolution: {integrity: sha512-fsFDBo/KrUZ9ljybu85d3mkr17LoTh3zV9TLncEddZkJ9GD9ql0ZVdftdAlsS46LdfeNKgte/2erZ8euekhWKQ==} + /@pnpm.e2e/dep-of-optional-pkg/1.0.0: + resolution: {integrity: sha512-ouCWx8q98JzIJ/Ef2Ny6uvHYWxe+T2irzTBhntx/31Jd+1QxbGVETO8yJXrDZyuD3rBGaZULj78gIcwa068fAA==} dev: false optional: true - /not-compatible-with-any-os/1.0.0: - resolution: {integrity: sha512-vTrzbhOeYAAhfduz8iCEmTC+512IDxBAaDLl3C6d3S+KOIKhSInhQbaTO3di+h7NND/2YpGUG4WmgGvAhzAcrA==} + /@pnpm.e2e/not-compatible-with-any-os/1.0.0: + resolution: {integrity: sha512-8sAm2PvHtibzjUYOXrmvmHXhthl7mD582GNDjhQ7CrQblo084OiAjNGaLka4vXXWF93LVaJ91btIRCECJPFLXw==} os: [this-os-does-not-exist] requiresBuild: true dependencies: - dep-of-optional-pkg: 1.0.0 + '@pnpm.e2e/dep-of-optional-pkg': 1.0.0 dev: false optional: true - /pkg-with-optional/1.0.0: - resolution: {integrity: sha512-gGOtjrYcYG9FHYHHzaerrVwi5bRmPwrjYlm89lqr4j4HgtYNPXUN8skpzHjKvntregnF3K9dn0z2XxMQrLtydA==} + /@pnpm.e2e/pkg-with-optional/1.0.0: + resolution: {integrity: sha512-Er5ld8foGmtV7tEzjy8NPYoA9MkUfAe7iU4dx/5wpPYhX32+SUqML8iG2RmjqrVdCDFzRepG3zSP6RcCTVaMPQ==} optionalDependencies: - not-compatible-with-any-os: 1.0.0 + '@pnpm.e2e/not-compatible-with-any-os': 1.0.0 dev: false diff --git a/packages/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml b/packages/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml index 116b12b0bfe..5f03bb7f22d 100644 --- a/packages/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: tar-pkg: file:../tar-pkg-1.0.0.tgz diff --git a/packages/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml b/packages/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml index 6c8eb986ce7..039564570f8 100644 --- a/packages/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: example: link:example diff --git a/packages/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml b/packages/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml index 2d60d1367d1..e74f1c48314 100644 --- a/packages/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: '@zkochan/not-exists': 1.2.0 diff --git a/packages/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml b/packages/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml index 1102d2622ea..62884e488d8 100644 --- a/packages/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: has-flag: 1.0.0 @@ -14,6 +14,11 @@ packages: /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 dev: false @@ -117,6 +122,8 @@ packages: on-finished: 2.3.0 range-parser: 1.2.1 statuses: 1.5.0 + transitivePeerDependencies: + - supports-color dev: false /setprototypeof/1.2.0: diff --git a/packages/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml b/packages/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml index c38ac2ca920..9ca838cd401 100644 --- a/packages/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: inflight: 1.0.6 diff --git a/packages/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml b/packages/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml index e143b4da16b..56067467afd 100644 --- a/packages/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: pnpm-default-reporter: 0.14.7 diff --git a/packages/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml b/packages/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml index ab59698ec27..f0430d0fa54 100644 --- a/packages/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: expire-fs: 2.2.3 diff --git a/packages/headless/test/fixtures/side-effects/package.json b/packages/headless/test/fixtures/side-effects/package.json index 5a9f9892f26..3b2f3051759 100644 --- a/packages/headless/test/fixtures/side-effects/package.json +++ b/packages/headless/test/fixtures/side-effects/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "pre-and-postinstall-scripts-example": "1.0.0" + "@pnpm.e2e/pre-and-postinstall-scripts-example": "1.0.0" } } diff --git a/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml b/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml index 21899b8a35c..c6d5fc20302 100644 --- a/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml @@ -1,21 +1,21 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: - pre-and-postinstall-scripts-example: 1.0.0 + '@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0 dependencies: - pre-and-postinstall-scripts-example: 1.0.0 + '@pnpm.e2e/pre-and-postinstall-scripts-example': 1.0.0 packages: - /hello-world-js-bin/1.0.0: - resolution: {integrity: sha512-0wmzOwltlD4Vy3XHbJlASP2OOZOOk39jbxWVQdohHQPiSPq7UDKUMkykrl+09FjPhanu2c3DuCmRA0Jy9Hf8rQ==} + /@pnpm.e2e/hello-world-js-bin/1.0.0: + resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==} hasBin: true dev: false - /pre-and-postinstall-scripts-example/1.0.0: - resolution: {integrity: sha512-LiigIO18SIBX0gjNcFRC4nU1L8+Ioysy0NMSZoMIy4fbOm35FxzpDVAcPeFisqbdXPYu166MdlMvla36ySS5qA==} + /@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0: + resolution: {integrity: sha512-RWys6ZQfGRl4enR2IZv+Ear9h5v0p1LjwY36bxkBgJCEAV9lP1DksvXa3hATKgG9r3/FrkESKSwlMwZ8vLNgAg==} requiresBuild: true dependencies: - hello-world-js-bin: 1.0.0 + '@pnpm.e2e/hello-world-js-bin': 1.0.0 dev: false diff --git a/packages/headless/test/fixtures/simple-shamefully-flatten/package.json b/packages/headless/test/fixtures/simple-shamefully-flatten/package.json index c772c150093..59524dc394d 100644 --- a/packages/headless/test/fixtures/simple-shamefully-flatten/package.json +++ b/packages/headless/test/fixtures/simple-shamefully-flatten/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "dependencies": { "is-positive": "^1.0.0", - "pkg-with-peer-having-bin": "1.0.0", + "@pnpm.e2e/pkg-with-peer-having-bin": "1.0.0", "rimraf": "^2.6.2" }, "devDependencies": { diff --git a/packages/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml b/packages/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml index ec5f74e1f38..103720ee9bd 100644 --- a/packages/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml @@ -1,15 +1,15 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: + '@pnpm.e2e/pkg-with-peer-having-bin': 1.0.0 colors: 1.2.0 is-negative: ^2.1.0 is-positive: ^1.0.0 - pkg-with-peer-having-bin: 1.0.0 rimraf: ^2.6.2 dependencies: + '@pnpm.e2e/pkg-with-peer-having-bin': 1.0.0 is-positive: 1.0.0 - pkg-with-peer-having-bin: 1.0.0 rimraf: 2.7.1 optionalDependencies: @@ -20,6 +20,19 @@ devDependencies: packages: + /@pnpm.e2e/hello-world-js-bin/1.0.0: + resolution: {integrity: sha512-3f6ugQfqFW9GR36OSeTfsSNlup7hIslT23haX3dvT/e5GyU3iInat3+0GI+MqvRcwcNzsBrTJq7yDWp3wk7O/Q==} + hasBin: true + dev: false + + /@pnpm.e2e/pkg-with-peer-having-bin/1.0.0: + resolution: {integrity: sha512-bbL3oe5SBIz54k276vb4pR5T0ZrKZ2p2+OObfMMtkG43nCfwRBca3+WAqKjs9pIu2c4vUFhnU4rcqdbeuJkIbg==} + peerDependencies: + '@pnpm.e2e/peer-with-bin': ^1.0.0 + dependencies: + '@pnpm.e2e/hello-world-js-bin': 1.0.0 + dev: false + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: false @@ -57,11 +70,6 @@ packages: path-is-absolute: 1.0.1 dev: false - /hello-world-js-bin/1.0.0: - resolution: {integrity: sha512-0wmzOwltlD4Vy3XHbJlASP2OOZOOk39jbxWVQdohHQPiSPq7UDKUMkykrl+09FjPhanu2c3DuCmRA0Jy9Hf8rQ==} - hasBin: true - dev: false - /inflight/1.0.6: resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: @@ -100,14 +108,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /pkg-with-peer-having-bin/1.0.0: - resolution: {integrity: sha512-nkUSkBlH/EOCd3WhpWCeDLsl5In3oXLLQ83miHtqDzg7VG9ODhMcz/vYIUhSy9b7d8csEYS/0O30zjA/evqvrA==} - peerDependencies: - peer-with-bin: ^1.0.0 - dependencies: - hello-world-js-bin: 1.0.0 - dev: false - /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true diff --git a/packages/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml b/packages/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml index cb6d2e479af..de512febe5d 100644 --- a/packages/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: colors: 1.2.0 @@ -34,6 +34,7 @@ packages: /colors/1.2.0: resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==} engines: {node: '>=0.1.90'} + requiresBuild: true dev: false optional: true diff --git a/packages/headless/test/fixtures/simple-with-optional-dep/package.json b/packages/headless/test/fixtures/simple-with-optional-dep/package.json index efd36bff2cd..9625f3c2db7 100644 --- a/packages/headless/test/fixtures/simple-with-optional-dep/package.json +++ b/packages/headless/test/fixtures/simple-with-optional-dep/package.json @@ -2,7 +2,7 @@ "name": "simple-with-optional-dep", "version": "1.0.0", "dependencies": { - "pkg-with-good-optional": "*" + "@pnpm.e2e/pkg-with-good-optional": "*" }, "optionalDependencies": { "is-positive": "1.0.0" diff --git a/packages/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml b/packages/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml index 9051effadc3..22869635028 100644 --- a/packages/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml @@ -1,32 +1,32 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: + '@pnpm.e2e/pkg-with-good-optional': '*' is-positive: 1.0.0 - pkg-with-good-optional: '*' dependencies: - pkg-with-good-optional: 1.0.0 + '@pnpm.e2e/pkg-with-good-optional': 1.0.0 optionalDependencies: is-positive: 1.0.0 packages: - /dep-of-pkg-with-1-dep/100.0.0: - resolution: {integrity: sha512-SHFc2UqTM7Vkk6n1stpLu3xRIBJniuiHhByk2ZXJ9RGepHH6WUbRlxRvhGPpIVYfcvtcag9NGPtoS/zTN2fnjA==} + /@pnpm.e2e/dep-of-pkg-with-1-dep/101.0.0: + resolution: {integrity: sha512-v/FQPTv+Y6j/J5a7ymlifFIhJa28wROyiTfg1vcAVKdJ9S94E32CHVUbzgvdcu9pAkLqe7INiwJ2ynqmgiTiiw==} + dev: false + + /@pnpm.e2e/pkg-with-good-optional/1.0.0: + resolution: {integrity: sha512-nHI1OeIwd3u8wEhHBIgbJmK6ryrums0YrxVB3RHkpbXXeI3YFsxiv0T0+MuQc7ajXT5/pwUvkyo2g2n37cWuRA==} + 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: - resolution: {integrity: sha1-iACYVrZKLx632LsBeUGEJK4EUss=} + resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==} engines: {node: '>=0.10.0'} requiresBuild: true dev: false optional: true - - /pkg-with-good-optional/1.0.0: - resolution: {integrity: sha512-wDCpH6PTS5BCNi3ugdM0xzVYNEeKcl8o5Zm+FxQuNU4WJsTCrRrPXN9r8T4UNT+kgIZzIY5bx8rcPlAzYYWOXw==} - dependencies: - dep-of-pkg-with-1-dep: 100.0.0 - optionalDependencies: - is-positive: 1.0.0 - dev: false diff --git a/packages/headless/test/fixtures/simple/pnpm-lock.yaml b/packages/headless/test/fixtures/simple/pnpm-lock.yaml index 27b90139d70..104d563532c 100644 --- a/packages/headless/test/fixtures/simple/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/simple/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: colors: 1.2.0 @@ -32,6 +32,7 @@ packages: /colors/1.2.0: resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==} engines: {node: '>=0.1.90'} + requiresBuild: true dev: false optional: true diff --git a/packages/headless/test/fixtures/with-1-dep/pnpm-lock.yaml b/packages/headless/test/fixtures/with-1-dep/pnpm-lock.yaml index 8629696f570..e9320dd9467 100644 --- a/packages/headless/test/fixtures/with-1-dep/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/with-1-dep/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: rimraf: 2.5.1 diff --git a/packages/headless/test/index.ts b/packages/headless/test/index.ts index d68508de616..75885bd6a7d 100644 --- a/packages/headless/test/index.ts +++ b/packages/headless/test/index.ts @@ -2,6 +2,7 @@ import { promises as fs, existsSync, realpathSync, writeFileSync } from 'fs' import path from 'path' import assertProject from '@pnpm/assert-project' +import { getFilePathInCafs } from '@pnpm/cafs' import { ENGINE_NAME, WANTED_LOCKFILE } from '@pnpm/constants' import { PackageManifestLog, @@ -15,7 +16,7 @@ import { read as readModulesYaml } from '@pnpm/modules-yaml' import { tempDir } from '@pnpm/prepare' import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import readprojectsContext from '@pnpm/read-projects-context' -import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' +import { getIntegrity, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import fixtures from '@pnpm/test-fixtures' import rimraf from '@zkochan/rimraf' import loadJsonFile from 'load-json-file' @@ -296,7 +297,7 @@ test('not installing optional deps', async () => { const project = assertProject(prefix) await project.hasNot('is-positive') - await project.has('pkg-with-good-optional') + await project.has('@pnpm.e2e/pkg-with-good-optional') }) test('skipping optional dependency if it cannot be fetched', async () => { @@ -327,10 +328,10 @@ test('run pre/postinstall scripts', async () => { await headless(await testDefaults({ lockfileDir: prefix })) const project = assertProject(prefix) - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') expect(require(path.join(prefix, 'output.json'))).toStrictEqual(['install', 'postinstall']) // eslint-disable-line @@ -344,7 +345,7 @@ test('run pre/postinstall scripts', async () => { const nmPath = path.join(prefix, 'node_modules') const modulesYaml = await readModulesYaml(nmPath) expect(modulesYaml).toBeTruthy() - expect(modulesYaml!.pendingBuilds).toStrictEqual(['.', '/pre-and-postinstall-scripts-example/1.0.0']) + expect(modulesYaml!.pendingBuilds).toStrictEqual(['.', '/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0']) }) test('orphan packages are removed', async () => { @@ -685,10 +686,11 @@ test.each([['isolated'], ['hoisted']])('using side effects cache with nodeLinker }, {}, {}, { packageImportMethod: 'copy' }) await headless(opts) - const cacheIntegrityPath = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') + const cafsDir = path.join(opts.storeDir, 'files') + const cacheIntegrityPath = getFilePathInCafs(cafsDir, getIntegrity('@pnpm.e2e/pre-and-postinstall-scripts-example', '1.0.0'), 'index') const cacheIntegrity = await loadJsonFile(cacheIntegrityPath) expect(cacheIntegrity!['sideEffects']).toBeTruthy() - const sideEffectsKey = `${ENGINE_NAME}-${JSON.stringify({ '/hello-world-js-bin/1.0.0': {} })}` + const sideEffectsKey = `${ENGINE_NAME}-${JSON.stringify({ '/@pnpm.e2e/hello-world-js-bin/1.0.0': {} })}` expect(cacheIntegrity).toHaveProperty(['sideEffects', sideEffectsKey, 'generated-by-postinstall.js']) delete cacheIntegrity!['sideEffects'][sideEffectsKey]['generated-by-postinstall.js'] @@ -706,8 +708,8 @@ test.each([['isolated'], ['hoisted']])('using side effects cache with nodeLinker }, {}, {}, { packageImportMethod: 'copy' }) await headless(opts2) - expect(await exists(path.join(prefix, 'node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() - expect(await exists(path.join(prefix, 'node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() + expect(await exists(path.join(prefix, 'node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() + expect(await exists(path.join(prefix, 'node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() }) test.skip('using side effects cache and hoistPattern=*', async () => { diff --git a/packages/headless/tsconfig.json b/packages/headless/tsconfig.json index 173c67a72d6..d5837cd5fe7 100644 --- a/packages/headless/tsconfig.json +++ b/packages/headless/tsconfig.json @@ -21,6 +21,9 @@ { "path": "../build-modules" }, + { + "path": "../cafs" + }, { "path": "../calc-dep-state" }, diff --git a/packages/package-requester/package.json b/packages/package-requester/package.json index 5f0dfdf144f..8953c14f06c 100644 --- a/packages/package-requester/package.json +++ b/packages/package-requester/package.json @@ -68,7 +68,7 @@ "@pnpm/create-cafs-store": "workspace:*", "@pnpm/logger": "^4.0.0", "@pnpm/package-requester": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/test-fixtures": "workspace:*", "@types/normalize-path": "^3.0.0", "@types/ramda": "0.28.15", diff --git a/packages/package-requester/test/index.ts b/packages/package-requester/test/index.ts index fa797ccf797..a2572dd96c5 100644 --- a/packages/package-requester/test/index.ts +++ b/packages/package-requester/test/index.ts @@ -786,7 +786,7 @@ test('do not fetch an optional package that is not installable', async () => { expect(typeof requestPackage).toBe('function') const projectDir = tempy.directory() - const pkgResponse = await requestPackage({ alias: 'not-compatible-with-any-os', optional: true, pref: '*' }, { + const pkgResponse = await requestPackage({ alias: '@pnpm.e2e/not-compatible-with-any-os', optional: true, pref: '*' }, { downloadPriority: 0, lockfileDir: projectDir, preferredVersions: {}, @@ -798,7 +798,7 @@ test('do not fetch an optional package that is not installable', async () => { expect(pkgResponse.body).toBeTruthy() expect(pkgResponse.body.isInstallable).toBe(false) - expect(pkgResponse.body.id).toBe(`localhost+${REGISTRY_MOCK_PORT}/not-compatible-with-any-os/1.0.0`) + expect(pkgResponse.body.id).toBe(`localhost+${REGISTRY_MOCK_PORT}/@pnpm.e2e/not-compatible-with-any-os/1.0.0`) expect(pkgResponse.files).toBeFalsy() expect(pkgResponse.finishing).toBeFalsy() diff --git a/packages/plugin-commands-deploy/package.json b/packages/plugin-commands-deploy/package.json index 83bcbff8730..8b5dc84fc49 100644 --- a/packages/plugin-commands-deploy/package.json +++ b/packages/plugin-commands-deploy/package.json @@ -43,7 +43,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-deploy": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0" + "@pnpm/registry-mock": "3.0.0-2" }, "dependencies": { "@pnpm/cli-utils": "workspace:*", diff --git a/packages/plugin-commands-installation/package.json b/packages/plugin-commands-installation/package.json index cdf03ba124e..b15710c0606 100644 --- a/packages/plugin-commands-installation/package.json +++ b/packages/plugin-commands-installation/package.json @@ -39,7 +39,7 @@ "@pnpm/modules-yaml": "workspace:*", "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/test-fixtures": "workspace:*", "@types/is-ci": "^3.0.0", "@types/proxyquire": "^1.3.28", diff --git a/packages/plugin-commands-installation/test/add.ts b/packages/plugin-commands-installation/test/add.ts index 101ad7643c1..7b38738bf21 100644 --- a/packages/plugin-commands-installation/test/add.ts +++ b/packages/plugin-commands-installation/test/add.ts @@ -324,7 +324,7 @@ test('pnpm add automatically installs missing peer dependencies', async () => { autoInstallPeers: true, dir: process.cwd(), linkWorkspacePackages: false, - }, ['abc@1.0.0']) + }, ['@pnpm.e2e/abc@1.0.0']) const lockfile = await project.readLockfile() expect(Object.keys(lockfile.packages).length).toBe(5) diff --git a/packages/plugin-commands-installation/test/global.ts b/packages/plugin-commands-installation/test/global.ts index 4845236a6ae..1b2d9ec749e 100644 --- a/packages/plugin-commands-installation/test/global.ts +++ b/packages/plugin-commands-installation/test/global.ts @@ -44,12 +44,12 @@ test('globally installed package is linked with active version of Node.js', asyn global: true, linkWorkspacePackages: false, pnpmHomeDir: path.dirname(nodeExecPath), - }, ['hello-world-js-bin']) + }, ['@pnpm.e2e/hello-world-js-bin']) const manifest = (await import(path.resolve('package.json'))) expect( - manifest.dependenciesMeta['hello-world-js-bin']?.node + manifest.dependenciesMeta['@pnpm.e2e/hello-world-js-bin']?.node ).toBeTruthy() const shimContent = await fs.readFile('node_modules/.bin/hello-world-js-bin', 'utf-8') @@ -64,7 +64,7 @@ test('globally installed package isn not linked with active version of Node.js i global: true, linkWorkspacePackages: false, pnpmHomeDir: path.resolve('pnpm-home'), - }, ['hello-world-js-bin']) + }, ['@pnpm.e2e/hello-world-js-bin']) const manifest = (await import(path.resolve('package.json'))) diff --git a/packages/plugin-commands-installation/test/import.ts b/packages/plugin-commands-installation/test/import.ts index 6f336009fe5..fdb60a8290c 100644 --- a/packages/plugin-commands-installation/test/import.ts +++ b/packages/plugin-commands-installation/test/import.ts @@ -43,7 +43,7 @@ const DEFAULT_OPTS = { } test('import from package-lock.json', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) f.prepare('has-package-lock-json') await importCommand.handler({ @@ -53,16 +53,16 @@ test('import from package-lock.json', async () => { const project = assertProject(process.cwd()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) // node_modules is not created - await project.hasNot('dep-of-pkg-with-1-dep') - await project.hasNot('pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/dep-of-pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') }) test('import from yarn.lock', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) f.prepare('has-yarn-lock') @@ -73,12 +73,12 @@ test('import from yarn.lock', async () => { const project = assertProject(process.cwd()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) // node_modules is not created - await project.hasNot('dep-of-pkg-with-1-dep') - await project.hasNot('pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/dep-of-pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') }) test('import from yarn2 lock file', async () => { @@ -101,7 +101,7 @@ test('import from yarn2 lock file', async () => { }) test('import from npm-shrinkwrap.json', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) f.prepare('has-npm-shrinkwrap-json') @@ -112,12 +112,12 @@ test('import from npm-shrinkwrap.json', async () => { const project = assertProject(process.cwd()) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.0.0']) - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.0.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) // node_modules is not created - await project.hasNot('dep-of-pkg-with-1-dep') - await project.hasNot('pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/dep-of-pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/pkg-with-1-dep') }) test('import fails when no lockfiles are found', async () => { diff --git a/packages/plugin-commands-installation/test/link.ts b/packages/plugin-commands-installation/test/link.ts index a3088fd6d8b..cd2cdd69cb0 100644 --- a/packages/plugin-commands-installation/test/link.ts +++ b/packages/plugin-commands-installation/test/link.ts @@ -75,7 +75,7 @@ test('link global bin', async function () { test('relative link', async () => { const project = prepare({ dependencies: { - 'hello-world-js-bin': '*', + '@pnpm.e2e/hello-world-js-bin': '*', }, }) @@ -96,17 +96,17 @@ test('relative link', async () => { await linkedProject.isExecutable('.bin/cowsay') const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile - expect(wantedLockfile.specifiers['hello-world-js-bin']).toBe('*') // specifier of linked dependency added to ${WANTED_LOCKFILE} + expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(wantedLockfile.specifiers['@pnpm.e2e/hello-world-js-bin']).toBe('*') // specifier of linked dependency added to ${WANTED_LOCKFILE} const currentLockfile = await project.readCurrentLockfile() - expect(currentLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile }) test('absolute link', async () => { const project = prepare({ dependencies: { - 'hello-world-js-bin': '*', + '@pnpm.e2e/hello-world-js-bin': '*', }, }) @@ -127,11 +127,11 @@ test('absolute link', async () => { await linkedProject.isExecutable('.bin/cowsay') const wantedLockfile = await project.readLockfile() - expect(wantedLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile - expect(wantedLockfile.specifiers['hello-world-js-bin']).toBe('*') // specifier of linked dependency added to ${WANTED_LOCKFILE} + expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(wantedLockfile.specifiers['@pnpm.e2e/hello-world-js-bin']).toBe('*') // specifier of linked dependency added to ${WANTED_LOCKFILE} const currentLockfile = await project.readCurrentLockfile() - expect(currentLockfile.dependencies['hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toBe('link:../hello-world-js-bin') // link added to wanted lockfile }) test('link --production', async () => { diff --git a/packages/plugin-commands-installation/test/miscRecursive.ts b/packages/plugin-commands-installation/test/miscRecursive.ts index 270131c338d..18e3d87603d 100644 --- a/packages/plugin-commands-installation/test/miscRecursive.ts +++ b/packages/plugin-commands-installation/test/miscRecursive.ts @@ -284,7 +284,7 @@ test('recursive installation fails when installation in one of the packages fail version: '1.0.0', dependencies: { - 'this-pkg-does-not-exist': '100.100.100', + '@pnpm.e2e/this-pkg-does-not-exist': '100.100.100', }, }, { @@ -651,7 +651,7 @@ test('recursive install in a monorepo with different modules directories', async test('prefer-workspace-package', async () => { await addDistTag({ distTag: 'latest', - package: 'foo', + package: '@pnpm.e2e/foo', version: '100.1.0', }) preparePackages([ @@ -660,12 +660,15 @@ test('prefer-workspace-package', async () => { version: '1.0.0', dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, { - name: 'foo', - version: '100.0.0', + location: 'foo', + package: { + name: '@pnpm.e2e/foo', + version: '100.0.0', + }, }, ]) @@ -683,7 +686,7 @@ test('prefer-workspace-package', async () => { }) const lockfile = await readYamlFile(path.resolve('pnpm-lock.yaml')) - expect(lockfile.importers['project-1'].dependencies?.foo).toBe('link:../foo') + expect(lockfile.importers['project-1'].dependencies?.['@pnpm.e2e/foo']).toBe('link:../foo') }) test('installing in monorepo with shared lockfile should work on virtual drives', async () => { diff --git a/packages/plugin-commands-installation/test/prune.ts b/packages/plugin-commands-installation/test/prune.ts index ee7921349cc..074c1c19b61 100644 --- a/packages/plugin-commands-installation/test/prune.ts +++ b/packages/plugin-commands-installation/test/prune.ts @@ -67,7 +67,7 @@ test('prune keeps hoisted dependencies', async () => { cacheDir, dir: process.cwd(), storeDir, - }, ['pkg-with-1-dep@100.0.0']) + }, ['@pnpm.e2e/pkg-with-1-dep@100.0.0']) await prune.handler({ ...DEFAULT_OPTIONS, @@ -76,7 +76,7 @@ test('prune keeps hoisted dependencies', async () => { storeDir, }) - await project.hasNot('dep-of-pkg-with-1-dep') + await project.hasNot('@pnpm.e2e/dep-of-pkg-with-1-dep') }) test('prune removes dev dependencies', async () => { diff --git a/packages/plugin-commands-installation/test/update/recursive.ts b/packages/plugin-commands-installation/test/update/recursive.ts index 8ff8297c62e..54fb43b6702 100644 --- a/packages/plugin-commands-installation/test/update/recursive.ts +++ b/packages/plugin-commands-installation/test/update/recursive.ts @@ -52,8 +52,8 @@ test('recursive update', async () => { }) test('recursive update prod dependencies only', async () => { - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) preparePackages([ { @@ -61,7 +61,7 @@ test('recursive update prod dependencies only', async () => { version: '1.0.0', dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, { @@ -69,7 +69,7 @@ test('recursive update prod dependencies only', async () => { version: '1.0.0', devDependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, }, ]) @@ -86,8 +86,8 @@ test('recursive update prod dependencies only', async () => { workspaceDir: process.cwd(), }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) await update.handler({ ...DEFAULT_OPTS, @@ -112,7 +112,7 @@ test('recursive update prod dependencies only', async () => { expect( Object.keys(lockfile.packages ?? {}) ).toStrictEqual( - ['/bar/100.0.0', '/foo/100.1.0'] + ['/@pnpm.e2e/bar/100.0.0', '/@pnpm.e2e/foo/100.1.0'] ) const modules = await modulesYaml.read('./node_modules') expect(modules?.included).toStrictEqual({ @@ -129,7 +129,7 @@ test('recursive update with pattern', async () => { version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', '@pnpm.e2e/foo': '1.0.0', }, }, @@ -138,7 +138,7 @@ test('recursive update with pattern', async () => { version: '1.0.0', dependencies: { - 'peer-c': '1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', }, }, ]) @@ -153,8 +153,8 @@ test('recursive update with pattern', async () => { workspaceDir: process.cwd(), }) - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '2.0.0', distTag: 'latest' }) await addDistTag({ package: '@pnpm.e2e/foo', version: '2.0.0', distTag: 'latest' }) await update.handler({ @@ -165,18 +165,18 @@ test('recursive update with pattern', async () => { recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['peer-*', 'dep-of-pkg-*']) + }, ['@pnpm.e2e/peer-*', '@pnpm.e2e/dep-of-pkg-*']) - expect(projects['project-1'].requireModule('dep-of-pkg-with-1-dep/package.json').version).toBe('100.1.0') + expect(projects['project-1'].requireModule('@pnpm.e2e/dep-of-pkg-with-1-dep/package.json').version).toBe('100.1.0') expect(projects['project-1'].requireModule('@pnpm.e2e/foo/package.json').version).toBe('1.0.0') - expect(projects['project-2'].requireModule('peer-c/package.json').version).toBe('2.0.0') + expect(projects['project-2'].requireModule('@pnpm.e2e/peer-c/package.json').version).toBe('2.0.0') }) test('recursive update with pattern and name in project', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '2.0.0', distTag: 'latest' }) await addDistTag({ package: '@pnpm.e2e/foo', version: '2.0.0', distTag: 'latest' }) - await addDistTag({ package: 'print-version', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/print-version', version: '2.0.0', distTag: 'latest' }) const projects = preparePackages([ { @@ -184,7 +184,7 @@ test('recursive update with pattern and name in project', async () => { version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', '@pnpm.e2e/foo': '1.0.0', }, }, @@ -193,8 +193,8 @@ test('recursive update with pattern and name in project', async () => { version: '1.0.0', dependencies: { - 'peer-c': '1.0.0', - 'print-version': '1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', + '@pnpm.e2e/print-version': '1.0.0', }, }, ]) @@ -224,7 +224,7 @@ test('recursive update with pattern and name in project', async () => { recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['this-does-not-exist']) + }, ['@pnpm.e2e/this-does-not-exist']) } catch (_err: any) { // eslint-disable-line err = _err } @@ -241,7 +241,7 @@ test('recursive update with pattern and name in project', async () => { recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['this-does-not-exist']) + }, ['@pnpm.e2e/this-does-not-exist']) await update.handler({ ...DEFAULT_OPTS, @@ -252,18 +252,18 @@ test('recursive update with pattern and name in project', async () => { recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['peer-*', 'dep-of-pkg-*', 'print-version']) + }, ['@pnpm.e2e/peer-*', '@pnpm.e2e/dep-of-pkg-*', '@pnpm.e2e/print-version']) - expect(projects['project-1'].requireModule('dep-of-pkg-with-1-dep/package.json').version).toBe('100.1.0') + expect(projects['project-1'].requireModule('@pnpm.e2e/dep-of-pkg-with-1-dep/package.json').version).toBe('100.1.0') expect(projects['project-1'].requireModule('@pnpm.e2e/foo/package.json').version).toBe('1.0.0') - expect(projects['project-2'].requireModule('peer-c/package.json').version).toBe('2.0.0') - expect(projects['project-2'].requireModule('print-version/package.json').version).toBe('2.0.0') + expect(projects['project-2'].requireModule('@pnpm.e2e/peer-c/package.json').version).toBe('2.0.0') + expect(projects['project-2'].requireModule('@pnpm.e2e/print-version/package.json').version).toBe('2.0.0') }) test('recursive update --latest foo should only update projects that have foo', async () => { - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'qar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/qar', version: '100.0.0', distTag: 'latest' }) preparePackages([ { @@ -271,8 +271,8 @@ test('recursive update --latest foo should only update projects that have foo', version: '1.0.0', dependencies: { - foo: '100.0.0', - qar: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }, }, { @@ -281,7 +281,7 @@ test('recursive update --latest foo should only update projects that have foo', dependencies: { '@zkochan/async-regex-replace': '0.1.0', - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, }, ]) @@ -299,8 +299,8 @@ test('recursive update --latest foo should only update projects that have foo', workspaceDir: process.cwd(), }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) await update.handler({ ...DEFAULT_OPTS, @@ -311,22 +311,22 @@ test('recursive update --latest foo should only update projects that have foo', recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['@zkochan/async-regex-replace', 'foo', 'qar@100.1.0']) + }, ['@zkochan/async-regex-replace', '@pnpm.e2e/foo', '@pnpm.e2e/qar@100.1.0']) const lockfile = await readYamlFile('./pnpm-lock.yaml') - expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([ + expect(Object.keys(lockfile.packages ?? {}).sort()).toStrictEqual([ '/@zkochan/async-regex-replace/0.2.0', - '/bar/100.0.0', - '/foo/100.1.0', - '/qar/100.1.0', - ]) + '/@pnpm.e2e/bar/100.0.0', + '/@pnpm.e2e/foo/100.1.0', + '/@pnpm.e2e/qar/100.1.0', + ].sort()) }) test('recursive update --latest foo should only update packages that have foo', async () => { - await addDistTag({ package: 'foo', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.0.0', distTag: 'latest' }) - await addDistTag({ package: 'qar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/qar', version: '100.0.0', distTag: 'latest' }) const projects = preparePackages([ { @@ -334,8 +334,8 @@ test('recursive update --latest foo should only update packages that have foo', version: '1.0.0', dependencies: { - foo: '100.0.0', - qar: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', + '@pnpm.e2e/qar': '100.0.0', }, }, { @@ -343,7 +343,7 @@ test('recursive update --latest foo should only update packages that have foo', version: '1.0.0', dependencies: { - bar: '^100.0.0', + '@pnpm.e2e/bar': '^100.0.0', }, }, ]) @@ -358,8 +358,8 @@ test('recursive update --latest foo should only update packages that have foo', workspaceDir: process.cwd(), }) - await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' }) - await addDistTag({ package: 'bar', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/foo', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/bar', version: '100.1.0', distTag: 'latest' }) await update.handler({ ...DEFAULT_OPTS, @@ -369,18 +369,18 @@ test('recursive update --latest foo should only update packages that have foo', recursive: true, selectedProjectsGraph, workspaceDir: process.cwd(), - }, ['foo', 'qar@100.1.0']) + }, ['@pnpm.e2e/foo', '@pnpm.e2e/qar@100.1.0']) { const lockfile = await projects['project-1'].readLockfile() - expect(Object.keys(lockfile.packages ?? {})).toStrictEqual(['/foo/100.1.0', '/qar/100.1.0']) + expect(Object.keys(lockfile.packages ?? {})).toStrictEqual(['/@pnpm.e2e/foo/100.1.0', '/@pnpm.e2e/qar/100.1.0']) } { const lockfile = await projects['project-2'].readLockfile() - expect(Object.keys(lockfile.packages ?? {})).toStrictEqual(['/bar/100.0.0']) + expect(Object.keys(lockfile.packages ?? {})).toStrictEqual(['/@pnpm.e2e/bar/100.0.0']) } }) diff --git a/packages/plugin-commands-installation/test/update/update.ts b/packages/plugin-commands-installation/test/update/update.ts index 2163e39745e..9937bdaa64e 100644 --- a/packages/plugin-commands-installation/test/update/update.ts +++ b/packages/plugin-commands-installation/test/update/update.ts @@ -8,14 +8,14 @@ import loadJsonFile from 'load-json-file' import { DEFAULT_OPTS } from '../utils' test('update with "*" pattern', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '2.0.0', distTag: 'latest' }) await addDistTag({ package: '@pnpm.e2e/foo', version: '2.0.0', distTag: 'latest' }) const project = prepare({ dependencies: { - 'peer-a': '1.0.0', - 'peer-c': '1.0.0', + '@pnpm.e2e/peer-a': '1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', '@pnpm.e2e/foo': '1.0.0', }, }) @@ -31,12 +31,12 @@ test('update with "*" pattern', async () => { dir: process.cwd(), latest: true, workspaceDir: process.cwd(), - }, ['peer-*']) + }, ['@pnpm.e2e/peer-*']) const lockfile = await project.readLockfile() - expect(lockfile.packages['/peer-a/1.0.1']).toBeTruthy() - expect(lockfile.packages['/peer-c/2.0.0']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/peer-a/1.0.1']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/peer-c/2.0.0']).toBeTruthy() expect(lockfile.packages['/@pnpm.e2e/foo/1.0.0']).toBeTruthy() }) @@ -74,8 +74,8 @@ describe('update by package name', () => { beforeAll(async () => { prepare({ dependencies: { - 'peer-a': '1.0.0', - 'peer-c': '1.0.0', + '@pnpm.e2e/peer-a': '1.0.0', + '@pnpm.e2e/peer-c': '1.0.0', }, }) await install.handler({ @@ -93,7 +93,7 @@ describe('update by package name', () => { dir: process.cwd(), sharedWorkspaceLockfile: true, workspaceDir: process.cwd(), - }, ['peer-b']) + }, ['@pnpm.e2e/peer-b']) } catch (_err: any) { // eslint-disable-line err = _err } @@ -106,16 +106,16 @@ describe('update by package name', () => { dir: process.cwd(), sharedWorkspaceLockfile: true, workspaceDir: process.cwd(), - }, ['peer-b']) + }, ['@pnpm.e2e/peer-b']) }) }) test('update --no-save should not update package.json and pnpm-lock.yaml', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.0', distTag: 'latest' }) const project = prepare({ dependencies: { - 'peer-a': '^1.0.0', + '@pnpm.e2e/peer-a': '^1.0.0', }, }) @@ -127,14 +127,14 @@ test('update --no-save should not update package.json and pnpm-lock.yaml', async { const manifest = await loadJsonFile('package.json') - expect(manifest.dependencies?.['peer-a']).toBe('^1.0.0') + expect(manifest.dependencies?.['@pnpm.e2e/peer-a']).toBe('^1.0.0') const lockfile = await project.readLockfile() - expect(lockfile.specifiers['peer-a']).toBe('^1.0.0') - expect(lockfile.packages['/peer-a/1.0.0']).toBeTruthy() + expect(lockfile.specifiers['@pnpm.e2e/peer-a']).toBe('^1.0.0') + expect(lockfile.packages['/@pnpm.e2e/peer-a/1.0.0']).toBeTruthy() } - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) await update.handler({ ...DEFAULT_OPTS, @@ -146,27 +146,27 @@ test('update --no-save should not update package.json and pnpm-lock.yaml', async { const manifest = await loadJsonFile('package.json') - expect(manifest.dependencies?.['peer-a']).toBe('^1.0.0') + expect(manifest.dependencies?.['@pnpm.e2e/peer-a']).toBe('^1.0.0') const lockfile = await project.readLockfile() - expect(lockfile.specifiers['peer-a']).toBe('^1.0.0') - expect(lockfile.packages['/peer-a/1.0.1']).toBeTruthy() + expect(lockfile.specifiers['@pnpm.e2e/peer-a']).toBe('^1.0.0') + expect(lockfile.packages['/@pnpm.e2e/peer-a/1.0.1']).toBeTruthy() } }) // fix: https://github.com/pnpm/pnpm/issues/4196 test('update should work normal when set empty string version', async () => { - await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' }) - await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-a', version: '1.0.1', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/peer-c', version: '2.0.0', distTag: 'latest' }) await addDistTag({ package: '@pnpm.e2e/foo', version: '2.0.0', distTag: 'latest' }) const project = prepare({ dependencies: { - 'peer-a': '1.0.0', + '@pnpm.e2e/peer-a': '1.0.0', }, devDependencies: { '@pnpm.e2e/foo': '', - 'peer-c': '', + '@pnpm.e2e/peer-c': '', }, }) @@ -184,10 +184,10 @@ test('update should work normal when set empty string version', async () => { }, ['*']) const lockfile = await project.readLockfile() - expect(lockfile.packages['/peer-a/1.0.1']).toBeTruthy() - expect(lockfile.packages['/peer-c/2.0.0']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/peer-a/1.0.1']).toBeTruthy() + expect(lockfile.packages['/@pnpm.e2e/peer-c/2.0.0']).toBeTruthy() expect(lockfile.packages['/@pnpm.e2e/foo/2.0.0']).toBeTruthy() - expect(lockfile.dependencies['peer-a']).toEqual('1.0.1') + expect(lockfile.dependencies['@pnpm.e2e/peer-a']).toEqual('1.0.1') expect(lockfile.devDependencies['@pnpm.e2e/foo']).toEqual('2.0.0') - expect(lockfile.devDependencies['peer-c']).toEqual('2.0.0') + expect(lockfile.devDependencies['@pnpm.e2e/peer-c']).toEqual('2.0.0') }) diff --git a/packages/plugin-commands-installation/test/updateToLatestSpecsFromManifest.ts b/packages/plugin-commands-installation/test/updateToLatestSpecsFromManifest.ts index a6d343ed42c..e29b22563e6 100644 --- a/packages/plugin-commands-installation/test/updateToLatestSpecsFromManifest.ts +++ b/packages/plugin-commands-installation/test/updateToLatestSpecsFromManifest.ts @@ -2,7 +2,7 @@ import updateToLatestSpecsFromManifest, { createLatestSpecs } from '../lib/updat const MANIFEST = { dependencies: { - 'dep-of-pkg-with-1-dep': 'npm:pkg-with-1-dep@1.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': 'npm:@pnpm.e2e/pkg-with-1-dep@1.0.0', }, devDependencies: { foo: 'github:pnpm/foo', @@ -19,7 +19,7 @@ test('updateToLatestSpecsFromManifest()', () => { devDependencies: true, })) updateResult1.toHaveLength(2) - updateResult1.toContain('dep-of-pkg-with-1-dep@npm:pkg-with-1-dep@latest') + updateResult1.toContain('@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest') updateResult1.toContain('is-positive@latest') const updateResult2 = expect(updateToLatestSpecsFromManifest(MANIFEST, { @@ -28,15 +28,15 @@ test('updateToLatestSpecsFromManifest()', () => { devDependencies: false, })) updateResult2.toHaveLength(1) - updateResult2.toStrictEqual(['dep-of-pkg-with-1-dep@npm:pkg-with-1-dep@latest']) + updateResult2.toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest']) }) test('createLatestSpecs()', () => { expect( - createLatestSpecs(['dep-of-pkg-with-1-dep', 'is-positive@2.0.0', 'foo'], MANIFEST) - ).toStrictEqual(['dep-of-pkg-with-1-dep@npm:pkg-with-1-dep@latest', 'is-positive@2.0.0', 'foo']) + createLatestSpecs(['@pnpm.e2e/dep-of-pkg-with-1-dep', 'is-positive@2.0.0', 'foo'], MANIFEST) + ).toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest', 'is-positive@2.0.0', 'foo']) expect( - createLatestSpecs(['dep-of-pkg-with-1-dep', 'is-positive', 'foo', 'bar'], MANIFEST) - ).toStrictEqual(['dep-of-pkg-with-1-dep@npm:pkg-with-1-dep@latest', 'is-positive@latest', 'foo']) + createLatestSpecs(['@pnpm.e2e/dep-of-pkg-with-1-dep', 'is-positive', 'foo', 'bar'], MANIFEST) + ).toStrictEqual(['@pnpm.e2e/dep-of-pkg-with-1-dep@npm:@pnpm.e2e/pkg-with-1-dep@latest', 'is-positive@latest', 'foo']) }) diff --git a/packages/plugin-commands-listing/package.json b/packages/plugin-commands-listing/package.json index cb1ddaa37b4..44f7b5fa4ea 100644 --- a/packages/plugin-commands-listing/package.json +++ b/packages/plugin-commands-listing/package.json @@ -38,7 +38,7 @@ "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/plugin-commands-listing": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/ramda": "0.28.15", "execa": "npm:safe-execa@^0.1.2", "strip-ansi": "^6.0.1", diff --git a/packages/plugin-commands-listing/test/recursive.ts b/packages/plugin-commands-listing/test/recursive.ts index 7ff9aa88072..965766da61d 100644 --- a/packages/plugin-commands-listing/test/recursive.ts +++ b/packages/plugin-commands-listing/test/recursive.ts @@ -69,14 +69,14 @@ is-negative 1.0.0`) }) test('recursive list with shared-workspace-lockfile', async () => { - await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await addDistTag({ package: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) preparePackages([ { name: 'project-1', version: '1.0.0', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, { @@ -121,8 +121,8 @@ test('recursive list with shared-workspace-lockfile', async () => { project-1@1.0.0 ${path.resolve('project-1')} dependencies: -pkg-with-1-dep 100.0.0 -└── dep-of-pkg-with-1-dep 100.1.0 +@pnpm.e2e/pkg-with-1-dep 100.0.0 +└── @pnpm.e2e/dep-of-pkg-with-1-dep 100.1.0 Legend: production dependency, optional only, dev only diff --git a/packages/plugin-commands-listing/test/why.ts b/packages/plugin-commands-listing/test/why.ts index 5d455dc96ca..3a78d923295 100644 --- a/packages/plugin-commands-listing/test/why.ts +++ b/packages/plugin-commands-listing/test/why.ts @@ -24,8 +24,8 @@ test('`pnpm why` should fail if no package name was provided', async () => { test('"why" should find non-direct dependency', async () => { prepare({ dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }) @@ -35,14 +35,14 @@ test('"why" should find non-direct dependency', async () => { dev: false, dir: process.cwd(), optional: false, - }, ['dep-of-pkg-with-1-dep']) + }, ['@pnpm.e2e/dep-of-pkg-with-1-dep']) expect(stripAnsi(output)).toBe(`Legend: production dependency, optional only, dev only project@0.0.0 ${process.cwd()} dependencies: -dep-of-pkg-with-1-dep 100.0.0 -pkg-with-1-dep 100.0.0 -└── dep-of-pkg-with-1-dep 100.0.0`) +@pnpm.e2e/dep-of-pkg-with-1-dep 100.0.0 +@pnpm.e2e/pkg-with-1-dep 100.0.0 +└── @pnpm.e2e/dep-of-pkg-with-1-dep 100.0.0`) }) diff --git a/packages/plugin-commands-outdated/package.json b/packages/plugin-commands-outdated/package.json index 3eeb607a9ac..be315337005 100644 --- a/packages/plugin-commands-outdated/package.json +++ b/packages/plugin-commands-outdated/package.json @@ -38,7 +38,7 @@ "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/plugin-commands-outdated": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/ramda": "0.28.15", "@types/wrap-ansi": "^3.0.0", "@types/zkochan__table": "npm:@types/table@6.0.0" diff --git a/packages/plugin-commands-outdated/test/index.ts b/packages/plugin-commands-outdated/test/index.ts index 7cbc88ac310..60ff64fa3ce 100644 --- a/packages/plugin-commands-outdated/test/index.ts +++ b/packages/plugin-commands-outdated/test/index.ts @@ -51,18 +51,18 @@ test('pnpm outdated: show details', async () => { expect(exitCode).toBe(1) expect(stripAnsi(output)).toBe(`\ -┌───────────────────┬─────────┬────────────┬─────────────────────────────────────────────┐ -│ Package │ Current │ Latest │ Details │ -├───────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ -│ deprecated │ 1.0.0 │ Deprecated │ This package is deprecated. Lorem ipsum │ -│ │ │ │ dolor sit amet, consectetur adipiscing │ -│ │ │ │ elit. │ -│ │ │ │ https://foo.bar/qar │ -├───────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ -│ is-negative │ 1.0.0 │ 2.1.0 │ https://github.com/kevva/is-negative#readme │ -├───────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ -│ is-positive (dev) │ 1.0.0 │ 3.1.0 │ https://github.com/kevva/is-positive#readme │ -└───────────────────┴─────────┴────────────┴─────────────────────────────────────────────┘ +┌──────────────────────┬─────────┬────────────┬─────────────────────────────────────────────┐ +│ Package │ Current │ Latest │ Details │ +├──────────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ +│ @pnpm.e2e/deprecated │ 1.0.0 │ Deprecated │ This package is deprecated. Lorem ipsum │ +│ │ │ │ dolor sit amet, consectetur adipiscing │ +│ │ │ │ elit. │ +│ │ │ │ https://foo.bar/qar │ +├──────────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ +│ is-negative │ 1.0.0 │ 2.1.0 │ https://github.com/kevva/is-negative#readme │ +├──────────────────────┼─────────┼────────────┼─────────────────────────────────────────────┤ +│ is-positive (dev) │ 1.0.0 │ 3.1.0 │ https://github.com/kevva/is-positive#readme │ +└──────────────────────┴─────────┴────────────┴─────────────────────────────────────────────┘ `) }) @@ -126,13 +126,13 @@ test('pnpm outdated: showing only prod or dev dependencies', async () => { expect(exitCode).toBe(1) expect(stripAnsi(output)).toBe(`\ -┌─────────────┬─────────┬────────────┐ -│ Package │ Current │ Latest │ -├─────────────┼─────────┼────────────┤ -│ deprecated │ 1.0.0 │ Deprecated │ -├─────────────┼─────────┼────────────┤ -│ is-negative │ 1.0.0 │ 2.1.0 │ -└─────────────┴─────────┴────────────┘ +┌──────────────────────┬─────────┬────────────┐ +│ Package │ Current │ Latest │ +├──────────────────────┼─────────┼────────────┤ +│ @pnpm.e2e/deprecated │ 1.0.0 │ Deprecated │ +├──────────────────────┼─────────┼────────────┤ +│ is-negative │ 1.0.0 │ 2.1.0 │ +└──────────────────────┴─────────┴────────────┘ `) } }) @@ -152,7 +152,7 @@ test('pnpm outdated: no table', async () => { }) expect(exitCode).toBe(1) - expect(stripAnsi(output)).toBe(`deprecated + expect(stripAnsi(output)).toBe(`@pnpm.e2e/deprecated 1.0.0 => Deprecated is-negative @@ -172,7 +172,7 @@ is-positive (dev) }) expect(exitCode).toBe(1) - expect(stripAnsi(output)).toBe(`deprecated + expect(stripAnsi(output)).toBe(`@pnpm.e2e/deprecated 1.0.0 => Deprecated This package is deprecated. Lorem ipsum dolor sit amet, consectetur adipiscing @@ -204,15 +204,15 @@ test('pnpm outdated: only current lockfile is available', async () => { expect(exitCode).toBe(1) expect(stripAnsi(output)).toBe(`\ -┌───────────────────┬─────────┬────────────┐ -│ Package │ Current │ Latest │ -├───────────────────┼─────────┼────────────┤ -│ deprecated │ 1.0.0 │ Deprecated │ -├───────────────────┼─────────┼────────────┤ -│ is-negative │ 1.0.0 │ 2.1.0 │ -├───────────────────┼─────────┼────────────┤ -│ is-positive (dev) │ 1.0.0 │ 3.1.0 │ -└───────────────────┴─────────┴────────────┘ +┌──────────────────────┬─────────┬────────────┐ +│ Package │ Current │ Latest │ +├──────────────────────┼─────────┼────────────┤ +│ @pnpm.e2e/deprecated │ 1.0.0 │ Deprecated │ +├──────────────────────┼─────────┼────────────┤ +│ is-negative │ 1.0.0 │ 2.1.0 │ +├──────────────────────┼─────────┼────────────┤ +│ is-positive (dev) │ 1.0.0 │ 3.1.0 │ +└──────────────────────┴─────────┴────────────┘ `) }) @@ -229,15 +229,15 @@ test('pnpm outdated: only wanted lockfile is available', async () => { expect(exitCode).toBe(1) expect(stripAnsi(output)).toBe(`\ -┌───────────────────┬────────────────────────┬────────────┐ -│ Package │ Current │ Latest │ -├───────────────────┼────────────────────────┼────────────┤ -│ deprecated │ missing (wanted 1.0.0) │ Deprecated │ -├───────────────────┼────────────────────────┼────────────┤ -│ is-positive (dev) │ missing (wanted 3.1.0) │ 3.1.0 │ -├───────────────────┼────────────────────────┼────────────┤ -│ is-negative │ missing (wanted 1.1.0) │ 2.1.0 │ -└───────────────────┴────────────────────────┴────────────┘ +┌──────────────────────┬────────────────────────┬────────────┐ +│ Package │ Current │ Latest │ +├──────────────────────┼────────────────────────┼────────────┤ +│ @pnpm.e2e/deprecated │ missing (wanted 1.0.0) │ Deprecated │ +├──────────────────────┼────────────────────────┼────────────┤ +│ is-negative │ missing (wanted 2.1.0) │ 2.1.0 │ +├──────────────────────┼────────────────────────┼────────────┤ +│ is-positive (dev) │ missing (wanted 3.1.0) │ 3.1.0 │ +└──────────────────────┴────────────────────────┴────────────┘ `) }) diff --git a/packages/plugin-commands-patching/package.json b/packages/plugin-commands-patching/package.json index e1e9b2e509f..1d585faa49c 100644 --- a/packages/plugin-commands-patching/package.json +++ b/packages/plugin-commands-patching/package.json @@ -36,7 +36,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-patching": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/ramda": "0.28.15" }, "dependencies": { diff --git a/packages/plugin-commands-publishing/package.json b/packages/plugin-commands-publishing/package.json index 0ba84e290bc..0c609346fc7 100644 --- a/packages/plugin-commands-publishing/package.json +++ b/packages/plugin-commands-publishing/package.json @@ -39,7 +39,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-publishing": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/cross-spawn": "^6.0.2", "@types/is-ci": "^3.0.0", "@types/is-windows": "^1.0.0", diff --git a/packages/plugin-commands-rebuild/package.json b/packages/plugin-commands-rebuild/package.json index be0d35aaa45..3e781d78e6f 100644 --- a/packages/plugin-commands-rebuild/package.json +++ b/packages/plugin-commands-rebuild/package.json @@ -37,7 +37,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-rebuild": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/test-fixtures": "workspace:*", "@types/ramda": "0.28.15", "@types/semver": "7.3.10", diff --git a/packages/plugin-commands-rebuild/test/index.ts b/packages/plugin-commands-rebuild/test/index.ts index 0645190b94d..fca4f6de569 100644 --- a/packages/plugin-commands-rebuild/test/index.ts +++ b/packages/plugin-commands-rebuild/test/index.ts @@ -23,7 +23,7 @@ test('rebuilds dependencies', async () => { pnpmBin, 'add', '--save-dev', - 'pre-and-postinstall-scripts-example', + '@pnpm.e2e/pre-and-postinstall-scripts-example', 'pnpm/test-git-fetch#299c6d89507571462b992b92407a8a07663e32ee', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, @@ -33,7 +33,7 @@ test('rebuilds dependencies', async () => { let modules = await project.readModulesManifest() expect(modules!.pendingBuilds).toStrictEqual([ - '/pre-and-postinstall-scripts-example/1.0.0', + '/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0', 'github.com/pnpm/test-git-fetch/299c6d89507571462b992b92407a8a07663e32ee', ]) @@ -52,13 +52,13 @@ test('rebuilds dependencies', async () => { expect(modules!.pendingBuilds.length).toBe(0) { - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() - expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-prepare.js')).toBeFalsy() + expect(await exists('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js')).toBeTruthy() - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') } @@ -109,8 +109,8 @@ test('rebuilds specific dependencies', async () => { pnpmBin, 'add', '--save-dev', - 'pre-and-postinstall-scripts-example', - 'zkochan/install-scripts-example', + '@pnpm.e2e/pre-and-postinstall-scripts-example', + 'pnpm-e2e/install-scripts-example#b6cfdb8af6f8d5ebc5e7de6831af9d38084d765b', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, `--cache-dir=${cacheDir}`, @@ -127,8 +127,8 @@ test('rebuilds specific dependencies', async () => { storeDir, }, ['install-scripts-example-for-pnpm']) - await project.hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall') - await project.hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall') + await project.hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') + await project.hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') const generatedByPreinstall = project.requireModule('install-scripts-example-for-pnpm/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') @@ -144,7 +144,7 @@ test('rebuild with pending option', async () => { await execa('node', [ pnpmBin, 'add', - 'pre-and-postinstall-scripts-example', + '@pnpm.e2e/pre-and-postinstall-scripts-example', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, `--cache-dir=${cacheDir}`, @@ -153,7 +153,7 @@ test('rebuild with pending option', async () => { await execa('node', [ pnpmBin, 'add', - 'zkochan/install-scripts-example', + 'pnpm-e2e/install-scripts-example#b6cfdb8af6f8d5ebc5e7de6831af9d38084d765b', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, `--cache-dir=${cacheDir}`, @@ -162,12 +162,12 @@ test('rebuild with pending option', async () => { let modules = await project.readModulesManifest() expect(modules!.pendingBuilds).toStrictEqual([ - '/pre-and-postinstall-scripts-example/1.0.0', - 'github.com/zkochan/install-scripts-example/6d879afcee10ece4d3f0e8c09de2993232f3430a', + '/@pnpm.e2e/pre-and-postinstall-scripts-example/1.0.0', + 'github.com/pnpm-e2e/install-scripts-example/b6cfdb8af6f8d5ebc5e7de6831af9d38084d765b', ]) - await project.hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall') - await project.hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall') + await project.hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') + await project.hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') await project.hasNot('install-scripts-example-for-pnpm/generated-by-preinstall') await project.hasNot('install-scripts-example-for-pnpm/generated-by-postinstall') @@ -186,10 +186,10 @@ test('rebuild with pending option', async () => { expect(modules!.pendingBuilds.length).toBe(0) { - const generatedByPreinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = project.requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = project.requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') } @@ -210,7 +210,7 @@ test('rebuild dependencies in correct order', async () => { await execa('node', [ pnpmBin, 'add', - 'with-postinstall-a', + '@pnpm.e2e/with-postinstall-a', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, `--cache-dir=${cacheDir}`, @@ -221,8 +221,8 @@ test('rebuild dependencies in correct order', async () => { expect(modules).toBeTruthy() expect(modules!.pendingBuilds.length).not.toBe(0) - await project.hasNot('.pnpm/with-postinstall-b@1.0.0/node_modules/with-postinstall-b/output.json') - await project.hasNot('with-postinstall-a/output.json') + await project.hasNot('.pnpm/@pnpm.e2e+with-postinstall-b@1.0.0/node_modules/@pnpm.e2e/with-postinstall-b/output.json') + await project.hasNot('@pnpm.e2e/with-postinstall-a/output.json') await rebuild.handler({ ...DEFAULT_OPTS, @@ -237,7 +237,7 @@ test('rebuild dependencies in correct order', async () => { expect(modules).toBeTruthy() expect(modules!.pendingBuilds.length).toBe(0) - expect(+project.requireModule('.pnpm/with-postinstall-b@1.0.0/node_modules/with-postinstall-b/output.json')[0] < +project.requireModule('with-postinstall-a/output.json')[0]).toBeTruthy() + expect(+project.requireModule('.pnpm/@pnpm.e2e+with-postinstall-b@1.0.0/node_modules/@pnpm.e2e/with-postinstall-b/output.json')[0] < +project.requireModule('@pnpm.e2e/with-postinstall-a/output.json')[0]).toBeTruthy() }) test('rebuild links bins', async () => { @@ -248,8 +248,8 @@ test('rebuild links bins', async () => { await execa('node', [ pnpmBin, 'add', - 'has-generated-bins-as-dep', - 'generated-bins', + '@pnpm.e2e/has-generated-bins-as-dep', + '@pnpm.e2e/generated-bins', `--registry=${REGISTRY}`, `--store-dir=${storeDir}`, `--cache-dir=${cacheDir}`, @@ -259,9 +259,9 @@ test('rebuild links bins', async () => { expect(await exists(path.resolve('node_modules/.bin/cmd1'))).toBeFalsy() expect(await exists(path.resolve('node_modules/.bin/cmd2'))).toBeFalsy() - expect(await exists(path.resolve('node_modules/has-generated-bins-as-dep/package.json'))).toBeTruthy() - expect(await exists(path.resolve('node_modules/has-generated-bins-as-dep/node_modules/.bin/cmd1'))).toBeFalsy() - expect(await exists(path.resolve('node_modules/has-generated-bins-as-dep/node_modules/.bin/cmd2'))).toBeFalsy() + expect(await exists(path.resolve('node_modules/@pnpm.e2e/has-generated-bins-as-dep/package.json'))).toBeTruthy() + expect(await exists(path.resolve('node_modules/@pnpm.e2e/has-generated-bins-as-dep/node_modules/.bin/cmd1'))).toBeFalsy() + expect(await exists(path.resolve('node_modules/@pnpm.e2e/has-generated-bins-as-dep/node_modules/.bin/cmd2'))).toBeFalsy() const modules = await project.readModulesManifest() await rebuild.handler({ @@ -275,17 +275,17 @@ test('rebuild links bins', async () => { await project.isExecutable('.bin/cmd1') await project.isExecutable('.bin/cmd2') - await project.isExecutable('has-generated-bins-as-dep/node_modules/.bin/cmd1') - await project.isExecutable('has-generated-bins-as-dep/node_modules/.bin/cmd2') + await project.isExecutable('@pnpm.e2e/has-generated-bins-as-dep/node_modules/.bin/cmd1') + await project.isExecutable('@pnpm.e2e/has-generated-bins-as-dep/node_modules/.bin/cmd2') }) test(`rebuild should not fail on incomplete ${WANTED_LOCKFILE}`, async () => { const project = prepare({ dependencies: { - 'pre-and-postinstall-scripts-example': '1.0.0', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0', }, optionalDependencies: { - 'not-compatible-with-any-os': '1.0.0', + '@pnpm.e2e/not-compatible-with-any-os': '1.0.0', }, }) const cacheDir = path.resolve('cache') diff --git a/packages/plugin-commands-rebuild/test/recursive.ts b/packages/plugin-commands-rebuild/test/recursive.ts index 074b2d2d247..ca0b05412b8 100644 --- a/packages/plugin-commands-rebuild/test/recursive.ts +++ b/packages/plugin-commands-rebuild/test/recursive.ts @@ -16,7 +16,7 @@ test('pnpm recursive rebuild', async () => { version: '1.0.0', dependencies: { - 'pre-and-postinstall-scripts-example': '*', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', }, }, { @@ -24,7 +24,7 @@ test('pnpm recursive rebuild', async () => { version: '1.0.0', dependencies: { - 'pre-and-postinstall-scripts-example': '*', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', }, }, ]) @@ -41,10 +41,10 @@ test('pnpm recursive rebuild', async () => { '--reporter=append-only', ], { stdout: 'inherit' }) - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') const modulesManifest = await projects['project-1'].readModulesManifest() await rebuild.handler({ @@ -57,10 +57,10 @@ test('pnpm recursive rebuild', async () => { workspaceDir: process.cwd(), }, []) - await projects['project-1'].has('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-1'].has('pre-and-postinstall-scripts-example/generated-by-postinstall.js') - await projects['project-2'].has('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-2'].has('pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-1'].has('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-1'].has('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-2'].has('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-2'].has('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') }) // TODO: make this test pass diff --git a/packages/plugin-commands-script-runners/package.json b/packages/plugin-commands-script-runners/package.json index 60cb8ab0555..987096244b6 100644 --- a/packages/plugin-commands-script-runners/package.json +++ b/packages/plugin-commands-script-runners/package.json @@ -38,7 +38,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-script-runners": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/is-windows": "^1.0.0", "@types/ramda": "0.28.15", "is-windows": "^1.0.2", diff --git a/packages/plugin-commands-script-runners/test/dlx.e2e.ts b/packages/plugin-commands-script-runners/test/dlx.e2e.ts index 60e7aa097b7..2d61744caa2 100644 --- a/packages/plugin-commands-script-runners/test/dlx.e2e.ts +++ b/packages/plugin-commands-script-runners/test/dlx.e2e.ts @@ -34,7 +34,7 @@ test('dlx should work when the package name differs from the bin name', async () ...DEFAULT_OPTS, dir: path.resolve('project'), storeDir: path.resolve('store'), - }, ['touch-file-one-bin']) + }, ['@pnpm.e2e/touch-file-one-bin']) expect(fs.existsSync('touch.txt')).toBeTruthy() }) @@ -47,8 +47,8 @@ test('dlx should fail when the installed package has many commands and none equa ...DEFAULT_OPTS, dir: path.resolve('project'), storeDir: path.resolve('store'), - }, ['touch-file-many-bins']) - ).rejects.toThrow('Could not determine executable to run. touch-file-many-bins has multiple binaries: t, tt') + }, ['@pnpm.e2e/touch-file-many-bins']) + ).rejects.toThrow('Could not determine executable to run. @pnpm.e2e/touch-file-many-bins has multiple binaries: t, tt') }) test('dlx should not fail when the installed package has many commands and one equals the package name', async () => { @@ -58,7 +58,7 @@ test('dlx should not fail when the installed package has many commands and one e ...DEFAULT_OPTS, dir: path.resolve('project'), storeDir: path.resolve('store'), - }, ['touch-file-good-bin-name']) + }, ['@pnpm.e2e/touch-file-good-bin-name']) expect(fs.existsSync('touch.txt')).toBeTruthy() }) diff --git a/packages/plugin-commands-script-runners/test/index.ts b/packages/plugin-commands-script-runners/test/index.ts index db9dd803a69..86803c4c244 100644 --- a/packages/plugin-commands-script-runners/test/index.ts +++ b/packages/plugin-commands-script-runners/test/index.ts @@ -429,7 +429,7 @@ test('pnpm run with custom shell', async () => { build: 'foo bar', }, dependencies: { - 'shell-mock': '0.0.0', + '@pnpm.e2e/shell-mock': '0.0.0', }, }) diff --git a/packages/plugin-commands-store/package.json b/packages/plugin-commands-store/package.json index d568b11fcb0..a1e06462957 100644 --- a/packages/plugin-commands-store/package.json +++ b/packages/plugin-commands-store/package.json @@ -38,7 +38,7 @@ "@pnpm/logger": "^4.0.0", "@pnpm/plugin-commands-store": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@types/archy": "0.0.32", "@types/ramda": "0.28.15", "@types/ssri": "^7.1.1", diff --git a/packages/pnpm/package.json b/packages/pnpm/package.json index d05fc3ad89a..e410b7100f2 100644 --- a/packages/pnpm/package.json +++ b/packages/pnpm/package.json @@ -56,7 +56,7 @@ "@pnpm/prepare": "workspace:*", "@pnpm/read-package-json": "workspace:*", "@pnpm/read-project-manifest": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/run-npm": "workspace:*", "@pnpm/tabtab": "^0.1.2", "@pnpm/types": "workspace:*", @@ -75,6 +75,7 @@ "cross-var-no-babel": "^1.2.0", "deep-require-cwd": "1.0.0", "delay": "^5.0.0", + "dependency-path": "workspace:*", "dir-is-case-sensitive": "^2.0.0", "esbuild": "^0.15.2", "execa": "npm:safe-execa@^0.1.2", diff --git a/packages/pnpm/test/cli.ts b/packages/pnpm/test/cli.ts index 287df2f35c8..9b15f7ed046 100644 --- a/packages/pnpm/test/cli.ts +++ b/packages/pnpm/test/cli.ts @@ -133,7 +133,7 @@ test('pnpx works', () => { XDG_DATA_HOME: global, } - const result = execPnpxSync(['hello-world-js-bin'], { env }) + const result = execPnpxSync(['@pnpm.e2e/hello-world-js-bin'], { env }) expect(result.stdout.toString()).toEqual('Hello world!\n') expect(result.status).toBe(0) diff --git a/packages/pnpm/test/hooks.ts b/packages/pnpm/test/hooks.ts index 07de8e6eed2..ccc2bd8698a 100644 --- a/packages/pnpm/test/hooks.ts +++ b/packages/pnpm/test/hooks.ts @@ -14,7 +14,7 @@ test('readPackage hook in single project doesn\'t modify manifest', async () => if (pkg.name === 'project') { context.log('good') pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' } return pkg } @@ -55,7 +55,7 @@ test('readPackage hook in monorepo doesn\'t modify manifest', async () => { function readPackage (pkg) { if (pkg.name === 'project-a') { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' } return pkg } diff --git a/packages/pnpm/test/install/global.ts b/packages/pnpm/test/install/global.ts index 7d3e6fb39e5..a95bdfb6254 100644 --- a/packages/pnpm/test/install/global.ts +++ b/packages/pnpm/test/install/global.ts @@ -47,7 +47,7 @@ test('global installation to custom directory with --global-dir', async () => { test('always install latest when doing global installation without spec', async () => { prepare() - await addDistTag('peer-c', '2.0.0', 'latest') + await addDistTag('@pnpm.e2e/peer-c', '2.0.0', 'latest') const global = path.resolve('..', 'global') const pnpmHome = path.join(global, 'pnpm') @@ -55,14 +55,14 @@ test('always install latest when doing global installation without spec', async const env = { [PATH_NAME]: pnpmHome, PNPM_HOME: pnpmHome, XDG_DATA_HOME: global } - await execPnpm(['install', '-g', 'peer-c@1'], { env }) - await execPnpm(['install', '-g', 'peer-c'], { env }) + await execPnpm(['install', '-g', '@pnpm.e2e/peer-c@1'], { env }) + await execPnpm(['install', '-g', '@pnpm.e2e/peer-c'], { env }) const globalPrefix = path.join(global, `pnpm/global/${LAYOUT_VERSION}`) process.chdir(globalPrefix) - expect((await import(path.resolve('node_modules', 'peer-c', 'package.json'))).default.version).toBe('2.0.0') + expect((await import(path.resolve('node_modules', '@pnpm.e2e/peer-c', 'package.json'))).default.version).toBe('2.0.0') }) test('run lifecycle events of global packages in correct working directory', async () => { @@ -82,7 +82,7 @@ test('run lifecycle events of global packages in correct working directory', asy XDG_DATA_HOME: global, } - await execPnpm(['install', '-g', 'postinstall-calls-pnpm@1.0.0'], { env }) + await execPnpm(['install', '-g', '@pnpm.e2e/postinstall-calls-pnpm@1.0.0'], { env }) - expect(await exists(path.join(global, `pnpm/global/${LAYOUT_VERSION}/node_modules/postinstall-calls-pnpm/created-by-postinstall`))).toBeTruthy() + expect(await exists(path.join(global, `pnpm/global/${LAYOUT_VERSION}/node_modules/@pnpm.e2e/postinstall-calls-pnpm/created-by-postinstall`))).toBeTruthy() }) diff --git a/packages/pnpm/test/install/hoist.ts b/packages/pnpm/test/install/hoist.ts index 98181b248b8..7ce14ec4fad 100644 --- a/packages/pnpm/test/install/hoist.ts +++ b/packages/pnpm/test/install/hoist.ts @@ -43,7 +43,7 @@ test('shamefully-hoist: applied to all the workspace projects when set to true i name: 'root', dependencies: { - 'pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/pkg-with-1-dep': '100.0.0', }, }, }, @@ -52,7 +52,7 @@ test('shamefully-hoist: applied to all the workspace projects when set to true i version: '1.0.0', dependencies: { - foobar: '100.0.0', + '@pnpm.e2e/foobar': '100.0.0', }, }, ]) @@ -62,8 +62,8 @@ test('shamefully-hoist: applied to all the workspace projects when set to true i await execPnpm(['recursive', 'install']) - await projects.root.has('dep-of-pkg-with-1-dep') - await projects.root.has('foo') - await projects.project.hasNot('foo') - await projects.project.has('foobar') + await projects.root.has('@pnpm.e2e/dep-of-pkg-with-1-dep') + await projects.root.has('@pnpm.e2e/foo') + await projects.project.hasNot('@pnpm.e2e/foo') + await projects.project.has('@pnpm.e2e/foobar') }) diff --git a/packages/pnpm/test/install/hooks.ts b/packages/pnpm/test/install/hooks.ts index d207a7b42cb..3a35f53d39b 100644 --- a/packages/pnpm/test/install/hooks.ts +++ b/packages/pnpm/test/install/hooks.ts @@ -2,6 +2,7 @@ import { promises as fs } from 'fs' import path from 'path' import { Lockfile } from '@pnpm/lockfile-types' import prepare, { preparePackages } from '@pnpm/prepare' +import { createPeersFolderSuffix } from 'dependency-path' import readYamlFile from 'read-yaml-file' import loadJsonFile from 'load-json-file' import writeYamlFile from 'write-yaml-file' @@ -19,8 +20,8 @@ test('readPackage hook', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -29,11 +30,11 @@ test('readPackage hook', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep']) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('readPackage async hook', async () => { @@ -44,8 +45,8 @@ test('readPackage async hook', async () => { module.exports = { hooks: { async readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -54,11 +55,11 @@ test('readPackage async hook', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep']) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('readPackage hook makes installation fail if it does not return the modified package manifests', async () => { @@ -73,7 +74,7 @@ test('readPackage hook makes installation fail if it does not return the modifie } `, 'utf8') - const result = execPnpmSync(['install', 'pkg-with-1-dep']) + const result = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep']) expect(result.status).toBe(1) }) @@ -86,8 +87,8 @@ test('readPackage hook from custom location', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -96,11 +97,11 @@ test('readPackage hook from custom location', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep', '--pnpmfile', 'pnpm.js']) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep', '--pnpmfile', 'pnpm.js']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('readPackage hook from global pnpmfile', async () => { @@ -111,8 +112,8 @@ test('readPackage hook from global pnpmfile', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -121,11 +122,11 @@ test('readPackage hook from global pnpmfile', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('readPackage hook from global pnpmfile and local pnpmfile', async () => { @@ -136,8 +137,8 @@ test('readPackage hook from global pnpmfile and local pnpmfile', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' pkg.dependencies['is-positive'] = '3.0.0' } return pkg @@ -151,7 +152,7 @@ test('readPackage hook from global pnpmfile and local pnpmfile', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { pkg.dependencies['is-positive'] = '1.0.0' } return pkg @@ -161,11 +162,11 @@ test('readPackage hook from global pnpmfile and local pnpmfile', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') await project.storeHas('is-positive', '1.0.0') }) @@ -177,8 +178,8 @@ test('readPackage async hook from global pnpmfile and local pnpmfile', async () module.exports = { hooks: { async readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' pkg.dependencies['is-positive'] = '3.0.0' } return pkg @@ -192,7 +193,7 @@ test('readPackage async hook from global pnpmfile and local pnpmfile', async () module.exports = { hooks: { async readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { pkg.dependencies['is-positive'] = '1.0.0' } return pkg @@ -202,11 +203,11 @@ test('readPackage async hook from global pnpmfile and local pnpmfile', async () `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs')]) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') await project.storeHas('is-positive', '1.0.0') }) @@ -226,7 +227,7 @@ test('readPackage hook from pnpmfile at root of workspace', async () => { module.exports = { hooks: { readPackage } } function readPackage (pkg) { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' return pkg } ` @@ -249,10 +250,10 @@ test('readPackage hook from pnpmfile at root of workspace', async () => { const lockfile = await readYamlFile('pnpm-lock.yaml') expect(lockfile.packages!['/is-positive/1.0.0'].dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0', }) expect(lockfile.packages!['/is-negative/1.0.0'].dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0', }) /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */ }) @@ -260,7 +261,7 @@ test('readPackage hook from pnpmfile at root of workspace', async () => { test('readPackage hook during update', async () => { const project = prepare({ dependencies: { - 'pkg-with-1-dep': '*', + '@pnpm.e2e/pkg-with-1-dep': '*', }, }) @@ -269,8 +270,8 @@ test('readPackage hook during update', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -279,11 +280,11 @@ test('readPackage hook during update', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') await execPnpm(['update']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') }) test('prints meaningful error when there is syntax error in .pnpmfile.cjs', async () => { @@ -291,7 +292,7 @@ test('prints meaningful error when there is syntax error in .pnpmfile.cjs', asyn await fs.writeFile('.pnpmfile.cjs', '/boom', 'utf8') - const proc = execPnpmSync(['install', 'pkg-with-1-dep']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep']) expect(proc.stderr.toString()).toContain('SyntaxError: Invalid regular expression: missing /') expect(proc.status).toBe(1) @@ -302,7 +303,7 @@ test('fails when .pnpmfile.cjs requires a non-existed module', async () => { await fs.writeFile('.pnpmfile.cjs', 'module.exports = require("./this-does-node-exist")', 'utf8') - const proc = execPnpmSync(['install', 'pkg-with-1-dep']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep']) expect(proc.stdout.toString()).toContain('Error during pnpmfile execution') expect(proc.status).toBe(1) @@ -316,8 +317,8 @@ test('ignore .pnpmfile.cjs when --ignore-pnpmfile is used', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -325,17 +326,17 @@ test('ignore .pnpmfile.cjs when --ignore-pnpmfile is used', async () => { } `, 'utf8') - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - await execPnpm(['install', 'pkg-with-1-dep', '--ignore-pnpmfile']) + await execPnpm(['install', '@pnpm.e2e/pkg-with-1-dep', '--ignore-pnpmfile']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') }) test('ignore .pnpmfile.cjs during update when --ignore-pnpmfile is used', async () => { const project = prepare({ dependencies: { - 'pkg-with-1-dep': '*', + '@pnpm.e2e/pkg-with-1-dep': '*', }, }) @@ -344,8 +345,8 @@ test('ignore .pnpmfile.cjs during update when --ignore-pnpmfile is used', async module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' } return pkg } @@ -353,11 +354,11 @@ test('ignore .pnpmfile.cjs during update when --ignore-pnpmfile is used', async } `, 'utf8') - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') await execPnpm(['update', '--ignore-pnpmfile']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') }) test('pnpmfile: pass log function to readPackage hook', async () => { @@ -368,9 +369,9 @@ test('pnpmfile: pass log function to readPackage hook', async () => { module.exports = { hooks: { readPackage (pkg, context) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' - context.log('dep-of-pkg-with-1-dep pinned to 100.0.0') + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' + context.log('@pnpm.e2e/dep-of-pkg-with-1-dep pinned to 100.0.0') } return pkg } @@ -379,11 +380,11 @@ test('pnpmfile: pass log function to readPackage hook', async () => { `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - const proc = execPnpmSync(['install', 'pkg-with-1-dep', '--reporter', 'ndjson']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep', '--reporter', 'ndjson']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') const outputs = proc.stdout.toString().split(/\r?\n/) @@ -395,7 +396,7 @@ test('pnpmfile: pass log function to readPackage hook', async () => { expect(hookLog.prefix).toBeTruthy() expect(hookLog.from).toBeTruthy() expect(hookLog.hook).toBe('readPackage') - expect(hookLog.message).toBe('dep-of-pkg-with-1-dep pinned to 100.0.0') + expect(hookLog.message).toBe('@pnpm.e2e/dep-of-pkg-with-1-dep pinned to 100.0.0') }) test('pnpmfile: pass log function to readPackage hook of global and local pnpmfile', async () => { @@ -406,8 +407,8 @@ test('pnpmfile: pass log function to readPackage hook of global and local pnpmfi module.exports = { hooks: { readPackage (pkg, context) { - if (pkg.name === 'pkg-with-1-dep') { - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.0.0' + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.0.0' pkg.dependencies['is-positive'] = '3.0.0' context.log('is-positive pinned to 3.0.0') } @@ -422,7 +423,7 @@ test('pnpmfile: pass log function to readPackage hook of global and local pnpmfi module.exports = { hooks: { readPackage (pkg, context) { - if (pkg.name === 'pkg-with-1-dep') { + if (pkg.name === '@pnpm.e2e/pkg-with-1-dep') { pkg.dependencies['is-positive'] = '1.0.0' context.log('is-positive pinned to 1.0.0') } @@ -433,11 +434,11 @@ test('pnpmfile: pass log function to readPackage hook of global and local pnpmfi `, 'utf8') // w/o the hook, 100.1.0 would be installed - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') - const proc = execPnpmSync(['install', 'pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs'), '--reporter', 'ndjson']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep', '--global-pnpmfile', path.resolve('..', '.pnpmfile.cjs'), '--reporter', 'ndjson']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') await project.storeHas('is-positive', '1.0.0') const outputs = proc.stdout.toString().split(/\r?\n/) @@ -477,7 +478,7 @@ test('pnpmfile: run afterAllResolved hook', async () => { } `, 'utf8') - const proc = execPnpmSync(['install', 'pkg-with-1-dep', '--reporter', 'ndjson']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep', '--reporter', 'ndjson']) const outputs = proc.stdout.toString().split(/\r?\n/) @@ -507,7 +508,7 @@ test('pnpmfile: run async afterAllResolved hook', async () => { } `, 'utf8') - const proc = execPnpmSync(['install', 'pkg-with-1-dep', '--reporter', 'ndjson']) + const proc = execPnpmSync(['install', '@pnpm.e2e/pkg-with-1-dep', '--reporter', 'ndjson']) const outputs = proc.stdout.toString().split(/\r?\n/) @@ -530,7 +531,7 @@ test('readPackage hook normalizes the package manifest', async () => { module.exports = { hooks: { readPackage (pkg) { - if (pkg.name === 'dep-of-pkg-with-1-dep') { + if (pkg.name === '@pnpm.e2e/dep-of-pkg-with-1-dep') { pkg.dependencies['is-positive'] = '*' pkg.optionalDependencies['is-negative'] = '*' pkg.peerDependencies['is-negative'] = '*' @@ -542,7 +543,7 @@ test('readPackage hook normalizes the package manifest', async () => { } `, 'utf8') - await execPnpm(['install', 'dep-of-pkg-with-1-dep']) + await execPnpm(['install', '@pnpm.e2e/dep-of-pkg-with-1-dep']) }) test('readPackage hook overrides project package', async () => { @@ -581,10 +582,10 @@ test('readPackage hook is used during removal inside a workspace', async () => { version: '1.0.0', dependencies: { - abc: '1.0.0', + '@pnpm.e2e/abc': '1.0.0', 'is-negative': '1.0.0', 'is-positive': '1.0.0', - 'peer-a': '1.0.0', + '@pnpm.e2e/peer-a': '1.0.0', }, }, ]) @@ -596,7 +597,7 @@ test('readPackage hook is used during removal inside a workspace', async () => { hooks: { readPackage (pkg) { switch (pkg.name) { - case 'abc': + case '@pnpm.e2e/abc': pkg.peerDependencies['is-negative'] = '1.0.0' break } @@ -612,7 +613,8 @@ test('readPackage hook is used during removal inside a workspace', async () => { process.chdir('..') const lockfile = await readYamlFile('pnpm-lock.yaml') - expect(lockfile.packages!['/abc/1.0.0_vt2fli7reel7pfbmpdhs3d7fya'].peerDependencies!['is-negative']).toBe('1.0.0') + const suffix = createPeersFolderSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: 'is-negative', version: '1.0.0' }]) + expect(lockfile.packages![`/@pnpm.e2e/abc/1.0.0${suffix}`].peerDependencies!['is-negative']).toBe('1.0.0') }) test('preResolution hook', async () => { diff --git a/packages/pnpm/test/install/misc.ts b/packages/pnpm/test/install/misc.ts index ddefd21f39f..6ab03ca3c40 100644 --- a/packages/pnpm/test/install/misc.ts +++ b/packages/pnpm/test/install/misc.ts @@ -23,7 +23,7 @@ const skipOnWindows = isWindows() ? test.skip : test test('bin files are found by lifecycle scripts', () => { prepare({ dependencies: { - 'hello-world-js-bin': '*', + '@pnpm.e2e/hello-world-js-bin': '*', }, scripts: { postinstall: 'hello-world-js-bin', @@ -148,15 +148,15 @@ test('install save new dep with the specified spec', async () => { test("don't fail on case insensitive filesystems when package has 2 files with same name", async () => { const project = prepare() - await execPnpm(['install', 'with-same-file-in-different-cases']) + await execPnpm(['install', '@pnpm.e2e/with-same-file-in-different-cases']) - await project.has('with-same-file-in-different-cases') + await project.has('@pnpm.e2e/with-same-file-in-different-cases') - const { files: integrityFile } = await loadJsonFile<{ files: object }>(await project.getPkgIndexFilePath('with-same-file-in-different-cases', '1.0.0')) + const { files: integrityFile } = await loadJsonFile<{ files: object }>(await project.getPkgIndexFilePath('@pnpm.e2e/with-same-file-in-different-cases', '1.0.0')) const packageFiles = Object.keys(integrityFile).sort() expect(packageFiles).toStrictEqual(['Foo.js', 'foo.js', 'package.json']) - const files = await fs.readdir('node_modules/with-same-file-in-different-cases') + const files = await fs.readdir('node_modules/@pnpm.e2e/with-same-file-in-different-cases') const storeDir = await project.getStorePath() if (await dirIsCaseSensitive(storeDir)) { expect([...files]).toStrictEqual(['Foo.js', 'foo.js', 'package.json']) @@ -172,10 +172,10 @@ test('top-level packages should find the plugins they use', async () => { }, }) - await execPnpm(['install', 'pkg-that-uses-plugins', 'plugin-example']) + await execPnpm(['install', '@pnpm.e2e/pkg-that-uses-plugins', '@pnpm.e2e/plugin-example']) const result = crossSpawn.sync('npm', ['test']) - expect(result.stdout.toString()).toContain('My plugin is plugin-example') + expect(result.stdout.toString()).toContain('My plugin is @pnpm.e2e/plugin-example') expect(result.status).toBe(0) }) @@ -200,7 +200,7 @@ test('run js bin file', async () => { }, }) - await execPnpm(['install', 'hello-world-js-bin']) + await execPnpm(['install', '@pnpm.e2e/hello-world-js-bin']) const result = crossSpawn.sync('npm', ['test']) expect(result.stdout.toString()).toContain('Hello world!') @@ -210,11 +210,11 @@ test('run js bin file', async () => { test('create a package.json if there is none', async () => { prepareEmpty() - await execPnpm(['install', 'dep-of-pkg-with-1-dep@100.1.0']) + await execPnpm(['install', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0']) expect((await import(path.resolve('package.json'))).default).toStrictEqual({ dependencies: { - 'dep-of-pkg-with-1-dep': '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0', }, }) }) diff --git a/packages/pnpm/test/install/optional.ts b/packages/pnpm/test/install/optional.ts index 4f424e87688..6023a7eaa69 100644 --- a/packages/pnpm/test/install/optional.ts +++ b/packages/pnpm/test/install/optional.ts @@ -5,7 +5,7 @@ import { execPnpm } from '../utils' test('installing optional dependencies when --no-optional is not used', async () => { const project = prepare({ dependencies: { - 'pkg-with-good-optional': '*', + '@pnpm.e2e/pkg-with-good-optional': '*', }, optionalDependencies: { 'is-positive': '1.0.0', @@ -15,16 +15,16 @@ test('installing optional dependencies when --no-optional is not used', async () await execPnpm(['install']) await project.has('is-positive') - await project.has('pkg-with-good-optional') + await project.has('@pnpm.e2e/pkg-with-good-optional') - expect(deepRequireCwd(['pkg-with-good-optional', 'dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() - expect(deepRequireCwd(['pkg-with-good-optional', 'is-positive', './package.json'])).toBeTruthy() + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-good-optional', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-good-optional', 'is-positive', './package.json'])).toBeTruthy() }) test('not installing optional dependencies when --no-optional is used', async () => { const project = prepare({ dependencies: { - 'pkg-with-good-optional': '*', + '@pnpm.e2e/pkg-with-good-optional': '*', }, optionalDependencies: { 'is-positive': '1.0.0', @@ -34,8 +34,8 @@ test('not installing optional dependencies when --no-optional is used', async () await execPnpm(['install', '--no-optional']) await project.hasNot('is-positive') - await project.has('pkg-with-good-optional') + await project.has('@pnpm.e2e/pkg-with-good-optional') - expect(deepRequireCwd(['pkg-with-good-optional', 'dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() - expect(deepRequireCwd.silent(['pkg-with-good-optional', 'is-positive', './package.json'])).toBeFalsy() + expect(deepRequireCwd(['@pnpm.e2e/pkg-with-good-optional', '@pnpm.e2e/dep-of-pkg-with-1-dep', './package.json'])).toBeTruthy() + expect(deepRequireCwd.silent(['@pnpm.e2e/pkg-with-good-optional', 'is-positive', './package.json'])).toBeFalsy() }) diff --git a/packages/pnpm/test/install/preferOffline.ts b/packages/pnpm/test/install/preferOffline.ts index 59f0f7028e3..8636929fab2 100644 --- a/packages/pnpm/test/install/preferOffline.ts +++ b/packages/pnpm/test/install/preferOffline.ts @@ -9,17 +9,17 @@ import { test('when prefer offline is used, meta from store is used, where latest might be out-of-date', async () => { const project = prepare() - await addDistTag('foo', '100.0.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.0.0', 'latest') // This will cache the meta of `foo` - await execPnpm(['install', 'foo']) + await execPnpm(['install', '@pnpm.e2e/foo']) await rimraf('node_modules') await rimraf(WANTED_LOCKFILE) - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') - await execPnpm(['install', 'foo', '--prefer-offline']) + await execPnpm(['install', '@pnpm.e2e/foo', '--prefer-offline']) - expect(project.requireModule('foo/package.json').version).toBe('100.0.0') + expect(project.requireModule('@pnpm.e2e/foo/package.json').version).toBe('100.0.0') }) diff --git a/packages/pnpm/test/monorepo/index.ts b/packages/pnpm/test/monorepo/index.ts index c95137b7362..44292849b5a 100644 --- a/packages/pnpm/test/monorepo/index.ts +++ b/packages/pnpm/test/monorepo/index.ts @@ -710,21 +710,21 @@ test('recursive install with link-workspace-packages and shared-workspace-lockfi const { default: outputs } = await import(path.resolve('output.json')) expect(outputs).toStrictEqual(['is-positive', 'project-1']) - await execPnpm(['recursive', 'install', 'pkg-with-1-dep', '--link-workspace-packages', '--shared-workspace-lockfile=true', '--store-dir', 'store']) + await execPnpm(['recursive', 'install', '@pnpm.e2e/pkg-with-1-dep', '--link-workspace-packages', '--shared-workspace-lockfile=true', '--store-dir', 'store']) { const pkg = await readPackageJsonFromDir(path.resolve('is-positive')) - expect(pkg.dependencies!['pkg-with-1-dep']).toBe('100.0.0') + expect(pkg.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('100.0.0') } { const pkg = await readPackageJsonFromDir(path.resolve('project-1')) - expect(pkg.dependencies!['pkg-with-1-dep']).toBe('~100.0.0') + expect(pkg.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('~100.0.0') } { const pkg = await readPackageJsonFromDir(path.resolve('is-positive2')) - expect(pkg.dependencies!['pkg-with-1-dep']).toBe('^100.0.0') + expect(pkg.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBe('^100.0.0') } }) @@ -857,7 +857,7 @@ test('recursive installation with shared-workspace-lockfile and a readPackage ho module.exports = { hooks: { readPackage } } function readPackage (pkg) { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' return pkg } ` @@ -867,7 +867,7 @@ test('recursive installation with shared-workspace-lockfile and a readPackage ho await execPnpm(['recursive', 'install', '--shared-workspace-lockfile', '--store-dir', 'store']) const lockfile = await readYamlFile(`./${WANTED_LOCKFILE}`) - expect(lockfile.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) await execPnpm(['recursive', 'install', '--shared-workspace-lockfile', '--store-dir', 'store', '--filter', 'project-1']) @@ -1261,7 +1261,7 @@ test('dependencies of workspace projects are built during headless installation' version: '1.0.0', dependencies: { - 'pre-and-postinstall-scripts-example': '1.0.0', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0', }, }, ]) @@ -1273,10 +1273,10 @@ test('dependencies of workspace projects are built during headless installation' await execPnpm(['recursive', 'install', '--frozen-lockfile']) { - const generatedByPreinstall = projects['project-1'].requireModule('pre-and-postinstall-scripts-example/generated-by-preinstall') + const generatedByPreinstall = projects['project-1'].requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall') expect(typeof generatedByPreinstall).toBe('function') - const generatedByPostinstall = projects['project-1'].requireModule('pre-and-postinstall-scripts-example/generated-by-postinstall') + const generatedByPostinstall = projects['project-1'].requireModule('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall') expect(typeof generatedByPostinstall).toBe('function') } }) @@ -1321,7 +1321,7 @@ test('pnpm sees the bins from the root of the workspace', async () => { location: '.', package: { dependencies: { - 'print-version': '2', + '@pnpm.e2e/print-version': '2', }, }, }, @@ -1334,7 +1334,7 @@ test('pnpm sees the bins from the root of the workspace', async () => { version: '1.0.0', dependencies: { - 'print-version': '1', + '@pnpm.e2e/print-version': '1', }, }, ]) diff --git a/packages/pnpm/test/recursive/misc.ts b/packages/pnpm/test/recursive/misc.ts index a3b91ebd44d..a0d6d80c7d7 100644 --- a/packages/pnpm/test/recursive/misc.ts +++ b/packages/pnpm/test/recursive/misc.ts @@ -162,7 +162,7 @@ test('recursive installation of packages with hooks', async () => { module.exports = { hooks: { readPackage } } function readPackage (pkg) { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' return pkg } ` @@ -176,10 +176,10 @@ test('recursive installation of packages with hooks', async () => { await execPnpm(['recursive', 'install']) const lockfile1 = await projects['project-1'].readLockfile() - expect(lockfile1.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile1.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) const lockfile2 = await projects['project-2'].readLockfile() - expect(lockfile2.packages).toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile2.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('recursive installation of packages in workspace ignores hooks in packages', async () => { @@ -209,7 +209,7 @@ test('recursive installation of packages in workspace ignores hooks in packages' module.exports = { hooks: { readPackage } } function readPackage (pkg) { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' return pkg } ` @@ -233,7 +233,7 @@ test('recursive installation of packages in workspace ignores hooks in packages' await execPnpm(['recursive', 'install']) const lockfile = await readYamlFile('pnpm-lock.yaml') - expect(lockfile.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) expect(lockfile.packages).toHaveProperty(['/is-number/1.0.0']) /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion */ }) @@ -265,7 +265,7 @@ test('ignores .pnpmfile.cjs during recursive installation when --ignore-pnpmfile module.exports = { hooks: { readPackage } } function readPackage (pkg) { pkg.dependencies = pkg.dependencies || {} - pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0' + pkg.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0' return pkg } ` @@ -279,10 +279,10 @@ test('ignores .pnpmfile.cjs during recursive installation when --ignore-pnpmfile await execPnpm(['recursive', 'install', '--ignore-pnpmfile']) const lockfile1 = await projects['project-1'].readLockfile() - expect(lockfile1.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile1.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) const lockfile2 = await projects['project-2'].readLockfile() - expect(lockfile2.packages).not.toHaveProperty(['/dep-of-pkg-with-1-dep/100.1.0']) + expect(lockfile2.packages).not.toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep/100.1.0']) }) test('recursive command with filter from config', async () => { diff --git a/packages/pnpm/test/recursive/rebuild.ts b/packages/pnpm/test/recursive/rebuild.ts index 941420de603..5e2355bd082 100644 --- a/packages/pnpm/test/recursive/rebuild.ts +++ b/packages/pnpm/test/recursive/rebuild.ts @@ -8,8 +8,8 @@ test('`pnpm recursive rebuild` specific dependencies', async () => { version: '1.0.0', dependencies: { - 'install-scripts-example-for-pnpm': 'zkochan/install-scripts-example', - 'pre-and-postinstall-scripts-example': '*', + 'install-scripts-example-for-pnpm': 'pnpm-e2e/install-scripts-example#b6cfdb8af6f8d5ebc5e7de6831af9d38084d765b', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', }, }, { @@ -17,8 +17,8 @@ test('`pnpm recursive rebuild` specific dependencies', async () => { version: '1.0.0', dependencies: { - 'install-scripts-example-for-pnpm': 'zkochan/install-scripts-example', - 'pre-and-postinstall-scripts-example': '*', + 'install-scripts-example-for-pnpm': 'pnpm-e2e/install-scripts-example#b6cfdb8af6f8d5ebc5e7de6831af9d38084d765b', + '@pnpm.e2e/pre-and-postinstall-scripts-example': '*', }, }, { @@ -29,17 +29,17 @@ test('`pnpm recursive rebuild` specific dependencies', async () => { await execPnpm(['recursive', 'install', '--ignore-scripts']) - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') await execPnpm(['recursive', 'rebuild', 'install-scripts-example-for-pnpm']) - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-1'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-preinstall.js') - await projects['project-2'].hasNot('pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-1'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-preinstall.js') + await projects['project-2'].hasNot('@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js') { const generatedByPreinstall = projects['project-1'].requireModule('install-scripts-example-for-pnpm/generated-by-preinstall') diff --git a/packages/pnpm/test/recursive/run.ts b/packages/pnpm/test/recursive/run.ts index 5047a2dfecb..93ae321a883 100644 --- a/packages/pnpm/test/recursive/run.ts +++ b/packages/pnpm/test/recursive/run.ts @@ -11,7 +11,7 @@ test('pnpm recursive run finds bins from the root of the workspace', async () => package: { dependencies: { 'json-append': '1', - 'print-version': '2', + '@pnpm.e2e/print-version': '2', }, }, }, @@ -20,7 +20,7 @@ test('pnpm recursive run finds bins from the root of the workspace', async () => version: '1.0.0', dependencies: { - 'print-version': '1', + '@pnpm.e2e/print-version': '1', }, scripts: { build: 'node -e "process.stdout.write(\'project-build\')" | json-append ../build-output.json', @@ -32,7 +32,7 @@ test('pnpm recursive run finds bins from the root of the workspace', async () => await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] }) - await execPnpm(['recursive', 'install']) + await execPnpm(['-r', 'install']) expect( JSON.parse(await fs.readFile(path.resolve('postinstall-output.json'), 'utf8')) @@ -40,7 +40,7 @@ test('pnpm recursive run finds bins from the root of the workspace', async () => ['project-postinstall'] ) - await execPnpm(['recursive', 'run', 'build']) + await execPnpm(['-r', 'run', 'build']) expect( JSON.parse(await fs.readFile(path.resolve('build-output.json'), 'utf8')) diff --git a/packages/pnpm/test/uninstall.ts b/packages/pnpm/test/uninstall.ts index ae192fb9e11..def2b7893c6 100644 --- a/packages/pnpm/test/uninstall.ts +++ b/packages/pnpm/test/uninstall.ts @@ -37,12 +37,12 @@ test('uninstall global package with its bin files', async () => { XDG_DATA_HOME: global, } - await execPnpm(['add', '-g', 'sh-hello-world@1.0.1'], { env }) + await execPnpm(['add', '-g', '@pnpm.e2e/sh-hello-world@1.0.1'], { env }) let stat = await exists(path.resolve(globalBin, 'sh-hello-world')) expect(stat).toBeTruthy() // sh-hello-world is in .bin - await execPnpm(['uninstall', '-g', 'sh-hello-world'], { env }) + await execPnpm(['uninstall', '-g', '@pnpm.e2e/sh-hello-world'], { env }) stat = await exists(path.resolve(globalBin, 'sh-hello-world')) expect(stat).toBeFalsy() // sh-hello-world is removed from .bin diff --git a/packages/pnpm/test/update.ts b/packages/pnpm/test/update.ts index 12a88ccc082..8405b923cdc 100644 --- a/packages/pnpm/test/update.ts +++ b/packages/pnpm/test/update.ts @@ -11,69 +11,69 @@ import { test('update ', async () => { const project = prepare() - await addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest') - await execPnpm(['install', 'dep-of-pkg-with-1-dep@^100.0.0']) + await execPnpm(['install', '@pnpm.e2e/dep-of-pkg-with-1-dep@^100.0.0']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') - await execPnpm(['update', 'dep-of-pkg-with-1-dep@latest']) + await execPnpm(['update', '@pnpm.e2e/dep-of-pkg-with-1-dep@latest']) - await project.storeHas('dep-of-pkg-with-1-dep', '101.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['dep-of-pkg-with-1-dep']).toBe('^101.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^101.0.0') }) test('update --no-save', async () => { - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') const project = prepare({ dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }) await execPnpm(['update', '--no-save']) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['foo']).toBe('^100.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('^100.0.0') }) test('update', async () => { - await addDistTag('foo', '100.0.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.0.0', 'latest') const project = prepare({ dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }) await execPnpm(['install', '--lockfile-only']) - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') await execPnpm(['update']) const lockfile = await project.readLockfile() - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['foo']).toBe('^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('^100.1.0') }) test('recursive update --no-save', async () => { - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') preparePackages([ { location: 'project', package: { dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, }, @@ -83,20 +83,20 @@ test('recursive update --no-save', async () => { await execPnpm(['recursive', 'update', '--no-save']) const lockfile = await readYamlFile('pnpm-lock.yaml') // eslint-disable-line - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) const pkg = await readPackage(path.resolve('project')) - expect(pkg.dependencies?.['foo']).toBe('^100.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('^100.0.0') }) test('recursive update', async () => { - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') preparePackages([ { location: 'project', package: { dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, }, @@ -106,14 +106,14 @@ test('recursive update', async () => { await execPnpm(['recursive', 'update']) const lockfile = await readYamlFile('pnpm-lock.yaml') // eslint-disable-line - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) const pkg = await readPackage(path.resolve('project')) - expect(pkg.dependencies?.['foo']).toBe('^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('^100.1.0') }) test('recursive update --no-shared-workspace-lockfile', async function () { - await addDistTag('foo', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest') const projects = preparePackages([ { location: 'project', @@ -121,7 +121,7 @@ test('recursive update --no-shared-workspace-lockfile', async function () { name: 'project', dependencies: { - foo: '^100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, }, @@ -131,36 +131,36 @@ test('recursive update --no-shared-workspace-lockfile', async function () { await execPnpm(['recursive', 'update', '--no-shared-workspace-lockfile']) const lockfile = await projects['project'].readLockfile() - expect(lockfile.packages).toHaveProperty(['/foo/100.1.0']) + expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foo/100.1.0']) const pkg = await readPackage(path.resolve('project')) - expect(pkg.dependencies?.['foo']).toBe('^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('^100.1.0') }) test('update --latest', async function () { const project = prepare() await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('qar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'), ]) - await execPnpm(['add', 'dep-of-pkg-with-1-dep@^100.0.0', 'bar@^100.0.0', 'alias@npm:qar@^100.0.0', 'kevva/is-negative']) + await execPnpm(['add', '@pnpm.e2e/dep-of-pkg-with-1-dep@^100.0.0', '@pnpm.e2e/bar@^100.0.0', 'alias@npm:@pnpm.e2e/qar@^100.0.0', 'kevva/is-negative']) await execPnpm(['update', '--latest']) - await project.storeHas('dep-of-pkg-with-1-dep', '101.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile.dependencies['bar']).toBe('100.1.0') - expect(lockfile.dependencies['alias']).toBe('/qar/100.1.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile.dependencies['@pnpm.e2e/bar']).toBe('100.1.0') + expect(lockfile.dependencies['alias']).toBe('/@pnpm.e2e/qar/100.1.0') const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['dep-of-pkg-with-1-dep']).toBe('^101.0.0') - expect(pkg.dependencies?.['bar']).toBe('^100.1.0') - expect(pkg.dependencies?.['alias']).toBe('npm:qar@^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^101.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/bar']).toBe('^100.1.0') + expect(pkg.dependencies?.['alias']).toBe('npm:@pnpm.e2e/qar@^100.1.0') expect(pkg.dependencies?.['is-negative']).toBe('github:kevva/is-negative') }) @@ -168,26 +168,26 @@ test('update --latest --save-exact', async function () { const project = prepare() await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('qar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'), ]) - await execPnpm(['install', 'dep-of-pkg-with-1-dep@100.0.0', 'bar@100.0.0', 'alias@npm:qar@100.0.0', 'kevva/is-negative']) + await execPnpm(['install', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', '@pnpm.e2e/bar@100.0.0', 'alias@npm:@pnpm.e2e/qar@100.0.0', 'kevva/is-negative']) await execPnpm(['update', '--latest', '--save-exact']) - await project.storeHas('dep-of-pkg-with-1-dep', '101.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile.dependencies['bar']).toBe('100.1.0') - expect(lockfile.dependencies['alias']).toBe('/qar/100.1.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile.dependencies['@pnpm.e2e/bar']).toBe('100.1.0') + expect(lockfile.dependencies['alias']).toBe('/@pnpm.e2e/qar/100.1.0') const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(pkg.dependencies?.['bar']).toBe('100.1.0') - expect(pkg.dependencies?.['alias']).toBe('npm:qar@100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0') + expect(pkg.dependencies?.['alias']).toBe('npm:@pnpm.e2e/qar@100.1.0') expect(pkg.dependencies?.['is-negative']).toBe('github:kevva/is-negative') }) @@ -195,27 +195,27 @@ test('update --latest specific dependency', async function () { const project = prepare() await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), - addDistTag('qar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'), ]) - await execPnpm(['add', 'dep-of-pkg-with-1-dep@100.0.0', 'bar@^100.0.0', 'foo@100.1.0', 'alias@npm:qar@^100.0.0', 'kevva/is-negative']) + await execPnpm(['add', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', '@pnpm.e2e/bar@^100.0.0', '@pnpm.e2e/foo@100.1.0', 'alias@npm:@pnpm.e2e/qar@^100.0.0', 'kevva/is-negative']) - await execPnpm(['update', '-L', 'bar', 'foo@100.0.0', 'alias', 'is-negative']) + await execPnpm(['update', '-L', '@pnpm.e2e/bar', '@pnpm.e2e/foo@100.0.0', 'alias', 'is-negative']) const lockfile = await project.readLockfile() - expect(lockfile.dependencies['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(lockfile.dependencies['bar']).toBe('100.1.0') - expect(lockfile.dependencies['foo']).toBe('100.0.0') - expect(lockfile.dependencies['alias']).toBe('/qar/100.1.0') + expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.dependencies['@pnpm.e2e/bar']).toBe('100.1.0') + expect(lockfile.dependencies['@pnpm.e2e/foo']).toBe('100.0.0') + expect(lockfile.dependencies['alias']).toBe('/@pnpm.e2e/qar/100.1.0') const pkg = await readPackage(process.cwd()) - expect(pkg.dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(pkg.dependencies?.['bar']).toBe('^100.1.0') - expect(pkg.dependencies?.['foo']).toBe('100.0.0') - expect(pkg.dependencies?.['alias']).toBe('npm:qar@^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/bar']).toBe('^100.1.0') + expect(pkg.dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0') + expect(pkg.dependencies?.['alias']).toBe('npm:@pnpm.e2e/qar@^100.1.0') expect(pkg.dependencies?.['is-negative']).toBe('github:kevva/is-negative') }) @@ -223,31 +223,31 @@ test('update --latest --prod', async function () { const project = prepare() await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), ]) - await execPnpm(['add', '-D', 'dep-of-pkg-with-1-dep@100.0.0']) - await execPnpm(['add', '-P', 'bar@^100.0.0']) + await execPnpm(['add', '-D', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0']) + await execPnpm(['add', '-P', '@pnpm.e2e/bar@^100.0.0']) await execPnpm(['update', '--latest', '--prod']) const lockfile = await project.readLockfile() - expect(lockfile.devDependencies['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(lockfile.dependencies['bar']).toBe('100.1.0') + expect(lockfile.devDependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.dependencies['@pnpm.e2e/bar']).toBe('100.1.0') const pkg = await readPackage(process.cwd()) - expect(pkg.devDependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(pkg.dependencies?.['bar']).toBe('^100.1.0') + expect(pkg.devDependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(pkg.dependencies?.['@pnpm.e2e/bar']).toBe('^100.1.0') - await project.has('dep-of-pkg-with-1-dep') // not pruned + await project.has('@pnpm.e2e/dep-of-pkg-with-1-dep') // not pruned }) test('recursive update --latest on projects that do not share a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), ]) const projects = preparePackages([ @@ -256,8 +256,8 @@ test('recursive update --latest on projects that do not share a lockfile', async version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', - foo: '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, { @@ -265,8 +265,8 @@ test('recursive update --latest on projects that do not share a lockfile', async version: '1.0.0', dependencies: { - bar: '100.0.0', - foo: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, ]) @@ -277,30 +277,30 @@ test('recursive update --latest on projects that do not share a lockfile', async const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '101.0.0', - foo: '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foo': '100.1.0', }) const lockfile1 = await projects['project-1'].readLockfile() - expect(lockfile1.dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile1.dependencies['foo']).toBe('100.1.0') + expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile1.dependencies['@pnpm.e2e/foo']).toBe('100.1.0') const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - bar: '100.1.0', - foo: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', + '@pnpm.e2e/foo': '100.1.0', }) const lockfile2 = await projects['project-2'].readLockfile() - expect(lockfile2.dependencies['bar']).toBe('100.1.0') - expect(lockfile2.dependencies['foo']).toBe('100.1.0') + expect(lockfile2.dependencies['@pnpm.e2e/bar']).toBe('100.1.0') + expect(lockfile2.dependencies['@pnpm.e2e/foo']).toBe('100.1.0') }) test('recursive update --latest --prod on projects that do not share a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), ]) const projects = preparePackages([ @@ -309,10 +309,10 @@ test('recursive update --latest --prod on projects that do not share a lockfile' version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, devDependencies: { - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, { @@ -320,55 +320,55 @@ test('recursive update --latest --prod on projects that do not share a lockfile' version: '1.0.0', dependencies: { - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, devDependencies: { - bar: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', }, }, ]) - await execPnpm(['recursive', 'install']) + await execPnpm(['-r', 'install']) - await execPnpm(['recursive', 'update', '--latest', '--prod']) + await execPnpm(['-r', 'update', '--latest', '--prod']) const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }) expect(manifest1.devDependencies).toStrictEqual({ - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }) const lockfile1 = await projects['project-1'].readLockfile() - expect(lockfile1.dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile1.devDependencies['foo']).toBe('100.0.0') + expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile1.devDependencies['@pnpm.e2e/foo']).toBe('100.0.0') - await projects['project-1'].has('dep-of-pkg-with-1-dep') - await projects['project-1'].has('foo') + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/foo') const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - foo: '100.1.0', + '@pnpm.e2e/foo': '100.1.0', }) expect(manifest2.devDependencies).toStrictEqual({ - bar: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', }) const lockfile2 = await projects['project-2'].readLockfile() - expect(lockfile2.devDependencies['bar']).toBe('100.0.0') - expect(lockfile2.dependencies['foo']).toBe('100.1.0') + expect(lockfile2.devDependencies['@pnpm.e2e/bar']).toBe('100.0.0') + expect(lockfile2.dependencies['@pnpm.e2e/foo']).toBe('100.1.0') - await projects['project-2'].has('bar') - await projects['project-2'].has('foo') + await projects['project-2'].has('@pnpm.e2e/bar') + await projects['project-2'].has('@pnpm.e2e/foo') }) test('recursive update --latest specific dependency on projects that do not share a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), - addDistTag('qar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'), ]) const projects = preparePackages([ @@ -377,9 +377,9 @@ test('recursive update --latest specific dependency on projects that do not shar version: '1.0.0', dependencies: { - alias: 'npm:qar@100.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', - foo: '^100.0.0', + alias: 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, { @@ -387,44 +387,44 @@ test('recursive update --latest specific dependency on projects that do not shar version: '1.0.0', dependencies: { - bar: '100.0.0', - foo: '^100.0.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '^100.0.0', }, }, ]) - await execPnpm(['recursive', 'install']) + await execPnpm(['-r', 'install']) - await execPnpm(['recursive', 'update', '--latest', 'foo', 'dep-of-pkg-with-1-dep@100.0.0', 'alias']) + await execPnpm(['-r', 'update', '--latest', '@pnpm.e2e/foo', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', 'alias']) const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - alias: 'npm:qar@100.1.0', - 'dep-of-pkg-with-1-dep': '100.0.0', - foo: '^100.1.0', + alias: 'npm:@pnpm.e2e/qar@^100.1.0', // this might be not correct + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/foo': '^100.1.0', }) const lockfile1 = await projects['project-1'].readLockfile() - expect(lockfile1.dependencies['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(lockfile1.dependencies['foo']).toBe('100.1.0') - expect(lockfile1.dependencies['alias']).toBe('/qar/100.1.0') + expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile1.dependencies['@pnpm.e2e/foo']).toBe('100.1.0') + expect(lockfile1.dependencies['alias']).toBe('/@pnpm.e2e/qar/100.1.0') const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '^100.1.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '^100.1.0', }) const lockfile2 = await projects['project-2'].readLockfile() - expect(lockfile2.dependencies['bar']).toBe('100.0.0') - expect(lockfile2.dependencies['foo']).toBe('100.1.0') + expect(lockfile2.dependencies['@pnpm.e2e/bar']).toBe('100.0.0') + expect(lockfile2.dependencies['@pnpm.e2e/foo']).toBe('100.1.0') }) test('recursive update --latest on projects with a shared a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), ]) preparePackages([ @@ -433,8 +433,8 @@ test('recursive update --latest on projects with a shared a lockfile', async () version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', - foo: '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, { @@ -442,8 +442,8 @@ test('recursive update --latest on projects with a shared a lockfile', async () version: '1.0.0', dependencies: { - bar: '100.0.0', - foo: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, ]) @@ -455,28 +455,28 @@ test('recursive update --latest on projects with a shared a lockfile', async () const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '101.0.0', - foo: '100.1.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foo': '100.1.0', }) const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - bar: '100.1.0', - foo: '100.1.0', + '@pnpm.e2e/bar': '100.1.0', + '@pnpm.e2e/foo': '100.1.0', }) const lockfile = await readYamlFile('pnpm-lock.yaml') // eslint-disable-line - expect(lockfile.importers['project-1'].dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile.importers['project-1'].dependencies['foo']).toBe('100.1.0') - expect(lockfile.importers['project-2'].dependencies['bar']).toBe('100.1.0') - expect(lockfile.importers['project-2'].dependencies['foo']).toBe('100.1.0') + expect(lockfile.importers['project-1'].dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile.importers['project-1'].dependencies['@pnpm.e2e/foo']).toBe('100.1.0') + expect(lockfile.importers['project-2'].dependencies['@pnpm.e2e/bar']).toBe('100.1.0') + expect(lockfile.importers['project-2'].dependencies['@pnpm.e2e/foo']).toBe('100.1.0') }) test('recursive update --latest --prod on projects with a shared a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), ]) const projects = preparePackages([ @@ -485,10 +485,10 @@ test('recursive update --latest --prod on projects with a shared a lockfile', as version: '1.0.0', dependencies: { - 'dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', }, devDependencies: { - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, { @@ -496,10 +496,10 @@ test('recursive update --latest --prod on projects with a shared a lockfile', as version: '1.0.0', dependencies: { - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, devDependencies: { - bar: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', }, }, ]) @@ -511,38 +511,38 @@ test('recursive update --latest --prod on projects with a shared a lockfile', as const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - 'dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', }) expect(manifest1.devDependencies).toStrictEqual({ - foo: '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }) const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - foo: '100.1.0', + '@pnpm.e2e/foo': '100.1.0', }) expect(manifest2.devDependencies).toStrictEqual({ - bar: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', }) const lockfile = await readYamlFile('pnpm-lock.yaml') // eslint-disable-line - expect(lockfile.importers['project-1'].dependencies['dep-of-pkg-with-1-dep']).toBe('101.0.0') - expect(lockfile.importers['project-1'].devDependencies['foo']).toBe('100.0.0') - expect(lockfile.importers['project-2'].devDependencies['bar']).toBe('100.0.0') - expect(lockfile.importers['project-2'].dependencies['foo']).toBe('100.1.0') - - await projects['project-1'].has('dep-of-pkg-with-1-dep') - await projects['project-1'].has('foo') - await projects['project-2'].has('foo') - await projects['project-2'].has('bar') + expect(lockfile.importers['project-1'].dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') + expect(lockfile.importers['project-1'].devDependencies['@pnpm.e2e/foo']).toBe('100.0.0') + expect(lockfile.importers['project-2'].devDependencies['@pnpm.e2e/bar']).toBe('100.0.0') + expect(lockfile.importers['project-2'].dependencies['@pnpm.e2e/foo']).toBe('100.1.0') + + await projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') + await projects['project-1'].has('@pnpm.e2e/foo') + await projects['project-2'].has('@pnpm.e2e/foo') + await projects['project-2'].has('@pnpm.e2e/bar') }) test('recursive update --latest specific dependency on projects with a shared a lockfile', async () => { await Promise.all([ - addDistTag('dep-of-pkg-with-1-dep', '101.0.0', 'latest'), - addDistTag('bar', '100.1.0', 'latest'), - addDistTag('foo', '100.1.0', 'latest'), - addDistTag('qar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0', 'latest'), + addDistTag('@pnpm.e2e/bar', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/foo', '100.1.0', 'latest'), + addDistTag('@pnpm.e2e/qar', '100.1.0', 'latest'), ]) preparePackages([ @@ -551,9 +551,9 @@ test('recursive update --latest specific dependency on projects with a shared a version: '1.0.0', dependencies: { - alias: 'npm:qar@100.0.0', - 'dep-of-pkg-with-1-dep': '101.0.0', - foo: '100.0.0', + alias: 'npm:@pnpm.e2e/qar@100.0.0', + '@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, { @@ -561,8 +561,8 @@ test('recursive update --latest specific dependency on projects with a shared a version: '1.0.0', dependencies: { - bar: '100.0.0', - foo: '100.0.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.0.0', }, }, ]) @@ -570,41 +570,41 @@ test('recursive update --latest specific dependency on projects with a shared a await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] }) await execPnpm(['recursive', 'install']) - await execPnpm(['recursive', 'update', '--latest', 'foo', 'dep-of-pkg-with-1-dep@100.0.0', 'alias']) + await execPnpm(['recursive', 'update', '--latest', '@pnpm.e2e/foo', '@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0', 'alias']) const manifest1 = await readPackage(path.resolve('project-1')) expect(manifest1.dependencies).toStrictEqual({ - alias: 'npm:qar@100.1.0', - 'dep-of-pkg-with-1-dep': '100.0.0', - foo: '100.1.0', + alias: 'npm:@pnpm.e2e/qar@^100.1.0', // this might be incorrect + '@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0', + '@pnpm.e2e/foo': '100.1.0', }) const manifest2 = await readPackage(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ - bar: '100.0.0', - foo: '100.1.0', + '@pnpm.e2e/bar': '100.0.0', + '@pnpm.e2e/foo': '100.1.0', }) const lockfile = await readYamlFile('pnpm-lock.yaml') // eslint-disable-line - expect(lockfile.importers['project-1'].dependencies['dep-of-pkg-with-1-dep']).toBe('100.0.0') - expect(lockfile.importers['project-1'].dependencies['foo']).toBe('100.1.0') - expect(lockfile.importers['project-1'].dependencies['alias']).toBe('/qar/100.1.0') - expect(lockfile.importers['project-2'].dependencies['bar']).toBe('100.0.0') - expect(lockfile.importers['project-2'].dependencies['foo']).toBe('100.1.0') + expect(lockfile.importers['project-1'].dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') + expect(lockfile.importers['project-1'].dependencies['@pnpm.e2e/foo']).toBe('100.1.0') + expect(lockfile.importers['project-1'].dependencies['alias']).toBe('/@pnpm.e2e/qar/100.1.0') + expect(lockfile.importers['project-2'].dependencies['@pnpm.e2e/bar']).toBe('100.0.0') + expect(lockfile.importers['project-2'].dependencies['@pnpm.e2e/foo']).toBe('100.1.0') }) test('deep update', async function () { const project = prepare() - await addDistTag('dep-of-pkg-with-1-dep', '100.0.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0', 'latest') - await execPnpm(['add', 'pkg-with-1-dep']) + await execPnpm(['add', '@pnpm.e2e/pkg-with-1-dep']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0') - await addDistTag('dep-of-pkg-with-1-dep', '100.1.0', 'latest') + await addDistTag('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0', 'latest') await execPnpm(['update', '--depth', '1']) - await project.storeHas('dep-of-pkg-with-1-dep', '100.1.0') + await project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0') }) diff --git a/packages/pnpm/tsconfig.json b/packages/pnpm/tsconfig.json index cb0982aa78c..201bd2ba97b 100644 --- a/packages/pnpm/tsconfig.json +++ b/packages/pnpm/tsconfig.json @@ -45,6 +45,9 @@ { "path": "../default-reporter" }, + { + "path": "../dependency-path" + }, { "path": "../filter-workspace-packages" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5fab979096..b8aefec4578 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: 7.18.10 '@changesets/cli': specifier: ^2.24.2 - version: 2.24.3 + version: 2.24.2 '@commitlint/cli': specifier: ^17.0.3 version: 17.0.3 @@ -57,17 +57,17 @@ importers: specifier: 0.0.6 version: 0.0.6 '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/tsconfig': specifier: workspace:* version: link:utils/tsconfig '@types/jest': specifier: ^28.1.6 - version: 28.1.7 + version: 28.1.6 '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 c8: specifier: ^7.12.0 version: 7.12.0 @@ -76,13 +76,13 @@ importers: version: 7.0.3 eslint: specifier: ^8.21.0 - version: 8.22.0 + version: 8.21.0 husky: specifier: ^8.0.1 version: 8.0.1 jest: specifier: ^28.1.3 - version: 28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4 + version: 28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy lcov-result-merger: specifier: ^3.3.0 version: 3.3.0 @@ -106,7 +106,7 @@ importers: version: 28.0.7_m5noci3hdgjcbp5i3skppiufvq ts-node: specifier: ^10.9.1 - version: 10.9.1_cuixiqdly2qsnbfra3iilcxefe + version: 10.9.1_gqvhidmvmzakkqbagwo6oqbjnm typescript: specifier: 4.7.4 version: 4.7.4 @@ -317,7 +317,7 @@ importers: version: 2.0.0 '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 '@types/ssri': specifier: ^7.1.1 version: 7.1.1 @@ -721,8 +721,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/store-path': specifier: workspace:* version: link:../store-path @@ -1634,6 +1634,9 @@ importers: '@pnpm/assert-project': specifier: workspace:* version: link:../../privatePackages/assert-project + '@pnpm/cafs': + specifier: 4.3.0 + version: link:../cafs '@pnpm/client': specifier: workspace:* version: link:../client @@ -1653,8 +1656,8 @@ importers: specifier: workspace:* version: link:../read-projects-context '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/store-path': specifier: workspace:* version: link:../store-path @@ -1843,7 +1846,7 @@ importers: version: 1.0.0 '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 '@types/normalize-path': specifier: ^3.0.0 version: 3.0.0 @@ -2482,7 +2485,7 @@ importers: version: 6.2.0 lru-cache: specifier: ^7.13.2 - version: 7.14.0 + version: 7.13.2 normalize-path: specifier: ^3.0.0 version: 3.0.0 @@ -2617,7 +2620,7 @@ importers: version: 'link:' '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 packages/package-is-installable: dependencies: @@ -2741,8 +2744,8 @@ importers: specifier: workspace:* version: 'link:' '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3040,8 +3043,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 packages/plugin-commands-env: dependencies: @@ -3298,8 +3301,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3398,8 +3401,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3465,7 +3468,7 @@ importers: version: 4.1.2 lru-cache: specifier: ^7.13.2 - version: 7.14.0 + version: 7.13.2 ramda: specifier: npm:@pnpm/ramda@0.28.1 version: /@pnpm/ramda/0.28.1 @@ -3495,8 +3498,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3559,8 +3562,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3659,8 +3662,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/cross-spawn': specifier: ^6.0.2 version: 6.0.2 @@ -3813,8 +3816,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3919,8 +3922,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/is-windows': specifier: ^1.0.0 version: 1.0.0 @@ -4108,8 +4111,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@types/archy': specifier: 0.0.32 version: 0.0.32 @@ -4253,8 +4256,8 @@ importers: specifier: workspace:* version: link:../read-project-manifest '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/run-npm': specifier: workspace:* version: link:../run-npm @@ -4309,12 +4312,15 @@ importers: delay: specifier: ^5.0.0 version: 5.0.0 + dependency-path: + specifier: workspace:* + version: link:../dependency-path dir-is-case-sensitive: specifier: ^2.0.0 version: 2.0.0 esbuild: specifier: ^0.15.2 - version: 0.15.5 + version: 0.15.2 execa: specifier: npm:safe-execa@^0.1.2 version: /safe-execa/0.1.2 @@ -4510,7 +4516,7 @@ importers: version: 6.2.0 normalize-package-data: specifier: ^4.0.0 - version: 4.0.1 + version: 4.0.0 devDependencies: '@pnpm/read-package-json': specifier: workspace:* @@ -4990,7 +4996,7 @@ importers: version: 1.0.0 '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 '@types/rimraf': specifier: ^3.0.2 version: 3.0.2 @@ -5153,8 +5159,8 @@ importers: specifier: workspace:* version: link:../../packages/modules-yaml '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 '@pnpm/types': specifier: workspace:* version: link:../../packages/types @@ -5185,7 +5191,7 @@ importers: version: 2.0.1 '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 privatePackages/assert-store: dependencies: @@ -5193,8 +5199,8 @@ importers: specifier: workspace:* version: link:../../packages/cafs '@pnpm/registry-mock': - specifier: 3.0.0-0 - version: 3.0.0-0 + specifier: 3.0.0-2 + version: 3.0.0-2 path-exists: specifier: ^4.0.0 version: 4.0.0 @@ -5229,7 +5235,7 @@ importers: version: 'link:' '@types/node': specifier: ^14.18.23 - version: 14.18.24 + version: 14.18.23 privatePackages/test-fixtures: dependencies: @@ -5270,28 +5276,28 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^5.33.0 - version: 5.33.1_vsoshirnpb7xw6mr7xomgfas2i + version: 5.33.0_njno5y7ry2l2lcmiu4tywxkwnq '@typescript-eslint/parser': specifier: ^5.33.0 - version: 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq + version: 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq eslint: specifier: ^8.21.0 - version: 8.22.0 + version: 8.21.0 eslint-config-standard-with-typescript: specifier: ^22.0.0 - version: 22.0.0_3h5ldndkk65qnwn3f43n6efjze + version: 22.0.0_4trrc7ay6bgpj47oq2y2uifr7u eslint-plugin-import: specifier: ^2.26.0 - version: 2.26.0_3bh5nkk7utn7e74vrwtv6rxmt4 + version: 2.26.0_qfqnhzzittf54udqwes54xx65q eslint-plugin-n: specifier: ^15.2.4 - version: 15.2.4_eslint@8.22.0 + version: 15.2.4_eslint@8.21.0 eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0_eslint@8.22.0 + version: 11.1.0_eslint@8.21.0 eslint-plugin-promise: specifier: ^6.0.0 - version: 6.0.0_eslint@8.22.0 + version: 6.0.0_eslint@8.21.0 typescript: specifier: 4.7.4 version: 4.7.4 @@ -5561,7 +5567,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.17.10 + '@babel/types': 7.18.10 dev: true /@babel/parser/7.18.11_@babel+types@7.18.10: @@ -5828,8 +5834,8 @@ packages: semver: 5.7.1 dev: true - /@changesets/assemble-release-plan/5.2.1: - resolution: {integrity: sha512-d6ckasOWlKF9Mzs82jhl6TKSCgVvfLoUK1ERySrTg2TQJdrVUteZue6uEIYUTA7SgMu67UOSwol6R9yj1nTdjw==} + /@changesets/assemble-release-plan/5.2.0: + resolution: {integrity: sha512-ewY24PEbSec2eKX0+KM7eyENA2hUUp6s4LF9p/iBxTtc+TX2Xbx5rZnlLKZkc8tpuQ3PZbyjLFXWhd1PP6SjCg==} dependencies: '@babel/runtime': 7.18.9 '@changesets/errors': 0.1.4 @@ -5845,18 +5851,18 @@ packages: '@changesets/types': 5.1.0 dev: true - /@changesets/cli/2.24.3: - resolution: {integrity: sha512-okhRV+0WCQJa2Kmil/WvN5TK1o3+1JYSjrsGHqhjv+PYcDgDDgQ6I9J9OMBO9lfmNIpN7xSO80/BzxgvReO4Wg==} + /@changesets/cli/2.24.2: + resolution: {integrity: sha512-Bya7bnxF8Sz+O25M6kseAludVsCy5nXSW9u2Lbje/XbJTyU5q/xwIiXF9aTUzVi/4jyKoKoOasx7B1/z+NJLzg==} hasBin: true dependencies: '@babel/runtime': 7.18.9 '@changesets/apply-release-plan': 6.0.4 - '@changesets/assemble-release-plan': 5.2.1 + '@changesets/assemble-release-plan': 5.2.0 '@changesets/changelog-git': 0.1.12 '@changesets/config': 2.1.1 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.3 - '@changesets/get-release-plan': 3.0.14 + '@changesets/get-release-plan': 3.0.13 '@changesets/git': 1.4.1 '@changesets/logger': 0.0.5 '@changesets/pre': 1.0.12 @@ -5912,11 +5918,11 @@ packages: semver: 5.7.1 dev: true - /@changesets/get-release-plan/3.0.14: - resolution: {integrity: sha512-xzSfeyIOvUnbqMuQXVKTYUizreWQfICwoQpvEHoePVbERLocc1tPo5lzR7dmVCFcaA/DcnbP6mxyioeq+JuzSg==} + /@changesets/get-release-plan/3.0.13: + resolution: {integrity: sha512-Zl/UN4FUzb5LwmzhO2STRijJT5nQCN4syPEs0p1HSIR+O2iVOzes+2yTLF2zGiOx8qPOsFx/GRSAvuhSzm+9ig==} dependencies: '@babel/runtime': 7.18.9 - '@changesets/assemble-release-plan': 5.2.1 + '@changesets/assemble-release-plan': 5.2.0 '@changesets/config': 2.1.1 '@changesets/pre': 1.0.12 '@changesets/read': 0.5.7 @@ -6075,10 +6081,10 @@ packages: '@commitlint/execute-rule': 17.0.0 '@commitlint/resolve-extends': 17.0.3 '@commitlint/types': 17.0.0 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 2.0.2_cuixiqdly2qsnbfra3iilcxefe + cosmiconfig-typescript-loader: 2.0.2_gqvhidmvmzakkqbagwo6oqbjnm lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.7.4 @@ -6188,8 +6194,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/linux-loong64/0.15.5: - resolution: {integrity: sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==} + /@esbuild/linux-loong64/0.15.2: + resolution: {integrity: sha512-lcfRxKY3CIBFop9slpNu04+fGro1S0QN5n+HrbOwR6eHHdYeidvMtSVK4vbbYmEMwQr3MFAt2yU6bhwl4dqL/A==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -6254,7 +6260,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -6275,14 +6281,14 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3_@babel+types@7.18.10 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.3.2 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 28.1.3 - jest-config: 28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4 + jest-config: 28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -6311,7 +6317,7 @@ packages: dependencies: '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 jest-mock: 28.1.3 dev: true @@ -6338,7 +6344,7 @@ packages: dependencies: '@jest/types': 28.1.3 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 14.18.24 + '@types/node': 14.18.23 jest-message-util: 28.1.3 jest-mock: 28.1.3 jest-util: 28.1.3 @@ -6370,7 +6376,7 @@ packages: '@jest/transform': 28.1.3_@babel+types@7.18.10 '@jest/types': 28.1.3 '@jridgewell/trace-mapping': 0.3.15 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -6448,7 +6454,7 @@ packages: micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 4.0.2 + write-file-atomic: 4.0.1 transitivePeerDependencies: - '@babel/types' - supports-color @@ -6461,7 +6467,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 14.18.24 + '@types/node': 14.18.23 '@types/yargs': 17.0.11 chalk: 4.1.2 dev: true @@ -6556,8 +6562,8 @@ packages: semver: 7.3.7 dev: false - /@npmcli/fs/2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + /@npmcli/fs/2.1.1: + resolution: {integrity: sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 @@ -6573,8 +6579,8 @@ packages: rimraf: 3.0.2 dev: false - /@npmcli/move-file/2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + /@npmcli/move-file/2.0.0: + resolution: {integrity: sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: mkdirp: 1.0.4 @@ -6933,8 +6939,8 @@ packages: strip-bom: 4.0.0 dev: true - /@pnpm/registry-mock/3.0.0-0: - resolution: {integrity: sha512-BcvgJU9hAqFnSBN4Q1Xj0858KVy+Yzymex8tHB+YYuSXiHwQh3/g9o9zMY7Qp/0AKyLx0KtwVWn/20/YcnDTKg==} + /@pnpm/registry-mock/3.0.0-2: + resolution: {integrity: sha512-3VRguPTpLr2rJd6N30RFKMyOP0oU5DFs3tWRHAdrBLZOqNz8HNpDSfturuwLbTasSZtwHQiAAa0RlhwFaM+KvQ==} engines: {node: '>=10.13'} hasBin: true dependencies: @@ -7067,7 +7073,7 @@ packages: /@types/adm-zip/0.4.34: resolution: {integrity: sha512-8ToYLLAYhkRfcmmljrKi22gT2pqu7hGMDtORP1emwIEGmgUTZOsaDjzWFzW5N2frcFRz/50CWt4zA1CxJ73pmQ==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/archy/0.0.32: @@ -7110,7 +7116,7 @@ packages: /@types/byline/4.2.33: resolution: {integrity: sha512-LJYez7wrWcJQQDknqZtrZuExMGP0IXmPl1rOOGDqLbu+H7UNNRfKNuSxCBcQMLH1EfjeWidLedC/hCc5dDfBog==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/cacheable-request/6.0.2: @@ -7118,19 +7124,19 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 18.7.6 + '@types/node': 18.7.3 '@types/responselike': 1.0.0 /@types/concat-stream/2.0.0: resolution: {integrity: sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==} dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/cross-spawn/6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/emscripten/1.39.6: @@ -7139,20 +7145,20 @@ packages: /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/hosted-git-info/3.0.2: @@ -7175,7 +7181,7 @@ packages: /@types/isexe/2.0.1: resolution: {integrity: sha512-leMb+b2fOo1s7NsCVGQr07/zXI/CNodvhHE3IMizhWVzoN/8+gSdyqlo/SWxL/zEoVcYdV6F8/RZHg5Hm+wrfw==} dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/istanbul-lib-coverage/2.0.4: @@ -7194,10 +7200,10 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/28.1.7: - resolution: {integrity: sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==} + /@types/jest/28.1.6: + resolution: {integrity: sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==} dependencies: - expect: 28.1.3 + jest-matcher-utils: 28.1.3 pretty-format: 28.1.3 dev: true @@ -7219,7 +7225,7 @@ packages: /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 /@types/lodash/4.14.181: resolution: {integrity: sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==} @@ -7247,7 +7253,7 @@ packages: /@types/mz/2.7.4: resolution: {integrity: sha512-Zs0imXxyWT20j3Z2NwKpr0IO2LmLactBblNyLua5Az4UHuqOQ02V3jPTgyKwDkuc33/ahw+C3O1PIZdrhFMuQA==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/node/12.20.55: @@ -7258,12 +7264,12 @@ packages: resolution: {integrity: sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==} dev: false - /@types/node/14.18.24: - resolution: {integrity: sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w==} + /@types/node/14.18.23: + resolution: {integrity: sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA==} dev: true - /@types/node/18.7.6: - resolution: {integrity: sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==} + /@types/node/18.7.3: + resolution: {integrity: sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -7297,7 +7303,7 @@ packages: /@types/responselike/1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 /@types/retry/0.12.2: resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -7307,7 +7313,7 @@ packages: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} dependencies: '@types/glob': 7.2.0 - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/semver/6.2.3: @@ -7333,7 +7339,7 @@ packages: /@types/ssri/7.1.1: resolution: {integrity: sha512-DPP/jkDaqGiyU75MyMURxLWyYLwKSjnAuGe9ZCsLp9QZOpXmDfuevk769F0BS86TmRuD5krnp06qw9nSoNO+0g==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} @@ -7346,20 +7352,20 @@ packages: /@types/tar-stream/2.2.2: resolution: {integrity: sha512-1AX+Yt3icFuU6kxwmPakaiGrJUwG44MpuiqPg4dSolRFk6jmvs4b3IbUol9wKDLIgU76gevn3EwE8y/DkSJCZQ==} dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/tar/6.1.2: resolution: {integrity: sha512-bnX3RRm70/n1WMwmevdOAeDU4YP7f5JSubgnuU+yrO+xQQjwDboJj3u2NTJI5ngCQhXihqVVAH5h5J8YpdpEvg==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 minipass: 3.3.5 dev: true /@types/touch/3.1.2: resolution: {integrity: sha512-6YYYfTc90glAZBvyjpmz6JFLtBRyLWXckmlNgK4R2czsWg63cRCI9Rb3aKJ6LPbw8jpHf7nZdVvMd6gUg4hVsw==} dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /@types/treeify/1.0.0: @@ -7388,7 +7394,7 @@ packages: /@types/write-file-atomic/3.0.3: resolution: {integrity: sha512-RfbL28ev+HeIcQyl8TDU5pxHdDQrKyuKHXfz2bKFJn4/IFa34SGDT1DDXYsIf9s/KuW6zGBR+yZoe8pAlvMPXg==} dependencies: - '@types/node': 18.7.6 + '@types/node': 18.7.3 dev: true /@types/yargs-parser/21.0.0: @@ -7405,8 +7411,8 @@ packages: resolution: {integrity: sha512-8NYnGOctzsI4W0ApsP/BIHD/LnxpJ6XaGf2AZmz4EyDYJMxtprN4279dLNI1CPZcwC9H18qYcaFv4bXi0wmokg==} dev: true - /@typescript-eslint/eslint-plugin/5.33.1_vsoshirnpb7xw6mr7xomgfas2i: - resolution: {integrity: sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==} + /@typescript-eslint/eslint-plugin/5.33.0_njno5y7ry2l2lcmiu4tywxkwnq: + resolution: {integrity: sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -7416,12 +7422,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq - '@typescript-eslint/scope-manager': 5.33.1 - '@typescript-eslint/type-utils': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq - '@typescript-eslint/utils': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq + '@typescript-eslint/scope-manager': 5.33.0 + '@typescript-eslint/type-utils': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq + '@typescript-eslint/utils': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq debug: 4.3.4 - eslint: 8.22.0 + eslint: 8.21.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 @@ -7432,8 +7438,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser/5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq: - resolution: {integrity: sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==} + /@typescript-eslint/parser/5.33.0_qugx7qdu5zevzvxaiqyxfiwquq: + resolution: {integrity: sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -7442,26 +7448,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.33.1 - '@typescript-eslint/types': 5.33.1 - '@typescript-eslint/typescript-estree': 5.33.1_typescript@4.7.4 + '@typescript-eslint/scope-manager': 5.33.0 + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/typescript-estree': 5.33.0_typescript@4.7.4 debug: 4.3.4 - eslint: 8.22.0 + eslint: 8.21.0 typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/scope-manager/5.33.1: - resolution: {integrity: sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==} + /@typescript-eslint/scope-manager/5.33.0: + resolution: {integrity: sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.33.1 - '@typescript-eslint/visitor-keys': 5.33.1 + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/visitor-keys': 5.33.0 dev: false - /@typescript-eslint/type-utils/5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq: - resolution: {integrity: sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==} + /@typescript-eslint/type-utils/5.33.0_qugx7qdu5zevzvxaiqyxfiwquq: + resolution: {integrity: sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -7470,22 +7476,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/utils': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq debug: 4.3.4 - eslint: 8.22.0 + eslint: 8.21.0 tsutils: 3.21.0_typescript@4.7.4 typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/types/5.33.1: - resolution: {integrity: sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==} + /@typescript-eslint/types/5.33.0: + resolution: {integrity: sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@typescript-eslint/typescript-estree/5.33.1_typescript@4.7.4: - resolution: {integrity: sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==} + /@typescript-eslint/typescript-estree/5.33.0_typescript@4.7.4: + resolution: {integrity: sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -7493,8 +7499,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.33.1 - '@typescript-eslint/visitor-keys': 5.33.1 + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/visitor-keys': 5.33.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -7505,29 +7511,29 @@ packages: - supports-color dev: false - /@typescript-eslint/utils/5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq: - resolution: {integrity: sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==} + /@typescript-eslint/utils/5.33.0_qugx7qdu5zevzvxaiqyxfiwquq: + resolution: {integrity: sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.33.1 - '@typescript-eslint/types': 5.33.1 - '@typescript-eslint/typescript-estree': 5.33.1_typescript@4.7.4 - eslint: 8.22.0 + '@typescript-eslint/scope-manager': 5.33.0 + '@typescript-eslint/types': 5.33.0 + '@typescript-eslint/typescript-estree': 5.33.0_typescript@4.7.4 + eslint: 8.21.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint-utils: 3.0.0_eslint@8.21.0 transitivePeerDependencies: - supports-color - typescript dev: false - /@typescript-eslint/visitor-keys/5.33.1: - resolution: {integrity: sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==} + /@typescript-eslint/visitor-keys/5.33.0: + resolution: {integrity: sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.33.1 + '@typescript-eslint/types': 5.33.0 eslint-visitor-keys: 3.3.0 dev: false @@ -8132,7 +8138,7 @@ packages: /babel-plugin-dynamic-import-node/2.3.3: resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: - object.assign: 4.1.4 + object.assign: 4.1.3 dev: true /babel-plugin-istanbul/6.1.1_@babel+types@7.18.10: @@ -8221,9 +8227,9 @@ packages: cmd-shim: 5.0.0 mkdirp-infer-owner: 2.0.0 npm-normalize-package-bin: 1.0.1 - read-cmd-shim: 3.0.1 + read-cmd-shim: 3.0.0 rimraf: 3.0.2 - write-file-atomic: 4.0.2 + write-file-atomic: 4.0.1 dev: false /bl/4.1.0: @@ -8308,8 +8314,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001378 - electron-to-chromium: 1.4.222 + caniuse-lite: 1.0.30001375 + electron-to-chromium: 1.4.218 node-releases: 2.0.6 update-browserslist-db: 1.0.5_browserslist@4.21.3 dev: true @@ -8417,17 +8423,17 @@ packages: - bluebird dev: false - /cacache/16.1.2: - resolution: {integrity: sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==} + /cacache/16.1.1: + resolution: {integrity: sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 + '@npmcli/fs': 2.1.1 + '@npmcli/move-file': 2.0.0 chownr: 2.0.0 fs-minipass: 2.1.0 glob: 8.0.3 infer-owner: 1.0.4 - lru-cache: 7.14.0 + lru-cache: 7.13.2 minipass: 3.3.4 minipass-collect: 1.0.2 minipass-flush: 1.0.5 @@ -8507,8 +8513,8 @@ packages: dependencies: path-temp: 2.0.0 - /caniuse-lite/1.0.30001378: - resolution: {integrity: sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==} + /caniuse-lite/1.0.30001375: + resolution: {integrity: sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==} dev: true /caseless/0.12.0: @@ -8875,16 +8881,16 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader/2.0.2_cuixiqdly2qsnbfra3iilcxefe: + /cosmiconfig-typescript-loader/2.0.2_gqvhidmvmzakkqbagwo6oqbjnm: resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' typescript: '>=3' dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 cosmiconfig: 7.0.1 - ts-node: 10.9.1_cuixiqdly2qsnbfra3iilcxefe + ts-node: 10.9.1_gqvhidmvmzakkqbagwo6oqbjnm typescript: 4.7.4 transitivePeerDependencies: - '@swc/core' @@ -9094,8 +9100,8 @@ packages: engines: {node: '>=10'} dev: true - /decimal.js/10.4.0: - resolution: {integrity: sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==} + /decimal.js/10.3.1: + resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} /decompress-maybe/1.0.0: resolution: {integrity: sha512-av8/KhXWRUYQ7lGTl/9Gtizz3nQ+7NqDFm/I4Lx+JvTbzHiD4WqfqxMO4YYi91FTqffoBDCYPfIvofwQZwZ3ZQ==} @@ -9329,8 +9335,8 @@ packages: /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium/1.4.222: - resolution: {integrity: sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg==} + /electron-to-chromium/1.4.218: + resolution: {integrity: sha512-INDylKH//YIf2w67D+IjkfVnGVrZ/D94DAU/FPPm6T4jEPbEDQvo9r2wTj0ncFdtJH8+V8BggZTaN8Rzk5wkgw==} dev: true /emittery/0.10.2: @@ -9412,7 +9418,7 @@ packages: is-weakref: 1.0.2 object-inspect: 1.12.2 object-keys: 1.1.1 - object.assign: 4.1.4 + object.assign: 4.1.3 regexp.prototype.flags: 1.4.3 string.prototype.trimend: 1.0.5 string.prototype.trimstart: 1.0.5 @@ -9461,8 +9467,8 @@ packages: es6-iterator: 2.0.3 es6-symbol: 3.1.3 - /esbuild-android-64/0.15.5: - resolution: {integrity: sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==} + /esbuild-android-64/0.15.2: + resolution: {integrity: sha512-lEyRmwmdkkKBpIOi0wKGheuCPECgl5/GCOQkhVpDFEj1lec3cinEk37EbD3f4PUvix1eAHtTa0UI1ga0Bznntg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -9470,8 +9476,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.15.5: - resolution: {integrity: sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==} + /esbuild-android-arm64/0.15.2: + resolution: {integrity: sha512-znXfd7QBNrpAVnB8ZP5Zj4a3ah5dPBPZwbn6v0f4Lub4iwwZJ1h34VWMuo2f7KZdIbl2axrei6FxlQncS8zzEw==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -9479,8 +9485,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.15.5: - resolution: {integrity: sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==} + /esbuild-darwin-64/0.15.2: + resolution: {integrity: sha512-keNq6K+qhEJ5kZ6L1UJGYjAnv6Kkpf2KjOjC6r0JMsX6ZAaXnA3OqqXJttEYzBKpZ+W6/T+paS4Slzk3N2bSvQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -9488,8 +9494,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.15.5: - resolution: {integrity: sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==} + /esbuild-darwin-arm64/0.15.2: + resolution: {integrity: sha512-H/0vtLB/dY+TVGsAskmyuaQ7qegNVi+A4N5a+vpPHPFutzoGjcj4tf/77jZ3UsMTlN1dq+Ldala1P1pf486L8Q==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -9497,8 +9503,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.15.5: - resolution: {integrity: sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==} + /esbuild-freebsd-64/0.15.2: + resolution: {integrity: sha512-KMskcfVTisa2h/xaOwmoWEBm6CVWbKbrnEAv3sEfOF0wodjQfcPvW7HAxatMGL7AW9PIUP6UXLCCCUUnxL2yLQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -9506,8 +9512,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.15.5: - resolution: {integrity: sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==} + /esbuild-freebsd-arm64/0.15.2: + resolution: {integrity: sha512-RJJ3c4L6XGfZeiFqphK58KL+3LfrmebMLgB9QJ0Gygmjx1F6tnLUrLwNBNXrpMT7X4bEtCvP9Gvhkt5HVTdt7g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -9515,8 +9521,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.15.5: - resolution: {integrity: sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==} + /esbuild-linux-32/0.15.2: + resolution: {integrity: sha512-GfCEEs+D+vBrluCUBFr3MP8/PH/fNc5xl2JbsHkwivBXlbORXf5m4Ts8vII9qPxEkLAUsoYx4Bjp+Ca0WqQ9tA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -9524,8 +9530,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.15.5: - resolution: {integrity: sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==} + /esbuild-linux-64/0.15.2: + resolution: {integrity: sha512-F6GfpZrcTisWFrJZdx73NNVjY64iOqhxFsdmnftHZFfeLG4KyJg9hO5kd6E+Rq3udoRk41jPS+fg0+iCyq5Utg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -9533,8 +9539,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.15.5: - resolution: {integrity: sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==} + /esbuild-linux-arm/0.15.2: + resolution: {integrity: sha512-u2YXH9ZCuyN9KwcpKCzhgUckBgy8O07oivv3cV/Z+WnFOjXhKFc+IY0v41nFODPEzEIbozMUx8boVexvHMXHDA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -9542,8 +9548,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.15.5: - resolution: {integrity: sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==} + /esbuild-linux-arm64/0.15.2: + resolution: {integrity: sha512-CacsuBpOzU/WVWMS19iGHCrijgheCtmNb9mjlvpoxwLEVjHycc9/X+Pup6vp8dk5jRrhm/7lkY8Fbw9OxM+oug==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -9551,8 +9557,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.15.5: - resolution: {integrity: sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==} + /esbuild-linux-mips64le/0.15.2: + resolution: {integrity: sha512-VY8pEtXAEyPfVCP/SKPGxaiNF7b259Le0wvEPQTYMeJycAVfahBhpg/9qk2Ufd7mMVGT7G2izr86jJsvuiMVZw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -9560,8 +9566,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.15.5: - resolution: {integrity: sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==} + /esbuild-linux-ppc64le/0.15.2: + resolution: {integrity: sha512-+Sma8cuiVciTU+xuqErEU4hm8k2bMivqEXPGsXFPKJAV2XrLQlkT5zuPA4FWuKpxwVLUxxuYhkq0nv4j5Dv/3Q==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -9569,8 +9575,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.15.5: - resolution: {integrity: sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==} + /esbuild-linux-riscv64/0.15.2: + resolution: {integrity: sha512-HkqtnuEiVq2VvqD6Wb9LEWAedbpxXkq7h3Imop6vaAQUr5z8HROfTyY349QsP9aGY3aF/NiBkX20C6vOqTex8A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -9578,8 +9584,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.15.5: - resolution: {integrity: sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==} + /esbuild-linux-s390x/0.15.2: + resolution: {integrity: sha512-nIqNFoovQRoz/YBm64xRWXT4yg5BtT2DXA8ogI8lJKy6B+mOKeOVVkvAbFU5YrvUq6AHhMuCsoa3CYFK5a4/vg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -9587,8 +9593,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.15.5: - resolution: {integrity: sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==} + /esbuild-netbsd-64/0.15.2: + resolution: {integrity: sha512-CY5kHo3C3+aY1VBv76lDTe/D/+4nkhA6cE8ENRezeEvWmu8pPqnIVk1cy/jLNNPBYkbZiR30z/QeZy5yWsW1kg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -9596,8 +9602,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.15.5: - resolution: {integrity: sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==} + /esbuild-openbsd-64/0.15.2: + resolution: {integrity: sha512-fXpQW8I6Lm9gJubvW/QjR1OwQQ4tMriVhxznJJmbaX7EYHtcog6Fy+xqbl+YUBZ3dxmEBkBXd6LZaXkn10yavQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -9605,8 +9611,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.15.5: - resolution: {integrity: sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==} + /esbuild-sunos-64/0.15.2: + resolution: {integrity: sha512-8xaprqT/rxfbxljQrd2A4iASOnw46eiieghh6JgzjlrXP/6kbhN3fe8IgQclcdu6SjDPmQvNSURQ5xCeVATpbQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -9614,8 +9620,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.15.5: - resolution: {integrity: sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==} + /esbuild-windows-32/0.15.2: + resolution: {integrity: sha512-lGLNGBmDQ0gZphbUfxT7n6OO1l6iOQM2xnYN90+etzTWZeI76CYLbVPCZR+kp3vzyIRAbcsS6NtM4SknHAwEww==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -9623,8 +9629,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.15.5: - resolution: {integrity: sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==} + /esbuild-windows-64/0.15.2: + resolution: {integrity: sha512-Rc6cUwOiQiGgpAxlCl8Lj3o2Ds4n3OU8UyoWpOBXmms+gXdwlKBzxjwj5FxrZJ6EveYpFqzDP07tbzOa9YpTKw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -9632,8 +9638,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.15.5: - resolution: {integrity: sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==} + /esbuild-windows-arm64/0.15.2: + resolution: {integrity: sha512-0bpQcIvd6TBIThA+nr9QsTfaU23Co5IPMlXmuNja6buDEu92b9im9ZMGV/BLF+jwKwG8/f1L/0Yfl9QzNuH4Eg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -9641,33 +9647,33 @@ packages: dev: true optional: true - /esbuild/0.15.5: - resolution: {integrity: sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==} + /esbuild/0.15.2: + resolution: {integrity: sha512-iKfJsm2u5ATPI3x3sq/WrxISWhAZB/VpvygGG8Pr3q+xQhkIhyI737t+xUa71f50g0ioihQSGaHiQO5hbVDoSQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/linux-loong64': 0.15.5 - esbuild-android-64: 0.15.5 - esbuild-android-arm64: 0.15.5 - esbuild-darwin-64: 0.15.5 - esbuild-darwin-arm64: 0.15.5 - esbuild-freebsd-64: 0.15.5 - esbuild-freebsd-arm64: 0.15.5 - esbuild-linux-32: 0.15.5 - esbuild-linux-64: 0.15.5 - esbuild-linux-arm: 0.15.5 - esbuild-linux-arm64: 0.15.5 - esbuild-linux-mips64le: 0.15.5 - esbuild-linux-ppc64le: 0.15.5 - esbuild-linux-riscv64: 0.15.5 - esbuild-linux-s390x: 0.15.5 - esbuild-netbsd-64: 0.15.5 - esbuild-openbsd-64: 0.15.5 - esbuild-sunos-64: 0.15.5 - esbuild-windows-32: 0.15.5 - esbuild-windows-64: 0.15.5 - esbuild-windows-arm64: 0.15.5 + '@esbuild/linux-loong64': 0.15.2 + esbuild-android-64: 0.15.2 + esbuild-android-arm64: 0.15.2 + esbuild-darwin-64: 0.15.2 + esbuild-darwin-arm64: 0.15.2 + esbuild-freebsd-64: 0.15.2 + esbuild-freebsd-arm64: 0.15.2 + esbuild-linux-32: 0.15.2 + esbuild-linux-64: 0.15.2 + esbuild-linux-arm: 0.15.2 + esbuild-linux-arm64: 0.15.2 + esbuild-linux-mips64le: 0.15.2 + esbuild-linux-ppc64le: 0.15.2 + esbuild-linux-riscv64: 0.15.2 + esbuild-linux-s390x: 0.15.2 + esbuild-netbsd-64: 0.15.2 + esbuild-openbsd-64: 0.15.2 + esbuild-sunos-64: 0.15.2 + esbuild-windows-32: 0.15.2 + esbuild-windows-64: 0.15.2 + esbuild-windows-arm64: 0.15.2 dev: true /escalade/3.1.1: @@ -9703,7 +9709,7 @@ packages: optionalDependencies: source-map: 0.6.1 - /eslint-config-standard-with-typescript/22.0.0_3h5ldndkk65qnwn3f43n6efjze: + /eslint-config-standard-with-typescript/22.0.0_4trrc7ay6bgpj47oq2y2uifr7u: resolution: {integrity: sha512-VA36U7UlFpwULvkdnh6MQj5GAV2Q+tT68ALLAwJP0ZuNXU2m0wX07uxX4qyLRdHgSzH4QJ73CveKBuSOYvh7vQ==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 || ^5.6.0 @@ -9713,19 +9719,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.33.1_vsoshirnpb7xw6mr7xomgfas2i - '@typescript-eslint/parser': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq - eslint: 8.22.0 - eslint-config-standard: 17.0.0_zbdqnta3mhnrvw4yywdsj5qdqy - eslint-plugin-import: 2.26.0_3bh5nkk7utn7e74vrwtv6rxmt4 - eslint-plugin-n: 15.2.4_eslint@8.22.0 - eslint-plugin-promise: 6.0.0_eslint@8.22.0 + '@typescript-eslint/eslint-plugin': 5.33.0_njno5y7ry2l2lcmiu4tywxkwnq + '@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq + eslint: 8.21.0 + eslint-config-standard: 17.0.0_dfwa53o44x4e5xhsfv5mvfhk5a + eslint-plugin-import: 2.26.0_qfqnhzzittf54udqwes54xx65q + eslint-plugin-n: 15.2.4_eslint@8.21.0 + eslint-plugin-promise: 6.0.0_eslint@8.21.0 typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: false - /eslint-config-standard/17.0.0_zbdqnta3mhnrvw4yywdsj5qdqy: + /eslint-config-standard/17.0.0_dfwa53o44x4e5xhsfv5mvfhk5a: resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: '*' @@ -9733,10 +9739,10 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.22.0 - eslint-plugin-import: 2.26.0_3bh5nkk7utn7e74vrwtv6rxmt4 - eslint-plugin-n: 15.2.4_eslint@8.22.0 - eslint-plugin-promise: 6.0.0_eslint@8.22.0 + eslint: 8.21.0 + eslint-plugin-import: 2.26.0_qfqnhzzittf54udqwes54xx65q + eslint-plugin-n: 15.2.4_eslint@8.21.0 + eslint-plugin-promise: 6.0.0_eslint@8.21.0 dev: false /eslint-import-resolver-node/0.3.6: @@ -9747,7 +9753,7 @@ packages: transitivePeerDependencies: - supports-color - /eslint-module-utils/2.7.4_xcphdsrqrepzuqvpvivqopksrm: + /eslint-module-utils/2.7.4_xtzkthmenmjo2h753u2dv735yy: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -9768,37 +9774,37 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq debug: 3.2.7 - eslint: 8.22.0 + eslint: 8.21.0 eslint-import-resolver-node: 0.3.6 transitivePeerDependencies: - supports-color dev: false - /eslint-plugin-es/3.0.1_eslint@8.22.0: + /eslint-plugin-es/3.0.1_eslint@8.21.0: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '*' dependencies: - eslint: 8.22.0 + eslint: 8.21.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: false - /eslint-plugin-es/4.1.0_eslint@8.22.0: + /eslint-plugin-es/4.1.0_eslint@8.21.0: resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '*' dependencies: - eslint: 8.22.0 + eslint: 8.21.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: false - /eslint-plugin-import/2.26.0_3bh5nkk7utn7e74vrwtv6rxmt4: + /eslint-plugin-import/2.26.0_qfqnhzzittf54udqwes54xx65q: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -9808,14 +9814,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.33.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/parser': 5.33.0_qugx7qdu5zevzvxaiqyxfiwquq array-includes: 3.1.5 array.prototype.flat: 1.3.0 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.22.0 + eslint: 8.21.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4_xcphdsrqrepzuqvpvivqopksrm + eslint-module-utils: 2.7.4_xtzkthmenmjo2h753u2dv735yy has: 1.0.3 is-core-module: 2.10.0 is-glob: 4.0.3 @@ -9829,16 +9835,16 @@ packages: - supports-color dev: false - /eslint-plugin-n/15.2.4_eslint@8.22.0: + /eslint-plugin-n/15.2.4_eslint@8.21.0: resolution: {integrity: sha512-tjnVMv2fiXYMnuiIFI8QMtyUFI42SckEEWvi8h68SWGWshfqO6SSCASy24dGMGAiy7NUk6DZt90DM0iNUsmQ5w==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '*' dependencies: builtins: 5.0.1 - eslint: 8.22.0 - eslint-plugin-es: 4.1.0_eslint@8.22.0 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint: 8.21.0 + eslint-plugin-es: 4.1.0_eslint@8.21.0 + eslint-utils: 3.0.0_eslint@8.21.0 ignore: 5.2.0 is-core-module: 2.10.0 minimatch: 3.1.2 @@ -9846,14 +9852,14 @@ packages: semver: 7.3.7 dev: false - /eslint-plugin-node/11.1.0_eslint@8.22.0: + /eslint-plugin-node/11.1.0_eslint@8.21.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '*' dependencies: - eslint: 8.22.0 - eslint-plugin-es: 3.0.1_eslint@8.22.0 + eslint: 8.21.0 + eslint-plugin-es: 3.0.1_eslint@8.21.0 eslint-utils: 2.1.0 ignore: 5.2.0 minimatch: 3.1.2 @@ -9861,13 +9867,13 @@ packages: semver: 6.3.0 dev: false - /eslint-plugin-promise/6.0.0_eslint@8.22.0: + /eslint-plugin-promise/6.0.0_eslint@8.21.0: resolution: {integrity: sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' dependencies: - eslint: 8.22.0 + eslint: 8.21.0 dev: false /eslint-scope/5.1.1: @@ -9892,13 +9898,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: false - /eslint-utils/3.0.0_eslint@8.22.0: + /eslint-utils/3.0.0_eslint@8.21.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '*' dependencies: - eslint: 8.22.0 + eslint: 8.21.0 eslint-visitor-keys: 2.1.0 /eslint-visitor-keys/1.3.0: @@ -9914,8 +9920,8 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint/8.22.0: - resolution: {integrity: sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==} + /eslint/8.21.0: + resolution: {integrity: sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -9929,7 +9935,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint-utils: 3.0.0_eslint@8.21.0 eslint-visitor-keys: 3.3.0 espree: 9.3.3 esquery: 1.4.0 @@ -10751,7 +10757,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.0 + uglify-js: 3.16.3 /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} @@ -10812,7 +10818,7 @@ packages: resolution: {integrity: sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - lru-cache: 7.14.0 + lru-cache: 7.13.2 dev: false /html-encoding-sniffer/2.0.1: @@ -11398,7 +11404,7 @@ packages: '@jest/expect': 28.1.3 '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -11418,7 +11424,7 @@ packages: - supports-color dev: true - /jest-cli/28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4: + /jest-cli/28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy: resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -11435,7 +11441,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4 + jest-config: 28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 @@ -11447,7 +11453,7 @@ packages: - ts-node dev: true - /jest-config/28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4: + /jest-config/28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy: resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -11462,7 +11468,7 @@ packages: '@babel/core': 7.18.10 '@jest/test-sequencer': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 babel-jest: 28.1.3_r3l7cttmtvmwvowatj7hnryrve chalk: 4.1.2 ci-info: 3.3.2 @@ -11482,7 +11488,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_cuixiqdly2qsnbfra3iilcxefe + ts-node: 10.9.1_gqvhidmvmzakkqbagwo6oqbjnm transitivePeerDependencies: - '@babel/types' - supports-color @@ -11523,7 +11529,7 @@ packages: '@jest/environment': 28.1.3 '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 jest-mock: 28.1.3 jest-util: 28.1.3 dev: true @@ -11539,7 +11545,7 @@ packages: dependencies: '@jest/types': 28.1.3 '@types/graceful-fs': 4.1.5 - '@types/node': 14.18.24 + '@types/node': 14.18.23 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 @@ -11590,7 +11596,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@28.1.3: @@ -11644,7 +11650,7 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3_@babel+types@7.18.10 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 @@ -11732,7 +11738,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 chalk: 4.1.2 ci-info: 3.3.2 graceful-fs: 4.2.10 @@ -11757,7 +11763,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -11769,12 +11775,12 @@ packages: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 14.18.24 + '@types/node': 14.18.23 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4: + /jest/28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy: resolution: {integrity: sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -11787,7 +11793,7 @@ packages: '@jest/core': 28.1.3_4arxkcq7whxu3g4chyu5wn3mmy '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4 + jest-cli: 28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy transitivePeerDependencies: - '@babel/types' - '@types/node' @@ -11823,7 +11829,7 @@ packages: cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 - decimal.js: 10.4.0 + decimal.js: 10.3.1 domexception: 2.0.1 escodegen: 2.0.0 form-data: 3.0.1 @@ -12217,8 +12223,8 @@ packages: resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} engines: {node: '>=12'} - /lru-cache/7.14.0: - resolution: {integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==} + /lru-cache/7.13.2: + resolution: {integrity: sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==} engines: {node: '>=12'} dev: false @@ -12259,17 +12265,17 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /make-fetch-happen/10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + /make-fetch-happen/10.2.0: + resolution: {integrity: sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: agentkeepalive: 4.2.1 - cacache: 16.1.2 + cacache: 16.1.1 http-cache-semantics: 4.1.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 - lru-cache: 7.14.0 + lru-cache: 7.13.2 minipass: 3.3.4 minipass-collect: 1.0.2 minipass-fetch: 2.1.0 @@ -12836,6 +12842,7 @@ packages: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} engines: {node: '>= 10.12.0'} hasBin: true + requiresBuild: true dependencies: env-paths: 2.2.1 glob: 7.2.3 @@ -12861,7 +12868,7 @@ packages: env-paths: 2.2.1 glob: 7.2.3 graceful-fs: 4.2.10 - make-fetch-happen: 10.2.1 + make-fetch-happen: 10.2.0 nopt: /@pnpm/nopt/0.2.1 npmlog: 6.0.2 rimraf: 3.0.2 @@ -12911,9 +12918,9 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/4.0.1: - resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + /normalize-package-data/4.0.0: + resolution: {integrity: sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} dependencies: hosted-git-info: 5.1.0 is-core-module: 2.10.0 @@ -12999,6 +13006,7 @@ packages: /npmlog/4.1.2: resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + requiresBuild: true dependencies: are-we-there-yet: 1.1.7 console-control-strings: 1.1.0 @@ -13036,8 +13044,8 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - /object.assign/4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign/4.1.3: + resolution: {integrity: sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -13807,8 +13815,8 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-cmd-shim/3.0.1: - resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} + /read-cmd-shim/3.0.0: + resolution: {integrity: sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: false @@ -14165,7 +14173,7 @@ packages: resolution: {integrity: sha512-qTVCDUsBDO74PHen/pEMTHeQXxrCSeTcFhqjy86mkRH5nuGZpEv41ZgGunxmjbl29kvrKJGrgVFThoqXeRORfQ==} dependencies: any-promise: 1.3.0 - rimraf: 2.7.1 + rimraf: 2.4.5 dev: true /rimraf/2.4.5: @@ -15130,7 +15138,7 @@ packages: '@babel/core': 7.18.10 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3_vnm4yv5aq4wlh5hjdsxhek7ha4 + jest: 28.1.3_6yzl2yiralpd4v2lfmrfzyb7yy jest-util: 28.1.3 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -15140,7 +15148,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node/10.9.1_cuixiqdly2qsnbfra3iilcxefe: + /ts-node/10.9.1_gqvhidmvmzakkqbagwo6oqbjnm: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -15159,7 +15167,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 14.18.24 + '@types/node': 14.18.23 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -15317,8 +15325,8 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - /uglify-js/3.17.0: - resolution: {integrity: sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==} + /uglify-js/3.16.3: + resolution: {integrity: sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true @@ -15620,7 +15628,7 @@ packages: is-valid-glob: 1.0.0 lazystream: 1.0.1 lead: 1.0.0 - object.assign: 4.1.4 + object.assign: 4.1.3 pumpify: 1.5.1 readable-stream: 2.3.7 remove-bom-buffer: 3.0.0 @@ -15810,9 +15818,9 @@ packages: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - /write-file-atomic/4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + /write-file-atomic/4.0.1: + resolution: {integrity: sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 diff --git a/privatePackages/assert-project/package.json b/privatePackages/assert-project/package.json index e1a724d310a..76afc101ce6 100644 --- a/privatePackages/assert-project/package.json +++ b/privatePackages/assert-project/package.json @@ -44,7 +44,7 @@ "@pnpm/constants": "workspace:*", "@pnpm/lockfile-types": "workspace:*", "@pnpm/modules-yaml": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "@pnpm/types": "workspace:*", "is-windows": "^1.0.2", "isexe": "2.0.0", diff --git a/privatePackages/assert-store/package.json b/privatePackages/assert-store/package.json index 06b84ce705d..905ad4b0b6a 100644 --- a/privatePackages/assert-store/package.json +++ b/privatePackages/assert-store/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@pnpm/cafs": "workspace:*", - "@pnpm/registry-mock": "3.0.0-0", + "@pnpm/registry-mock": "3.0.0-2", "path-exists": "^4.0.0" }, "devDependencies": {