@catmint/adapter-vercel 0.0.0-prealpha.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { PlatformCacheAdapter } from "catmint/cache";
2
+ /**
3
+ * Tag-to-routes mapping embedded at build time from the manifest.
4
+ */
5
+ export interface TagRouteMapping {
6
+ [tag: string]: string[];
7
+ }
8
+ /**
9
+ * Options for creating the Vercel cache adapter.
10
+ */
11
+ export interface VercelCacheAdapterOptions {
12
+ /** The bypass token from the build manifest (used for x-prerender-revalidate header) */
13
+ bypassToken: string;
14
+ /** Mapping from cache tags to route paths that use those tags */
15
+ tagToRoutes: TagRouteMapping;
16
+ /**
17
+ * Base URL for self-revalidation requests.
18
+ * In Vercel, this is typically `https://${process.env.VERCEL_URL}` or a custom domain.
19
+ * Falls back to `http://localhost:3000` if not set.
20
+ */
21
+ baseUrl?: string;
22
+ }
23
+ /**
24
+ * Create a Vercel platform cache adapter.
25
+ *
26
+ * This adapter is injected at the top of Vercel serverless function entry points
27
+ * by the adapter's function-gen code. When `invalidateCache()` is called:
28
+ *
29
+ * 1. The in-memory CacheStore is always cleared (handled by catmint/cache itself)
30
+ * 2. This adapter sends revalidation requests to Vercel's edge cache using
31
+ * the `x-prerender-revalidate` header with the bypass token
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { setPlatformCacheAdapter } from 'catmint/cache'
36
+ * import { createVercelCacheAdapter } from './vercel-cache-adapter.js'
37
+ *
38
+ * setPlatformCacheAdapter(createVercelCacheAdapter({
39
+ * bypassToken: 'abc-123',
40
+ * tagToRoutes: { 'homepage': ['/'], 'blog': ['/blog', '/blog/[slug]'] },
41
+ * }))
42
+ * ```
43
+ */
44
+ export declare function createVercelCacheAdapter(options: VercelCacheAdapterOptions): PlatformCacheAdapter;
45
+ //# sourceMappingURL=vercel-cache-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-cache-adapter.d.ts","sourceRoot":"","sources":["../src/vercel-cache-adapter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAA0B,MAAM,eAAe,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,eAAe,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,yBAAyB,GACjC,oBAAoB,CAiEtB"}
@@ -0,0 +1,81 @@
1
+ // @catmint/adapter-vercel — Platform cache adapter for Vercel ISR
2
+ //
3
+ // This module provides a PlatformCacheAdapter implementation that delegates
4
+ // cache invalidation to Vercel's on-demand ISR revalidation API.
5
+ //
6
+ // When invalidateCache() is called in a server function, this adapter sends
7
+ // a revalidation request to the affected routes with the x-prerender-revalidate
8
+ // header, which triggers Vercel to purge its edge cache for those paths.
9
+ /**
10
+ * Create a Vercel platform cache adapter.
11
+ *
12
+ * This adapter is injected at the top of Vercel serverless function entry points
13
+ * by the adapter's function-gen code. When `invalidateCache()` is called:
14
+ *
15
+ * 1. The in-memory CacheStore is always cleared (handled by catmint/cache itself)
16
+ * 2. This adapter sends revalidation requests to Vercel's edge cache using
17
+ * the `x-prerender-revalidate` header with the bypass token
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { setPlatformCacheAdapter } from 'catmint/cache'
22
+ * import { createVercelCacheAdapter } from './vercel-cache-adapter.js'
23
+ *
24
+ * setPlatformCacheAdapter(createVercelCacheAdapter({
25
+ * bypassToken: 'abc-123',
26
+ * tagToRoutes: { 'homepage': ['/'], 'blog': ['/blog', '/blog/[slug]'] },
27
+ * }))
28
+ * ```
29
+ */
30
+ export function createVercelCacheAdapter(options) {
31
+ const { bypassToken, tagToRoutes } = options;
32
+ const baseUrl = options.baseUrl ||
33
+ (typeof process !== "undefined" && process.env.VERCEL_URL
34
+ ? `https://${process.env.VERCEL_URL}`
35
+ : null);
36
+ return {
37
+ name: "@catmint/adapter-vercel",
38
+ async invalidate(invalidateOptions) {
39
+ if (!baseUrl) {
40
+ // No base URL available — can't send revalidation requests.
41
+ // This can happen in local development. The in-memory store
42
+ // is still cleared by catmint/cache, so this is a no-op.
43
+ return;
44
+ }
45
+ const routesToRevalidate = new Set();
46
+ // Collect routes by tag
47
+ if (invalidateOptions.tag) {
48
+ const routes = tagToRoutes[invalidateOptions.tag];
49
+ if (routes) {
50
+ for (const route of routes) {
51
+ routesToRevalidate.add(route);
52
+ }
53
+ }
54
+ }
55
+ // Collect route directly
56
+ if (invalidateOptions.route) {
57
+ routesToRevalidate.add(invalidateOptions.route);
58
+ }
59
+ // Send revalidation requests in parallel
60
+ const revalidationPromises = [...routesToRevalidate].map(async (routePath) => {
61
+ try {
62
+ const url = `${baseUrl}${routePath}`;
63
+ const response = await fetch(url, {
64
+ method: "HEAD",
65
+ headers: {
66
+ "x-prerender-revalidate": bypassToken,
67
+ },
68
+ });
69
+ if (!response.ok) {
70
+ console.warn(`[@catmint/adapter-vercel] ISR revalidation failed for ${routePath}: ${response.status}`);
71
+ }
72
+ }
73
+ catch (err) {
74
+ console.warn(`[@catmint/adapter-vercel] ISR revalidation error for ${routePath}:`, err instanceof Error ? err.message : err);
75
+ }
76
+ });
77
+ await Promise.all(revalidationPromises);
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=vercel-cache-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-cache-adapter.js","sourceRoot":"","sources":["../src/vercel-cache-adapter.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,4EAA4E;AAC5E,iEAAiE;AACjE,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,yEAAyE;AA2BzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAkC;IAElC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,OAAO,GACX,OAAO,CAAC,OAAO;QACf,CAAC,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;YACvD,CAAC,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEZ,OAAO;QACL,IAAI,EAAE,yBAAyB;QAE/B,KAAK,CAAC,UAAU,CAAC,iBAAyC;YACxD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4DAA4D;gBAC5D,4DAA4D;gBAC5D,yDAAyD;gBACzD,OAAO;YACT,CAAC;YAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;YAE7C,wBAAwB;YACxB,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,MAAM,EAAE,CAAC;oBACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;gBAC5B,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;YAED,yCAAyC;YACzC,MAAM,oBAAoB,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,GAAG,CACtD,KAAK,EAAE,SAAS,EAAE,EAAE;gBAClB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;wBAChC,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,wBAAwB,EAAE,WAAW;yBACtC;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CACV,yDAAyD,SAAS,KAAK,QAAQ,CAAC,MAAM,EAAE,CACzF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CACV,wDAAwD,SAAS,GAAG,EACpE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;gBACJ,CAAC;YACH,CAAC,CACF,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@catmint/adapter-vercel",
3
+ "version": "0.0.0-prealpha.1",
4
+ "type": "module",
5
+ "private": false,
6
+ "license": "MIT",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ }
15
+ },
16
+ "dependencies": {
17
+ "catmint": "0.0.0-prealpha.1"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5.7.0"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "test": "vitest run"
25
+ }
26
+ }