@trieb.work/nextjs-turbo-redis-cache 1.15.0 → 1.16.0

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.
Files changed (263) hide show
  1. package/.cursor/skills/testing/SKILL.md +121 -0
  2. package/.github/workflows/ci.yml +199 -69
  3. package/.github/workflows/release.yml +9 -1
  4. package/ARCHITECTURE.md +431 -0
  5. package/CHANGELOG.md +28 -0
  6. package/README.md +77 -49
  7. package/dist/index.d.mts +71 -45
  8. package/dist/index.d.ts +71 -45
  9. package/dist/index.js +107 -21
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.mjs +107 -21
  12. package/dist/index.mjs.map +1 -1
  13. package/docs/index.html +7 -6
  14. package/eslint.config.mjs +1 -1
  15. package/package.json +15 -16
  16. package/playwright.config.ts +5 -3
  17. package/src/CacheComponentsHandler.ts +57 -2
  18. package/src/RedisStringsHandler.ts +125 -66
  19. package/src/SyncedMap.ts +62 -13
  20. package/test/README.md +194 -0
  21. package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/package.json +6 -6
  22. package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-15-4-11}/pnpm-lock.yaml +89 -105
  23. package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/package.json +3 -3
  24. package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/pnpm-lock.yaml +53 -53
  25. package/test/nextjs-test-projects/next-app-16-0-11-cache-components/package.json +28 -0
  26. package/test/nextjs-test-projects/next-app-16-0-11-cache-components/pnpm-lock.yaml +4206 -0
  27. package/test/nextjs-test-projects/next-app-16-2-6/eslint.config.mjs +18 -0
  28. package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/package.json +3 -3
  29. package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/pnpm-lock.yaml +54 -60
  30. package/test/nextjs-test-projects/next-app-16-2-6/postcss.config.mjs +7 -0
  31. package/test/nextjs-test-projects/next-app-16-2-6/src/app/favicon.ico +0 -0
  32. package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-2-6}/tsconfig.json +9 -2
  33. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/cache-handler.js +3 -0
  34. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/next.config.ts +13 -0
  35. package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6-cache-components}/package.json +3 -3
  36. 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
  37. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-static-fetch/route.ts +19 -0
  38. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-with-cachelife/route.ts +24 -0
  39. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/cached-with-tag/route.ts +21 -0
  40. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/revalidate-tag/route.ts +19 -0
  41. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/api/revalidated-fetch/route.ts +19 -0
  42. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/cachelife-short/page.tsx +110 -0
  43. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/page.tsx +90 -0
  44. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/runtime-data-suspense/page.tsx +127 -0
  45. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/stale-while-revalidate/page.tsx +130 -0
  46. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/tag-invalidation/page.tsx +127 -0
  47. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/cache-lab/use-cache-nondeterministic/page.tsx +110 -0
  48. package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/layout.tsx +0 -2
  49. package/test/nextjs-test-projects/next-app-16-2-6-cache-components/src/app/update-tag-test/page.tsx +22 -0
  50. package/test/nextjs-test-projects/next-pages-16-2-6/README.md +16 -0
  51. package/test/nextjs-test-projects/next-pages-16-2-6/eslint.config.mjs +18 -0
  52. package/test/nextjs-test-projects/next-pages-16-2-6/next.config.ts +7 -0
  53. package/test/nextjs-test-projects/next-pages-16-2-6/package.json +26 -0
  54. package/test/nextjs-test-projects/next-pages-16-2-6/pnpm-lock.yaml +3896 -0
  55. package/test/nextjs-test-projects/next-pages-16-2-6/src/pages/api/revalidate.ts +24 -0
  56. package/test/nextjs-test-projects/next-pages-16-2-6/src/pages/index.tsx +11 -0
  57. package/test/nextjs-test-projects/next-pages-16-2-6/src/pages/isr/[slug].tsx +49 -0
  58. package/test/nextjs-test-projects/next-pages-16-2-6/src/pages/static-forever.tsx +20 -0
  59. package/test/nextjs-test-projects/next-pages-16-2-6/tsconfig.json +34 -0
  60. package/{tests → test/playwright}/update-tag.spec.ts +1 -1
  61. package/test/{integration → vitest/integration}/build-id-prefix.integration.test.ts +2 -2
  62. package/test/{cache-components/cache-components.integration.spec.ts → vitest/integration/cache-components/cache-components.integration.test.ts} +7 -3
  63. package/test/{cache-components/redis-kill-reconnect.spec.ts → vitest/integration/cache-components/redis-kill-reconnect.test.ts} +28 -7
  64. package/test/vitest/integration/cache-components/redis-quit-vs-disconnect.test.ts +59 -0
  65. package/test/vitest/integration/cache-components/redis-subscriber-outage.test.ts +100 -0
  66. package/test/{cache-components → vitest/integration/cache-components}/scripts/redis-kill-reconnect.ts +31 -8
  67. package/test/vitest/integration/cache-components/scripts/redis-quit-vs-disconnect.ts +113 -0
  68. package/test/vitest/integration/cache-components/scripts/redis-subscriber-outage.ts +379 -0
  69. package/test/vitest/integration/cache-components/scripts/redis-test-helpers.ts +155 -0
  70. package/test/{integration → vitest/integration}/nextjs-cache-handler.integration.test.ts +15 -9
  71. package/test/vitest/integration/pages-router.integration.test.ts +420 -0
  72. package/test/vitest/unit/SyncedMap-reconnect-repro.test.ts +154 -0
  73. package/{src → test/vitest/unit}/index.test.ts +3 -3
  74. package/test/vitest/unit/pages-router-kinds.test.ts +292 -0
  75. package/test/{cache-components/reconnect-socket-already-opened.spec.ts → vitest/unit/reconnect-socket-already-opened.test.ts} +1 -1
  76. package/{src → test/vitest/unit}/serializer.test.ts +7 -3
  77. package/{src → test/vitest/unit}/utils/prefix.test.ts +1 -1
  78. package/vite.config.ts +4 -3
  79. package/vitest.cache-components.config.ts +1 -1
  80. package/test/browser/update-tag.browser.test.ts +0 -41
  81. package/test/integration/next-app-15-0-3/next.config.js +0 -6
  82. package/test/integration/next-app-15-0-3/package-lock.json +0 -5833
  83. package/test/integration/next-app-15-0-3/pnpm-lock.yaml +0 -3710
  84. package/test/integration/next-app-15-3-2/next.config.js +0 -6
  85. package/test/integration/next-app-15-3-2/package.json +0 -33
  86. package/test/integration/next-app-15-3-2/pnpm-lock.yaml +0 -3720
  87. package/test/integration/next-app-15-3-2/postcss.config.mjs +0 -5
  88. package/test/integration/next-app-15-3-2/src/app/api/revalidateTag/route.ts +0 -15
  89. package/test/integration/next-app-15-4-7/eslint.config.mjs +0 -16
  90. package/test/integration/next-app-15-4-7/package-lock.json +0 -5969
  91. package/test/integration/next-app-15-4-7/package.json +0 -33
  92. package/test/integration/next-app-15-4-7/postcss.config.mjs +0 -5
  93. package/test/integration/next-app-15-4-7/src/app/api/revalidateTag/route.ts +0 -15
  94. package/test/integration/next-app-15-4-7/tsconfig.json +0 -27
  95. package/test/integration/next-app-16-0-3/src/app/api/cached-static-fetch/route.ts +0 -18
  96. package/test/integration/next-app-16-0-3/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -27
  97. package/test/integration/next-app-16-0-3/src/app/api/revalidatePath/route.ts +0 -15
  98. package/test/integration/next-app-16-0-3/src/app/api/revalidated-fetch/route.ts +0 -17
  99. package/test/integration/next-app-16-0-3/src/app/api/uncached-fetch/route.ts +0 -15
  100. package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -19
  101. package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -34
  102. package/test/integration/next-app-16-0-3/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  103. package/test/integration/next-app-16-0-3/src/app/pages/no-fetch/default-page/page.tsx +0 -55
  104. package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -19
  105. package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -35
  106. package/test/integration/next-app-16-0-3/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  107. package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -19
  108. package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -32
  109. package/test/integration/next-app-16-0-3/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  110. package/test/integration/next-app-16-2-3/src/app/api/cached-static-fetch/route.ts +0 -18
  111. package/test/integration/next-app-16-2-3/src/app/api/nested-fetch-in-api-route/revalidated-fetch/route.ts +0 -27
  112. package/test/integration/next-app-16-2-3/src/app/api/revalidatePath/route.ts +0 -15
  113. package/test/integration/next-app-16-2-3/src/app/api/revalidated-fetch/route.ts +0 -17
  114. package/test/integration/next-app-16-2-3/src/app/api/uncached-fetch/route.ts +0 -15
  115. package/test/integration/next-app-16-2-3/src/app/globals.css +0 -26
  116. package/test/integration/next-app-16-2-3/src/app/layout.tsx +0 -59
  117. package/test/integration/next-app-16-2-3/src/app/page.tsx +0 -755
  118. package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/default--force-dynamic-page/page.tsx +0 -19
  119. package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/revalidate15--default-page/page.tsx +0 -34
  120. package/test/integration/next-app-16-2-3/src/app/pages/cached-static-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  121. package/test/integration/next-app-16-2-3/src/app/pages/no-fetch/default-page/page.tsx +0 -55
  122. package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/default--force-dynamic-page/page.tsx +0 -19
  123. package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/revalidate15--default-page/page.tsx +0 -35
  124. package/test/integration/next-app-16-2-3/src/app/pages/revalidated-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  125. package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/default--force-dynamic-page/page.tsx +0 -19
  126. package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/revalidate15--default-page/page.tsx +0 -32
  127. package/test/integration/next-app-16-2-3/src/app/pages/uncached-fetch/revalidate15--force-dynamic-page/page.tsx +0 -25
  128. package/test/integration/next-app-16-2-3/src/app/revalidation-interface.tsx +0 -267
  129. package/test/integration/next-app-16-2-3-cache-components/public/file.svg +0 -1
  130. package/test/integration/next-app-16-2-3-cache-components/public/globe.svg +0 -1
  131. package/test/integration/next-app-16-2-3-cache-components/public/next.svg +0 -1
  132. package/test/integration/next-app-16-2-3-cache-components/public/vercel.svg +0 -1
  133. package/test/integration/next-app-16-2-3-cache-components/public/window.svg +0 -1
  134. package/test/integration/next-app-customized/README.md +0 -36
  135. package/test/integration/next-app-customized/eslint.config.mjs +0 -16
  136. package/vitest.browser.config.ts +0 -10
  137. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/README.md +0 -0
  138. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/eslint.config.mjs +0 -0
  139. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-15-4-11}/next.config.js +0 -0
  140. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-15-4-11}/package-lock.json +0 -0
  141. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/postcss.config.mjs +0 -0
  142. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/file.svg +0 -0
  143. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/globe.svg +0 -0
  144. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/next.svg +0 -0
  145. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/vercel.svg +0 -0
  146. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/public/window.svg +0 -0
  147. /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
  148. /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
  149. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/revalidatePath/route.ts +0 -0
  150. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/api/revalidateTag/route.ts +0 -0
  151. /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
  152. /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
  153. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/globals.css +0 -0
  154. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/layout.tsx +0 -0
  155. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/page.tsx +0 -0
  156. /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
  157. /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
  158. /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
  159. /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
  160. /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
  161. /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
  162. /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
  163. /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
  164. /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
  165. /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
  166. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/src/app/revalidation-interface.tsx +0 -0
  167. /package/test/{integration/next-app-15-0-3 → nextjs-test-projects/next-app-15-4-11}/tsconfig.json +0 -0
  168. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/README.md +0 -0
  169. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/eslint.config.mjs +0 -0
  170. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/next.config.ts +0 -0
  171. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/postcss.config.mjs +0 -0
  172. /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
  173. /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
  174. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/api/revalidatePath/route.ts +0 -0
  175. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11}/src/app/api/revalidateTag/route.ts +0 -0
  176. /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
  177. /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
  178. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/src/app/favicon.ico +0 -0
  179. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/globals.css +0 -0
  180. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11}/src/app/layout.tsx +0 -0
  181. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/page.tsx +0 -0
  182. /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
  183. /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
  184. /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
  185. /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
  186. /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
  187. /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
  188. /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
  189. /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
  190. /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
  191. /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
  192. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-0-11}/src/app/revalidation-interface.tsx +0 -0
  193. /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
  194. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-0-11}/tsconfig.json +0 -0
  195. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/README.md +0 -0
  196. /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
  197. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/eslint.config.mjs +0 -0
  198. /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
  199. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/postcss.config.mjs +0 -0
  200. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/file.svg +0 -0
  201. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/globe.svg +0 -0
  202. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/next.svg +0 -0
  203. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/vercel.svg +0 -0
  204. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/public/window.svg +0 -0
  205. /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
  206. /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-cachelife/route.ts +0 -0
  207. /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
  208. /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
  209. /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
  210. /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
  211. /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
  212. /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
  213. /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
  214. /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
  215. /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
  216. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/favicon.ico +0 -0
  217. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/globals.css +0 -0
  218. /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
  219. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-16-0-11-cache-components}/src/app/page.tsx +0 -0
  220. /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
  221. /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
  222. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-0-11-cache-components}/tsconfig.json +0 -0
  223. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/README.md +0 -0
  224. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/next.config.ts +0 -0
  225. /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
  226. /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
  227. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/api/revalidatePath/route.ts +0 -0
  228. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6}/src/app/api/revalidateTag/route.ts +0 -0
  229. /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
  230. /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
  231. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/src/app/globals.css +0 -0
  232. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6}/src/app/layout.tsx +0 -0
  233. /package/test/{integration/next-app-16-2-3-cache-components → nextjs-test-projects/next-app-16-2-6}/src/app/page.tsx +0 -0
  234. /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
  235. /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
  236. /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
  237. /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
  238. /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
  239. /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
  240. /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
  241. /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
  242. /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
  243. /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
  244. /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
  245. /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
  246. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/README.md +0 -0
  247. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/eslint.config.mjs +0 -0
  248. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/postcss.config.mjs +0 -0
  249. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/file.svg +0 -0
  250. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/globe.svg +0 -0
  251. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/next.svg +0 -0
  252. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/vercel.svg +0 -0
  253. /package/test/{integration/next-app-15-4-7 → nextjs-test-projects/next-app-16-2-6-cache-components}/public/window.svg +0 -0
  254. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/favicon.ico +0 -0
  255. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/globals.css +0 -0
  256. /package/test/{integration/next-app-16-0-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/src/app/page.tsx +0 -0
  257. /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
  258. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-16-2-6-cache-components}/tsconfig.json +0 -0
  259. /package/test/{integration/next-app-16-2-3 → nextjs-test-projects/next-app-customized}/README.md +0 -0
  260. /package/test/{integration → nextjs-test-projects}/next-app-customized/customized-cache-handler.js +0 -0
  261. /package/test/{integration/next-app-15-3-2 → nextjs-test-projects/next-app-customized}/eslint.config.mjs +0 -0
  262. /package/test/{integration → nextjs-test-projects}/next-app-customized/next.config.js +0 -0
  263. /package/{tests → test/playwright}/cache-lab.spec.ts +0 -0
