Compare commits

..

39 Commits

Author SHA1 Message Date
Vercel Release Bot
3c42649916 Version Packages (#11352)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/build-utils@7.11.0

### Minor Changes

- Add `getOsRelease()` and `getProvidedRuntime()` functions
([#11370](https://github.com/vercel/vercel/pull/11370))

## @vercel/go@3.1.0

### Minor Changes

- Use `provided.al2023` runtime when using AL2023 build image
([#11370](https://github.com/vercel/vercel/pull/11370))

## vercel@33.6.3

### Patch Changes

- Handle `--repo` linked in `vc deploy --prebuilt`
([#11309](https://github.com/vercel/vercel/pull/11309))

- Revert "[cli] extract `isZeroConfigBuild` into utility function
(#11316)" ([#11350](https://github.com/vercel/vercel/pull/11350))

- Replace `inquirer` with `@inquirer/prompts`
([#11321](https://github.com/vercel/vercel/pull/11321))

- Updated dependencies
\[[`73b112b1f`](73b112b1f7),
[`346e665bb`](346e665bb0),
[`73b112b1f`](73b112b1f7),
[`548afd371`](548afd371a)]:
    -   @vercel/go@3.1.0
    -   @vercel/node@3.0.26
    -   @vercel/build-utils@7.11.0
    -   @vercel/static-build@2.4.6

## @vercel/client@13.1.9

### Patch Changes

- Handle `--repo` linked in `vc deploy --prebuilt`
([#11309](https://github.com/vercel/vercel/pull/11309))

- Updated dependencies
\[[`73b112b1f`](73b112b1f7)]:
    -   @vercel/build-utils@7.11.0

## @vercel/gatsby-plugin-vercel-builder@2.0.24

### Patch Changes

- Updated dependencies
\[[`73b112b1f`](73b112b1f7)]:
    -   @vercel/build-utils@7.11.0

## @vercel/node@3.0.26

### Patch Changes

- Fix issue with serverless function on docker
([#11226](https://github.com/vercel/vercel/pull/11226))

- Add import and require ts-node files for TypeScript in `vc dev`
([#11371](https://github.com/vercel/vercel/pull/11371))

- Updated dependencies
\[[`73b112b1f`](73b112b1f7)]:
    -   @vercel/build-utils@7.11.0

## @vercel/static-build@2.4.6

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.24

## @vercel-internals/types@1.0.29

### Patch Changes

- Updated dependencies
\[[`73b112b1f`](73b112b1f7)]:
    -   @vercel/build-utils@7.11.0

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-03 09:35:02 -07:00
Trek Glowacki
c1891f64f4 [tests] add ionic React fixture to dependabot (#11172)
add ionic React fixture to dependabot
2024-04-03 09:59:24 -05:00
Erika Rowland
2fc46c0d47 [cli] Change condition to be clearer positive framing (#11317)
`status` here is guaranteed to either be `'linked'` or `'not_linked'` by this point in the code, switching the double negative to a positive condition makes it clearer.
2024-04-03 04:39:47 +00:00
Nathan Rajlich
73b112b1f7 [build-utils] Add getOsRelease() and getProvidedRuntime() functions (#11370)
Adds two new helper functions that custom runtimes can utilize in order
to determine whether they should use `provided.al2` or `provided.al2023`
Lambda "runtime" value, based on the build environment.

The new `getProvidedRuntime()` helper function is being used in
`@vercel/go`, so that Go endpoints may be used when the `20.x` Node
Version project setting is used.
2024-04-02 20:30:06 -07:00
Nathan Rajlich
548afd371a [node] Add import and require ts-node files for TypeScript in vc dev (#11371)
Fixes the case in `vc dev` where importing a `.ts` file from another `.ts` file was failing in `vc dev` when `type: "module"` is not set in `package.json`.

Supersedes https://github.com/vercel/vercel/pull/11364.
2024-04-03 02:14:15 +00:00
Austin Merrick
d0877c1023 [cli] Replace inquirer with @inquirer/prompts (#11321)
# Overview

Changing to `@inquirer/prompts` meant updating all existing usage of `inquirer.prompt`. This removed a lot of code since the `inquirer.prompt` function was extra verbose.

The user experience shouldn't have changed much besides different styling. `patch-inquirer` is incompatible with `@inquirer/prompts`. ~~We probably don't want to merge this until we have a new solution for styling.~~ The new default styling is preferred over our old styling.

There are lots of changes over many files, so I went back and organized the commit history. It will probably be easier to review this PR by commit.

## Tests

~~I had to change tests in ways that aren't great. Tests had a hard time recognizing output with escape codes in them, so I had to make the expected output more generic.~~ Using `strip-ansi` worked nicely to ignore styling changes in unit and integration tests.

I removed the unit test "should list projects running on an soon-to-be-deprecated Node.js version" because that test doing `jest.useFakeTimers().setSystemTime(new Date('2023-12-08'));` would make the "should remove a project" test fail. Really strange stuff! Couldn't think of a better solution than removing this, so looking for suggestions here.
2024-04-02 07:40:32 +00:00
Trek Glowacki
326fe0f0e6 [tests] Add Preact@10 to static build fixtures dependabot (#11306)
Add Preact@10 to static build fixtures dependabot
2024-04-01 09:31:22 -05:00
Devin345458
346e665bb0 Fix issue with serverless function on docker (#11226)
Currently the server was binding to the IPV6 [::] catchall on a random
port. The undici request is then unable to reach it.

I only have a mac so I was only able to test this change on Docker for
mac. Would love if someone on windows/linux could validate the change
works for them as well

---------

Co-authored-by: Sean Massa <EndangeredMassa@gmail.com>
2024-03-29 23:01:25 -05:00
Nathan Rajlich
9a27ccbe6d [cli][client] Handle --repo linked in vc deploy --prebuilt (#11309)
`vc deploy --prebuilt` has not properly worked for projects linked with
`vc link --repo` ever since
https://github.com/vercel/vercel/issues/11077.

To fix, don't mutate `cwd` to be the project subdir (so that `cwd` is
always the monorepo root), and instead pass in a new property to
`@vercel/client` that represents the `.vercel/output` file path. A lot
of the code is just passing this new variable through the multiple
layers of indirection in CLI before it finally reaches `@vercel/client.

Fixes https://github.com/vercel/vercel/issues/11097.
2024-03-29 17:23:24 -07:00
Erika Rowland
3b6d96891b Update CODEOWNERS (#11343) 2024-03-29 20:57:47 +00:00
Nathan Rajlich
07d8d11989 Revert "[cli] extract isZeroConfigBuild into utility function (#11316)" (#11350)
This reverts commit 78e2c012f9.

This commit causes a failing test which contains the `zeroConfig: true`
field. It should have not been merged in the first place due to the
failing test, but Kodiak erroneously merged it before the tests were
passing.

When there are `builds` configuration, the v10 create-deployment
endpoint is used instead of the latest v13 endpoint. `projectSettings`
is not allowed in the v10 endpoint, therefore we can not send the
`nodeVersion` when `builds` project exists. Instead, we should look into
moving away from the v10 endpoint so that we can be using the latest
version of the endpoint for all deployments.
2024-03-29 13:53:51 -07:00
Erika Rowland
8a16e8eb65 [cli] Add explicit vitest import to unit test for isZeroConfigBuild utility (#11341) 2024-03-28 13:32:46 -05:00
dependabot[bot]
63e9de8932 [framework-fixtures]: Bump the core group in /packages/static-build/test/fixtures/ionic-angular-v7 with 2 updates (#11289)
Bumps the core group in /packages/static-build/test/fixtures/ionic-angular-v7 with 2 updates: [@ionic/angular](https://github.com/ionic-team/ionic-framework) and [@ionic/core](https://github.com/ionic-team/ionic-framework).

Updates `@ionic/angular` from 7.6.2 to 7.8.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/ionic-team/ionic-framework/releases"><code>@​ionic/angular</code>'s releases</a>.</em></p>
<blockquote>
<h2>v7.8.0</h2>
<h1><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.5...v7.8.0">7.8.0</a> (2024-03-13)</h1>
<h3>Features</h3>
<ul>
<li><strong>datetime:</strong> formatOptions property for Datetime (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29065">#29065</a>) (<a href="7cdbc1b5ad">7cdbc1b</a>)</li>
<li><strong>searchbar:</strong> autocapitalize, dir, lang, maxlength, and minlength are inherited to native input (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29098">#29098</a>) (<a href="a0a77f799d">a0a77f7</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/27606">#27606</a></li>
</ul>
<h2>v7.7.5</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.4...v7.7.5">7.7.5</a> (2024-03-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>angular:</strong> add ionNavWillChange and ionNavDidChange types for nav (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29122">#29122</a>) (<a href="85b9d5c35f">85b9d5c</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29114">#29114</a></li>
<li><strong>checkbox:</strong> set aria-checked of indeterminate checkbox to 'mixed' (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29115">#29115</a>) (<a href="b2d636f14d">b2d636f</a>)</li>
<li><strong>overlay:</strong> do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>) (<a href="c0f5e5ebc0">c0f5e5e</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29139">#29139</a></li>
</ul>
<h2>v7.7.4</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.3...v7.7.4">7.7.4</a> (2024-03-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>modal:</strong> ariaLabel and role are inherited when set via htmlAttributes (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29099">#29099</a>) (<a href="de13633a18">de13633</a>)</li>
</ul>
<h2>v7.7.3</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.2...v7.7.3">7.7.3</a> (2024-02-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>label:</strong> do not grow when in end slot (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29036">#29036</a>) (<a href="1fc4b76f59">1fc4b76</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29033">#29033</a></li>
<li><strong>overlays:</strong> focus is returned to last focus element when focusing toast (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28950">#28950</a>) (<a href="2ed0ada923">2ed0ada</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28261">#28261</a></li>
</ul>
<h2>v7.7.2</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.1...v7.7.2">7.7.2</a> (2024-02-14)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>overlays:</strong> do not return focus if application has already moved focus manually (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28850">#28850</a>) (<a href="a016670a8a">a016670</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28849">#28849</a></li>
<li><strong>overlays:</strong> ensure that only topmost overlay is announced by screen readers (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28997">#28997</a>) (<a href="ba4ba6161c">ba4ba61</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/23472">#23472</a></li>
<li><strong>popover:</strong> render arrow above backdrop (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28986">#28986</a>) (<a href="0a8964d30c">0a8964d</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28985">#28985</a></li>
</ul>
<h2>v7.7.1</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.0...v7.7.1">7.7.1</a> (2024-02-07)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/ionic-team/ionic-framework/blob/main/CHANGELOG.md"><code>@​ionic/angular</code>'s changelog</a>.</em></p>
<blockquote>
<h1><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.5...v7.8.0">7.8.0</a> (2024-03-13)</h1>
<h3>Features</h3>
<ul>
<li><strong>datetime:</strong> formatOptions property for Datetime (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29065">#29065</a>) (<a href="7cdbc1b5ad">7cdbc1b</a>)</li>
<li><strong>searchbar:</strong> autocapitalize, dir, lang, maxlength, and minlength are inherited to native input (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29098">#29098</a>) (<a href="a0a77f799d">a0a77f7</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/27606">#27606</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.4...v7.7.5">7.7.5</a> (2024-03-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>angular:</strong> add ionNavWillChange and ionNavDidChange types for nav (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29122">#29122</a>) (<a href="85b9d5c35f">85b9d5c</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29114">#29114</a></li>
<li><strong>checkbox:</strong> set aria-checked of indeterminate checkbox to 'mixed' (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29115">#29115</a>) (<a href="b2d636f14d">b2d636f</a>)</li>
<li><strong>overlay:</strong> do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>) (<a href="c0f5e5ebc0">c0f5e5e</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29139">#29139</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.3...v7.7.4">7.7.4</a> (2024-03-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>modal:</strong> ariaLabel and role are inherited when set via htmlAttributes (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29099">#29099</a>) (<a href="de13633a18">de13633</a>)</li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.2...v7.7.3">7.7.3</a> (2024-02-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>label:</strong> do not grow when in end slot (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29036">#29036</a>) (<a href="1fc4b76f59">1fc4b76</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29033">#29033</a></li>
<li><strong>overlays:</strong> focus is returned to last focus element when focusing toast (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28950">#28950</a>) (<a href="2ed0ada923">2ed0ada</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28261">#28261</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.1...v7.7.2">7.7.2</a> (2024-02-14)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="400013d6cb"><code>400013d</code></a> v7.8.0</li>
<li><a href="6dfdc2c95f"><code>6dfdc2c</code></a> merge feature-7.8 (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29152">#29152</a>)</li>
<li><a href="01ae835ad5"><code>01ae835</code></a> chore: sync with main</li>
<li><a href="636531f5c2"><code>636531f</code></a> merge release-7.7.5 (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29151">#29151</a>)</li>
<li><a href="ddcda78ac9"><code>ddcda78</code></a> chore(): update package lock files</li>
<li><a href="82e90f28b4"><code>82e90f2</code></a> v7.7.5</li>
<li><a href="487ffca11e"><code>487ffca</code></a> chore: fix typo with close watcher const (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29146">#29146</a>)</li>
<li><a href="c0f5e5ebc0"><code>c0f5e5e</code></a> fix(overlay): do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>)</li>
<li><a href="ac0142322a"><code>ac01423</code></a> chore: sync with main (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29142">#29142</a>)</li>
<li><a href="8f0ea0dd58"><code>8f0ea0d</code></a> chore: sync with main</li>
<li>Additional commits viewable in <a href="https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.8.0">compare view</a></li>
</ul>
</details>
<br />

Updates `@ionic/core` from 7.6.2 to 7.8.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/ionic-team/ionic-framework/releases"><code>@​ionic/core</code>'s releases</a>.</em></p>
<blockquote>
<h2>v7.8.0</h2>
<h1><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.5...v7.8.0">7.8.0</a> (2024-03-13)</h1>
<h3>Features</h3>
<ul>
<li><strong>datetime:</strong> formatOptions property for Datetime (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29065">#29065</a>) (<a href="7cdbc1b5ad">7cdbc1b</a>)</li>
<li><strong>searchbar:</strong> autocapitalize, dir, lang, maxlength, and minlength are inherited to native input (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29098">#29098</a>) (<a href="a0a77f799d">a0a77f7</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/27606">#27606</a></li>
</ul>
<h2>v7.7.5</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.4...v7.7.5">7.7.5</a> (2024-03-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>angular:</strong> add ionNavWillChange and ionNavDidChange types for nav (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29122">#29122</a>) (<a href="85b9d5c35f">85b9d5c</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29114">#29114</a></li>
<li><strong>checkbox:</strong> set aria-checked of indeterminate checkbox to 'mixed' (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29115">#29115</a>) (<a href="b2d636f14d">b2d636f</a>)</li>
<li><strong>overlay:</strong> do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>) (<a href="c0f5e5ebc0">c0f5e5e</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29139">#29139</a></li>
</ul>
<h2>v7.7.4</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.3...v7.7.4">7.7.4</a> (2024-03-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>modal:</strong> ariaLabel and role are inherited when set via htmlAttributes (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29099">#29099</a>) (<a href="de13633a18">de13633</a>)</li>
</ul>
<h2>v7.7.3</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.2...v7.7.3">7.7.3</a> (2024-02-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>label:</strong> do not grow when in end slot (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29036">#29036</a>) (<a href="1fc4b76f59">1fc4b76</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29033">#29033</a></li>
<li><strong>overlays:</strong> focus is returned to last focus element when focusing toast (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28950">#28950</a>) (<a href="2ed0ada923">2ed0ada</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28261">#28261</a></li>
</ul>
<h2>v7.7.2</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.1...v7.7.2">7.7.2</a> (2024-02-14)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>overlays:</strong> do not return focus if application has already moved focus manually (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28850">#28850</a>) (<a href="a016670a8a">a016670</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28849">#28849</a></li>
<li><strong>overlays:</strong> ensure that only topmost overlay is announced by screen readers (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28997">#28997</a>) (<a href="ba4ba6161c">ba4ba61</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/23472">#23472</a></li>
<li><strong>popover:</strong> render arrow above backdrop (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28986">#28986</a>) (<a href="0a8964d30c">0a8964d</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28985">#28985</a></li>
</ul>
<h2>v7.7.1</h2>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.0...v7.7.1">7.7.1</a> (2024-02-07)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/ionic-team/ionic-framework/blob/main/CHANGELOG.md"><code>@​ionic/core</code>'s changelog</a>.</em></p>
<blockquote>
<h1><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.5...v7.8.0">7.8.0</a> (2024-03-13)</h1>
<h3>Features</h3>
<ul>
<li><strong>datetime:</strong> formatOptions property for Datetime (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29065">#29065</a>) (<a href="7cdbc1b5ad">7cdbc1b</a>)</li>
<li><strong>searchbar:</strong> autocapitalize, dir, lang, maxlength, and minlength are inherited to native input (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29098">#29098</a>) (<a href="a0a77f799d">a0a77f7</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/27606">#27606</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.4...v7.7.5">7.7.5</a> (2024-03-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>angular:</strong> add ionNavWillChange and ionNavDidChange types for nav (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29122">#29122</a>) (<a href="85b9d5c35f">85b9d5c</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29114">#29114</a></li>
<li><strong>checkbox:</strong> set aria-checked of indeterminate checkbox to 'mixed' (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29115">#29115</a>) (<a href="b2d636f14d">b2d636f</a>)</li>
<li><strong>overlay:</strong> do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>) (<a href="c0f5e5ebc0">c0f5e5e</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29139">#29139</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.3...v7.7.4">7.7.4</a> (2024-03-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>modal:</strong> ariaLabel and role are inherited when set via htmlAttributes (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29099">#29099</a>) (<a href="de13633a18">de13633</a>)</li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.2...v7.7.3">7.7.3</a> (2024-02-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>label:</strong> do not grow when in end slot (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29036">#29036</a>) (<a href="1fc4b76f59">1fc4b76</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29033">#29033</a></li>
<li><strong>overlays:</strong> focus is returned to last focus element when focusing toast (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28950">#28950</a>) (<a href="2ed0ada923">2ed0ada</a>), closes <a href="https://redirect.github.com/ionic-team/ionic-framework/issues/28261">#28261</a></li>
</ul>
<h2><a href="https://github.com/ionic-team/ionic-framework/compare/v7.7.1...v7.7.2">7.7.2</a> (2024-02-14)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="400013d6cb"><code>400013d</code></a> v7.8.0</li>
<li><a href="6dfdc2c95f"><code>6dfdc2c</code></a> merge feature-7.8 (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29152">#29152</a>)</li>
<li><a href="01ae835ad5"><code>01ae835</code></a> chore: sync with main</li>
<li><a href="636531f5c2"><code>636531f</code></a> merge release-7.7.5 (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29151">#29151</a>)</li>
<li><a href="ddcda78ac9"><code>ddcda78</code></a> chore(): update package lock files</li>
<li><a href="82e90f28b4"><code>82e90f2</code></a> v7.7.5</li>
<li><a href="487ffca11e"><code>487ffca</code></a> chore: fix typo with close watcher const (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29146">#29146</a>)</li>
<li><a href="c0f5e5ebc0"><code>c0f5e5e</code></a> fix(overlay): do not hide overlay if toast is presented (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29140">#29140</a>)</li>
<li><a href="ac0142322a"><code>ac01423</code></a> chore: sync with main (<a href="https://redirect.github.com/ionic-team/ionic-framework/issues/29142">#29142</a>)</li>
<li><a href="8f0ea0dd58"><code>8f0ea0d</code></a> chore: sync with main</li>
<li>Additional commits viewable in <a href="https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.8.0">compare view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions


</details>
2024-03-28 15:52:02 +00:00
Vercel Release Bot
c6d588201b Version Packages (#11322)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/build-utils@7.10.0

### Minor Changes

- Allow environment variables to be specified for `EdgeFunction`
([#11029](https://github.com/vercel/vercel/pull/11029))

## vercel@33.6.2

### Patch Changes

- Added sunset warning to secrets command.
([#11333](https://github.com/vercel/vercel/pull/11333))

- Swap jest for vitest in CLI unit tests
([#11302](https://github.com/vercel/vercel/pull/11302))

- Updated dependencies
\[[`988f7b75a`](988f7b75a2),
[`1825b58df`](1825b58df8)]:
    -   @vercel/remix-builder@2.1.5
    -   @vercel/build-utils@7.10.0
    -   @vercel/node@3.0.25
    -   @vercel/static-build@2.4.5

## @vercel/client@13.1.8

### Patch Changes

- Updated dependencies
\[[`1825b58df`](1825b58df8)]:
    -   @vercel/build-utils@7.10.0

## @vercel/frameworks@3.0.1

### Patch Changes

- Swap jest for vitest in CLI unit tests
([#11302](https://github.com/vercel/vercel/pull/11302))

## @vercel/fs-detectors@5.2.2

### Patch Changes

- Updated dependencies
\[[`9ed967034`](9ed967034d)]:
    -   @vercel/frameworks@3.0.1

## @vercel/gatsby-plugin-vercel-builder@2.0.23

### Patch Changes

- Updated dependencies
\[[`1825b58df`](1825b58df8)]:
    -   @vercel/build-utils@7.10.0

## @vercel/node@3.0.25

### Patch Changes

- Updated dependencies
\[[`1825b58df`](1825b58df8)]:
    -   @vercel/build-utils@7.10.0

## @vercel/remix-builder@2.1.5

### Patch Changes

- Add `mjs` and `mts` extensions to vite detection
([#11307](https://github.com/vercel/vercel/pull/11307))

## @vercel/static-build@2.4.5

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.23

## @vercel-internals/types@1.0.28

### Patch Changes

- Updated dependencies
\[[`1825b58df`](1825b58df8)]:
    -   @vercel/build-utils@7.10.0

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-28 08:43:15 -05:00
Ethan Arrowood
0b1ff4bf62 [next] add x-forwarded-port test (#11254)
This test reproduces the issue described in https://github.com/vercel/next.js/issues/61133 . Unfortunately, I can only reproduce this issue when deploying to Vercel. Any local server / test results in the header being defined. 

Related: https://github.com/vercel/next.js/issues/61133
2024-03-28 08:20:18 +00:00
dependabot[bot]
14102ddf56 [framework-fixtures]: Bump the core group in /packages/static-build/test/fixtures/astro-v4 with 1 update (#11335)
Bumps the core group in /packages/static-build/test/fixtures/astro-v4 with 1 update: [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro).

Updates `astro` from 4.2.0 to 4.5.10
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/withastro/astro/releases">astro's releases</a>.</em></p>
<blockquote>
<h2>astro@4.5.10</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10549">#10549</a> <a href="54c2f9707f"><code>54c2f9707f5d038630143f769e3075c698474654</code></a> Thanks <a href="https://github.com/admirsaheta"><code>@​admirsaheta</code></a>! - Updates the <code>HTMLAttributes</code> type exported from <code>astro</code> to allow data attributes</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10562">#10562</a> <a href="348c1ca132"><code>348c1ca1323d0516c2dcf8e963343cd12cb5407f</code></a> Thanks <a href="https://github.com/apetta"><code>@​apetta</code></a>! - Fixes minor type issues inside the built-in components of Astro</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10550">#10550</a> <a href="34fa8e131b"><code>34fa8e131b85531e6629390307108ffc4adb7ed1</code></a> Thanks <a href="https://github.com/Skn0tt"><code>@​Skn0tt</code></a>! - Fixes bug where server builds would include unneeded assets in SSR Function, potentially leading to upload errors on Vercel, Netlify because of size limits</p>
</li>
<li>
<p>Updated dependencies [<a href="c585528f44"><code>c585528f446ccca3d4c643f4af5d550b93c18902</code></a>]:</p>
<ul>
<li><code>@​astrojs/markdown-remark</code><a href="https://github.com/4"><code>@​4</code></a>.3.2</li>
</ul>
</li>
</ul>
<h2>astro@4.5.9</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10532">#10532</a> <a href="8306ce1ff7"><code>8306ce1ff7b71a2a0d7908336c9be462a54d395a</code></a> Thanks <a href="https://github.com/martrapp"><code>@​martrapp</code></a>! - Fixes a style issue of <code>client:only</code> components in DEV mode during view transitions.</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10473">#10473</a> <a href="627e47d67a"><code>627e47d67af4846cea2acf26a96b4124001b26fc</code></a> Thanks <a href="https://github.com/bluwy"><code>@​bluwy</code></a>! - Fixes and improves performance when rendering Astro JSX</p>
</li>
</ul>
<h2>astro@4.5.8</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10504">#10504</a> <a href="8e4e554cc2"><code>8e4e554cc211e59c329c0a5d110c839c886ff120</code></a> Thanks <a href="https://github.com/Princesseuh"><code>@​Princesseuh</code></a>! - Update Babel version to fix regression in Babel's <code>7.24.2</code>.</p>
</li>
<li>
<p>Updated dependencies [<a href="19e42c3681"><code>19e42c368184013fc30d1e46753b9e9383bb2bdf</code></a>]:</p>
<ul>
<li><code>@​astrojs/markdown-remark</code><a href="https://github.com/4"><code>@​4</code></a>.3.1</li>
</ul>
</li>
</ul>
<h2>astro@4.5.7</h2>
<h3>Patch Changes</h3>
<ul>
<li><a href="https://redirect.github.com/withastro/astro/pull/10493">#10493</a> <a href="e4a6462751"><code>e4a6462751725878bfe47632eeafa6854cad5bf2</code></a> Thanks <a href="https://github.com/firefoxic"><code>@​firefoxic</code></a>! - <code>&lt;link&gt;</code> tags created by astro for optimized stylesheets now do not include the closing forward slash. This slash is optional for void elements such as link, but made some html validation fail.</li>
</ul>
<h2>astro@4.5.6</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10455">#10455</a> <a href="c12666166d"><code>c12666166db724915e42e37a048483c99f88e6d9</code></a> Thanks <a href="https://github.com/lilnasy"><code>@​lilnasy</code></a>! - Adds a helpful error message that will be shown when an endpoint does not return a <code>Response</code>.</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10426">#10426</a> <a href="6a9a35ee15"><code>6a9a35ee15069541c3144012385366a3c689240a</code></a> Thanks <a href="https://github.com/markgaze"><code>@​markgaze</code></a>! - Fixes an issue with generating JSON schemas when the schema is a function</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10448">#10448</a> <a href="fcece36586"><code>fcece3658697248ab58f77b3d4a8b14d362f3c47</code></a> Thanks <a href="https://github.com/lilnasy"><code>@​lilnasy</code></a>! - Fixes an issue where multiple rendering errors resulted in a crash of the SSR app server.</p>
</li>
</ul>
<h2>astro@4.5.5</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10379">#10379</a> <a href="3776ecf0aa"><code>3776ecf0aa9e08a992d3ae76e90682fd04093721</code></a> Thanks <a href="https://github.com/1574242600"><code>@​1574242600</code></a>! - Fixes a routing issue with partially truncated dynamic segments.</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10442">#10442</a> <a href="f8e0ad3c52"><code>f8e0ad3c52a37b8a2175fe2f5ff2bd0cd738f499</code></a> Thanks <a href="https://github.com/Princesseuh"><code>@​Princesseuh</code></a>! - Fixes small rendering issues with the dev toolbar in certain contexts</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10438">#10438</a> <a href="5b48cc0fc8"><code>5b48cc0fc8383b0659a595afd3a6ee28b28779c3</code></a> Thanks <a href="https://github.com/bholmesdev"><code>@​bholmesdev</code></a>! - Generate Astro DB types when running <code>astro sync</code>.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md">astro's changelog</a>.</em></p>
<blockquote>
<h2>4.5.10</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10549">#10549</a> <a href="54c2f9707f"><code>54c2f9707f5d038630143f769e3075c698474654</code></a> Thanks <a href="https://github.com/admirsaheta"><code>@​admirsaheta</code></a>! - Updates the <code>HTMLAttributes</code> type exported from <code>astro</code> to allow data attributes</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10562">#10562</a> <a href="348c1ca132"><code>348c1ca1323d0516c2dcf8e963343cd12cb5407f</code></a> Thanks <a href="https://github.com/apetta"><code>@​apetta</code></a>! - Fixes minor type issues inside the built-in components of Astro</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10550">#10550</a> <a href="34fa8e131b"><code>34fa8e131b85531e6629390307108ffc4adb7ed1</code></a> Thanks <a href="https://github.com/Skn0tt"><code>@​Skn0tt</code></a>! - Fixes bug where server builds would include unneeded assets in SSR Function, potentially leading to upload errors on Vercel, Netlify because of size limits</p>
</li>
<li>
<p>Updated dependencies [<a href="c585528f44"><code>c585528f446ccca3d4c643f4af5d550b93c18902</code></a>]:</p>
<ul>
<li><code>@​astrojs/markdown-remark</code><a href="https://github.com/4"><code>@​4</code></a>.3.2</li>
</ul>
</li>
</ul>
<h2>4.5.9</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10532">#10532</a> <a href="8306ce1ff7"><code>8306ce1ff7b71a2a0d7908336c9be462a54d395a</code></a> Thanks <a href="https://github.com/martrapp"><code>@​martrapp</code></a>! - Fixes a style issue of <code>client:only</code> components in DEV mode during view transitions.</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10473">#10473</a> <a href="627e47d67a"><code>627e47d67af4846cea2acf26a96b4124001b26fc</code></a> Thanks <a href="https://github.com/bluwy"><code>@​bluwy</code></a>! - Fixes and improves performance when rendering Astro JSX</p>
</li>
</ul>
<h2>4.5.8</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10504">#10504</a> <a href="8e4e554cc2"><code>8e4e554cc211e59c329c0a5d110c839c886ff120</code></a> Thanks <a href="https://github.com/Princesseuh"><code>@​Princesseuh</code></a>! - Update Babel version to fix regression in Babel's <code>7.24.2</code>.</p>
</li>
<li>
<p>Updated dependencies [<a href="19e42c3681"><code>19e42c368184013fc30d1e46753b9e9383bb2bdf</code></a>]:</p>
<ul>
<li><code>@​astrojs/markdown-remark</code><a href="https://github.com/4"><code>@​4</code></a>.3.1</li>
</ul>
</li>
</ul>
<h2>4.5.7</h2>
<h3>Patch Changes</h3>
<ul>
<li><a href="https://redirect.github.com/withastro/astro/pull/10493">#10493</a> <a href="e4a6462751"><code>e4a6462751725878bfe47632eeafa6854cad5bf2</code></a> Thanks <a href="https://github.com/firefoxic"><code>@​firefoxic</code></a>! - <code>&lt;link&gt;</code> tags created by astro for optimized stylesheets now do not include the closing forward slash. This slash is optional for void elements such as link, but made some html validation fail.</li>
</ul>
<h2>4.5.6</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10455">#10455</a> <a href="c12666166d"><code>c12666166db724915e42e37a048483c99f88e6d9</code></a> Thanks <a href="https://github.com/lilnasy"><code>@​lilnasy</code></a>! - Adds a helpful error message that will be shown when an endpoint does not return a <code>Response</code>.</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10426">#10426</a> <a href="6a9a35ee15"><code>6a9a35ee15069541c3144012385366a3c689240a</code></a> Thanks <a href="https://github.com/markgaze"><code>@​markgaze</code></a>! - Fixes an issue with generating JSON schemas when the schema is a function</p>
</li>
<li>
<p><a href="https://redirect.github.com/withastro/astro/pull/10448">#10448</a> <a href="fcece36586"><code>fcece3658697248ab58f77b3d4a8b14d362f3c47</code></a> Thanks <a href="https://github.com/lilnasy"><code>@​lilnasy</code></a>! - Fixes an issue where multiple rendering errors resulted in a crash of the SSR app server.</p>
</li>
</ul>
<h2>4.5.5</h2>
<h3>Patch Changes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="bb7707e171"><code>bb7707e</code></a> [ci] release (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10556">#10556</a>)</li>
<li><a href="348c1ca132"><code>348c1ca</code></a> Patch for Astro VS Code Plugin type errors (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10562">#10562</a>)</li>
<li><a href="51a4ea5f72"><code>51a4ea5</code></a> fix(types): Fixes HTMLAttribute extend to allow everything (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10561">#10561</a>)</li>
<li><a href="34fa8e131b"><code>34fa8e1</code></a> fix: ensure outDir doesn't lead to bundlers bloating Lambda size (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10550">#10550</a>)</li>
<li><a href="54c2f9707f"><code>54c2f97</code></a> Fix: Type error on <code>\&lt;Image /&gt;</code> component when strict TypeScript rules are use...</li>
<li><a href="1cd2a74022"><code>1cd2a74</code></a> [ci] release (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10522">#10522</a>)</li>
<li><a href="8306ce1ff7"><code>8306ce1</code></a> Fixes a style issue of <code>client:only</code> components in DEV mode during view trans...</li>
<li><a href="8cac744746"><code>8cac744</code></a> Avoid generators in render head API (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10528">#10528</a>)</li>
<li><a href="ca5455af3d"><code>ca5455a</code></a> Avoid generators when crawling module graph (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10529">#10529</a>)</li>
<li><a href="627e47d67a"><code>627e47d</code></a> Improve Astro JSX rendering (<a href="https://github.com/withastro/astro/tree/HEAD/packages/astro/issues/10473">#10473</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/withastro/astro/commits/astro@4.5.10/packages/astro">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astro&package-manager=npm_and_yarn&previous-version=4.2.0&new-version=4.5.10)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions


</details>
2024-03-28 08:17:04 +00:00
Marc Greenstock
49f88975b9 IAM 1720 Added sunset warning to the secrets command (#11333)
This PR adds a warning to the secrets command that the command will be sunset on 1st May.
2024-03-28 08:13:50 +00:00
Vercel Release Bot
13f3db06a8 [tests] Upgrade Turbo to version 1.13.0 (#11325)
This auto-generated PR updates Turbo to version 1.13.0
2024-03-28 08:10:25 +00:00
Erika Rowland
78e2c012f9 [cli] extract isZeroConfigBuild into utility function (#11316)
An additional check was added to make sure that `projectSettings.nodeVersion` is sent when builds property is defined in `vercel.json`
2024-03-28 08:06:10 +00:00
kaifulee
f707f13821 chore: remove repetitive words (#11284) 2024-03-28 08:03:01 +00:00
Jeff See
9ed967034d [cli] Switch unit tests from jest to vitest (#11302) 2024-03-27 17:33:27 -07:00
Nathan Rajlich
1825b58df8 [build-utils] Allow environment variables to be specified for EdgeFunction (#11029) 2024-03-27 21:36:29 +00:00
Nathan Rajlich
c82a55c460 [tests] Use AL2 build container for relevant e2e tests (#11329)
* Forces the AL2 build container image for fixtures that depend on it,
via `engines.node` in package.json for most cases.
* The `testDeployment()` function was updated to send
`projectSettings.nodeVersion` in the POST body, to mimic the behavior in
CLI.
* For Go, Ruby, and Python tests, the `projectSettings.nodeVersion`
property is set "globally" in the Jest setup file, so that individual
fixtures didn't need to be adjusted.
2024-03-27 12:19:30 -07:00
Trek Glowacki
6487d091df [tests] add stencil@4 fixtures to dependabot (#11167)
add stencil@4 fixtures to dependabot
2024-03-25 20:57:38 +00:00
Felix Haus
705453202e [examples] Enforce node18 on Python and Ruby examples (#11319)
We have to enforce the node version on some examples to make sure they
are not auto upgraded in the future before we support their runtime.

See https://vercel.com/docs/deployments/build-image
2024-03-25 11:15:35 +01:00
Fatih Altinok
988f7b75a2 [remix] Add mjs and mts extensions to vite detection (#11307)
My project was being incorrectly detected as not vite, thus it was failing in runtime. My vite config is `vite.config.mts` so this PR fixes detection logic to include `mjs` and `mts` extensions.

The fix can be generalized if needed.
2024-03-22 21:07:13 +00:00
Vercel Release Bot
7a28972897 [examples][tests] Upgrade Next.js to version 14.1.4 (#11304)
This auto-generated PR updates 7 packages to Next.js version 14.1.4
2024-03-20 13:59:44 -04:00
Jeff See
3a05469454 Update CODEOWNERS (#11295) 2024-03-19 22:07:29 +00:00
Trek Glowacki
f1c67d05e3 [tests] Add dependabot for Nuxt (#11291)
Add dependabot for Nuxt
2024-03-18 12:28:59 -05:00
Austin Merrick
6f46b1fc70 [cli][tests] Fix getUpdateCommand for local dev (#11276)
This unit test fails on my machine:
```
Expected: "pnpm i vercel@latest"
Received: "pnpm i -g vercel@latest"
```

This change allows the test to succeed on machines that need the `-g` flag.
2024-03-16 00:31:26 +00:00
Trek Glowacki
34e961e1c6 [tests] Add ionic-angular@7 fixtures to dependabot (#11171)
Add ionic-angular@7 fixtures to dependabot
2024-03-15 23:54:05 +00:00
Nathan Rajlich
75346d45cc [remix] Add SPA mode e2e tests (#11257)
Adds a couple e2e tests for [Remix SPA](https://remix.run/docs/en/main/future/spa-mode) mode (both with and without using the Vercel Preset).
2024-03-15 23:47:17 +00:00
Karl Pablo
f9b4fae51b Updated port number of localhost in README.md (#11287)
With Remix's migration to Vite as its bundler, the default localhost port has changed from 3000 to 5173.
2024-03-15 19:05:54 +00:00
Vercel Release Bot
8619992def Version Packages (#11275)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/build-utils@7.9.1

### Patch Changes

- Export `getSupportedNodeVersion`
([#11277](https://github.com/vercel/vercel/pull/11277))

## vercel@33.6.1

### Patch Changes

- Don't send `projectSettings.nodeVersion` for unsupported versions
([#11277](https://github.com/vercel/vercel/pull/11277))

- Updated dependencies
\[[`4bca0c6d0`](4bca0c6d0b),
[`a67ad4b5a`](a67ad4b5a1),
[`11218a179`](11218a1798),
[`64b97bf4b`](64b97bf4b5)]:
    -   @vercel/next@4.1.6
    -   @vercel/remix-builder@2.1.4
    -   @vercel/build-utils@7.9.1
    -   @vercel/static-build@2.4.4
    -   @vercel/node@3.0.24

## @vercel/client@13.1.7

### Patch Changes

- Updated dependencies
\[[`11218a179`](11218a1798)]:
    -   @vercel/build-utils@7.9.1

## @vercel/gatsby-plugin-vercel-builder@2.0.22

### Patch Changes

- Updated dependencies
\[[`11218a179`](11218a1798)]:
    -   @vercel/build-utils@7.9.1

## @vercel/next@4.1.6

### Patch Changes

- Ensure that static PPR pages have static streaming lambda paths.
([#11259](https://github.com/vercel/vercel/pull/11259))

## @vercel/node@3.0.24

### Patch Changes

- Updated dependencies
\[[`11218a179`](11218a1798)]:
    -   @vercel/build-utils@7.9.1

## @vercel/remix-builder@2.1.4

### Patch Changes

- Disable `prepareCache()` npm install for Remix + Vite
([#11281](https://github.com/vercel/vercel/pull/11281))

## @vercel/static-build@2.4.4

### Patch Changes

- [framework-fixtures]&#x3A; Bump the core group in
/packages/static-build/test/fixtures/angular-v17 with 15 updates
([#11274](https://github.com/vercel/vercel/pull/11274))

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.22

## @vercel-internals/types@1.0.27

### Patch Changes

- Updated dependencies
\[[`11218a179`](11218a1798)]:
    -   @vercel/build-utils@7.9.1

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-15 10:21:07 -05:00
Nathan Rajlich
a67ad4b5a1 [remix] Disable prepareCache() npm install for Remix + Vite (#11281)
In legacy Remix apps, we were running `npm install` once again before globbing the `node_modules` dir due to the injecting of the forked Remix compiler which would cause a cache miss without that happening.

For Vite, we are no longer mucking about `node_modules` at build-time, so there is no need to run `npm install` in the `prepareCache()` function.

There is also no "cacheDirectory" setting so the globbing of the legacy cache directory is also moved into the legacy-only logic.

**tl;dr** For Remix + Vite apps, the only thing that needs to be cached is `node_modules`.
2024-03-15 03:08:16 +00:00
Erika Rowland
11218a1798 [cli] Don't send projectSettings.nodeVersion for unsupported versions (#11277)
Previously, we used `semver` which correctly identified the nodeVersion used in `package.json`, but failed in two cases:

1. If the specified `engines` range started too low, it wouldn't correctly identify a later version compatible with Vercel. (`">10"` was detecting as Node `"10.x"` not `"20.x"`)
2. If the specified `engines` version was fixed too low to be compatible with Vercel, we sent it, and then Vercel predictably errored. (`"10"` was detecting as Node `"10.x"` which would lead to an error in the build process)

Now, case 1 should properly use the latest node version. And case 2 will not send a node version override to the API and will print a warning to the user on the CLI, but the deployment will still proceed with the version specified for the project in the web interface.

We chose to keep the error message shown to the user consistent with what shows in the logs for the build container, that is:
> WARN! Node.js Version "10.x" is discontinued and must be upgraded. Please set "engines": { "node": "20.x" } in your `package.json` file to use Node.js 20.
2024-03-14 21:34:51 +00:00
dependabot[bot]
64b97bf4b5 [framework-fixtures]: Bump the core group in /packages/static-build/test/fixtures/angular-v17 with 15 updates (#11274)
Bumps the core group in /packages/static-build/test/fixtures/angular-v17 with 15 updates:

| Package | From | To |
| --- | --- | --- |
| [@angular/animations](https://github.com/angular/angular/tree/HEAD/packages/animations) | `17.2.1` | `17.3.0` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `17.2.1` | `17.3.0` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `17.2.1` | `17.3.0` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `17.2.1` | `17.3.0` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `17.2.1` | `17.3.0` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `17.2.1` | `17.3.0` |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) | `17.2.1` | `17.3.0` |
| [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `17.2.1` | `17.3.0` |
| [@angular-devkit/build-angular](https://github.com/angular/angular-cli) | `17.2.0` | `17.3.0` |
| [@angular/cli](https://github.com/angular/angular-cli) | `17.2.0` | `17.3.0` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `17.2.1` | `17.3.0` |
| [@angular-devkit/architect](https://github.com/angular/angular-cli) | `0.1702.0` | `0.1703.0` |
| [@angular-devkit/build-webpack](https://github.com/angular/angular-cli) | `0.1702.0` | `0.1703.0` |
| [@angular-devkit/core](https://github.com/angular/angular-cli) | `17.2.0` | `17.3.0` |
| [@angular-devkit/schematics](https://github.com/angular/angular-cli) | `17.2.0` | `17.3.0` |

Updates `@angular/animations` from 17.2.1 to 17.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/releases"><code>@​angular/animations</code>'s releases</a>.</em></p>
<blockquote>
<h2>v17.3.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2"><img src="https://img.shields.io/badge/1a6beae8a2-feat-blue" alt="feat - 1a6beae8a2" /></a></td>
<td>Enable template pipeline by default. (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d"><img src="https://img.shields.io/badge/f386a04c9d-fix-green" alt="fix - f386a04c9d" /></a></td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e"><img src="https://img.shields.io/badge/1f129f114e-fix-green" alt="fix - 1f129f114e" /></a></td>
<td>not catching for loop empty tracking expressions (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e"><img src="https://img.shields.io/badge/12dc4d074e-fix-green" alt="fix - 12dc4d074e" /></a></td>
<td>account for as expression in docs extraction (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0"><img src="https://img.shields.io/badge/da7fbb40f0-fix-green" alt="fix - da7fbb40f0" /></a></td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699"><img src="https://img.shields.io/badge/492e03f699-fix-green" alt="fix - 492e03f699" /></a></td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2"><img src="https://img.shields.io/badge/331b16efd2-feat-blue" alt="feat - 331b16efd2" /></a></td>
<td>add API to inject attributes on the host node (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a"><img src="https://img.shields.io/badge/fb540e169a-feat-blue" alt="feat - fb540e169a" /></a></td>
<td>add migration for invalid two-way bindings (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453"><img src="https://img.shields.io/badge/c687b8f453-feat-blue" alt="feat - c687b8f453" /></a></td>
<td>expose new <code>output()</code> API (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21"><img src="https://img.shields.io/badge/c809069f21-feat-blue" alt="feat - c809069f21" /></a></td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4"><img src="https://img.shields.io/badge/aff65fd1f4-feat-blue" alt="feat - aff65fd1f4" /></a></td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c"><img src="https://img.shields.io/badge/974958913c-feat-blue" alt="feat - 974958913c" /></a></td>
<td>support TypeScript 5.4 (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d"><img src="https://img.shields.io/badge/39a50f9a8d-fix-green" alt="fix - 39a50f9a8d" /></a></td>
<td>ensure all initializer functions run in an injection context (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624"><img src="https://img.shields.io/badge/243ccce624-fix-green" alt="fix - 243ccce624" /></a></td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d"><img src="https://img.shields.io/badge/2909e9817d-fix-green" alt="fix - 2909e9817d" /></a></td>
<td>prevent infinite loops in clobbered elements check (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf"><img src="https://img.shields.io/badge/7243c704cf-fix-green" alt="fix - 7243c704cf" /></a></td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38"><img src="https://img.shields.io/badge/bb35414a38-perf-orange" alt="perf - bb35414a38" /></a></td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c"><img src="https://img.shields.io/badge/8d37ed035c-fix-green" alt="fix - 8d37ed035c" /></a></td>
<td>exclude caching for authenticated HTTP requests (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02"><img src="https://img.shields.io/badge/c1c7384e02-feat-blue" alt="feat - c1c7384e02" /></a></td>
<td>Add reusable types for router guards (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311"><img src="https://img.shields.io/badge/7225485311-fix-green" alt="fix - 7225485311" /></a></td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<h2>v17.3.0-rc.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0-rc.0 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="ae7dbe42de"><img src="https://img.shields.io/badge/ae7dbe42de-fix-green" alt="fix - ae7dbe42de" /></a></td>
<td>unwrap expressions with type parameters in query read property (<a href="https://github.com/angular/angular/tree/HEAD/packages/animations/issues/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<p>| Commit | Description |</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md"><code>@​angular/animations</code>'s changelog</a>.</em></p>
<blockquote>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2">1a6beae8a2</a></td>
<td>feat</td>
<td>Enable template pipeline by default. (<a href="https://redirect.github.com/angular/angular/pull/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d">f386a04c9d</a></td>
<td>fix</td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e">1f129f114e</a></td>
<td>fix</td>
<td>not catching for loop empty tracking expressions (<a href="https://redirect.github.com/angular/angular/pull/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e">12dc4d074e</a></td>
<td>fix</td>
<td>account for as expression in docs extraction (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0">da7fbb40f0</a></td>
<td>fix</td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://redirect.github.com/angular/angular/pull/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699">492e03f699</a></td>
<td>fix</td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1">5afa4f0ec1</a></td>
<td>fix</td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2">331b16efd2</a></td>
<td>feat</td>
<td>add API to inject attributes on the host node (<a href="https://redirect.github.com/angular/angular/pull/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a">fb540e169a</a></td>
<td>feat</td>
<td>add migration for invalid two-way bindings (<a href="https://redirect.github.com/angular/angular/pull/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453">c687b8f453</a></td>
<td>feat</td>
<td>expose new <code>output()</code> API (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21">c809069f21</a></td>
<td>feat</td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4">aff65fd1f4</a></td>
<td>feat</td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c">974958913c</a></td>
<td>feat</td>
<td>support TypeScript 5.4 (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d">39a50f9a8d</a></td>
<td>fix</td>
<td>ensure all initializer functions run in an injection context (<a href="https://redirect.github.com/angular/angular/pull/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624">243ccce624</a></td>
<td>fix</td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://redirect.github.com/angular/angular/pull/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d">2909e9817d</a></td>
<td>fix</td>
<td>prevent infinite loops in clobbered elements check (<a href="https://redirect.github.com/angular/angular/pull/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf">7243c704cf</a></td>
<td>fix</td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://redirect.github.com/angular/angular/pull/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38">bb35414a38</a></td>
<td>perf</td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://redirect.github.com/angular/angular/pull/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c">8d37ed035c</a></td>
<td>fix</td>
<td>exclude caching for authenticated HTTP requests (<a href="https://redirect.github.com/angular/angular/pull/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02">c1c7384e02</a></td>
<td>feat</td>
<td>Add reusable types for router guards (<a href="https://redirect.github.com/angular/angular/pull/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311">7225485311</a></td>
<td>fix</td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://redirect.github.com/angular/angular/pull/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.2.4 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="917b9bdd2e">917b9bdd2e</a></td>
<td>fix</td>
<td>unwrap expressions with type parameters in query read property (<a href="https://redirect.github.com/angular/angular/pull/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="586cc24a10">586cc24a10</a></td>
<td>fix</td>
<td>apply TestBed provider overrides to <code>@defer</code> dependencies (<a href="https://redirect.github.com/angular/angular/pull/54667">#54667</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/angular/angular/commits/17.3.0/packages/animations">compare view</a></li>
</ul>
</details>
<br />

Updates `@angular/common` from 17.2.1 to 17.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/releases"><code>@​angular/common</code>'s releases</a>.</em></p>
<blockquote>
<h2>v17.3.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2"><img src="https://img.shields.io/badge/1a6beae8a2-feat-blue" alt="feat - 1a6beae8a2" /></a></td>
<td>Enable template pipeline by default. (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d"><img src="https://img.shields.io/badge/f386a04c9d-fix-green" alt="fix - f386a04c9d" /></a></td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e"><img src="https://img.shields.io/badge/1f129f114e-fix-green" alt="fix - 1f129f114e" /></a></td>
<td>not catching for loop empty tracking expressions (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e"><img src="https://img.shields.io/badge/12dc4d074e-fix-green" alt="fix - 12dc4d074e" /></a></td>
<td>account for as expression in docs extraction (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0"><img src="https://img.shields.io/badge/da7fbb40f0-fix-green" alt="fix - da7fbb40f0" /></a></td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699"><img src="https://img.shields.io/badge/492e03f699-fix-green" alt="fix - 492e03f699" /></a></td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2"><img src="https://img.shields.io/badge/331b16efd2-feat-blue" alt="feat - 331b16efd2" /></a></td>
<td>add API to inject attributes on the host node (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a"><img src="https://img.shields.io/badge/fb540e169a-feat-blue" alt="feat - fb540e169a" /></a></td>
<td>add migration for invalid two-way bindings (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453"><img src="https://img.shields.io/badge/c687b8f453-feat-blue" alt="feat - c687b8f453" /></a></td>
<td>expose new <code>output()</code> API (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21"><img src="https://img.shields.io/badge/c809069f21-feat-blue" alt="feat - c809069f21" /></a></td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4"><img src="https://img.shields.io/badge/aff65fd1f4-feat-blue" alt="feat - aff65fd1f4" /></a></td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c"><img src="https://img.shields.io/badge/974958913c-feat-blue" alt="feat - 974958913c" /></a></td>
<td>support TypeScript 5.4 (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d"><img src="https://img.shields.io/badge/39a50f9a8d-fix-green" alt="fix - 39a50f9a8d" /></a></td>
<td>ensure all initializer functions run in an injection context (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624"><img src="https://img.shields.io/badge/243ccce624-fix-green" alt="fix - 243ccce624" /></a></td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d"><img src="https://img.shields.io/badge/2909e9817d-fix-green" alt="fix - 2909e9817d" /></a></td>
<td>prevent infinite loops in clobbered elements check (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf"><img src="https://img.shields.io/badge/7243c704cf-fix-green" alt="fix - 7243c704cf" /></a></td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38"><img src="https://img.shields.io/badge/bb35414a38-perf-orange" alt="perf - bb35414a38" /></a></td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c"><img src="https://img.shields.io/badge/8d37ed035c-fix-green" alt="fix - 8d37ed035c" /></a></td>
<td>exclude caching for authenticated HTTP requests (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02"><img src="https://img.shields.io/badge/c1c7384e02-feat-blue" alt="feat - c1c7384e02" /></a></td>
<td>Add reusable types for router guards (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311"><img src="https://img.shields.io/badge/7225485311-fix-green" alt="fix - 7225485311" /></a></td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<h2>v17.3.0-rc.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0-rc.0 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="ae7dbe42de"><img src="https://img.shields.io/badge/ae7dbe42de-fix-green" alt="fix - ae7dbe42de" /></a></td>
<td>unwrap expressions with type parameters in query read property (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<p>| Commit | Description |</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md"><code>@​angular/common</code>'s changelog</a>.</em></p>
<blockquote>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2">1a6beae8a2</a></td>
<td>feat</td>
<td>Enable template pipeline by default. (<a href="https://redirect.github.com/angular/angular/pull/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d">f386a04c9d</a></td>
<td>fix</td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e">1f129f114e</a></td>
<td>fix</td>
<td>not catching for loop empty tracking expressions (<a href="https://redirect.github.com/angular/angular/pull/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e">12dc4d074e</a></td>
<td>fix</td>
<td>account for as expression in docs extraction (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0">da7fbb40f0</a></td>
<td>fix</td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://redirect.github.com/angular/angular/pull/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699">492e03f699</a></td>
<td>fix</td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1">5afa4f0ec1</a></td>
<td>fix</td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2">331b16efd2</a></td>
<td>feat</td>
<td>add API to inject attributes on the host node (<a href="https://redirect.github.com/angular/angular/pull/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a">fb540e169a</a></td>
<td>feat</td>
<td>add migration for invalid two-way bindings (<a href="https://redirect.github.com/angular/angular/pull/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453">c687b8f453</a></td>
<td>feat</td>
<td>expose new <code>output()</code> API (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21">c809069f21</a></td>
<td>feat</td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4">aff65fd1f4</a></td>
<td>feat</td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c">974958913c</a></td>
<td>feat</td>
<td>support TypeScript 5.4 (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d">39a50f9a8d</a></td>
<td>fix</td>
<td>ensure all initializer functions run in an injection context (<a href="https://redirect.github.com/angular/angular/pull/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624">243ccce624</a></td>
<td>fix</td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://redirect.github.com/angular/angular/pull/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d">2909e9817d</a></td>
<td>fix</td>
<td>prevent infinite loops in clobbered elements check (<a href="https://redirect.github.com/angular/angular/pull/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf">7243c704cf</a></td>
<td>fix</td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://redirect.github.com/angular/angular/pull/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38">bb35414a38</a></td>
<td>perf</td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://redirect.github.com/angular/angular/pull/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c">8d37ed035c</a></td>
<td>fix</td>
<td>exclude caching for authenticated HTTP requests (<a href="https://redirect.github.com/angular/angular/pull/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02">c1c7384e02</a></td>
<td>feat</td>
<td>Add reusable types for router guards (<a href="https://redirect.github.com/angular/angular/pull/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311">7225485311</a></td>
<td>fix</td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://redirect.github.com/angular/angular/pull/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.2.4 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="917b9bdd2e">917b9bdd2e</a></td>
<td>fix</td>
<td>unwrap expressions with type parameters in query read property (<a href="https://redirect.github.com/angular/angular/pull/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="586cc24a10">586cc24a10</a></td>
<td>fix</td>
<td>apply TestBed provider overrides to <code>@defer</code> dependencies (<a href="https://redirect.github.com/angular/angular/pull/54667">#54667</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="8d37ed035c"><code>8d37ed0</code></a> fix(http): exclude caching for authenticated HTTP requests (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54746">#54746</a>)</li>
<li><a href="974958913c"><code>9749589</code></a> feat(core): support TypeScript 5.4 (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54414">#54414</a>)</li>
<li><a href="707bfc9b32"><code>707bfc9</code></a> perf(common): <code>AsyncPipe</code> should not call <code>markForCheck</code> on subscription (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54">#54</a>...</li>
<li><a href="55fd7b3c85"><code>55fd7b3</code></a> docs(docs-infra): Add missing api entries (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54517">#54517</a>)</li>
<li><a href="219445cda4"><code>219445c</code></a> fix(common): image placeholder not removed in OnPush component (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54515">#54515</a>)</li>
<li><a href="74b5a51226"><code>74b5a51</code></a> fix(http): Use string body to generate transfer cache key. (<a href="https://github.com/angular/angular/tree/HEAD/packages/common/issues/54379">#54379</a>)</li>
<li>See full diff in <a href="https://github.com/angular/angular/commits/17.3.0/packages/common">compare view</a></li>
</ul>
</details>
<br />

Updates `@angular/compiler` from 17.2.1 to 17.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/releases"><code>@​angular/compiler</code>'s releases</a>.</em></p>
<blockquote>
<h2>v17.3.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2"><img src="https://img.shields.io/badge/1a6beae8a2-feat-blue" alt="feat - 1a6beae8a2" /></a></td>
<td>Enable template pipeline by default. (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d"><img src="https://img.shields.io/badge/f386a04c9d-fix-green" alt="fix - f386a04c9d" /></a></td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e"><img src="https://img.shields.io/badge/1f129f114e-fix-green" alt="fix - 1f129f114e" /></a></td>
<td>not catching for loop empty tracking expressions (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e"><img src="https://img.shields.io/badge/12dc4d074e-fix-green" alt="fix - 12dc4d074e" /></a></td>
<td>account for as expression in docs extraction (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0"><img src="https://img.shields.io/badge/da7fbb40f0-fix-green" alt="fix - da7fbb40f0" /></a></td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699"><img src="https://img.shields.io/badge/492e03f699-fix-green" alt="fix - 492e03f699" /></a></td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2"><img src="https://img.shields.io/badge/331b16efd2-feat-blue" alt="feat - 331b16efd2" /></a></td>
<td>add API to inject attributes on the host node (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a"><img src="https://img.shields.io/badge/fb540e169a-feat-blue" alt="feat - fb540e169a" /></a></td>
<td>add migration for invalid two-way bindings (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453"><img src="https://img.shields.io/badge/c687b8f453-feat-blue" alt="feat - c687b8f453" /></a></td>
<td>expose new <code>output()</code> API (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21"><img src="https://img.shields.io/badge/c809069f21-feat-blue" alt="feat - c809069f21" /></a></td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4"><img src="https://img.shields.io/badge/aff65fd1f4-feat-blue" alt="feat - aff65fd1f4" /></a></td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c"><img src="https://img.shields.io/badge/974958913c-feat-blue" alt="feat - 974958913c" /></a></td>
<td>support TypeScript 5.4 (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d"><img src="https://img.shields.io/badge/39a50f9a8d-fix-green" alt="fix - 39a50f9a8d" /></a></td>
<td>ensure all initializer functions run in an injection context (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624"><img src="https://img.shields.io/badge/243ccce624-fix-green" alt="fix - 243ccce624" /></a></td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d"><img src="https://img.shields.io/badge/2909e9817d-fix-green" alt="fix - 2909e9817d" /></a></td>
<td>prevent infinite loops in clobbered elements check (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf"><img src="https://img.shields.io/badge/7243c704cf-fix-green" alt="fix - 7243c704cf" /></a></td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38"><img src="https://img.shields.io/badge/bb35414a38-perf-orange" alt="perf - bb35414a38" /></a></td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c"><img src="https://img.shields.io/badge/8d37ed035c-fix-green" alt="fix - 8d37ed035c" /></a></td>
<td>exclude caching for authenticated HTTP requests (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02"><img src="https://img.shields.io/badge/c1c7384e02-feat-blue" alt="feat - c1c7384e02" /></a></td>
<td>Add reusable types for router guards (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311"><img src="https://img.shields.io/badge/7225485311-fix-green" alt="fix - 7225485311" /></a></td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<h2>v17.3.0-rc.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0-rc.0 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="ae7dbe42de"><img src="https://img.shields.io/badge/ae7dbe42de-fix-green" alt="fix - ae7dbe42de" /></a></td>
<td>unwrap expressions with type parameters in query read property (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<p>| Commit | Description |</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md"><code>@​angular/compiler</code>'s changelog</a>.</em></p>
<blockquote>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2">1a6beae8a2</a></td>
<td>feat</td>
<td>Enable template pipeline by default. (<a href="https://redirect.github.com/angular/angular/pull/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d">f386a04c9d</a></td>
<td>fix</td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e">1f129f114e</a></td>
<td>fix</td>
<td>not catching for loop empty tracking expressions (<a href="https://redirect.github.com/angular/angular/pull/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e">12dc4d074e</a></td>
<td>fix</td>
<td>account for as expression in docs extraction (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0">da7fbb40f0</a></td>
<td>fix</td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://redirect.github.com/angular/angular/pull/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699">492e03f699</a></td>
<td>fix</td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://redirect.github.com/angular/angular/pull/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1">5afa4f0ec1</a></td>
<td>fix</td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2">331b16efd2</a></td>
<td>feat</td>
<td>add API to inject attributes on the host node (<a href="https://redirect.github.com/angular/angular/pull/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a">fb540e169a</a></td>
<td>feat</td>
<td>add migration for invalid two-way bindings (<a href="https://redirect.github.com/angular/angular/pull/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453">c687b8f453</a></td>
<td>feat</td>
<td>expose new <code>output()</code> API (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21">c809069f21</a></td>
<td>feat</td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4">aff65fd1f4</a></td>
<td>feat</td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://redirect.github.com/angular/angular/pull/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c">974958913c</a></td>
<td>feat</td>
<td>support TypeScript 5.4 (<a href="https://redirect.github.com/angular/angular/pull/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d">39a50f9a8d</a></td>
<td>fix</td>
<td>ensure all initializer functions run in an injection context (<a href="https://redirect.github.com/angular/angular/pull/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624">243ccce624</a></td>
<td>fix</td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://redirect.github.com/angular/angular/pull/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="2909e9817d">2909e9817d</a></td>
<td>fix</td>
<td>prevent infinite loops in clobbered elements check (<a href="https://redirect.github.com/angular/angular/pull/54425">#54425</a>)</td>
</tr>
<tr>
<td><a href="7243c704cf">7243c704cf</a></td>
<td>fix</td>
<td>return a readonly signal on <code>asReadonly</code>. (<a href="https://redirect.github.com/angular/angular/pull/54706">#54706</a>)</td>
</tr>
<tr>
<td><a href="bb35414a38">bb35414a38</a></td>
<td>perf</td>
<td>speed up retrieval of <code>DestroyRef</code> in <code>EventEmitter</code> (<a href="https://redirect.github.com/angular/angular/pull/54748">#54748</a>)</td>
</tr>
</tbody>
</table>
<h3>http</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="8d37ed035c">8d37ed035c</a></td>
<td>fix</td>
<td>exclude caching for authenticated HTTP requests (<a href="https://redirect.github.com/angular/angular/pull/54746">#54746</a>)</td>
</tr>
</tbody>
</table>
<h3>router</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="c1c7384e02">c1c7384e02</a></td>
<td>feat</td>
<td>Add reusable types for router guards (<a href="https://redirect.github.com/angular/angular/pull/54580">#54580</a>)</td>
</tr>
<tr>
<td><a href="7225485311">7225485311</a></td>
<td>fix</td>
<td>Navigations triggered by cancellation events should cancel previous navigation (<a href="https://redirect.github.com/angular/angular/pull/54710">#54710</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.2.4 (2024-03-06)</h1>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="917b9bdd2e">917b9bdd2e</a></td>
<td>fix</td>
<td>unwrap expressions with type parameters in query read property (<a href="https://redirect.github.com/angular/angular/pull/54647">#54647</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="586cc24a10">586cc24a10</a></td>
<td>fix</td>
<td>apply TestBed provider overrides to <code>@defer</code> dependencies (<a href="https://redirect.github.com/angular/angular/pull/54667">#54667</a>)</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="f386a04c9d"><code>f386a04</code></a> fix(compiler): handle two-way bindings to signal-based template variables in ...</li>
<li><a href="1f129f114e"><code>1f129f1</code></a> fix(compiler): not catching for loop empty tracking expressions (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54772">#54772</a>)</li>
<li><a href="b40f1e5b86"><code>b40f1e5</code></a> refactor(compiler): Remove deep imports in the language service (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54695">#54695</a>)</li>
<li><a href="5e32a775d9"><code>5e32a77</code></a> refactor(compiler): cleanup unused code in template builder pipeline (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54654">#54654</a>)</li>
<li><a href="1a6beae8a2"><code>1a6beae</code></a> feat(compiler): Enable template pipeline by default. (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54571">#54571</a>)</li>
<li><a href="badda0c389"><code>badda0c</code></a> fix(compiler-cli): correctly detect deferred dependencies across scoped nodes...</li>
<li><a href="dba3e0b5aa"><code>dba3e0b</code></a> fix(compiler): adding the inert property to the &quot;SCHEMA&quot; array (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/53148">#53148</a>)</li>
<li><a href="6c2d4b650b"><code>6c2d4b6</code></a> refactor(compiler): Enable Template Pipeline globally in 1P. (<a href="https://github.com/angular/angular/tree/HEAD/packages/compiler/issues/54435">#54435</a>)</li>
<li>See full diff in <a href="https://github.com/angular/angular/commits/17.3.0/packages/compiler">compare view</a></li>
</ul>
</details>
<br />

Updates `@angular/core` from 17.2.1 to 17.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/angular/angular/releases"><code>@​angular/core</code>'s releases</a>.</em></p>
<blockquote>
<h2>v17.3.0</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h1>17.3.0 (2024-03-13)</h1>
<h3>compiler</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="1a6beae8a2"><img src="https://img.shields.io/badge/1a6beae8a2-feat-blue" alt="feat - 1a6beae8a2" /></a></td>
<td>Enable template pipeline by default. (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54571">#54571</a>)</td>
</tr>
<tr>
<td><a href="f386a04c9d"><img src="https://img.shields.io/badge/f386a04c9d-fix-green" alt="fix - f386a04c9d" /></a></td>
<td>handle two-way bindings to signal-based template variables in instruction generation (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="1f129f114e"><img src="https://img.shields.io/badge/1f129f114e-fix-green" alt="fix - 1f129f114e" /></a></td>
<td>not catching for loop empty tracking expressions (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54772">#54772</a>)</td>
</tr>
</tbody>
</table>
<h3>compiler-cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="12dc4d074e"><img src="https://img.shields.io/badge/12dc4d074e-fix-green" alt="fix - 12dc4d074e" /></a></td>
<td>account for as expression in docs extraction (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="da7fbb40f0"><img src="https://img.shields.io/badge/da7fbb40f0-fix-green" alt="fix - da7fbb40f0" /></a></td>
<td>detect when the linker is working in unpublished angular and widen supported versions (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54439">#54439</a>)</td>
</tr>
<tr>
<td><a href="492e03f699"><img src="https://img.shields.io/badge/492e03f699-fix-green" alt="fix - 492e03f699" /></a></td>
<td>flag two-way bindings to non-signal values in templates (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54714">#54714</a>)</td>
</tr>
<tr>
<td><a href="5afa4f0ec1"><img src="https://img.shields.io/badge/5afa4f0ec1-fix-green" alt="fix - 5afa4f0ec1" /></a></td>
<td>support <code>ModuleWithProviders</code> literal detection with <code>typeof</code> (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54650">#54650</a>)</td>
</tr>
</tbody>
</table>
<h3>core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="331b16efd2"><img src="https://img.shields.io/badge/331b16efd2-feat-blue" alt="feat - 331b16efd2" /></a></td>
<td>add API to inject attributes on the host node (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54604">#54604</a>)</td>
</tr>
<tr>
<td><a href="fb540e169a"><img src="https://img.shields.io/badge/fb540e169a-feat-blue" alt="feat - fb540e169a" /></a></td>
<td>add migration for invalid two-way bindings (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54630">#54630</a>)</td>
</tr>
<tr>
<td><a href="c687b8f453"><img src="https://img.shields.io/badge/c687b8f453-feat-blue" alt="feat - c687b8f453" /></a></td>
<td>expose new <code>output()</code> API (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="c809069f21"><img src="https://img.shields.io/badge/c809069f21-feat-blue" alt="feat - c809069f21" /></a></td>
<td>introduce <code>outputFromObservable()</code> interop function (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="aff65fd1f4"><img src="https://img.shields.io/badge/aff65fd1f4-feat-blue" alt="feat - aff65fd1f4" /></a></td>
<td>introduce <code>outputToObservable</code> interop helper (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54650">#54650</a>)</td>
</tr>
<tr>
<td><a href="974958913c"><img src="https://img.shields.io/badge/974958913c-feat-blue" alt="feat - 974958913c" /></a></td>
<td>support TypeScript 5.4 (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54414">#54414</a>)</td>
</tr>
<tr>
<td><a href="39a50f9a8d"><img src="https://img.shields.io/badge/39a50f9a8d-fix-green" alt="fix - 39a50f9a8d" /></a></td>
<td>ensure all initializer functions run in an injection context (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54761">#54761</a>)</td>
</tr>
<tr>
<td><a href="243ccce624"><img src="https://img.shields.io/badge/243ccce624-fix-green" alt="fix - 243ccce624" /></a></td>
<td>exclude class attribute intended for projection matching from directive matching (<a href="https://github.com/angular/angular/tree/HEAD/packages/core/issues/54800">#54800</a>)</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular/commit/2909e9817daf69b6478...

_Description has been truncated_
2024-03-14 21:05:24 +00:00
Trek Glowacki
5c3d2e7411 [tests] Shuffle proprety order in dependabot.yml (#11240)
Property order isn't meaningful here. I figured directory name first
makes the order a bit nicer and alphabetical.
2024-03-14 15:45:40 -05:00
Wyatt Johnson
4bca0c6d0b [next] Ensure all static routes have static streaming lambda path (#11259)
When there's a match for a prerender, the dynamic query parameters will
not be provided via the `x-now-route-matches`. This ensures that when
generating any static route that the static streaming lambda path is
used if it's provided, ensuring that when a page is generated via
`generateStaticParams`:

```tsx
// app/blog/[slug]/page.tsx

type Props = {
  params: {
    slug: string
  }
}

export function generateStaticParams() {
  return [{ slug: "one" }, { slug: "two" }, { slug: "three" }]
}

export default function BlogPage({ slug }: Props) {
  // ...
}
```

That we use the specific routes (`/blog/one`, `/blog/two`, and
`/blog/three`) for the partial prerendering streaming path instead of
the paramatarized pathname (`/blog/[slug]`) as the rewrites won't be
matched once a match for a prerender has been found.

This additionally updates the tests to ensure that the correct pathname
is observed (this was previously silently failing).
2024-03-14 12:37:48 -06:00
270 changed files with 20651 additions and 2113 deletions

22
.github/CODEOWNERS vendored
View File

@@ -2,17 +2,17 @@
# https://help.github.com/en/articles/about-code-owners
# Restricted Paths
* @TooTallNate @EndangeredMassa @trek @onsclom
/.github/workflows @TooTallNate @EndangeredMassa @trek @onsclom @ijjk
/packages/fs-detectors @TooTallNate @EndangeredMassa @trek @onsclom @agadzik @chloetedder
/packages/next @TooTallNate @EndangeredMassa @trek @onsclom @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
/packages/routing-utils @TooTallNate @EndangeredMassa @trek @onsclom @ijjk
/packages/static-build @TooTallNate @EndangeredMassa @trek @onsclom
/packages/edge @TooTallNate @EndangeredMassa @trek @onsclom @vercel/compute
/examples @TooTallNate @EndangeredMassa @trek @onsclom @leerob
/examples/create-react-app @TooTallNate @EndangeredMassa @trek @onsclom @Timer
/examples/nextjs @TooTallNate @EndangeredMassa @trek @onsclom @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
/packages/node @TooTallNate @EndangeredMassa @trek @onsclom @Kikobeats
* @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads
/.github/workflows @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @ijjk
/packages/fs-detectors @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @agadzik @chloetedder
/packages/next @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
/packages/routing-utils @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @ijjk
/packages/static-build @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads
/packages/edge @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @vercel/compute
/examples @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @leerob
/examples/create-react-app @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @Timer
/examples/nextjs @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
/packages/node @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @Kikobeats
# Unrestricted Paths
.changeset/

159
.github/dependabot.yml vendored
View File

@@ -1,7 +1,8 @@
version: 2
updates:
- schedule:
- directory: /packages/static-build/test/fixtures/angular-v17
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
@@ -11,7 +12,6 @@ updates:
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
directory: /packages/static-build/test/fixtures/angular-v17
allow:
- dependency-name: '@angular*'
ignore:
@@ -25,8 +25,9 @@ updates:
update-types:
- 'minor'
- schedule:
interval: 'daily'
- directory: /packages/static-build/test/fixtures/astro-v4
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
@@ -35,7 +36,6 @@ updates:
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
directory: /packages/static-build/test/fixtures/astro-v4
allow:
- dependency-name: 'astro*'
ignore:
@@ -49,7 +49,8 @@ updates:
update-types:
- 'minor'
- schedule:
- directory: /packages/static-build/test/fixtures/hydrogen-v2023
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
@@ -59,7 +60,6 @@ updates:
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
directory: /packages/static-build/test/fixtures/hydrogen-v2023
allow:
- dependency-name: '@remix-run*'
- dependency-name: '@shopify*'
@@ -77,3 +77,148 @@ updates:
- '@shopify*'
update-types:
- 'minor'
- directory: /packages/static-build/test/fixtures/ionic-angular-v7
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
- 'TooTallNate'
- 'EndangeredMassa'
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
allow:
- dependency-name: '@ionic*'
- dependency-name: '@angular*'
ignore:
- dependency-name: '@ionic*'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
- dependency-name: '@angular*'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
groups:
core:
patterns:
- '@angular*'
- '@ionic*'
update-types:
- 'minor'
- directory: /packages/static-build/test/fixtures/ionic-react-v7
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
- 'TooTallNate'
- 'EndangeredMassa'
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
allow:
- dependency-name: '@ionic*'
- dependency-name: 'react*'
ignore:
- dependency-name: '@ionic*'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
- dependency-name: 'react*'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
groups:
core:
patterns:
- '@ionic*'
- 'react*'
update-types:
- 'minor'
- directory: /packages/static-build/test/fixtures/nuxt-v3
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
- 'TooTallNate'
- 'EndangeredMassa'
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
allow:
- dependency-name: 'nuxt'
- dependency-name: 'vue'
- dependency-name: 'vue-router'
- dependency-name: '@nuxt-devtools'
ignore:
- dependency-name: 'nuxt'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
- dependency-name: 'vue'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
- dependency-name: 'vue-router'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
- dependency-name: '@nuxt-devtools'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
groups:
core:
patterns:
- 'nuxt'
- 'vue'
- 'vue-router'
- '@nuxt-devtools'
update-types:
- 'minor'
- directory: /packages/static-build/test/fixtures/preact-v10
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
- 'TooTallNate'
- 'EndangeredMassa'
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
allow:
- dependency-name: 'preact*'
ignore:
- dependency-name: 'preact*'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
groups:
core:
patterns:
- 'preact*'
update-types:
- 'minor'
- directory: /packages/static-build/test/fixtures/stencil-v4
schedule:
interval: 'daily'
open-pull-requests-limit: 1
reviewers:
- 'trek'
- 'TooTallNate'
- 'EndangeredMassa'
commit-message:
prefix: '[framework-fixtures]'
package-ecosystem: 'npm'
allow:
- dependency-name: '@stencil/core'
ignore:
- dependency-name: '@stencil/core'
update-types:
['version-update:semver-major', 'version-update:semver-patch']
groups:
core:
patterns:
- '@stencil/core'
update-types:
- 'minor'

View File

@@ -4,7 +4,7 @@ import { lstatSync, readdirSync } from 'fs';
export async function deployExample(filename: string) {
const { testDeployment } = require('../../test/lib/deployment/test-deployment.js');
const example = basename(filename).replace(/\.test\.ts$/, '');
await testDeployment(join(filename, '..', '..', '..', example));
await testDeployment(join(process.cwd(), example));
}
export function getExamples() {

View File

@@ -0,0 +1,5 @@
{
"engines": {
"node": "18.x"
}
}

View File

@@ -8,6 +8,6 @@ menu:
main: {}
---
This is an example of a custom shortcode that you can put right into your content. You will need to add a form action to the the shortcode to make it work. Check out [Formspree](https://formspree.io/) for a simple, free form service.
This is an example of a custom shortcode that you can put right into your content. You will need to add a form action to the shortcode to make it work. Check out [Formspree](https://formspree.io/) for a simple, free form service.
{{< form-contact action="https://example.com" >}}

View File

@@ -0,0 +1,5 @@
{
"engines": {
"node": "18.x"
}
}

View File

@@ -0,0 +1,5 @@
{
"engines": {
"node": "18.x"
}
}

View File

@@ -8,7 +8,7 @@
"name": "nextjs",
"version": "0.1.0",
"dependencies": {
"next": "14.1.3",
"next": "14.1.4",
"react": "^18",
"react-dom": "^18"
},
@@ -18,7 +18,7 @@
"@types/react-dom": "^18",
"autoprefixer": "^10.0.1",
"eslint": "^8",
"eslint-config-next": "14.1.3",
"eslint-config-next": "14.1.4",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5"
@@ -46,9 +46,9 @@
}
},
"node_modules/@babel/runtime": {
"version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
"integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz",
"integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -239,23 +239,23 @@
}
},
"node_modules/@next/env": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.3.tgz",
"integrity": "sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ=="
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz",
"integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz",
"integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz",
"integrity": "sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==",
"dev": true,
"dependencies": {
"glob": "10.3.10"
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz",
"integrity": "sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz",
"integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==",
"cpu": [
"arm64"
],
@@ -268,9 +268,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz",
"integrity": "sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz",
"integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==",
"cpu": [
"x64"
],
@@ -283,9 +283,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz",
"integrity": "sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz",
"integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==",
"cpu": [
"arm64"
],
@@ -298,9 +298,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz",
"integrity": "sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz",
"integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==",
"cpu": [
"arm64"
],
@@ -313,9 +313,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz",
"integrity": "sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz",
"integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==",
"cpu": [
"x64"
],
@@ -328,9 +328,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz",
"integrity": "sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz",
"integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==",
"cpu": [
"x64"
],
@@ -343,9 +343,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz",
"integrity": "sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz",
"integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==",
"cpu": [
"arm64"
],
@@ -358,9 +358,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz",
"integrity": "sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz",
"integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==",
"cpu": [
"ia32"
],
@@ -373,9 +373,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz",
"integrity": "sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz",
"integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==",
"cpu": [
"x64"
],
@@ -433,9 +433,9 @@
}
},
"node_modules/@rushstack/eslint-patch": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz",
"integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==",
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz",
"integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==",
"dev": true
},
"node_modules/@swc/helpers": {
@@ -453,9 +453,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
"integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
"version": "20.11.30",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz",
"integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -468,9 +468,9 @@
"dev": true
},
"node_modules/@types/react": {
"version": "18.2.64",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.64.tgz",
"integrity": "sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==",
"version": "18.2.67",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz",
"integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
@@ -479,9 +479,9 @@
}
},
"node_modules/@types/react-dom": {
"version": "18.2.21",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.21.tgz",
"integrity": "sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==",
"version": "18.2.22",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz",
"integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==",
"dev": true,
"dependencies": {
"@types/react": "*"
@@ -771,35 +771,17 @@
"node": ">=8"
}
},
"node_modules/array.prototype.filter": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
"integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"es-array-method-boxes-properly": "^1.0.0",
"is-string": "^1.0.7"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/array.prototype.findlast": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz",
"integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==",
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
"integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.3",
"es-abstract": "^1.23.2",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"es-shim-unscopables": "^1.0.2"
},
"engines": {
@@ -810,15 +792,16 @@
}
},
"node_modules/array.prototype.findlastindex": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
"integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
"integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.3",
"es-abstract": "^1.23.2",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"es-shim-unscopables": "^1.0.2"
},
"engines": {
@@ -917,15 +900,6 @@
"integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
"dev": true
},
"node_modules/asynciterator.prototype": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
"integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
"dev": true,
"dependencies": {
"has-symbols": "^1.0.3"
}
},
"node_modules/autoprefixer": {
"version": "10.4.18",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz",
@@ -1003,12 +977,15 @@
"dev": true
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/brace-expansion": {
@@ -1114,9 +1091,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001594",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz",
"integrity": "sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==",
"version": "1.0.30001599",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz",
"integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==",
"funding": [
{
"type": "opencollective",
@@ -1260,6 +1237,57 @@
"integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
"dev": true
},
"node_modules/data-view-buffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
"integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/data-view-byte-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
"integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/data-view-byte-offset": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
"integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -1369,9 +1397,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
"version": "1.4.694",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.694.tgz",
"integrity": "sha512-kM3SwvGTYpBFJSc8jm4IYVMIOzDmAGd/Ry96O9elRiM6iEwHKNKhtXyFGzpfMMIGZD84W4/hyaULlMmNVvLQlQ==",
"version": "1.4.711",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.711.tgz",
"integrity": "sha512-hRg81qzvUEibX2lDxnFlVCHACa+LtrCPIsWAxo161LDYIB3jauf57RGsMZV9mvGwE98yGH06icj3zBEoOkxd/w==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -1381,9 +1409,9 @@
"dev": true
},
"node_modules/enhanced-resolve": {
"version": "5.15.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz",
"integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -1394,17 +1422,21 @@
}
},
"node_modules/es-abstract": {
"version": "1.22.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz",
"integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==",
"version": "1.23.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz",
"integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==",
"dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"arraybuffer.prototype.slice": "^1.0.3",
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
"data-view-buffer": "^1.0.1",
"data-view-byte-length": "^1.0.1",
"data-view-byte-offset": "^1.0.0",
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"es-set-tostringtag": "^2.0.3",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
@@ -1415,10 +1447,11 @@
"has-property-descriptors": "^1.0.2",
"has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
"hasown": "^2.0.1",
"hasown": "^2.0.2",
"internal-slot": "^1.0.7",
"is-array-buffer": "^3.0.4",
"is-callable": "^1.2.7",
"is-data-view": "^1.0.1",
"is-negative-zero": "^2.0.3",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.3",
@@ -1429,17 +1462,17 @@
"object-keys": "^1.1.1",
"object.assign": "^4.1.5",
"regexp.prototype.flags": "^1.5.2",
"safe-array-concat": "^1.1.0",
"safe-array-concat": "^1.1.2",
"safe-regex-test": "^1.0.3",
"string.prototype.trim": "^1.2.8",
"string.prototype.trimend": "^1.0.7",
"string.prototype.trim": "^1.2.9",
"string.prototype.trimend": "^1.0.8",
"string.prototype.trimstart": "^1.0.7",
"typed-array-buffer": "^1.0.2",
"typed-array-byte-length": "^1.0.1",
"typed-array-byte-offset": "^1.0.2",
"typed-array-length": "^1.0.5",
"unbox-primitive": "^1.0.2",
"which-typed-array": "^1.1.14"
"which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -1448,12 +1481,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/es-array-method-boxes-properly": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
"integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
"dev": true
},
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -1476,26 +1503,37 @@
}
},
"node_modules/es-iterator-helpers": {
"version": "1.0.17",
"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz",
"integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==",
"version": "1.0.18",
"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz",
"integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==",
"dev": true,
"dependencies": {
"asynciterator.prototype": "^1.0.0",
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.4",
"es-abstract": "^1.23.0",
"es-errors": "^1.3.0",
"es-set-tostringtag": "^2.0.2",
"es-set-tostringtag": "^2.0.3",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
"has-property-descriptors": "^1.0.2",
"has-proto": "^1.0.1",
"has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.7",
"iterator.prototype": "^1.1.2",
"safe-array-concat": "^1.1.0"
"safe-array-concat": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
"integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"dev": true,
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
@@ -1618,12 +1656,12 @@
}
},
"node_modules/eslint-config-next": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.3.tgz",
"integrity": "sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.4.tgz",
"integrity": "sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==",
"dev": true,
"dependencies": {
"@next/eslint-plugin-next": "14.1.3",
"@next/eslint-plugin-next": "14.1.4",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"eslint-import-resolver-node": "^0.3.6",
@@ -1806,9 +1844,9 @@
}
},
"node_modules/eslint-plugin-react": {
"version": "7.34.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz",
"integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==",
"version": "7.34.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
"integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
"dev": true,
"dependencies": {
"array-includes": "^3.1.7",
@@ -2220,9 +2258,9 @@
}
},
"node_modules/get-tsconfig": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
"integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
"dev": true,
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
@@ -2432,9 +2470,9 @@
}
},
"node_modules/hasown": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
"integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
@@ -2602,6 +2640,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-view": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
"integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
"dev": true,
"dependencies": {
"is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -2675,10 +2728,13 @@
}
},
"node_modules/is-map": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
"integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
"integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2745,10 +2801,13 @@
}
},
"node_modules/is-set": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
"integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
"integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2814,10 +2873,13 @@
}
},
"node_modules/is-weakmap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
"integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
"integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2835,13 +2897,16 @@
}
},
"node_modules/is-weakset": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
"integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
"integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
"call-bind": "^1.0.7",
"get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3150,11 +3215,11 @@
"dev": true
},
"node_modules/next": {
"version": "14.1.3",
"resolved": "https://registry.npmjs.org/next/-/next-14.1.3.tgz",
"integrity": "sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==",
"version": "14.1.4",
"resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz",
"integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==",
"dependencies": {
"@next/env": "14.1.3",
"@next/env": "14.1.4",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
@@ -3169,15 +3234,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
"@next/swc-darwin-arm64": "14.1.3",
"@next/swc-darwin-x64": "14.1.3",
"@next/swc-linux-arm64-gnu": "14.1.3",
"@next/swc-linux-arm64-musl": "14.1.3",
"@next/swc-linux-x64-gnu": "14.1.3",
"@next/swc-linux-x64-musl": "14.1.3",
"@next/swc-win32-arm64-msvc": "14.1.3",
"@next/swc-win32-ia32-msvc": "14.1.3",
"@next/swc-win32-x64-msvc": "14.1.3"
"@next/swc-darwin-arm64": "14.1.4",
"@next/swc-darwin-x64": "14.1.4",
"@next/swc-linux-arm64-gnu": "14.1.4",
"@next/swc-linux-arm64-musl": "14.1.4",
"@next/swc-linux-x64-gnu": "14.1.4",
"@next/swc-linux-x64-musl": "14.1.4",
"@next/swc-win32-arm64-msvc": "14.1.4",
"@next/swc-win32-ia32-msvc": "14.1.4",
"@next/swc-win32-x64-msvc": "14.1.4"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -3300,28 +3365,29 @@
}
},
"node_modules/object.entries": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
"integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
"integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.fromentries": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
"integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
"integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.2",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3331,16 +3397,17 @@
}
},
"node_modules/object.groupby": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz",
"integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
"integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"dev": true,
"dependencies": {
"array.prototype.filter": "^1.0.3",
"call-bind": "^1.0.5",
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.3",
"es-errors": "^1.0.0"
"es-abstract": "^1.23.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.hasown": {
@@ -3357,14 +3424,14 @@
}
},
"node_modules/object.values": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
"integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
"integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3544,9 +3611,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
"integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
"version": "8.4.37",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.37.tgz",
"integrity": "sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==",
"dev": true,
"funding": [
{
@@ -3565,7 +3632,7 @@
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -3674,9 +3741,9 @@
}
},
"node_modules/postcss-selector-parser": {
"version": "6.0.15",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
"integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
"version": "6.0.16",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -3792,16 +3859,16 @@
}
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz",
"integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==",
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
"integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.3",
"es-errors": "^1.0.0",
"get-intrinsic": "^1.2.3",
"es-abstract": "^1.23.1",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
"which-builtin-type": "^1.1.3"
},
@@ -3940,13 +4007,13 @@
}
},
"node_modules/safe-array-concat": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
"integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
"integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"get-intrinsic": "^1.2.2",
"call-bind": "^1.0.7",
"get-intrinsic": "^1.2.4",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -4010,17 +4077,17 @@
}
},
"node_modules/set-function-length": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
"integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"dependencies": {
"define-data-property": "^1.1.2",
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.3",
"get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.1"
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -4102,9 +4169,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
@@ -4203,14 +4270,15 @@
}
},
"node_modules/string.prototype.trim": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
"integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
"integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.0",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -4220,14 +4288,14 @@
}
},
"node_modules/string.prototype.trimend": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
"integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
"integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4447,9 +4515,9 @@
}
},
"node_modules/ts-api-utils": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
"integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true,
"engines": {
"node": ">=16"
@@ -4715,31 +4783,34 @@
}
},
"node_modules/which-collection": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
"integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
"integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"dependencies": {
"is-map": "^2.0.1",
"is-set": "^2.0.1",
"is-weakmap": "^2.0.1",
"is-weakset": "^2.0.1"
"is-map": "^2.0.3",
"is-set": "^2.0.3",
"is-weakmap": "^2.0.2",
"is-weakset": "^2.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-typed-array": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
"integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
"integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
"dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.6",
"call-bind": "^1.0.5",
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
"has-tostringtag": "^1.0.1"
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"

View File

@@ -11,7 +11,7 @@
"dependencies": {
"react": "^18",
"react-dom": "^18",
"next": "14.1.3"
"next": "14.1.4"
},
"devDependencies": {
"typescript": "^5",
@@ -22,6 +22,6 @@
"postcss": "^8",
"tailwindcss": "^3.3.0",
"eslint": "^8",
"eslint-config-next": "14.1.3"
"eslint-config-next": "14.1.4"
}
}

View File

@@ -9,7 +9,8 @@
},
"devDependencies": {
"@types/jest": "27.4.1",
"@vercel/frameworks": "3.0.0"
"@vercel/build-utils": "7.11.0",
"@vercel/frameworks": "3.0.1"
},
"version": null
}

View File

@@ -35,4 +35,4 @@ Afterwards, start the Remix development server like so:
npm run dev
```
Open up [http://localhost:3000](http://localhost:3000) and you should be ready to go!
Open up [http://localhost:5173](http://localhost:5173) and you should be ready to go!

View File

@@ -0,0 +1,5 @@
{
"engines": {
"node": "18.x"
}
}

View File

@@ -1,5 +1,26 @@
# @vercel-internals/types
## 1.0.29
### Patch Changes
- Updated dependencies [[`73b112b1f`](https://github.com/vercel/vercel/commit/73b112b1f74480e1bb941e1b754105fc7dace401)]:
- @vercel/build-utils@7.11.0
## 1.0.28
### Patch Changes
- Updated dependencies [[`1825b58df`](https://github.com/vercel/vercel/commit/1825b58df8d783e79f0addf262618f422246f4b3)]:
- @vercel/build-utils@7.10.0
## 1.0.27
### Patch Changes
- Updated dependencies [[`11218a179`](https://github.com/vercel/vercel/commit/11218a179870a5420c5a6ff720cd4aec4f7e1c5e)]:
- @vercel/build-utils@7.9.1
## 1.0.26
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@vercel-internals/types",
"version": "1.0.26",
"version": "1.0.29",
"types": "index.d.ts",
"main": "index.d.ts",
"files": [
@@ -10,7 +10,7 @@
"dependencies": {
"@types/node": "14.14.31",
"@vercel-internals/constants": "1.0.4",
"@vercel/build-utils": "7.9.0",
"@vercel/build-utils": "7.11.0",
"@vercel/routing-utils": "3.1.0"
},
"devDependencies": {

View File

@@ -33,7 +33,7 @@
"source-map-support": "0.5.12",
"ts-eager": "2.0.2",
"ts-jest": "29.1.0",
"turbo": "1.12.5",
"turbo": "1.13.0",
"typescript": "4.9.5"
},
"scripts": {

View File

@@ -1,5 +1,23 @@
# @vercel/build-utils
## 7.11.0
### Minor Changes
- Add `getOsRelease()` and `getProvidedRuntime()` functions ([#11370](https://github.com/vercel/vercel/pull/11370))
## 7.10.0
### Minor Changes
- Allow environment variables to be specified for `EdgeFunction` ([#11029](https://github.com/vercel/vercel/pull/11029))
## 7.9.1
### Patch Changes
- Export `getSupportedNodeVersion` ([#11277](https://github.com/vercel/vercel/pull/11277))
## 7.9.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/build-utils",
"version": "7.9.0",
"version": "7.11.0",
"license": "Apache-2.0",
"main": "./dist/index.js",
"types": "./dist/index.d.js",

View File

@@ -1,4 +1,4 @@
import type { Files, FunctionFramework } from './types';
import type { Env, Files, FunctionFramework } from './types';
/**
* An Edge Functions output
@@ -23,6 +23,11 @@ export class EdgeFunction {
*/
entrypoint: string;
/**
* Environment variables for the edge function to use at runtime.
*/
environment?: Env;
/**
* The list of files to be included in the edge function bundle.
*/
@@ -48,5 +53,6 @@ export class EdgeFunction {
this.assets = params.assets;
this.regions = params.regions;
this.framework = params.framework;
this.environment = params.environment;
}
}

View File

@@ -38,6 +38,7 @@ import {
import {
getLatestNodeVersion,
getDiscontinuedNodeVersions,
getSupportedNodeVersion,
} from './fs/node-version';
import streamToBuffer from './fs/stream-to-buffer';
import debug from './debug';
@@ -72,6 +73,7 @@ export {
walkParentDirs,
getNodeBinPath,
getNodeBinPaths,
getSupportedNodeVersion,
runNpmInstall,
runBundleInstall,
runPipInstall,
@@ -101,6 +103,7 @@ export {
export { EdgeFunction } from './edge-function';
export { readConfigFile } from './fs/read-config-file';
export { normalizePath } from './fs/normalize-path';
export { getOsRelease, getProvidedRuntime } from './os';
export * from './should-serve';
export * from './schemas';

View File

@@ -5,11 +5,7 @@ import minimatch from 'minimatch';
import { readlink } from 'fs-extra';
import { isSymbolicLink, isDirectory } from './fs/download';
import streamToBuffer from './fs/stream-to-buffer';
import type { Files, Config, FunctionFramework } from './types';
interface Environment {
[key: string]: string;
}
import type { Config, Env, Files, FunctionFramework } from './types';
export type LambdaOptions = LambdaOptionsWithFiles | LambdaOptionsWithZipBuffer;
@@ -21,7 +17,7 @@ export interface LambdaOptionsBase {
architecture?: LambdaArchitecture;
memory?: number;
maxDuration?: number;
environment?: Environment;
environment?: Env;
allowQuery?: string[];
regions?: string[];
supportsMultiPayloads?: boolean;
@@ -69,7 +65,7 @@ export class Lambda {
architecture?: LambdaArchitecture;
memory?: number;
maxDuration?: number;
environment: Environment;
environment: Env;
allowQuery?: string[];
regions?: string[];
/**

View File

@@ -0,0 +1,42 @@
import { readFile } from 'fs-extra';
import { isErrnoException } from '@vercel/error-utils';
export async function getOsRelease() {
try {
const data = await readFile('/etc/os-release', 'utf8');
return await parseOsRelease(data);
} catch (err) {
if (isErrnoException(err) && err.code === 'ENOENT') {
return null;
}
throw err;
}
}
export async function parseOsRelease(data: string) {
const obj: Record<string, string> = {};
// Example file contents:
// NAME="Amazon Linux"
// VERSION="2023"
// ID="amzn"
// ID_LIKE="fedora"
for (const line of data.trim().split('\n')) {
const m = /(?<key>.*)="(?<value>.*)"/.exec(line);
if (!m?.groups) {
continue;
}
obj[m.groups.key] = m.groups.value;
}
return obj;
}
export async function getProvidedRuntime() {
const os = await getOsRelease();
if (!os) {
return 'provided.al2023';
}
return os.PRETTY_NAME === 'Amazon Linux 2'
? 'provided.al2'
: 'provided.al2023';
}

View File

@@ -3,5 +3,8 @@
"version": "1.0.0",
"scripts": {
"build": "mkdir -p public && (printf \"npm version: \" && npm -v) > public/index.txt"
},
"engines": {
"node": "16.x"
}
}

View File

@@ -5,5 +5,8 @@
},
"dependencies": {
"once": "^1.4.0"
},
"engines": {
"node": "16.x"
}
}

View File

@@ -6,5 +6,8 @@
"dependencies": {
"exeggcute": "^1.0.0",
"once": "^1.4.0"
},
"engines": {
"node": "16.x"
}
}

View File

@@ -5,5 +5,8 @@
},
"dependencies": {
"sharp": "0.33.2"
},
"engines": {
"node": "16.x"
}
}

View File

@@ -0,0 +1,89 @@
import { parseOsRelease } from '../src/os';
describe('getOsRelease()', () => {
it('should parse `amazonlinux:2`', async () => {
const data = `NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
SUPPORT_END="2025-06-30"
`;
const parsed = await parseOsRelease(data);
expect(parsed).toMatchObject({
ANSI_COLOR: '0;33',
CPE_NAME: 'cpe:2.3:o:amazon:amazon_linux:2',
HOME_URL: 'https://amazonlinux.com/',
ID: 'amzn',
ID_LIKE: 'centos rhel fedora',
NAME: 'Amazon Linux',
PRETTY_NAME: 'Amazon Linux 2',
SUPPORT_END: '2025-06-30',
VERSION: '2',
VERSION_ID: '2',
});
});
it('should parse `amazonlinux:2023`', async () => {
const data = `NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
SUPPORT_END="2028-03-01"
`;
const parsed = await parseOsRelease(data);
expect(parsed).toMatchObject({
NAME: 'Amazon Linux',
VERSION: '2023',
ID: 'amzn',
ID_LIKE: 'fedora',
VERSION_ID: '2023',
PLATFORM_ID: 'platform:al2023',
PRETTY_NAME: 'Amazon Linux 2023',
ANSI_COLOR: '0;33',
CPE_NAME: 'cpe:2.3:o:amazon:amazon_linux:2023',
HOME_URL: 'https://aws.amazon.com/linux/',
BUG_REPORT_URL: 'https://github.com/amazonlinux/amazon-linux-2023',
SUPPORT_END: '2028-03-01',
});
});
it('should parse `ubuntu:jammy`', async () => {
const data = `PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
`;
const parsed = await parseOsRelease(data);
expect(parsed).toMatchObject({
PRETTY_NAME: 'Ubuntu 22.04.3 LTS',
NAME: 'Ubuntu',
VERSION_ID: '22.04',
VERSION: '22.04.3 LTS (Jammy Jellyfish)',
HOME_URL: 'https://www.ubuntu.com/',
SUPPORT_URL: 'https://help.ubuntu.com/',
BUG_REPORT_URL: 'https://bugs.launchpad.net/ubuntu/',
PRIVACY_POLICY_URL:
'https://www.ubuntu.com/legal/terms-and-policies/privacy-policy',
});
});
});

View File

@@ -1,5 +1,48 @@
# vercel
## 33.6.3
### Patch Changes
- Handle `--repo` linked in `vc deploy --prebuilt` ([#11309](https://github.com/vercel/vercel/pull/11309))
- Revert "[cli] extract `isZeroConfigBuild` into utility function (#11316)" ([#11350](https://github.com/vercel/vercel/pull/11350))
- Replace `inquirer` with `@inquirer/prompts` ([#11321](https://github.com/vercel/vercel/pull/11321))
- Updated dependencies [[`73b112b1f`](https://github.com/vercel/vercel/commit/73b112b1f74480e1bb941e1b754105fc7dace401), [`346e665bb`](https://github.com/vercel/vercel/commit/346e665bb021e6034bc70c82ef336485622595fe), [`73b112b1f`](https://github.com/vercel/vercel/commit/73b112b1f74480e1bb941e1b754105fc7dace401), [`548afd371`](https://github.com/vercel/vercel/commit/548afd371aa7a9dd3a7f4c60f7f94a7084d8023e)]:
- @vercel/go@3.1.0
- @vercel/node@3.0.26
- @vercel/build-utils@7.11.0
- @vercel/static-build@2.4.6
## 33.6.2
### Patch Changes
- Added sunset warning to secrets command. ([#11333](https://github.com/vercel/vercel/pull/11333))
- Swap jest for vitest in CLI unit tests ([#11302](https://github.com/vercel/vercel/pull/11302))
- Updated dependencies [[`988f7b75a`](https://github.com/vercel/vercel/commit/988f7b75a27387e84fce541b844f984d2c151980), [`1825b58df`](https://github.com/vercel/vercel/commit/1825b58df8d783e79f0addf262618f422246f4b3)]:
- @vercel/remix-builder@2.1.5
- @vercel/build-utils@7.10.0
- @vercel/node@3.0.25
- @vercel/static-build@2.4.5
## 33.6.1
### Patch Changes
- Don't send `projectSettings.nodeVersion` for unsupported versions ([#11277](https://github.com/vercel/vercel/pull/11277))
- Updated dependencies [[`4bca0c6d0`](https://github.com/vercel/vercel/commit/4bca0c6d0bc25052b95bd02b12a0b891c86c4b49), [`a67ad4b5a`](https://github.com/vercel/vercel/commit/a67ad4b5a130bf0e56e18111b3f9ddad69cec0e1), [`11218a179`](https://github.com/vercel/vercel/commit/11218a179870a5420c5a6ff720cd4aec4f7e1c5e), [`64b97bf4b`](https://github.com/vercel/vercel/commit/64b97bf4b5203ecf9a95f63ce26a5c3360208966)]:
- @vercel/next@4.1.6
- @vercel/remix-builder@2.1.4
- @vercel/build-utils@7.9.1
- @vercel/static-build@2.4.4
- @vercel/node@3.0.24
## 33.6.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "33.6.0",
"version": "33.6.3",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -12,7 +12,7 @@
},
"scripts": {
"test": "jest --reporters=default --reporters=jest-junit --env node --verbose --bail",
"test-unit": "pnpm test test/unit/",
"test-unit": "pnpm vitest test/unit/",
"test-e2e": "rimraf test/fixtures/integration && pnpm test test/integration-1.test.ts test/integration-2.test.ts test/integration-3.test.ts",
"test-dev": "pnpm test test/dev/",
"coverage": "codecov",
@@ -31,22 +31,27 @@
"node": ">= 16"
},
"dependencies": {
"@vercel/build-utils": "7.9.0",
"@vercel/build-utils": "7.11.0",
"@vercel/fun": "1.1.0",
"@vercel/go": "3.0.5",
"@vercel/go": "3.1.0",
"@vercel/hydrogen": "1.0.2",
"@vercel/next": "4.1.5",
"@vercel/node": "3.0.23",
"@vercel/next": "4.1.6",
"@vercel/node": "3.0.26",
"@vercel/python": "4.1.1",
"@vercel/redwood": "2.0.8",
"@vercel/remix-builder": "2.1.3",
"@vercel/remix-builder": "2.1.5",
"@vercel/ruby": "2.0.5",
"@vercel/static-build": "2.4.3",
"@vercel/static-build": "2.4.6",
"chokidar": "3.3.1"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
"@edge-runtime/node-utils": "2.3.0",
"@inquirer/checkbox": "2.2.0",
"@inquirer/confirm": "3.1.0",
"@inquirer/expand": "2.1.0",
"@inquirer/input": "2.1.1",
"@inquirer/select": "2.2.0",
"@next/env": "11.1.2",
"@sentry/node": "5.5.0",
"@sindresorhus/slugify": "0.11.0",
@@ -63,7 +68,6 @@
"@types/glob": "7.1.1",
"@types/http-proxy": "1.16.2",
"@types/ini": "1.3.31",
"@types/inquirer": "7.3.1",
"@types/jest": "27.4.1",
"@types/jest-expect-message": "1.0.3",
"@types/json-parse-better-errors": "1.0.0",
@@ -88,12 +92,13 @@
"@types/yauzl-promise": "2.1.0",
"@vercel-internals/constants": "1.0.4",
"@vercel-internals/get-package-json": "1.0.0",
"@vercel-internals/types": "1.0.26",
"@vercel/client": "13.1.6",
"@vercel-internals/types": "1.0.29",
"@vercel/client": "13.1.9",
"@vercel/error-utils": "2.0.2",
"@vercel/frameworks": "3.0.0",
"@vercel/fs-detectors": "5.2.1",
"@vercel/frameworks": "3.0.1",
"@vercel/fs-detectors": "5.2.2",
"@vercel/routing-utils": "3.1.0",
"@vitest/expect": "1.4.0",
"ajv": "6.12.2",
"alpha-sort": "2.0.1",
"ansi-escapes": "4.3.2",
@@ -126,7 +131,6 @@
"glob": "7.1.2",
"http-proxy": "1.18.1",
"ini": "3.0.0",
"inquirer": "7.0.4",
"is-docker": "2.2.1",
"is-port-reachable": "3.1.0",
"is-url": "1.2.2",
@@ -165,6 +169,8 @@
"ts-node": "10.9.1",
"universal-analytics": "0.4.20",
"utility-types": "2.1.0",
"vite": "5.1.6",
"vitest": "1.3.1",
"which": "3.0.0",
"write-json-file": "2.2.0",
"xdg-app-paths": "5.1.0",

View File

@@ -278,9 +278,7 @@ export default async function bisect(client: Client): Promise<number> {
if (openEnabled) {
await open(testUrl);
}
const answer = await client.prompt({
type: 'expand',
name: 'action',
action = await client.input.expand({
message: 'Select an action:',
choices: [
{ key: 'g', name: 'Good', value: 'good' },
@@ -288,7 +286,6 @@ export default async function bisect(client: Client): Promise<number> {
{ key: 's', name: 'Skip', value: 'skip' },
],
});
action = answer.action;
}
if (action === 'good') {
@@ -342,11 +339,7 @@ function getCommit(deployment: Deployment) {
async function prompt(client: Client, message: string): Promise<string> {
// eslint-disable-next-line no-constant-condition
while (true) {
const { val } = await client.prompt({
type: 'input',
name: 'val',
message,
});
const val = await client.input.text({ message });
if (val) {
return val;
} else {

View File

@@ -4,7 +4,7 @@ import dotenv from 'dotenv';
import semver from 'semver';
import minimatch from 'minimatch';
import { join, normalize, relative, resolve, sep } from 'path';
import frameworks from '@vercel/frameworks';
import { frameworkList } from '@vercel/frameworks';
import {
getDiscontinuedNodeVersions,
normalizePath,
@@ -695,7 +695,7 @@ async function getFramework(
): Promise<{ version: string } | undefined> {
const detectedFramework = await detectFrameworkRecord({
fs: new LocalFileSystemDetector(cwd),
frameworkList: frameworks,
frameworkList,
});
if (!detectedFramework) {

View File

@@ -102,7 +102,7 @@ function readConfirmation(output: Output, msg: string, certs: Cert[]) {
}).replace(/^(.*)/gm, ' $1')}\n`
);
output.print(
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('[y/N] ')}`
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('(y/N) ')}`
);
process.stdin
.on('data', d => {

View File

@@ -1,74 +1,77 @@
import ms from 'ms';
import fs from 'fs-extra';
import bytes from 'bytes';
import chalk from 'chalk';
import semver from 'semver';
import { join, resolve } from 'path';
import {
getPrettyError,
getSupportedNodeVersion,
scanParentDirs,
} from '@vercel/build-utils';
import {
fileNameSymbol,
VALID_ARCHIVE_FORMATS,
VercelConfig,
} from '@vercel/client';
import code from '../../util/output/code';
import highlight from '../../util/output/highlight';
import { readLocalConfig } from '../../util/config/files';
import getArgs from '../../util/get-args';
import { handleError } from '../../util/error';
import Client from '../../util/client';
import { getPrettyError, scanParentDirs } from '@vercel/build-utils';
import toHumanPath from '../../util/humanize-path';
import { errorToString, isErrnoException, isError } from '@vercel/error-utils';
import bytes from 'bytes';
import chalk from 'chalk';
import fs from 'fs-extra';
import ms from 'ms';
import { join, resolve } from 'path';
import Now, { CreateOptions } from '../../util';
import stamp from '../../util/output/stamp';
import Client from '../../util/client';
import { readLocalConfig } from '../../util/config/files';
import { createGitMeta } from '../../util/create-git-meta';
import createDeploy from '../../util/deploy/create-deploy';
import getDeployment from '../../util/get-deployment';
import parseMeta from '../../util/parse-meta';
import param from '../../util/output/param';
import { getDeploymentChecks } from '../../util/deploy/get-deployment-checks';
import getPrebuiltJson from '../../util/deploy/get-prebuilt-json';
import parseTarget from '../../util/deploy/parse-target';
import { printDeploymentStatus } from '../../util/deploy/print-deployment-status';
import { isValidArchive } from '../../util/deploy/validate-archive-format';
import purchaseDomainIfAvailable from '../../util/domains/purchase-domain-if-available';
import { emoji, prependEmoji } from '../../util/emoji';
import { handleError } from '../../util/error';
import { SchemaValidationFailed } from '../../util/errors';
import {
AliasDomainConfigured,
BuildError,
BuildsRateLimited,
ConflictingFilePath,
ConflictingPathSegment,
DeploymentNotFound,
DeploymentsRateLimited,
DomainNotFound,
DomainNotVerified,
DomainPermissionDenied,
DomainVerificationFailed,
InvalidDomain,
isAPIError,
MissingBuildScript,
NotDomainOwner,
TooManyRequests,
UserAborted,
DeploymentsRateLimited,
AliasDomainConfigured,
MissingBuildScript,
ConflictingFilePath,
ConflictingPathSegment,
BuildError,
NotDomainOwner,
isAPIError,
} from '../../util/errors-ts';
import { SchemaValidationFailed } from '../../util/errors';
import purchaseDomainIfAvailable from '../../util/domains/purchase-domain-if-available';
import getArgs from '../../util/get-args';
import getDeployment from '../../util/get-deployment';
import getProjectName from '../../util/get-project-name';
import toHumanPath from '../../util/humanize-path';
import confirm from '../../util/input/confirm';
import editProjectSettings from '../../util/input/edit-project-settings';
import inputProject from '../../util/input/input-project';
import { inputRootDirectory } from '../../util/input/input-root-directory';
import selectOrg from '../../util/input/select-org';
import { Output } from '../../util/output';
import code from '../../util/output/code';
import highlight from '../../util/output/highlight';
import param from '../../util/output/param';
import stamp from '../../util/output/stamp';
import { parseEnv } from '../../util/parse-env';
import parseMeta from '../../util/parse-meta';
import { getCommandName } from '../../util/pkg-name';
import {
getLinkedProject,
linkFolderToProject,
} from '../../util/projects/link';
import getProjectName from '../../util/get-project-name';
import selectOrg from '../../util/input/select-org';
import inputProject from '../../util/input/input-project';
import { prependEmoji, emoji } from '../../util/emoji';
import { inputRootDirectory } from '../../util/input/input-root-directory';
import { pickOverrides } from '../../util/projects/project-settings';
import validatePaths, {
validateRootDirectory,
} from '../../util/validate-paths';
import { getCommandName } from '../../util/pkg-name';
import { Output } from '../../util/output';
import { getDeploymentChecks } from '../../util/deploy/get-deployment-checks';
import parseTarget from '../../util/deploy/parse-target';
import getPrebuiltJson from '../../util/deploy/get-prebuilt-json';
import { createGitMeta } from '../../util/create-git-meta';
import { isValidArchive } from '../../util/deploy/validate-archive-format';
import { parseEnv } from '../../util/parse-env';
import { errorToString, isErrnoException, isError } from '@vercel/error-utils';
import { pickOverrides } from '../../util/projects/project-settings';
import { printDeploymentStatus } from '../../util/deploy/print-deployment-status';
import { help } from '../help';
import { deployCommand } from './command';
@@ -300,7 +303,10 @@ export default async (client: Client): Promise<number> => {
}
// build `--prebuilt`
let vercelOutputDir: string | undefined;
if (argv['--prebuilt']) {
vercelOutputDir = join(cwd, '.vercel/output');
// For repo-style linking, update `cwd` to be the Project
// subdirectory when `rootDirectory` setting is defined
if (
@@ -308,10 +314,10 @@ export default async (client: Client): Promise<number> => {
link.repoRoot &&
link.project.rootDirectory
) {
cwd = join(cwd, link.project.rootDirectory);
vercelOutputDir = join(cwd, link.project.rootDirectory, '.vercel/output');
}
const prebuiltExists = await fs.pathExists(join(cwd, '.vercel/output'));
const prebuiltExists = await fs.pathExists(vercelOutputDir);
if (!prebuiltExists) {
error(
`The ${param(
@@ -323,7 +329,7 @@ export default async (client: Client): Promise<number> => {
return 1;
}
const prebuiltBuild = await getPrebuiltJson(cwd);
const prebuiltBuild = await getPrebuiltJson(vercelOutputDir);
// Ensure that there was not a build error
const prebuiltError =
@@ -521,9 +527,13 @@ export default async (client: Client): Promise<number> => {
);
let nodeVersion: string | undefined;
if (packageJson?.engines?.node) {
const parsedNodeVersion = semver.coerce(packageJson.engines.node);
if (parsedNodeVersion) {
nodeVersion = `${parsedNodeVersion.major}.x`;
try {
const { range } = await getSupportedNodeVersion(packageJson.engines.node);
nodeVersion = range;
} catch (error) {
if (error instanceof Error) {
output.warn(error.message);
}
}
}
@@ -538,6 +548,7 @@ export default async (client: Client): Promise<number> => {
forceNew: argv['--force'],
withCache: argv['--with-cache'],
prebuilt: argv['--prebuilt'],
vercelOutputDir,
rootDirectory,
quiet,
wantsPublic: Boolean(argv['--public'] || localConfig.public),
@@ -565,7 +576,7 @@ export default async (client: Client): Promise<number> => {
nodeVersion,
};
if (status !== 'not_linked') {
if (status === 'linked') {
createArgs.projectSettings = {
...createArgs.projectSettings,
...localConfigurationOverrides,

View File

@@ -75,7 +75,7 @@ function readConfirmation(
}).replace(/^(.*)/gm, ' $1')}\n`
);
output.print(
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('[y/N] ')}`
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('(y/N) ')}`
);
process.stdin
.on('data', d => {

View File

@@ -29,9 +29,6 @@ export default async function add(
args: string[],
output: Output
) {
// improve the way we show inquirer prompts
require('../../util/input/patch-inquirer');
const stdInput = await readStandardInput(client.stdin);
let [envName, envTargetArg, envGitBranch] = args;
@@ -67,15 +64,11 @@ export default async function add(
}
while (!envName) {
const { inputName } = await client.prompt({
type: 'input',
name: 'inputName',
envName = await client.input.text({
message: `Whats the name of the variable?`,
});
envName = inputName;
if (!inputName) {
if (!envName) {
output.error('Name cannot be empty');
}
}
@@ -107,9 +100,7 @@ export default async function add(
if (stdInput) {
envValue = stdInput;
} else {
const { inputValue } = await client.prompt({
type: 'input',
name: 'inputValue',
const inputValue = await client.input.text({
message: `Whats the value of ${envName}?`,
});
@@ -117,16 +108,12 @@ export default async function add(
}
while (envTargets.length === 0) {
const { inputTargets } = await client.prompt({
name: 'inputTargets',
type: 'checkbox',
envTargets = await client.input.checkbox({
message: `Add ${envName} to which Environments (select multiple)?`,
choices,
});
envTargets = inputTargets;
if (inputTargets.length === 0) {
if (envTargets.length === 0) {
output.error('Please select at least one Environment');
}
}
@@ -137,9 +124,7 @@ export default async function add(
envTargets.length === 1 &&
envTargets[0] === 'preview'
) {
const { inputValue } = await client.prompt({
type: 'input',
name: 'inputValue',
const inputValue = await client.input.text({
message: `Add ${envName} to which Git branch? (leave empty for all Preview branches)?`,
});
envGitBranch = inputValue || '';

View File

@@ -29,9 +29,6 @@ export default async function rm(
args: string[],
output: Output
) {
// improve the way we show inquirer prompts
require('../../util/input/patch-inquirer');
if (args.length > 3) {
output.error(
`Invalid number of arguments. Usage: ${getCommandName(
@@ -44,9 +41,7 @@ export default async function rm(
let [envName, envTarget, envGitBranch] = args;
while (!envName) {
const { inputName } = await client.prompt({
type: 'input',
name: 'inputName',
const inputName = await client.input.text({
message: `Whats the name of the variable?`,
});
@@ -86,9 +81,7 @@ export default async function rm(
}
while (envs.length > 1) {
const { id } = await client.prompt({
name: 'id',
type: 'list',
const id = await client.input.select({
message: `Remove ${envName} from which Environments?`,
choices: envs.map(env => ({ value: env.id, name: formatEnvTarget(env) })),
});

View File

@@ -277,7 +277,7 @@ function readConfirmation(
}
output.print(
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('[y/N] ')}`
`${chalk.bold.red('> Are you sure?')} ${chalk.gray('(y/N) ')}`
);
process.stdin

View File

@@ -2,9 +2,14 @@ import { packageName, getCommandName } from '../../util/pkg-name';
export const secretsCommand = {
name: 'secrets',
description: `NOTE: The ${getCommandName(
'env'
)} command is recommended instead of ${getCommandName('secrets')}`,
description:
'WARNING: On May 1st, 2024 secrets will be automatically converted to sensitive Environment Variables for Preview and Production environments. Secrets attached to Development environments will not be migrated.\n' +
`The ${getCommandName(
'secrets'
)} command will be deprecated at this time, please use the ${getCommandName(
'env'
)} command instead.\n` +
'See https://vercel.com/changelog/legacy-environment-variable-secrets-are-being-sunset for more information.',
arguments: [
{
name: 'command',

View File

@@ -78,6 +78,12 @@ async function run({ output, contextName, currentTeam, client }) {
const commandName = getCommandName('secret ' + subcommand);
output.warn(
'On May 1st, 2024 secrets will be automatically converted to sensitive Environment Variables for Preview and Production environments.\n' +
'Secrets attached to Development environments will not be migrated.' +
'See https://vercel.com/changelog/legacy-environment-variable-secrets-are-being-sunset for more information.'
);
if (subcommand === 'ls' || subcommand === 'list') {
output.note(
`The ${getCommandName(

View File

@@ -1,11 +1,10 @@
import frameworkList from '@vercel/frameworks';
import { frameworkList } from '@vercel/frameworks';
export function sortBuilders<B extends { use: string }>(builds: B[]): B[] {
const frontendRuntimeSet = new Set(
frameworkList.map(f => f.useRuntime?.use || '@vercel/static-build')
);
const toNumber = (build: B) => (frontendRuntimeSet.has(build.use) ? 0 : 1);
return builds.sort((build1, build2) => {
return toNumber(build1) - toNumber(build2);
});

View File

@@ -1,5 +1,9 @@
import { bold } from 'chalk';
import inquirer from 'inquirer';
import { bold, gray } from 'chalk';
import checkbox from '@inquirer/checkbox';
import confirm from '@inquirer/confirm';
import expand from '@inquirer/expand';
import input from '@inquirer/input';
import select from '@inquirer/select';
import { EventEmitter } from 'events';
import { URL } from 'url';
import { VercelConfig } from '@vercel/client';
@@ -66,8 +70,8 @@ export default class Client extends EventEmitter implements Stdio {
agent?: Agent;
localConfig?: VercelConfig;
localConfigPath?: string;
prompt!: inquirer.PromptModule;
requestIdCounter: number;
input;
constructor(opts: ClientOptions) {
super();
@@ -83,7 +87,29 @@ export default class Client extends EventEmitter implements Stdio {
this.localConfig = opts.localConfig;
this.localConfigPath = opts.localConfigPath;
this.requestIdCounter = 1;
this._createPromptModule();
const theme = {
prefix: gray('?'),
style: { answer: gray },
};
this.input = {
text: (opts: Parameters<typeof input>[0]) =>
input({ theme, ...opts }, { input: this.stdin, output: this.stderr }),
checkbox: <T>(opts: Parameters<typeof checkbox<T>>[0]) =>
checkbox<T>(
{ theme, ...opts },
{ input: this.stdin, output: this.stderr }
),
expand: (opts: Parameters<typeof expand>[0]) =>
expand({ theme, ...opts }, { input: this.stdin, output: this.stderr }),
confirm: (opts: Parameters<typeof confirm>[0]) =>
confirm({ theme, ...opts }, { input: this.stdin, output: this.stderr }),
select: <T>(opts: Parameters<typeof select<T>>[0]) =>
select<T>(
{ theme, ...opts },
{ input: this.stdin, output: this.stderr }
),
};
}
retry<T>(fn: RetryFunction<T>, { retries = 3, maxTimeout = Infinity } = {}) {
@@ -229,13 +255,6 @@ export default class Client extends EventEmitter implements Stdio {
this.output.debug(`Retrying: ${error}\n${error.stack}`);
};
_createPromptModule() {
this.prompt = inquirer.createPromptModule({
input: this.stdin as NodeJS.ReadStream,
output: this.stderr as NodeJS.WriteStream,
});
}
get cwd(): string {
return process.cwd();
}

View File

@@ -30,7 +30,7 @@ const getGlobalPathConfig = (): string => {
];
// The customPath flag is the preferred location,
// followed by the the vercel directory,
// followed by the vercel directory,
// followed by the now directory.
// If none of those exist, use the vercel directory.
return (

View File

@@ -6,7 +6,7 @@ export default async function getPrebuiltJson(
directory: string
): Promise<BuildsManifest | null> {
try {
return await fs.readJSON(join(directory, '.vercel/output/builds.json'));
return await fs.readJSON(join(directory, 'builds.json'));
} catch (error) {
// ignoring error
}

View File

@@ -53,6 +53,7 @@ export default async function processDeployment({
withCache?: boolean;
org: Org;
prebuilt: boolean;
vercelOutputDir?: string;
projectName: string;
isSettingUpProject: boolean;
archive?: ArchiveFormat;
@@ -71,6 +72,7 @@ export default async function processDeployment({
withCache,
quiet,
prebuilt,
vercelOutputDir,
rootDirectory,
} = args;
@@ -92,6 +94,7 @@ export default async function processDeployment({
force,
withCache,
prebuilt,
vercelOutputDir,
rootDirectory,
skipAutoDetectionConfirmation,
archive,

View File

@@ -45,7 +45,7 @@ import {
detectApiExtensions,
isOfficialRuntime,
} from '@vercel/fs-detectors';
import frameworkList from '@vercel/frameworks';
import { frameworkList } from '@vercel/frameworks';
import cmd from '../output/cmd';
import link from '../output/link';

View File

@@ -35,7 +35,7 @@ async function getConfigPrefix() {
return null;
}
async function isGlobal() {
export async function isGlobal() {
try {
// This is true for e.g. nvm, node path will be equal to now path
if (dirname(process.argv[0]) === dirname(process.argv[1])) {

View File

@@ -36,6 +36,7 @@ export interface CreateOptions {
project?: string;
wantsPublic: boolean;
prebuilt?: boolean;
vercelOutputDir?: string;
rootDirectory?: string | null;
meta: Dictionary<string>;
gitMetadata?: GitMetadata;
@@ -117,6 +118,7 @@ export default class Now extends EventEmitter {
name,
project,
prebuilt = false,
vercelOutputDir,
rootDirectory,
wantsPublic,
meta,
@@ -179,6 +181,7 @@ export default class Now extends EventEmitter {
skipAutoDetectionConfirmation,
cwd,
prebuilt,
vercelOutputDir,
rootDirectory,
noWait,
});

View File

@@ -5,14 +5,8 @@ export default async function confirm(
message: string,
preferred: boolean
): Promise<boolean> {
require('./patch-inquirer');
const answers = await client.prompt({
type: 'confirm',
name: 'value',
return client.input.confirm({
message,
default: preferred,
});
return answers.value;
}

View File

@@ -1,7 +1,6 @@
import inquirer from 'inquirer';
import confirm from './confirm';
import chalk from 'chalk';
import frameworkList, { Framework } from '@vercel/frameworks';
import { frameworkList, Framework } from '@vercel/frameworks';
import Client from '../client';
import { isSettingValue } from '../is-setting-value';
import type { ProjectSettings } from '@vercel-internals/types';
@@ -125,48 +124,26 @@ export default async function editProjectSettings(
return settings;
}
const choices = settingKeys.reduce<Array<{ name: string; value: string }>>(
(acc, setting) => {
const skip =
setting === 'framework' ||
setting === 'commandForIgnoringBuildStep' ||
setting === 'installCommand' ||
localConfigurationOverrides?.[setting];
if (!skip) {
acc.push({ name: settingMap[setting], value: setting });
}
return acc;
},
[]
);
const choices = settingKeys.reduce((acc, setting) => {
const skip =
setting === 'framework' ||
setting === 'commandForIgnoringBuildStep' ||
setting === 'installCommand' ||
localConfigurationOverrides?.[setting];
if (skip) return acc;
return [...acc, { name: settingMap[setting], value: setting }];
}, [] as { name: string; value: ConfigKeys }[]);
const { settingFields } = await inquirer.prompt<{
settingFields: Array<
Exclude<
ConfigKeys,
'framework' | 'commandForIgnoringBuildStep' | 'installCommand'
>
>;
}>({
name: 'settingFields',
type: 'checkbox',
const settingFields = await client.input.checkbox({
message: 'Which settings would you like to overwrite (select multiple)?',
choices,
});
for (let setting of settingFields) {
const field = settingMap[setting];
const answers = await inquirer.prompt<{
[k in Exclude<
ConfigKeys,
'framework' | 'commandForIgnoringBuildStep' | 'installCommand'
>]: string;
}>({
type: 'input',
name: setting,
settings[setting] = await client.input.text({
message: `What's your ${chalk.bold(field)}?`,
});
settings[setting] = answers[setting];
}
return settings;
}

View File

@@ -78,12 +78,9 @@ export default async function inputProject(
let project: Project | ProjectNotFound | null = null;
while (!project || project instanceof ProjectNotFound) {
const answers = await client.prompt({
type: 'input',
name: 'existingProjectName',
message: `Whats the name of your existing project?`,
const projectName = await client.input.text({
message: 'Whats the name of your existing project?',
});
const projectName = answers.existingProjectName as string;
if (!projectName) {
output.error(`Project name cannot be empty`);
@@ -109,13 +106,10 @@ export default async function inputProject(
let newProjectName: string | null = null;
while (!newProjectName) {
const answers = await client.prompt({
type: 'input',
name: 'newProjectName',
newProjectName = await client.input.text({
message: `Whats your projects name?`,
default: !detectedProject ? slugifiedName : undefined,
});
newProjectName = answers.newProjectName as string;
if (!newProjectName) {
output.error(`Project name cannot be empty`);

View File

@@ -14,9 +14,7 @@ export async function inputRootDirectory(
// eslint-disable-next-line no-constant-condition
while (true) {
const { rootDirectory } = await client.prompt({
type: 'input',
name: 'rootDirectory',
const rootDirectory = await client.input.text({
message: `In which directory is your code located?`,
transformer: (input: string) => {
return `${chalk.dim(`./`)}${input}`;

View File

@@ -1,4 +1,4 @@
import inquirer from 'inquirer';
import { Separator } from '@inquirer/select';
import stripAnsi from 'strip-ansi';
import Client from '../client';
import eraseLines from '../output/erase-lines';
@@ -14,7 +14,7 @@ interface ListSeparator {
separator: string;
}
export type ListChoice = ListEntry | ListSeparator | typeof inquirer.Separator;
export type ListChoice = ListEntry | ListSeparator | typeof Separator;
interface ListOptions {
message: string;
@@ -54,8 +54,6 @@ export default async function list(
eraseFinalAnswer = false, // If true, the line with the final answer that inquirer prints will be erased before returning
}: ListOptions
): Promise<string> {
require('./patch-inquirer');
let biggestLength = 0;
let selected: string | undefined;
@@ -70,14 +68,14 @@ export default async function list(
}
const choices = _choices.map(choice => {
if (choice instanceof inquirer.Separator) {
if (choice instanceof Separator) {
return choice;
}
if ('separator' in choice) {
const prefix = `── ${choice.separator} `;
const suffix = '─'.repeat(biggestLength - getLength(prefix));
return new inquirer.Separator(`${prefix}${suffix}`);
return new Separator(`${prefix}${suffix}`);
}
if ('short' in choice) {
@@ -93,11 +91,11 @@ export default async function list(
if (separator) {
for (let i = 0; i < choices.length; i += 2) {
choices.splice(i, 0, new inquirer.Separator(' '));
choices.splice(i, 0, new Separator(' '));
}
}
const cancelSeparator = new inquirer.Separator('─'.repeat(biggestLength));
const cancelSeparator = new Separator('─'.repeat(biggestLength));
const _cancel = {
name: 'Cancel',
value: '',
@@ -110,18 +108,16 @@ export default async function list(
choices.push(cancelSeparator, _cancel);
}
const answer = await client.prompt({
name: 'value',
type: 'list',
default: selected,
const answer = await client.input.select({
message,
choices,
pageSize,
default: selected,
});
if (eraseFinalAnswer === true) {
process.stdout.write(eraseLines(2));
}
return answer.value;
return answer;
}

View File

@@ -1,210 +0,0 @@
import chalk from 'chalk';
import inquirer from 'inquirer';
import Prompt from 'inquirer/lib/prompts/base';
import Choice from 'inquirer/lib/objects/choice';
import Separator from 'inquirer/lib/objects/separator';
/**
* Here we patch inquirer with some tweaks:
* - update "list" to use ● and ○ and hide tips
* - update "checkbox" to use ◻︎ and ◼︎ and hide tips
* - use '?' before questions
* - do not apply color to question's answer
*/
// adjusted from https://github.com/SBoudrias/Inquirer.js/blob/942908f17319343d1acc7b876f990797c5695918/packages/inquirer/lib/prompts/base.js#L126
const getQuestion = function (this: Prompt) {
let message = `${chalk.gray('?')} ${this.opt.message} `;
if (this.opt.type === 'confirm') {
if (this.opt.default === 'y/N') {
message += `[y/${chalk.bold('N')}] `;
} else {
message += `[${chalk.bold('Y')}/n] `;
}
}
// Append the default if available, and if question isn't answered
else if (this.opt.default != null && this.status !== 'answered') {
message += chalk.dim(`(${this.opt.default}) `);
}
return message;
};
inquirer.prompt.prompts.list.prototype.getQuestion = getQuestion;
inquirer.prompt.prompts.checkbox.prototype.getQuestion = getQuestion;
inquirer.prompt.prompts.input.prototype.getQuestion = getQuestion;
inquirer.prompt.prompts.confirm.prototype.getQuestion = getQuestion;
// adjusted from https://github.com/SBoudrias/Inquirer.js/blob/942908f17319343d1acc7b876f990797c5695918/packages/inquirer/lib/prompts/list.js#L80
inquirer.prompt.prompts.list.prototype.render = function () {
// Render question
let message = this.getQuestion();
// Render choices or answer depending on the state
if (this.status === 'answered') {
message += this.opt.choices.getChoice(this.selected).short;
} else {
let choicesStr = listRender(this.opt.choices, this.selected);
let indexPosition = this.opt.choices.indexOf(
this.opt.choices.getChoice(this.selected)
);
message +=
'\n' +
this.paginator.paginate(choicesStr, indexPosition, this.opt.pageSize);
}
this.firstRender = false;
this.screen.render(message);
};
function listRender(choices: (Choice | Separator)[], pointer: number) {
let output = '';
let separatorOffset = 0;
choices.forEach((choice, i) => {
if (choice.type === 'separator') {
separatorOffset++;
output += ' ' + choice + '\n';
return;
}
if (choice.disabled) {
separatorOffset++;
output += ' - ' + choice.name;
output +=
' (' +
(typeof choice.disabled === 'string' ? choice.disabled : 'Disabled') +
')';
output += '\n';
return;
}
let isSelected = i - separatorOffset === pointer;
let line = (isSelected ? '● ' : '○ ') + choice.name;
if (isSelected) {
line = chalk.cyan(line);
}
output += line + ' \n';
});
return output.replace(/\n$/, '');
}
// adjusted from https://github.com/SBoudrias/Inquirer.js/blob/942908f17319343d1acc7b876f990797c5695918/packages/inquirer/lib/prompts/checkbox.js#L84
inquirer.prompt.prompts.checkbox.prototype.render = function (error?: string) {
// Render question
let message = this.getQuestion();
let bottomContent = '';
if (!this.spaceKeyPressed) {
message +=
'(Press ' +
chalk.cyan.bold('<space>') +
' to select, ' +
chalk.cyan.bold('<a>') +
' to toggle all, ' +
chalk.cyan.bold('<i>') +
' to invert selection)';
}
// Render choices or answer depending on the state
if (this.status === 'answered') {
message += this.selection.length > 0 ? this.selection.join(', ') : 'None';
} else {
let choicesStr = renderChoices(this.opt.choices, this.pointer);
let indexPosition = this.opt.choices.indexOf(
this.opt.choices.getChoice(this.pointer)
);
message +=
'\n' +
this.paginator.paginate(choicesStr, indexPosition, this.opt.pageSize);
}
if (error) {
bottomContent = chalk.red('>> ') + error;
}
this.screen.render(message, bottomContent);
};
function renderChoices(choices: (Choice | Separator)[], pointer: number) {
let output = '';
let separatorOffset = 0;
choices.forEach(function (choice, i) {
if (choice.type === 'separator') {
separatorOffset++;
output += '' + choice + '\n';
return;
}
if (choice.disabled) {
separatorOffset++;
output += '- ' + choice.name;
output +=
' (' +
(typeof choice.disabled === 'string' ? choice.disabled : 'Disabled') +
')';
} else {
if (i - separatorOffset === pointer) {
output += chalk.cyan(
(choice.checked ? ' ▪︎' : ' ▫︎') + ' ' + choice.name
);
} else {
output += chalk.cyan(
(choice.checked ? ' ▪︎' : ' ▫︎') + ' ' + choice.name
);
}
}
output += '\n';
});
return output.replace(/\n$/, '');
}
// adjusted from https://github.com/SBoudrias/Inquirer.js/blob/942908f17319343d1acc7b876f990797c5695918/packages/inquirer/lib/prompts/input.js#L44
inquirer.prompt.prompts.input.prototype.render = function (error?: string) {
let bottomContent = '';
let appendContent = '';
let message = this.getQuestion();
let transformer = this.opt.transformer;
let isFinal = this.status === 'answered';
if (isFinal) {
appendContent = this.answer;
} else {
appendContent = this.rl.line;
}
if (transformer) {
message += transformer(appendContent, this.answers, { isFinal });
} else {
message += appendContent;
}
if (error) {
bottomContent = chalk.red('>> ') + error;
}
this.screen.render(message, bottomContent);
};
// adjusted from https://github.com/SBoudrias/Inquirer.js/blob/942908f17319343d1acc7b876f990797c5695918/packages/inquirer/lib/prompts/confirm.js#L64
inquirer.prompt.prompts.confirm.prototype.render = function (answer?: boolean) {
let message = this.getQuestion();
if (this.status === 'answered') {
message += answer ? 'y' : 'n';
} else {
message += this.rl.line;
}
this.screen.render(message);
return this;
};

View File

@@ -10,7 +10,6 @@ export default async function selectOrg(
question: string,
autoConfirm?: boolean
): Promise<Org> {
require('./patch-inquirer');
const {
output,
config: { currentTeam },
@@ -52,14 +51,9 @@ export default async function selectOrg(
return choices[defaultChoiceIndex].value;
}
const answers = await client.prompt({
type: 'list',
name: 'org',
return await client.input.select({
message: question,
choices,
default: defaultChoiceIndex,
default: choices[defaultChoiceIndex].value,
});
const org = answers.org;
return org;
}

View File

@@ -77,7 +77,7 @@ export default function text({
// Tab
// Right arrow
autoCompleteChars = new Set(['\t', '\x1b[C']),
// If true, converts everything the user types to to lowercase
// If true, converts everything the user types to lowercase
forceLowerCase = false,
}: TextParams = {}): Promise<string> {
return new Promise((resolve, reject) => {

View File

@@ -1,5 +1,5 @@
import chalk from 'chalk';
import inquirer from 'inquirer';
import { Separator } from '@inquirer/checkbox';
import pluralize from 'pluralize';
import { homedir } from 'os';
import slugify from '@sindresorhus/slugify';
@@ -144,16 +144,13 @@ export async function ensureRepoLink(
if (yes) {
remoteName = defaultRemote;
} else {
const answer = await client.prompt({
type: 'list',
name: 'value',
remoteName = await client.input.select({
message: 'Which Git remote should be used?',
choices: remoteNames.map(name => {
return { name: name, value: name };
}),
default: defaultRemote,
});
remoteName = answer.value;
}
}
const repoUrl = remoteUrls[remoteName];
@@ -222,15 +219,13 @@ export async function ensureRepoLink(
selected = projects;
} else {
const addSeparators = projects.length > 0 && detectedProjectsCount > 0;
const answer = await client.prompt({
type: 'checkbox',
name: 'selected',
selected = await client.input.checkbox<Project | NewProject>({
message: `Which Projects should be ${
projects.length ? 'linked to' : 'created'
}?`,
choices: [
...(addSeparators
? [new inquirer.Separator('----- Existing Projects -----')]
? [new Separator('----- Existing Projects -----')]
: []),
...projects.map(project => {
return {
@@ -240,7 +235,7 @@ export async function ensureRepoLink(
};
}),
...(addSeparators
? [new inquirer.Separator('----- New Projects to be created -----')]
? [new Separator('----- New Projects to be created -----')]
: []),
...Array.from(detectedProjects.entries()).flatMap(
([rootDirectory, frameworks]) =>
@@ -264,12 +259,11 @@ export async function ensureRepoLink(
},
// Checked by default when there are no other existing Projects
checked: projects.length === 0,
};
} as const;
})
),
],
});
selected = answer.selected;
}
if (selected.length === 0) {

View File

@@ -62,12 +62,7 @@ export async function readInput(
while (!input) {
try {
const { val } = await client.prompt({
type: 'input',
name: 'val',
message,
});
input = val;
input = await client.input.text({ message });
} catch (err: any) {
console.log(); // \n

View File

@@ -1,5 +1,5 @@
import { join } from 'path';
import frameworkList, { Framework } from '@vercel/frameworks';
import { frameworkList, Framework } from '@vercel/frameworks';
import {
detectFrameworks,
getWorkspacePackagePaths,

View File

@@ -97,16 +97,13 @@ async function getProjectLinkFromRepoLink(
} else {
const selectableProjects =
projects.length > 0 ? projects : repoLink.repoConfig.projects;
const { p } = await client.prompt({
name: 'p',
type: 'list',
project = await client.input.select({
message: `Please select a Project:`,
choices: selectableProjects.map(p => ({
value: p,
name: p.name,
})),
});
project = p;
}
if (project) {
return {

View File

@@ -0,0 +1,6 @@
{
"private": true,
"engines": {
"node": "16.x"
}
}

View File

@@ -10,6 +10,6 @@ menu:
---
This is an example of a custom shortcode that you can put right into your content. You will need to add a form action to the the shortcode to make it work. Check out [Formspree](https://formspree.io/) for a simple, free form service.
This is an example of a custom shortcode that you can put right into your content. You will need to add a form action to the shortcode to make it work. Check out [Formspree](https://formspree.io/) for a simple, free form service.
{{< form-contact action="https://example.com" >}}

View File

@@ -0,0 +1,6 @@
{
"private": true,
"engines": {
"node": "16.x"
}
}

View File

@@ -0,0 +1,6 @@
{
"private": true,
"engines": {
"node": "16.x"
}
}

View File

@@ -0,0 +1,6 @@
{
"private": true,
"engines": {
"node": "16.x"
}
}

View File

@@ -0,0 +1,6 @@
{
"private": true,
"engines": {
"node": "16.x"
}
}

View File

@@ -0,0 +1,5 @@
import { name } from '../backend/app'
export default async function handler(request, response) {
return response.status(200).send(`Hello, ${name}!`);
}

View File

@@ -0,0 +1 @@
export const name = 'Batman'

View File

@@ -0,0 +1,8 @@
{
"name": "vercel-ts-test",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
}
}

View File

@@ -0,0 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1

View File

@@ -119,7 +119,6 @@ test(
await testPath(200, `/api/date`, new RegExp(`Current date is ${year}`));
await testPath(200, `/api/date.py`, new RegExp(`Current date is ${year}`));
await testPath(200, `/api/headers`, (body: any, res: any) => {
// @ts-ignore
const { host } = new URL(res.url);
expect(body).toBe(host);
});
@@ -198,7 +197,6 @@ test(
);
await testPath(200, `/api/dump`, (body: any, res: any, isDev: any) => {
// @ts-ignore
const { host } = new URL(res.url);
const { env, headers } = JSON.parse(body);

View File

@@ -544,4 +544,18 @@ describe('[vercel dev] ESM serverless functions', () => {
{ skipDeploy: true }
)
);
test(
'[vercel dev] TypeScript importing another TS file, type=commonjs',
testFixtureStdio(
'vercel-ts-test',
async (_testPath: any, port: number) => {
const res = await fetch(`http://localhost:${port}/api/test`);
validateResponseHeaders(res);
const text = await res.text();
expect(text).toEqual('Hello, Batman!');
},
{ skipDeploy: true }
)
);
});

View File

@@ -0,0 +1 @@
!.vercel

View File

@@ -0,0 +1,4 @@
{
"orgId": "team_dummy",
"projectId": "node-low-starting-range"
}

View File

@@ -0,0 +1 @@
module.exports = (req, res) => res.end('Vercel');

View File

@@ -0,0 +1,8 @@
{
"name": "node-low-starting-range",
"version": "1.0.0",
"private": true,
"engines": {
"node": ">10"
}
}

View File

@@ -0,0 +1,4 @@
{
"orgId": "team_dummy",
"projectId": "node-low-version"
}

View File

@@ -0,0 +1 @@
module.exports = (req, res) => res.end('Vercel');

View File

@@ -0,0 +1,8 @@
{
"name": "node-low-version",
"version": "1.0.0",
"private": true,
"engines": {
"node": "10"
}
}

View File

@@ -7,5 +7,8 @@
"dependencies": {
"exeggcute": "^1.0.0",
"once": "^1.4.0"
},
"engines": {
"node": "18.x"
}
}

View File

@@ -348,6 +348,9 @@ module.exports = async function prepare(session, binaryPath, tmpFixturesDir) {
},
'lambda-with-php-runtime': {
'api/test.php': `<?php echo 'Hello from PHP'; ?>`,
'package.json': JSON.stringify({
engines: { node: '18.x' },
}),
'vercel.json': JSON.stringify({
functions: {
'api/**/*.php': {

View File

@@ -1,3 +1,4 @@
import { afterAll } from 'vitest';
import findUp from 'find-up';
import fs from 'fs-extra';
import path from 'path';

View File

@@ -1,3 +1,4 @@
import stripAnsi from 'strip-ansi';
import type { CLIProcess } from './types';
function getPromptErrorDetails(
@@ -54,7 +55,7 @@ export default async function waitForPrompt(
};
const onData = (rawChunk: Buffer) => {
const chunk = rawChunk.toString();
const chunk = stripAnsi(rawChunk.toString());
mostRecentChunk = chunk;
console.log('> ' + chunk);

View File

@@ -617,7 +617,7 @@ test('ensure we render a prompt when deploying home directory', async () => {
binaryPath,
[directory, '--public', '--name', session, '--force'],
{
input: 'N',
input: 'N\n',
}
);
@@ -625,7 +625,7 @@ test('ensure we render a prompt when deploying home directory', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
expect(stderr).toContain(
'You are deploying your home directory. Do you want to continue? [y/N]'
'You are deploying your home directory. Do you want to continue?'
);
expect(stderr).toContain('Canceled');
});

View File

@@ -1,4 +1,5 @@
const originalCwd = process.cwd();
import { afterAll, beforeAll, afterEach } from 'vitest';
// Register Jest matcher extensions for CLI unit tests
import './matchers';
@@ -93,8 +94,6 @@ export class MockClient extends Client {
this.stderr.pause();
this.stderr.isTTY = true;
this._createPromptModule();
this.output = new Output(this.stderr);
this.argv = [];

View File

@@ -1,3 +1,4 @@
import { beforeEach } from 'vitest';
import { URL } from 'url';
import chance from 'chance';
import { client } from './client';

View File

@@ -1,63 +1,13 @@
/**
* This file registers the custom Jest "matchers" that are useful for
* writing CLI unit tests, and sets them up to be recognized by TypeScript.
*
* References:
* - https://haspar.us/notes/adding-jest-custom-matchers-in-typescript
* - https://gist.github.com/hasparus/4ebaa17ec5d3d44607f522bcb1cda9fb
*/
import { expect } from 'vitest';
import { toOutput } from './matchers';
/// <reference types="@types/jest" />
import * as matchers from './matchers';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
type Tail<T extends unknown[]> = T extends [infer _Head, ...infer Tail]
? Tail
: never;
type AnyFunction = (...args: any[]) => any;
type PromiseFunction = (...args: any[]) => Promise<any>;
type GetMatcherType<TP, TResult> = TP extends PromiseFunction
? (...args: Tail<Parameters<TP>>) => Promise<TResult>
: TP extends AnyFunction
? (...args: Tail<Parameters<TP>>) => TResult
: TP;
type GetMatchersType<TMatchers, TResult> = {
[P in keyof TMatchers]: GetMatcherType<TMatchers[P], TResult>;
};
type FirstParam<T extends AnyFunction> = Parameters<T>[0];
type OnlyMethodsWhereFirstArgIsOfType<TObject, TWantedFirstArg> = {
[P in keyof TObject]: TObject[P] extends AnyFunction
? TWantedFirstArg extends FirstParam<TObject[P]>
? TObject[P]
: [
`Error: this function is present only when received is:`,
FirstParam<TObject[P]>
]
: TObject[P];
};
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace jest {
// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface Matchers<R, T = {}>
extends GetMatchersType<
OnlyMethodsWhereFirstArgIsOfType<typeof matchers, T>,
R
> {}
}
interface ToOutputMatchers<R = unknown> {
toOutput: (test: string, timeout?: number) => Promise<R>;
}
const jestExpect = (global as any).expect;
if (jestExpect !== undefined) {
jestExpect.extend(matchers);
} else {
console.error("Couldn't find Jest's global expect.");
declare module 'vitest' {
// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface Assertion<T = any> extends ToOutputMatchers<T> {}
}
expect.extend({ toOutput });

View File

@@ -5,15 +5,19 @@ import {
printReceived,
} from 'jest-matcher-utils';
import type { Readable } from 'stream';
import type { MatcherState } from 'expect';
import type { MatcherState } from '@vitest/expect';
import type { MatcherHintOptions } from 'jest-matcher-utils';
import stripAnsi from 'strip-ansi';
export async function toOutput(
this: MatcherState,
stream: Readable,
test: string,
timeout = 3000
) {
): Promise<{
pass: boolean;
message: () => string;
}> {
const { isNot } = this;
const matcherName = 'toOutput';
const matcherHintOptions: MatcherHintOptions = {
@@ -27,7 +31,7 @@ export async function toOutput(
matcherHint(matcherName, 'stream', 'test', matcherHintOptions) + '\n\n';
function onData(data: string) {
output += data;
output += stripAnsi(data);
if (output.includes(test)) {
cleanup();
resolve({

View File

@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`help command help output snapshots column width 40 1`] = `
exports[`help command > help output snapshots > column width 40 1`] = `
"
vercel deploy [project-path] [options]
@@ -186,7 +186,7 @@ exports[`help command help output snapshots column width 40 1`] = `
"
`;
exports[`help command help output snapshots column width 80 1`] = `
exports[`help command > help output snapshots > column width 80 1`] = `
"
vercel deploy [project-path] [options]
@@ -260,7 +260,7 @@ exports[`help command help output snapshots column width 80 1`] = `
"
`;
exports[`help command help output snapshots column width 120 1`] = `
exports[`help command > help output snapshots > column width 120 1`] = `
"
vercel deploy [project-path] [options]

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import alias from '../../../src/commands/alias';
import { useUser } from '../../mocks/user';

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import { useUser } from '../../mocks/user';
import bisect from '../../../src/commands/bisect';

View File

@@ -1,3 +1,4 @@
import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
import fs from 'fs-extra';
import { join } from 'path';
import { getWriteableDirectory } from '@vercel/build-utils';
@@ -7,8 +8,9 @@ import { defaultProject, useProject } from '../../../mocks/project';
import { useTeams } from '../../../mocks/team';
import { useUser } from '../../../mocks/user';
import { execSync } from 'child_process';
import { vi } from 'vitest';
jest.setTimeout(6 * 60 * 1000);
vi.setConfig({ testTimeout: 6 * 60 * 1000 });
const fixture = (name: string) =>
join(__dirname, '../../../fixtures/unit/commands/build', name);
@@ -932,7 +934,7 @@ describe('build', () => {
name: 'Error',
message:
'Invalid vercel.json - `rewrites[2]` should NOT have additional property `src`. Did you mean `source`?',
stack: expect.stringContaining('at validateConfig'),
stack: expect.stringContaining('at Module.validateConfig'),
hideStackTrace: true,
code: 'INVALID_VERCEL_CONFIG',
link: 'https://vercel.com/docs/concepts/projects/project-configuration#rewrites',

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import certs from '../../../src/commands/certs';
import { useUser } from '../../mocks/user';

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import bytes from 'bytes';
import fs from 'fs-extra';
import { join } from 'path';
@@ -464,4 +465,104 @@ describe('deploy', () => {
},
});
});
it('should send latest supported node version when given a >low-node-version based on `engines.node` package.json field', async () => {
const user = useUser();
useTeams('team_dummy');
useProject({
...defaultProject,
name: 'node-low-starting-range',
id: 'QmbKpqpiUqbcke',
});
let body: any;
client.scenario.post(`/v13/deployments`, (req, res) => {
body = req.body;
res.json({
creator: {
uid: user.id,
username: user.username,
},
id: 'dpl_',
});
});
client.scenario.get(`/v13/deployments/dpl_`, (req, res) => {
res.json({
creator: {
uid: user.id,
username: user.username,
},
id: 'dpl_',
readyState: 'READY',
aliasAssigned: true,
alias: [],
});
});
const repoRoot = setupUnitFixture(
'commands/deploy/node-low-starting-range'
);
client.cwd = repoRoot;
client.setArgv('deploy');
const exitCode = await deploy(client);
expect(exitCode).toEqual(0);
expect(body).toMatchObject({
source: 'cli',
version: 2,
projectSettings: {
nodeVersion: '20.x',
sourceFilesOutsideRootDirectory: true,
},
});
});
it('should send no version when `engines.node` package.json field is fixed to an outdated version', async () => {
const user = useUser();
useTeams('team_dummy');
useProject({
...defaultProject,
name: 'node-low-version',
id: 'QmbKpqpiUqbcke',
});
let body: any;
client.scenario.post(`/v13/deployments`, (req, res) => {
body = req.body;
res.json({
creator: {
uid: user.id,
username: user.username,
},
id: 'dpl_',
});
});
client.scenario.get(`/v13/deployments/dpl_`, (req, res) => {
res.json({
creator: {
uid: user.id,
username: user.username,
},
id: 'dpl_',
readyState: 'READY',
aliasAssigned: true,
alias: [],
});
});
const repoRoot = setupUnitFixture('commands/deploy/node-low-version');
client.cwd = repoRoot;
client.setArgv('deploy');
const exitCodePromise = deploy(client);
await expect(client.stderr).toOutput(
'WARN! Node.js Version "10.x" is discontinued and must be upgraded. Please set "engines": { "node": "20.x" } in your `package.json` file to use Node.js 20.'
);
await expect(exitCodePromise).resolves.toEqual(0);
expect(body).toMatchObject({
source: 'cli',
version: 2,
projectSettings: {
sourceFilesOutsideRootDirectory: true,
},
});
});
});

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import dns from '../../../src/commands/dns';
import { useUser } from '../../mocks/user';

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import domains from '../../../src/commands/domains';
import { useUser } from '../../mocks/user';

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import fs from 'fs-extra';
import path from 'path';
import { parse } from 'dotenv';

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { join } from 'path';
import fs from 'fs-extra';
import { useUser } from '../../mocks/user';
@@ -526,7 +527,7 @@ describe('git', () => {
`Found a repository in your local Git Config: https://github.com/user/repo`
);
await expect(client.stderr).toOutput(
`Do you still want to connect https://github.com/user2/repo2? [y/N]`
`Do you still want to connect https://github.com/user2/repo2? (y/N)`
);
client.stdin.write('y\n');
await expect(client.stderr).toOutput(
@@ -574,7 +575,7 @@ describe('git', () => {
`Found multiple Git repositories in your local Git config:\n • origin: https://github.com/user/repo.git\n • secondary: https://github.com/user/repo2.git`
);
await expect(client.stderr).toOutput(
`Do you still want to connect https://github.com/user3/repo3? [y/N]`
`Do you still want to connect https://github.com/user3/repo3? (y/N)`
);
client.stdin.write('y\n');

View File

@@ -1,3 +1,4 @@
import { describe, expect, test } from 'vitest';
import {
help,
lineToString,

View File

@@ -1,3 +1,4 @@
import { describe, expect, it } from 'vitest';
import { client } from '../../mocks/client';
import { useUser } from '../../mocks/user';
import { useDeployment } from '../../mocks/deployment';

View File

@@ -1,3 +1,4 @@
import { describe, it, expect } from 'vitest';
import { basename, join } from 'path';
import { readJSON } from 'fs-extra';
import link from '../../../src/commands/link';

View File

@@ -1,3 +1,4 @@
import { describe, it, expect } from 'vitest';
import createLineIterator from 'line-async-iterator';
import { client } from '../../mocks/client';
import { useUser } from '../../mocks/user';

Some files were not shown because too many files have changed in this diff Show More