Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Improve TypeScript plugin for server boundary #63667

Merged
merged 1 commit into from
Mar 25, 2024
Merged

Improve TypeScript plugin for server boundary #63667

merged 1 commit into from
Mar 25, 2024

Conversation

shuding
Copy link
Member

@shuding shuding commented Mar 25, 2024

For problems like #62821, #62860 and other, the only way to improve the DX would be relying on the type checker to ensure that Server Actions are async functions. Inlined definitions will always be checked by SWC (as they're always syntactically defined as functions already), but export values are sometimes determined at the runtime.

Also added react-dom related methods to the disallow list for the server layer.

Examples:

CleanShot-2024-03-25-dXbvKe4a.mp4
CleanShot-2024-03-24-pjH7R3tf.mp4
CleanShot-2024-03-24-kBi2hXos.mp4

Closes NEXT-2913

@ijjk
Copy link
Member

ijjk commented Mar 25, 2024

Stats from current PR

Default Build
General Overall increase ⚠️
vercel/next.js canary vercel/next.js shu/cmqq Change
buildDuration 14.5s 14.6s ⚠️ +115ms
buildDurationCached 9s 6.8s N/A
nodeModulesSize 198 MB 198 MB ⚠️ +54 kB
nextStartRea..uration (ms) 443ms 444ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js shu/cmqq Change
2453-HASH.js gzip 30.8 kB 30.8 kB N/A
3304.HASH.js gzip 181 B 181 B
3f784ff6-HASH.js gzip 53.7 kB 53.7 kB
8299-HASH.js gzip 5.04 kB 5.04 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 242 B 241 B N/A
main-HASH.js gzip 32.2 kB 32.2 kB N/A
webpack-HASH.js gzip 1.68 kB 1.68 kB N/A
Overall change 99 kB 99 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js shu/cmqq Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js shu/cmqq Change
_app-HASH.js gzip 196 B 197 B N/A
_error-HASH.js gzip 184 B 184 B
amp-HASH.js gzip 505 B 505 B
css-HASH.js gzip 324 B 325 B N/A
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 258 B 258 B
head-HASH.js gzip 352 B 352 B
hooks-HASH.js gzip 370 B 371 B N/A
image-HASH.js gzip 4.21 kB 4.21 kB
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.67 kB 2.67 kB N/A
routerDirect..HASH.js gzip 314 B 312 B N/A
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 309 B 309 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 6.57 kB 6.57 kB
Client Build Manifests
vercel/next.js canary vercel/next.js shu/cmqq Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js shu/cmqq Change
index.html gzip 530 B 528 B N/A
link.html gzip 541 B 541 B
withRouter.html gzip 525 B 523 B N/A
Overall change 541 B 541 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js shu/cmqq Change
edge-ssr.js gzip 95.3 kB 95.3 kB N/A
page.js gzip 3.04 kB 3.04 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js shu/cmqq Change
middleware-b..fest.js gzip 628 B 624 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 25.5 kB 25.5 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 990 B 990 B
Next Runtimes
vercel/next.js canary vercel/next.js shu/cmqq Change
app-page-exp...dev.js gzip 170 kB 170 kB
app-page-exp..prod.js gzip 96.8 kB 96.8 kB
app-page-tur..prod.js gzip 98.5 kB 98.5 kB
app-page-tur..prod.js gzip 92.8 kB 92.8 kB
app-page.run...dev.js gzip 144 kB 144 kB
app-page.run..prod.js gzip 91.3 kB 91.3 kB
app-route-ex...dev.js gzip 21.4 kB 21.4 kB
app-route-ex..prod.js gzip 15.1 kB 15.1 kB
app-route-tu..prod.js gzip 15.1 kB 15.1 kB
app-route-tu..prod.js gzip 14.8 kB 14.8 kB
app-route.ru...dev.js gzip 21 kB 21 kB
app-route.ru..prod.js gzip 14.8 kB 14.8 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 22.5 kB 22.5 kB
pages.runtim...dev.js gzip 23.1 kB 23.1 kB
pages.runtim..prod.js gzip 22.4 kB 22.4 kB
server.runti..prod.js gzip 50.9 kB 50.9 kB
Overall change 943 kB 943 kB
build cache
vercel/next.js canary vercel/next.js shu/cmqq Change
0.pack gzip 1.57 MB 1.57 MB N/A
index.pack gzip 106 kB 105 kB N/A
Overall change 0 B 0 B
Diff details
Diff for middleware.js

Diff too large to display

Commit: e1480ec

@shuding shuding merged commit 9677c87 into canary Mar 25, 2024
79 checks passed
@shuding shuding deleted the shu/cmqq branch March 25, 2024 17:37
shuding pushed a commit that referenced this pull request Mar 28, 2024
…#63748)

cc @shuding

### Why?

The typescript plugin in #63667 does not target the call expression or
assigned actions.

```ts
'use server'

function action() {
  return async function() {
    return 'foo'
  }
}

async function action2() {
  return 'foo'
}

export const callAction = action() // call expression
export const assignedAction = action2 // assigned
```

### Current

![Screenshot 2024-03-27 at 2 29
04 PM](https://github.com/vercel/next.js/assets/120007119/7b35edba-c423-402b-94e7-9725c4d3cccc)

### Fixed

![Screenshot 2024-03-27 at 2 29
41 PM](https://github.com/vercel/next.js/assets/120007119/e9b7c164-4053-4c56-a4fb-eb4722094355)

x-ref: #63667
Closes #63743
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants