Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
130 lines
3.0 KiB
TypeScript
130 lines
3.0 KiB
TypeScript
import { promises as fs } from 'node:fs'
|
|
import { fileURLToPath } from 'node:url'
|
|
import FileSystemCache from 'next/dist/server/lib/incremental-cache/file-system-cache'
|
|
import { nodeFs } from 'next/dist/server/lib/node-fs-methods'
|
|
import {
|
|
CachedRouteKind,
|
|
IncrementalCacheKind,
|
|
} from 'next/dist/server/response-cache'
|
|
|
|
const cacheDir = fileURLToPath(new URL('./cache', import.meta.url))
|
|
|
|
describe('FileSystemCache', () => {
|
|
it('set image route', async () => {
|
|
const fsCache = new FileSystemCache({
|
|
_requestHeaders: {},
|
|
flushToDisk: true,
|
|
fs: nodeFs,
|
|
serverDistDir: cacheDir,
|
|
revalidatedTags: [],
|
|
})
|
|
|
|
const binary = await fs.readFile(
|
|
fileURLToPath(new URL('./images/icon.png', import.meta.url))
|
|
)
|
|
|
|
await fsCache.set(
|
|
'icon.png',
|
|
{
|
|
body: binary,
|
|
headers: {
|
|
'Content-Type': 'image/png',
|
|
},
|
|
status: 200,
|
|
kind: CachedRouteKind.APP_ROUTE,
|
|
},
|
|
{}
|
|
)
|
|
|
|
expect(
|
|
(
|
|
await fsCache.get('icon.png', {
|
|
kind: IncrementalCacheKind.APP_ROUTE,
|
|
isFallback: undefined,
|
|
})
|
|
)?.value
|
|
).toEqual({
|
|
body: binary,
|
|
headers: {
|
|
'Content-Type': 'image/png',
|
|
},
|
|
status: 200,
|
|
kind: IncrementalCacheKind.APP_ROUTE,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('FileSystemCache (isrMemory 0)', () => {
|
|
const fsCache = new FileSystemCache({
|
|
_requestHeaders: {},
|
|
flushToDisk: true,
|
|
fs: nodeFs,
|
|
serverDistDir: cacheDir,
|
|
revalidatedTags: [],
|
|
maxMemoryCacheSize: 0, // disable memory cache
|
|
})
|
|
|
|
it('should cache fetch', async () => {
|
|
await fsCache.set(
|
|
'fetch-cache',
|
|
{
|
|
kind: CachedRouteKind.FETCH,
|
|
data: {
|
|
headers: {},
|
|
body: 'MTcwMDA1NjM4MQ==',
|
|
status: 200,
|
|
url: 'http://my-api.local',
|
|
},
|
|
revalidate: 30,
|
|
},
|
|
{
|
|
fetchCache: true,
|
|
fetchUrl: 'http://my-api.local',
|
|
fetchIdx: 5,
|
|
tags: ['server-time'],
|
|
}
|
|
)
|
|
|
|
const res = await fsCache.get('fetch-cache', {
|
|
tags: ['server-time'],
|
|
kind: IncrementalCacheKind.FETCH,
|
|
})
|
|
|
|
expect(res?.value).toEqual({
|
|
kind: 'FETCH',
|
|
data: {
|
|
headers: {},
|
|
body: 'MTcwMDA1NjM4MQ==',
|
|
status: 200,
|
|
url: 'http://my-api.local',
|
|
},
|
|
revalidate: 30,
|
|
tags: ['server-time'],
|
|
})
|
|
})
|
|
|
|
it('should cache unstable_cache', async () => {
|
|
await fsCache.set(
|
|
'unstable-cache',
|
|
{
|
|
kind: CachedRouteKind.FETCH,
|
|
data: { headers: {}, body: '1700056381', status: 200, url: '' },
|
|
revalidate: 30,
|
|
},
|
|
{ fetchCache: true, tags: ['server-time2'] }
|
|
)
|
|
|
|
const res = await fsCache.get('unstable-cache', {
|
|
tags: ['server-time'],
|
|
kind: IncrementalCacheKind.FETCH,
|
|
})
|
|
|
|
expect(res?.value).toEqual({
|
|
kind: 'FETCH',
|
|
data: { headers: {}, body: '1700056381', status: 200, url: '' },
|
|
revalidate: 30,
|
|
tags: ['server-time2'],
|
|
})
|
|
})
|
|
})
|