Skip to content

[build-utils] Add useWebApi property to NodejsLambda class#12873

Merged
TooTallNate merged 2 commits intomainfrom
tootallnate/zero-819-enable-web-api-syntax-support-for-nodejs-serverless
Jan 17, 2025
Merged

[build-utils] Add useWebApi property to NodejsLambda class#12873
TooTallNate merged 2 commits intomainfrom
tootallnate/zero-819-enable-web-api-syntax-support-for-nodejs-serverless

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

Currently Node.js functions can opt-in to the Web API syntax by exporting named HTTP methods as request handlers (export const GET = () => new Response()), but there is no way to export a default catch-all handler.

For backwards compat reasons, we can not change the default export default as a Node.js HTTP handler syntax, so this new opt-in property useWebApi will enable Web API syntax for the default export.

This is a prerequisite to making React Router v7+ work on Vercel in a sane way.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Jan 16, 2025

🦋 Changeset detected

Latest commit: a3930e8

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
@vercel/build-utils Minor
vercel Patch
@vercel/client Patch
@vercel/gatsby-plugin-vercel-builder Patch
@vercel/node Patch
@vercel/static-build Patch
@vercel-internals/types Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@erikareads
Copy link
Copy Markdown
Contributor

How does useWebApi get used?

If I understand correctly, we support a feature that allows for these method named exports (GET, etc.). But that feature is not enabled by default, and can't be for backwards compatibility reasons.

This PR adds the useWebApi property to the NodejsLambda class, which gets detected automatically if set? Or will additional work need to be done in order to use this property?

@TooTallNate
Copy link
Copy Markdown
Member Author

TooTallNate commented Jan 17, 2025

@erikareads The intention is for a Builder / Build Output API producer to set this property when the user code is meant to be using the Web API syntax. This will be used in @vercel/remix-builder to allow for the entrypoint to use a consistent isomorphic syntax for both Node.js and Edge functions.

There are related backend changes that will use this property when set to make the things happen.

@TooTallNate TooTallNate added this pull request to the merge queue Jan 17, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 17, 2025
@TooTallNate TooTallNate merged commit 7454046 into main Jan 17, 2025
@TooTallNate TooTallNate deleted the tootallnate/zero-819-enable-web-api-syntax-support-for-nodejs-serverless branch January 17, 2025 19:38
EndangeredMassa pushed a commit that referenced this pull request Jan 28, 2025
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/[email protected]

### Major Changes

