@eyeballs/cms 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.
- package/README.md +47 -0
- package/dist/client.d.ts +8 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +27 -5
- package/dist/client.js.map +1 -1
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +7 -1
- package/dist/helpers.js.map +1 -1
- package/dist/next.d.ts +49 -0
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +93 -30
- package/dist/next.js.map +1 -1
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/content-api.md +54 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,9 +15,13 @@ in the Vercel project environment:
|
|
|
15
15
|
```txt
|
|
16
16
|
EYEBALLS_CMS_URL=https://app.example.com
|
|
17
17
|
EYEBALLS_CMS_TOKEN=eyb_...
|
|
18
|
+
EYEBALLS_CMS_VERCEL_BYPASS=...
|
|
18
19
|
REVALIDATE_SECRET=eyb_reval_...
|
|
19
20
|
```
|
|
20
21
|
|
|
22
|
+
`EYEBALLS_CMS_VERCEL_BYPASS` is only needed when the CMS deployment uses Vercel Deployment
|
|
23
|
+
Protection. `VERCEL_AUTOMATION_BYPASS_SECRET` is also a useful fallback name in website projects.
|
|
24
|
+
|
|
21
25
|
## Basic Usage
|
|
22
26
|
|
|
23
27
|
```ts
|
|
@@ -31,6 +35,46 @@ const cms = createEyeballsCms({
|
|
|
31
35
|
const videos: CmsVideo[] = await cms.videos.list();
|
|
32
36
|
```
|
|
33
37
|
|
|
38
|
+
`defaultRequestInit.headers` can supply any other deployment-specific request headers. The client
|
|
39
|
+
always adds the CMS bearer token and can add `x-vercel-protection-bypass` through the dedicated
|
|
40
|
+
`vercelProtectionBypass` option.
|
|
41
|
+
|
|
42
|
+
## Recommended Next.js Adapter
|
|
43
|
+
|
|
44
|
+
Keep one small server-only adapter in each website. The Next client applies a one-hour default
|
|
45
|
+
revalidation window and the tag names used by Eyeballs revalidation webhooks:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
// src/lib/cms.ts
|
|
49
|
+
import type { CmsContentEntry, CmsVideo } from '@eyeballs/cms';
|
|
50
|
+
import { createEyeballsNextCms } from '@eyeballs/cms/next';
|
|
51
|
+
import { cache } from 'react';
|
|
52
|
+
|
|
53
|
+
type HomeFields = {
|
|
54
|
+
'hero-title'?: string;
|
|
55
|
+
'featured-work'?: CmsVideo[];
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const cms = createEyeballsNextCms({
|
|
59
|
+
baseUrl: process.env.EYEBALLS_CMS_URL!,
|
|
60
|
+
token: process.env.EYEBALLS_CMS_TOKEN!,
|
|
61
|
+
revalidate: 3600,
|
|
62
|
+
vercelProtectionBypass:
|
|
63
|
+
process.env.EYEBALLS_CMS_VERCEL_BYPASS || process.env.VERCEL_AUTOMATION_BYPASS_SECRET,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
export const getHome = cache(async () => {
|
|
67
|
+
return cms.content.getBySlug<HomeFields>('home');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export type HomeEntry = CmsContentEntry<HomeFields>;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The helper assigns `work`, `work:{slug}`, `roster`, `roster-profile:{slug}`, `content`,
|
|
74
|
+
`content-type:{typeSlug}`, and `content:{entrySlug}` tags as appropriate. Use
|
|
75
|
+
`eyeballsCmsCacheTags` and a method's `tags` option when a site needs a route-specific override,
|
|
76
|
+
such as `roster:directors`.
|
|
77
|
+
|
|
34
78
|
## Next.js Revalidation Route
|
|
35
79
|
|
|
36
80
|
```ts
|
|
@@ -42,6 +86,9 @@ export const POST = createEyeballsRevalidateHandler({
|
|
|
42
86
|
});
|
|
43
87
|
```
|
|
44
88
|
|
|
89
|
+
The handler preserves Next's default `revalidatePath(path)` behavior. Pass `pathType: 'page'` or
|
|
90
|
+
`pathType: 'layout'` only when a site intentionally needs that scope.
|
|
91
|
+
|
|
45
92
|
## Agent Instructions For Starter Sites
|
|
46
93
|
|
|
47
94
|
Add this to the starter site's `AGENTS.md`:
|
package/dist/client.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { CmsContentEntry, CmsRosterProfile, CmsVideo } from './types.js';
|
|
2
1
|
export type EyeballsCmsClientOptions = {
|
|
3
2
|
baseUrl: string;
|
|
4
3
|
token: string;
|
|
5
4
|
fetch?: typeof fetch;
|
|
6
5
|
defaultRequestInit?: RequestInit;
|
|
6
|
+
vercelProtectionBypass?: string | null;
|
|
7
7
|
};
|
|
8
8
|
export declare class EyeballsCmsError extends Error {
|
|
9
9
|
status: number;
|
|
@@ -13,20 +13,20 @@ export declare class EyeballsCmsError extends Error {
|
|
|
13
13
|
export declare function createEyeballsCms(options: EyeballsCmsClientOptions): {
|
|
14
14
|
request: <T>(path: string, init?: RequestInit) => Promise<T>;
|
|
15
15
|
videos: {
|
|
16
|
-
list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<CmsVideo<Fields>[]>;
|
|
17
|
-
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsVideo<Fields>>;
|
|
16
|
+
list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<import("./types.js").CmsVideo<Fields>[]>;
|
|
17
|
+
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsVideo<Fields>>;
|
|
18
18
|
};
|
|
19
19
|
roster: {
|
|
20
|
-
list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<CmsRosterProfile<Fields>[]>;
|
|
21
|
-
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsRosterProfile<Fields>>;
|
|
20
|
+
list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<import("./types.js").CmsRosterProfile<Fields>[]>;
|
|
21
|
+
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsRosterProfile<Fields>>;
|
|
22
22
|
};
|
|
23
23
|
content: {
|
|
24
24
|
list<Fields extends Record<string, unknown> = Record<string, unknown>>(options?: {
|
|
25
25
|
type?: string;
|
|
26
26
|
slug?: string;
|
|
27
|
-
}): Promise<CmsContentEntry<Fields>[]>;
|
|
28
|
-
getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsContentEntry<Fields>>;
|
|
29
|
-
getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string): Promise<CmsContentEntry<Fields>>;
|
|
27
|
+
}): Promise<import("./types.js").CmsContentEntry<Fields>[]>;
|
|
28
|
+
getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsContentEntry<Fields>>;
|
|
29
|
+
getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string): Promise<import("./types.js").CmsContentEntry<Fields>>;
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
32
|
export type EyeballsCmsClient = ReturnType<typeof createEyeballsCms>;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAM7D;AAsBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;cAO3C,CAAC,QAAQ,MAAM,SAAQ,WAAW,KAAQ,OAAO,CAAC,CAAC,CAAC;;aAgD9D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAIvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAIvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC;YACtF,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;SACd;kBASe,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/C,MAAM;yBAQZ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/B,MAAM,QAAQ,MAAM;;EAQ9B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -35,21 +35,43 @@ export function createEyeballsCms(options) {
|
|
|
35
35
|
const requestFetch = options.fetch ?? fetch;
|
|
36
36
|
async function request(path, init = {}) {
|
|
37
37
|
const headers = new Headers(options.defaultRequestInit?.headers);
|
|
38
|
+
const vercelProtectionBypass = options.vercelProtectionBypass?.trim();
|
|
39
|
+
if (vercelProtectionBypass) {
|
|
40
|
+
headers.set('x-vercel-protection-bypass', vercelProtectionBypass);
|
|
41
|
+
}
|
|
38
42
|
new Headers(init.headers).forEach((value, key) => headers.set(key, value));
|
|
39
43
|
headers.set('authorization', `Bearer ${token}`);
|
|
40
|
-
const
|
|
44
|
+
const url = joinPath(baseUrl, path);
|
|
45
|
+
const res = await requestFetch(url, {
|
|
41
46
|
...options.defaultRequestInit,
|
|
42
47
|
...init,
|
|
43
48
|
headers,
|
|
44
49
|
});
|
|
45
50
|
const text = await res.text();
|
|
46
|
-
|
|
51
|
+
let payload = null;
|
|
52
|
+
if (text) {
|
|
53
|
+
try {
|
|
54
|
+
payload = JSON.parse(text);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
payload = text;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
47
60
|
if (!res.ok) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
const isVercelProtectionPage = res.status === 401 &&
|
|
62
|
+
typeof payload === 'string' &&
|
|
63
|
+
(payload.includes('Vercel Authentication') ||
|
|
64
|
+
payload.includes('x-vercel-protection-bypass'));
|
|
65
|
+
const message = isVercelProtectionPage
|
|
66
|
+
? `Eyeballs CMS request failed: ${res.status}. Vercel Deployment Protection blocked ${url}; configure vercelProtectionBypass with the CMS project's Protection Bypass for Automation secret.`
|
|
67
|
+
: payload && typeof payload === 'object' && 'error' in payload
|
|
68
|
+
? String(payload.error)
|
|
69
|
+
: `Eyeballs CMS request failed: ${res.status}${typeof payload === 'string' ? ` ${payload.slice(0, 1000)}` : ''}`;
|
|
51
70
|
throw new EyeballsCmsError(message, res.status, payload);
|
|
52
71
|
}
|
|
72
|
+
if (typeof payload === 'string') {
|
|
73
|
+
throw new EyeballsCmsError('Eyeballs CMS returned invalid JSON', res.status, payload);
|
|
74
|
+
}
|
|
53
75
|
return payload;
|
|
54
76
|
}
|
|
55
77
|
return {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/helpers.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CmsContentEntry, CmsRosterProfile, CmsVideo } from './types.js';
|
|
2
2
|
export declare function trimSlashes(value: string): string;
|
|
3
|
+
export declare function normalizeWebsitePath(path: string): string;
|
|
3
4
|
export declare function getContentEntryPath(entry: CmsContentEntry): string | null;
|
|
4
5
|
export declare function getContentTypePath(typeSlug: string): string | null;
|
|
5
6
|
export declare function getRosterProfilePath(profile: Pick<CmsRosterProfile, 'slug' | 'type'>, pathPrefix?: string | null): string | null;
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAExC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,iBAWzD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAGlD;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC,EAChD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,iBAM1B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAO/E"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAExC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAIhD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,iBAWzD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAGlD;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC,EAChD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,iBAM1B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAO/E"}
|
package/dist/helpers.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
export function trimSlashes(value) {
|
|
2
2
|
return value.trim().replace(/^\/+|\/+$/g, '');
|
|
3
3
|
}
|
|
4
|
+
export function normalizeWebsitePath(path) {
|
|
5
|
+
const normalized = path.trim();
|
|
6
|
+
if (!normalized || normalized === '/')
|
|
7
|
+
return '/';
|
|
8
|
+
return `/${trimSlashes(normalized)}`;
|
|
9
|
+
}
|
|
4
10
|
export function getContentEntryPath(entry) {
|
|
5
11
|
if (entry.type?.kind === 'pages') {
|
|
6
12
|
const websitePath = entry.website_path?.trim();
|
|
7
13
|
if (!websitePath || websitePath === '/')
|
|
8
14
|
return '/';
|
|
9
|
-
return websitePath
|
|
15
|
+
return normalizeWebsitePath(websitePath);
|
|
10
16
|
}
|
|
11
17
|
const typeSlug = entry.type?.slug ? trimSlashes(entry.type.slug) : '';
|
|
12
18
|
const entrySlug = trimSlashes(entry.slug);
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACzD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAClD,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACzD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACpD,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,OAAgD,EAChD,UAA0B;IAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,UAA6B,EAAE;IAC/E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,yBAAyB,UAAU,iBAAiB,KAAK,EAAE,CAAC;AACpE,CAAC"}
|
package/dist/next.d.ts
CHANGED
|
@@ -1,9 +1,58 @@
|
|
|
1
|
+
import { type EyeballsCmsClientOptions } from './client.js';
|
|
2
|
+
import type { CmsContentEntry } from './types.js';
|
|
3
|
+
export declare const eyeballsCmsCacheTags: {
|
|
4
|
+
readonly all: "eyeballs-cms";
|
|
5
|
+
readonly work: "work";
|
|
6
|
+
readonly workItem: (slug: string) => string;
|
|
7
|
+
readonly roster: "roster";
|
|
8
|
+
readonly rosterType: (typeRouteSlug: string) => string;
|
|
9
|
+
readonly rosterProfile: (slug: string) => string;
|
|
10
|
+
readonly content: "content";
|
|
11
|
+
readonly contentType: (typeSlug: string) => string;
|
|
12
|
+
readonly contentEntry: (slug: string) => string;
|
|
13
|
+
};
|
|
14
|
+
type NextFetchRequestInit = RequestInit & {
|
|
15
|
+
next?: {
|
|
16
|
+
revalidate?: number | false;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type EyeballsNextCmsOptions = Omit<EyeballsCmsClientOptions, 'defaultRequestInit'> & {
|
|
21
|
+
revalidate?: number | false;
|
|
22
|
+
defaultRequestInit?: NextFetchRequestInit;
|
|
23
|
+
};
|
|
24
|
+
export type EyeballsNextRequestOptions = {
|
|
25
|
+
tags?: string[];
|
|
26
|
+
};
|
|
27
|
+
export declare function createEyeballsNextCms(options: EyeballsNextCmsOptions): {
|
|
28
|
+
request<T>(path: string, init?: RequestInit, request?: EyeballsNextRequestOptions): Promise<T>;
|
|
29
|
+
videos: {
|
|
30
|
+
list<Fields extends Record<string, unknown> = Record<string, unknown>>(request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsVideo<Fields>[]>;
|
|
31
|
+
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsVideo<Fields>>;
|
|
32
|
+
};
|
|
33
|
+
roster: {
|
|
34
|
+
list<Fields extends Record<string, unknown> = Record<string, unknown>>(request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsRosterProfile<Fields>[]>;
|
|
35
|
+
get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsRosterProfile<Fields>>;
|
|
36
|
+
};
|
|
37
|
+
content: {
|
|
38
|
+
list<Fields extends Record<string, unknown> = Record<string, unknown>>(options?: {
|
|
39
|
+
type?: string;
|
|
40
|
+
slug?: string;
|
|
41
|
+
tags?: string[];
|
|
42
|
+
}): Promise<CmsContentEntry<Fields>[]>;
|
|
43
|
+
getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<CmsContentEntry<Fields>>;
|
|
44
|
+
getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string, request?: EyeballsNextRequestOptions): Promise<CmsContentEntry<Fields>>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export type EyeballsNextCmsClient = ReturnType<typeof createEyeballsNextCms>;
|
|
1
48
|
export type EyeballsRevalidationPayload = {
|
|
2
49
|
tags?: string[];
|
|
3
50
|
paths?: string[];
|
|
4
51
|
};
|
|
5
52
|
export type EyeballsRevalidateHandlerOptions = {
|
|
6
53
|
secret: string | null | undefined;
|
|
54
|
+
pathType?: 'layout' | 'page';
|
|
7
55
|
};
|
|
8
56
|
export declare function createEyeballsRevalidateHandler(options: EyeballsRevalidateHandlerOptions): (req: Request) => Promise<Response>;
|
|
57
|
+
export {};
|
|
9
58
|
//# sourceMappingURL=next.d.ts.map
|
package/dist/next.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,oBAAoB;;;8BAGf,MAAM;;yCAEK,MAAM;mCACZ,MAAM;;qCAEJ,MAAM;kCACT,MAAM;CAClB,CAAC;AAEX,KAAK,oBAAoB,GAAG,WAAW,GAAG;IACzC,IAAI,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,GAAG;IAC3F,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB;YAuB3D,CAAC,QAAQ,MAAM,SAAS,WAAW,YAAY,0BAA0B;;aAO3E,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAChC,0BAA0B;YAMjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACnC,MAAM,YACF,0BAA0B;;;aAWhC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAChC,0BAA0B;YAMjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACnC,MAAM,YACF,0BAA0B;;;aAQhC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC;YAChF,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SAChB,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;kBAS5B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM,YACF,0BAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;yBAKlB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAChD,MAAM,QACN,MAAM,YACF,0BAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;EAUrC;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE7E,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B,CAAC;AASF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,IAG7D,KAAK,OAAO,uBA6BvC"}
|
package/dist/next.js
CHANGED
|
@@ -1,53 +1,116 @@
|
|
|
1
1
|
import { revalidatePath, revalidateTag } from 'next/cache';
|
|
2
|
+
import { createEyeballsCms } from './client.js';
|
|
3
|
+
export const eyeballsCmsCacheTags = {
|
|
4
|
+
all: 'eyeballs-cms',
|
|
5
|
+
work: 'work',
|
|
6
|
+
workItem: (slug) => `work:${slug}`,
|
|
7
|
+
roster: 'roster',
|
|
8
|
+
rosterType: (typeRouteSlug) => `roster:${typeRouteSlug}`,
|
|
9
|
+
rosterProfile: (slug) => `roster-profile:${slug}`,
|
|
10
|
+
content: 'content',
|
|
11
|
+
contentType: (typeSlug) => `content-type:${typeSlug}`,
|
|
12
|
+
contentEntry: (slug) => `content:${slug}`,
|
|
13
|
+
};
|
|
14
|
+
function trimCacheValues(values) {
|
|
15
|
+
return values.map(value => value.trim()).filter(Boolean);
|
|
16
|
+
}
|
|
17
|
+
export function createEyeballsNextCms(options) {
|
|
18
|
+
const { defaultRequestInit, revalidate = 3600, ...clientOptions } = options;
|
|
19
|
+
function client(tags) {
|
|
20
|
+
const defaultNext = defaultRequestInit?.next;
|
|
21
|
+
return createEyeballsCms({
|
|
22
|
+
...clientOptions,
|
|
23
|
+
defaultRequestInit: {
|
|
24
|
+
...defaultRequestInit,
|
|
25
|
+
next: {
|
|
26
|
+
...defaultNext,
|
|
27
|
+
revalidate,
|
|
28
|
+
tags: trimCacheValues(tags),
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function tagsOrDefault(request, tags) {
|
|
34
|
+
return request?.tags ?? tags;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
request(path, init, request) {
|
|
38
|
+
return client(tagsOrDefault(request, [eyeballsCmsCacheTags.all])).request(path, init);
|
|
39
|
+
},
|
|
40
|
+
videos: {
|
|
41
|
+
list(request) {
|
|
42
|
+
return client(tagsOrDefault(request, [eyeballsCmsCacheTags.work])).videos.list();
|
|
43
|
+
},
|
|
44
|
+
get(slug, request) {
|
|
45
|
+
return client(tagsOrDefault(request, [
|
|
46
|
+
eyeballsCmsCacheTags.work,
|
|
47
|
+
eyeballsCmsCacheTags.workItem(slug),
|
|
48
|
+
])).videos.get(slug);
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
roster: {
|
|
52
|
+
list(request) {
|
|
53
|
+
return client(tagsOrDefault(request, [eyeballsCmsCacheTags.roster])).roster.list();
|
|
54
|
+
},
|
|
55
|
+
get(slug, request) {
|
|
56
|
+
return client(tagsOrDefault(request, [eyeballsCmsCacheTags.rosterProfile(slug)])).roster.get(slug);
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
content: {
|
|
60
|
+
list(options) {
|
|
61
|
+
const tags = options?.type
|
|
62
|
+
? [eyeballsCmsCacheTags.contentType(options.type)]
|
|
63
|
+
: [eyeballsCmsCacheTags.content];
|
|
64
|
+
return client(tagsOrDefault(options, tags)).content.list({
|
|
65
|
+
type: options?.type,
|
|
66
|
+
slug: options?.slug,
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
getBySlug(slug, request) {
|
|
70
|
+
return client(tagsOrDefault(request, [eyeballsCmsCacheTags.contentEntry(slug)])).content.getBySlug(slug);
|
|
71
|
+
},
|
|
72
|
+
getByTypeAndSlug(type, slug, request) {
|
|
73
|
+
return client(tagsOrDefault(request, [
|
|
74
|
+
eyeballsCmsCacheTags.contentType(type),
|
|
75
|
+
eyeballsCmsCacheTags.contentEntry(slug),
|
|
76
|
+
])).content.getByTypeAndSlug(type, slug);
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
2
81
|
function json(payload, status = 200) {
|
|
3
82
|
return new Response(JSON.stringify(payload), {
|
|
4
83
|
status,
|
|
5
84
|
headers: { 'content-type': 'application/json' },
|
|
6
85
|
});
|
|
7
86
|
}
|
|
8
|
-
function getHeader(req, name) {
|
|
9
|
-
return req.headers.get(name)?.trim() || '';
|
|
10
|
-
}
|
|
11
|
-
function normalizePath(path) {
|
|
12
|
-
if (typeof path !== 'string')
|
|
13
|
-
return null;
|
|
14
|
-
const trimmed = path.trim();
|
|
15
|
-
return trimmed.startsWith('/') ? trimmed : null;
|
|
16
|
-
}
|
|
17
|
-
function normalizeTag(tag) {
|
|
18
|
-
if (typeof tag !== 'string')
|
|
19
|
-
return null;
|
|
20
|
-
const trimmed = tag.trim();
|
|
21
|
-
return trimmed || null;
|
|
22
|
-
}
|
|
23
|
-
function isString(value) {
|
|
24
|
-
return typeof value === 'string';
|
|
25
|
-
}
|
|
26
87
|
export function createEyeballsRevalidateHandler(options) {
|
|
27
|
-
const expectedSecret = options.secret
|
|
88
|
+
const expectedSecret = options.secret || '';
|
|
28
89
|
return async function POST(req) {
|
|
29
|
-
if (!expectedSecret) {
|
|
30
|
-
return json({
|
|
31
|
-
}
|
|
32
|
-
const providedSecret = getHeader(req, 'x-revalidate-secret');
|
|
33
|
-
if (providedSecret !== expectedSecret) {
|
|
34
|
-
return json({ ok: false, error: 'Unauthorized' }, 401);
|
|
90
|
+
if (!expectedSecret || req.headers.get('x-revalidate-secret') !== expectedSecret) {
|
|
91
|
+
return json({ error: 'Unauthorized' }, 401);
|
|
35
92
|
}
|
|
36
93
|
let body = {};
|
|
37
94
|
try {
|
|
38
95
|
body = (await req.json());
|
|
39
96
|
}
|
|
40
97
|
catch {
|
|
41
|
-
return json({
|
|
98
|
+
return json({ error: 'Invalid JSON body' }, 400);
|
|
42
99
|
}
|
|
43
|
-
const tags = Array.isArray(body.tags)
|
|
100
|
+
const tags = Array.isArray(body.tags)
|
|
101
|
+
? body.tags.filter((tag) => typeof tag === 'string')
|
|
102
|
+
: [];
|
|
44
103
|
const paths = Array.isArray(body.paths)
|
|
45
|
-
? body.paths.
|
|
104
|
+
? body.paths.filter((path) => typeof path === 'string' && path.startsWith('/'))
|
|
46
105
|
: [];
|
|
47
106
|
for (const tag of tags)
|
|
48
107
|
revalidateTag(tag, 'max');
|
|
49
|
-
for (const path of paths)
|
|
50
|
-
|
|
108
|
+
for (const path of paths) {
|
|
109
|
+
if (options.pathType)
|
|
110
|
+
revalidatePath(path, options.pathType);
|
|
111
|
+
else
|
|
112
|
+
revalidatePath(path);
|
|
113
|
+
}
|
|
51
114
|
return json({ ok: true, tags, paths });
|
|
52
115
|
};
|
|
53
116
|
}
|
package/dist/next.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -135,4 +135,22 @@ export type CmsContentEntry<Fields extends Record<string, unknown> = Record<stri
|
|
|
135
135
|
export type EyeballsCmsErrorPayload = {
|
|
136
136
|
error: string;
|
|
137
137
|
};
|
|
138
|
+
export type CmsVideosResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
139
|
+
videos: CmsVideo<Fields>[];
|
|
140
|
+
};
|
|
141
|
+
export type CmsVideoResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
142
|
+
video: CmsVideo<Fields>;
|
|
143
|
+
};
|
|
144
|
+
export type CmsRosterResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
145
|
+
roster: CmsRosterProfile<Fields>[];
|
|
146
|
+
};
|
|
147
|
+
export type CmsRosterProfileResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
148
|
+
roster: CmsRosterProfile<Fields>;
|
|
149
|
+
};
|
|
150
|
+
export type CmsContentResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
151
|
+
content: CmsContentEntry<Fields>[];
|
|
152
|
+
};
|
|
153
|
+
export type CmsContentEntryResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
|
|
154
|
+
content: CmsContentEntry<Fields>;
|
|
155
|
+
};
|
|
138
156
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/docs/content-api.md
CHANGED
|
@@ -19,18 +19,27 @@ EYEBALLS_CMS_URL=https://app.example.com
|
|
|
19
19
|
EYEBALLS_CMS_TOKEN=eyb_...
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Next.js starter sites should configure the shared package in one server-only adapter:
|
|
23
23
|
|
|
24
24
|
```ts
|
|
25
|
-
import {
|
|
25
|
+
import { createEyeballsNextCms } from '@eyeballs/cms/next';
|
|
26
26
|
|
|
27
|
-
const cms =
|
|
27
|
+
const cms = createEyeballsNextCms({
|
|
28
28
|
baseUrl: process.env.EYEBALLS_CMS_URL!,
|
|
29
29
|
token: process.env.EYEBALLS_CMS_TOKEN!,
|
|
30
|
+
revalidate: 3600,
|
|
31
|
+
vercelProtectionBypass:
|
|
32
|
+
process.env.EYEBALLS_CMS_VERCEL_BYPASS || process.env.VERCEL_AUTOMATION_BYPASS_SECRET,
|
|
30
33
|
});
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
`createEyeballsNextCms` adds the bearer token, applies the configured Next.js revalidation period,
|
|
37
|
+
and uses the same cache tags sent by Eyeballs frontend revalidation webhooks. It accepts custom
|
|
38
|
+
request headers through `defaultRequestInit.headers` and sends
|
|
39
|
+
`x-vercel-protection-bypass` when `vercelProtectionBypass` is configured.
|
|
40
|
+
|
|
41
|
+
For non-Next.js integrations, use `createEyeballsCms`. Every direct request must include either a
|
|
42
|
+
bearer token or an `x-api-key` header:
|
|
34
43
|
|
|
35
44
|
```ts
|
|
36
45
|
async function cmsFetch(path: string) {
|
|
@@ -316,14 +325,14 @@ Use the Content API docs to build /journal and /journal/[slug].
|
|
|
316
325
|
Values are returned in `entry.fields`, `video.fields`, or `roster.fields` by field ID.
|
|
317
326
|
|
|
318
327
|
| Field type | API value |
|
|
319
|
-
| ------------------------------------- | ------------------------------------------------ |
|
|
328
|
+
| ------------------------------------- | ------------------------------------------------ |
|
|
320
329
|
| `text` | `string` |
|
|
321
330
|
| `textarea` | `string` |
|
|
322
331
|
| `richtext` | `string` containing HTML |
|
|
323
332
|
| `boolean` | `boolean` |
|
|
324
333
|
| `image` | image URL string |
|
|
325
334
|
| `date` | date string |
|
|
326
|
-
| `library_work` with `multiple: false` | `CmsVideo
|
|
335
|
+
| `library_work` with `multiple: false` | `CmsVideo \| null` |
|
|
327
336
|
| `library_work` with multiple/default | `CmsVideo[]` |
|
|
328
337
|
| `content_blocks` | `ContentBlock[]` |
|
|
329
338
|
| `array` | array of objects with `_key` plus item field IDs |
|
|
@@ -464,36 +473,68 @@ roster:{typeRouteSlug}
|
|
|
464
473
|
Library work changes can also revalidate work pages, roster profiles, and content entries that
|
|
465
474
|
reference the changed video through `library_work` fields.
|
|
466
475
|
|
|
476
|
+
Next.js sites should use the packaged route handler:
|
|
477
|
+
|
|
478
|
+
```ts
|
|
479
|
+
// app/api/revalidate/route.ts
|
|
480
|
+
import { createEyeballsRevalidateHandler } from '@eyeballs/cms/next';
|
|
481
|
+
|
|
482
|
+
export const POST = createEyeballsRevalidateHandler({
|
|
483
|
+
secret: process.env.REVALIDATE_SECRET,
|
|
484
|
+
});
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
The handler authenticates `x-revalidate-secret`, ignores non-string tags and invalid paths, calls
|
|
488
|
+
`revalidateTag(tag, 'max')`, and calls `revalidatePath(path)`. A site can opt into a specific Next
|
|
489
|
+
path scope with `pathType: 'page'` or `pathType: 'layout'`.
|
|
490
|
+
|
|
491
|
+
### Cache Tags Used By The Next Client
|
|
492
|
+
|
|
493
|
+
| Request | Default tags |
|
|
494
|
+
| ------------------------------- | ------------------------------------------------ |
|
|
495
|
+
| Video list | `work` |
|
|
496
|
+
| Video detail | `work`, `work:{slug}` |
|
|
497
|
+
| Roster list | `roster` |
|
|
498
|
+
| Roster profile | `roster-profile:{slug}` |
|
|
499
|
+
| Content list | `content` |
|
|
500
|
+
| Content type list | `content-type:{typeSlug}` |
|
|
501
|
+
| Content detail by slug | `content:{entrySlug}` |
|
|
502
|
+
| Content detail by type and slug | `content-type:{typeSlug}`, `content:{entrySlug}` |
|
|
503
|
+
|
|
504
|
+
Methods accept a `tags` override for site-specific routing conventions. For example, a directors
|
|
505
|
+
listing can use `eyeballsCmsCacheTags.rosterType('directors')`. React's `cache()` remains a thin
|
|
506
|
+
site-adapter concern because memoization boundaries depend on each site's routing and render tree.
|
|
507
|
+
|
|
467
508
|
## Starter Site Recipes
|
|
468
509
|
|
|
469
510
|
### List Published Work
|
|
470
511
|
|
|
471
512
|
```ts
|
|
472
|
-
const
|
|
513
|
+
const videos = await cms.videos.list();
|
|
473
514
|
```
|
|
474
515
|
|
|
475
516
|
### Work Detail Page
|
|
476
517
|
|
|
477
518
|
```ts
|
|
478
|
-
const
|
|
519
|
+
const video = await cms.videos.get(params.slug);
|
|
479
520
|
```
|
|
480
521
|
|
|
481
522
|
### Collection List
|
|
482
523
|
|
|
483
524
|
```ts
|
|
484
|
-
const
|
|
525
|
+
const content = await cms.content.list({ type: 'journal' });
|
|
485
526
|
```
|
|
486
527
|
|
|
487
528
|
### Collection Detail
|
|
488
529
|
|
|
489
530
|
```ts
|
|
490
|
-
const
|
|
531
|
+
const entry = await cms.content.getByTypeAndSlug('journal', params.slug);
|
|
491
532
|
```
|
|
492
533
|
|
|
493
534
|
### Page By Slug
|
|
494
535
|
|
|
495
536
|
```ts
|
|
496
|
-
const
|
|
537
|
+
const page = await cms.content.getBySlug('home');
|
|
497
538
|
```
|
|
498
539
|
|
|
499
540
|
For page routing, prefer matching by `website_path` from the content list when the route is not
|
|
@@ -502,8 +543,8 @@ the same as the entry slug.
|
|
|
502
543
|
### Roster List And Profile
|
|
503
544
|
|
|
504
545
|
```ts
|
|
505
|
-
const
|
|
506
|
-
const
|
|
546
|
+
const roster = await cms.roster.list();
|
|
547
|
+
const profile = await cms.roster.get(params.slug);
|
|
507
548
|
```
|
|
508
549
|
|
|
509
550
|
## Maintenance Checklist
|