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

Improve spnpm to use esbuild #4574

Merged
merged 4 commits into from
Apr 14, 2022
Merged

Improve spnpm to use esbuild #4574

merged 4 commits into from
Apr 14, 2022

Conversation

jondlm
Copy link
Contributor

@jondlm jondlm commented Apr 14, 2022

I've been doing a lot of local debugging with spnpm lately and it's challenging to work with. The ts-execution-engine has been oddly flaky and resulting in cases where TS files weren't getting resolved correctly. Also babel register adds some friction when I want to use --inspect-brk and set breakpoints before the execution begins; the sourcemaps aren't present until the files are resolved and read in.

This PR rewrites spnpm to use esbuild to bundle (with sourcemaps) a file which is then requireed in.

Esbuild is fast enough (~500ms on my machine) to just bundle on every invocation.

Let me know what you think. It's been much more stable for my local development and solves all the problems I've run into.

@jondlm jondlm requested a review from zkochan as a code owner April 14, 2022 17:00
Copy link
Member

@zkochan zkochan left a comment

Choose a reason for hiding this comment

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

I am OK with this but now it doesn't run with Node.js 14. Looks like esbuild is not compiling some esnext to old es

@@ -1,3 +1,60 @@
require('@pnpm/ts-execution-runtime')
Copy link
Member

Choose a reason for hiding this comment

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

I guess this project should be removed then.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sounds good. I can do that. I wasn't sure if it was used elsewhere.

return
}

const newPath = pathLib.resolve(packagesDir, packageName, 'src', 'index.ts')
Copy link
Member

@zkochan zkochan Apr 14, 2022

Choose a reason for hiding this comment

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

maybe better to use info from the package.json to find the main file.

Copy link
Contributor Author

@jondlm jondlm Apr 14, 2022

Choose a reason for hiding this comment

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

Where specifically are you thinking? The main field in the package.json? I could read that in and .replace('lib', 'src') but that doesn't seem much better than simply hard coding it.

The other approach I could take is not writing an esbuild plugin at all. Instead I could write a secondary "main" field into each of the packages/**/package.json files e.g. "tsMain": "src/index.ts" and then invoke esbuild with --mainFields=tsMain. The downside is that puts a mysterious tsMain field in every package.json.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, I mean the main field of the package.json files.

The seconds approach sounds fine as well.

Or keep it as it is if it works. I don't care that much.

@@ -2,6 +2,8 @@ import { requestRetryLogger } from '@pnpm/core-loggers'
import { operation, RetryTimeoutOptions } from '@zkochan/retry'
import fetch, { Request, RequestInit as NodeRequestInit, Response } from 'node-fetch'

export { isRedirect } from 'node-fetch'
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Small fix here to properly export isRedirect. I think problem was being masked by the babel -> cjs -> bundle with esbuild pipeline. When I started bundling directly with esbuild I found runtime errors cause fetch.isRedirect is technically undefined in the ES module output of node-fetch.

@jondlm jondlm requested a review from zkochan April 14, 2022 21:00
@jondlm
Copy link
Contributor Author

jondlm commented Apr 14, 2022

I fixed and tested it with node 14. Just needed to set target: 'node14' in the esbuild options.

@jondlm
Copy link
Contributor Author

jondlm commented Apr 14, 2022

There's one DX (developer experience) issue to note that I just found: --inspect-brk isn't loading all the sourcemaps eagerly because the require at the bottom is lazy. I don't think it's a blocker for this PR but I'd like to fix that by default eventually. The workaround for the moment is to run spnpm once so its built then use node --inspect-brk dist-spnpm/spnpm.cjs.

Also I can cleanup the ts execution engine in a followup PR.

@zkochan zkochan merged commit d687a5d into pnpm:main Apr 14, 2022
@welcome
Copy link

welcome bot commented Apr 14, 2022

Congrats on merging your first pull request! 🎉🎉🎉