- Initial release
([#12903](#12903))

## @vercel/[email protected]

### Minor Changes

- Add `useWebApi` property to `NodejsLambda` class
([#12873](#12873))

- [build-utils] convert NodeVersion to class and add state getter
([#12883](#12883))
    [ruby] convert RubyVersion to class and add state getter

## [email protected]

### Minor Changes

- [cli] add Node Version to project list output table
([#12895](#12895))

### Patch Changes

- Enable executable bit for `src/vc.js` script
([#12863](#12863))

- Add video integration category to the integration install CLI
([#12870](#12870))

- [cli] update warning in ls --update-required for clarity
([#12864](#12864))

- Added headers for user-supplied rewrites
([#12847](#12847))

- [cli] refactor confirm component to use `client.input.confirm`
interface ([#12846](#12846))

- [build-utils] convert NodeVersion to class and add state getter
([#12883](#12883))
    [ruby] convert RubyVersion to class and add state getter

- Updated dependencies
\[[`56f72ffefb828c3001f7c82259ed0f71db4f629e`](56f72ff),
[`745404610a836fa6c2068c5c192d2f3e8b86918f`](7454046),
[`b6bb709370d2565121808340d43d0a9d90b53de1`](b6bb709),
[`85a64db8d9b6a6e9f7c6a019d51777930a806584`](85a64db),
[`ac6a62eff7db3b3e2713adc1f5bd6a1331d838ce`](ac6a62e),
[`f65ea2245382dd2449c96f695ed692d419a83868`](f65ea22),
[`7af40c1e9d9916cbe8287359662fc940f1d24fce`](7af40c1),
[`06307180c20ca07b65f7cb5e93b65c977b9ccd70`](0630718),
[`3a5507fd1459c77b4491f1c9c3a64ad42e4ff009`](3a5507f),
[`cefda60a603d60cc35e4697c36e751cca411e6bb`](cefda60),
[`003866c4c93e893edb7a5e89b519fc8879b370c0`](003866c)]:
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]

## @vercel/[email protected]

### Minor Changes

- Make vite detection supersede ionic-react
([#12880](#12880))

## @vercel/functions@1.6.0

### Minor Changes

- Add middleware-related helper functions
([#12938](#12938))

## @vercel/[email protected]

### Minor Changes

- Add support for React Router v7
([#12904](#12904))

- Enable `nativeFetch` when `v3_singleFetch` future flag is enabled
([#12918](#12918))

### Patch Changes

- [remix] Create an interface for differences remix vs react-router
([#12925](#12925))

## @vercel/[email protected]

### Minor Changes

- [build-utils] convert NodeVersion to class and add state getter
([#12883](#12883))
    [ruby] convert RubyVersion to class and add state getter

## @vercel/[email protected]

### Patch Changes

- Updated dependencies
\[[`745404610a836fa6c2068c5c192d2f3e8b86918f`](7454046),
[`3a5507fd1459c77b4491f1c9c3a64ad42e4ff009`](3a5507f)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Bump next from 14.2.10 to 14.2.21
([#12842](#12842))

## @vercel/[email protected]

### Patch Changes

- Fix local file system readdir to not throw on special file system stat
types ([#12915](#12915))

- Updated dependencies
\[[`d645bdd4312730b10bef89ad9e18e111500849fc`](d645bdd)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Updated dependencies
\[[`745404610a836fa6c2068c5c192d2f3e8b86918f`](7454046),
[`3a5507fd1459c77b4491f1c9c3a64ad42e4ff009`](3a5507f)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- ensure defaultLocale rewrite doesn't conflict with user-defined
redirects ([#12916](#12916))

- Added headers for user-supplied rewrites
([#12847](#12847))

## @vercel/[email protected]

### Patch Changes

- Fix requests failing due to the presence of `Transfer-Encoding` header
in edge-function dev server.
([#10701](#10701))

- Split `build()`, `prepareCache()` and `startDevServer()` into separate
files ([#12872](#12872))

- Updated dependencies
\[[`745404610a836fa6c2068c5c192d2f3e8b86918f`](7454046),
[`3a5507fd1459c77b4491f1c9c3a64ad42e4ff009`](3a5507f)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Remove support for VERCEL_IPC_FD
([#12908](#12908))

- Add `supportsResponseStreaming` to build output
([#12884](#12884))

## @vercel/[email protected]

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/[email protected]

## @vercel-internals/[email protected]

### Patch Changes

- Updated dependencies
\[[`745404610a836fa6c2068c5c192d2f3e8b86918f`](7454046),
[`3a5507fd1459c77b4491f1c9c3a64ad42e4ff009`](3a5507f)]:
    -   @vercel/[email protected]

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
QuietCraftsmanship pushed a commit to QuietCraftsmanship/Vercel that referenced this pull request Jul 6, 2025
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/[email protected]

### Major Changes

- Initial release
([#12903](vercel/vercel#12903))

## @vercel/[email protected]

### Minor Changes

- Add `useWebApi` property to `NodejsLambda` class
([#12873](vercel/vercel#12873))

- [build-utils] convert NodeVersion to class and add state getter
([#12883](vercel/vercel#12883))
    [ruby] convert RubyVersion to class and add state getter

## [email protected]

### Minor Changes

- [cli] add Node Version to project list output table
([#12895](vercel/vercel#12895))

### Patch Changes

- Enable executable bit for `src/vc.js` script
([#12863](vercel/vercel#12863))

- Add video integration category to the integration install CLI
([#12870](vercel/vercel#12870))

- [cli] update warning in ls --update-required for clarity
([#12864](vercel/vercel#12864))

- Added headers for user-supplied rewrites
([#12847](vercel/vercel#12847))

- [cli] refactor confirm component to use `client.input.confirm`
interface ([#12846](vercel/vercel#12846))

- [build-utils] convert NodeVersion to class and add state getter
([#12883](vercel/vercel#12883))
    [ruby] convert RubyVersion to class and add state getter

- Updated dependencies
\[[`97e4eb3c468b4c35c4b930137215ecd018707121`](vercel/vercel@97e4eb3),
[`0aea17613bd7c4b0cbf174f654efa0cf3abee363`](vercel/vercel@0aea176),
[`c8b8fdca6333c3d4503be696d046f57b2f221431`](vercel/vercel@c8b8fdc),
[`e7536c62bebab05ea989cf10de28c9dc311be2e8`](vercel/vercel@e7536c6),
[`33c6e67f14854ef680db612944063fc405843827`](vercel/vercel@33c6e67),
[`0ded32e2d5ae1d9812d70eb281b226e057b016a9`](vercel/vercel@0ded32e),
[`e1e6b58819ad8606ed4e963af5e1e58984cf02d7`](vercel/vercel@e1e6b58),
[`44dd8ccf5235c7019c14d2a8e34c4c0733ce110d`](vercel/vercel@44dd8cc),
[`1a4f0521f984ce891a3e9847d31e569f407c4319`](vercel/vercel@1a4f052),
[`ff43e4bf3f15a8875afe6f3cc9e22a37110f3751`](vercel/vercel@ff43e4b),
[`a376e638ffe384b962b14685293bccfb4507ab90`](vercel/vercel@a376e63)]:
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]
    -   @vercel/[email protected]

## @vercel/[email protected]

### Minor Changes

- Make vite detection supersede ionic-react
([#12880](vercel/vercel#12880))

## @vercel/[email protected]

### Minor Changes

- Add middleware-related helper functions
([#12938](vercel/vercel#12938))

## @vercel/[email protected]

### Minor Changes

- Add support for React Router v7
([#12904](vercel/vercel#12904))

- Enable `nativeFetch` when `v3_singleFetch` future flag is enabled
([#12918](vercel/vercel#12918))

### Patch Changes

- [remix] Create an interface for differences remix vs react-router
([#12925](vercel/vercel#12925))

## @vercel/[email protected]

### Minor Changes

- [build-utils] convert NodeVersion to class and add state getter
([#12883](vercel/vercel#12883))
    [ruby] convert RubyVersion to class and add state getter

## @vercel/[email protected]

### Patch Changes

- Updated dependencies
\[[`0aea17613bd7c4b0cbf174f654efa0cf3abee363`](vercel/vercel@0aea176),
[`1a4f0521f984ce891a3e9847d31e569f407c4319`](vercel/vercel@1a4f052)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Bump next from 14.2.10 to 14.2.21
([#12842](vercel/vercel#12842))

## @vercel/[email protected]

### Patch Changes

- Fix local file system readdir to not throw on special file system stat
types ([#12915](vercel/vercel#12915))

- Updated dependencies
\[[`ac4318615e248752ad20ca031f7c903e76e52899`](vercel/vercel@ac43186)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Updated dependencies
\[[`0aea17613bd7c4b0cbf174f654efa0cf3abee363`](vercel/vercel@0aea176),
[`1a4f0521f984ce891a3e9847d31e569f407c4319`](vercel/vercel@1a4f052)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- ensure defaultLocale rewrite doesn't conflict with user-defined
redirects ([#12916](vercel/vercel#12916))

- Added headers for user-supplied rewrites
([#12847](vercel/vercel#12847))

## @vercel/[email protected]

### Patch Changes

- Fix requests failing due to the presence of `Transfer-Encoding` header
in edge-function dev server.
([#10701](vercel/vercel#10701))

- Split `build()`, `prepareCache()` and `startDevServer()` into separate
files ([#12872](vercel/vercel#12872))

- Updated dependencies
\[[`0aea17613bd7c4b0cbf174f654efa0cf3abee363`](vercel/vercel@0aea176),
[`1a4f0521f984ce891a3e9847d31e569f407c4319`](vercel/vercel@1a4f052)]:
    -   @vercel/[email protected]

## @vercel/[email protected]

### Patch Changes

- Remove support for VERCEL_IPC_FD
([#12908](vercel/vercel#12908))

- Add `supportsResponseStreaming` to build output
([#12884](vercel/vercel#12884))

## @vercel/[email protected]

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/[email protected]

## @vercel-internals/[email protected]

### Patch Changes

- Updated dependencies
\[[`0aea17613bd7c4b0cbf174f654efa0cf3abee363`](vercel/vercel@0aea176),
[`1a4f0521f984ce891a3e9847d31e569f407c4319`](vercel/vercel@1a4f052)]:
    -   @vercel/[email protected]

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants