mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
## 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
93 lines
3.4 KiB
TypeScript
93 lines
3.4 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
|
|
describe('cache-components', () => {
|
|
const { next, isNextDev, skipped } = nextTestSetup({
|
|
files: __dirname,
|
|
skipDeployment: true,
|
|
})
|
|
|
|
if (skipped) {
|
|
return
|
|
}
|
|
|
|
it('should partially prerender pages that use cookies', async () => {
|
|
let $ = await next.render$('/cookies/static-behavior', {})
|
|
if (isNextDev) {
|
|
expect($('#layout').text()).toBe('at runtime')
|
|
expect($('#page').text()).toBe('at runtime')
|
|
expect($('#x-sentinel').text()).toBe('hello')
|
|
} else {
|
|
expect($('#layout').text()).toBe('at buildtime')
|
|
expect($('#page').text()).toBe('at buildtime')
|
|
expect($('#x-sentinel').text()).toBe('hello')
|
|
}
|
|
})
|
|
|
|
it('should be able to pass cookies as a promise to another component and trigger an intermediate Suspense boundary', async () => {
|
|
const $ = await next.render$('/cookies/static-behavior/pass-deeply')
|
|
if (isNextDev) {
|
|
expect($('#layout').text()).toBe('at runtime')
|
|
expect($('#fallback').text()).toBe('at runtime')
|
|
expect($('#page').text()).toBe('at runtime')
|
|
} else {
|
|
expect($('#layout').text()).toBe('at buildtime')
|
|
expect($('#fallback').text()).toBe('at buildtime')
|
|
expect($('#page').text()).toBe('at runtime')
|
|
}
|
|
})
|
|
|
|
it('should be able to access cookie properties', async () => {
|
|
let $ = await next.render$('/cookies/exercise', {})
|
|
let cookieWarnings = next.cliOutput
|
|
.split('\n')
|
|
.filter((l) => l.includes('Route "/cookies/exercise'))
|
|
|
|
expect(cookieWarnings).toHaveLength(0)
|
|
|
|
// For...of iteration
|
|
expect($('#for-of-x-sentinel').text()).toContain('hello')
|
|
expect($('#for-of-x-sentinel-path').text()).toContain('/cookies/exercise')
|
|
expect($('#for-of-x-sentinel-rand').text()).toContain('x-sentinel-rand')
|
|
|
|
// ...spread iteration
|
|
expect($('#spread-x-sentinel').text()).toContain('hello')
|
|
expect($('#spread-x-sentinel-path').text()).toContain('/cookies/exercise')
|
|
expect($('#spread-x-sentinel-rand').text()).toContain('x-sentinel-rand')
|
|
|
|
// cookies().size
|
|
expect(parseInt($('#size-cookies').text())).toBeGreaterThanOrEqual(3)
|
|
|
|
// cookies().get('...') && cookies().getAll('...')
|
|
expect($('#get-x-sentinel').text()).toContain('hello')
|
|
expect($('#get-x-sentinel-path').text()).toContain('/cookies/exercise')
|
|
expect($('#get-x-sentinel-rand').text()).toContain('x-sentinel-rand')
|
|
|
|
// cookies().has('...')
|
|
expect($('#has-x-sentinel').text()).toContain('true')
|
|
expect($('#has-x-sentinel-foobar').text()).toContain('false')
|
|
|
|
// cookies().set('...', '...')
|
|
expect($('#set-result-x-sentinel').text()).toContain(
|
|
'Cookies can only be modified in a Server Action'
|
|
)
|
|
expect($('#set-value-x-sentinel').text()).toContain('hello')
|
|
|
|
// cookies().delete('...', '...')
|
|
expect($('#delete-result-x-sentinel').text()).toContain(
|
|
'Cookies can only be modified in a Server Action'
|
|
)
|
|
expect($('#delete-value-x-sentinel').text()).toContain('hello')
|
|
|
|
// cookies().clear()
|
|
expect($('#clear-result').text()).toContain(
|
|
'Cookies can only be modified in a Server Action'
|
|
)
|
|
expect($('#clear-value-x-sentinel').text()).toContain('hello')
|
|
|
|
// cookies().toString()
|
|
expect($('#toString').text()).toContain('x-sentinel=hello')
|
|
expect($('#toString').text()).toContain('x-sentinel-path')
|
|
expect($('#toString').text()).toContain('x-sentinel-rand=')
|
|
})
|
|
})
|