ddadaal pushed a commit to PKUHPC/SCOW that referenced this pull request Jan 16, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@pnpm/lockfile-file](https://togithub.com/pnpm/pnpm/blob/main/lockfile/lockfile-file#readme)
([source](https://togithub.com/pnpm/pnpm)) | [`6.0.5` ->
`7.0.2`](https://renovatebot.com/diffs/npm/@pnpm%2flockfile-file/6.0.5/7.0.2)
|
[![age](https://badges.renovateapi.com/packages/npm/@pnpm%2flockfile-file/7.0.2/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/@pnpm%2flockfile-file/7.0.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/@pnpm%2flockfile-file/7.0.2/compatibility-slim/6.0.5)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/@pnpm%2flockfile-file/7.0.2/confidence-slim/6.0.5)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pnpm/pnpm</summary>

### [`v7.0.1`](https://togithub.com/pnpm/pnpm/releases/tag/v7.0.1)

[Compare Source](https://togithub.com/pnpm/pnpm/compare/v7.0.0...v7.0.1)

##### Patch Changes

- Use Yarn's compatibility database to patch broken packages in the
ecosystem with package extensions
[#&#8203;4676](https://togithub.com/pnpm/pnpm/pull/4676).
- `pnpm dlx` should work when the bin name of the executed package isn't
the same as the package name
[#&#8203;4672](https://togithub.com/pnpm/pnpm/issues/4672).
- Throw an error if arguments are passed to the `pnpm init` command
[#&#8203;4665](https://togithub.com/pnpm/pnpm/pull/4665).
- `pnpm prune` works in a workspace
[#&#8203;4647](https://togithub.com/pnpm/pnpm/pull/4691).
- Do not report request retry warnings when loglevel is set to `error`
[#&#8203;4669](https://togithub.com/pnpm/pnpm/issues/4669).
- `pnpm prune` does not remove hoisted dependencies
[#&#8203;4647](https://togithub.com/pnpm/pnpm/pull/4691).

##### Our Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
<a href="https://bit.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/bit.svg"
width="80"></a>
      </td>
      <td align="center" valign="middle">
<a href="https://prisma.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/prisma.svg"
width="180"></a>
      </td>
      <td align="center" valign="middle">
<a
href="https://leniolabs.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/leniolabs.jpg"
width="80"></a>
      </td>
      <td align="center" valign="middle">
<a href="https://vercel.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/vercel.svg"
width="180"></a>
      </td>
      <td align="center" valign="middle">
<a
href="https://www.takeshape.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/takeshape.svg"
width="280"></a>
      </td>
    </tr>
  </tbody>
</table>

##### New Contributors
* @&#8203;axe-me made their first
contributi[pnpm/pnpm#4654

**Full Changelog**: pnpm/pnpm@v7.0.0...v7.0.1

### [`v7.0.0`](https://togithub.com/pnpm/pnpm/releases/tag/v7.0.0)

#### Major Changes

-   Node.js 12 is not supported.

- When using `pnpm run <script>`, all command line arguments after the
script name are now passed to the script's argv, even `--`.
For example, the command below will now pass `--hello -- world` to the
`echo` script's argv:
        pnpm run echo --hello -- world
Previously, flagged arguments (e.g. `--silent`) were interpreted as pnpm
arguments unless `--` came before it.
If you want to pass options to pnpm, place them before the script name.
For instance:
        pnpm --workspace-root --silent run echo --hello -- world
Read more details about this [in our
docs](https://pnpm.io/cli/run#options).
Related PR: [#&#8203;4290](https://togithub.com/pnpm/pnpm/issues/4290)

- The root package is excluded by default, when running `pnpm -r
exec|run|add`
[#&#8203;2769](https://togithub.com/pnpm/pnpm/issues/2769).

-   Filtering by path is done by globs.

In pnpm v6, in order to pick packages under a certain directory, the
following filter was used: `--filter=./apps`

    In pnpm v7, a glob should be used: `--filter=./apps/**`

For easier upgrade, we have also added a setting to turn back filtering
as it was in v6. Just set `legacy-dir-filtering=true` in `.npmrc`.

- The `NODE_PATH` env variable is not set in the command shims (the
files in `node_modules/.bin`). This env variable was really long and
frequently caused errors on Windows.

    Also, the `extend-node-path` setting is removed.

    Related PR: [#&#8203;4253](https://togithub.com/pnpm/pnpm/pull/4253)

-   The `embed-readme` setting is `false` by default.

- Side effects cache is turned on by default. To turn it off, use
`side-effects-cache=false`.

- The `npm_config_argv` env variable is not set for scripts
[#&#8203;4153](https://togithub.com/pnpm/pnpm/discussions/4153).

-   `pnpx` is now just an alias of `pnpm dlx`.

If you want to just execute the command of a dependency, run `pnpm
<cmd>`. For instance, `pnpm eslint`.

    If you want to install and execute, use `pnpm dlx <pkg name>`.

- `pnpm install -g pkg` will add the global command only to a predefined
location. pnpm will not try to add a bin to the global Node.js or npm
folder. To set the global bin directory, either set the `PNPM_HOME` env
variable or the [`global-bin-dir`](https://pnpm.io/npmrc#global-bin-dir)
setting.

- `pnpm pack` should only pack a file as an executable if it's a bin or
listed in the `publishConfig.executableFiles` array.

- `-W` is not an alias of `--ignore-workspace-root-check` anymore. Just
use `-w` or `--workspace-root` instead, which will also allow to install
dependencies in the root of the workspace.

- Allow to execute a lifecycle script in a directory that doesn't match
the package's name. Previously this was only allowed with the
`--unsafe-perm` CLI option
[#&#8203;3709](https://togithub.com/pnpm/pnpm/issues/3709).

- Local dependencies referenced through the `file:` protocol are hard
linked (not symlinked)
[#&#8203;4408](https://togithub.com/pnpm/pnpm/pull/4408). If you need to
symlink a dependency, use the `link:` protocol instead.

- `strict-peer-dependencies` is `true` by default
[#&#8203;4427](https://togithub.com/pnpm/pnpm/pull/4427).

- A prerelease version is always added as an exact version to
`package.json`. If the `next` version of `foo` is `1.0.0-beta.1` then
running `pnpm add foo@next` will add this to `package.json`:

    ```json
    {
      "dependencies": {
        "foo": "1.0.0-beta.1"
      }
    }
    ```

    PR: [#&#8203;4435](https://togithub.com/pnpm/pnpm/pull/4435)

- Dependencies of the root workspace project are not used to resolve
peer dependencies of other workspace projects
[#&#8203;4469](https://togithub.com/pnpm/pnpm/pull/4469).

- Don't hoist types by default to the root of `node_modules`
[#&#8203;4459](https://togithub.com/pnpm/pnpm/pull/4459).

-   Any package with "prettier" in its name is hoisted.

- Changed the location of the global store from `~/.pnpm-store` to
`<pnpm home directory>/store`

    On Linux, by default it will be `~/.local/share/pnpm/store`
    On Windows: `%LOCALAPPDATA%/pnpm/store`
    On macOS: `~/Library/pnpm/store`

Related issue:
[#&#8203;2574](https://togithub.com/pnpm/pnpm/issues/2574)

There is no migration script for moving the global packages from the old
location to the old one. Just reinstall all your global packages with
pnpm v7.

- [`4bed585`](https://togithub.com/pnpm/pnpm/commit/4bed585e2): The next
deprecated settings were removed:

    -   frozen-shrinkwrap
    -   prefer-frozen-shrinkwrap
    -   shared-workspace-shrinkwrap
    -   shrinkwrap-directory
    -   lockfile-directory
    -   shrinkwrap-only
    -   store

- Use a base32 hash instead of a hex to encode too long dependency paths
inside `node_modules/.pnpm`
[#&#8203;4552](https://togithub.com/pnpm/pnpm/pull/4552).

- New setting added: `git-shallow-hosts`. When cloning repositories from
"shallow-hosts", pnpm will use shallow cloning to fetch only the needed
commit, not all the history
[#&#8203;4548](https://togithub.com/pnpm/pnpm/pull/4548).

-   Lockfile version bumped to v5.4.

- Exit with an error when running `pnpm install` in a directory that has
no `package.json` file in it (and in parent directories)
[#&#8203;4609](https://togithub.com/pnpm/pnpm/issues/4609).

#### Our Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
<a href="https://bit.dev/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/bit.svg"
width="80"></a>
      </td>
      <td align="center" valign="middle">
<a href="https://prisma.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/prisma.svg"
width="180"></a>
      </td>
      <td align="center" valign="middle">
<a
href="https://leniolabs.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/leniolabs.jpg"
width="80"></a>
      </td>
      <td align="center" valign="middle">
<a href="https://vercel.com/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/vercel.svg"
width="180"></a>
      </td>
      <td align="center" valign="middle">
<a
href="https://www.takeshape.io/?utm_source=pnpm&utm_medium=release_notes"
target="_blank"><img
src="https://raw.githubusercontent.com/pnpm/pnpm.github.io/main/static/img/users/takeshape.svg"
width="280"></a>
      </td>
    </tr>
  </tbody>
</table>

#### What's Changed
* feat!: breaking config changes for v7 by
@&#8203;zkoch[pnpm/pnpm#4253
* feat(pack)!: limit what files are packed as executables by
@&#8203;zkoch[pnpm/pnpm#4266
* feat!: pnpx is an alias of pnpm dlx by
@&#8203;zkoch[pnpm/pnpm#4267
* feat: run scripts without -- by
@&#8203;glux[pnpm/pnpm#4290
* fix: revert backwards compatible handling of -- for run by
@&#8203;glux[pnpm/pnpm#4291
* feat!: global bins should be created only in predefined locations by
@&#8203;zkoch[pnpm/pnpm#4280
* ci: use pnpm v7 by
@&#8203;zkoch[pnpm/pnpm#4307
* feat!: remove -W option by
@&#8203;zkoch[pnpm/pnpm#4308
* test(audit): fix for 2022-02-15 by
@&#8203;glux[pnpm/pnpm#4340
* feat: -F is a short alias of --filter by
@&#8203;zkoch[pnpm/pnpm#4342
* feat: onlyBuiltDependencies by
@&#8203;zkoch[pnpm/pnpm#4014
* fix(make-dedicated-lockfile): don't re-resolve dependency versions in
dedicated lockfile by
@&#8203;David-Colli[pnpm/pnpm#4350
* test(audit): mock responses from audit endpoint by
@&#8203;zkoch[pnpm/pnpm#4354
* fix: bad packageManager field by
@&#8203;Jack-Wor[pnpm/pnpm#4356
* feat: use the versions from overrides when adding deps without specs
by
@&#8203;zkoch[pnpm/pnpm#4355
* chore: document the interface of command packages by
@&#8203;illrig[pnpm/pnpm#3828
* fix: print an info message when NODE_ENV is set to production by
@&#8203;zkoch[pnpm/pnpm#4362
* test: ignore override if a version is specified at install by
@&#8203;nikolad[pnpm/pnpm#4366
* fix: ignore case, when verifying package name in the store by
@&#8203;zkoch[pnpm/pnpm#4368
* fix: peerDependencyRules with * as range by
@&#8203;zkoch[pnpm/pnpm#4370
* feat: run scripts without --unsafe-perm by
@&#8203;zkoch[pnpm/pnpm#4369
* chore(github): add welcome bot app by
@&#8203;BlackHol[pnpm/pnpm#4373
* fix: onlyBuiltDependencies should work by
@&#8203;zkoch[pnpm/pnpm#4377
* fix: pnpm i should work on virtual drives by
@&#8203;kazua[pnpm/pnpm#4386
* fix: throw a meaningful error message on broken lockfile by
@&#8203;zkoch[pnpm/pnpm#4387
* fix: don't write data from the lockfile to the global store by
@&#8203;zkoch[pnpm/pnpm#4395
* fix(resolve-dependencies): a sequence of injected deps via the file
protocol by
@&#8203;zkoch[pnpm/pnpm#4415
* feat: the file protocol should always inject the dependency by
@&#8203;zkoch[pnpm/pnpm#4408
* feat: add own implementation of the init command by
@&#8203;zkoch[pnpm/pnpm#4422
* feat: strict-peer-dependencies is true by default by
@&#8203;zkoch[pnpm/pnpm#4427
* feat: respect the npmrc by
@&#8203;Spencer1[pnpm/pnpm#4425
* feat: a prerelease version is always saved as an exact version by
@&#8203;zkoch[pnpm/pnpm#4435
* feat: prevent deep imports using exports by
@&#8203;zkoch[pnpm/pnpm#4440
* fix: use `@pnpm/graph-sequencer` instead of `graph-sequencer` by
@&#8203;zkoch[pnpm/pnpm#4458
* fix: fetch should allow the same options as install by
@&#8203;zkoch[pnpm/pnpm#4460
* fix: typo by
@&#8203;HomyeeKi[pnpm/pnpm#4462
* fix(lockfile-utils): checking dependenciesMeta by
@&#8203;zkoch[pnpm/pnpm#4463
* fix: types should not be hoisted to the root of node_modules by
@&#8203;zkoch[pnpm/pnpm#4459
* chore: replace deprecated String.prototype.substr() by
@&#8203;CommanderRo[pnpm/pnpm#4479
* Chore/friendly git error by
@&#8203;law[pnpm/pnpm#4488
* fix: handle undefined version spec by
@&#8203;tm[pnpm/pnpm#4487
* lint: remove duplicate code by
@&#8203;mila[pnpm/pnpm#4496
* fix: typo by
@&#8203;HomyeeKi[pnpm/pnpm#4499
* feat: don't resolve peer dependencies from workspace root by
@&#8203;zkoch[pnpm/pnpm#4469
* chore: fix typo by
@&#8203;sudongyu[pnpm/pnpm#4516
* fix: set root by
@&#8203;HomyeeKi[pnpm/pnpm#4515
* fix(cmd-shim): extend NODE_PATH with path to hidden hoisted dir by
@&#8203;zkoch[pnpm/pnpm#4513
* chore: public-hoist-pattern prettier config by
@&#8203;fupen[pnpm/pnpm#3954
* feat: remove deprecated settings by
@&#8203;zkoch[pnpm/pnpm#4519
* feat: the global store location should be inside the pnpm home
directory by
@&#8203;zkoch[pnpm/pnpm#4522
* fix: the file protocol should link all files by default by
@&#8203;zkoch[pnpm/pnpm#4532
* fix: dependenciesMeta should be saved into the lockfile by
@&#8203;zkoch[pnpm/pnpm#4538
* fix: resolve peers from linked in dependencies by
@&#8203;zkoch[pnpm/pnpm#4541
* fix: peer dependency has workspace protocol by
@&#8203;zkoch[pnpm/pnpm#4540
* feat: use a shorter hash for dep path by
@&#8203;zkoch[pnpm/pnpm#4552
* feat(git-fetcher): shallow clone when fetching git resource by
@&#8203;kenrick[pnpm/pnpm#4548
* style(*): remove duplicate declarations in TypeScript types by
@&#8203;dev-itshe[pnpm/pnpm#4570
* docs(*): fix problems with sample code in documentation by
@&#8203;dev-itshe[pnpm/pnpm#4572
* fix(exe): use the strict equality operator, and make `JSON.parse`
execute correctly by
@&#8203;dev-itshe[pnpm/pnpm#4571
* Improve spnpm to use esbuild by
@&#8203;jond[pnpm/pnpm#4574
* style(*): typo by
@&#8203;dev-itshe[pnpm/pnpm#4573
* fix(core): prevent duplication of peerDependencyRules in the lockfile
by
@&#8203;kams[pnpm/pnpm#4576
* fix: store integrity check when the lockfile is updated by
@&#8203;zkoch[pnpm/pnpm#4580
* Fix `add` bug with overlapping workspace packages by
@&#8203;jond[pnpm/pnpm#4575
* fix(exec): commands of workspace project should be in PATH by
@&#8203;zkoch[pnpm/pnpm#4583
* fix(default-reporter): use loglevel to filter deprecation warnings
(#&#8203;4343) by
@&#820[pnpm/pnpm#4507
* fix: an edge case with peer resolutions and circular deps by
@&#8203;zkoch[pnpm/pnpm#4588
* feat: shrink path to the global directory (to reduce chance of too
long names on Windows) by
@&#8203;zkoch[pnpm/pnpm#4591
* fix(filter-workspace-packages): filter not working if the path
contains Korean characters by
@&#8203;WhiteKi[pnpm/pnpm#4595
* chore: Set permissions for GitHub actions by
@&#8203;neilnave[pnpm/pnpm#4607
* fix: only `pnpm install` should fail on peer dep issues by
@&#8203;zkoch[pnpm/pnpm#4596
* feat: add legacy-dir-filtering by
@&#8203;zkoch[pnpm/pnpm#4610
* fix(init): don't fail if a parent dir has a package.json by
@&#8203;zkoch[pnpm/pnpm#4615
* fix: dlx should work without a configured global directory by
@&#8203;zkoch[pnpm/pnpm#4612
* fix(install): exit with an error when no package.json is found by
@&#8203;zkoch[pnpm/pnpm#4614
* fix: a file dep has a file dep by
@&#8203;zkoch[pnpm/pnpm#4618
* fix: publish in workspace by
@&#8203;zkoch[pnpm/pnpm#4627
* fix: don't fail when moving packages to node_modules/.ignored by
@&#8203;zkoch[pnpm/pnpm#4626
* fix: global linking by
@&#8203;zkoch[pnpm/pnpm#4641
* fix(exportable-manifest, types): add typesVersions field to
PUBLISH_CONFIG_WHITELIST by
@&#8203;WhiteKi[pnpm/pnpm#4637

#### New Contributors
* @&#8203;Jack-Works made their first
contributi[pnpm/pnpm#4356
* @&#8203;kazuare made their first
contributi[pnpm/pnpm#4386
* @&#8203;Spencer17x made their first
contributi[pnpm/pnpm#4425
* @&#8203;HomyeeKing made their first
contributi[pnpm/pnpm#4462
* @&#8203;CommanderRoot made their first
contributi[pnpm/pnpm#4479
* @&#8203;lawvs made their first
contributi[pnpm/pnpm#4488
* @&#8203;tmkx made their first
contributi[pnpm/pnpm#4487
* @&#8203;sudongyuer made their first
contributi[pnpm/pnpm#4516
* @&#8203;fupengl made their first
contributi[pnpm/pnpm#3954
* @&#8203;dev-itsheng made their first
contributi[pnpm/pnpm#4570
* @&#8203;jondlm made their first
contributi[pnpm/pnpm#4574
* @&#8203;kamsar made their first
contributi[pnpm/pnpm#4576
* @&#8203;WhiteKiwi made their first
contributi[pnpm/pnpm#4595
* @&#8203;neilnaveen made their first
contributi[pnpm/pnpm#4607

**Full Changelog**:
pnpm/pnpm@v6.31.0...v7.0.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At
any time (no schedule defined).

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

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->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://app.renovatebot.com/dashboard#github/PKUHPC/SCOW).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMDAuMSIsInVwZGF0ZWRJblZlciI6IjM0LjEwMC4xIn0=-->

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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants