@se-studio/core-ui 1.28.6 → 1.29.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/CHANGELOG.md +14 -0
- package/dist/components/banner/BannerClient.d.ts +3 -7
- package/dist/components/banner/BannerClient.d.ts.map +1 -1
- package/dist/components/banner/BannerClient.js +5 -3
- package/dist/components/banner/BannerClient.js.map +1 -1
- package/dist/components/banner/BannerManager.d.ts +2 -5
- package/dist/components/banner/BannerManager.d.ts.map +1 -1
- package/dist/components/banner/BannerManager.js +3 -1
- package/dist/components/banner/BannerManager.js.map +1 -1
- package/dist/components/banner/bannerClientCandidate.d.ts +29 -0
- package/dist/components/banner/bannerClientCandidate.d.ts.map +1 -0
- package/dist/components/banner/bannerClientCandidate.js +38 -0
- package/dist/components/banner/bannerClientCandidate.js.map +1 -0
- package/dist/components/banner/bannerVisibility.d.ts +9 -5
- package/dist/components/banner/bannerVisibility.d.ts.map +1 -1
- package/dist/components/banner/bannerVisibility.js +2 -4
- package/dist/components/banner/bannerVisibility.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/route-handlers/createOgImageHandler.d.ts +29 -0
- package/dist/route-handlers/createOgImageHandler.d.ts.map +1 -0
- package/dist/route-handlers/createOgImageHandler.js +122 -0
- package/dist/route-handlers/createOgImageHandler.js.map +1 -0
- package/dist/route-handlers/index.d.ts +2 -0
- package/dist/route-handlers/index.d.ts.map +1 -1
- package/dist/route-handlers/index.js +1 -0
- package/dist/route-handlers/index.js.map +1 -1
- package/docs/PACKAGE_EXPORT_BOUNDARIES.md +1 -1
- package/docs/llms.md +32 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @se-studio/core-ui
|
|
2
2
|
|
|
3
|
+
## 1.29.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 550bba3: **Breaking:** Site `Banner` components must accept `IBannerClientCandidate` and render `ctaHref` / `ctaText` (optional `ctaLabel`). Do not use `IBanner` or `ctaLink` in the client UI. There is no compatibility shim.
|
|
8
|
+
|
|
9
|
+
Map filtered banners to slim `IBannerClientCandidate` before `BannerClient` so targeting, schedule, and `ctaLink` stay off the client payload.
|
|
10
|
+
|
|
11
|
+
## 1.28.7
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 0ab8467: Add `createOgImageHandler` so marketing `/og` routes feed Satori a 1200×630 JPEG Images API URL via `contentfulOgImageUrl`.
|
|
16
|
+
|
|
3
17
|
## 1.28.6
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BannerComponentProps, IBannerClientCandidate } from './bannerClientCandidate';
|
|
2
2
|
interface BannerClientProps {
|
|
3
|
-
banners: readonly
|
|
4
|
-
BannerComponent: React.ComponentType<
|
|
5
|
-
banner: IBanner;
|
|
6
|
-
onDismiss: () => void;
|
|
7
|
-
onClick?: () => void;
|
|
8
|
-
}>;
|
|
3
|
+
banners: readonly IBannerClientCandidate[];
|
|
4
|
+
BannerComponent: React.ComponentType<BannerComponentProps>;
|
|
9
5
|
debug?: boolean;
|
|
10
6
|
}
|
|
11
7
|
declare const BannerClient: React.FC<BannerClientProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerClient.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BannerClient.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQ5F,UAAU,iBAAiB;IACzB,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoD7C,CAAC;eAEa,YAAY"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useLayoutEffect, useState } from 'react';
|
|
4
|
-
import { readDismissedBannerStorage, readDismissedSessionBannerIds, selectVisibleBannerId,
|
|
4
|
+
import { readDismissedBannerStorage, readDismissedSessionBannerIds, selectVisibleBannerId, writeBannerDismissal, } from './bannerVisibility';
|
|
5
5
|
const BannerClient = ({ banners, BannerComponent, debug }) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
6
|
+
const [visibleBannerId, setVisibleBannerId] = useState(() => selectVisibleBannerId(banners, {
|
|
7
|
+
dismissedBanners: readDismissedBannerStorage(),
|
|
8
|
+
dismissedSessionBannerIds: readDismissedSessionBannerIds(banners),
|
|
9
|
+
}));
|
|
8
10
|
useLayoutEffect(() => {
|
|
9
11
|
if (debug) {
|
|
10
12
|
console.log('[BannerClient] Syncing visibility with dismissal storage:', banners);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerClient.js","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"BannerClient.js","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,YAAY,GAAgC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE;IACxF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,GAAG,EAAE,CACzE,qBAAqB,CAAC,OAAO,EAAE;QAC7B,gBAAgB,EAAE,0BAA0B,EAAE;QAC9C,yBAAyB,EAAE,6BAA6B,CAAC,OAAO,CAAC;KAClE,CAAC,CACH,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,kBAAkB,CAChB,qBAAqB,CAAC,OAAO,EAAE;YAC7B,gBAAgB,EAAE,0BAA0B,EAAE;YAC9C,yBAAyB,EAAE,6BAA6B,CAAC,OAAO,CAAC;SAClE,CAAC,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAA8B,EAAE,EAAE;QACjC,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,MAA8B,EAAE,EAAE;QACjC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,GACzC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import type { BannerPlacement, IBanner, IBaseModel, ITyped } from '@se-studio/core-data-types';
|
|
2
|
+
import { type BannerComponentProps } from './bannerClientCandidate';
|
|
2
3
|
interface BannerManagerProps {
|
|
3
4
|
content: IBaseModel & {
|
|
4
5
|
tags?: ReadonlyArray<ITyped>;
|
|
5
6
|
};
|
|
6
7
|
banners: ReadonlyArray<IBanner>;
|
|
7
|
-
BannerComponent: React.ComponentType<
|
|
8
|
-
banner: IBanner;
|
|
9
|
-
onDismiss: () => void;
|
|
10
|
-
onClick?: () => void;
|
|
11
|
-
}>;
|
|
8
|
+
BannerComponent: React.ComponentType<BannerComponentProps>;
|
|
12
9
|
/**
|
|
13
10
|
* Layout slot this manager instance renders.
|
|
14
11
|
* Defaults to `top` (under nav / before main). Mount separate managers for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerManager.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"BannerManager.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAI/F,OAAO,EAAE,KAAK,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AAG7F,UAAU,kBAAkB;IAC1B,OAAO,EAAE,UAAU,GAAG;QAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC3D;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,SAAS,GAAE,eAAuB,GACjC,OAAO,EAAE,CAEX;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAiB,GAClB,EAAE,kBAAkB,sCA8BpB"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { resolveBannerPlacement } from '@se-studio/core-data-types';
|
|
3
3
|
import BannerClient from './BannerClient';
|
|
4
4
|
import { BannerTargetingEngine } from './BannerTargeting';
|
|
5
|
+
import { toBannerClientCandidate } from './bannerClientCandidate';
|
|
5
6
|
import { isBannerWithinSchedule, sortBannersByPriority } from './bannerVisibility';
|
|
6
7
|
/**
|
|
7
8
|
* Filter banners for a layout placement slot (default top).
|
|
@@ -30,6 +31,7 @@ export function BannerManager({ content, banners, BannerComponent, placement = '
|
|
|
30
31
|
}
|
|
31
32
|
if (activeBanners.length === 0)
|
|
32
33
|
return null;
|
|
33
|
-
|
|
34
|
+
const clientBanners = activeBanners.map(toBannerClientCandidate);
|
|
35
|
+
return _jsx(BannerClient, { banners: clientBanners, BannerComponent: BannerComponent, debug: debug });
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=BannerManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerManager.js","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BannerManager.js","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAA6B,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAcnF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA+B,EAC/B,SAAS,GAAoB,KAAK;IAElC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAS,GAAG,KAAK,GACE;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,GAAG,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7E,sBAAsB,CAAC,MAAM,CAAC,CAC/B,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,6BAA6B,SAAS,KAAK,aAAa,CAAC,MAAM,yCAAyC,CACzG,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAEjE,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BannerDismissType, BannerPlacement, BannerTheme, IBanner } from '@se-studio/core-data-types';
|
|
2
|
+
/**
|
|
3
|
+
* Client-safe banner payload from `BannerManager`.
|
|
4
|
+
* Targeting, schedule, and fat `ctaLink` stay on the server.
|
|
5
|
+
*
|
|
6
|
+
* **Breaking:** site `Banner` components must type `banner: IBannerClientCandidate`
|
|
7
|
+
* and render `ctaHref` / `ctaText` (optional `ctaLabel` when text is empty).
|
|
8
|
+
* Do not use `IBanner` or `ctaLink` in the client UI. There is no compatibility shim.
|
|
9
|
+
*/
|
|
10
|
+
export interface IBannerClientCandidate {
|
|
11
|
+
id: string;
|
|
12
|
+
priority?: number | null;
|
|
13
|
+
dismissType?: BannerDismissType | null;
|
|
14
|
+
dismissDurationHours?: number | null;
|
|
15
|
+
message?: string | null;
|
|
16
|
+
theme?: BannerTheme | null;
|
|
17
|
+
placement?: BannerPlacement | null;
|
|
18
|
+
ctaText?: string;
|
|
19
|
+
ctaHref?: string;
|
|
20
|
+
ctaLabel?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Props for the site `Banner` component passed to `BannerManager`. */
|
|
23
|
+
export interface BannerComponentProps {
|
|
24
|
+
banner: IBannerClientCandidate;
|
|
25
|
+
onDismiss: () => void;
|
|
26
|
+
onClick?: () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare function toBannerClientCandidate(banner: IBanner): IBannerClientCandidate;
|
|
29
|
+
//# sourceMappingURL=bannerClientCandidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerClientCandidate.d.ts","sourceRoot":"","sources":["../../../src/components/banner/bannerClientCandidate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,OAAO,EACR,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,sBAAsB,CAoC/E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function isNonEmptyString(value) {
|
|
2
|
+
return typeof value === 'string' && value.length > 0;
|
|
3
|
+
}
|
|
4
|
+
export function toBannerClientCandidate(banner) {
|
|
5
|
+
const candidate = { id: banner.id };
|
|
6
|
+
if (banner.priority != null) {
|
|
7
|
+
candidate.priority = banner.priority;
|
|
8
|
+
}
|
|
9
|
+
if (banner.dismissType != null) {
|
|
10
|
+
candidate.dismissType = banner.dismissType;
|
|
11
|
+
}
|
|
12
|
+
if (banner.dismissDurationHours != null) {
|
|
13
|
+
candidate.dismissDurationHours = banner.dismissDurationHours;
|
|
14
|
+
}
|
|
15
|
+
if (banner.message != null) {
|
|
16
|
+
candidate.message = banner.message;
|
|
17
|
+
}
|
|
18
|
+
if (banner.theme != null) {
|
|
19
|
+
candidate.theme = banner.theme;
|
|
20
|
+
}
|
|
21
|
+
if (banner.placement != null) {
|
|
22
|
+
candidate.placement = banner.placement;
|
|
23
|
+
}
|
|
24
|
+
const href = banner.ctaLink?.href;
|
|
25
|
+
if (!isNonEmptyString(href)) {
|
|
26
|
+
return candidate;
|
|
27
|
+
}
|
|
28
|
+
candidate.ctaHref = href;
|
|
29
|
+
const ctaText = banner.ctaLink?.text ?? banner.ctaText ?? undefined;
|
|
30
|
+
if (isNonEmptyString(ctaText)) {
|
|
31
|
+
candidate.ctaText = ctaText;
|
|
32
|
+
}
|
|
33
|
+
else if (isNonEmptyString(banner.ctaLink?.name)) {
|
|
34
|
+
candidate.ctaLabel = banner.ctaLink.name;
|
|
35
|
+
}
|
|
36
|
+
return candidate;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=bannerClientCandidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerClientCandidate.js","sourceRoot":"","sources":["../../../src/components/banner/bannerClientCandidate.ts"],"names":[],"mappings":"AAmCA,SAAS,gBAAgB,CAAC,KAAgC;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,MAAM,SAAS,GAA2B,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAE5D,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;QAC/B,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,IAAI,IAAI,EAAE,CAAC;QACxC,SAAS,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;IAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;IACpE,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9B,CAAC;SAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QAClD,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import type { IBanner } from '@se-studio/core-data-types';
|
|
2
|
+
import type { IBannerClientCandidate } from './bannerClientCandidate';
|
|
2
3
|
export type DismissedBannerRecord = Record<string, {
|
|
3
4
|
timestamp?: string;
|
|
4
5
|
type?: string;
|
|
5
6
|
}>;
|
|
6
|
-
export declare function sortBannersByPriority
|
|
7
|
+
export declare function sortBannersByPriority<T extends {
|
|
8
|
+
priority?: number | null;
|
|
9
|
+
}>(banners: readonly T[]): T[];
|
|
7
10
|
export declare function isBannerWithinSchedule(banner: IBanner, referenceDate?: Date): boolean;
|
|
8
11
|
/**
|
|
9
|
-
* Picks the highest-priority banner that is
|
|
12
|
+
* Picks the highest-priority banner that is not dismissed.
|
|
13
|
+
* Schedule is applied on the server before mapping to slim candidates.
|
|
10
14
|
* Storage arguments are injected so this stays testable without browser APIs.
|
|
11
15
|
*/
|
|
12
|
-
export declare function selectVisibleBannerId(banners: readonly
|
|
16
|
+
export declare function selectVisibleBannerId(banners: readonly IBannerClientCandidate[], { dismissedBanners, dismissedSessionBannerIds, referenceDate, }?: {
|
|
13
17
|
dismissedBanners?: DismissedBannerRecord;
|
|
14
18
|
dismissedSessionBannerIds?: ReadonlySet<string>;
|
|
15
19
|
referenceDate?: Date;
|
|
16
20
|
}): string | null;
|
|
17
21
|
export declare function readDismissedBannerStorage(): DismissedBannerRecord;
|
|
18
|
-
export declare function readDismissedSessionBannerIds(banners: readonly
|
|
19
|
-
export declare function writeBannerDismissal(banner:
|
|
22
|
+
export declare function readDismissedSessionBannerIds(banners: readonly IBannerClientCandidate[]): Set<string>;
|
|
23
|
+
export declare function writeBannerDismissal(banner: IBannerClientCandidate): void;
|
|
20
24
|
//# sourceMappingURL=bannerVisibility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bannerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"bannerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1F,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1E,OAAO,EAAE,SAAS,CAAC,EAAE,GACpB,CAAC,EAAE,CAEL;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,OAAa,GAAG,OAAO,CAQ3F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,EACE,gBAAqB,EACrB,yBAA6C,EAC7C,aAA0B,GAC3B,GAAE;IACD,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,yBAAyB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,IAAI,CAAC;CACjB,GACL,MAAM,GAAG,IAAI,CAyBf;AAED,wBAAgB,0BAA0B,IAAI,qBAAqB,CAMlE;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,sBAAsB,EAAE,GACzC,GAAG,CAAC,MAAM,CAAC,CAab;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAezE"}
|
|
@@ -11,15 +11,13 @@ export function isBannerWithinSchedule(banner, referenceDate = new Date()) {
|
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Picks the highest-priority banner that is
|
|
14
|
+
* Picks the highest-priority banner that is not dismissed.
|
|
15
|
+
* Schedule is applied on the server before mapping to slim candidates.
|
|
15
16
|
* Storage arguments are injected so this stays testable without browser APIs.
|
|
16
17
|
*/
|
|
17
18
|
export function selectVisibleBannerId(banners, { dismissedBanners = {}, dismissedSessionBannerIds = new Set(), referenceDate = new Date(), } = {}) {
|
|
18
19
|
const sortedBanners = sortBannersByPriority(banners);
|
|
19
20
|
for (const banner of sortedBanners) {
|
|
20
|
-
if (!isBannerWithinSchedule(banner, referenceDate)) {
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
21
|
const dismissed = dismissedBanners[banner.id];
|
|
24
22
|
if (!dismissed) {
|
|
25
23
|
return banner.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bannerVisibility.js","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bannerVisibility.js","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -48,6 +48,8 @@ export type { CollectionRegistration, ComponentRegistration, DataTypeRegistratio
|
|
|
48
48
|
export { buildCollectionMaps, buildComponentMaps, buildExternalComponentMaps, buildMarkdownConverters, defineCollection, defineComponent, defineDataType, defineExternalComponent, } from './cmsRegistration';
|
|
49
49
|
export { BannerManager, filterBannersByPlacement } from './components/banner/BannerManager';
|
|
50
50
|
export { BannerTargetingEngine } from './components/banner/BannerTargeting';
|
|
51
|
+
export type { BannerComponentProps, IBannerClientCandidate, } from './components/banner/bannerClientCandidate';
|
|
52
|
+
export { toBannerClientCandidate } from './components/banner/bannerClientCandidate';
|
|
51
53
|
export { isBannerWithinSchedule, selectVisibleBannerId, sortBannersByPriority, } from './components/banner/bannerVisibility';
|
|
52
54
|
export { ClientMonitor } from './components/ClientMonitor.js';
|
|
53
55
|
export type { CollectionMap, CollectionRenderer, CollectionRendererProps, EmbeddedCollectionMap, EmbeddedCollectionRenderer, } from './components/CmsCollection';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,7 @@ export { createVideoEngagementSession, useHtml5VideoEngagement, useVideoEngageme
|
|
|
43
43
|
export { buildCollectionMaps, buildComponentMaps, buildExternalComponentMaps, buildMarkdownConverters, defineCollection, defineComponent, defineDataType, defineExternalComponent, } from './cmsRegistration';
|
|
44
44
|
export { BannerManager, filterBannersByPlacement } from './components/banner/BannerManager';
|
|
45
45
|
export { BannerTargetingEngine } from './components/banner/BannerTargeting';
|
|
46
|
+
export { toBannerClientCandidate } from './components/banner/bannerClientCandidate';
|
|
46
47
|
export { isBannerWithinSchedule, selectVisibleBannerId, sortBannersByPriority, } from './components/banner/bannerVisibility';
|
|
47
48
|
export { ClientMonitor } from './components/ClientMonitor.js';
|
|
48
49
|
export { CmsCollection } from './components/CmsCollection';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAUxD,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAwB3B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ContentfulConfig } from '@se-studio/contentful-rest-api';
|
|
2
|
+
export declare const OG_CACHE_CONTROL = "public, s-maxage=86400, stale-while-revalidate=604800";
|
|
3
|
+
export declare const OG_PREVIEW_CACHE_CONTROL = "private, no-store";
|
|
4
|
+
export interface OgImageHandlerConfig {
|
|
5
|
+
/**
|
|
6
|
+
* Function to get the Contentful configuration.
|
|
7
|
+
* Called on each request to allow for dynamic config.
|
|
8
|
+
*/
|
|
9
|
+
getConfig: (preview?: boolean) => ContentfulConfig;
|
|
10
|
+
/** Whether to use the preview API. Defaults to false. */
|
|
11
|
+
preview?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface OgImageRouteContext {
|
|
14
|
+
params: Promise<{
|
|
15
|
+
imageId: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates Next.js App Router GET and HEAD handlers for `/og/[imageId]`.
|
|
20
|
+
*
|
|
21
|
+
* Satori cannot decode WebP. The CMS asset is fetched, then `contentfulOgImageUrl`
|
|
22
|
+
* supplies a 1200×630 JPEG Images API URL as Satori `<img src>` only.
|
|
23
|
+
* Public og:image stays the site `/og/{id}.jpg` path.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createOgImageHandler(config: OgImageHandlerConfig): {
|
|
26
|
+
GET: (request: Request, context: OgImageRouteContext) => Promise<Response>;
|
|
27
|
+
HEAD: (request: Request, context: OgImageRouteContext) => Promise<Response>;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=createOgImageHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOgImageHandler.d.ts","sourceRoot":"","sources":["../../src/route-handlers/createOgImageHandler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIvE,eAAO,MAAM,gBAAgB,0DAA0D,CAAC;AACxF,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,gBAAgB,CAAC;IACnD,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtC;AA8DD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IAClE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3E,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7E,CAiFA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { contentfulAssetRest, contentfulOgImageUrl } from '@se-studio/contentful-rest-api';
|
|
3
|
+
import { ImageResponse } from 'next/og';
|
|
4
|
+
export const OG_CACHE_CONTROL = 'public, s-maxage=86400, stale-while-revalidate=604800';
|
|
5
|
+
export const OG_PREVIEW_CACHE_CONTROL = 'private, no-store';
|
|
6
|
+
/**
|
|
7
|
+
* Site og:image stays `/og/{assetId}.jpg` (see buildPageMetadata).
|
|
8
|
+
* Contentful Images API `fm=jpg` is Satori input only — do not put that URL in meta.
|
|
9
|
+
* JPEG drops alpha; featured images should be landscape photos or already-backed logos.
|
|
10
|
+
*/
|
|
11
|
+
async function resolveOgSource(imageId, config) {
|
|
12
|
+
const id = imageId.split('.')[0];
|
|
13
|
+
if (!id) {
|
|
14
|
+
return { ok: false, response: new Response('Invalid image ID', { status: 400 }) };
|
|
15
|
+
}
|
|
16
|
+
const preview = config.preview ?? false;
|
|
17
|
+
const cacheControl = preview ? OG_PREVIEW_CACHE_CONTROL : OG_CACHE_CONTROL;
|
|
18
|
+
const asset = await contentfulAssetRest(config.getConfig(preview), id, {
|
|
19
|
+
preview,
|
|
20
|
+
next: { revalidate: preview ? false : 86400 },
|
|
21
|
+
});
|
|
22
|
+
if (!asset?.fields?.file?.url) {
|
|
23
|
+
return { ok: false, response: new Response('Image not found', { status: 404 }) };
|
|
24
|
+
}
|
|
25
|
+
const imageUrl = contentfulOgImageUrl(asset.fields.file.url, {
|
|
26
|
+
contentType: asset.fields.file.contentType,
|
|
27
|
+
});
|
|
28
|
+
if (!imageUrl) {
|
|
29
|
+
return { ok: false, response: new Response('Image not found', { status: 404 }) };
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
imageUrl,
|
|
34
|
+
title: asset.fields.title || 'Featured Image',
|
|
35
|
+
cacheControl,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async function assertOgSourceDecodable(imageUrl) {
|
|
39
|
+
const response = await fetch(imageUrl, {
|
|
40
|
+
cache: 'force-cache',
|
|
41
|
+
next: { revalidate: 86400 },
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const type = response.headers.get('content-type')?.split(';')[0]?.trim() ?? '';
|
|
47
|
+
return type === 'image/jpeg' || type === 'image/jpg' || type === 'image/png';
|
|
48
|
+
}
|
|
49
|
+
function failedToGenerate() {
|
|
50
|
+
return new Response('Failed to generate image', { status: 500 });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates Next.js App Router GET and HEAD handlers for `/og/[imageId]`.
|
|
54
|
+
*
|
|
55
|
+
* Satori cannot decode WebP. The CMS asset is fetched, then `contentfulOgImageUrl`
|
|
56
|
+
* supplies a 1200×630 JPEG Images API URL as Satori `<img src>` only.
|
|
57
|
+
* Public og:image stays the site `/og/{id}.jpg` path.
|
|
58
|
+
*/
|
|
59
|
+
export function createOgImageHandler(config) {
|
|
60
|
+
async function GET(_request, { params }) {
|
|
61
|
+
const { imageId } = await params;
|
|
62
|
+
try {
|
|
63
|
+
const source = await resolveOgSource(imageId, config);
|
|
64
|
+
if (!source.ok) {
|
|
65
|
+
return source.response;
|
|
66
|
+
}
|
|
67
|
+
// Next ImageResponse defaults to max-age=0; options.headers override (Next 16.3).
|
|
68
|
+
return new ImageResponse(_jsx("div", { style: {
|
|
69
|
+
display: 'flex',
|
|
70
|
+
width: '100%',
|
|
71
|
+
height: '100%',
|
|
72
|
+
backgroundColor: '#000',
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
justifyContent: 'center',
|
|
75
|
+
}, children: _jsx("img", { src: source.imageUrl, alt: source.title, width: 1200, height: 630, style: {
|
|
76
|
+
width: '100%',
|
|
77
|
+
height: '100%',
|
|
78
|
+
objectFit: 'cover',
|
|
79
|
+
} }) }), {
|
|
80
|
+
width: 1200,
|
|
81
|
+
height: 630,
|
|
82
|
+
headers: {
|
|
83
|
+
'Cache-Control': source.cacheControl,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
console.error('Error generating OG image:', e);
|
|
89
|
+
return failedToGenerate();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* HEAD validates the JPEG Images API source (the WebP 500 cause) without running Satori.
|
|
94
|
+
* Status matches GET for missing/undecodable assets; GET still renders the PNG card.
|
|
95
|
+
*/
|
|
96
|
+
async function HEAD(_request, { params }) {
|
|
97
|
+
const { imageId } = await params;
|
|
98
|
+
try {
|
|
99
|
+
const source = await resolveOgSource(imageId, config);
|
|
100
|
+
if (!source.ok) {
|
|
101
|
+
return source.response;
|
|
102
|
+
}
|
|
103
|
+
const decodable = await assertOgSourceDecodable(source.imageUrl);
|
|
104
|
+
if (!decodable) {
|
|
105
|
+
return failedToGenerate();
|
|
106
|
+
}
|
|
107
|
+
return new Response(null, {
|
|
108
|
+
status: 200,
|
|
109
|
+
headers: {
|
|
110
|
+
'Content-Type': 'image/png',
|
|
111
|
+
'Cache-Control': source.cacheControl,
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
console.error('Error generating OG image:', e);
|
|
117
|
+
return failedToGenerate();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { GET, HEAD };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=createOgImageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOgImageHandler.js","sourceRoot":"","sources":["../../src/route-handlers/createOgImageHandler.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,6 @@ export type { GuidelinesHandlerOptions } from './createGuidelinesHandler';
|
|
|
6
6
|
export { createGuidelinesHandler } from './createGuidelinesHandler';
|
|
7
7
|
export type { MediaLibraryHandlerOptions } from './createMediaLibraryHandler';
|
|
8
8
|
export { createMediaLibraryJsonHandler, createMediaLibraryMarkdownHandler, } from './createMediaLibraryHandler';
|
|
9
|
+
export type { OgImageHandlerConfig, OgImageRouteContext } from './createOgImageHandler';
|
|
10
|
+
export { createOgImageHandler, OG_CACHE_CONTROL, OG_PREVIEW_CACHE_CONTROL, } from './createOgImageHandler';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route-handlers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,OAAO,GACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route-handlers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,OAAO,GACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC"}
|
|
@@ -2,4 +2,5 @@ export { createCmsTxtHandler } from './createCmsTxtHandler';
|
|
|
2
2
|
export { createDiscoveryHandler } from './createDiscoveryHandler';
|
|
3
3
|
export { createGuidelinesHandler } from './createGuidelinesHandler';
|
|
4
4
|
export { createMediaLibraryJsonHandler, createMediaLibraryMarkdownHandler, } from './createMediaLibraryHandler';
|
|
5
|
+
export { createOgImageHandler, OG_CACHE_CONTROL, OG_PREVIEW_CACHE_CONTROL, } from './createOgImageHandler';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/route-handlers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAW5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/route-handlers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAW5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC"}
|
|
@@ -12,7 +12,7 @@ Next.js App Router mixes **Server Components** and **Client Components** (`'use
|
|
|
12
12
|
|-------|----------------|----------|
|
|
13
13
|
| `@se-studio/core-ui` | **Everyone** — `'use client'` files, server components, registrations | React UI, hooks, `cn`, CMS renderers, registration helpers, shared types |
|
|
14
14
|
| `@se-studio/core-ui/server` | **Server only** — `import 'server-only'` at top | `createAppHelpers`, `createRouteHandlers`, `getRelated*`, `filterRelatedArticles`, listing structured-data helpers, etc. |
|
|
15
|
-
| `@se-studio/core-ui/route-handlers` | **App route modules** (Node `fs`) | Discovery/guidelines/cms.txt handlers |
|
|
15
|
+
| `@se-studio/core-ui/route-handlers` | **App route modules** (Node `fs`) | Discovery/guidelines/cms.txt/OG image handlers |
|
|
16
16
|
|
|
17
17
|
**Do not add a `/client` entry** unless you want stricter enforcement. The main barrel *is* the client-safe surface; `/server` is the explicit server escape hatch.
|
|
18
18
|
|
package/docs/llms.md
CHANGED
|
@@ -33,6 +33,24 @@ import { CmsRoutesLayout } from '@se-studio/core-ui';
|
|
|
33
33
|
// Used in app/[...slug]/layout.tsx to provide breadcrumbs, structured data, etc.
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
+
## Banners
|
|
37
|
+
|
|
38
|
+
`BannerManager` filters full `IBanner` (placement, targeting, schedule) then maps to `IBannerClientCandidate` for `BannerClient`.
|
|
39
|
+
|
|
40
|
+
**Breaking:** Site `Banner` components must type `banner: IBannerClientCandidate` and render `ctaHref` / `ctaText` (optional `ctaLabel` when CTA text is empty). Do not use `IBanner` or `ctaLink` in the client UI. There is no compatibility shim.
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import type { IBannerClientCandidate } from '@se-studio/core-ui';
|
|
44
|
+
|
|
45
|
+
export const Banner: React.FC<{
|
|
46
|
+
banner: IBannerClientCandidate;
|
|
47
|
+
onDismiss: () => void;
|
|
48
|
+
onClick?: () => void;
|
|
49
|
+
}> = ({ banner, onDismiss, onClick }) => {
|
|
50
|
+
// banner.message, banner.ctaHref, banner.ctaText ?? banner.ctaLabel
|
|
51
|
+
};
|
|
52
|
+
```
|
|
53
|
+
|
|
36
54
|
## Registration System
|
|
37
55
|
|
|
38
56
|
Use these to define components and collections (in the app, not in this package):
|
|
@@ -369,6 +387,20 @@ Resolve canonical path with `findCanonicalPath(testsByPath, variantSlug)` from `
|
|
|
369
387
|
|
|
370
388
|
`getRelatedArticles` tag criteria: explicit tag links in the collection → `pageContext.tag` → `pageContext.article.tags`. Pass via `rendererConfig.fetchHelpers.getRelatedArticles` in collections (do not import `cms-server` in registrations). Curated article/person/tag refs in `contents` are **selection and order only** — `getRelated*` helpers always hydrate from `getAll*Links` so publish webhooks revalidate link-shaped UI. For full-list cases (News Grids, Publications Lists, person-scoped or tag-filtered indexes) use `rendererConfig.fetchHelpers.getAllArticleLinks?.({ articleTypeSlugs: [...], tagSlugs: [...], authorIds: [...], strictAuthorMatch: true, ... })` — the wrapper applies `filterRelatedArticles` (OR semantics, scoring, indexed rules). Import `filterRelatedArticles` / `RelatedArticlesOptions` (and the richer `LinkFetchOptions`) from `@se-studio/core-ui/server`. For all people (e.g. team index collections), use `rendererConfig.fetchHelpers.getAllPersonLinks?.()` — returns `CmsResponse<IPersonLink[]>` including resolved `bio` when set. For related tag chips/lists, use `rendererConfig.fetchHelpers.getRelatedTags?.(information, contentContext, count)`.
|
|
371
389
|
|
|
390
|
+
## App route factories (`@se-studio/core-ui/route-handlers`)
|
|
391
|
+
|
|
392
|
+
`createOgImageHandler` — App Router GET/HEAD for `/og/[imageId]`. Fetches the CMS asset and passes a 1200×630 JPEG Images API URL (`contentfulOgImageUrl`) into `next/og` Satori. Public `og:image` stays `/og/{id}.jpg`. Site file still exports `revalidate = 86400` and injects `getConfig` + `preview`.
|
|
393
|
+
|
|
394
|
+
```ts
|
|
395
|
+
import { createOgImageHandler } from '@se-studio/core-ui/route-handlers';
|
|
396
|
+
|
|
397
|
+
export const revalidate = 86400;
|
|
398
|
+
export const { GET, HEAD } = createOgImageHandler({
|
|
399
|
+
getConfig: () => getContentfulConfig(),
|
|
400
|
+
preview: buildInformation.preview ?? false,
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
372
404
|
## Server/Client Rules
|
|
373
405
|
|
|
374
406
|
1. Never import `cms-server` (or anything that imports it) in a client component.
|