package/test/README.md ADDED
@@ -0,0 +1,194 @@
1
+ # Test Structure
2
+
3
+ ```
4
+ test/
5
+ ├── playwright/ # E2E tests — browser automation (Playwright)
6
+ ├── vitest/ # Unit + Integration tests (Vitest)
7
+ │ ├── unit/ # Pure unit tests (no external deps)
8
+ │ └── integration/ # Integration tests (Redis + Next.js server)
9
+ │ └── cache-components/ # Cache Components integration (Next.js 16+)
10
+ └── nextjs-test-projects/ # Next.js app fixtures (shared across test types)
11
+ ```
12
+
13
+ ## Overview
14
+
15
+ | Layer | Runner | What it validates | Needs Redis? | Needs Next.js app? |
16
+ | --------------- | ---------- | ----------------------------------------------------------------------- | ------------ | ------------------ |
17
+ | **Unit** | Vitest | Logic in isolation (serializer, prefix resolution, reconnect handling) | No | No |
18
+ | **Integration** | Vitest | Cache handler ↔ Redis ↔ Next.js HTTP responses (server-side plumbing) | Yes | Yes |
19
+ | **E2E** | Playwright | User-facing behavior in a real browser (Cache Components / `use cache`) | Yes | Yes |
20
+
21
+ ---
22
+
23
+ ## Unit Tests (`test/vitest/unit/`)
24
+
25
+ **Runner:** Vitest
26
+ **Command:** `pnpm test:unit`
27
+ **Config:** `vite.config.ts`
28
+
29
+ Fast tests with no external dependencies. Mocks are used where needed.
30
+
31
+ | File | What it tests |
32
+ | ----------------------------------------- | ---------------------------------------------------------------------------------------------- |
33
+ | `serializer.test.ts` | `CacheValueSerializer` interface, JSON round-trips, singleton stability |
34
+ | `index.test.ts` | `RedisStringsHandler` constructor options, default behaviors |
35
+ | `utils/prefix.test.ts` | `resolveKeyPrefix` logic (BUILD_ID fallback, env var precedence) |
36
+ | `reconnect-socket-already-opened.test.ts` | Regression: reconnect logic doesn't call `connect()` when socket is already open |
37
+ | `pages-router-kinds.test.ts` | Pages Router cache kinds (`PAGES`, `REDIRECT`, `null`/notFound), implicit tags, TTL derivation |
38
+
39
+ ```bash
40
+ pnpm test:unit # single run
41
+ pnpm test:unit:watch # watch mode
42
+ pnpm test:unit:coverage # with coverage report (used in CI)
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Integration Tests (`test/vitest/integration/`)
48
+
49
+ **Runner:** Vitest
50
+ **Command:** `pnpm test:integration`
51
+ **Config:** `vite.config.ts`
52
+ **Requires:** Redis on localhost:6379, pre-built Next.js test app
53
+
54
+ These tests spawn a real Next.js server as a child process, make `fetch()` requests against it, and verify both HTTP responses and Redis state directly.
55
+
56
+ ### Standard Integration (`nextjs-cache-handler.integration.test.ts`)
57
+
58
+ Full cache lifecycle: static pages, fetch caching, revalidation, tag invalidation, TTL behavior. In CI this runs against a matrix of Next.js versions (15.4–16.2).
59
+
60
+ ```bash
61
+ pnpm test:integration
62
+ ```
63
+
64
+ ### Pages Router (`pages-router.integration.test.ts`)
65
+
66
+ Pages Router cache lifecycle against the `next-pages-16-2-6` app: `PAGES` entry format, TTL derivation from `getStaticProps` `revalidate`, `fallback: 'blocking'` first hits, `notFound: true` (null cache entries), `redirect:` results, and `revalidate: false` TTL fallback.
67
+
68
+ Starts **two** `next start` instances of the same build sharing one Redis and proves that on-demand revalidation (`res.revalidate(path)`) triggered on instance A is served fresh by instance B (HTML and `/_next/data` pageData JSON) — the multi-instance ISR scenario behind a load balancer.
69
+
70
+ ```bash
71
+ pnpm test:integration:pages
72
+ ```
73
+
74
+ ### BUILD_ID Prefix (`build-id-prefix.integration.test.ts`)
75
+
76
+ Verifies that when neither `KEY_PREFIX` nor `VERCEL_URL` is set, the handler falls back to `.next/BUILD_ID` as the Redis key prefix. Runs in its own CI job because it needs a clean environment without those env vars.
77
+
78
+ ```bash
79
+ pnpm test:integration:build-id-prefix
80
+ ```
81
+
82
+ ### Cache Components (`cache-components/`)
83
+
84
+ Integration tests specific to Next.js 16 Cache Components (`use cache`). Uses `next-app-16-2-6-cache-components` as the test app.
85
+
86
+ | File | What it tests |
87
+ | -------------------------------------- | ------------------------------------------------------------------------------------------------------ |
88
+ | `cache-components.integration.test.ts` | `use cache` lifecycle: store, retrieve, tag invalidation, `cacheLife` expiry |
89
+ | `redis-kill-reconnect.test.ts` | Graceful recovery when Redis drops and reconnects (main client ping only) |
90
+ | `redis-subscriber-outage.test.ts` | Issue #86: subscriber PubSub does not recover after Redis outage (expected to fail until bug is fixed) |
91
+ | `redis-quit-vs-disconnect.test.ts` | `quit()` does not reliably close a subscriber during an outage; `disconnect()` does |
92
+
93
+ `redis-kill-reconnect.test.ts` uses a container runtime and auto-detects `podman` first, then `docker`. You can force runtime selection with `CONTAINER_RUNTIME=podman` or `CONTAINER_RUNTIME=docker`.
94
+
95
+ ```bash
96
+ pnpm test:integration:cache-components
97
+ ```
98
+
99
+ **Prerequisites for all integration tests:**
100
+
101
+ ```bash
102
+ cd test/nextjs-test-projects/<app-name>
103
+ pnpm install && pnpm build
104
+ ```
105
+
106
+ ---
107
+
108
+ ## E2E Tests (`test/playwright/`)
109
+
110
+ **Runner:** Playwright
111
+ **Command:** `pnpm test:e2e`
112
+ **Config:** `playwright.config.ts`
113
+ **Requires:** Redis on localhost:6379 (Playwright auto-starts `next-app-16-2-6-cache-components` via `webServer`)
114
+
115
+ Browser-based tests that validate Cache Components behavior from the user's perspective. Playwright was introduced because the Cache Components (`use cache`) feature in Next.js 16 relies on interactions that `fetch()` alone cannot reproduce:
116
+
117
+ - **Server Actions** are triggered by form submissions / button clicks — requires a real browser context
118
+ - `**updateTag`\*\* must be called from within a Server Action — needs actual UI interaction to verify
119
+ - **Cookie-based cache keys** depend on the browser sending cookies during navigation
120
+ - **Stale-while-revalidate** effects are only observable through page reloads and DOM diffing
121
+
122
+ The Vitest cache-components integration tests verify the server-side plumbing (Redis state, HTTP responses). Playwright closes the gap by testing the full user-facing flow.
123
+
124
+ | File | What it tests |
125
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------- |
126
+ | `cache-lab.spec.ts` | `use cache` stability, tag invalidation (`updateTag`/`revalidateTag`), runtime cookie-based cache keys, SWR behavior |
127
+ | `update-tag.spec.ts` | `updateTag` via Server Actions (button click → action → UI update) |
128
+
129
+ ```bash
130
+ pnpm test:e2e
131
+
132
+ # Test against a specific Next.js version:
133
+ PLAYWRIGHT_TEST_APP=next-app-16-0-11-cache-components pnpm test:e2e
134
+
135
+ # Or point at an already-running server:
136
+ PLAYWRIGHT_BASE_URL=http://localhost:3001 pnpm test:e2e
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Next.js Test Projects (`test/nextjs-test-projects/`)
142
+
143
+ Minimal Next.js applications used as fixtures. They are not test runners — they provide the server that tests run against.
144
+
145
+ | App | Next.js | Used by |
146
+ | ----------------------------------- | ------- | -------------------------------------------------------------- |
147
+ | `next-app-15-4-11` | 15.4.11 | Integration (matrix, default for local), build-id-prefix |
148
+ | `next-app-16-0-11` | 16.0.11 | Integration (matrix) |
149
+ | `next-app-16-2-6` | 16.2.6 | Integration (matrix) |
150
+ | `next-pages-16-2-6` | 16.2.6 | Integration (Pages Router, two-instance revalidation) |
151
+ | `next-app-16-0-11-cache-components` | 16.0.11 | Integration (cache-components matrix), E2E (Playwright matrix) |
152
+ | `next-app-16-2-6-cache-components` | 16.2.6 | Integration (cache-components matrix), E2E (Playwright matrix) |
153
+ | `next-app-customized` | — | Example of custom config (referenced in project README) |
154
+
155
+ ---
156
+
157
+ ## CI Jobs
158
+
159
+ The CI workflow (`.github/workflows/ci.yml`) is structured as:
160
+
161
+ ```
162
+ lint-and-unit → Lint + Unit Tests + Coverage
163
+ ├── integration → Matrix: 3 Next.js versions (15.4–16.2)
164
+ ├── integration-pages → Pages Router (two-instance revalidation)
165
+ ├── integration-build-id-prefix → Isolated BUILD_ID prefix test
166
+ ├── integration-cache-components → Matrix: 16.0.11 + 16.2.6 cache-components
167
+ └── e2e → Matrix: Playwright against 16.0.11 + 16.2.6
168
+ ```
169
+
170
+ `lint-and-unit` runs first as a gate. All other jobs run in parallel after it passes.
171
+
172
+ | CI Job | Test App(s) | What runs |
173
+ | ------------------------------ | --------------------------------------------------------- | --------------------------------------------------------------- |
174
+ | `lint-and-unit` | — | `pnpm lint` + `pnpm test:unit:coverage` |
175
+ | `integration` | `next-app-15-4-11`, `next-app-16-0-11`, `next-app-16-2-6` | `pnpm test:integration` (per matrix entry) |
176
+ | `integration-pages` | `next-pages-16-2-6` | `pnpm test:integration:pages` |
177
+ | `integration-build-id-prefix` | `next-app-15-4-11` | `pnpm test:integration:build-id-prefix` |
178
+ | `integration-cache-components` | `next-app-16-{0-3,2-3}-cache-components` | `pnpm test:integration:cache-components` + Redis kill/reconnect |
179
+ | `e2e` | `next-app-16-{0-3,2-3}-cache-components` | `pnpm test:e2e` (Playwright) |
180
+
181
+ ---
182
+
183
+ ## Environment Variables
184
+
185
+ | Variable | Used by | Description |
186
+ | ----------------------- | ------------------------------ | ------------------------------------------------------------------------- |
187
+ | `NEXT_TEST_APP` | Integration | Which test app to use (default: `next-app-15-4-11`) |
188
+ | `NEXT_PAGES_TEST_APP` | Integration (Pages Router) | Which Pages Router test app to use (default: `next-pages-16-2-6`) |
189
+ | `CACHE_COMPONENTS_APP` | Integration (cache-components) | Which cache-components app (default: `next-app-16-2-6-cache-components`) |
190
+ | `PLAYWRIGHT_TEST_APP` | E2E | Which app Playwright starts (default: `next-app-16-2-6-cache-components`) |
191
+ | `PLAYWRIGHT_BASE_URL` | E2E | Override base URL (skips `webServer` auto-start) |
192
+ | `SKIP_BUILD` | Integration | Skip Next.js build if app is pre-built |
193
+ | `DEBUG_INTEGRATION` | Integration | Print child process stdout/stderr |
194
+ | `CACHE_COMPONENTS_PORT` | Integration (cache-components) | Port for the server (default: 3065) |
@@ -3,27 +3,27 @@
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "scripts": {
6
- "dev": "export VERCEL_URL=\"dev-test-$RANDOM\" && echo $VERCEL_URL && cd ../../.. && pnpm build && cd test/integration/next-app-15-0-3 && pnpm i && pnpm build && VERCEL_ENV=production REDISHOST=localhost REDISPORT=6379 DEBUG_CACHE_HANDLER=true pnpm start",
6
+ "dev": "export VERCEL_URL=\"dev-test-$RANDOM\" && echo $VERCEL_URL && cd ../../.. && pnpm build && cd test/nextjs-test-projects/next-app-15-4-11 && pnpm i && pnpm build && VERCEL_ENV=production REDISHOST=localhost REDISPORT=6379 DEBUG_CACHE_HANDLER=true pnpm start",
7
7
  "build": "next build",
8
8
  "start": "next start",
9
9
  "lint": "next lint"
10
10
  },
