922b5de06f
When calling the server (via `callServer`), we concat all closure values (`$$bound`) and arguments of the function call into one array on the client. Hence on the server, we will have to compile the function differently to support that. With this change, the compiled function will have a `$$with_bound` flag to indicate that if it accepts closure values. If so, the only argument passed will be an array like `[...bound_values, ...fn_args]`, and we compile the function parameters to `(closure, arg1 = closure[N], arg2 = closure[N + 1], ...)` where `N` is the number of the closure identifiers. This way we can still fill these arguments by only pass an "bound + args" array. If it doesn't accept closure values, it will be directly called with `...fn_args` so no compilation change needed. The reason that we use `arg1 = closure[N]` is that this can support complex patterns in parameters such as `f(closure, {a} = closure[1], [b] = closure[2])`. fix NEXT-487 ([link](https://linear.app/vercel/issue/NEXT-487)) |
||
---|---|---|
.. | ||
create-next-app | ||
eslint-config-next | ||
eslint-plugin-next | ||
font | ||
next | ||
next-bundle-analyzer | ||
next-codemod | ||
next-env | ||
next-mdx | ||
next-plugin-storybook | ||
next-polyfill-module | ||
next-polyfill-nomodule | ||
next-swc | ||
react-dev-overlay | ||
react-refresh-utils |