├── .editorconfig ├── .gitattributes ├── .github └── workflows │ └── release.yml ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── TODO ├── package.json ├── packages ├── @foo~has-dep-from-same-scope │ └── package.json ├── @foo~no-deps │ └── package.json ├── @foo~touch-file-one-bin │ ├── cli.js │ └── package.json ├── @private~foo │ └── package.json ├── README.md ├── abc-grand-parent-with-c@0 │ └── package.json ├── abc-grand-parent-with-c@1.0.0 │ └── package.json ├── abc-grand-parent-with-c@1.0.1 │ └── package.json ├── abc-grand-parent-without-c │ └── package.json ├── abc-grand-parent@1.0.0 │ └── package.json ├── abc-optional-peers-meta-only │ └── package.json ├── abc-optional-peers-parent │ └── package.json ├── abc-optional-peers │ └── package.json ├── abc-parent-with-ab@1.0.0 │ └── package.json ├── abc-parent-with-ab@1.0.1 │ └── package.json ├── abc-parent-with-ab@1.1.0 │ └── package.json ├── abc-parent-with-aliases-of-same-pkg │ └── package.json ├── abc-parent-with-aliases │ └── package.json ├── abc-parent-with-missing-peers@1.0.0 │ └── package.json ├── abc-regular-deps-is-in-peers │ └── package.json ├── abc-regular-deps │ └── package.json ├── abc@1.0.0 │ └── package.json ├── abc@2.0.0 │ └── package.json ├── alpha │ └── package.json ├── bar@100.0.0 │ └── package.json ├── bar@100.1.0 │ └── package.json ├── beta-version │ └── package.json ├── bravo-dep@1.0.0 │ └── package.json ├── bravo-dep@1.0.1 │ └── package.json ├── bravo-dep@1.1.0 │ └── package.json ├── bravo │ └── package.json ├── broken-bin │ └── package.json ├── build-allow-list │ ├── list.json │ └── package.json ├── build-metadata-in-dep-version │ ├── index.js │ └── package.json ├── circular-deps-1-of-2 │ ├── dependency.js │ ├── index.js │ ├── mirror.js │ └── package.json ├── circular-deps-2-of-2 │ ├── dependency.js │ ├── index.js │ ├── mirror.js │ └── package.json ├── circular-peer-a │ └── package.json ├── circular-peer-b │ └── package.json ├── circular-peers-1-of-3 │ └── package.json ├── circular-peers-2-of-3 │ └── package.json ├── circular-peers-3-of-3 │ └── package.json ├── complex-circular-peers-a │ └── package.json ├── complex-circular-peers-b │ └── package.json ├── complex-circular-peers-c │ └── package.json ├── console-log@1.0.0 │ ├── index.js │ └── package.json ├── console-log@2.0.0 │ ├── index.js │ └── package.json ├── console-log@3.0.0 │ ├── index.js │ └── package.json ├── count-to-10 │ ├── package.json │ └── postinstall.js ├── dep-of-optional-pkg │ └── package.json ├── dep-of-pkg-with-1-dep@100.0.0 │ ├── index.js │ └── package.json ├── dep-of-pkg-with-1-dep@100.1.0 │ ├── index.js │ └── package.json ├── dep-of-pkg-with-1-dep@101.0.0 │ ├── index.js │ └── package.json ├── dep-of-recursive-with-optional-peer │ └── package.json ├── depends-on-console-log │ └── package.json ├── depends-on-pkg-abcd │ └── package.json ├── deprecate.js ├── deprecated │ └── package.json ├── exports-pnpmfile │ ├── package.json │ └── pnpmfile.cjs ├── external-depend-on-internal-dep │ └── package.json ├── failing-postinstall │ └── package.json ├── foo@100.0.0 │ └── package.json ├── foo@100.1.0 │ └── package.json ├── foobar │ └── package.json ├── foobarqar@1.0.0 │ └── package.json ├── foobarqar@1.0.1 │ └── package.json ├── for-legacy-node │ └── package.json ├── for-legacy-pnpm │ └── package.json ├── for-testing-peers-having-bins │ └── package.json ├── for-testing-pnpm-dlx │ ├── foo.js │ └── package.json ├── for-testing-scoped-peers │ └── package.json ├── generate-node-info-during-install │ ├── file.js │ ├── generate-node-info.js │ ├── package.json │ ├── print-generated-node-info.js │ └── read-generated-node-info.js ├── generated-bins │ ├── generateBins.js │ └── package.json ├── has-aliased-git-dependency │ ├── index.js │ └── package.json ├── has-alpha-as-peer │ └── package.json ├── has-alpha │ └── package.json ├── has-beta-only │ └── package.json ├── has-bin-and-needs-build@1.0.0 │ ├── _bin.js │ ├── package.json │ └── postinstall.js ├── has-binding-gyp │ ├── .gitignore │ ├── .npmignore │ ├── binding.gyp │ ├── package.json │ └── postinstall.js ├── has-cpu-specified │ └── package.json ├── has-default-peer │ └── package.json ├── has-different-licenses@1.0.0 │ └── package.json ├── has-different-licenses@2.0.0 │ └── package.json ├── has-different-licenses@3.0.0 │ └── package.json ├── has-execution-env │ ├── file.js │ ├── generate-node-info.js │ ├── package.json │ └── read-generated-node-info.js ├── has-failing-postinstall-dep │ └── package.json ├── has-foo-100.0.0-range-dep │ └── package.json ├── has-foo-100.1.0-dep-1 │ └── package.json ├── has-foo-100.1.0-dep-2 │ └── package.json ├── has-foo-as-dep-and-subdep │ └── package.json ├── has-foo100-peer │ └── package.json ├── has-foo101-peer │ └── package.json ├── has-generated-bins-as-dep │ └── package.json ├── has-github-dep@1 │ └── package.json ├── has-github-dep@2 │ └── package.json ├── has-has-y-peer-only-as-peer-and-y@1.0.0 │ └── package.json ├── has-has-y-peer-only-as-peer-and-y@2.0.0 │ └── package.json ├── has-has-y-peer-only-as-peer │ └── package.json ├── has-has-y-peer-peer │ └── package.json ├── has-local-dep │ ├── local-dep │ │ └── package.json │ └── package.json ├── has-many-optional-deps │ └── package.json ├── has-native-dep │ └── package.json ├── has-not-compatible-dep │ └── package.json ├── has-optional-dep-with-peer │ └── package.json ├── has-optional-peer-as-dep │ └── package.json ├── has-optional-peer-with-peer │ └── package.json ├── has-patch-for-foo │ ├── @pnpm.e2e__foo@100.0.0.patch │ ├── package.json │ └── pnpmfile.cjs ├── has-peer-c-in-deps │ └── package.json ├── has-pkg-with-peer-only │ └── package.json ├── has-prerelease@1.0.0 │ └── package.json ├── has-prerelease@2.0.0 │ └── package.json ├── has-prerelease@3.0.0-rc.0 │ └── package.json ├── has-same-license@1.0.0 │ └── package.json ├── has-same-license@2.0.0 │ └── package.json ├── has-same-license@3.0.0 │ └── package.json ├── has-say-hi-peer │ └── package.json ├── has-tango-as-peer-dep │ └── package.json ├── has-y-peer │ └── package.json ├── having-scoped-peer │ └── package.json ├── hello-world-js-bin-parent │ ├── index.js │ └── package.json ├── hello-world-js-bin@0.0.0 │ ├── index.js │ └── package.json ├── hello-world-js-bin@1.0.0 │ ├── index.js │ └── package.json ├── independent-and-requires-build │ ├── create-file.js │ └── package.json ├── install-script-example │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── create.js │ └── package.json ├── jsr-bar@1.0.0 │ └── package.json ├── jsr-bar@1.0.1 │ └── package.json ├── jsr-bar@1.1.0 │ └── package.json ├── jsr-bar@2.0.0 │ └── package.json ├── needs-auth │ ├── hello.js │ ├── index.js │ └── package.json ├── not-compatible-with-any-os-and-has-peer │ └── package.json ├── not-compatible-with-any-os │ └── package.json ├── not-compatible-with-not-compatible-dep │ └── package.json ├── only-darwin-arm64 │ └── package.json ├── only-darwin-x64 │ └── package.json ├── only-linux-arm64-glibc │ └── package.json ├── only-linux-arm64-musl │ └── package.json ├── only-linux-x64-glibc │ └── package.json ├── only-linux-x64-musl │ └── package.json ├── only-win32-arm64 │ └── package.json ├── only-win32-x64 │ └── package.json ├── optional-darwin-arm64 │ └── package.json ├── optional-darwin-x64 │ └── package.json ├── optional-linux-arm64 │ └── package.json ├── optional-linux-x64 │ └── package.json ├── optional-windows-x64 │ └── package.json ├── parent-of-has-many-optional-deps │ └── package.json ├── parent-of-pkg-with-1-dep │ └── package.json ├── parent-of-pkg-with-events-and-peers │ └── package.json ├── peer-a@1.0.0 │ └── package.json ├── peer-a@1.0.1 │ └── package.json ├── peer-b@1.0.0 │ └── package.json ├── peer-c@1.0.0 │ └── package.json ├── peer-c@1.0.1 │ └── package.json ├── peer-c@2.0.0 │ └── package.json ├── peer-deps-in-child-pkg │ └── package.json ├── peer-of-itself │ └── package.json ├── peer-with-bin │ ├── index.js │ └── package.json ├── pkg-a │ └── package.json ├── pkg-b │ └── package.json ├── pkg-c │ └── package.json ├── pkg-d │ └── package.json ├── pkg-that-calls-unlisted-dep-in-hooks │ └── package.json ├── pkg-that-depends-on-json-append │ └── package.json ├── pkg-that-installs-slowly │ ├── package.json │ └── postinstall.js ├── pkg-that-uses-plugins │ ├── index.js │ └── package.json ├── pkg-with-1-aliased-dep │ ├── index.js │ └── package.json ├── pkg-with-1-dep@100.0.0 │ ├── index.js │ └── package.json ├── pkg-with-1-dep@100.1.0 │ ├── index.js │ └── package.json ├── pkg-with-accidentally-published-catalog-protocol │ └── package.json ├── pkg-with-bundle-dependencies-false │ └── package.json ├── pkg-with-bundle-dependencies-true │ └── package.json ├── pkg-with-bundle-dependencies │ └── package.json ├── pkg-with-bundled-dependencies │ └── package.json ├── pkg-with-directories-bin │ ├── bin │ │ └── pkg-with-directories-bin │ └── package.json ├── pkg-with-duplicated-dep │ ├── index.js │ └── package.json ├── pkg-with-events-and-peers │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── create.js │ └── package.json ├── pkg-with-failing-optional-dependency │ └── package.json ├── pkg-with-failing-optional-peer │ └── package.json ├── pkg-with-failing-postinstall │ └── package.json ├── pkg-with-good-optional │ └── package.json ├── pkg-with-optional │ └── package.json ├── pkg-with-peer-having-bin │ └── package.json ├── pkg-with-resolved-peer │ └── package.json ├── pkg-with-tarball-dep-from-registry │ └── package.json ├── plugin-example │ └── package.json ├── pnpm-foo@1.0.0 │ └── package.json ├── pnpm-foo@1.1.0 │ └── package.json ├── pnpm-foo@1.2.0 │ └── package.json ├── pnpm-foo@1.3.0 │ └── package.json ├── pnpm-foo@2.0.0 │ └── package.json ├── postinstall-calls-pnpm │ ├── create-file.js │ └── package.json ├── postinstall-modifies-source │ ├── empty-file.txt │ ├── package.json │ └── postinstall.js ├── postinstall-requires-is-positive │ ├── package.json │ └── postinstall.js ├── pre-and-postinstall-scripts-example@1.0.0 │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── create.js │ └── package.json ├── pre-and-postinstall-scripts-example@2.0.0 │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── create.js │ └── package.json ├── print-node-info │ ├── index.js │ └── package.json ├── print-version@1.0.0 │ ├── bin.js │ └── package.json ├── print-version@2.0.0 │ ├── bin.js │ └── package.json ├── publish-all.sh ├── qar@100.0.0 │ └── package.json ├── qar@100.1.0 │ └── package.json ├── recursive-with-optional-peer │ └── package.json ├── repeat-peers.a │ └── package.json ├── repeat-peers.a2 │ └── package.json ├── repeat-peers.b │ └── package.json ├── repeat-peers.c │ └── package.json ├── repeat-peers.d │ └── package.json ├── repeat-peers.x │ └── package.json ├── requires-any-foo │ └── package.json ├── requires-chalk-530 │ └── package.json ├── requires-itself │ └── package.json ├── romeo-dep@1.0.0 │ └── package.json ├── romeo-dep@1.1.0 │ └── package.json ├── romeo │ └── package.json ├── runs-own-bin │ ├── bin.js │ └── package.json ├── scoped~peer │ └── package.json ├── self-file-reference │ └── package.json ├── self-link-reference │ └── package.json ├── sh-hello-world │ ├── package.json │ └── sh-hello-world.sh ├── shell-mock │ ├── index.js │ └── package.json ├── support-different-architectures │ └── package.json ├── symlinks-preserved │ ├── index.js │ └── package.json ├── tango-tango │ └── package.json ├── tango │ └── package.json ├── test-pnpm-issue219 │ ├── index.js │ └── package.json ├── test-pnpm-peer-deps │ └── package.json ├── touch-file-good-bin-name │ ├── cli.js │ └── package.json ├── touch-file-many-bins │ ├── cli.js │ └── package.json ├── touch-file-one-bin │ ├── cli.js │ └── package.json ├── update-config-with-catalogs │ ├── package.json │ └── pnpmfile.cjs ├── update-time.js ├── uses-pkg-with-self-usage │ ├── index.js │ └── package.json ├── using-ajv │ └── package.json ├── wants-peer-c-1.0.0 │ └── package.json ├── wants-peer-c-1 │ └── package.json ├── wants-peer-c-2 │ └── package.json ├── with-postinstall-a │ └── package.json ├── with-postinstall-b │ └── package.json ├── with-same-file-in-different-cases │ ├── Foo.js │ ├── foo.js │ └── package.json ├── write-lifecycle-env │ ├── index.js │ └── package.json ├── x │ └── package.json ├── xyz-parent-parent-parent-parent │ └── package.json ├── xyz-parent-parent-parent │ └── package.json ├── xyz-parent-parent-with-xyz │ └── package.json ├── xyz-parent-parent │ └── package.json ├── xyz-parent │ └── package.json ├── xyz │ └── package.json ├── y │ └── package.json ├── y@2.0.0 │ └── package.json ├── z │ └── package.json └── zkochan~test-pnpm-issue219 │ ├── index.js │ └── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── registry ├── config.yaml ├── htpasswd └── prepublish-config.yaml ├── src ├── bin │ └── pnpm-registry-mock.ts ├── index.ts └── lib │ ├── addDistTag.ts │ ├── addUser.ts │ └── locations.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | insert_final_newline = true 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | end_of_line = lf 8 | 9 | [*.{ts,js,json}] 10 | indent_style = space 11 | indent_size = 2 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | 3 | *.tgz binary 4 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*.*.*" 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | build: 13 | permissions: 14 | contents: write # for softprops/action-gh-release to create GitHub release 15 | runs-on: ubuntu-latest 16 | environment: release 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v3 20 | - uses: pnpm/action-setup@v4 21 | with: 22 | version: latest-10 23 | standalone: true 24 | - name: pnpm install 25 | run: pnpm install 26 | - name: Publish Packages 27 | env: 28 | # setting the "npm_config_//registry.npmjs.org/:_authToken" env variable directly doesn't work. 29 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 30 | run: | 31 | npm config set "//registry.npmjs.org/:_authToken" "${NPM_TOKEN}" # pnpm config set is broken 32 | pnpm publish 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | registry/storage/* 40 | registry/storage-cache/* 41 | registry/runtime-config.yaml 42 | dist 43 | tsconfig.tsbuildinfo 44 | storage-cache 45 | registry/runtime-config-*.yaml 46 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | git-checks=false 2 | tag-version-prefix=v 3 | message=chore(release): %s 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2025 pnpm 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @pnpm/registry-mock 2 | 3 | > Mock the npm registry 4 | 5 | ## Installation 6 | 7 | ```sh 8 | pnpm add @pnpm/registry-mock 9 | ``` 10 | 11 | ## API 12 | 13 | ### `getIntegrity(pkgName, pkgVersion): string` 14 | 15 | ### CLI 16 | 17 | Preparing a fresh storage: `registry-mock prepare` 18 | 19 | Running the registry mock: `registry-mock` 20 | 21 | By default, `https://registry.npmjs.org/` is used to download packages. 22 | A custom uplink can be set via the `PNPM_REGISTRY_MOCK_UPLINK` env variable. 23 | 24 | The registry mock will listen on port 4873, unless a different port is 25 | specified via the `PNPM_REGISTRY_MOCK_PORT` env variable. 26 | 27 | ## License 28 | 29 | MIT 30 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | * Always use npm@5 for publishing 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/registry-mock", 3 | "version": "4.4.0", 4 | "description": "Mock the npm registry", 5 | "main": "dist/index.js", 6 | "bin": "dist/bin/pnpm-registry-mock.js", 7 | "files": [ 8 | "dist", 9 | "registry" 10 | ], 11 | "scripts": { 12 | "registry": "verdaccio -c registry/prepublish-config.yaml", 13 | "prebuild": "rimraf registry/storage-cache/ && rimraf registry/storage/", 14 | "publish-packages": "sh packages/publish-all.sh", 15 | "build": "pnpm run prebuild && tsc && npm-run-all -p -r registry publish-packages", 16 | "prepublishOnly": "pnpm run build" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/pnpm/pnpm-registry-mock.git" 21 | }, 22 | "keywords": [ 23 | "pnpm", 24 | "verdaccio", 25 | "mock", 26 | "registry" 27 | ], 28 | "author": "Zoltan Kochan", 29 | "license": "MIT", 30 | "engines": { 31 | "node": ">=18.12" 32 | }, 33 | "bugs": { 34 | "url": "https://github.com/pnpm/pnpm-registry-mock/issues" 35 | }, 36 | "homepage": "https://github.com/pnpm/pnpm-registry-mock#readme", 37 | "dependencies": { 38 | "anonymous-npm-registry-client": "^0.3.2", 39 | "execa": "^5.1.1", 40 | "fs-extra": "^11.3.0", 41 | "read-yaml-file": "^2.1.0", 42 | "rimraf": "^3.0.2", 43 | "tempy": "^1.0.1", 44 | "verdaccio": "5.20.1", 45 | "write-yaml-file": "^4.2.0" 46 | }, 47 | "devDependencies": { 48 | "@types/fs-extra": "^11.0.4", 49 | "@types/node": "17.0.31", 50 | "npm": "^8.19.4", 51 | "npm-run-all": "^4.1.5", 52 | "typescript": "4.6.4", 53 | "write-json-file": "^4.3.0" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /packages/@foo~has-dep-from-same-scope/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@foo/has-dep-from-same-scope", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@foo/no-deps": "^1.0.0", 6 | "is-negative": "1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/@foo~no-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@foo/no-deps", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/@foo~touch-file-one-bin/cli.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('touch.txt', 'hello world', 'utf8') 5 | 6 | -------------------------------------------------------------------------------- /packages/@foo~touch-file-one-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@foo/touch-file-one-bin", 3 | "version": "1.0.0", 4 | "bin": "cli.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/@private~foo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@private/foo", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/README.md: -------------------------------------------------------------------------------- 1 | These are packages used for testing pnpm 2 | -------------------------------------------------------------------------------- /packages/abc-grand-parent-with-c@0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-grand-parent-with-c", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-parent-with-ab": "^1.0.0", 6 | "@pnpm.e2e/peer-c": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/abc-grand-parent-with-c@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-grand-parent-with-c", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-parent-with-ab": "^1.0.0", 6 | "@pnpm.e2e/peer-c": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/abc-grand-parent-with-c@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-grand-parent-with-c", 3 | "version": "1.0.1", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-parent-with-ab": "^1.0.0", 6 | "@pnpm.e2e/peer-c": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/abc-grand-parent-without-c/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-grand-parent-without-c", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-parent-with-ab": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/abc-grand-parent@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-grand-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-parent-with-ab": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/abc-optional-peers-meta-only/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-optional-peers-meta-only", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-a": "^1.0.0" 6 | }, 7 | "peerDependenciesMeta": { 8 | "@pnpm.e2e/peer-b": { 9 | "optional": true 10 | }, 11 | "@pnpm.e2e/peer-c": { 12 | "optional": true 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/abc-optional-peers-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-optional-peers-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc-optional-peers": "1.0.0", 6 | "@pnpm.e2e/peer-a": "^1.0.0", 7 | "@pnpm.e2e/peer-b": "^1.0.0", 8 | "@pnpm.e2e/peer-c": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/abc-optional-peers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-optional-peers", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-a": "^1.0.0", 6 | "@pnpm.e2e/peer-b": "^1.0.0", 7 | "@pnpm.e2e/peer-c": "^1.0.0" 8 | }, 9 | "peerDependenciesMeta": { 10 | "@pnpm.e2e/peer-b": { 11 | "optional": true 12 | }, 13 | "@pnpm.e2e/peer-c": { 14 | "optional": true 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/abc-parent-with-ab@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-ab", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc": "^1.0.0", 6 | "is-positive": "1.0.0", 7 | "@pnpm.e2e/peer-a": "^1.0.0", 8 | "@pnpm.e2e/peer-b": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/abc-parent-with-ab@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-ab", 3 | "version": "1.0.1", 4 | "dependencies": { 5 | "@pnpm.e2e/abc": "^1.0.0", 6 | "is-positive": "1.0.0", 7 | "@pnpm.e2e/peer-a": "^1.0.0", 8 | "@pnpm.e2e/peer-b": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/abc-parent-with-ab@1.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-ab", 3 | "version": "1.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/abc-parent-with-aliases-of-same-pkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-aliases-of-same-pkg", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc": "^1.0.0", 6 | "peer-c3": "npm:@pnpm.e2e/peer-c@1.0.0", 7 | "peer-c2": "npm:@pnpm.e2e/peer-c@1.0.1", 8 | "peer-c1": "npm:@pnpm.e2e/peer-c@2.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/abc-parent-with-aliases/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-aliases", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc": "^1.0.0", 6 | "a": "npm:@pnpm.e2e/peer-a@^1.0.0", 7 | "b": "npm:@pnpm.e2e/peer-b@^1.0.0", 8 | "@pnpm.e2e/peer-c": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/abc-parent-with-missing-peers@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-parent-with-missing-peers", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/abc": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/abc-regular-deps-is-in-peers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-regular-deps-is-in-peers", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/abc-regular-deps": "*" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/abc-regular-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc-regular-deps", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/peer-a": "1.0.0", 6 | "@pnpm.e2e/peer-b": "1.0.0", 7 | "@pnpm.e2e/peer-c": "1.0.0" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/abc@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/peer-a": "^1.0.0", 9 | "@pnpm.e2e/peer-b": "^1.0.0", 10 | "@pnpm.e2e/peer-c": "^1.0.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/abc@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/abc", 3 | "version": "2.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/peer-a": "^1.0.0", 9 | "@pnpm.e2e/peer-b": "^1.0.0", 10 | "@pnpm.e2e/peer-c": "^1.0.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/alpha/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/alpha", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/has-alpha-as-peer": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/bar@100.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bar", 3 | "version": "100.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/bar@100.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bar", 3 | "version": "100.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/beta-version/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/beta-version", 3 | "version": "1.0.0-beta.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/bravo-dep@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bravo-dep", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/bravo-dep@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bravo-dep", 3 | "version": "1.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /packages/bravo-dep@1.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bravo-dep", 3 | "version": "1.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/bravo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/bravo", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/bravo-dep": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/broken-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/broken-bin", 3 | "version": "1.0.0", 4 | "description": "A package with a bin that does not exist", 5 | "bin": "./index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/broken-bin" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/build-allow-list/list.json: -------------------------------------------------------------------------------- 1 | [ 2 | "@pnpm.e2e/install-script-example" 3 | ] -------------------------------------------------------------------------------- /packages/build-allow-list/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/build-allow-list", 3 | "version": "1.0.0" 4 | } -------------------------------------------------------------------------------- /packages/build-metadata-in-dep-version/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('dep-of-pkg-with-1-dep') 2 | -------------------------------------------------------------------------------- /packages/build-metadata-in-dep-version/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/build-metadata-in-dep-version", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "100.0.0+abcdefg" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/circular-deps-1-of-2/dependency.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/circular-deps-2-of-2') 2 | -------------------------------------------------------------------------------- /packages/circular-deps-1-of-2/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => require('./package.json').name 2 | -------------------------------------------------------------------------------- /packages/circular-deps-1-of-2/mirror.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/circular-deps-2-of-2/dependency') 2 | -------------------------------------------------------------------------------- /packages/circular-deps-1-of-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-deps-1-of-2", 3 | "version": "1.0.2", 4 | "author": "Zoltan Kochan (http://kochan.io/)", 5 | "license": "MIT", 6 | "dependencies": { 7 | "@pnpm.e2e/circular-deps-2-of-2": "1.0.2" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/circular-deps-1-of-2" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/circular-deps-2-of-2/dependency.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/circular-deps-1-of-2') 2 | -------------------------------------------------------------------------------- /packages/circular-deps-2-of-2/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => require('./package.json').name 2 | -------------------------------------------------------------------------------- /packages/circular-deps-2-of-2/mirror.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/circular-deps-1-of-2/dependency') 2 | -------------------------------------------------------------------------------- /packages/circular-deps-2-of-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-deps-2-of-2", 3 | "version": "1.0.2", 4 | "author": "Zoltan Kochan (http://kochan.io/)", 5 | "license": "MIT", 6 | "dependencies": { 7 | "@pnpm.e2e/circular-deps-1-of-2": "1.0.2" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/circular-deps-2-of-2" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/circular-peer-a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-peer-a", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/circular-peer-b": "*" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/circular-peer-b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-peer-b", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/circular-peer-a": "*" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/circular-peers-1-of-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-peers-1-of-3", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/circular-peers-2-of-3": "*", 6 | "@pnpm.e2e/peer-a": "*" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/circular-peers-2-of-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-peers-2-of-3", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/circular-peers-3-of-3": "*", 6 | "@pnpm.e2e/peer-a": "*", 7 | "@pnpm.e2e/peer-b": "*" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/circular-peers-3-of-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/circular-peers-3-of-3", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/circular-peers-1-of-3": "*" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/complex-circular-peers-a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/complex-circular-peers-a", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/complex-circular-peers-b": "*" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/complex-circular-peers-b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/complex-circular-peers-b", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/complex-circular-peers-a": "*", 6 | "@pnpm.e2e/complex-circular-peers-c": "*" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/complex-circular-peers-c/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/complex-circular-peers-c", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/complex-circular-peers-a": "*", 6 | "@pnpm.e2e/complex-circular-peers-b": "*" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/console-log@1.0.0/index.js: -------------------------------------------------------------------------------- 1 | console.log('first line') 2 | console.log('second line') 3 | -------------------------------------------------------------------------------- /packages/console-log@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/console-log", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/console-log@2.0.0/index.js: -------------------------------------------------------------------------------- 1 | console.log('first line') 2 | console.log('second line') 3 | console.log('third line') 4 | -------------------------------------------------------------------------------- /packages/console-log@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/console-log", 3 | "version": "2.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/console-log@3.0.0/index.js: -------------------------------------------------------------------------------- 1 | console.log('first line') 2 | console.log('second line') 3 | console.log('third line') 4 | console.log('fourth line') 5 | -------------------------------------------------------------------------------- /packages/console-log@3.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/console-log", 3 | "version": "3.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/count-to-10/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/count-to-10", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node postinstall" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/count-to-10/postinstall.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | console.log(1) 4 | console.log(2) 5 | console.log(3) 6 | console.log(4) 7 | console.log(5) 8 | console.error(6) 9 | console.log(7) 10 | console.log(8) 11 | console.log(9) 12 | console.log(10) 13 | -------------------------------------------------------------------------------- /packages/dep-of-optional-pkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/dep-of-optional-pkg", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@100.0.0/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => require('./package.json') 2 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@100.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/dep-of-pkg-with-1-dep", 3 | "version": "100.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@100.1.0/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => require('./package.json') 2 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@100.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/dep-of-pkg-with-1-dep", 3 | "version": "100.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@101.0.0/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => require('./package.json') 2 | -------------------------------------------------------------------------------- /packages/dep-of-pkg-with-1-dep@101.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/dep-of-pkg-with-1-dep", 3 | "version": "101.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/dep-of-recursive-with-optional-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/dep-of-recursive-with-optional-peer", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/recursive-with-optional-peer": "1.0.0", 6 | "@pnpm.e2e/peer-a": "1.0.0" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/depends-on-console-log/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/depends-on-console-log", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "console-log-1": "npm:@pnpm.e2e/console-log@1.0.0", 6 | "console-log-2": "npm:@pnpm.e2e/console-log@2.0.0", 7 | "console-log-3": "npm:@pnpm.e2e/console-log@3.0.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/depends-on-pkg-abcd/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/depends-on-pkg-abcd", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/pkg-a": "1.0.0", 6 | "@pnpm.e2e/pkg-b": "1.0.0", 7 | "@pnpm.e2e/pkg-c": "1.0.0", 8 | "@pnpm.e2e/pkg-d": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/deprecate.js: -------------------------------------------------------------------------------- 1 | const writeJsonFile = require('write-json-file') 2 | const path = require('path') 3 | 4 | const pkgToDeprecate = process.argv[2] 5 | 6 | const manifestPath = path.join(__dirname, '../registry/storage-cache', pkgToDeprecate, 'package.json') 7 | const pkg = require(manifestPath) 8 | 9 | Object.values(pkg.versions).forEach(pkgVersionManifest => { 10 | pkgVersionManifest.deprecated = 'This package is deprecated. Lorem ipsum dolor sit amet, consectetur adipiscing elit.' 11 | }) 12 | 13 | writeJsonFile.sync(manifestPath, pkg) 14 | -------------------------------------------------------------------------------- /packages/deprecated/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/deprecated", 3 | "version": "1.0.0", 4 | "homepage": "https://foo.bar/qar" 5 | } 6 | -------------------------------------------------------------------------------- /packages/exports-pnpmfile/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/exports-pnpmfile", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/exports-pnpmfile/pnpmfile.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | hooks: { 3 | readPackage (pkg) { 4 | if (pkg.name === '@pnpm/x') { 5 | if (!pkg.dependencies) { 6 | pkg.dependencies = {} 7 | } 8 | pkg.dependencies['@pnpm/y'] = '1.0.0' 9 | } 10 | return pkg 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/external-depend-on-internal-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/external-depend-on-internal-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/internal-f": "link:packages/f" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/failing-postinstall/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/failing-postinstall", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "echo hello && echo world && exit 1" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/foo@100.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "100.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/foo@100.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "100.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/foobar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foobar", 3 | "version": "100.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "^100.0.0" 6 | }, 7 | "optionalDependencies": { 8 | "@pnpm.e2e/bar": "^100.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/foobarqar@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foobarqar", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "^100.0.0", 6 | "@pnpm.e2e/bar": "100.0.0", 7 | "is-positive": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/foobarqar@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foobarqar", 3 | "version": "1.0.1", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "^100.0.0", 6 | "@pnpm.e2e/bar": "100.0.0", 7 | "@pnpm.e2e/qar": "100.0.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/for-legacy-node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/for-legacy-node", 3 | "version": "1.0.0", 4 | "engines": { 5 | "node": "0.10" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/for-legacy-pnpm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/for-legacy-pnpm", 3 | "version": "1.0.0", 4 | "engines": { 5 | "pnpm": "0.1.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/for-testing-peers-having-bins/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/for-testing-peers-having-bins", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/pkg-with-peer-having-bin": "*", 6 | "@pnpm.e2e/peer-with-bin": "*" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/for-testing-pnpm-dlx/foo.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('foo', '', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/for-testing-pnpm-dlx/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/for-testing-pnpm-dlx", 3 | "version": "1.0.0", 4 | "description": "Contains a 'foo' bin for testing pnpm dlx", 5 | "bin": { 6 | "foo": "foo.js" 7 | }, 8 | "author": "Zoltan Kochan", 9 | "license": "MIT" 10 | } 11 | -------------------------------------------------------------------------------- /packages/for-testing-scoped-peers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/for-testing-scoped-peers", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@having/scoped-peer": "*", 6 | "@scoped/peer": "*" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/generate-node-info-during-install/file.js: -------------------------------------------------------------------------------- 1 | const BASE_NAME = 'node-info.json' 2 | const FULL_PATH = require('path').join(__dirname, BASE_NAME) 3 | module.exports = { BASE_NAME, FULL_PATH } 4 | -------------------------------------------------------------------------------- /packages/generate-node-info-during-install/generate-node-info.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const file = require('./file') 3 | const nodeInfo = { 4 | execPath: process.execPath, 5 | versions: process.versions, 6 | } 7 | const json = JSON.stringify(nodeInfo, undefined, 2) + '\n' 8 | console.log(json) 9 | fs.writeFileSync(file.FULL_PATH, json) 10 | -------------------------------------------------------------------------------- /packages/generate-node-info-during-install/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/generate-node-info-during-install", 3 | "version": "1.0.0", 4 | "description": "Write a file that contains specs of the Node.js runtime that was used to install this package", 5 | "scripts": { 6 | "install": "node generate-node-info.js" 7 | }, 8 | "index": "read-generated-node-info.js", 9 | "bin": { 10 | "print-generated-node-info": "print-generated-node-info.js" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/generate-node-info-during-install/print-generated-node-info.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | const fs = require('fs') 3 | const file = require('./file') 4 | const json = fs.readFileSync(file.FULL_PATH, 'utf-8') 5 | console.log(json) 6 | -------------------------------------------------------------------------------- /packages/generate-node-info-during-install/read-generated-node-info.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const file = require('./file') 3 | const json = fs.readFileSync(file.FULL_PATH, 'utf-8') 4 | module.exports = JSON.parse(json) 5 | -------------------------------------------------------------------------------- /packages/generated-bins/generateBins.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | const path = require('path') 4 | 5 | const bin = path.join(__dirname, 'bin') 6 | 7 | fs.mkdirSync(bin) 8 | fs.writeFileSync(path.join(bin, 'cmd1'), '#!/usr/bin/env node', 'utf8') 9 | fs.writeFileSync(path.join(bin, 'cmd2'), '#!/usr/bin/env node', 'utf8') 10 | -------------------------------------------------------------------------------- /packages/generated-bins/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/generated-bins", 3 | "version": "1.0.0", 4 | "files": [ 5 | "generateBins.js" 6 | ], 7 | "directories": { 8 | "bin": "bin" 9 | }, 10 | "scripts": { 11 | "postinstall": "node generateBins" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/has-aliased-git-dependency/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('say-hi') 2 | -------------------------------------------------------------------------------- /packages/has-aliased-git-dependency/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-aliased-git-dependency", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/has-say-hi-peer": "^1.0.0", 6 | "say-hi": "github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-alpha-as-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-alpha-as-peer", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "exit 0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/alpha": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/has-alpha/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-alpha", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/alpha": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-beta-only/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-beta-only", 3 | "version": "1.0.0-beta.1" 4 | } 5 | -------------------------------------------------------------------------------- /packages/has-bin-and-needs-build@1.0.0/_bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world!') 3 | -------------------------------------------------------------------------------- /packages/has-bin-and-needs-build@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-bin-and-needs-build", 3 | "version": "1.0.0", 4 | "bin": "./bin.js", 5 | "files": [ 6 | "postinstall.js", 7 | "_bin.js" 8 | ], 9 | "dependencies": { 10 | "@pnpm.e2e/pre-and-postinstall-scripts-example": "1.0.0", 11 | "@pnpm.e2e/install-script-example": "1.0.0" 12 | }, 13 | "scripts": { 14 | "postinstall": "node postinstall.js" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/has-bin-and-needs-build@1.0.0/postinstall.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const fs = require('fs') 3 | 4 | fs.renameSync(path.join(__dirname, '_bin.js'), path.join(__dirname, 'bin.js')) 5 | -------------------------------------------------------------------------------- /packages/has-binding-gyp/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | generated.js -------------------------------------------------------------------------------- /packages/has-binding-gyp/.npmignore: -------------------------------------------------------------------------------- 1 | generated.js 2 | build -------------------------------------------------------------------------------- /packages/has-binding-gyp/binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "run_js_script", 5 | "actions": [ 6 | { 7 | "action_name": "execute_postinstall", 8 | "inputs": [], 9 | "outputs": ["generated.js"], 10 | "action": ["node", "postinstall.js"] 11 | } 12 | ] 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /packages/has-binding-gyp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-binding-gyp", 3 | "version": "1.0.0", 4 | "os": [ 5 | "this-os-does-not-exist" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-binding-gyp/postinstall.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('generated.js', 'module.exports = function () {}\n', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/has-cpu-specified/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-cpu-specified", 3 | "version": "1.0.0", 4 | "cpu": ["x64", "ia32"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/has-default-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-default-peer", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "^100.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/has-different-licenses@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-different-licenses", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-different-licenses@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-different-licenses", 3 | "version": "2.0.0", 4 | "license": "ISC", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-different-licenses@3.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-different-licenses", 3 | "version": "3.0.0", 4 | "license": "ISC", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-execution-env/file.js: -------------------------------------------------------------------------------- 1 | const BASE_NAME = 'node-info.json' 2 | const FULL_PATH = require('path').join(__dirname, BASE_NAME) 3 | module.exports = { BASE_NAME, FULL_PATH } 4 | -------------------------------------------------------------------------------- /packages/has-execution-env/generate-node-info.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const file = require('./file') 3 | const nodeInfo = { 4 | execPath: process.execPath, 5 | versions: process.versions, 6 | } 7 | const json = JSON.stringify(nodeInfo, undefined, 2) + '\n' 8 | console.log(json) 9 | fs.writeFileSync(file.FULL_PATH, json) 10 | -------------------------------------------------------------------------------- /packages/has-execution-env/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-execution-env", 3 | "version": "1.0.0", 4 | "description": "The package.json defines a pnpm.executionEnv", 5 | "scripts": { 6 | "install": "node generate-node-info.js" 7 | }, 8 | "index": "read-generated-node-info.js", 9 | "pnpm": { 10 | "executionEnv": { 11 | "nodeVersion": "20.0.0" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/has-execution-env/read-generated-node-info.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const file = require('./file') 3 | const json = fs.readFileSync(file.FULL_PATH, 'utf-8') 4 | module.exports = JSON.parse(json) 5 | -------------------------------------------------------------------------------- /packages/has-failing-postinstall-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-failing-postinstall-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/failing-postinstall": "1.0.0" 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /packages/has-foo-100.0.0-range-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo-100.0.0-range-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "^100.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-foo-100.1.0-dep-1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo-100.1.0-dep-1", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "100.1.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-foo-100.1.0-dep-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo-100.1.0-dep-2", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "100.1.0" 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /packages/has-foo-as-dep-and-subdep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo-as-dep-and-subdep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "100.0.0", 6 | "@pnpm.e2e/requires-any-foo": "1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-foo100-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo100-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/foo": "100" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-foo101-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-foo101-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/foo": "101" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-generated-bins-as-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-generated-bins-as-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/generated-bins": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-github-dep@1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-github-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "is-positive": "kevva/is-positive" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-github-dep@2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-github-dep", 3 | "version": "2.0.0", 4 | "dependencies": { 5 | "is-positive": "kevva/is-positive" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-has-y-peer-only-as-peer-and-y@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-has-y-peer-only-as-peer-and-y", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/has-y-peer": "^1.0.0" 6 | }, 7 | "dependencies": { 8 | "@pnpm/y": "1.0.0" 9 | } 10 | } -------------------------------------------------------------------------------- /packages/has-has-y-peer-only-as-peer-and-y@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-has-y-peer-only-as-peer-and-y", 3 | "version": "2.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/has-y-peer": "^1.0.0" 6 | }, 7 | "dependencies": { 8 | "@pnpm/y": "2.0.0" 9 | } 10 | } -------------------------------------------------------------------------------- /packages/has-has-y-peer-only-as-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-has-y-peer-only-as-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/has-y-peer": "^1.0.0" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/has-has-y-peer-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-has-y-peer-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/has-y-peer": "^1.0.0", 6 | "@pnpm/y": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-local-dep/local-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/local-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/bravo-dep": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-local-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-local-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0", 6 | "local-dep": "file:./local-dep" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-many-optional-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-many-optional-deps", 3 | "version": "1.0.0", 4 | "optionalDependencies": { 5 | "@pnpm.e2e/darwin-x64": "1.0.0", 6 | "@pnpm.e2e/darwin-arm64": "1.0.0", 7 | "@pnpm.e2e/linux-x64": "1.0.0", 8 | "@pnpm.e2e/linux-arm64": "1.0.0", 9 | "@pnpm.e2e/windows-x64": "1.0.0" 10 | } 11 | } -------------------------------------------------------------------------------- /packages/has-native-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-native-dep", 3 | "version": "1.0.1", 4 | "dependencies": { 5 | "bcrypt": "3.0.6" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-not-compatible-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-not-compatible-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/not-compatible-with-any-os": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-optional-dep-with-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-optional-dep-with-peer", 3 | "version": "1.0.0", 4 | "optionalDependencies": { 5 | "@pnpm.e2e/not-compatible-with-any-os-and-has-peer": "1.0.0", 6 | "@pnpm.e2e/peer-c": "1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-optional-peer-as-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-optional-peer-as-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/bravo-dep": "1.0.0" 6 | }, 7 | "peerDependenciesMeta": { 8 | "@pnpm.e2e/bravo-dep": { 9 | "optional": true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/has-optional-peer-with-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-optional-peer-with-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/has-y-peer": "*" 6 | }, 7 | "peerDependenciesMeta": { 8 | "@pnpm.e2e/has-y-peer": { 9 | "optional": true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/has-patch-for-foo/@pnpm.e2e__foo@100.0.0.patch: -------------------------------------------------------------------------------- 1 | diff --git a/index.js b/index.js 2 | new file mode 100644 3 | index 0000000000000000000000000000000000000000..1e2e7be215a474d90dd0daf2bc9e368694fec353 4 | --- /dev/null 5 | +++ b/index.js 6 | @@ -0,0 +1 @@ 7 | +console.log('Hello world!') 8 | -------------------------------------------------------------------------------- /packages/has-patch-for-foo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-patch-for-foo", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/has-patch-for-foo/pnpmfile.cjs: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | hooks: { 5 | updateConfig (config) { 6 | config.patchedDependencies = { 7 | ...config.patchedDependencies, 8 | '@pnpm.e2e/foo': path.join(__dirname, '@pnpm.e2e__foo@100.0.0.patch'), 9 | } 10 | return config 11 | }, 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /packages/has-peer-c-in-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-peer-c-in-deps", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/peer-c": "2.0.0" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/has-pkg-with-peer-only/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-pkg-with-peer-only", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@scoped/peer": "1.0.0", 6 | "@having/scoped-peer": "1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/has-prerelease@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-prerelease", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/has-prerelease@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-prerelease", 3 | "version": "2.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/has-prerelease@3.0.0-rc.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-prerelease", 3 | "version": "3.0.0-rc.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/has-same-license@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-same-license", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-same-license@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-same-license", 3 | "version": "2.0.0", 4 | "license": "MIT", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-same-license@3.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-same-license", 3 | "version": "3.0.0", 4 | "license": "MIT", 5 | "author": "Some Author" 6 | } 7 | -------------------------------------------------------------------------------- /packages/has-say-hi-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-say-hi-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "say-hi": "*" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-tango-as-peer-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-tango-as-peer-dep", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/tango": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/has-y-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/has-y-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm/y": ">=1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/having-scoped-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@having/scoped-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@scoped/peer": "^1.0.0" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/hello-world-js-bin-parent/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world from hello-world-js-bin-parent!') 3 | -------------------------------------------------------------------------------- /packages/hello-world-js-bin-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/hello-world-js-bin-parent", 3 | "version": "1.0.0", 4 | "description": "A package with a hello world js bin", 5 | "bin": { 6 | "hello-world-js-bin": "./index.js" 7 | }, 8 | "scripts": { 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "author": "Zoltan Kochan (http://kochan.io/)", 12 | "license": "MIT", 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/hello-world-js-bin-parent" 16 | }, 17 | "dependencies": { 18 | "@pnpm.e2e/hello-world-js-bin": "1.0.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/hello-world-js-bin@0.0.0/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world!') 3 | -------------------------------------------------------------------------------- /packages/hello-world-js-bin@0.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/hello-world-js-bin", 3 | "version": "0.0.0", 4 | "description": "A package with a hello world js bin", 5 | "bin": "./index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/hello-world-js-bin@0.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/hello-world-js-bin@1.0.0/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world!') 3 | -------------------------------------------------------------------------------- /packages/hello-world-js-bin@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/hello-world-js-bin", 3 | "version": "1.0.0", 4 | "description": "A package with a hello world js bin", 5 | "bin": "./index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/hello-world-js-bin@1.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/independent-and-requires-build/create-file.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('created-by-postinstall', '', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/independent-and-requires-build/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/independent-and-requires-build", 3 | "version": "1.0.0", 4 | "description": "This package should have no deps and should have a postinstall script", 5 | "scripts": { 6 | "postinstall": "node create-file" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/install-script-example/.gitignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/install-script-example/.npmignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/install-script-example/README.md: -------------------------------------------------------------------------------- 1 | # install-script-example 2 | 3 | A package that creates a file by an install script 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm i install-script-example 9 | ``` 10 | 11 | # License 12 | 13 | MIT 14 | -------------------------------------------------------------------------------- /packages/install-script-example/create.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync(process.argv[2] + '.js', 'module.exports = function () {}\n', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/install-script-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/install-script-example", 3 | "version": "1.0.0", 4 | "description": "A package that creates a file by an install script", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "install": "node create generated-by-install" 8 | }, 9 | "author": "Zoltan Kochan (http://kochan.io/)", 10 | "license": "MIT", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/install-script-example" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/jsr-bar@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jsr/pnpm-e2e__bar", 3 | "description": "jsr:@pnpm-e2e/bar", 4 | "version": "1.0.0" 5 | } 6 | -------------------------------------------------------------------------------- /packages/jsr-bar@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jsr/pnpm-e2e__bar", 3 | "description": "jsr:@pnpm-e2e/bar", 4 | "version": "1.0.1" 5 | } 6 | -------------------------------------------------------------------------------- /packages/jsr-bar@1.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jsr/pnpm-e2e__bar", 3 | "description": "jsr:@pnpm-e2e/bar", 4 | "version": "1.1.0" 5 | } 6 | -------------------------------------------------------------------------------- /packages/jsr-bar@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jsr/pnpm-e2e__bar", 3 | "description": "jsr:@pnpm-e2e/bar", 4 | "version": "2.0.0" 5 | } 6 | -------------------------------------------------------------------------------- /packages/needs-auth/hello.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | const { name } = require('./package.json') 3 | console.log(`hello from ${name}`) 4 | -------------------------------------------------------------------------------- /packages/needs-auth/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function () {} 2 | -------------------------------------------------------------------------------- /packages/needs-auth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/needs-auth", 3 | "version": "1.0.0", 4 | "bin": { 5 | "hello-from-needs-auth": "./hello.js" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/not-compatible-with-any-os-and-has-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/not-compatible-with-any-os-and-has-peer", 3 | "version": "1.0.0", 4 | "os": [ 5 | "this-os-does-not-exist" 6 | ], 7 | "dependencies": { 8 | "@pnpm.e2e/dep-of-optional-pkg": "1.0.0" 9 | }, 10 | "peerDependencies": { 11 | "@pnpm.e2e/peer-c": "*" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/not-compatible-with-any-os/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/not-compatible-with-any-os", 3 | "version": "1.0.0", 4 | "os": [ 5 | "this-os-does-not-exist" 6 | ], 7 | "dependencies": { 8 | "@pnpm.e2e/dep-of-optional-pkg": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/not-compatible-with-not-compatible-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/not-compatible-with-not-compatible-dep", 3 | "version": "1.0.0", 4 | "os": [ 5 | "this-os-does-not-exist" 6 | ], 7 | "dependencies": { 8 | "@pnpm.e2e/not-compatible-with-any-os": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/only-darwin-arm64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-darwin-arm64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/only-darwin-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-darwin-x64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/only-linux-arm64-glibc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-linux-arm64-glibc", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "libc": [ 11 | "glibc" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/only-linux-arm64-musl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-linux-arm64-musl", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "libc": [ 11 | "musl" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/only-linux-x64-glibc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-linux-x64-glibc", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "libc": [ 11 | "glibc" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/only-linux-x64-musl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-linux-x64-musl", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "libc": [ 11 | "musl" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/only-win32-arm64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-win32-arm64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "win32" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/only-win32-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/only-win32-x64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "win32" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/optional-darwin-arm64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/darwin-arm64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ] 10 | } -------------------------------------------------------------------------------- /packages/optional-darwin-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/darwin-x64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ] 10 | } -------------------------------------------------------------------------------- /packages/optional-linux-arm64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/linux-arm64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ] 10 | } -------------------------------------------------------------------------------- /packages/optional-linux-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/linux-x64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ] 10 | } -------------------------------------------------------------------------------- /packages/optional-windows-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/windows-x64", 3 | "version": "1.0.0", 4 | "os": [ 5 | "win32" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ] 10 | } -------------------------------------------------------------------------------- /packages/parent-of-has-many-optional-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/parent-of-has-many-optional-deps", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/has-many-optional-deps": "1.0.0" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/parent-of-pkg-with-1-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/parent-of-pkg-with-1-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/pkg-with-1-dep": "^100.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/parent-of-pkg-with-events-and-peers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/parent-of-pkg-with-events-and-peers", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/pkg-with-events-and-peers": "^1.0.0", 6 | "@pnpm.e2e/peer-c": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/peer-a@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-a", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-a@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-a", 3 | "version": "1.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-b@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-b", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-c@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-c", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-c@1.0.1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-c", 3 | "version": "1.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-c@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-c", 3 | "version": "2.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/peer-deps-in-child-pkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-deps-in-child-pkg", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "is-negative": "2.x.x" 6 | }, 7 | "dependencies": { 8 | "is-negative": "kevva/is-negative#2.1.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/peer-of-itself/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-of-itself", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-of-itself": "*" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/peer-with-bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world!') 3 | -------------------------------------------------------------------------------- /packages/peer-with-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/peer-with-bin", 3 | "version": "1.0.0", 4 | "bin": "./index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/pkg-a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-a", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pkg-b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-b", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pkg-c/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-c", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pkg-d/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-d", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pkg-that-calls-unlisted-dep-in-hooks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-that-calls-unlisted-dep-in-hooks", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node -e \"process.stdout.write('Hello world!')\" | json-append output.json" 6 | }, 7 | "dependencies": { 8 | "@pnpm.e2e/pkg-that-depends-on-json-append": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/pkg-that-depends-on-json-append/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-that-depends-on-json-append", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "json-append": "^1.1.1" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-that-installs-slowly/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-that-installs-slowly", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node postinstall.js" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-that-installs-slowly/postinstall.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | setTimeout(_ => _, 2000) 3 | -------------------------------------------------------------------------------- /packages/pkg-that-uses-plugins/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict' 3 | console.log('My plugin is', require('@pnpm.e2e/plugin-example/package.json').name) 4 | -------------------------------------------------------------------------------- /packages/pkg-that-uses-plugins/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-that-uses-plugins", 3 | "version": "1.0.0", 4 | "author": "Zoltan Kochan (http://kochan.io/)", 5 | "license": "MIT", 6 | "bin": "./index.js", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/pkg-that-uses-plugins" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/pkg-with-1-aliased-dep/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('dep') 2 | -------------------------------------------------------------------------------- /packages/pkg-with-1-aliased-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-1-aliased-dep", 3 | "version": "100.0.0", 4 | "dependencies": { 5 | "dep": "npm:@pnpm.e2e/dep-of-pkg-with-1-dep@^100.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-with-1-dep@100.0.0/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/dep-of-pkg-with-1-dep') 2 | -------------------------------------------------------------------------------- /packages/pkg-with-1-dep@100.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-1-dep", 3 | "version": "100.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "^100.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-with-1-dep@100.1.0/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@pnpm.e2e/dep-of-pkg-with-1-dep') 2 | -------------------------------------------------------------------------------- /packages/pkg-with-1-dep@100.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-1-dep", 3 | "version": "100.1.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "^100.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-with-accidentally-published-catalog-protocol/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-accidentally-published-catalog-protocol", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/hello-world-js-bin": "catalog:foo" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-with-bundle-dependencies-false/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-bundle-dependencies-false", 3 | "version": "1.0.0", 4 | "bundleDependencies": false, 5 | "dependencies": { 6 | "@pnpm.e2e/hello-world-js-bin": "*" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/pkg-with-bundle-dependencies-true/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-bundle-dependencies-true", 3 | "version": "1.0.0", 4 | "bundleDependencies": true, 5 | "scripts": { 6 | "prepublishOnly": "npm install --ignore-scripts --no-package-lock" 7 | }, 8 | "dependencies": { 9 | "@pnpm.e2e/hello-world-js-bin": "*" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/pkg-with-bundle-dependencies/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-bundle-dependencies", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "prepublishOnly": "npm install --ignore-scripts --no-package-lock" 6 | }, 7 | "bundleDependencies": [ 8 | "@pnpm.e2e/hello-world-js-bin" 9 | ], 10 | "dependencies": { 11 | "@pnpm.e2e/hello-world-js-bin": "*" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/pkg-with-bundled-dependencies/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-bundled-dependencies", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "prepublishOnly": "npm install --ignore-scripts --no-package-lock" 6 | }, 7 | "bundledDependencies": [ 8 | "@pnpm.e2e/hello-world-js-bin" 9 | ], 10 | "dependencies": { 11 | "@pnpm.e2e/hello-world-js-bin": "1.0.0" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/pkg-with-directories-bin/bin/pkg-with-directories-bin: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('Hello world!') 3 | -------------------------------------------------------------------------------- /packages/pkg-with-directories-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-directories-bin", 3 | "version": "1.0.0", 4 | "description": "A package with a bin specified in the directories property", 5 | "directories": { 6 | "bin": "./bin" 7 | }, 8 | "author": "Zoltan Kochan (http://kochan.io/)", 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/pnpm/pnpm-registry-mock/tree/master/test/packages/pkg-with-directories-bin" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/pkg-with-duplicated-dep/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('dep-of-pkg-with-1-dep') 2 | -------------------------------------------------------------------------------- /packages/pkg-with-duplicated-dep/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-duplicated-dep", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0" 6 | }, 7 | "devDependencies": { 8 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "100.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/pkg-with-events-and-peers/.gitignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pkg-with-events-and-peers/.npmignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pkg-with-events-and-peers/README.md: -------------------------------------------------------------------------------- 1 | # pre-and-postinstall-scripts-example 2 | 3 | A package that creates files by pre- and postinstall scripts 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm i pre-and-postinstall-scripts-example 9 | ``` 10 | 11 | # License 12 | 13 | MIT 14 | -------------------------------------------------------------------------------- /packages/pkg-with-events-and-peers/create.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync(process.argv[2] + '.js', 'module.exports = function () {}\n', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/pkg-with-events-and-peers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-events-and-peers", 3 | "version": "1.0.0", 4 | "description": "A package that creates files by pre- and postinstall scripts", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "preinstall": "hello-world-js-bin && node create generated-by-preinstall", 8 | "postinstall": "hello-world-js-bin && node create generated-by-postinstall" 9 | }, 10 | "author": "Zoltan Kochan (http://kochan.io/)", 11 | "license": "MIT", 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/postinstall-example" 15 | }, 16 | "dependencies": { 17 | "@pnpm.e2e/hello-world-js-bin": "1.0.0" 18 | }, 19 | "peerDependencies": { 20 | "@pnpm.e2e/peer-c": "*" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/pkg-with-failing-optional-dependency/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-failing-optional-dependency", 3 | "version": "1.0.0", 4 | "optionalDependencies": { 5 | "@pnpm.e2e/pkg-with-failing-postinstall": "1.0.0" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/pkg-with-failing-optional-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-failing-optional-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/pkg-with-failing-postinstall": "*" 6 | }, 7 | "peerDependenciesMeta": { 8 | "@pnpm.e2e/pkg-with-failing-postinstall": { 9 | "optional": true 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /packages/pkg-with-failing-postinstall/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-failing-postinstall", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node this-does-not-exist.js" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/pkg-with-good-optional/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-good-optional", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "*" 6 | }, 7 | "optionalDependencies": { 8 | "is-positive": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/pkg-with-optional/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-optional", 3 | "version": "1.0.0", 4 | "optionalDependencies": { 5 | "@pnpm.e2e/not-compatible-with-any-os": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/pkg-with-peer-having-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-peer-having-bin", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-with-bin": "^1.0.0" 6 | }, 7 | "dependencies": { 8 | "@pnpm.e2e/hello-world-js-bin": "^1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/pkg-with-resolved-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-resolved-peer", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-b": "*", 6 | "@pnpm.e2e/peer-c": "*" 7 | }, 8 | "dependencies": { 9 | "@pnpm.e2e/peer-c": "^1.0.0" 10 | }, 11 | "optionalDependencies": { 12 | "@pnpm.e2e/peer-b": "^1.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/pkg-with-tarball-dep-from-registry/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pkg-with-tarball-dep-from-registry", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-pkg-with-1-dep": "http://localhost:7769/@pnpm.e2e/dep-of-pkg-with-1-dep/-/dep-of-pkg-with-1-dep-100.0.0.tgz" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/plugin-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/plugin-example", 3 | "version": "1.0.0", 4 | "author": "Zoltan Kochan (http://kochan.io/)", 5 | "license": "MIT", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/plugin-example" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/pnpm-foo@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pnpm-foo@1.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "1.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pnpm-foo@1.2.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "1.2.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pnpm-foo@1.3.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "1.3.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/pnpm-foo@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/foo", 3 | "version": "2.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/postinstall-calls-pnpm/create-file.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('created-by-postinstall', '', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/postinstall-calls-pnpm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/postinstall-calls-pnpm", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "$npm_execpath run create-file", 6 | "create-file": "node create-file" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/postinstall-modifies-source/empty-file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnpm/registry-mock/7fae1eb7275991dc14af767de6334fae0703187f/packages/postinstall-modifies-source/empty-file.txt -------------------------------------------------------------------------------- /packages/postinstall-modifies-source/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/postinstall-modifies-source", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node postinstall.js" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/postinstall-modifies-source/postinstall.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | fs.appendFileSync(path.join(__dirname, 'empty-file.txt'), 'hello', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/postinstall-requires-is-positive/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/postinstall-requires-is-positive", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "postinstall": "node postinstall.js" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/postinstall-requires-is-positive/postinstall.js: -------------------------------------------------------------------------------- 1 | require('is-positive') 2 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@1.0.0/.gitignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@1.0.0/.npmignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@1.0.0/README.md: -------------------------------------------------------------------------------- 1 | # pre-and-postinstall-scripts-example 2 | 3 | A package that creates files by pre- and postinstall scripts 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm i pre-and-postinstall-scripts-example 9 | ``` 10 | 11 | # License 12 | 13 | MIT 14 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@1.0.0/create.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync(process.argv[2] + '.js', 'module.exports = function () {}\n', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pre-and-postinstall-scripts-example", 3 | "version": "1.0.0", 4 | "description": "A package that creates files by pre- and postinstall scripts", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "prepare": "node create generated-by-prepare", 8 | "preinstall": "hello-world-js-bin && node create generated-by-preinstall", 9 | "install": "echo Hi", 10 | "postinstall": "hello-world-js-bin && node create generated-by-postinstall" 11 | }, 12 | "license": "MIT", 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/postinstall-example" 16 | }, 17 | "dependencies": { 18 | "@pnpm.e2e/hello-world-js-bin": "1.0.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@2.0.0/.gitignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@2.0.0/.npmignore: -------------------------------------------------------------------------------- 1 | generated-by-*.js 2 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@2.0.0/README.md: -------------------------------------------------------------------------------- 1 | # pre-and-postinstall-scripts-example 2 | 3 | A package that creates files by pre- and postinstall scripts 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm i pre-and-postinstall-scripts-example 9 | ``` 10 | 11 | # License 12 | 13 | MIT 14 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@2.0.0/create.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync(process.argv[2] + '.js', 'module.exports = function () {}\n', 'utf8') 5 | -------------------------------------------------------------------------------- /packages/pre-and-postinstall-scripts-example@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/pre-and-postinstall-scripts-example", 3 | "version": "2.0.0", 4 | "description": "A package that creates files by pre- and postinstall scripts", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "prepare": "node create generated-by-prepare", 8 | "preinstall": "hello-world-js-bin && node create generated-by-preinstall", 9 | "install": "echo Hi", 10 | "postinstall": "hello-world-js-bin && node create generated-by-postinstall" 11 | }, 12 | "license": "MIT", 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/postinstall-example" 16 | }, 17 | "dependencies": { 18 | "@pnpm.e2e/hello-world-js-bin": "1.0.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/print-node-info/index.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | const nodeInfo = { 3 | execPath: process.execPath, 4 | versions: process.versions, 5 | } 6 | console.log(JSON.stringify(nodeInfo, undefined, 2)) 7 | -------------------------------------------------------------------------------- /packages/print-node-info/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/print-node-info", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "bin": "index.js" 6 | } 7 | -------------------------------------------------------------------------------- /packages/print-version@1.0.0/bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log(require('./package.json').version) 3 | -------------------------------------------------------------------------------- /packages/print-version@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/print-version", 3 | "version": "1.0.0", 4 | "bin": "bin.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/print-version@2.0.0/bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log(require('./package.json').version) 3 | -------------------------------------------------------------------------------- /packages/print-version@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/print-version", 3 | "version": "2.0.0", 4 | "bin": "bin.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/publish-all.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e; 4 | 5 | cd packages; 6 | export npm_config_registry=http://localhost:4873/; 7 | npm config set "//localhost:4873/:_authToken=h6zsF82dzSCnFsws9nQXtxyKcBY"; 8 | 9 | exitstatus=0 10 | 11 | for d in **/package.json; do 12 | cd $(dirname $d); 13 | # We need to use "npm publish" here in order to publish "@pnpm.e2e/has-pnpm-use-node-version" with the "pnpm.useNodeVersion" field. 14 | # pnpm would remove the field but we need it for testing. 15 | npm publish --@jsr:registry=http://localhost:4873/ || exitstatus=$?; 16 | cd ..; 17 | if [ $exitstatus -ne 0 ]; then 18 | break; 19 | exit $exitstatus; 20 | fi 21 | done 22 | 23 | # Verdaccio currently does not support deprecation 24 | # so we manually modify the metadata 25 | node deprecate @pnpm.e2e/deprecated; 26 | node update-time.js 27 | 28 | exit $exitstatus 29 | -------------------------------------------------------------------------------- /packages/qar@100.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/qar", 3 | "version": "100.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/qar@100.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/qar", 3 | "version": "100.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/recursive-with-optional-peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/recursive-with-optional-peer", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/dep-of-recursive-with-optional-peer": "1.0.0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/peer-a": "*" 9 | }, 10 | "peerDependenciesMeta": { 11 | "@pnpm.e2e/peer-a": { 12 | "optional": true 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /packages/repeat-peers.a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.a", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/repeat-peers.b": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/repeat-peers.a2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.a", 3 | "version": "2.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/repeat-peers.b": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/repeat-peers.b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.b", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/repeat-peers.c": "1.0.0" 6 | }, 7 | "peerDependencies": { 8 | "@pnpm.e2e/repeat-peers.a": "*" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/repeat-peers.c/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.c", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/repeat-peers.d": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/repeat-peers.d/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.d", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/repeat-peers.b": "*" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/repeat-peers.x/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/repeat-peers.x", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/repeat-peers.a": "2.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/requires-any-foo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/requires-any-foo", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/foo": "*" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/requires-chalk-530/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/requires-chalk-530", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "chalk": "=5.3.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/requires-itself/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/requires-itself", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/requires-itself": "1.0.0", 6 | "is-positive": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/romeo-dep@1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/romeo-dep", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/romeo-dep@1.1.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/romeo-dep", 3 | "version": "1.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/romeo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/romeo", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/romeo-dep": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runs-own-bin/bin.js: -------------------------------------------------------------------------------- 1 | console.log('Hello world') 2 | -------------------------------------------------------------------------------- /packages/runs-own-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/runs-own-bin", 3 | "version": "1.0.0", 4 | "bin": "bin.js", 5 | "scripts": { 6 | "postinstall": "runs-own-bin" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/scoped~peer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@scoped/peer", 3 | "version": "1.0.0" 4 | } -------------------------------------------------------------------------------- /packages/self-file-reference/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/self-file-reference", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/self-file-reference": "link:." 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/self-link-reference/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/self-link-reference", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/self-link-reference": "link:." 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/sh-hello-world/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/sh-hello-world", 3 | "version": "1.0.1", 4 | "description": "A package with a hello world bash script", 5 | "bin": "./sh-hello-world.sh", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Zoltan Kochan (http://kochan.io/)", 10 | "license": "MIT", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/sh-hello-world" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/sh-hello-world/sh-hello-world.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Hello, world!" 4 | -------------------------------------------------------------------------------- /packages/shell-mock/index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | fs.writeFileSync('shell-input.json', JSON.stringify(process.argv.slice(2))) 4 | -------------------------------------------------------------------------------- /packages/shell-mock/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/shell-mock", 3 | "version": "0.0.0", 4 | "bin": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/support-different-architectures/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/support-different-architectures", 3 | "version": "1.0.0", 4 | "optionalDependencies": { 5 | "@pnpm.e2e/only-darwin-arm64": "1.0.0", 6 | "@pnpm.e2e/only-darwin-x64": "1.0.0", 7 | "@pnpm.e2e/only-linux-arm64-glibc": "1.0.0", 8 | "@pnpm.e2e/only-linux-arm64-musl": "1.0.0", 9 | "@pnpm.e2e/only-linux-x64-glibc": "1.0.0", 10 | "@pnpm.e2e/only-linux-x64-musl": "1.0.0", 11 | "@pnpm.e2e/only-win32-arm64": "1.0.0", 12 | "@pnpm.e2e/only-win32-x64": "1.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/symlinks-preserved/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | module.exports = fs.realpathSync(__filename) !== __filename 5 | -------------------------------------------------------------------------------- /packages/symlinks-preserved/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/symlinks-preserved", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/tango-tango/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/tango-tango", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/has-tango-as-peer-dep": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/tango/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/tango", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm.e2e/has-tango-as-peer-dep": "^1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/test-pnpm-issue219/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'test-pnpm-issue219,' + require('@zkochan/test-pnpm-issue219') 2 | -------------------------------------------------------------------------------- /packages/test-pnpm-issue219/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/test-pnpm-issue219", 3 | "version": "1.0.3", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Zoltan Kochan (http://kochan.io/)", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@zkochan/test-pnpm-issue219": "^1.0.0" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/test-pnpm-issue219" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/test-pnpm-peer-deps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/test-pnpm-peer-deps", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "is-negative": "2.x.x" 6 | }, 7 | "dependencies": { 8 | "is-negative": "2.0.0", 9 | "@pnpm.e2e/peer-deps-in-child-pkg": "1.0.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/touch-file-good-bin-name/cli.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('touch.txt', 'hello world', 'utf8') 5 | 6 | -------------------------------------------------------------------------------- /packages/touch-file-good-bin-name/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/touch-file-good-bin-name", 3 | "version": "1.0.0", 4 | "bin": { 5 | "touch-file-good-bin-name": "cli.js", 6 | "tt": "cli.js" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/touch-file-many-bins/cli.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('touch.txt', 'hello world', 'utf8') 5 | 6 | -------------------------------------------------------------------------------- /packages/touch-file-many-bins/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/touch-file-many-bins", 3 | "version": "1.0.0", 4 | "bin": { 5 | "t": "cli.js", 6 | "tt": "cli.js" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/touch-file-one-bin/cli.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const fs = require('fs') 3 | 4 | fs.writeFileSync('touch.txt', 'hello world', 'utf8') 5 | 6 | -------------------------------------------------------------------------------- /packages/touch-file-one-bin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/touch-file-one-bin", 3 | "version": "1.0.0", 4 | "bin": { 5 | "t": "cli.js" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/update-config-with-catalogs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/update-config-with-catalogs", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/update-config-with-catalogs/pnpmfile.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | hooks: { 3 | updateConfig (config) { 4 | config.catalogs ??= {} 5 | config.catalogs.default ??= {} 6 | config.catalogs.default['@pnpm.e2e/foo'] = '100.0.0' 7 | config.catalogs.bar ??= {} 8 | config.catalogs.bar['@pnpm.e2e/bar'] = '100.0.0' 9 | return config 10 | }, 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /packages/update-time.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | const storageCache = path.join(__dirname, '../registry/storage-cache') 4 | 5 | updateTime('@pnpm.e2e/bravo', { '1.0.0': '2022-04-01T20:17:46.770Z' }); 6 | updateTime('@pnpm.e2e/romeo', { '1.0.0': '2022-01-01T20:17:46.770Z' }); 7 | updateTime('@pnpm.e2e/bravo-dep', { 8 | '1.0.0': '2022-02-01T20:17:46.770Z', 9 | '1.0.1': '2022-02-22T20:17:46.770Z', 10 | '1.1.0': '2022-05-01T20:17:46.770Z', 11 | }); 12 | updateTime('@pnpm.e2e/romeo-dep', { 13 | '1.0.0': '2022-03-01T20:17:46.770Z', 14 | '1.1.0': '2022-07-01T20:17:46.770Z', 15 | }); 16 | 17 | function updateTime (pkgName, newTime) { 18 | const metaFilePath = path.join(storageCache, pkgName, 'package.json') 19 | const meta = JSON.parse(fs.readFileSync(metaFilePath, 'utf8')) 20 | meta.time = { 21 | ...meta.time, 22 | ...newTime, 23 | } 24 | fs.writeFileSync(metaFilePath, JSON.stringify(meta, null, 2), 'utf8') 25 | } 26 | -------------------------------------------------------------------------------- /packages/uses-pkg-with-self-usage/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('babel-runtime/regenerator/runtime') 2 | -------------------------------------------------------------------------------- /packages/uses-pkg-with-self-usage/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/uses-pkg-with-self-usage", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "babel-runtime": "5.8.38" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/using-ajv/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/using-ajv", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "ajv": "4.10.4", 6 | "ajv-keywords": "1.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/wants-peer-c-1.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/wants-peer-c-1.0.0", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-c": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/wants-peer-c-1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/wants-peer-c-1", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-c": "1" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/wants-peer-c-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/wants-peer-c-2", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm.e2e/peer-c": "2" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/with-postinstall-a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/with-postinstall-a", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "json-append": "^1.1.1", 6 | "@pnpm.e2e/with-postinstall-b": "^1.0.0" 7 | }, 8 | "scripts": { 9 | "postinstall": "node -e \"process.stdout.write(Number(new Date()).toString())\" | json-append output.json" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/with-postinstall-b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/with-postinstall-b", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "json-append": "^1.1.1" 6 | }, 7 | "scripts": { 8 | "postinstall": "node -e \"process.stdout.write(Number(new Date()).toString())\" | json-append output.json" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/with-same-file-in-different-cases/Foo.js: -------------------------------------------------------------------------------- 1 | // Foo.js 2 | -------------------------------------------------------------------------------- /packages/with-same-file-in-different-cases/foo.js: -------------------------------------------------------------------------------- 1 | // foo.js 2 | -------------------------------------------------------------------------------- /packages/with-same-file-in-different-cases/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/with-same-file-in-different-cases", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/write-lifecycle-env/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict' 3 | const fs = require('fs') 4 | const path = require('path') 5 | 6 | const content = JSON.stringify(process.env, null, 2) 7 | const fn = path.resolve('env.json') 8 | 9 | console.log(`Writing ${fn}...`) 10 | 11 | fs.writeFileSync(fn, content, 'utf8') 12 | 13 | console.log(`Writing ${fn}, done`) 14 | -------------------------------------------------------------------------------- /packages/write-lifecycle-env/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm.e2e/write-lifecycle-env", 3 | "version": "1.0.0", 4 | "description": "Writes process.env to `env.json` during install stage", 5 | "bin": "index.js", 6 | "main": "index.js", 7 | "scripts": { 8 | "install": "node index" 9 | }, 10 | "author": "Zoltan Kochan", 11 | "license": "MIT" 12 | } 13 | -------------------------------------------------------------------------------- /packages/x/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/x", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/xyz-parent-parent-parent-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz-parent-parent-parent-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm/xyz-parent-parent-parent": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/xyz-parent-parent-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz-parent-parent-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm/xyz-parent-parent": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/xyz-parent-parent-with-xyz/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz-parent-parent-with-xyz", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm/xyz-parent": "1.0.0", 6 | "@pnpm/x": "1.0.0", 7 | "@pnpm/y": "1.0.0", 8 | "@pnpm/z": "1.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/xyz-parent-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz-parent-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm/xyz-parent": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/xyz-parent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz-parent", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "@pnpm/xyz": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/xyz/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/xyz", 3 | "version": "1.0.0", 4 | "peerDependencies": { 5 | "@pnpm/x": "^1.0.0", 6 | "@pnpm/y": "^1.0.0", 7 | "@pnpm/z": "^1.0.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/y/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/y", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/y@2.0.0/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/y", 3 | "version": "2.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/z/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@pnpm/z", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/zkochan~test-pnpm-issue219/index.js: -------------------------------------------------------------------------------- 1 | module.exports = '@zkochan/test-pnpm-issue219' 2 | -------------------------------------------------------------------------------- /packages/zkochan~test-pnpm-issue219/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@zkochan/test-pnpm-issue219", 3 | "version": "1.0.2", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Zoltan Kochan (http://kochan.io/)", 10 | "license": "MIT", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/pnpm/pnpm/tree/master/test/packages/zkochan~test-pnpm-issue219" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | configDependencies: 2 | '@pnpm/better-defaults': 0.2.0+sha512-90iZf6xgZTlNuUVn5djvCXM720TgZrYmmb8jmjIv5c5efx3I46rmCcT2j5nlZJ6VrvghNgUaI2y/rnHe2W4L6g== 3 | ignoredBuiltDependencies: 4 | - core-js 5 | pnpmfile: node_modules/.pnpm-config/@pnpm/better-defaults/pnpmfile.cjs 6 | -------------------------------------------------------------------------------- /registry/config.yaml: -------------------------------------------------------------------------------- 1 | # path to a directory with all packages 2 | storage: ./storage 3 | 4 | auth: 5 | htpasswd: 6 | file: ./htpasswd 7 | # Maximum amount of users allowed to register, defaults to "+inf". 8 | # You can set this to -1 to disable registration. 9 | #max_users: 1000 10 | 11 | middlewares: 12 | audit: 13 | enabled: true 14 | 15 | # a list of other known repositories we can talk to 16 | uplinks: 17 | npmjs: 18 | url: https://registry.npmjs.org/ 19 | 20 | web: 21 | enable: false 22 | 23 | packages: 24 | '@private/*': 25 | access: $authenticated 26 | publish: $authenticated 27 | 28 | '@pnpm.e2e/needs-auth': 29 | access: $authenticated 30 | publish: $authenticated 31 | 32 | '@*/*': 33 | access: $all 34 | publish: $all 35 | proxy: npmjs 36 | 37 | 'plugin-example': 38 | access: $all 39 | publish: $all 40 | 41 | 'pkg-with-1-dep': 42 | access: $all 43 | publish: $all 44 | 45 | 'dep-of-pkg-with-1-dep': 46 | access: $all 47 | publish: $all 48 | 49 | 'foobar': 50 | access: $all 51 | publish: $all 52 | 53 | 'alpha': 54 | access: $all 55 | publish: $all 56 | 57 | 'deprecated': 58 | access: $all 59 | publish: $all 60 | 61 | '**': 62 | access: $all 63 | publish: $all 64 | proxy: npmjs 65 | 66 | # log settings 67 | logs: 68 | - {type: stdout, format: pretty, level: error} 69 | #- {type: file, path: verdaccio.log, level: info} 70 | -------------------------------------------------------------------------------- /registry/htpasswd: -------------------------------------------------------------------------------- 1 | john.doe:{SHA}h6zsF82dzSCnFsws9nQXtxyKcBY=:autocreated 2016-11-06T00:01:44.768Z 2 | foo:$6xx6LbdC2aqY:autocreated 2018-05-06T11:24:04.173Z 3 | -------------------------------------------------------------------------------- /registry/prepublish-config.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # This is the default config file. It allows all users to do anything, 3 | # so don't use it on production systems. 4 | # 5 | # Look here for more config file examples: 6 | # https://github.com/verdaccio/verdaccio/tree/master/conf 7 | # 8 | 9 | # path to a directory with all packages 10 | storage: ./storage-cache 11 | url_prefix: 'http://localhost:4873' 12 | 13 | auth: 14 | htpasswd: 15 | file: ./htpasswd 16 | # Maximum amount of users allowed to register, defaults to "+inf". 17 | # You can set this to -1 to disable registration. 18 | #max_users: 1000 19 | 20 | # a list of other known repositories we can talk to 21 | uplinks: 22 | npmjs: 23 | url: https://registry.npmjs.org/ 24 | 25 | packages: 26 | '@*/*': 27 | access: $all 28 | publish: $all 29 | proxy: npmjs 30 | 31 | 'plugin-example': 32 | access: $all 33 | publish: $all 34 | 35 | 'pkg-with-1-dep': 36 | access: $all 37 | publish: $all 38 | 39 | 'dep-of-pkg-with-1-dep': 40 | access: $all 41 | publish: $all 42 | 43 | 'foobar': 44 | access: $all 45 | publish: $all 46 | 47 | 'alpha': 48 | access: $all 49 | publish: $all 50 | 51 | 'deprecated': 52 | access: $all 53 | publish: $all 54 | 55 | '**': 56 | access: $all 57 | publish: $all 58 | proxy: npmjs 59 | 60 | # log settings 61 | logs: 62 | - {type: stdout, format: pretty, level: error} 63 | #- {type: file, path: verdaccio.log, level: info} 64 | -------------------------------------------------------------------------------- /src/bin/pnpm-registry-mock.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import pnpmRegistryMock, { prepare } from '..' 3 | 4 | if (process.argv[2] === 'prepare') { 5 | prepare() 6 | } else { 7 | pnpmRegistryMock() 8 | } 9 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | import execa from 'execa' 4 | import { sync as readYamlFile } from 'read-yaml-file' 5 | import writeYamlFile from 'write-yaml-file' 6 | import fsx from 'fs-extra' 7 | import * as locations from './lib/locations' 8 | import _addDistTag from './lib/addDistTag' 9 | import _addUser from './lib/addUser' 10 | 11 | const REGISTRY_MOCK_PORT = locations.REGISTRY_MOCK_PORT 12 | 13 | export default function () { 14 | const verdaccioBin = require.resolve('verdaccio/bin/verdaccio') 15 | return execa.sync('node', 16 | [ 17 | verdaccioBin, 18 | '--config', 19 | locations.configPath(), 20 | '--listen', 21 | REGISTRY_MOCK_PORT 22 | ], 23 | { stdio: 'inherit' } 24 | ) 25 | } 26 | 27 | export function start (opts: execa.Options & { useNodeVersion?: string, listen?: string }) { 28 | const verdaccioBin = require.resolve('verdaccio/bin/verdaccio') 29 | const args = [ 30 | verdaccioBin, 31 | '--config', 32 | locations.configPath(), 33 | '--listen', 34 | opts.listen ?? REGISTRY_MOCK_PORT 35 | ] 36 | if (opts.useNodeVersion) { 37 | return execa('pnpm', [ 38 | `--use-node-version=${opts.useNodeVersion}`, 39 | 'exec', 40 | 'node', 41 | ...args, 42 | ], opts) 43 | } 44 | return execa('node', args, opts) 45 | } 46 | 47 | export const addDistTag = _addDistTag(REGISTRY_MOCK_PORT) 48 | export const addUser = _addUser(REGISTRY_MOCK_PORT) 49 | 50 | export const getIntegrity = (pkgName: string, pkgVersion: string): string => { 51 | return JSON.parse(fs.readFileSync( 52 | path.join(locations.storage(), pkgName, 'package.json'), 53 | 'utf8' 54 | )).versions[pkgVersion].dist.integrity 55 | } 56 | 57 | export { REGISTRY_MOCK_PORT } 58 | 59 | export interface PrepareOptions { 60 | uplinkedRegistry?: string 61 | } 62 | 63 | export function prepare (opts?: PrepareOptions) { 64 | const tempy = require('tempy') 65 | const storage = tempy.directory() 66 | 67 | const storageCache = locations.storageCache() 68 | fsx.copySync(storageCache, storage) 69 | const config = readYamlFile(path.join(__dirname, '../registry/config.yaml')) 70 | writeYamlFile.sync(locations.configPath(), { 71 | ...config, 72 | storage, 73 | uplinks: { 74 | npmjs: { 75 | url: opts?.uplinkedRegistry || process.env['PNPM_REGISTRY_MOCK_UPLINK'] || 'https://registry.npmjs.org/', 76 | // performance improvements 77 | // https://verdaccio.org/docs/en/uplinks 78 | 79 | // avoid go to uplink is offline 80 | max_fails: 100, 81 | // default is 10 min, avoid hit the registry for metadata 82 | maxage: '30m', 83 | // increase threshold to avoid uplink is offline 84 | fail_timeout: '10m', 85 | // increase threshold to avoid uplink is offline 86 | timeout: '600s', 87 | // pass down to request.js 88 | agent_options: { 89 | keepAlive: true, 90 | maxSockets: 40, 91 | maxFreeSockets: 10 92 | }, 93 | } 94 | } 95 | }) 96 | } 97 | -------------------------------------------------------------------------------- /src/lib/addDistTag.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import RegClient from 'anonymous-npm-registry-client' 3 | 4 | export default function (port: number | string) { 5 | return (opts: { package: string, version: string, distTag: string }) => { 6 | const client = new RegClient() 7 | 8 | // just to make verdaccio cache the package 9 | return new Promise((resolve, reject) => { 10 | client.distTags.fetch(`http://localhost:${port}`, {package: opts.package}, (err: Error) => { 11 | if (err) { 12 | reject(err) 13 | return 14 | } 15 | 16 | // the tag has to be removed first because in verdaccio it is an array of versions 17 | client.distTags.rm(`http://localhost:${port}`, {package: opts.package, distTag: opts.distTag}, (err: Error) => { 18 | if (err) { 19 | reject(err) 20 | return 21 | } 22 | 23 | client.distTags.add(`http://localhost:${port}`, opts, (err: Error) => err ? reject(err) : resolve()) 24 | }) 25 | }) 26 | }) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/lib/addUser.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import RegClient from 'anonymous-npm-registry-client' 3 | 4 | export default function (port: number | string) { 5 | const client = new RegClient() 6 | return (auth: { username: string, email: string, password: string }): Promise<{ token: string }> => { 7 | return new Promise<{ token: string }>((resolve, reject) => { 8 | client.adduser(`http://localhost:${port}`, { auth }, (err: Error, data: { token: string }) => err ? reject(err) : resolve(data)) 9 | }) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/locations.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import { sync as readYamlFile } from 'read-yaml-file' 3 | 4 | const REGISTRY_MOCK_PORT = process.env['PNPM_REGISTRY_MOCK_PORT'] || '4873' 5 | 6 | const registry = () => path.join(__dirname, '../../registry') 7 | const storageCache = () => path.join(registry(), 'storage-cache') 8 | const configPath = () => path.join(registry(), `runtime-config-${REGISTRY_MOCK_PORT}.yaml`) 9 | let _storage: string 10 | const storage = () => { 11 | if (!_storage) { 12 | _storage = readYamlFile<{ storage: string }>(configPath()).storage 13 | } 14 | return _storage 15 | } 16 | 17 | export { 18 | configPath, 19 | REGISTRY_MOCK_PORT, 20 | storage, 21 | storageCache, 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "src/*", 4 | "src/**/*" 5 | ], 6 | "exclude": [], 7 | "compilerOptions": { 8 | /* Basic Options */ 9 | "composite": true, /* Enable support for project references */ 10 | "incremental": true, /* Enable incremental compilation */ 11 | "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 12 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 13 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | "sourceMap": true, /* Generates corresponding '.map' file. */ 16 | "outDir": "./dist", /* Redirect output structure to the directory. */ 17 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 18 | "tsBuildInfoFile": "./tsconfig.tsbuildinfo", /* Specify file to store incremental compilation information */ 19 | 20 | /* Strict Type-Checking Options */ 21 | "strict": true, /* Enable all strict type-checking options. */ 22 | 23 | /* Module Resolution Options */ 24 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 25 | "types": ["node"], /* Type declaration files to be included in compilation. */ 26 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 27 | } 28 | } 29 | --------------------------------------------------------------------------------