diff --git a/crates/next-custom-transforms/src/transforms/react_server_components.rs b/crates/next-custom-transforms/src/transforms/react_server_components.rs index fb66abd2ec553..1a12b6b86b366 100644 --- a/crates/next-custom-transforms/src/transforms/react_server_components.rs +++ b/crates/next-custom-transforms/src/transforms/react_server_components.rs @@ -633,6 +633,7 @@ impl ReactServerComponentValidator { "PureComponent", "useDeferredValue", "useEffect", + "useEffectEvent", "useImperativeHandle", "useInsertionEffect", "useLayoutEffect", diff --git a/lerna.json b/lerna.json index 8b652056b7261..3d26ebaef3365 100644 --- a/lerna.json +++ b/lerna.json @@ -15,5 +15,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "16.2.0-canary.7" + "version": "16.2.0-canary.8" } \ No newline at end of file diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index a9e3afd44ddfa..f98c6c0388202 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 9088d1cf22b66..fe1b4ecd6709a 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "ESLint configuration used by Next.js.", "license": "MIT", "repository": { @@ -12,7 +12,7 @@ "dist" ], "dependencies": { - "@next/eslint-plugin-next": "16.2.0-canary.7", + "@next/eslint-plugin-next": "16.2.0-canary.8", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 0371b9daa7b67..3982558d39e43 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,7 +1,7 @@ { "name": "@next/eslint-plugin-internal", "private": true, - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "ESLint plugin for working on Next.js.", "exports": { ".": "./src/eslint-plugin-internal.js" diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index cceffab8af76d..082cfac1d6b32 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/font/package.json b/packages/font/package.json index b5d3a54a8a65a..e7f1e060c4fa5 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 485ce1a943c9e..bb906e59d03e4 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 4295a36a375aa..4e65407507e9a 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 68a426f885ee6..2c4466a6120b2 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 0f52c009f8def..62942bfb30f98 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index ef33bdebace3f..dd3dee653f436 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index ade076d0eceea..c3c587bb7be31 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 12d610195283f..7ddfad01ff5c6 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-routing/package.json b/packages/next-routing/package.json index fdf1b86bec0e9..7a2a3eea7ef2d 100644 --- a/packages/next-routing/package.json +++ b/packages/next-routing/package.json @@ -1,6 +1,6 @@ { "name": "@next/routing", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "keywords": [ "react", "next", diff --git a/packages/next-rspack/package.json b/packages/next-rspack/package.json index ab0ffe821a3e6..d32379f187bc6 100644 --- a/packages/next-rspack/package.json +++ b/packages/next-rspack/package.json @@ -1,6 +1,6 @@ { "name": "next-rspack", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/next-rspack" diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index c4f268a183edf..eebc4272f05f0 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "private": true, "files": [ "native/" diff --git a/packages/next/package.json b/packages/next/package.json index 7cf7809300213..6985f656f4429 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -97,7 +97,7 @@ ] }, "dependencies": { - "@next/env": "16.2.0-canary.7", + "@next/env": "16.2.0-canary.8", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", @@ -162,11 +162,11 @@ "@modelcontextprotocol/sdk": "1.18.1", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "16.2.0-canary.7", - "@next/polyfill-module": "16.2.0-canary.7", - "@next/polyfill-nomodule": "16.2.0-canary.7", - "@next/react-refresh-utils": "16.2.0-canary.7", - "@next/swc": "16.2.0-canary.7", + "@next/font": "16.2.0-canary.8", + "@next/polyfill-module": "16.2.0-canary.8", + "@next/polyfill-nomodule": "16.2.0-canary.8", + "@next/react-refresh-utils": "16.2.0-canary.8", + "@next/swc": "16.2.0-canary.8", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.51.1", "@rspack/core": "1.6.7", diff --git a/packages/next/src/lib/format-server-error.ts b/packages/next/src/lib/format-server-error.ts index 3604ad67133ae..5a6715a3bf232 100644 --- a/packages/next/src/lib/format-server-error.ts +++ b/packages/next/src/lib/format-server-error.ts @@ -1,6 +1,7 @@ const invalidServerComponentReactHooks = [ 'useDeferredValue', 'useEffect', + 'useEffectEvent', 'useImperativeHandle', 'useInsertionEffect', 'useLayoutEffect', diff --git a/packages/next/src/server/typescript/constant.ts b/packages/next/src/server/typescript/constant.ts index 42ddd95ce9eb5..285bc1d84ea7b 100644 --- a/packages/next/src/server/typescript/constant.ts +++ b/packages/next/src/server/typescript/constant.ts @@ -26,6 +26,7 @@ export const LEGACY_CONFIG_EXPORT = 'config' export const DISALLOWED_SERVER_REACT_APIS: string[] = [ 'useState', 'useEffect', + 'useEffectEvent', 'useLayoutEffect', 'useDeferredValue', 'useImperativeHandle', diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index 4cb36da1df0f0..1062d1a719763 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 252628214a8a7..975652dae2b90 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "16.2.0-canary.7", + "version": "16.2.0-canary.8", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "16.2.0-canary.7", + "next": "16.2.0-canary.8", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.9.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b7282694dfc5..9f5d4c62d415c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1008,7 +1008,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../eslint-plugin-next eslint: specifier: '>=9.0.0' @@ -1085,7 +1085,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../next-env '@swc/helpers': specifier: 0.5.15 @@ -1213,19 +1213,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../font '@next/polyfill-module': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../react-refresh-utils '@next/swc': - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1943,7 +1943,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 16.2.0-canary.7 + specifier: 16.2.0-canary.8 version: link:../next outdent: specifier: 0.8.0 diff --git a/test/development/acceptance-app/fixtures/rsc-build-errors/app/server-with-errors/react-apis/useeffectevent/page.js b/test/development/acceptance-app/fixtures/rsc-build-errors/app/server-with-errors/react-apis/useeffectevent/page.js new file mode 100644 index 0000000000000..9c96d472babb0 --- /dev/null +++ b/test/development/acceptance-app/fixtures/rsc-build-errors/app/server-with-errors/react-apis/useeffectevent/page.js @@ -0,0 +1,7 @@ +import { useEffectEvent } from 'react' + +console.log({ useEffectEvent }) + +export default function Page() { + return null +} diff --git a/test/development/acceptance-app/rsc-build-errors.test.ts b/test/development/acceptance-app/rsc-build-errors.test.ts index 8f4caaca937cc..36c67bf15bf75 100644 --- a/test/development/acceptance-app/rsc-build-errors.test.ts +++ b/test/development/acceptance-app/rsc-build-errors.test.ts @@ -205,6 +205,7 @@ describe('Error overlay - RSC build errors', () => { 'PureComponent', 'useDeferredValue', 'useEffect', + 'useEffectEvent', 'useImperativeHandle', 'useInsertionEffect', 'useLayoutEffect',