Files
Wyatt JohnsonandGitHub 8abbb3dc2e refactor: rename experimental.dynamicIO to experimental.cacheComponents (#81562)
## What?

Rename `experimental.dynamicIO` to `experimental.cacheComponents` across
the Next.js codebase.

## Why?

We're going to be merging the functionality of the `ppr`, `dynamicIO`
and `useCache` experimental flags into the singular `cacheComponents`
flag to reduce complexity of the codebase and simplify adoption for
users wanting to experiment with experimental features.

## How?

- Renamed the configuration option from `experimental.dynamicIO` to
`experimental.cacheComponents`
- Added deprecation handling with automatic migration for the old option
name
- Updated all documentation, tests, and internal references
- Updated Rust code in SWC transforms and Turbopack
- Maintained backward compatibility with deprecation warnings

NAR-158
2025-07-17 19:30:28 -06:00

88 lines
4.0 KiB
TypeScript

import { nextTestSetup } from 'e2e-utils'
// I am temporarily deactivating these tests. We turned off the dev time warning but will reintroduce it when we add in dev-time prerendering.
// The tests will likely have to change but I'd like to keep the fixture and assertions as a starting point.
describe.skip('dynamic-requests warnings', () => {
const { next } = nextTestSetup({
files: __dirname,
})
let cliIndex = 0
it('warns on reading the current time in the prerender portion of a dev render', async () => {
await next.fetch('/platform/render/time')
expect(next.cliOutput).not.toContain(
'Route "/platform/prerender/time" used `Date()`'
)
expect(next.cliOutput).not.toContain(
'Route "/platform/prerender/time" used `new Date()`'
)
expect(next.cliOutput).not.toContain(
'Route "/platform/prerender/time" used `Date.now()`'
)
expect(next.cliOutput).not.toContain(
'Route "/platform/prerender/time" used `performance.now()`'
)
await next.fetch('/platform/prerender/time')
expect(next.cliOutput).toContain(
'Route "/platform/prerender/time" used `Date()` instead of using `performance` or without explicitly calling `await connection()` beforehand.'
)
expect(next.cliOutput).toContain(
'Route "/platform/prerender/time" used `new Date()` instead of using `performance` or without explicitly calling `await connection()` beforehand.'
)
expect(next.cliOutput).toContain(
'Route "/platform/prerender/time" used `Date.now()` instead of using `performance` or without explicitly calling `await connection()` beforehand.'
)
expect(next.cliOutput).not.toContain(
'Route "/platform/prerender/time" used `performance.now()`'
)
cliIndex = next.cliOutput.length
})
it('warns on reading the random numbers in the prerender portion of a dev render', async () => {
await next.fetch('/platform/render/random')
expect(next.cliOutput.slice(cliIndex)).not.toContain(
'Route /platform/prerender/random used `Math.random()`'
)
await next.fetch('/platform/prerender/random')
expect(next.cliOutput.slice(cliIndex)).toContain(
'Route /platform/prerender/random used `Math.random()` outside of `"use cache"` and without explicitly calling `await connection()` beforehand.'
)
cliIndex = next.cliOutput.length
})
it('warns on reading the random values from web crypto APIs in the prerender portion of a dev render', async () => {
await next.fetch('/platform/render/web-crypto')
expect(next.cliOutput.slice(cliIndex)).not.toContain(
'Route /platform/prerender/web-crypto used `crypto.getRandomValues()`'
)
expect(next.cliOutput.slice(cliIndex)).not.toContain(
'Route /platform/prerender/web-crypto used `crypto.randomUUID()`'
)
await next.fetch('/platform/prerender/web-crypto')
expect(next.cliOutput.slice(cliIndex)).toContain(
'Route /platform/prerender/web-crypto used `crypto.getRandomValues()` outside of `"use cache"` and without explicitly calling `await connection()` beforehand.'
)
expect(next.cliOutput.slice(cliIndex)).toContain(
'Route /platform/prerender/web-crypto used `crypto.randomUUID()` outside of `"use cache"` and without explicitly calling `await connection()` beforehand.'
)
cliIndex = next.cliOutput.length
})
it('warns on reading the random values from node crypto APIs in the prerender portion of a dev render', async () => {
await next.fetch('/platform/render/node-crypto')
expect(next.cliOutput.slice(cliIndex)).not.toContain(
"Route /platform/prerender/node-crypto used `require('node:crypto').randomInt(min, max)`"
)
await next.fetch('/platform/prerender/node-crypto')
expect(next.cliOutput.slice(cliIndex)).toContain(
'Route /platform/prerender/node-crypto used `require(\'node:crypto\').randomInt(min, max)` outside of `"use cache"` and without explicitly calling `await connection()` beforehand.'
)
cliIndex = next.cliOutput.length
})
})