Commit Graph

175 Commits

Author SHA1 Message Date
Brandon Cheng
6efda2ea03 fix: reuse existing cataloged resolutions for consistency (#8259)
* test: add a test to ensure catalog resolutions are consistent

* fix: reuse existing cataloged resolutions for consistency
2024-07-01 01:58:17 +02:00
Zoltan Kochan
9927c2855a refactor(core): workspace packages (#8248)
Make workspace packages optional.
2024-06-30 15:17:07 +02:00
Brandon Cheng
9bf9f71ad3 fix: show better error when encountering external catalog protocol usage (#8254)
* fix: show better error when encountering external catalog protocol usage

* refactor: reuse SPEC_NOT_SUPPORTED error

* Apply suggestions from code review

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-06-30 09:53:39 +02:00
Brandon Cheng
9c63679df1 feat: catalogs (#8122)
* feat: create new @pnpm/catalogs.types package (#8026)

* feat: read catalog configs from workspace manifest (#8123)

* refactor: move InvalidWorkspaceManifestError to its own file

* feat: read catalogs config from workspace manifest

* chore: add changeset for new catalog config parsing

* feat: create new `@pnpm/catalogs.protocol-parser` package (#8124)

This works around a problem with pnpm's CI setup not compiling
packages that are not dependencies of the main pnpm package before
running these tests.

https://github.com/pnpm/pnpm/pull/8027#issuecomment-2081650304

* refactor: factor out isWantedDepPrefSame to extend in a future commit (#8125)

* feat: create new `@pnpm/catalogs.config` package (#8220)

* refactor: remove single default catalog check

This check will happen in  `@pnpm/catalogs.config` instead.

* feat: create new @pnpm/catalogs.config package

* fix: work around CI setup not compiling orphan packages before testing

This works around a problem with pnpm's CI setup not compiling
packages that are not dependencies of the main pnpm package before
running these tests.

https://github.com/pnpm/pnpm/pull/8027#issuecomment-2081650304

* feat: create new `@pnpm/catalogs.resolver` package (#8219)

* feat: create new @pnpm/catalogs.resolver package

* fix: work around CI setup not compiling orphan packages before testing

This works around a problem with pnpm's CI setup not compiling
packages that are not dependencies of the main pnpm package before
running these tests.

https://github.com/pnpm/pnpm/pull/8027#issuecomment-2081650304

* feat: implement catalog protocol for publish (#8225)

* feat: implement catalog protocol for install (#8221)

* feat: add catalogs to @pnpm/config

* refactor: factor out resolveDependenciesOfImporterDependency function

* feat: implement catalog resolver and replace prefs

* revert: work around CI setup not compiling orphan packages before testing

* feat: record catalog lookup snapshots through propagated metadata

* feat: update projects when catalogs config changes

* test: add catalog protocol install tests

* refactor: remove filter-packages-from-dir dependency from core tests (#8244)

* refactor: remove filter-packages-from-dir dependency from core tests

* test: refactor

* test: refactor

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-06-27 14:19:38 +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
Brandon Cheng
c7e1b6fae8 chore: configure TypeScript project references for tests (#8128)
* refactor: store link values before converting to references

* fix: use .sort() without localeCompare

https://github.com/pnpm/pnpm/pull/8128#discussion_r1614031566

> Nit, but you probably just want to call sort without a comparison
> function; these are already strings and locale compare is not a good
> comparison for anything but human readable strings since it will
> differ on different people's machines based on their language setting.
> I've hit this too many times before for code gen.

* feat: configure meta-updater to write test/tsconfig.json files

* fix: relative imports for __typings__

* chore: `pnpm run meta-updater`

* fix: explicitly use test/tsconfig.json for ts-jest
2024-05-31 12:48:13 +02:00
Zoltan Kochan
74c1057778 perf: fix hoisting peers (#8144)
Reverts 4b65113

ref #8072

This change makes install faster at least 3 times in some Bit workspaces.
2024-05-30 12:17:17 +02:00
Zoltan Kochan
4b65113b9c fix: temporarily don't hoist peers when dedupe peers is on 2024-05-29 14:01:15 +02:00
Zoltan Kochan
27c33f0319 fix: dependencies that are not only optional should be installed when optionals are skipped (#8076)
close #8066

Co-authored-by: khai96_ <hvksmr1996@gmail.com>
2024-05-23 13:20:13 +02:00
Zoltan Kochan
0c08e1c50f fix: clear metadata cache after resolution is finished (#8109) 2024-05-22 00:23:14 +02:00
Zoltan Kochan
c649954e41 refactor: create a separate type for DepPath (#8094) 2024-05-20 16:11:46 +02:00
Zoltan Kochan
5a03c1f284 perf: improve performance of peer dependencies resolution (#8060) 2024-05-12 01:29:19 +02:00
Khải
b1d7f8c6cf fix(override): relative file in workspace (#8055)
close #8053

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-05-10 23:31:33 +02:00
Zoltan Kochan
fd6cd27817 test: don't skip deep recursion test 2024-05-07 16:49:44 +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
Zoltan Kochan
b7d2ed47be fix: ignore the engines.pnpm field of dependencies (#7968)
close #7965
2024-04-19 02:49:01 +02:00
Zoltan Kochan
b3961cb19d fix: linking optional dependencies (#7949)
close #7943
2024-04-17 17:35:05 +02:00
Zoltan Kochan
253d50c550 fix: optional peer dependencies should resolve to optional dependencies (#7918) 2024-04-13 18:26:47 +02:00
Zoltan Kochan
c9db742824 fix: update typescript to v5.4 (#7905) 2024-04-12 14:03:45 +02:00
Zoltan Kochan
db162f3801 test: remove console.log 2024-04-09 11:28:39 +02:00
Zoltan Kochan
501133d30b refactor: bump lockfile version to v9 instead of v7 (#7861)
In order to align the lockfile version with pnpm version that ships it.
2024-04-06 17:12:37 +02:00
Zoltan Kochan
6caec8109b fix: hoist peer dependencies (#7841) 2024-03-30 12:23:29 +01:00
Khải
984b976672 refactor: replace deprecated jest methods (#7840) 2024-03-29 00:03:58 +01:00
Zoltan Kochan
670ed188df fix: auto install optional peer (#7837) 2024-03-28 00:02:14 +01:00
Zoltan Kochan
e74e7847f3 fix: resolve missing optional peer if it is installed as a dep somewhere (#7830) 2024-03-27 13:43:52 +01:00
Zoltan Kochan
8eddd21f07 fix: resolve missing peer from versions already present in other parts of the dep graph (#7812) 2024-03-22 19:45:54 +01:00
Zoltan Kochan
a22bdf0e29 feat!: remove the dev field from the lockfile (#7808) 2024-03-22 15:21:26 +01:00
Zoltan Kochan
eaebfd53c7 test: fix 2024-03-18 00:12:15 +01:00
Zoltan Kochan
21878e7ae4 feat(lockfile)!: change the keys format (#7752) 2024-03-17 23:01:39 +01:00
Zoltan Kochan
053fc12f5a fix: don't fetch tarballs when lockfile-only install is run (#7715)
close #1328
2024-03-14 02:41:10 +01:00
Zoltan Kochan
aa33269f9f fix: peer dependency rules should not change the lockfile (#7758)
* fix: peer dependency rules should not change the lockfile

* test: fix

* fix: hide peer issues warning if there nothing to report
2024-03-13 17:55:18 +01:00
Zoltan Kochan
a95bec6f51 fix: don't allow peer dependency rules with auto-install-peers on 2024-03-11 18:36:49 +01:00
Zoltan Kochan
53594a3787 feat!: package ID should be an exact version spec (#7748) 2024-03-10 14:46:25 +01:00
Zoltan Kochan
9e6bbfb778 test: fix 2024-03-05 14:08:53 +01:00
Zoltan Kochan
174603eb32 fix: auto install peers should not work with ignore missing peers (#7739) 2024-03-05 02:50:09 +01:00
Zoltan Kochan
1ecda50502 feat(lockfile)!: dividing "packages" field to "packages" and "snapshots" (#7700)
close #7685
2024-03-04 23:31:01 +01: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
Khải
730929e330 feat: pnpm.ignoredOptionalDependencies (#7714) 2024-02-28 13:46:29 +00:00
Zoltan Kochan
0e6b757cf5 feat!: remove requiresBuild from the lockfile (#7710)
close #7707
2024-02-27 11:50:43 +01:00
Zoltan Kochan
7db98cae0f feat!: bump lockfile to v7 (#7666) 2024-02-17 12:57:58 +01:00
Zoltan Kochan
7f59a0491e test(core): use sync testDefaults 2024-02-16 20:29:07 +01:00
Zoltan Kochan
a5a3b995c1 test: use sync fs operations in tests (#7664) 2024-02-16 19:43:04 +01:00
Zoltan Kochan
19542ecd28 test: use sync operations for assertions (#7663) 2024-02-16 16:23:23 +01:00
Zoltan Kochan
c7d0564225 refactor: lockfile-file (#7655) 2024-02-16 11:14:47 +01:00
Zoltan Kochan
9f8948c24a feat: auto install peers from highest match (#7654) 2024-02-14 15:23:31 +01:00
Zoltan Kochan
57424e77b0 fix: do not fail when the same package with peer dependency is installed via different aliases (#7648) 2024-02-13 10:31:28 +01:00
Zoltan Kochan
98a126699c fix: resolve peer of peer from the deps of direct dependent package (#7606)
close #7444

Peer dependencies of peer dependencies are now resolved correctly. When peer dependencies have peer dependencies of their own, the peer dependencies are grouped with their own peer dependencies before being linked to their dependents.

For instance, if `card` has `react` in peer dependencies and `react` has `typescript` in its peer dependencies, then the same version of `react` may be linked from different places if there are multiple versions of `typescript`. For instance:

```
project1/package.json
{
  "dependencies": {
    "card": "1.0.0",
    "react": "16.8.0",
    "typescript": "7.0.0"
  }
}
project2/package.json
{
  "dependencies": {
    "card": "1.0.0",
    "react": "16.8.0",
    "typescript": "8.0.0"
  }
}
node_modules
  .pnpm
    card@1.0.0(react@16.8.0(typescript@7.0.0))
      node_modules
        card
        react --> ../../react@16.8.0(typescript@7.0.0)/node_modules/react
    react@16.8.0(typescript@7.0.0)
      node_modules
        react
        typescript --> ../../typescript@7.0.0/node_modules/typescript
    typescript@7.0.0
      node_modules
        typescript
    card@1.0.0(react@16.8.0(typescript@8.0.0))
      node_modules
        card
        react --> ../../react@16.8.0(typescript@8.0.0)/node_modules/react
    react@16.8.0(typescript@8.0.0)
      node_modules
        react
        typescript --> ../../typescript@8.0.0/node_modules/typescript
    typescript@8.0.0
      node_modules
        typescript
```

In the above example, both projects have `card` in dependencies but the projects use different versions of `typescript`. Hence, even though the same version of `card` is used, `card` in `project1` will reference `react` from a directory where it is placed with `typescript@7.0.0` (because it resolves `typescript` from the dependencies of `project1`), while `card` in `project2` will reference `react` with `typescript@8.0.0`.
2024-02-09 00:50:08 +01:00