Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Turborepo): return invalid states from package discovery #7789

Conversation

gsoltis
Copy link
Contributor

@gsoltis gsoltis commented Mar 20, 2024

Description

  • Returns errors when package watching is in a known-invalid state. This means the client does not need to rely on timeouts when we cannot find a package manager or valid workspace globs.
  • Combines the two bits of state, package manager and workspaces, into a single API call. They were effectively already used that way, but now the clients are updated to only make a single call.

Testing Instructions

Updated tests to no longer use a timeout, as we can now confirm error responses

Closes TURBO-2665

Copy link

vercel bot commented Mar 20, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
examples-basic-web 🔄 Building (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
examples-gatsby-web 🔄 Building (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
examples-kitchensink-blog 🔄 Building (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
examples-nonmonorepo ✅ Ready (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
examples-tailwind-web 🔄 Building (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
rust-docs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Mar 25, 2024 5:51pm
4 Ignored Deployments
Name Status Preview Comments Updated (UTC)
examples-designsystem-docs ⬜️ Ignored (Inspect) Visit Preview Mar 25, 2024 5:51pm
examples-native-web ⬜️ Ignored (Inspect) Visit Preview Mar 25, 2024 5:51pm
examples-svelte-web ⬜️ Ignored (Inspect) Visit Preview Mar 25, 2024 5:51pm
examples-vite-web ⬜️ Ignored (Inspect) Visit Preview Mar 25, 2024 5:51pm

Copy link
Contributor

github-actions bot commented Mar 20, 2024

🟢 Turbopack Benchmark CI successful 🟢

Thanks

@gsoltis gsoltis marked this pull request as ready for review March 20, 2024 20:32
@gsoltis gsoltis requested a review from a team as a code owner March 20, 2024 20:32
@gsoltis gsoltis requested review from tknickman and NicholasLYang and removed request for a team March 20, 2024 20:32
@gsoltis gsoltis marked this pull request as draft March 20, 2024 20:33
@gsoltis gsoltis force-pushed the 03-19-feat_Turborepo_handle_package_manager_changes branch from fd6e6c0 to c7281cf Compare March 20, 2024 20:55
Copy link
Contributor

github-actions bot commented Mar 20, 2024

🟢 CI successful 🟢

Thanks

@gsoltis gsoltis force-pushed the 03-20-feat_turborepo_return_invalid_states_from_package_discovery branch from 3162d3a to 4e4c232 Compare March 21, 2024 01:23
@gsoltis gsoltis force-pushed the 03-19-feat_Turborepo_handle_package_manager_changes branch 3 times, most recently from 8ec8547 to 455f88f Compare March 21, 2024 03:42
Base automatically changed from 03-19-feat_Turborepo_handle_package_manager_changes to main March 21, 2024 20:09
tonic::Status::internal(format!("{}", e))
}
})
match self.package_watcher.discover_packages_blocking().await {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not related to the PR, but I still don't understand the blocking variant vs normal variant of package discovery. Should this block until package discovery can succeed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It blocks until there's a non-None value available. Not necessarily a success. When we detect relevant changes, we set the value to None, then recalculate. That recalculation might produce an error, in which case this would resolve to an error.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the blocking variant is used by the LSP, while the non-blocking variant is for the CLI, which will fall back to running its own calculation in the event of a timeout

Comment on lines 129 to 130
NoPackageManager(Box<dyn std::error::Error + Send + Sync>),
InvalidGlobs(Box<dyn std::error::Error + Send + Sync>),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor, but since we're only using the error for the error message via e.to_string() we could do that conversion on construction and simplify the type a bit.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll take a look at making the change. I had originally intended to send the whole Error instance back, but due to the watch channel, that turns into a requirement for Clone, which in turn propagates pretty far out to all of the different error types.

@gsoltis gsoltis force-pushed the 03-20-feat_turborepo_return_invalid_states_from_package_discovery branch from d9284ae to eaccc37 Compare March 25, 2024 17:41
@gsoltis gsoltis merged commit bc4b0c1 into main Mar 25, 2024
56 checks passed
@gsoltis gsoltis deleted the 03-20-feat_turborepo_return_invalid_states_from_package_discovery branch March 25, 2024 21:35
kodiakhq bot added a commit to weareinreach/TransMascFutures that referenced this pull request Apr 2, 2024
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@crowdin/crowdin-api-client](https://togithub.com/crowdin/crowdin-api-client-js) | [`1.32.0` -> `1.33.0`](https://renovatebot.com/diffs/npm/@crowdin%2fcrowdin-api-client/1.32.0/1.33.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@crowdin%2fcrowdin-api-client/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@crowdin%2fcrowdin-api-client/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@crowdin%2fcrowdin-api-client/1.32.0/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@crowdin%2fcrowdin-api-client/1.32.0/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.11.30` -> `20.12.2`](https://renovatebot.com/diffs/npm/@types%2fnode/20.11.30/20.12.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.11.30/20.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.11.30/20.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [eslint-plugin-turbo](https://togithub.com/vercel/turbo) ([source](https://togithub.com/vercel/turbo/tree/HEAD/packages/eslint-plugin-turbo)) | [`1.13.0` -> `1.13.1`](https://renovatebot.com/diffs/npm/eslint-plugin-turbo/1.13.0/1.13.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-turbo/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-plugin-turbo/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-plugin-turbo/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-turbo/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [i18next-browser-languagedetector](https://togithub.com/i18next/i18next-browser-languageDetector) | [`7.2.0` -> `7.2.1`](https://renovatebot.com/diffs/npm/i18next-browser-languagedetector/7.2.0/7.2.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/i18next-browser-languagedetector/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next-browser-languagedetector/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next-browser-languagedetector/7.2.0/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next-browser-languagedetector/7.2.0/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [listr2](https://togithub.com/listr2/listr2) | [`8.1.1` -> `8.1.3`](https://renovatebot.com/diffs/npm/listr2/8.1.1/8.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/listr2/8.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/listr2/8.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/listr2/8.1.1/8.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/listr2/8.1.1/8.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [pnpm](https://pnpm.io) ([source](https://togithub.com/pnpm/pnpm)) | [`8.15.5` -> `8.15.6`](https://renovatebot.com/diffs/npm/pnpm/8.15.5/8.15.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/8.15.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pnpm/8.15.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pnpm/8.15.5/8.15.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/8.15.5/8.15.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [prettier-plugin-packagejson](https://togithub.com/matzkoh/prettier-plugin-packagejson) | [`2.4.13` -> `2.4.14`](https://renovatebot.com/diffs/npm/prettier-plugin-packagejson/2.4.13/2.4.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier-plugin-packagejson/2.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier-plugin-packagejson/2.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier-plugin-packagejson/2.4.13/2.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier-plugin-packagejson/2.4.13/2.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [turbo](https://turbo.build/repo) ([source](https://togithub.com/vercel/turbo)) | [`1.13.0` -> `1.13.1`](https://renovatebot.com/diffs/npm/turbo/1.13.0/1.13.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/turbo/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/turbo/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/turbo/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/turbo/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>crowdin/crowdin-api-client-js (@&#8203;crowdin/crowdin-api-client)</summary>

### [`v1.33.0`](https://togithub.com/crowdin/crowdin-api-client-js/releases/tag/1.33.0)

[Compare Source](https://togithub.com/crowdin/crowdin-api-client-js/compare/1.32.0...1.33.0)

#### What's Changed

-   fix: update ai methods by [@&#8203;NazarLysyi](https://togithub.com/NazarLysyi) in [crowdin/crowdin-api-client-js#386
-   ci: upgrade actions by [@&#8203;andrii-bodnar](https://togithub.com/andrii-bodnar) in [crowdin/crowdin-api-client-js#385

#### New Contributors

-   [@&#8203;NazarLysyi](https://togithub.com/NazarLysyi) made their first contribution in [crowdin/crowdin-api-client-js#386

**Full Changelog**: crowdin/crowdin-api-client-js@1.32.0...1.33.0

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/eslint-plugin)</summary>

### [`v7.5.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#750-2024-04-01)

[Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.4.0...v7.5.0)

##### 🩹 Fixes

-   **eslint-plugin:** \[no-floating-promises] handle TaggedTemplateExpression

-   **eslint-plugin:** \[no-unnecessary-type-assertion] handle exactOptionalPropertyTypes compiler option

##### ❤️  Thank You

-   Brad Zacher
-   Kim Sang Du
-   Mark de Dios
-   Naru
-   YeonJuan

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v7.5.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#750-2024-04-01)

[Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.4.0...v7.5.0)

##### 🩹 Fixes

-   **parser:** disallow `errorOnTypeScriptSyntacticAndSemanticIssues`

##### ❤️  Thank You

-   Brad Zacher
-   Kim Sang Du
-   Mark de Dios
-   Naru
-   YeonJuan

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.

</details>

<details>
<summary>vercel/turbo (eslint-plugin-turbo)</summary>

### [`v1.13.1`](https://togithub.com/vercel/turbo/releases/tag/v1.13.1): Turborepo v1.13.1

[Compare Source](https://togithub.com/vercel/turbo/compare/v1.13.0...v1.13.1)



##### What's Changed

##### Docs

-   docs: add missing CLI references by [@&#8203;wokcito](https://togithub.com/wokcito) in [vercel/turbo#7806
-   (docs): refer to correct Github Actions cache version as described in example by [@&#8203;KarelVerschraegen](https://togithub.com/KarelVerschraegen) in [vercel/turbo#7869
-   Docs: Fix heading by [@&#8203;Dragate](https://togithub.com/Dragate) in [vercel/turbo#7873

##### Changelog

-   feat(ui): persist logs on failure by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7805
-   feat(Turborepo): handle package manager changes by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7770
-   feat(ui): add ability to scroll task output by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7807
-   fix(ui): avoid dupe key events on windows by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7809
-   fix(ui): avoid using prefix for replayed logs by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7810
-   chore: remove some unused imports by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7816
-   feat(ui): persist all logs by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7822
-   fix(ui): limit viewport size based on term size by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7837
-   feat(Turborepo): return invalid states from package discovery by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7789
-   fix(Turborepo): ignore working tree state for fixed git comparisons by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7838
-   fix(vt100): fix scrollback underflow by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7844
-   fix(ui): account for border when reserving size for logs by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7846
-   fix(yarn4): properly handle workspace protocol with path by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7817
-   feat(lockfile): support for parsing pnpm lockfile v7 by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7853
-   fix(pnpm): support new pnpm9 default link-workspace-packages by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7865
-   chore(telemetry): track dot env usage by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7876
-   chore: fix lockfile by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7877

##### New Contributors

-   [@&#8203;wokcito](https://togithub.com/wokcito) made their first contribution in [vercel/turbo#7806
-   [@&#8203;Dragate](https://togithub.com/Dragate) made their first contribution in [vercel/turbo#7873

**Full Changelog**: vercel/turbo@v1.13.0...v1.13.1

</details>

<details>
<summary>i18next/i18next-browser-languageDetector (i18next-browser-languagedetector)</summary>

### [`v7.2.1`](https://togithub.com/i18next/i18next-browser-languageDetector/blob/HEAD/CHANGELOG.md#721)

[Compare Source](https://togithub.com/i18next/i18next-browser-languageDetector/compare/v7.2.0...v7.2.1)

-   fix: align addDetector impementation to type definition [282](https://togithub.com/i18next/i18next-browser-languageDetector/issues/282)

</details>

<details>
<summary>listr2/listr2 (listr2)</summary>

### [`v8.1.3`](https://togithub.com/listr2/listr2/releases/tag/listr2%408.1.3)

[Compare Source](https://togithub.com/listr2/listr2/compare/listr2@&#8203;8.1.2...listr2@&#8203;8.1.3)

#### listr2 [8.1.3](https://togithub.com/listr2/listr2/compare/listr2@&#8203;8.1.2...listr2@&#8203;8.1.3) (2024-03-31)

##### Bug Fixes

-   remove all listeners call ([763ada8](https://togithub.com/listr2/listr2/commit/763ada8402b542139a98aa57a97e80ccb7e3e78f))

### [`v8.1.2`](https://togithub.com/listr2/listr2/compare/listr2@&#8203;8.1.1...listr2@&#8203;8.1.2)

[Compare Source](https://togithub.com/listr2/listr2/compare/listr2@&#8203;8.1.1...listr2@&#8203;8.1.2)

</details>

<details>
<summary>pnpm/pnpm (pnpm)</summary>

### [`v8.15.6`](https://togithub.com/pnpm/pnpm/releases/tag/v8.15.6)

[Compare Source](https://togithub.com/pnpm/pnpm/compare/v8.15.5...v8.15.6)

#### Patch Changes

-   The exit code of the child process should be preserved on `pnpm run` [#&#8203;7817](https://togithub.com/pnpm/pnpm/issues/7817).
-   When sorting packages in a workspace, take into account workspace dependencies specified as `peerDependencies` [#&#8203;7813](https://togithub.com/pnpm/pnpm/issues/7813).
-   Add `--ignore-scripts` argument to `prune` command [#&#8203;7836](https://togithub.com/pnpm/pnpm/pull/7836).

#### Platinum Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
        <a href="https://bit.dev/?utm_source=pnpm&utm_medium=readme" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80"></a>
      </td>
      <td align="center" valign="middle">
        <a href="https://figma.com/?utm_source=pnpm&utm_medium=readme" target="_blank"><img src="https://pnpm.io/img/users/figma.svg" width="80"></a>
      </td>
    </tr>
  </tbody>
</table>

#### Gold Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
        <a href="https://discord.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" />
            <img src="https://pnpm.io/img/users/discord.svg" width="220" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://prisma.io/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/prisma.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/prisma_light.svg" />
            <img src="https://pnpm.io/img/users/prisma.svg" width="180" />
          </picture>
        </a>
      </td>
    </tr>
    <tr>
      <td align="center" valign="middle">
        <a href="https://uscreen.de/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/uscreen.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/uscreen_light.svg" />
            <img src="https://pnpm.io/img/users/uscreen.svg" width="180" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://www.jetbrains.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/jetbrains.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/jetbrains.svg" />
            <img src="https://pnpm.io/img/users/jetbrains.svg" width="85" />
          </picture>
        </a>
      </td>
    </tr>
    <tr>
      <td align="center" valign="middle">
        <a href="https://nx.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" />
            <img src="https://pnpm.io/img/users/nx.svg" width="120" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
            <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" />
          </picture>
        </a>
      </td>
    </tr>
  </tbody>
</table>

#### Silver Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
        <a href="https://leniolabs.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <img src="https://pnpm.io/img/users/leniolabs.jpg" width="80">
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://vercel.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/vercel.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/vercel_light.svg" />
            <img src="https://pnpm.io/img/users/vercel.svg" width="180" />
          </picture>
        </a>
      </td>
    </tr>
    <tr>
      <td align="center" valign="middle">
        <a href="https://depot.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/depot.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/depot_light.svg" />
            <img src="https://pnpm.io/img/users/depot.svg" width="200" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://moonrepo.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/moonrepo.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/moonrepo_light.svg" />
            <img src="https://pnpm.io/img/users/moonrepo.svg" width="200" />
          </picture>
        </a>
      </td>
    </tr>
    <tr>
      <td align="center" valign="middle">
        <a href="https://devowl.io/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/devowlio.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/devowlio.svg" />
            <img src="https://pnpm.io/img/users/devowlio.svg" width="200" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://macpaw.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/macpaw.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/macpaw_light.svg" />
            <img src="https://pnpm.io/img/users/macpaw.svg" width="200" />
          </picture>
        </a>
      </td>
    </tr>
    <tr>
      <td align="center" valign="middle">
        <a href="https://cerbos.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/cerbos.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/cerbos_light.svg" />
            <img src="https://pnpm.io/img/users/cerbos.svg" width="180" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://vpsserver.com/en-us/?utm_source=pnpm&utm_medium=readme" target="_blank">
          <img src="https://pnpm.io/img/users/vpsserver.svg" width="180" />
        </a>
      </td>
    </tr>
  </tbody>
</table>

</details>

<details>
<summary>matzkoh/prettier-plugin-packagejson (prettier-plugin-packagejson)</summary>

### [`v2.4.14`](https://togithub.com/matzkoh/prettier-plugin-packagejson/releases/tag/v2.4.14)

[Compare Source](https://togithub.com/matzkoh/prettier-plugin-packagejson/compare/v2.4.13...v2.4.14)

##### Bug Fixes

-   **deps:** update dependency sort-package-json to v2.10.0 ([e2bb083](https://togithub.com/matzkoh/prettier-plugin-packagejson/commit/e2bb083b08de7b25840412f919c0f6394f919af6))

</details>

<details>
<summary>vercel/turbo (turbo)</summary>

### [`v1.13.1`](https://togithub.com/vercel/turbo/compare/v1.13.0...v1.13.1)

[Compare Source](https://togithub.com/vercel/turbo/compare/v1.13.0...v1.13.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday,before 4am on Thursday" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/weareinreach/GLAAD).



PR-URL: #377
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants