Zoltan Kochan
7d5ada0701
feat: reverse pnpm why tree and improve list/why output ( #10615 )
...
- **`pnpm why` now shows a reverse dependency tree.** The searched package appears at the root with its dependants as branches, walking back to workspace roots. This replaces the previous forward-tree output which was noisy and hard to read for deeply nested dependencies.
- **Replaced `archy` with a new `@pnpm/text.tree-renderer` package** that renders trees using box-drawing characters (├──, └──, │) and supports grouped sections, dim connectors, and deduplication markers.
- **Show peer dependency hash suffixes** in `pnpm list` and `pnpm why` output to distinguish between different peer-dep variants of the same package.
- **Improved `pnpm list` visual output:** bold importer nodes, dimmed workspace paths, dependency grouping, package count summary, and deterministic sort order.
- **Added `--long` support to `pnpm why`** and the ability to read package manifests from the CAS store.
- **Deduplicated shared code** between `list` and `why` commands into a common module, and reused `getPkgInfo` in the why tree builder.
2026-02-15 14:38:43 +01:00
Ryo Matsukawa
2464485700
feat: add --lockfile-only option to pnpm list ( #10066 )
...
close #10020
---------
Co-authored-by: Zoltan Kochan <z@kochan.io >
2025-11-17 16:57:29 +01:00
Khải
ae43ac79fa
feat(cli/config)!: breaking changes ( #9854 )
...
* feat(cli/config)!: breaking changes
* refactor(test): remove `deepNullProto` and reuse `getOutputString`
* feat(cli/config/list): censor protected settings
* test: censorship of protected settings
* docs(changeset): censorship of protected settings
* fix: eslint
* feat(config)!: exclude non-option from `rawConfig`
* fix: eslint
* refactor: move default registries to builtin (#9886 )
* feat(config)!: filter rc settings
* feat(config): don't exclude non-options
This reverts commit a79f72dbfb .
* feat(cli/config/get)!: print array as json
* test: fix
* docs(changeset): correct
* test: fix
* feat(cli/config)!: only kebabize option fields (wip)
* chore(git): revert the implementation
This reverts commit 529f9bdd47 .
* test: restore
This reverts commit d8191e0ed8 .
* feat(cli/config)!: only kebabize option fields (wip)
* feat: use `types` instead
* feat(cli/config/get)!: only kebabize rc fields
* test: add
* test: non-rc kebab-case keys
* test: correct
* docs(changeset): correct
* docs(changeset): style
* docs(changeset): correct
* test: only kebabize rc fields
* fix: import path
* fix: eslint
* fix: `isCamelCase`
* feat(cli/config/set)!: forbid unknown rc fields
* test: fix existing test
* test: refuse unsupported rc settings
* feat: hint
* feat(cli/config/set)!: refuse kebab-case workspace-specific settings
* feat(config)!: ignore non-camelCase from `pnpm-workspace.yaml`
* test: config get
* test: config list
* refactor: extract shared code into its own package
* test: `isCamelCase`
* feat(cli/config/list)!: consistent naming cases
* refactor: make it more reusable
* feat(cli/config/get)!: consistent naming cases
* feat(cli/config/get): censor protected settings
* test: `get ''` should be the same as `list`
* docs(test): quotation marks
* refactor: remove unnecessary `test.each`
* docs(changeset): case changes
* test: unknown keys
* docs(changeset): correct
* docs(changeset): non camelCase from `pnpm-workspace.yaml`
* fix: eslint
* docs(changeset): correct terminology
* docs(changeset): clarify
* feat!: do not load non-auth and non-registry
* fix: implementation
* test: no hidden settings
* fix: eslint
* fix: do not drop default values
* test: fix
* test: remove irrelevant tests
* test: fix (wip)
* fix: auth
* test: skip an inapplicable test
* test: temporary skip a test
* test: fix 'respects testPattern'
* test: fix 'respects changedFilesIgnorePattern'
* test: fix 'changedFilesIgnorePattern is respected'
* test: rename a test
* test: fix `package-lock=false`
* feat: exception for `managePackageManagerVersions`
* test: `managePackageManagerVersions: false`
* test: fix (wip)
* test: workaround
* fix: default `optional` to `true`
* fix: `filter` on `pnpm-workspace.yaml`
* test: fix
* test: disable ones that no longer apply
* chore(git): revert incorrect change
* fix: `filter` on `pnpm-workspace.yaml` (#10127 )
* fix: `filter` on `pnpm-workspace.yaml`
* docs: changeset
* fix: actual fix
* fix: don't set default on config
* docs(readme): correct a package description
* fix: typo
* test: fix
* test: use a field that wouldn't be ignored
* test: replace some `.npmrc` with `pnpm-workspace.yaml`
* docs(changeset): less awkward wordings
* docs(changeset): correction
2025-10-28 17:09:15 +01:00
Zoltan Kochan
491a84fb26
feat: use ESM instead of commonjs ( #9870 )
2025-08-25 10:02:00 +02:00
v1rtl
acdf26d8cd
refactor: replace strip-ansi with built-in util.stripVTControlCharacters ( #9009 )
2025-01-26 11:44:40 +01:00
Zoltan Kochan
e9985b6f21
feat!: default value of virtual-store-dir-max-length set to 60 on Windows ( #8556 )
2024-09-23 09:30:45 +02:00
Zoltan Kochan
9719a42d0e
feat: configurable max length of directories inside node_modules/.pnpm ( #7994 )
...
close #7355
2024-04-28 11:07:29 +02:00
Zoltan Kochan
a5a3b995c1
test: use sync fs operations in tests ( #7664 )
2024-02-16 19:43:04 +01:00
Zoltan Kochan
aaefb07d0b
fix(list): don't fail on local directory dependencies ( #6911 )
...
close #6873
2023-08-05 12:58:03 +03:00
Zoltan Kochan
9cbe293876
refactor: put all non-public projects to directories that start with __
2022-11-20 02:40:44 +02:00
Zoltan Kochan
4ca53b0b50
refactor: group projects in different subdirectories ( #5659 )
2022-11-20 01:35:22 +02:00