11
11
  "dependencies": {
12
- "react": "19.0.0-rc-66855b96-20241106",
13
- "react-dom": "19.0.0-rc-66855b96-20241106",
14
- "next": "15.0.3",
12
+ "react": "19.2.0",
13
+ "react-dom": "19.2.0",
14
+ "next": "15.4.11",
15
15
  "redis": "4.7.0",
16
16
  "@trieb.work/nextjs-turbo-redis-cache": "file:../../../"
17
17
  },
18
18
  "devDependencies": {
19
19
  "typescript": "^5",
20
- "@types/node": "^20",
20
+ "@types/node": "^22",
21
21
  "@types/react": "^19",
22
22
  "@types/react-dom": "^19",
23
23
  "@tailwindcss/postcss": "^4",
24
24
  "tailwindcss": "^4",
25
25
  "eslint": "^9",
26
- "eslint-config-next": "15.3.0",
26
+ "eslint-config-next": "15.4.11",
27
27
  "@eslint/eslintrc": "^3"
28
28
  }
29
29
  }
@@ -10,16 +10,16 @@ importers:
10
10
  dependencies:
11
11
  '@trieb.work/nextjs-turbo-redis-cache':
12
12
  specifier: file:../../../
13
- version: file:../../..(next@15.4.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(redis@4.7.0)
13
+ version: file:../../..(next@15.4.11(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(redis@4.7.0)
14
14
  next:
15
- specifier: 15.4.7
16
- version: 15.4.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
15
+ specifier: 15.4.11
16
+ version: 15.4.11(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
17
17
  react:
18
- specifier: 19.1.0
19
- version: 19.1.0
18
+ specifier: 19.2.0
19
+ version: 19.2.0
20
20
  react-dom:
21
- specifier: 19.1.0
22
- version: 19.1.0(react@19.1.0)
21
+ specifier: 19.2.0
22
+ version: 19.2.0(react@19.2.0)
23
23
  redis:
24
24
  specifier: 4.7.0
25
25
  version: 4.7.0
@@ -31,20 +31,20 @@ importers:
31
31
  specifier: ^4
32
32
  version: 4.1.4
33
33
  '@types/node':
34
- specifier: ^20
35
- version: 20.17.30
34
+ specifier: ^22
35
+ version: 22.19.19
36
36
  '@types/react':
37
- specifier: 19.1.3
37
+ specifier: ^19
38
38
  version: 19.1.3
39
39
  '@types/react-dom':
40
- specifier: 19.1.3
40
+ specifier: ^19
41
41
  version: 19.1.3(@types/react@19.1.3)
42
42
  eslint:
43
43
  specifier: ^9
44
44
  version: 9.24.0(jiti@2.4.2)
45
45
  eslint-config-next:
46
- specifier: 15.4.7
47
- version: 15.4.7(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
46
+ specifier: 15.4.11
47
+ version: 15.4.11(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
48
48
  tailwindcss:
49
49
  specifier: ^4
50
50
  version: 4.1.4
@@ -61,9 +61,6 @@ packages:
61
61
  '@emnapi/core@1.4.1':
62
62
  resolution: {integrity: sha512-4JFstCTaToCFrPqrGzgkF8N2NHjtsaY4uRh6brZQ5L9e4wbMieX8oDT8N7qfVFTQecHFEtkj4ve49VIZ3mKVqw==}
63
63
 
64
- '@emnapi/runtime@1.4.1':
65
- resolution: {integrity: sha512-LMshMVP0ZhACNjQNYXiU1iZJ6QCcv0lUdPDPugqGvCGXt5xtRVBPdtA0qU12pEXZzpWAhWlZYptfdAFq10DOVQ==}
66
-
67
64
  '@emnapi/runtime@1.7.1':
68
65
  resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
69
66
 
@@ -288,60 +285,60 @@ packages:
288
285
  '@napi-rs/wasm-runtime@0.2.8':
289
286
  resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
290
287
 
291
- '@next/env@15.4.7':
292
- resolution: {integrity: sha512-PrBIpO8oljZGTOe9HH0miix1w5MUiGJ/q83Jge03mHEE0E3pyqzAy2+l5G6aJDbXoobmxPJTVhbCuwlLtjSHwg==}
288
+ '@next/env@15.4.11':
289
+ resolution: {integrity: sha512-mIYp/091eYfPFezKX7ZPTWqrmSXq+ih6+LcUyKvLmeLQGhlPtot33kuEOd4U+xAA7sFfj21+OtCpIZx0g5SpvQ==}
293
290
 
294
- '@next/eslint-plugin-next@15.4.7':
295
- resolution: {integrity: sha512-asj3RRiEruRLVr+k2ZC4hll9/XBzegMpFMr8IIRpNUYypG86m/a76339X2WETl1C53A512w2INOc2KZV769KPA==}
291
+ '@next/eslint-plugin-next@15.4.11':
292
+ resolution: {integrity: sha512-WSY6ZwahlbR3JLfXrBezo2H4OmCeF2aFpguZuTkGV/n7+C10wYP17gxsCXbKVI6TpWmHZysp/AhwovUObPjfEA==}
296
293
 
297
- '@next/swc-darwin-arm64@15.4.7':
298
- resolution: {integrity: sha512-2Dkb+VUTp9kHHkSqtws4fDl2Oxms29HcZBwFIda1X7Ztudzy7M6XF9HDS2dq85TmdN47VpuhjE+i6wgnIboVzQ==}
294
+ '@next/swc-darwin-arm64@15.4.8':
295
+ resolution: {integrity: sha512-Pf6zXp7yyQEn7sqMxur6+kYcywx5up1J849psyET7/8pG2gQTVMjU3NzgIt8SeEP5to3If/SaWmaA6H6ysBr1A==}
299
296
  engines: {node: '>= 10'}
300
297
  cpu: [arm64]
301
298
  os: [darwin]
302
299
 
303
- '@next/swc-darwin-x64@15.4.7':
304
- resolution: {integrity: sha512-qaMnEozKdWezlmh1OGDVFueFv2z9lWTcLvt7e39QA3YOvZHNpN2rLs/IQLwZaUiw2jSvxW07LxMCWtOqsWFNQg==}
300
+ '@next/swc-darwin-x64@15.4.8':
301
+ resolution: {integrity: sha512-xla6AOfz68a6kq3gRQccWEvFC/VRGJmA/QuSLENSO7CZX5WIEkSz7r1FdXUjtGCQ1c2M+ndUAH7opdfLK1PQbw==}
305
302
  engines: {node: '>= 10'}
306
303
  cpu: [x64]
307
304
  os: [darwin]
308
305
 
309
- '@next/swc-linux-arm64-gnu@15.4.7':
310
- resolution: {integrity: sha512-ny7lODPE7a15Qms8LZiN9wjNWIeI+iAZOFDOnv2pcHStncUr7cr9lD5XF81mdhrBXLUP9yT9RzlmSWKIazWoDw==}
306
+ '@next/swc-linux-arm64-gnu@15.4.8':
307
+ resolution: {integrity: sha512-y3fmp+1Px/SJD+5ntve5QLZnGLycsxsVPkTzAc3zUiXYSOlTPqT8ynfmt6tt4fSo1tAhDPmryXpYKEAcoAPDJw==}
311
308
  engines: {node: '>= 10'}
312
309
  cpu: [arm64]
313
310
  os: [linux]
314
311
  libc: [glibc]
315
312
 
316
- '@next/swc-linux-arm64-musl@15.4.7':
317
- resolution: {integrity: sha512-4SaCjlFR/2hGJqZLLWycccy1t+wBrE/vyJWnYaZJhUVHccpGLG5q0C+Xkw4iRzUIkE+/dr90MJRUym3s1+vO8A==}
313
+ '@next/swc-linux-arm64-musl@15.4.8':
314
+ resolution: {integrity: sha512-DX/L8VHzrr1CfwaVjBQr3GWCqNNFgyWJbeQ10Lx/phzbQo3JNAxUok1DZ8JHRGcL6PgMRgj6HylnLNndxn4Z6A==}
318
315
  engines: {node: '>= 10'}
319
316
  cpu: [arm64]
320
317
  os: [linux]
321
318
  libc: [musl]
322
319
 
323
- '@next/swc-linux-x64-gnu@15.4.7':
324
- resolution: {integrity: sha512-2uNXjxvONyRidg00VwvlTYDwC9EgCGNzPAPYbttIATZRxmOZ3hllk/YYESzHZb65eyZfBR5g9xgCZjRAl9YYGg==}
320
+ '@next/swc-linux-x64-gnu@15.4.8':
321
+ resolution: {integrity: sha512-9fLAAXKAL3xEIFdKdzG5rUSvSiZTLLTCc6JKq1z04DR4zY7DbAPcRvNm3K1inVhTiQCs19ZRAgUerHiVKMZZIA==}
325
322
  engines: {node: '>= 10'}
326
323
  cpu: [x64]
327
324
  os: [linux]
328
325
  libc: [glibc]
329
326
 
330
- '@next/swc-linux-x64-musl@15.4.7':
331
- resolution: {integrity: sha512-ceNbPjsFgLscYNGKSu4I6LYaadq2B8tcK116nVuInpHHdAWLWSwVK6CHNvCi0wVS9+TTArIFKJGsEyVD1H+4Kg==}
327
+ '@next/swc-linux-x64-musl@15.4.8':
328
+ resolution: {integrity: sha512-s45V7nfb5g7dbS7JK6XZDcapicVrMMvX2uYgOHP16QuKH/JA285oy6HcxlKqwUNaFY/UC6EvQ8QZUOo19cBKSA==}
332
329
  engines: {node: '>= 10'}
333
330
  cpu: [x64]
334
331
  os: [linux]
335
332
  libc: [musl]
336
333
 
337
- '@next/swc-win32-arm64-msvc@15.4.7':
338
- resolution: {integrity: sha512-pZyxmY1iHlZJ04LUL7Css8bNvsYAMYOY9JRwFA3HZgpaNKsJSowD09Vg2R9734GxAcLJc2KDQHSCR91uD6/AAw==}
334
+ '@next/swc-win32-arm64-msvc@15.4.8':
335
+ resolution: {integrity: sha512-KjgeQyOAq7t/HzAJcWPGA8X+4WY03uSCZ2Ekk98S9OgCFsb6lfBE3dbUzUuEQAN2THbwYgFfxX2yFTCMm8Kehw==}
339
336
  engines: {node: '>= 10'}
340
337
  cpu: [arm64]
341
338
  os: [win32]
342
339
 
343
- '@next/swc-win32-x64-msvc@15.4.7':
344
- resolution: {integrity: sha512-HjuwPJ7BeRzgl3KrjKqD2iDng0eQIpIReyhpF5r4yeAHFwWRuAhfW92rWv/r3qeQHEwHsLRzFDvMqRjyM5DI6A==}
340
+ '@next/swc-win32-x64-msvc@15.4.8':
341
+ resolution: {integrity: sha512-Exsmf/+42fWVnLMaZHzshukTBxZrSwuuLKFvqhGHJ+mC1AokqieLY/XzAl3jc/CqhXLqLY3RRjkKJ9YnLPcRWg==}
345
342
  engines: {node: '>= 10'}
346
343
  cpu: [x64]
347
344
  os: [win32]
@@ -510,8 +507,8 @@ packages:
510
507
  '@types/json5@0.0.29':
511
508
  resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
512
509
 
513
- '@types/node@20.17.30':
514
- resolution: {integrity: sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==}
510
+ '@types/node@22.19.19':
511
+ resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==}
515
512
 
516
513
  '@types/react-dom@19.1.3':
517
514
  resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==}
@@ -892,8 +889,8 @@ packages:
892
889
  resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
893
890
  engines: {node: '>=10'}
894
891
 
895
- eslint-config-next@15.4.7:
896
- resolution: {integrity: sha512-tkKKNVJKI4zMIgTpvG2x6mmdhuOdgXUL3AaSPHwxLQkvzi4Yryqvk6B0R5Z4gkpe7FKopz3ZmlpePH3NTHy3gA==}
892
+ eslint-config-next@15.4.11:
893
+ resolution: {integrity: sha512-JgvFtb0R8tFyGRRzPZhX4mX+bgllh0v8WP7VxlRXWrh829ONZCi+Bv8OGH4QeQjmFIvZ7hgdQBRXHPf2TYgvsA==}
897
894
  peerDependencies:
898
895
  eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
899
896
  typescript: '>=3.3.1'
@@ -1420,8 +1417,8 @@ packages:
1420
1417
  natural-compare@1.4.0:
1421
1418
  resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1422
1419
 
1423
- next@15.4.7:
1424
- resolution: {integrity: sha512-OcqRugwF7n7mC8OSYjvsZhhG1AYSvulor1EIUsIkbbEbf1qoE5EbH36Swj8WhF4cHqmDgkiam3z1c1W0J1Wifg==}
1420
+ next@15.4.11:
1421
+ resolution: {integrity: sha512-IJRyXal45mIsshZI5XJne/intjusslUP1F+FHVBIyMGEqbYtIq1Irdx5vdWBBg58smviPDycmDeV6txsfkv1RQ==}
1425
1422
  engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
1426
1423
  hasBin: true
1427
1424
  peerDependencies:
@@ -1541,16 +1538,16 @@ packages:
1541
1538
  queue-microtask@1.2.3:
1542
1539
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1543
1540
 
1544
- react-dom@19.1.0:
1545
- resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
1541
+ react-dom@19.2.0:
1542
+ resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
1546
1543
  peerDependencies:
1547
- react: ^19.1.0
1544
+ react: ^19.2.0
1548
1545
 
1549
1546
  react-is@16.13.1:
1550
1547
  resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1551
1548
 
1552
- react@19.1.0:
1553
- resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
1549
+ react@19.2.0:
1550
+ resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
1554
1551
  engines: {node: '>=0.10.0'}
1555
1552
 
1556
1553
  redis@4.7.0:
@@ -1599,18 +1596,13 @@ packages:
1599
1596
  resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1600
1597
  engines: {node: '>= 0.4'}
1601
1598
 
1602
- scheduler@0.26.0:
1603
- resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
1599
+ scheduler@0.27.0:
1600
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
1604
1601
 
1605
1602
  semver@6.3.1:
1606
1603
  resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1607
1604
  hasBin: true
1608
1605
 
1609
- semver@7.7.1:
1610
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1611
- engines: {node: '>=10'}
1612
- hasBin: true
1613
-
1614
1606
  semver@7.7.3:
1615
1607
  resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
1616
1608
  engines: {node: '>=10'}
@@ -1771,8 +1763,8 @@ packages:
1771
1763
  resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1772
1764
  engines: {node: '>= 0.4'}
1773
1765
 
1774
- undici-types@6.19.8:
1775
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
1766
+ undici-types@6.21.0:
1767
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1776
1768
 
1777
1769
  unrs-resolver@1.5.0:
1778
1770
  resolution: {integrity: sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA==}
@@ -1822,11 +1814,6 @@ snapshots:
1822
1814
  tslib: 2.8.1
1823
1815
  optional: true
1824
1816
 
1825
- '@emnapi/runtime@1.4.1':
1826
- dependencies:
1827
- tslib: 2.8.1
1828
- optional: true
1829
-
1830
1817
  '@emnapi/runtime@1.7.1':
1831
1818
  dependencies:
1832
1819
  tslib: 2.8.1
@@ -1998,38 +1985,38 @@ snapshots:
1998
1985
  '@napi-rs/wasm-runtime@0.2.8':
1999
1986
  dependencies:
2000
1987
  '@emnapi/core': 1.4.1
2001
- '@emnapi/runtime': 1.4.1
1988
+ '@emnapi/runtime': 1.7.1
2002
1989
  '@tybys/wasm-util': 0.9.0
2003
1990
  optional: true
2004
1991
 
2005
- '@next/env@15.4.7': {}
1992
+ '@next/env@15.4.11': {}
2006
1993
 
2007
- '@next/eslint-plugin-next@15.4.7':
1994
+ '@next/eslint-plugin-next@15.4.11':
2008
1995
  dependencies:
2009
1996
  fast-glob: 3.3.1
2010
1997
 
2011
- '@next/swc-darwin-arm64@15.4.7':
1998
+ '@next/swc-darwin-arm64@15.4.8':
2012
1999
  optional: true
2013
2000
 
2014
- '@next/swc-darwin-x64@15.4.7':
2001
+ '@next/swc-darwin-x64@15.4.8':
2015
2002
  optional: true
2016
2003
 
2017
- '@next/swc-linux-arm64-gnu@15.4.7':
2004
+ '@next/swc-linux-arm64-gnu@15.4.8':
2018
2005
  optional: true
2019
2006
 
2020
- '@next/swc-linux-arm64-musl@15.4.7':
2007
+ '@next/swc-linux-arm64-musl@15.4.8':
2021
2008
  optional: true
2022
2009
 
2023
- '@next/swc-linux-x64-gnu@15.4.7':
2010
+ '@next/swc-linux-x64-gnu@15.4.8':
2024
2011
  optional: true
2025
2012
 
2026
- '@next/swc-linux-x64-musl@15.4.7':
2013
+ '@next/swc-linux-x64-musl@15.4.8':
2027
2014
  optional: true
2028
2015
 
2029
- '@next/swc-win32-arm64-msvc@15.4.7':
2016
+ '@next/swc-win32-arm64-msvc@15.4.8':
2030
2017
  optional: true
2031
2018
 
2032
- '@next/swc-win32-x64-msvc@15.4.7':
2019
+ '@next/swc-win32-x64-msvc@15.4.8':
2033
2020
  optional: true
2034
2021
 
2035
2022
  '@nodelib/fs.scandir@2.1.5':
@@ -2146,9 +2133,9 @@ snapshots:
2146
2133
  postcss: 8.5.3
2147
2134
  tailwindcss: 4.1.4
2148
2135
 
2149
- '@trieb.work/nextjs-turbo-redis-cache@file:../../..(next@15.4.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(redis@4.7.0)':
2136
+ '@trieb.work/nextjs-turbo-redis-cache@file:../../..(next@15.4.11(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(redis@4.7.0)':
2150
2137
  dependencies:
2151
- next: 15.4.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2138
+ next: 15.4.11(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
2152
2139
  redis: 4.7.0
2153
2140
 
2154
2141
  '@tybys/wasm-util@0.9.0':
@@ -2162,9 +2149,9 @@ snapshots:
2162
2149
 
2163
2150
  '@types/json5@0.0.29': {}
2164
2151
 
2165
- '@types/node@20.17.30':
2152
+ '@types/node@22.19.19':
2166
2153
  dependencies:
2167
- undici-types: 6.19.8
2154
+ undici-types: 6.21.0
2168
2155
 
2169
2156
  '@types/react-dom@19.1.3(@types/react@19.1.3)':
2170
2157
  dependencies:
@@ -2229,7 +2216,7 @@ snapshots:
2229
2216
  fast-glob: 3.3.3
2230
2217
  is-glob: 4.0.3
2231
2218
  minimatch: 9.0.5
2232
- semver: 7.7.1
2219
+ semver: 7.7.3
2233
2220
  ts-api-utils: 2.1.0(typescript@5.8.3)
2234
2221
  typescript: 5.8.3
2235
2222
  transitivePeerDependencies:
@@ -2624,9 +2611,9 @@ snapshots:
2624
2611
 
2625
2612
  escape-string-regexp@4.0.0: {}
2626
2613
 
2627
- eslint-config-next@15.4.7(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
2614
+ eslint-config-next@15.4.11(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
2628
2615
  dependencies:
2629
- '@next/eslint-plugin-next': 15.4.7
2616
+ '@next/eslint-plugin-next': 15.4.11
2630
2617
  '@rushstack/eslint-patch': 1.11.0
2631
2618
  '@typescript-eslint/eslint-plugin': 8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
2632
2619
  '@typescript-eslint/parser': 8.30.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
@@ -3001,7 +2988,7 @@ snapshots:
3001
2988
 
3002
2989
  is-bun-module@2.0.0:
3003
2990
  dependencies:
3004
- semver: 7.7.1
2991
+ semver: 7.7.3
3005
2992
 
3006
2993
  is-callable@1.2.7: {}
3007
2994
 
@@ -3218,24 +3205,24 @@ snapshots:
3218
3205
 
3219
3206
  natural-compare@1.4.0: {}
3220
3207
 
3221
- next@15.4.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
3208
+ next@15.4.11(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
3222
3209
  dependencies:
3223
- '@next/env': 15.4.7
3210
+ '@next/env': 15.4.11
3224
3211
  '@swc/helpers': 0.5.15
3225
3212
  caniuse-lite: 1.0.30001713
3226
3213
  postcss: 8.4.31
3227
- react: 19.1.0
3228
- react-dom: 19.1.0(react@19.1.0)
3229
- styled-jsx: 5.1.6(react@19.1.0)
3214
+ react: 19.2.0
3215
+ react-dom: 19.2.0(react@19.2.0)
3216
+ styled-jsx: 5.1.6(react@19.2.0)
3230
3217
  optionalDependencies:
3231
- '@next/swc-darwin-arm64': 15.4.7
3232
- '@next/swc-darwin-x64': 15.4.7
3233
- '@next/swc-linux-arm64-gnu': 15.4.7
3234
- '@next/swc-linux-arm64-musl': 15.4.7
3235
- '@next/swc-linux-x64-gnu': 15.4.7
3236
- '@next/swc-linux-x64-musl': 15.4.7
3237
- '@next/swc-win32-arm64-msvc': 15.4.7
3238
- '@next/swc-win32-x64-msvc': 15.4.7
3218
+ '@next/swc-darwin-arm64': 15.4.8
3219
+ '@next/swc-darwin-x64': 15.4.8
3220
+ '@next/swc-linux-arm64-gnu': 15.4.8
3221
+ '@next/swc-linux-arm64-musl': 15.4.8
3222
+ '@next/swc-linux-x64-gnu': 15.4.8
3223
+ '@next/swc-linux-x64-musl': 15.4.8
3224
+ '@next/swc-win32-arm64-msvc': 15.4.8
3225
+ '@next/swc-win32-x64-msvc': 15.4.8
3239
3226
  sharp: 0.34.5
3240
3227
  transitivePeerDependencies:
3241
3228
  - '@babel/core'
@@ -3348,14 +3335,14 @@ snapshots:
3348
3335
 
3349
3336
  queue-microtask@1.2.3: {}
3350
3337
 
3351
- react-dom@19.1.0(react@19.1.0):
3338
+ react-dom@19.2.0(react@19.2.0):
3352
3339
  dependencies:
3353
- react: 19.1.0
3354
- scheduler: 0.26.0
3340
+ react: 19.2.0
3341
+ scheduler: 0.27.0
3355
3342
 
3356
3343
  react-is@16.13.1: {}
3357
3344
 
3358
- react@19.1.0: {}
3345
+ react@19.2.0: {}
3359
3346
 
3360
3347
  redis@4.7.0:
3361
3348
  dependencies:
@@ -3427,14 +3414,11 @@ snapshots:
3427
3414
  es-errors: 1.3.0
3428
3415
  is-regex: 1.2.1
3429
3416
 
3430
- scheduler@0.26.0: {}
3417
+ scheduler@0.27.0: {}
3431
3418
 
3432
3419
  semver@6.3.1: {}
3433
3420
 
3434
- semver@7.7.1: {}
3435
-
3436
- semver@7.7.3:
3437
- optional: true
3421
+ semver@7.7.3: {}
3438
3422
 
3439
3423
  set-function-length@1.2.2:
3440
3424
  dependencies:
@@ -3582,10 +3566,10 @@ snapshots:
3582
3566
 
3583
3567
  strip-json-comments@3.1.1: {}
3584
3568
 
3585
- styled-jsx@5.1.6(react@19.1.0):
3569
+ styled-jsx@5.1.6(react@19.2.0):
3586
3570
  dependencies:
3587
3571
  client-only: 0.0.1
3588
- react: 19.1.0
3572
+ react: 19.2.0
3589
3573
 
3590
3574
  supports-color@7.2.0:
3591
3575
  dependencies:
@@ -3665,7 +3649,7 @@ snapshots:
3665
3649
  has-symbols: 1.1.0
3666
3650
  which-boxed-primitive: 1.1.1
3667
3651
 
3668
- undici-types@6.19.8: {}
3652
+ undici-types@6.21.0: {}
3669
3653
 
3670
3654
  unrs-resolver@1.5.0:
3671
3655
  optionalDependencies: