Commit Graph

46 Commits

Author SHA1 Message Date
Zoltan Kochan
9eddabb32b feat: enhance store prune to clean global virtual store (#10360)
* feat: enhance `store prune` to clean global virtual store

`pnpm store prune` will now clean the global virtual store
via a new project registry and mark-and-sweep garbage collection.

* test: add store prune test for transitive dependency preservation

* refactor: extract global virtual store pruning logic to a new file

* fix: improve symlink handling in global virtual store pruning

* fix: optimize removal of unreachable packages in global virtual store

* fix: refine project registry error handling

Throw `PnpmError` for inaccessible projects
and specifically clean up stale symlinks for `ENOENT` errors.

* test: create virtual store with install command

* refactor: standardize global virtual store directory structure

by placing unscoped packages under an `@` scope.

* test: update store prune tests to use `toContain` and `not.toContain` assertions`

* fix: linting issues

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: implemented CR suggestions

* fix: revert not needed change

* fix: use `is-subdir` to accurately determine if symlink targets

are within the global virtual store.

* revert: changes in package.json files

* test: add `--config.ci=false` to store prune tests
2025-12-26 01:35:35 +01:00
Zoltan Kochan
491a84fb26 feat: use ESM instead of commonjs (#9870) 2025-08-25 10:02:00 +02:00
Zoltan Kochan
facd7656e8 refactor: always use extensions in relative imports (#9878) 2025-08-19 15:25:11 +02:00
Zoltan Kochan
b217bbb4a7 feat: add a new setting for telling pnpm if the env is CI (#9616)
This is an addition to https://github.com/pnpm/pnpm/pull/8190. The global virtual store isn't a good choice for CI. So, we disable it even if the setting sets `enableGlobalVirtualStore` to `true`.
2025-06-08 15:00:22 +02:00
Zoltan Kochan
b0ead519b3 feat: global virtual store (#8190)
close #1001
2025-06-03 18:18:58 +02:00
Zoltan Kochan
fb9e3b4ee0 feat!: drop lockfile v6 support 2024-12-15 15:38:20 +01:00
Zoltan Kochan
a76da0c53c feat!: remove conversion of lockfile v6 to v9 (#8866) 2024-12-15 14:39:19 +01:00
Jordan
9ea8fa457b fix: only validate modules directory if required (e.g. for install) (#8657) 2024-10-24 17:45:49 +02:00
Jordan
f9a095c7c6 fix: properly check modules purge confirmation answer (#8655) 2024-10-17 02:11:32 +02:00
Khải
f071d00815 refactor: replace forEach with for-loops (#8535)
* refactor: replace `forEach` with `for`-loops

Changes:
* Most `Object.keys(o).forEach` are replaced by `for in`.
* Most `Array.filter(c).forEach` are replaced by `for of` + `if continue`.
* `return` in `forEach` callbacks are replaced by `continue`.

There may be minor improvement to memory footprint as this change would
reduce the creations of temporary arrays and temporary functions.

* fix: return -> continue

* refactor: remove the commented out code
2024-09-18 03:58:25 +02:00
Zoltan Kochan
e9908b3185 refactor: rename lockfile-file to lockfile.fs 2024-07-28 01:15:20 +02:00
Zoltan Kochan
0406d4ad3d refactor: use a branded type for project root dir paths (#8272) 2024-07-04 13:13:34 +02:00
Zoltan Kochan
341656f9b3 refactor: make workspace packages a map 2024-07-02 22:49:38 +02:00
Zoltan Kochan
576f13878e refactor: deduplicate arrayOfWorkspacePackagesToMap (#8265) 2024-07-01 14:45:13 +02:00
Zoltan Kochan
dd00eeb18c refactor: normalize dir field names across project objects (#8262) 2024-07-01 11:27:04 +02:00
Zoltan Kochan
9927c2855a refactor(core): workspace packages (#8248)
Make workspace packages optional.
2024-06-30 15:17:07 +02:00
Zoltan Kochan
13e55b2865 fix: a filtered install should update the lockfile first (#8183)
close #8165
2024-06-12 14:49:39 +02:00
Zoltan Kochan
47341e5004 fix: make the peers suffix shorter (#8177)
ref #7079
2024-06-07 23:37:07 +02:00
Zoltan Kochan
3dd30b1909 refactor: create branded type for project ID (#8164) 2024-06-04 18:30:59 +02:00
Zoltan Kochan
c649954e41 refactor: create a separate type for DepPath (#8094) 2024-05-20 16:11:46 +02:00
Zoltan Kochan
b3d1495566 fix: recreate node_modules if virtual-store-dir-max-length changes (#8032) 2024-04-29 15:24:06 +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
Khải
471f0b3420 refactor(pkg-manager): return type annotations for small modules in the pkg-manager directory (#7875)
* refactor(pkg-manager): return type annotations

* refactor(get-context): return type annotation

* refactor(headless): return type annotations
2024-04-09 12:00:41 +02:00
Zoltan Kochan
5c20db0dd2 feat!: use the same lockfile format in 1-pkg workspace as in multi-pkg one (#7696) 2024-02-29 10:28:29 +01:00
Zoltan Kochan
b378a945f9 fix: preserve versions when upgrading lockfile to v7 2024-02-23 00:56:31 +01:00
Steven Petryk
19c4b4f973 fix(get-context): avoid excess purge prompts (#7639)
* fix(get-context): avoid excess purge prompts

pnpm sometimes needs to purge modules folders (node_modules) when
certain configuration changes (in other words, when it needs to start
from scratch).

This prompt, problematically, was getting triggered asynchronously for
each importer in the workspace that needed a purge, which would
sometimes lead to gargantuan prompts instead of one consolidated prompt.

The fix is to queue up which importers need a purge, then fire the
prompter all at once.

Closes #7320

* fix: reuse ImporterToPurge type

* refactor: apply suggestions from code review

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-02-12 19:52:18 +01:00
Zoltan Kochan
29adf17cfa fix: registry configuration from previous install should not override current one (#7515)
close #7507
2024-01-11 09:54:39 +01:00
Zoltan Kochan
d381a6001c feat!: use dependency path format from lockfile v6 (#7470)
Drop lockfile v5 support.
2024-01-08 11:57:44 +01:00
Zoltan Kochan
b1fd38ccab fix: don't remove modules directory when registry configuration changes (#7322) 2023-11-16 14:23:07 +02:00
Zoltan Kochan
2143a9388a fix: improve the error message when modules directory should be recreated (#7308) 2023-11-14 11:43:15 +02:00
Zoltan Kochan
4b97f1f07a perf: don't use await inside loops (#6617) 2023-06-05 12:12:47 +03:00
Zoltan Kochan
a53ef4d196 fix: don't print that lockfile is up to date when it is not (#6574)
close #6544
2023-05-23 18:41:11 +03:00
Zoltan Kochan
9c4ae87bd1 feat: include some settings as fields in the lockfile (#6557)
ref #6312
2023-05-21 02:40:39 +03:00
Zoltan Kochan
1ffedcb8d7 fix(deploy): always purge modules directory (#6511)
close #6510
2023-05-07 12:51:56 +03:00
Zoltan Kochan
c6ffb60322 fix: don't confirm modules removal in CI
ref #6458
2023-05-01 20:25:11 +03:00
Zoltan Kochan
497b0a79c0 fix: only remove node_modules if the user confirms to do so (#6458) 2023-04-30 11:55:25 +03:00
await-ovo
080fee0b8b fix: add -g to mismatch registries error info when original command has -g option (#6365)
close #6224
2023-04-06 12:22:39 +03:00
Zoltan Kochan
2a2032810f fix: don't write pnpm-lock.yaml if it has no changes (#6260)
close #6158
2023-03-23 04:40:42 +02:00
Zoltan Kochan
158d8cf22f feat!: only allow lockfile v6 (#6240) 2023-03-19 04:23:51 +02:00
Zoltan Kochan
ee61ca4cb7 style: update eslint (#6236) 2023-03-18 14:57:29 +02:00
Zoltan Kochan
417c8ac595 fix!: always create a lockfile (#6073) 2023-02-13 22:33:10 +02:00
Andrew Sprouse
28b47a1569 feat: restore extend-node-path option (#5910)
Co-authored-by: Zoltan Kochan <z@kochan.io>
2023-01-13 18:15:24 +02:00
Zoltan Kochan
3ebce5db7a feat!: lockfile format v6 (#5810) 2023-01-09 14:37:05 +02:00
Pascal Jufer
08ceaf3fcb chore(deps): replace is-ci by ci-info (#5862) 2023-01-01 20:53:07 +02:00
Zoltan Kochan
7030cc26e8 refactor: use Object.fromEntries instead of Ramda.fromPairs 2022-12-21 03:23:10 +02:00
Zoltan Kochan
4ca53b0b50 refactor: group projects in different subdirectories (#5659) 2022-11-20 01:35:22 +02:00