@pantheon-systems/nextjs-cache-handler 0.1.0 → 0.2.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 (58) hide show
  1. package/README.md +110 -0
  2. package/dist/handlers/base.d.ts +9 -0
  3. package/dist/handlers/base.d.ts.map +1 -1
  4. package/dist/handlers/base.js +22 -0
  5. package/dist/handlers/base.js.map +1 -1
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +15 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/middleware/index.d.ts +2 -0
  11. package/dist/middleware/index.d.ts.map +1 -0
  12. package/dist/middleware/index.js +2 -0
  13. package/dist/middleware/index.js.map +1 -0
  14. package/dist/middleware/surrogate-key.d.ts +29 -0
  15. package/dist/middleware/surrogate-key.d.ts.map +1 -0
  16. package/dist/middleware/surrogate-key.js +66 -0
  17. package/dist/middleware/surrogate-key.js.map +1 -0
  18. package/dist/use-cache/file-handler.d.ts +71 -0
  19. package/dist/use-cache/file-handler.d.ts.map +1 -0
  20. package/dist/use-cache/file-handler.js +366 -0
  21. package/dist/use-cache/file-handler.js.map +1 -0
  22. package/dist/use-cache/gcs-handler.d.ts +64 -0
  23. package/dist/use-cache/gcs-handler.d.ts.map +1 -0
  24. package/dist/use-cache/gcs-handler.js +406 -0
  25. package/dist/use-cache/gcs-handler.js.map +1 -0
  26. package/dist/use-cache/index.d.ts +58 -0
  27. package/dist/use-cache/index.d.ts.map +1 -0
  28. package/dist/use-cache/index.js +87 -0
  29. package/dist/use-cache/index.js.map +1 -0
  30. package/dist/use-cache/stream-serialization.d.ts +34 -0
  31. package/dist/use-cache/stream-serialization.d.ts.map +1 -0
  32. package/dist/use-cache/stream-serialization.js +96 -0
  33. package/dist/use-cache/stream-serialization.js.map +1 -0
  34. package/dist/use-cache/types.d.ts +202 -0
  35. package/dist/use-cache/types.d.ts.map +1 -0
  36. package/dist/use-cache/types.js +9 -0
  37. package/dist/use-cache/types.js.map +1 -0
  38. package/dist/utils/cache-tag-context.d.ts +66 -0
  39. package/dist/utils/cache-tag-context.d.ts.map +1 -0
  40. package/dist/utils/cache-tag-context.js +126 -0
  41. package/dist/utils/cache-tag-context.js.map +1 -0
  42. package/dist/utils/index.d.ts +3 -0
  43. package/dist/utils/index.d.ts.map +1 -1
  44. package/dist/utils/index.js +3 -0
  45. package/dist/utils/index.js.map +1 -1
  46. package/dist/utils/request-context.d.ts +28 -0
  47. package/dist/utils/request-context.d.ts.map +1 -0
  48. package/dist/utils/request-context.js +54 -0
  49. package/dist/utils/request-context.js.map +1 -0
  50. package/dist/utils/request-context.test.d.ts +2 -0
  51. package/dist/utils/request-context.test.d.ts.map +1 -0
  52. package/dist/utils/request-context.test.js +65 -0
  53. package/dist/utils/request-context.test.js.map +1 -0
  54. package/dist/utils/with-surrogate-key.d.ts +32 -0
  55. package/dist/utils/with-surrogate-key.d.ts.map +1 -0
  56. package/dist/utils/with-surrogate-key.js +113 -0
  57. package/dist/utils/with-surrogate-key.js.map +1 -0
  58. package/package.json +15 -1
package/README.md CHANGED
@@ -150,6 +150,116 @@ await cacheHandler.revalidateTag('posts');
150
150
  // All entries tagged with 'posts' are invalidated
