@se-studio/core-ui 1.0.28 → 1.0.30
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/dist/components/VisualComponent.d.ts +12 -2
- package/dist/components/VisualComponent.d.ts.map +1 -1
- package/dist/components/VisualComponent.js +26 -4
- package/dist/components/VisualComponent.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/utils/previewPageUtils.d.ts +61 -0
- package/dist/utils/previewPageUtils.d.ts.map +1 -0
- package/dist/utils/previewPageUtils.js +72 -0
- package/dist/utils/previewPageUtils.js.map +1 -0
- package/package.json +3 -3
|
@@ -13,7 +13,9 @@ import type { IVisualProps } from './Visual';
|
|
|
13
13
|
* which enables currentColor support for theming.
|
|
14
14
|
*
|
|
15
15
|
* When a mask is set on the visual, the component wraps the content in a
|
|
16
|
-
* container with
|
|
16
|
+
* container with the mask applied. Masks can be:
|
|
17
|
+
* - URL-based (starts with '/' or 'http'): Uses CSS mask-image
|
|
18
|
+
* - Class-based (Tailwind classes): Applied directly to the container
|
|
17
19
|
*
|
|
18
20
|
* @param visual - Visual data containing image, video, or animation
|
|
19
21
|
* @param muted - Whether video should be muted (default: false)
|
|
@@ -59,13 +61,21 @@ import type { IVisualProps } from './Visual';
|
|
|
59
61
|
* />
|
|
60
62
|
* ```
|
|
61
63
|
*
|
|
62
|
-
* @example Image with mask
|
|
64
|
+
* @example Image with URL-based mask (CSS mask-image)
|
|
63
65
|
* ```tsx
|
|
64
66
|
* <Visual
|
|
65
67
|
* visual={{ ...imageVisual, mask: '/assets/masks/circle.svg' }}
|
|
66
68
|
* className="w-64"
|
|
67
69
|
* />
|
|
68
70
|
* ```
|
|
71
|
+
*
|
|
72
|
+
* @example Image with class-based mask (Tailwind classes)
|
|
73
|
+
* ```tsx
|
|
74
|
+
* <Visual
|
|
75
|
+
* visual={{ ...imageVisual, mask: 'aspect-square rounded-full' }}
|
|
76
|
+
* className="w-64"
|
|
77
|
+
* />
|
|
78
|
+
* ```
|
|
69
79
|
*/
|
|
70
80
|
export declare const Visual: React.FC<{
|
|
71
81
|
visual: IVisual;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualComponent.d.ts","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"VisualComponent.d.ts","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAU7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAgG/D,CAAC"}
|
|
@@ -4,6 +4,13 @@ import { UnsupportedWarning } from '../utils/UnsupportedWarning';
|
|
|
4
4
|
import AnimationServer from './AnimationServer';
|
|
5
5
|
import ImageComponent from './ImageComponent';
|
|
6
6
|
import VideoComponent from './VideoComponent';
|
|
7
|
+
/**
|
|
8
|
+
* Determines if a mask value is a URL (for CSS mask-image) or Tailwind classes.
|
|
9
|
+
* URLs start with '/' or 'http', everything else is treated as Tailwind classes.
|
|
10
|
+
*/
|
|
11
|
+
function isMaskUrl(mask) {
|
|
12
|
+
return mask.startsWith('/') || mask.startsWith('http');
|
|
13
|
+
}
|
|
7
14
|
/**
|
|
8
15
|
* Visual component for rendering images, videos, and animations.
|
|
9
16
|
*
|
|
@@ -16,7 +23,9 @@ import VideoComponent from './VideoComponent';
|
|
|
16
23
|
* which enables currentColor support for theming.
|
|
17
24
|
*
|
|
18
25
|
* When a mask is set on the visual, the component wraps the content in a
|
|
19
|
-
* container with
|
|
26
|
+
* container with the mask applied. Masks can be:
|
|
27
|
+
* - URL-based (starts with '/' or 'http'): Uses CSS mask-image
|
|
28
|
+
* - Class-based (Tailwind classes): Applied directly to the container
|
|
20
29
|
*
|
|
21
30
|
* @param visual - Visual data containing image, video, or animation
|
|
22
31
|
* @param muted - Whether video should be muted (default: false)
|
|
@@ -62,13 +71,21 @@ import VideoComponent from './VideoComponent';
|
|
|
62
71
|
* />
|
|
63
72
|
* ```
|
|
64
73
|
*
|
|
65
|
-
* @example Image with mask
|
|
74
|
+
* @example Image with URL-based mask (CSS mask-image)
|
|
66
75
|
* ```tsx
|
|
67
76
|
* <Visual
|
|
68
77
|
* visual={{ ...imageVisual, mask: '/assets/masks/circle.svg' }}
|
|
69
78
|
* className="w-64"
|
|
70
79
|
* />
|
|
71
80
|
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example Image with class-based mask (Tailwind classes)
|
|
83
|
+
* ```tsx
|
|
84
|
+
* <Visual
|
|
85
|
+
* visual={{ ...imageVisual, mask: 'aspect-square rounded-full' }}
|
|
86
|
+
* className="w-64"
|
|
87
|
+
* />
|
|
88
|
+
* ```
|
|
72
89
|
*/
|
|
73
90
|
export const Visual = ({ visual, muted, controls, autoPlay, visualSizes, fullPlayer, loop, loopDelay, analyticsContext, componentLabel, className, style, ...props }) => {
|
|
74
91
|
const { animation, image, video, mask } = visual;
|
|
@@ -88,8 +105,13 @@ export const Visual = ({ visual, muted, controls, autoPlay, visualSizes, fullPla
|
|
|
88
105
|
}
|
|
89
106
|
// If mask is set, wrap in a container with mask applied
|
|
90
107
|
if (mask) {
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
if (isMaskUrl(mask)) {
|
|
109
|
+
// URL-based mask: use CSS mask-image with 1:1 aspect ratio
|
|
110
|
+
const maskStyle = { '--mask-url': `url(${mask})`, ...style };
|
|
111
|
+
return (_jsx("div", { className: cn('aspect-square overflow-hidden', 'mask-[image:var(--mask-url)] mask-[size:100%_100%] mask-no-repeat mask-center', className), style: maskStyle, children: content }));
|
|
112
|
+
}
|
|
113
|
+
// Class-based mask: apply Tailwind classes directly
|
|
114
|
+
return (_jsx("div", { className: cn('overflow-hidden', mask, className), style: style, children: content }));
|
|
93
115
|
}
|
|
94
116
|
return content;
|
|
95
117
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C
|
|
1
|
+
{"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -70,6 +70,8 @@ export type { ArrayToUnion, CollectionConfig, CollectionPropsFromConfig, Compone
|
|
|
70
70
|
export { createCollectionProps, createComponentProps, extractCollectionInfo, extractComponentInfo, extractPageContext, } from './utils/componentUtils';
|
|
71
71
|
export { convertText } from './utils/convertText';
|
|
72
72
|
export { handleCmsError } from './utils/errorHandling';
|
|
73
|
+
export type { PreviewSecretValidation } from './utils/previewPageUtils';
|
|
74
|
+
export { validatePreviewSecret } from './utils/previewPageUtils';
|
|
73
75
|
export type { IContent } from './utils/previewUtils';
|
|
74
76
|
export { getPreviewAssetIdProps, getPreviewFieldIdProps, getPreviewParentProps, getPreviewProps, } from './utils/previewUtils';
|
|
75
77
|
export type { GenerateSitemapOptions, SitemapChangeFrequency, SitemapEntry, } from './utils/sitemap';
|
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
|
@@ -69,6 +69,7 @@ export { cn } from './utils/cn';
|
|
|
69
69
|
export { createCollectionProps, createComponentProps, extractCollectionInfo, extractComponentInfo, extractPageContext, } from './utils/componentUtils';
|
|
70
70
|
export { convertText } from './utils/convertText';
|
|
71
71
|
export { handleCmsError } from './utils/errorHandling';
|
|
72
|
+
export { validatePreviewSecret } from './utils/previewPageUtils';
|
|
72
73
|
export { getPreviewAssetIdProps, getPreviewFieldIdProps, getPreviewParentProps, getPreviewProps, } from './utils/previewUtils';
|
|
73
74
|
export { deduplicateSitemapEntries, generateNextSitemap, sortSitemapEntries, } from './utils/sitemap';
|
|
74
75
|
export { UnsupportedWarning } from './utils/UnsupportedWarning';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,kDAAkD;AAElD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,qBAAqB;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAM/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAS9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAQrE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,WAAW;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,uBAAuB;AACvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,mBAAmB;AACnB,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAYhC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,kDAAkD;AAElD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,qBAAqB;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAM/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAS9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAQrE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,WAAW;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,uBAAuB;AACvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,mBAAmB;AACnB,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAYhC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,wBAAwB;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview page utilities for Next.js applications.
|
|
3
|
+
*
|
|
4
|
+
* These utilities help with implementing Contentful preview pages that
|
|
5
|
+
* redirect editors from `/preview?id={entryId}` to the appropriate content URL.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // app/preview/page.tsx
|
|
10
|
+
* import { validatePreviewSecret } from '@se-studio/core-ui';
|
|
11
|
+
* import { createBaseConverterContext, getPreviewEntryInfo } from '@se-studio/contentful-rest-api';
|
|
12
|
+
* import { notFound, redirect } from 'next/navigation';
|
|
13
|
+
*
|
|
14
|
+
* export default async function PreviewPage({ searchParams }) {
|
|
15
|
+
* const { id, secret } = await searchParams;
|
|
16
|
+
*
|
|
17
|
+
* const validation = validatePreviewSecret(secret, process.env.PREVIEW_SECRET);
|
|
18
|
+
* if (!validation.valid) throw new Error(validation.error);
|
|
19
|
+
* if (!id) throw new Error('Preview ID is required');
|
|
20
|
+
*
|
|
21
|
+
* const context = createBaseConverterContext();
|
|
22
|
+
* const info = await getPreviewEntryInfo(context, contentfulConfig, id);
|
|
23
|
+
* if (!info) return notFound();
|
|
24
|
+
*
|
|
25
|
+
* redirect(info.href);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Result of preview secret validation
|
|
31
|
+
*/
|
|
32
|
+
export interface PreviewSecretValidation {
|
|
33
|
+
/** Whether the secret is valid */
|
|
34
|
+
valid: boolean;
|
|
35
|
+
/** Error message if validation failed */
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validates the preview secret against the environment variable.
|
|
40
|
+
*
|
|
41
|
+
* If no environment secret is configured, all requests are allowed.
|
|
42
|
+
* If an environment secret is configured, the provided secret must match.
|
|
43
|
+
*
|
|
44
|
+
* @param providedSecret - The secret provided in the request (from query params)
|
|
45
|
+
* @param envSecret - The expected secret from environment variable (PREVIEW_SECRET)
|
|
46
|
+
* @returns Validation result with valid flag and optional error message
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* const validation = validatePreviewSecret(
|
|
51
|
+
* searchParams.secret,
|
|
52
|
+
* process.env.PREVIEW_SECRET
|
|
53
|
+
* );
|
|
54
|
+
*
|
|
55
|
+
* if (!validation.valid) {
|
|
56
|
+
* throw new Error(validation.error);
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function validatePreviewSecret(providedSecret: string | undefined, envSecret: string | undefined): PreviewSecretValidation;
|
|
61
|
+
//# sourceMappingURL=previewPageUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewPageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/previewPageUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,uBAAuB,CAuBzB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preview page utilities for Next.js applications.
|
|
3
|
+
*
|
|
4
|
+
* These utilities help with implementing Contentful preview pages that
|
|
5
|
+
* redirect editors from `/preview?id={entryId}` to the appropriate content URL.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // app/preview/page.tsx
|
|
10
|
+
* import { validatePreviewSecret } from '@se-studio/core-ui';
|
|
11
|
+
* import { createBaseConverterContext, getPreviewEntryInfo } from '@se-studio/contentful-rest-api';
|
|
12
|
+
* import { notFound, redirect } from 'next/navigation';
|
|
13
|
+
*
|
|
14
|
+
* export default async function PreviewPage({ searchParams }) {
|
|
15
|
+
* const { id, secret } = await searchParams;
|
|
16
|
+
*
|
|
17
|
+
* const validation = validatePreviewSecret(secret, process.env.PREVIEW_SECRET);
|
|
18
|
+
* if (!validation.valid) throw new Error(validation.error);
|
|
19
|
+
* if (!id) throw new Error('Preview ID is required');
|
|
20
|
+
*
|
|
21
|
+
* const context = createBaseConverterContext();
|
|
22
|
+
* const info = await getPreviewEntryInfo(context, contentfulConfig, id);
|
|
23
|
+
* if (!info) return notFound();
|
|
24
|
+
*
|
|
25
|
+
* redirect(info.href);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Validates the preview secret against the environment variable.
|
|
31
|
+
*
|
|
32
|
+
* If no environment secret is configured, all requests are allowed.
|
|
33
|
+
* If an environment secret is configured, the provided secret must match.
|
|
34
|
+
*
|
|
35
|
+
* @param providedSecret - The secret provided in the request (from query params)
|
|
36
|
+
* @param envSecret - The expected secret from environment variable (PREVIEW_SECRET)
|
|
37
|
+
* @returns Validation result with valid flag and optional error message
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const validation = validatePreviewSecret(
|
|
42
|
+
* searchParams.secret,
|
|
43
|
+
* process.env.PREVIEW_SECRET
|
|
44
|
+
* );
|
|
45
|
+
*
|
|
46
|
+
* if (!validation.valid) {
|
|
47
|
+
* throw new Error(validation.error);
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function validatePreviewSecret(providedSecret, envSecret) {
|
|
52
|
+
// If no secret is configured in the environment, allow all requests
|
|
53
|
+
if (!envSecret) {
|
|
54
|
+
return { valid: true };
|
|
55
|
+
}
|
|
56
|
+
// If a secret is configured but not provided in the request, reject
|
|
57
|
+
if (!providedSecret) {
|
|
58
|
+
return {
|
|
59
|
+
valid: false,
|
|
60
|
+
error: 'Preview secret is required',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Check if the provided secret matches the configured secret
|
|
64
|
+
if (providedSecret !== envSecret) {
|
|
65
|
+
return {
|
|
66
|
+
valid: false,
|
|
67
|
+
error: 'Invalid preview secret',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return { valid: true };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=previewPageUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewPageUtils.js","sourceRoot":"","sources":["../../src/utils/previewPageUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAYH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,qBAAqB,CACnC,cAAkC,EAClC,SAA6B;IAE7B,oEAAoE;IACpE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,oEAAoE;IACpE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,wBAAwB;SAChC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/core-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.30",
|
|
4
4
|
"description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"clsx": "^2.1.1",
|
|
57
57
|
"html-entities": "^2.6.0",
|
|
58
58
|
"tailwind-merge": "^3.4.0",
|
|
59
|
-
"@se-studio/contentful-rest-api": "1.0.
|
|
60
|
-
"@se-studio/core-data-types": "1.0.
|
|
59
|
+
"@se-studio/contentful-rest-api": "1.0.30",
|
|
60
|
+
"@se-studio/core-data-types": "1.0.30"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@biomejs/biome": "^2.3.8",
|