@trieb.work/nextjs-turbo-redis-cache 1.14.1 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/skills/testing/SKILL.md +121 -0
- package/.github/workflows/ci.yml +155 -70
- package/.github/workflows/pages.yml +38 -0
- package/ARCHITECTURE.md +431 -0
- package/CHANGELOG.md +19 -0
- package/README.md +220 -48
- package/dist/index.d.mts +77 -2
- package/dist/index.d.ts +77 -2
- package/dist/index.js +109 -23
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +106 -23
- package/dist/index.mjs.map +1 -1
- package/docs/index.html +139 -0
- package/docs/robots.txt +4 -0
- package/docs/sitemap.xml +8 -0
- package/docs/styles.css +141 -0
- package/eslint.config.mjs +1 -1
- package/package.json +16 -18
- package/playwright.config.ts +5 -3
- package/src/CacheComponentsHandler.ts +57 -2
- package/src/RedisStringsHandler.ts +48 -11
- package/src/SyncedMap.ts +62 -13
- package/src/index.ts +4 -0
- package/src/serializer.ts +59 -0
- package/test/README.md +179 -0
- package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/package.json +6 -6
- package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-15-4-11}/pnpm-lock.yaml +89 -105
- package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/package.json +3 -3
- package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/pnpm-lock.yaml +53 -53
- package/test/nextjs-test-projects/next-app-16-0-11-cache-components/package.json +28 -0
- package/test/nextjs-test-projects/next-app-16-0-11-cache-components/pnpm-lock.yaml +4206 -0
- package/test/nextjs-test-projects/next-app-16-0-11-cache-components/src/app/api/cached-with-cachelife/route.ts +24 -0
- package/test/nextjs-test-projects/next-app-16-2-6/eslint.config.mjs +18 -0
- package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/package.json +3 -3
- package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/pnpm-lock.yaml +54 -60
- package/test/nextjs-test-projects/next-app-16-2-6/postcss.config.mjs +7 -0
- package/test/nextjs-test-projects/next-app-16-2-6/src/app/favicon.ico +0 -0
- package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-2-6}/tsconfig.json +9 -2
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/cache-handler.js +3 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/next.config.ts +13 -0
- package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6-cache-components}/package.json +3 -3
- package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6-cache-components}/pnpm-lock.yaml +54 -60
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-static-fetch/route.ts +19 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-with-cachelife/route.ts +24 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-with-tag/route.ts +21 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/revalidate-tag/route.ts +19 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/revalidated-fetch/route.ts +19 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/cachelife-short/page.tsx +110 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/page.tsx +90 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/runtime-data-suspense/page.tsx +127 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/stale-while-revalidate/page.tsx +130 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/tag-invalidation/page.tsx +127 -0
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/use-cache-nondeterministic/page.tsx +110 -0
- package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/layout.tsx +0 -2
- package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/update-tag-test/page.tsx +22 -0
- package/{tests → test/playwright}/update-tag.spec.ts +1 -1
- package/test/{integration → vitest/integration}/build-id-prefix.integration.test.ts +2 -2
- package/test/{cache-components/cache-components.integration.spec.ts → vitest/integration/cache-components/cache-components.integration.test.ts} +46 -3
- package/test/{cache-components/redis-kill-reconnect.spec.ts → vitest/integration/cache-components/redis-kill-reconnect.test.ts} +28 -7
- package/test/vitest/integration/cache-components/redis-quit-vs-disconnect.test.ts +59 -0
- package/test/vitest/integration/cache-components/redis-subscriber-outage.test.ts +100 -0
- package/test/{cache-components → vitest/integration/cache-components}/scripts/redis-kill-reconnect.ts +31 -8
- package/test/vitest/integration/cache-components/scripts/redis-quit-vs-disconnect.ts +113 -0
- package/test/vitest/integration/cache-components/scripts/redis-subscriber-outage.ts +379 -0
- package/test/vitest/integration/cache-components/scripts/redis-test-helpers.ts +155 -0
- package/test/{integration → vitest/integration}/nextjs-cache-handler.integration.test.ts +17 -10
- package/test/vitest/unit/SyncedMap-reconnect-repro.test.ts +154 -0
- package/{src → test/vitest/unit}/index.test.ts +3 -3
- package/test/{cache-components/reconnect-socket-already-opened.spec.ts → vitest/unit/reconnect-socket-already-opened.test.ts} +1 -1
- package/test/vitest/unit/serializer.test.ts +182 -0
- package/{src → test/vitest/unit}/utils/prefix.test.ts +1 -1
- package/vite.config.ts +4 -3
- package/vitest.cache-components.config.ts +1 -1
- package/test/browser/update-tag.browser.test.ts +0 -41
- package/test/integration/next-app-15-0-3/next.config.js +0 -6
- package/test/integration/next-app-15-0-3/package-lock.json +0 -5833
- package/test/integration/next-app-15-0-3/pnpm-lock.yaml +0 -3710
- package/test/integration/next-app-15-3-2/next.config.js +0 -6
- package/test/integration/next-app-15-3-2/package.json +0 -33
- package/test/integration/next-app-15-3-2/pnpm-lock.yaml +0 -3720
- package/test/integration/next-app-15-3-2/postcss.config.mjs +0 -5
- package/test/integration/next-app-15-3-2/src/app/api/revalidateTag/route.ts +0 -15
- package/test/integration/next-app-15-4-7/eslint.config.mjs +0 -16
- package/test/integration/next-app-15-4-7/package-lock.json +0 -5969
- package/test/integration/next-app-15-4-7/package.json +0 -33
- package/test/integration/next-app-15-4-7/postcss.config.mjs +0 -5
- package/test/integration/next-app-15-4-7/src/app/api/revalidateTag/route.ts +0 -15
- package/test/integration/next-app-15-4-7/tsconfig.json +0 -27
- package/test/integration/next-app-16-0-3/src/app/api/cached-static-fetch/route.ts +0 -18
- package/test/integration/next-app-16-0-3/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -27
- package/test/integration/next-app-16-0-3/src/app/api/revalidatePath/route.ts +0 -15
- package/test/integration/next-app-16-0-3/src/app/api/revalidated-fetch/route.ts +0 -17
- package/test/integration/next-app-16-0-3/src/app/api/uncached-fetch/route.ts +0 -15
- package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -34
- package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-0-3/src/app/pages/no-fetch/default-page/page.tsx +0 -55
- package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -35
- package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -32
- package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-2-3/src/app/api/cached-static-fetch/route.ts +0 -18
- package/test/integration/next-app-16-2-3/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -27
- package/test/integration/next-app-16-2-3/src/app/api/revalidatePath/route.ts +0 -15
- package/test/integration/next-app-16-2-3/src/app/api/revalidated-fetch/route.ts +0 -17
- package/test/integration/next-app-16-2-3/src/app/api/uncached-fetch/route.ts +0 -15
- package/test/integration/next-app-16-2-3/src/app/globals.css +0 -26
- package/test/integration/next-app-16-2-3/src/app/layout.tsx +0 -59
- package/test/integration/next-app-16-2-3/src/app/page.tsx +0 -755
- package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -34
- package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-2-3/src/app/pages/no-fetch/default-page/page.tsx +0 -55
- package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -35
- package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -19
- package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -32
- package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
- package/test/integration/next-app-16-2-3/src/app/revalidation-interface.tsx +0 -267
- package/test/integration/next-app-16-2-3-cache-components/public/file.svg +0 -1
- package/test/integration/next-app-16-2-3-cache-components/public/globe.svg +0 -1
- package/test/integration/next-app-16-2-3-cache-components/public/next.svg +0 -1
- package/test/integration/next-app-16-2-3-cache-components/public/vercel.svg +0 -1
- package/test/integration/next-app-16-2-3-cache-components/public/window.svg +0 -1
- package/test/integration/next-app-customized/README.md +0 -36
- package/test/integration/next-app-customized/eslint.config.mjs +0 -16
- package/vitest.browser.config.ts +0 -10
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/README.md +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/eslint.config.mjs +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-15-4-11}/next.config.js +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-15-4-11}/package-lock.json +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/postcss.config.mjs +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/file.svg +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/globe.svg +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/next.svg +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/vercel.svg +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/window.svg +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/cached-static-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/revalidatePath/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/revalidateTag/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/uncached-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/globals.css +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/layout.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/no-fetch/default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/revalidation-interface.tsx +0 -0
- /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/tsconfig.json +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/README.md +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/eslint.config.mjs +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/next.config.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/postcss.config.mjs +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/cached-static-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/revalidatePath/route.ts +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/src/app/api/revalidateTag/route.ts +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/uncached-fetch/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/src/app/favicon.ico +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/globals.css +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/layout.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/no-fetch/default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/revalidation-interface.tsx +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/src/app/update-tag-test/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/tsconfig.json +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/README.md +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/cache-handler.js +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/eslint.config.mjs +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/next.config.ts +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/postcss.config.mjs +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/file.svg +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/globe.svg +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/next.svg +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/vercel.svg +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/window.svg +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/api/cached-static-fetch/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/api/cached-with-tag/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/api/revalidate-tag/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/api/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/cachelife-short/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/runtime-data-suspense/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/stale-while-revalidate/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/tag-invalidation/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/cache-lab/use-cache-nondeterministic/page.tsx +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/favicon.ico +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/globals.css +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/layout.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/page.tsx +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/revalidation-interface.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/update-tag-test/page.tsx +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/tsconfig.json +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/README.md +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/next.config.ts +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/cached-static-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/revalidatePath/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/src/app/api/revalidateTag/route.ts +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/revalidated-fetch/route.ts +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/uncached-fetch/route.ts +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/src/app/globals.css +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/layout.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/src/app/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/no-fetch/default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -0
- /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/src/app/revalidation-interface.tsx +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/src/app/update-tag-test/page.tsx +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/README.md +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/eslint.config.mjs +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/postcss.config.mjs +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/file.svg +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/globe.svg +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/next.svg +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/vercel.svg +0 -0
- /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/window.svg +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/favicon.ico +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/globals.css +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/page.tsx +0 -0
- /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/revalidation-interface.tsx +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/tsconfig.json +0 -0
- /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-customized}/README.md +0 -0
- /package/test/{integration → nextjs-test-projects}/next-app-customized/customized-cache-handler.js +0 -0
- /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-customized}/eslint.config.mjs +0 -0
- /package/test/{integration → nextjs-test-projects}/next-app-customized/next.config.js +0 -0
- /package/{tests → test/playwright}/cache-lab.spec.ts +0 -0
|
@@ -10,10 +10,10 @@ importers:
|
|
|
10
10
|
dependencies:
|
|
11
11
|
'@trieb.work/nextjs-turbo-redis-cache':
|
|
12
12
|
specifier: file:../../../
|
|
13
|
-
version: file:../../..(next@16.2.
|
|
13
|
+
version: file:../../..(next@16.2.6(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(redis@4.7.0)
|
|
14
14
|
next:
|
|
15
|
-
specifier: 16.2.
|
|
16
|
-
version: 16.2.
|
|
15
|
+
specifier: 16.2.6
|
|
16
|
+
version: 16.2.6(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
|
17
17
|
react:
|
|
18
18
|
specifier: 19.2.0
|
|
19
19
|
version: 19.2.0
|
|
@@ -40,8 +40,8 @@ importers:
|
|
|
40
40
|
specifier: ^9
|
|
41
41
|
version: 9.39.1(jiti@2.6.1)
|
|
42
42
|
eslint-config-next:
|
|
43
|
-
specifier: 16.2.
|
|
44
|
-
version: 16.2.
|
|
43
|
+
specifier: 16.2.6
|
|
44
|
+
version: 16.2.6(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
|
45
45
|
tailwindcss:
|
|
46
46
|
specifier: ^4
|
|
47
47
|
version: 4.1.17
|
|
@@ -357,60 +357,60 @@ packages:
|
|
|
357
357
|
'@napi-rs/wasm-runtime@0.2.12':
|
|
358
358
|
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
|
|
359
359
|
|
|
360
|
-
'@next/env@16.2.
|
|
361
|
-
resolution: {integrity: sha512-
|
|
360
|
+
'@next/env@16.2.6':
|
|
361
|
+
resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==}
|
|
362
362
|
|
|
363
|
-
'@next/eslint-plugin-next@16.2.
|
|
364
|
-
resolution: {integrity: sha512-
|
|
363
|
+
'@next/eslint-plugin-next@16.2.6':
|
|
364
|
+
resolution: {integrity: sha512-Z8l6o4JWKUl755x4R+wogD86KPeU+Ckw4K+SYG4kHeOJtRenDeK+OSbGcqZpDtbwn9DsJVdir2UxmwXuinUbUw==}
|
|
365
365
|
|
|
366
|
-
'@next/swc-darwin-arm64@16.2.
|
|
367
|
-
resolution: {integrity: sha512-
|
|
366
|
+
'@next/swc-darwin-arm64@16.2.6':
|
|
367
|
+
resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==}
|
|
368
368
|
engines: {node: '>= 10'}
|
|
369
369
|
cpu: [arm64]
|
|
370
370
|
os: [darwin]
|
|
371
371
|
|
|
372
|
-
'@next/swc-darwin-x64@16.2.
|
|
373
|
-
resolution: {integrity: sha512-
|
|
372
|
+
'@next/swc-darwin-x64@16.2.6':
|
|
373
|
+
resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==}
|
|
374
374
|
engines: {node: '>= 10'}
|
|
375
375
|
cpu: [x64]
|
|
376
376
|
os: [darwin]
|
|
377
377
|
|
|
378
|
-
'@next/swc-linux-arm64-gnu@16.2.
|
|
379
|
-
resolution: {integrity: sha512-
|
|
378
|
+
'@next/swc-linux-arm64-gnu@16.2.6':
|
|
379
|
+
resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==}
|
|
380
380
|
engines: {node: '>= 10'}
|
|
381
381
|
cpu: [arm64]
|
|
382
382
|
os: [linux]
|
|
383
383
|
libc: [glibc]
|
|
384
384
|
|
|
385
|
-
'@next/swc-linux-arm64-musl@16.2.
|
|
386
|
-
resolution: {integrity: sha512
|
|
385
|
+
'@next/swc-linux-arm64-musl@16.2.6':
|
|
386
|
+
resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==}
|
|
387
387
|
engines: {node: '>= 10'}
|
|
388
388
|
cpu: [arm64]
|
|
389
389
|
os: [linux]
|
|
390
390
|
libc: [musl]
|
|
391
391
|
|
|
392
|
-
'@next/swc-linux-x64-gnu@16.2.
|
|
393
|
-
resolution: {integrity: sha512
|
|
392
|
+
'@next/swc-linux-x64-gnu@16.2.6':
|
|
393
|
+
resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==}
|
|
394
394
|
engines: {node: '>= 10'}
|
|
395
395
|
cpu: [x64]
|
|
396
396
|
os: [linux]
|
|
397
397
|
libc: [glibc]
|
|
398
398
|
|
|
399
|
-
'@next/swc-linux-x64-musl@16.2.
|
|
400
|
-
resolution: {integrity: sha512-
|
|
399
|
+
'@next/swc-linux-x64-musl@16.2.6':
|
|
400
|
+
resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==}
|
|
401
401
|
engines: {node: '>= 10'}
|
|
402
402
|
cpu: [x64]
|
|
403
403
|
os: [linux]
|
|
404
404
|
libc: [musl]
|
|
405
405
|
|
|
406
|
-
'@next/swc-win32-arm64-msvc@16.2.
|
|
407
|
-
resolution: {integrity: sha512-
|
|
406
|
+
'@next/swc-win32-arm64-msvc@16.2.6':
|
|
407
|
+
resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==}
|
|
408
408
|
engines: {node: '>= 10'}
|
|
409
409
|
cpu: [arm64]
|
|
410
410
|
os: [win32]
|
|
411
411
|
|
|
412
|
-
'@next/swc-win32-x64-msvc@16.2.
|
|
413
|
-
resolution: {integrity: sha512-
|
|
412
|
+
'@next/swc-win32-x64-msvc@16.2.6':
|
|
413
|
+
resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==}
|
|
414
414
|
engines: {node: '>= 10'}
|
|
415
415
|
cpu: [x64]
|
|
416
416
|
os: [win32]
|
|
@@ -832,10 +832,6 @@ packages:
|
|
|
832
832
|
engines: {node: '>=6.0.0'}
|
|
833
833
|
hasBin: true
|
|
834
834
|
|
|
835
|
-
baseline-browser-mapping@2.8.31:
|
|
836
|
-
resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==}
|
|
837
|
-
hasBin: true
|
|
838
|
-
|
|
839
835
|
brace-expansion@1.1.12:
|
|
840
836
|
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
|
|
841
837
|
|
|
@@ -1006,8 +1002,8 @@ packages:
|
|
|
1006
1002
|
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
|
1007
1003
|
engines: {node: '>=10'}
|
|
1008
1004
|
|
|
1009
|
-
eslint-config-next@16.2.
|
|
1010
|
-
resolution: {integrity: sha512-
|
|
1005
|
+
eslint-config-next@16.2.6:
|
|
1006
|
+
resolution: {integrity: sha512-z2ELYSkyrrJ6cuunTU8vhsT/RpouPkjaSah06nVW6Rg2Hpg0Vs8s497/e5s8G8qtdp4ccsiovz5P1rv+5VSW2Q==}
|
|
1011
1007
|
peerDependencies:
|
|
1012
1008
|
eslint: '>=9.0.0'
|
|
1013
1009
|
typescript: '>=3.3.1'
|
|
@@ -1588,8 +1584,8 @@ packages:
|
|
|
1588
1584
|
natural-compare@1.4.0:
|
|
1589
1585
|
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
|
1590
1586
|
|
|
1591
|
-
next@16.2.
|
|
1592
|
-
resolution: {integrity: sha512-
|
|
1587
|
+
next@16.2.6:
|
|
1588
|
+
resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==}
|
|
1593
1589
|
engines: {node: '>=20.9.0'}
|
|
1594
1590
|
hasBin: true
|
|
1595
1591
|
peerDependencies:
|
|
@@ -2307,34 +2303,34 @@ snapshots:
|
|
|
2307
2303
|
'@tybys/wasm-util': 0.10.1
|
|
2308
2304
|
optional: true
|
|
2309
2305
|
|
|
2310
|
-
'@next/env@16.2.
|
|
2306
|
+
'@next/env@16.2.6': {}
|
|
2311
2307
|
|
|
2312
|
-
'@next/eslint-plugin-next@16.2.
|
|
2308
|
+
'@next/eslint-plugin-next@16.2.6':
|
|
2313
2309
|
dependencies:
|
|
2314
2310
|
fast-glob: 3.3.1
|
|
2315
2311
|
|
|
2316
|
-
'@next/swc-darwin-arm64@16.2.
|
|
2312
|
+
'@next/swc-darwin-arm64@16.2.6':
|
|
2317
2313
|
optional: true
|
|
2318
2314
|
|
|
2319
|
-
'@next/swc-darwin-x64@16.2.
|
|
2315
|
+
'@next/swc-darwin-x64@16.2.6':
|
|
2320
2316
|
optional: true
|
|
2321
2317
|
|
|
2322
|
-
'@next/swc-linux-arm64-gnu@16.2.
|
|
2318
|
+
'@next/swc-linux-arm64-gnu@16.2.6':
|
|
2323
2319
|
optional: true
|
|
2324
2320
|
|
|
2325
|
-
'@next/swc-linux-arm64-musl@16.2.
|
|
2321
|
+
'@next/swc-linux-arm64-musl@16.2.6':
|
|
2326
2322
|
optional: true
|
|
2327
2323
|
|
|
2328
|
-
'@next/swc-linux-x64-gnu@16.2.
|
|
2324
|
+
'@next/swc-linux-x64-gnu@16.2.6':
|
|
2329
2325
|
optional: true
|
|
2330
2326
|
|
|
2331
|
-
'@next/swc-linux-x64-musl@16.2.
|
|
2327
|
+
'@next/swc-linux-x64-musl@16.2.6':
|
|
2332
2328
|
optional: true
|
|
2333
2329
|
|
|
2334
|
-
'@next/swc-win32-arm64-msvc@16.2.
|
|
2330
|
+
'@next/swc-win32-arm64-msvc@16.2.6':
|
|
2335
2331
|
optional: true
|
|
2336
2332
|
|
|
2337
|
-
'@next/swc-win32-x64-msvc@16.2.
|
|
2333
|
+
'@next/swc-win32-x64-msvc@16.2.6':
|
|
2338
2334
|
optional: true
|
|
2339
2335
|
|
|
2340
2336
|
'@nodelib/fs.scandir@2.1.5':
|
|
@@ -2452,9 +2448,9 @@ snapshots:
|
|
|
2452
2448
|
postcss: 8.5.6
|
|
2453
2449
|
tailwindcss: 4.1.17
|
|
2454
2450
|
|
|
2455
|
-
'@trieb.work/nextjs-turbo-redis-cache@file:../../..(next@16.2.
|
|
2451
|
+
'@trieb.work/nextjs-turbo-redis-cache@file:../../..(next@16.2.6(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(redis@4.7.0)':
|
|
2456
2452
|
dependencies:
|
|
2457
|
-
next: 16.2.
|
|
2453
|
+
next: 16.2.6(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
|
2458
2454
|
redis: 4.7.0
|
|
2459
2455
|
|
|
2460
2456
|
'@tybys/wasm-util@0.10.1':
|
|
@@ -2736,8 +2732,6 @@ snapshots:
|
|
|
2736
2732
|
|
|
2737
2733
|
baseline-browser-mapping@2.10.27: {}
|
|
2738
2734
|
|
|
2739
|
-
baseline-browser-mapping@2.8.31: {}
|
|
2740
|
-
|
|
2741
2735
|
brace-expansion@1.1.12:
|
|
2742
2736
|
dependencies:
|
|
2743
2737
|
balanced-match: 1.0.2
|
|
@@ -2753,7 +2747,7 @@ snapshots:
|
|
|
2753
2747
|
|
|
2754
2748
|
browserslist@4.28.0:
|
|
2755
2749
|
dependencies:
|
|
2756
|
-
baseline-browser-mapping: 2.
|
|
2750
|
+
baseline-browser-mapping: 2.10.27
|
|
2757
2751
|
caniuse-lite: 1.0.30001756
|
|
2758
2752
|
electron-to-chromium: 1.5.259
|
|
2759
2753
|
node-releases: 2.0.27
|
|
@@ -2975,9 +2969,9 @@ snapshots:
|
|
|
2975
2969
|
|
|
2976
2970
|
escape-string-regexp@4.0.0: {}
|
|
2977
2971
|
|
|
2978
|
-
eslint-config-next@16.2.
|
|
2972
|
+
eslint-config-next@16.2.6(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
|
2979
2973
|
dependencies:
|
|
2980
|
-
'@next/eslint-plugin-next': 16.2.
|
|
2974
|
+
'@next/eslint-plugin-next': 16.2.6
|
|
2981
2975
|
eslint: 9.39.1(jiti@2.6.1)
|
|
2982
2976
|
eslint-import-resolver-node: 0.3.9
|
|
2983
2977
|
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
|
|
@@ -3610,9 +3604,9 @@ snapshots:
|
|
|
3610
3604
|
|
|
3611
3605
|
natural-compare@1.4.0: {}
|
|
3612
3606
|
|
|
3613
|
-
next@16.2.
|
|
3607
|
+
next@16.2.6(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
|
|
3614
3608
|
dependencies:
|
|
3615
|
-
'@next/env': 16.2.
|
|
3609
|
+
'@next/env': 16.2.6
|
|
3616
3610
|
'@swc/helpers': 0.5.15
|
|
3617
3611
|
baseline-browser-mapping: 2.10.27
|
|
3618
3612
|
caniuse-lite: 1.0.30001756
|
|
@@ -3621,14 +3615,14 @@ snapshots:
|
|
|
3621
3615
|
react-dom: 19.2.0(react@19.2.0)
|
|
3622
3616
|
styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.0)
|
|
3623
3617
|
optionalDependencies:
|
|
3624
|
-
'@next/swc-darwin-arm64': 16.2.
|
|
3625
|
-
'@next/swc-darwin-x64': 16.2.
|
|
3626
|
-
'@next/swc-linux-arm64-gnu': 16.2.
|
|
3627
|
-
'@next/swc-linux-arm64-musl': 16.2.
|
|
3628
|
-
'@next/swc-linux-x64-gnu': 16.2.
|
|
3629
|
-
'@next/swc-linux-x64-musl': 16.2.
|
|
3630
|
-
'@next/swc-win32-arm64-msvc': 16.2.
|
|
3631
|
-
'@next/swc-win32-x64-msvc': 16.2.
|
|
3618
|
+
'@next/swc-darwin-arm64': 16.2.6
|
|
3619
|
+
'@next/swc-darwin-x64': 16.2.6
|
|
3620
|
+
'@next/swc-linux-arm64-gnu': 16.2.6
|
|
3621
|
+
'@next/swc-linux-arm64-musl': 16.2.6
|
|
3622
|
+
'@next/swc-linux-x64-gnu': 16.2.6
|
|
3623
|
+
'@next/swc-linux-x64-musl': 16.2.6
|
|
3624
|
+
'@next/swc-win32-arm64-msvc': 16.2.6
|
|
3625
|
+
'@next/swc-win32-x64-msvc': 16.2.6
|
|
3632
3626
|
sharp: 0.34.5
|
|
3633
3627
|
transitivePeerDependencies:
|
|
3634
3628
|
- '@babel/core'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
let counter = 0;
|
|
4
|
+
|
|
5
|
+
export async function GET() {
|
|
6
|
+
const data = await getSimpleCachedData();
|
|
7
|
+
return NextResponse.json(data);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async function getSimpleCachedData() {
|
|
11
|
+
'use cache';
|
|
12
|
+
|
|
13
|
+
counter++;
|
|
14
|
+
return {
|
|
15
|
+
counter,
|
|
16
|
+
timestamp: Date.now(),
|
|
17
|
+
message: 'Simple cached data without tags',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { cacheLife, cacheTag } from 'next/cache';
|
|
3
|
+
|
|
4
|
+
let counter = 0;
|
|
5
|
+
|
|
6
|
+
export async function GET() {
|
|
7
|
+
const data = await getCachedDataWithLife();
|
|
8
|
+
return NextResponse.json(data);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async function getCachedDataWithLife() {
|
|
12
|
+
'use cache';
|
|
13
|
+
|
|
14
|
+
cacheLife({ stale: 1, revalidate: 2, expire: 5 });
|
|
15
|
+
cacheTag('cache-life-test');
|
|
16
|
+
|
|
17
|
+
counter++;
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
counter,
|
|
21
|
+
timestamp: Date.now(),
|
|
22
|
+
profile: { stale: 1, revalidate: 2, expire: 5 },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { cacheTag } from 'next/cache';
|
|
3
|
+
|
|
4
|
+
let counter = 0;
|
|
5
|
+
|
|
6
|
+
export async function GET() {
|
|
7
|
+
const data = await getCachedData();
|
|
8
|
+
return NextResponse.json(data);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async function getCachedData() {
|
|
12
|
+
'use cache';
|
|
13
|
+
cacheTag('test-tag');
|
|
14
|
+
|
|
15
|
+
counter++;
|
|
16
|
+
return {
|
|
17
|
+
counter,
|
|
18
|
+
timestamp: Date.now(),
|
|
19
|
+
message: 'This data should be cached',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { revalidateTag } from 'next/cache';
|
|
3
|
+
|
|
4
|
+
export async function POST(request: Request) {
|
|
5
|
+
const body = await request.json();
|
|
6
|
+
const { tag } = body;
|
|
7
|
+
|
|
8
|
+
if (!tag) {
|
|
9
|
+
return NextResponse.json({ error: 'Tag is required' }, { status: 400 });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
revalidateTag(tag, { expire: 1 });
|
|
13
|
+
|
|
14
|
+
return NextResponse.json({
|
|
15
|
+
revalidated: true,
|
|
16
|
+
tag,
|
|
17
|
+
timestamp: Date.now(),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
let counter = 0;
|
|
4
|
+
|
|
5
|
+
export async function GET() {
|
|
6
|
+
const data = await getCachedData();
|
|
7
|
+
return NextResponse.json(data);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async function getCachedData() {
|
|
11
|
+
'use cache';
|
|
12
|
+
|
|
13
|
+
counter++;
|
|
14
|
+
return {
|
|
15
|
+
counter,
|
|
16
|
+
timestamp: Date.now(),
|
|
17
|
+
message: 'Revalidated cached data',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import Link from 'next/link';
|
|
2
|
+
import { cacheLife, cacheTag, revalidateTag } from 'next/cache';
|
|
3
|
+
import { Suspense } from 'react';
|
|
4
|
+
|
|
5
|
+
async function getCacheLifeSample() {
|
|
6
|
+
'use cache';
|
|
7
|
+
|
|
8
|
+
// Very short timings for manual testing.
|
|
9
|
+
cacheLife({
|
|
10
|
+
stale: 2,
|
|
11
|
+
revalidate: 4,
|
|
12
|
+
expire: 10,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
cacheTag('cache-lab:cachelife-short');
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
createdAt: Date.now(),
|
|
19
|
+
random: Math.random(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function triggerRevalidateTag() {
|
|
24
|
+
'use server';
|
|
25
|
+
revalidateTag('cache-lab:cachelife-short', { expire: 1 });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function CachedDataPanel() {
|
|
29
|
+
const data = await getCacheLifeSample();
|
|
30
|
+
return (
|
|
31
|
+
<div className="rounded-lg border p-5">
|
|
32
|
+
<dl className="grid grid-cols-1 gap-3 text-sm">
|
|
33
|
+
<div>
|
|
34
|
+
<dt className="font-medium">createdAt</dt>
|
|
35
|
+
<dd data-testid="createdAt" className="font-mono text-slate-700">
|
|
36
|
+
{data.createdAt}
|
|
37
|
+
</dd>
|
|
38
|
+
</div>
|
|
39
|
+
<div>
|
|
40
|
+
<dt className="font-medium">random</dt>
|
|
41
|
+
<dd data-testid="random" className="font-mono text-slate-700">
|
|
42
|
+
{data.random}
|
|
43
|
+
</dd>
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
<dt className="font-medium">cacheLife config</dt>
|
|
47
|
+
<dd className="font-mono text-slate-700">
|
|
48
|
+
{'{ stale: 2, revalidate: 4, expire: 10 }'}
|
|
49
|
+
</dd>
|
|
50
|
+
</div>
|
|
51
|
+
</dl>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default function CacheLifeShortPage() {
|
|
57
|
+
return (
|
|
58
|
+
<main className="mx-auto max-w-3xl p-10">
|
|
59
|
+
<div className="mb-6">
|
|
60
|
+
<Link
|
|
61
|
+
className="text-sm text-blue-600 hover:underline"
|
|
62
|
+
href="/cache-lab"
|
|
63
|
+
>
|
|
64
|
+
← Back to Cache Lab
|
|
65
|
+
</Link>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<header className="mb-6">
|
|
69
|
+
<h1 className="text-2xl font-semibold">cacheLife: short timings</h1>
|
|
70
|
+
<p className="mt-2 text-sm text-slate-600">
|
|
71
|
+
This uses <code>cacheLife</code> with short durations so you can
|
|
72
|
+
observe stale / revalidate / expire behavior quickly.
|
|
73
|
+
</p>
|
|
74
|
+
</header>
|
|
75
|
+
|
|
76
|
+
<Suspense
|
|
77
|
+
fallback={
|
|
78
|
+
<div className="rounded-lg border bg-slate-50 p-5 text-sm text-slate-700">
|
|
79
|
+
Loading cached content…
|
|
80
|
+
</div>
|
|
81
|
+
}
|
|
82
|
+
>
|
|
83
|
+
<CachedDataPanel />
|
|
84
|
+
</Suspense>
|
|
85
|
+
|
|
86
|
+
<form action={triggerRevalidateTag} className="mt-6">
|
|
87
|
+
<button
|
|
88
|
+
className="rounded-md bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700"
|
|
89
|
+
type="submit"
|
|
90
|
+
>
|
|
91
|
+
revalidateTag('cache-lab:cachelife-short')
|
|
92
|
+
</button>
|
|
93
|
+
</form>
|
|
94
|
+
|
|
95
|
+
<div className="mt-6 rounded-lg border bg-slate-50 p-5 text-sm text-slate-700">
|
|
96
|
+
<div className="space-y-2">
|
|
97
|
+
<p>
|
|
98
|
+
Expected: reload a few times. Within a couple seconds, the cached
|
|
99
|
+
value may become stale; after revalidate, a fresh value should
|
|
100
|
+
appear.
|
|
101
|
+
</p>
|
|
102
|
+
<p>
|
|
103
|
+
This page deliberately puts the async work behind{' '}
|
|
104
|
+
<code>{'<Suspense>'}</code> to avoid the "Blocking Route" warning.
|
|
105
|
+
</p>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</main>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Link from 'next/link';
|
|
2
|
+
|
|
3
|
+
export default function CacheLabIndexPage() {
|
|
4
|
+
return (
|
|
5
|
+
<main className="mx-auto max-w-5xl p-10">
|
|
6
|
+
<header className="mb-10">
|
|
7
|
+
<h1 className="text-3xl font-semibold">Cache Lab</h1>
|
|
8
|
+
<p className="mt-2 text-slate-600">
|
|
9
|
+
Manual test pages for Next.js Cache Components (use cache, cacheLife,
|
|
10
|
+
tags, updateTag/revalidateTag, and Suspense boundaries).
|
|
11
|
+
</p>
|
|
12
|
+
</header>
|
|
13
|
+
|
|
14
|
+
<section className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
15
|
+
<Link
|
|
16
|
+
className="rounded-lg border p-5 hover:bg-slate-50"
|
|
17
|
+
href="/cache-lab/use-cache-nondeterministic"
|
|
18
|
+
>
|
|
19
|
+
<h2 className="text-lg font-medium">use cache: non-deterministic</h2>
|
|
20
|
+
<p className="mt-1 text-sm text-slate-600">
|
|
21
|
+
Random/Date/UUID should stay identical across reloads until you
|
|
22
|
+
invalidate.
|
|
23
|
+
</p>
|
|
24
|
+
</Link>
|
|
25
|
+
|
|
26
|
+
<Link
|
|
27
|
+
className="rounded-lg border p-5 hover:bg-slate-50"
|
|
28
|
+
href="/cache-lab/cachelife-short"
|
|
29
|
+
>
|
|
30
|
+
<h2 className="text-lg font-medium">cacheLife: short timings</h2>
|
|
31
|
+
<p className="mt-1 text-sm text-slate-600">
|
|
32
|
+
Uses very small stale/revalidate/expire values so you can observe
|
|
33
|
+
SWR + expiry quickly.
|
|
34
|
+
</p>
|
|
35
|
+
</Link>
|
|
36
|
+
|
|
37
|
+
<Link
|
|
38
|
+
className="rounded-lg border p-5 hover:bg-slate-50"
|
|
39
|
+
href="/cache-lab/tag-invalidation"
|
|
40
|
+
>
|
|
41
|
+
<h2 className="text-lg font-medium">
|
|
42
|
+
Tags: updateTag vs revalidateTag
|
|
43
|
+
</h2>
|
|
44
|
+
<p className="mt-1 text-sm text-slate-600">
|
|
45
|
+
Cached component tagged via cacheTag. Trigger updateTag (immediate)
|
|
46
|
+
or revalidateTag (SWR).
|
|
47
|
+
</p>
|
|
48
|
+
</Link>
|
|
49
|
+
|
|
50
|
+
<Link
|
|
51
|
+
className="rounded-lg border p-5 hover:bg-slate-50"
|
|
52
|
+
href="/cache-lab/stale-while-revalidate"
|
|
53
|
+
>
|
|
54
|
+
<h2 className="text-lg font-medium">
|
|
55
|
+
SWR: stale-while-revalidate (slow)
|
|
56
|
+
</h2>
|
|
57
|
+
<p className="mt-1 text-sm text-slate-600">
|
|
58
|
+
Forces slow recomputation so you can see whether stale is served
|
|
59
|
+
immediately while refresh happens in the background.
|
|
60
|
+
</p>
|
|
61
|
+
</Link>
|
|
62
|
+
|
|
63
|
+
<Link
|
|
64
|
+
className="rounded-lg border p-5 hover:bg-slate-50"
|
|
65
|
+
href="/cache-lab/runtime-data-suspense"
|
|
66
|
+
>
|
|
67
|
+
<h2 className="text-lg font-medium">Runtime data + Suspense</h2>
|
|
68
|
+
<p className="mt-1 text-sm text-slate-600">
|
|
69
|
+
Reads cookies() at request time in a non-cached component and passes
|
|
70
|
+
it into a cached component to show correct boundaries.
|
|
71
|
+
</p>
|
|
72
|
+
</Link>
|
|
73
|
+
</section>
|
|
74
|
+
|
|
75
|
+
<section className="mt-12 rounded-lg border bg-slate-50 p-5">
|
|
76
|
+
<h3 className="font-medium">How to use</h3>
|
|
77
|
+
<div className="mt-2 space-y-2 text-sm text-slate-700">
|
|
78
|
+
<p>
|
|
79
|
+
Open each page in 2 tabs and compare behavior while reloading.
|
|
80
|
+
Observe which values stay stable, and which update.
|
|
81
|
+
</p>
|
|
82
|
+
<p>
|
|
83
|
+
Use the buttons on each page to trigger tag invalidation and observe
|
|
84
|
+
how quickly new content becomes visible.
|
|
85
|
+
</p>
|
|
86
|
+
</div>
|
|
87
|
+
</section>
|
|
88
|
+
</main>
|
|
89
|
+
);
|
|
90
|
+
}
|