151
151
  ```
152
152
 
153
+ ## Surrogate-Key Header Propagation
154
+
155
+ The cache handler automatically propagates cache tags to `Surrogate-Key` HTTP response headers, enabling standard CDN cache invalidation workflows.
156
+
157
+ ### Quick Setup
158
+
159
+ 1. Create or update `middleware.ts` in your app root:
160
+
161
+ ```typescript
162
+ export { middleware, config } from '@pantheon-systems/nextjs-cache-handler/middleware';
163
+ ```
164
+
165
+ 2. That's it! Cache tags now appear in response headers:
166
+
167
+ ```bash
168
+ # Request a cached page
169
+ curl -I https://your-app.com/blog/my-post
170
+
171
+ # Response includes:
172
+ # Surrogate-Key: blog-posts featured-content api-data
173
+ ```
174
+
175
+ ### How It Works
176
+
177
+ When you use `cacheTag()` in your Next.js code:
178
+
179
+ ```typescript
180
+ import { cacheTag, cacheLife } from 'next/cache';
181
+
182
+ async function getBlogPost(slug: string) {
183
+ 'use cache';
184
+ cacheLife('blog'); // 5min revalidation
185
+ cacheTag('blog-posts', `post-${slug}`);
186
+
187
+ return await fetchPost(slug);
188
+ }
189
+ ```
190
+
191
+ The middleware automatically:
192
+ 1. Captures tags from cache hits during page rendering
193
+ 2. Aggregates all tags from multiple cache entries
194
+ 3. Sets the `Surrogate-Key` header with space-separated tags
195
+ 4. Merges with any existing Surrogate-Key headers
196
+
197
+ ### Benefits
198
+
199
+ - **Standard CDN Integration**: Works with any CDN that supports Surrogate-Key headers
200
+ - **Redundant Purging**: Complements API-based cache clearing for reliability
201
+ - **Debugging**: Easily see which tags apply to each response
202
+ - **Zero Config**: Just re-export the middleware
203
+
204
+ ### Advanced Configuration
205
+
206
+ Customize the middleware behavior:
207
+
208
+ ```typescript
209
+ import { createSurrogateKeyMiddleware } from '@pantheon-systems/nextjs-cache-handler/middleware';
210
+
211
+ export const middleware = createSurrogateKeyMiddleware({
212
+ debug: true, // Enable debug logging
213
+ fallbackKey: 'my-app', // Custom fallback when no tags
214
+ });
215
+
216
+ export const config = {
217
+ matcher: ['/app/*'], // Custom route matching
218
+ };
219
+ ```
220
+
221
+ ### Integration with Edge Cache
222
+
223
+ The Surrogate-Key headers work alongside the existing API-based edge cache clearing:
224
+
225
+ **When you call `revalidateTag('blog-posts')`:**
226
+
227
+ 1. ✅ Origin cache entries deleted
228
+ 2. ✅ Edge cache purged via API: `DELETE /cache/keys/blog-posts`
229
+ 3. ✅ Edge cache validates via Surrogate-Key headers
230
+
231
+ This provides **dual-layer invalidation** for maximum reliability.
232
+
233
+ ### Verification
234
+
235
+ Check that Surrogate-Key headers are being set:
236
+
237
+ ```bash
238
+ # Development
239
+ curl -I http://localhost:3000/your-page
240
+
241
+ # Production
242
+ curl -I https://your-app.com/your-page
243
+ ```
244
+
245
+ Look for the `Surrogate-Key` header in the response.
246
+
247
+ ### Troubleshooting
248
+
249
+ **No Surrogate-Key header appearing?**
250
+
251
+ 1. Verify middleware is set up: Check `middleware.ts` exists and exports correctly
252
+ 2. Check if page is using cache: Only cached pages have tags
253
+ 3. Enable debug mode: Use `createSurrogateKeyMiddleware({ debug: true })`
254
+ 4. Check logs: Look for tag capture messages in server logs
255
+
256
+ **Tags not matching expectations?**
257
+
258
+ - Tags are captured from **cache hits**, not cache misses
259
+ - First request to a page (cache miss) won't have tags
260
+ - Subsequent requests (cache hits) will include tags
261
+ - Use `cacheTag()` in 'use cache' blocks to ensure tags are stored
262
+
153
263
  ## Build Invalidation
154
264
 
155
265
  On each new build, the handler automatically:
@@ -48,6 +48,15 @@ export declare abstract class BaseCacheHandler {
48
48
  protected determineCacheType(ctx?: CacheHandlerParametersGet[1]): 'fetch' | 'route';
49
49
  protected determineCacheTypeFromValue(incrementalCacheValue: CacheHandlerParametersSet[1]): 'fetch' | 'route';
50
50
  get(cacheKey: CacheHandlerParametersGet[0], ctx?: CacheHandlerParametersGet[1]): Promise<CacheHandlerValue | null>;
51
+ /**
52
+ * Captures cache tags for propagation to response headers.
53
+ * Called during cache hits to track which tags apply to the current response.
54
+ *
55
+ * @param tags - Tags associated with the cache entry
56
+ * @param cacheKey - The cache key being accessed
57
+ * @param cacheType - Whether this is fetch or route cache
58
+ */
59
+ protected captureTagsForResponse(tags: Readonly<string[]>, cacheKey: string, cacheType: 'fetch' | 'route'): void;
51
60
  set(cacheKey: CacheHandlerParametersSet[0], incrementalCacheValue: CacheHandlerParametersSet[1], ctx: CacheHandlerParametersSet[2] & {
52
61
  tags?: string[];
53
62
  revalidate?: Revalidate;
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/handlers/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/handlers/base.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { serializeForStorage, deserializeFromStorage } from '../utils/serialization.js';
2
2
  import { getBuildId, isBuildPhase } from '../utils/build-detection.js';
3
3
  import { createLogger } from '../utils/logger.js';
4
+ import { RequestContext } from '../utils/request-context.js';
4
5
  // Global singleton to track if build invalidation has been checked for this process
5
6
  let buildInvalidationChecked = false;
6
7
  /**
@@ -165,6 +166,10 @@ export class BaseCacheHandler {
165
166
  entryType: typeof entry,
166
167
  hasValue: entry && typeof entry === 'object' && 'value' in entry,
167
168
  });
169
+ // Capture tags for Surrogate-Key header propagation
170
+ if (entry.tags && entry.tags.length > 0) {
171
+ this.captureTagsForResponse(entry.tags, cacheKey, cacheType);
172
+ }
168
173
  return entry;
169
174
  }
170
175
  catch (error) {
@@ -172,6 +177,23 @@ export class BaseCacheHandler {
172
177
  return null;
173
178
  }
174
179
  }
180
+ /**
181
+ * Captures cache tags for propagation to response headers.
182
+ * Called during cache hits to track which tags apply to the current response.
183
+ *
184
+ * @param tags - Tags associated with the cache entry
185
+ * @param cacheKey - The cache key being accessed
186
+ * @param cacheType - Whether this is fetch or route cache
187
+ */
188
+ captureTagsForResponse(tags, cacheKey, cacheType) {
189
+ if (!RequestContext.isActive()) {
190
+ // Not in a request context (e.g., during build)
191
+ // This is normal and expected - skip silently
192
+ return;
193
+ }
194
+ RequestContext.addTags([...tags]);
195
+ this.log.debug(`Captured ${tags.length} tags for Surrogate-Key (${cacheType}/${cacheKey}): ${tags.join(', ')}`);
196
+ }
175
197
  async set(cacheKey, incrementalCacheValue, ctx) {
176
198
  const cacheType = this.determineCacheTypeFromValue(incrementalCacheValue);
177
199
  this.log.debug(`SET: ${cacheKey} (${cacheType})`, {
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/handlers/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/handlers/base.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -43,5 +43,10 @@ export declare function getSharedCacheStats(): Promise<CacheStats>;
43
43
  export declare function clearSharedCache(): Promise<number>;
44
44
  export { FileCacheHandler } from './handlers/file.js';
45
45
  export { GcsCacheHandler } from './handlers/gcs.js';
46
+ export { RequestContext } from './utils/request-context.js';
47
+ export { withSurrogateKey, type SurrogateKeyOptions } from './utils/with-surrogate-key.js';
48
+ export { createSurrogateKeyMiddleware, middleware as surrogateKeyMiddleware, config as surrogateKeyMiddlewareConfig, type SurrogateKeyMiddlewareConfig, } from './middleware/index.js';
46
49
  export type { CacheHandlerConfig, CacheStats, CacheEntryInfo, CacheContext, CacheEntry, CacheData, CacheHandlerValue, CacheHandlerParametersGet, CacheHandlerParametersSet, CacheHandlerParametersRevalidateTag, FileSystemCacheContext, Revalidate, LifespanParameters, SerializedBuffer, SerializedMap, SerializableValue, SerializedCacheData, } from './types.js';
50
+ export { createUseCacheHandler, UseCacheFileHandler, UseCacheGcsHandler, streamToBytes, bytesToStream, serializeUseCacheEntry, deserializeUseCacheEntry, getUseCacheStats, } from './use-cache/index.js';
51
+ export type { UseCacheEntry, UseCacheHandler, UseCacheHandlerConfig, SerializedUseCacheEntry, UseCacheStats, UseCacheEntryInfo, } from './use-cache/index.js';
47
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAgF,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,eAAe,EAA8E,MAAM,mBAAmB,CAAC;AAEhI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,gBAAgB,GAAG,OAAO,eAAe,CAQhH;AAcD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAK/D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAMD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,mCAAmC,EACnC,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAgF,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,eAAe,EAA8E,MAAM,mBAAmB,CAAC;AAEhI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,gBAAgB,GAAG,OAAO,eAAe,CAQhH;AAcD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAK/D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAMD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAO5D,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAG3F,OAAO,EACL,4BAA4B,EAC5B,UAAU,IAAI,sBAAsB,EACpC,MAAM,IAAI,4BAA4B,EACtC,KAAK,4BAA4B,GAClC,MAAM,uBAAuB,CAAC;AAM/B,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,mCAAmC,EACnC,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,iBAAiB,GAClB,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -70,4 +70,19 @@ export async function clearSharedCache() {
70
70
  // ============================================================================
71
71
  export { FileCacheHandler } from './handlers/file.js';
72
72
  export { GcsCacheHandler } from './handlers/gcs.js';
73
+ // ============================================================================
74
+ // Request context for tag tracking
75
+ // ============================================================================
76
+ export { RequestContext } from './utils/request-context.js';
77
+ // ============================================================================
78
+ // Surrogate-Key header propagation utilities
79
+ // ============================================================================
80
+ // Route handler wrapper (recommended approach)
81
+ export { withSurrogateKey } from './utils/with-surrogate-key.js';
82
+ // Legacy middleware exports (Note: middleware runs before route, so tags may not be captured)
83
+ export { createSurrogateKeyMiddleware, middleware as surrogateKeyMiddleware, config as surrogateKeyMiddlewareConfig, } from './middleware/index.js';
84
+ // ============================================================================
85
+ // Next.js 16 'use cache' Handler Exports
86
+ // ============================================================================
87
+ export { createUseCacheHandler, UseCacheFileHandler, UseCacheGcsHandler, streamToBytes, bytesToStream, serializeUseCacheEntry, deserializeUseCacheEntry, getUseCacheStats, } from './use-cache/index.js';
73
88
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,gBAAgB,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,eAAe,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,gBAAgB,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;IAEpC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B;IACjD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,4CAA4C;AAC5C,+EAA+E;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,gBAAgB,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,eAAe,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,gBAAgB,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;IAEpC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B;IACjD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,4CAA4C;AAC5C,+EAA+E;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAE/E,+CAA+C;AAC/C,OAAO,EAAE,gBAAgB,EAA4B,MAAM,+BAA+B,CAAC;AAE3F,8FAA8F;AAC9F,OAAO,EACL,4BAA4B,EAC5B,UAAU,IAAI,sBAAsB,EACpC,MAAM,IAAI,4BAA4B,GAEvC,MAAM,uBAAuB,CAAC;AA0B/B,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createSurrogateKeyMiddleware, middleware, config, type SurrogateKeyMiddlewareConfig, } from './surrogate-key.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,4BAA4B,GAClC,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createSurrogateKeyMiddleware, middleware, config, } from './surrogate-key.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,UAAU,EACV,MAAM,GAEP,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { NextRequest, NextResponse } from 'next/server.js';
2
+ export interface SurrogateKeyMiddlewareConfig {
3
+ /** Enable debug logging for middleware operations */
4
+ debug?: boolean;
5
+ /** Fallback Surrogate-Key when no tags are captured */
6
+ fallbackKey?: string;
7
+ /** Custom matcher pattern for middleware */
8
+ matcher?: string[];
9
+ }
10
+ /**
11
+ * Creates middleware that propagates cache tags to Surrogate-Key headers.
12
+ *
13
+ * @param config - Optional configuration
14
+ * @returns Next.js middleware function
15
+ */
16
+ export declare function createSurrogateKeyMiddleware(config?: SurrogateKeyMiddlewareConfig): (request: NextRequest) => NextResponse<unknown>;
17
+ /**
18
+ * Default middleware instance with standard configuration.
19
+ * Import and re-export from your app's middleware.ts for zero-config setup.
20
+ */
21
+ export declare const middleware: (request: NextRequest) => NextResponse<unknown>;
22
+ /**
23
+ * Default matcher that excludes static assets and Next.js internals.
24
+ * Can be customized by passing config to createSurrogateKeyMiddleware.
25
+ */
26
+ export declare const config: {
27
+ matcher: string[];
28
+ };
29
+ //# sourceMappingURL=surrogate-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surrogate-key.d.ts","sourceRoot":"","sources":["../../src/middleware/surrogate-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM3D,MAAM,WAAW,4BAA4B;IAC3C,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,GAAE,4BAAiC,IAOzD,SAAS,WAAW,2BA6ChD;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,YAnDe,WAAW,0BAmDO,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,MAAM;;CAIlB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { NextResponse } from 'next/server.js';
2
+ import { RequestContext } from '../utils/request-context.js';
3
+ import { createLogger } from '../utils/logger.js';
4
+ const log = createLogger('SurrogateKeyMiddleware');
5
+ /**
6
+ * Creates middleware that propagates cache tags to Surrogate-Key headers.
7
+ *
8
+ * @param config - Optional configuration
9
+ * @returns Next.js middleware function
10
+ */
11
+ export function createSurrogateKeyMiddleware(config = {}) {
12
+ const { debug = false, fallbackKey = 'page-content', matcher, } = config;
13
+ return function middleware(request) {
14
+ const { pathname } = request.nextUrl;
15
+ if (debug) {
16
+ log.debug(`Processing request: ${pathname}`);
17
+ }
18
+ // Initialize request context for tag tracking
19
+ return RequestContext.run(() => {
20
+ const response = NextResponse.next();
21
+ // Get all tags accumulated during request (from cache hits)
22
+ const capturedTags = RequestContext.getTags();
23
+ // Merge with any existing Surrogate-Key from next.config.mjs or other sources
24
+ const existingKey = response.headers.get('Surrogate-Key');
25
+ const existingTags = existingKey && existingKey !== 'unknown'
26
+ ? existingKey.split(/\s+/).filter(Boolean)
27
+ : [];
28
+ // Combine and deduplicate all tags
29
+ const allTags = [...new Set([...existingTags, ...capturedTags])];
30
+ if (allTags.length > 0) {
31
+ // Set Surrogate-Key header with space-separated tags
32
+ const surrogateKey = allTags.join(' ');
33
+ response.headers.set('Surrogate-Key', surrogateKey);
34
+ if (debug) {
35
+ log.debug(`Set Surrogate-Key: ${surrogateKey}`);
36
+ response.headers.set('x-cache-tags-count', String(capturedTags.length));
37
+ }
38
+ }
39
+ else if (fallbackKey) {
40
+ // No tags captured - use fallback if provided
41
+ if (!existingKey) {
42
+ response.headers.set('Surrogate-Key', fallbackKey);
43
+ }
44
+ if (debug) {
45
+ log.debug(`No cache tags captured, using fallback: ${fallbackKey}`);
46
+ }
47
+ }
48
+ return response;
49
+ });
50
+ };
51
+ }
52
+ /**
53
+ * Default middleware instance with standard configuration.
54
+ * Import and re-export from your app's middleware.ts for zero-config setup.
55
+ */
56
+ export const middleware = createSurrogateKeyMiddleware();
57
+ /**
58
+ * Default matcher that excludes static assets and Next.js internals.
59
+ * Can be customized by passing config to createSurrogateKeyMiddleware.
60
+ */
61
+ export const config = {
62
+ matcher: [
63
+ '/((?!_next/static|_next/image|favicon.ico|.*\\.png|.*\\.jpg|.*\\.jpeg|.*\\.gif|.*\\.svg).*)',
64
+ ],
65
+ };
66
+ //# sourceMappingURL=surrogate-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surrogate-key.js","sourceRoot":"","sources":["../../src/middleware/surrogate-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AAWnD;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAAuC,EAAE;IACpF,MAAM,EACJ,KAAK,GAAG,KAAK,EACb,WAAW,GAAG,cAAc,EAC5B,OAAO,GACR,GAAG,MAAM,CAAC;IAEX,OAAO,SAAS,UAAU,CAAC,OAAoB;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAErC,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,8CAA8C;QAC9C,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE;YAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;YAErC,4DAA4D;YAC5D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;YAE9C,8EAA8E;YAC9E,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,WAAW,IAAI,WAAW,KAAK,SAAS;gBAC3D,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC1C,CAAC,CAAC,EAAE,CAAC;YAEP,mCAAmC;YACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,qDAAqD;gBACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gBAEpD,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,KAAK,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;oBAChD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,8CAA8C;gBAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,KAAK,CAAC,2CAA2C,WAAW,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,4BAA4B,EAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,6FAA6F;KAC9F;CACF,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { UseCacheEntry, UseCacheHandler, UseCacheStats } from './types.js';
2
+ /**
3
+ * Configuration for UseCacheFileHandler.
4
+ */
5
+ export interface UseCacheFileHandlerConfig {
6
+ /**
7
+ * Directory to store cache files.
8
+ * Defaults to .next/cache/use-cache
9
+ */
10
+ cacheDir?: string;
11
+ }
12
+ /**
13
+ * File-based cache handler for Next.js 16 'use cache' directive.
14
+ * Implements the cacheHandlers (plural) interface.
15
+ *
16
+ * Suitable for:
17
+ * - Local development
18
+ * - Single-instance deployments
19
+ * - Testing
20
+ */
21
+ export declare class UseCacheFileHandler implements UseCacheHandler {
22
+ private readonly cacheDir;
23
+ private readonly tagsFile;
24
+ private tagTimestamps;
25
+ private pathToSurrogateKeys;
26
+ private readonly edgeCacheClearer;
27
+ constructor(config?: UseCacheFileHandlerConfig);
28
+ private ensureCacheDir;
29
+ private loadTagTimestamps;
30
+ private saveTagTimestamps;
31
+ private getCacheFilePath;
32
+ /**
33
+ * Check if an entry is expired based on revalidate time.
34
+ */
35
+ private isExpired;
36
+ /**
37
+ * Retrieve a cache entry.
38
+ */
39
+ get(cacheKey: string, softTags: string[]): Promise<UseCacheEntry | undefined>;
40
+ /**
41
+ * Store a cache entry.
42
+ * CRITICAL: Must await pendingEntry before storing.
43
+ */
44
+ set(cacheKey: string, pendingEntry: Promise<UseCacheEntry>): Promise<void>;
45
+ /**
46
+ * Synchronize tag state from external source.
47
+ * For file-based handler, this reloads from disk.
48
+ */
49
+ refreshTags(): Promise<void>;
50
+ /**
51
+ * Return maximum revalidation timestamp for given tags.
52
+ */
53
+ getExpiration(tags: string[]): Promise<number>;
54
+ /**
55
+ * Register the surrogate keys associated with a path.
56
+ * Called by withSurrogateKey via globalThis Symbol.
57
+ */
58
+ registerPathTags(path: string, surrogateKeys: string[]): void;
59
+ /**
60
+ * Invalidate cache entries with matching tags.
61
+ * Also triggers CDN edge cache clearing via Surrogate-Key if configured.
62
+ */
63
+ updateTags(tags: string[], durations: number[]): Promise<void>;
64
+ /**
65
+ * Get cache statistics for the use-cache entries.
66
+ * Returns information about all valid (non-expired) cache entries.
67
+ */
68
+ getStats(): Promise<UseCacheStats>;
69
+ }
70
+ export default UseCacheFileHandler;
71
+ //# sourceMappingURL=file-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-handler.d.ts","sourceRoot":"","sources":["../../src/use-cache/file-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AA6EnG;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;gBAE7C,MAAM,GAAE,yBAA8B;IAoBlD,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAiDnF;;;OAGG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyChF;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAcpD;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAK7D;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DpE;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;CAmEzC;AAED,eAAe,mBAAmB,CAAC"}