@remkoj/optimizely-cms-nextjs 2.0.0-pre4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cms-page/page.d.ts +0 -1
  2. package/dist/cms-page/page.js +10 -8
  3. package/dist/cms-page/page.js.map +1 -1
  4. package/dist/components/on-page-edit.d.ts +0 -1
  5. package/dist/components/on-page-edit.js +14 -34
  6. package/dist/components/on-page-edit.js.map +1 -1
  7. package/dist/components/shared/CmsContentLink.d.ts +27 -0
  8. package/dist/components/shared/CmsContentLink.js +31 -0
  9. package/dist/components/shared/CmsContentLink.js.map +1 -0
  10. package/dist/components/shared/CmsImage.d.ts +1 -0
  11. package/dist/components/shared/CmsImage.js +2 -0
  12. package/dist/components/shared/CmsImage.js.map +1 -0
  13. package/dist/components/shared/CmsLink.d.ts +8 -0
  14. package/dist/components/shared/CmsLink.js +10 -0
  15. package/dist/components/shared/CmsLink.js.map +1 -0
  16. package/dist/components/shared/helpers.d.ts +13 -0
  17. package/dist/components/shared/helpers.js +81 -0
  18. package/dist/components/shared/helpers.js.map +1 -0
  19. package/dist/components/shared/index.d.ts +3 -0
  20. package/dist/components/shared/index.js +6 -0
  21. package/dist/components/shared/index.js.map +1 -0
  22. package/dist/components/shared/types.d.ts +28 -0
  23. package/dist/components/shared/types.js +2 -0
  24. package/dist/components/shared/types.js.map +1 -0
  25. package/dist/metadata.js +9 -3
  26. package/dist/metadata.js.map +1 -1
  27. package/dist/ope/data.js +1 -1
  28. package/dist/ope/data.js.map +1 -1
  29. package/dist/ope/page.js +14 -76
  30. package/dist/ope/page.js.map +1 -1
  31. package/dist/ope/tools.d.ts +5 -0
  32. package/dist/ope/tools.js +119 -0
  33. package/dist/ope/tools.js.map +1 -0
  34. package/dist/ope/types.d.ts +36 -18
  35. package/package.json +19 -16
@@ -1,4 +1,3 @@
1
- /// <reference types="react" resolution-mode="require"/>
2
1
  import 'server-only';
3
2
  import type { Metadata, ResolvingMetadata } from 'next';
4
3
  import { type Route, type ClientFactory, type ChannelDefinition } from '@remkoj/optimizely-graph-client';
@@ -37,27 +37,29 @@ export function createPage(factory, options) {
37
37
  ...CreatePageOptionDefaults,
38
38
  ...options
39
39
  };
40
+ const globalClient = clientFactory();
40
41
  const pageDefintion = {
41
42
  generateStaticParams: async () => {
42
- const client = clientFactory();
43
- const resolver = new RouteResolver(client);
43
+ //const client = clientFactory()
44
+ const resolver = new RouteResolver(globalClient);
44
45
  return (await resolver.getRoutes()).map(r => routeToParams(r));
45
46
  },
46
47
  generateMetadata: async (props, resolving) => {
47
48
  // Read variables from request
48
- const client = clientFactory();
49
+ //const client = clientFactory()
49
50
  const requestPath = propsToCmsPath(props);
50
51
  if (!requestPath)
51
52
  return Promise.resolve({});
52
- const routeResolver = new RouteResolver(client);
53
- const metaResolver = new MetaDataResolver(client);
53
+ const routeResolver = new RouteResolver(globalClient);
54
+ const metaResolver = new MetaDataResolver(globalClient);
54
55
  // Resolve the route to a content link
55
56
  const route = await routeResolver.getContentInfoByPath(requestPath);
56
57
  if (!route)
57
58
  return Promise.resolve({});
58
59
  // Set context
59
- getServerContext().setLocale(localeToGraphLocale(route.locale, channel));
60
- getServerContext().setOptimizelyGraphClient(client);
60
+ getServerContext().setLocale(route.locale);
61
+ getServerContext().setOptimizelyGraphClient(globalClient);
62
+ getServerContext().setComponentFactory(factory);
61
63
  // Prepare metadata fetching
62
64
  const contentLink = routeResolver.routeToContentLink(route);
63
65
  const contentType = route.contentType;
@@ -83,7 +85,7 @@ export function createPage(factory, options) {
83
85
  CmsPage: async (props) => {
84
86
  // Prepare the context
85
87
  const context = getServerContext();
86
- const client = context.client ?? clientFactory();
88
+ const client = context.client ?? globalClient;
87
89
  if (!context.client)
88
90
  context.setOptimizelyGraphClient(client);
89
91
  context.setComponentFactory(factory);
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ import { type FunctionComponent, type PropsWithChildren } from 'react';
2
2
  export type OnPageEditProps = PropsWithChildren<{
3
3
  mode?: 'edit' | 'preview';
4
4
  className?: string;
5
- timeout?: number;
6
5
  }>;
7
6
  export type OptimizelyCmsContext = {
8
7
  ready: boolean;
@@ -1,11 +1,10 @@
1
1
  'use client';
2
2
  import { useState, useEffect } from 'react';
3
3
  import { useRouter } from 'next/navigation.js';
4
- export const OnPageEdit = ({ mode, children, className, timeout }) => {
4
+ export const OnPageEdit = ({ mode, children, className }) => {
5
5
  const router = useRouter();
6
6
  const [optiCmsReady, setOptiCmsReady] = useState(false);
7
7
  const [showMask, setShowMask] = useState(false);
8
- timeout = timeout ?? 1500;
9
8
  // Bind to the CMS & CMS Ready State
10
9
  useEffect(() => {
11
10
  console.log("Reading Opti CMS Context");
@@ -32,37 +31,20 @@ export const OnPageEdit = ({ mode, children, className, timeout }) => {
32
31
  return;
33
32
  const previewUrl = window.location.href;
34
33
  // Define event handler
35
- let maskTimer = false;
36
34
  function onContentSaved(eventData) {
37
35
  setShowMask(true);
38
- if (maskTimer != false)
39
- clearTimeout(maskTimer);
40
- console.log(`Delaying refresh with ${timeout}ms to allow Optimizely Graph to update`, eventData);
41
- maskTimer = setTimeout(() => {
42
- const contentId = window.location.pathname.split(',,')[1];
43
- const newContentId = eventData?.contentLink;
44
- // First: Use the updated preview URL if we have it
45
- if (eventData?.previewUrl && previewUrl != eventData.previewUrl) {
46
- const newUrl = new URL(eventData.previewUrl);
47
- console.log(`Navigating to provided preview path: ${newUrl.pathname}${newUrl.search}`);
48
- router.push(newUrl.pathname + newUrl.search);
49
- // Second: Use the provided Content ID to navigate to the new URL
50
- }
51
- else if (newContentId && contentId != newContentId) {
52
- const newUrl = new URL(window.location.href);
53
- const pathParts = newUrl.pathname.split(',,');
54
- pathParts[1] = newContentId;
55
- newUrl.pathname = pathParts.join(',,');
56
- console.log(`Navigating to newly constructed URL to reflect ContentID change: ${newUrl.href}`);
57
- router.push(newUrl.pathname + newUrl.search);
58
- // Third: Refresh the page
59
- }
60
- else {
61
- console.log(`Refreshing preview: ${contentId}`);
62
- router.refresh();
63
- }
64
- setShowMask(false);
65
- }, timeout);
36
+ // First: Use the updated preview URL if we have it
37
+ if (eventData?.previewUrl && previewUrl != eventData.previewUrl) {
38
+ const newUrl = new URL(eventData.previewUrl);
39
+ console.log(`Navigating to provided preview path: ${newUrl.pathname}${newUrl.search}`);
40
+ router.push(newUrl.pathname + newUrl.search);
41
+ // Third: Refresh the page
42
+ }
43
+ else {
44
+ console.log(`Refreshing preview: ${eventData.contentLink}`);
45
+ router.refresh();
46
+ }
47
+ setShowMask(false);
66
48
  }
67
49
  // Subscribe to event
68
50
  console.log(`Subscribing to ContentSaved Event`);
@@ -71,11 +53,9 @@ export const OnPageEdit = ({ mode, children, className, timeout }) => {
71
53
  // Unsubscribe when needed
72
54
  return () => {
73
55
  console.log(`Navigating away, disabling ContentSaved event handler`);
74
- if (maskTimer != false)
75
- clearTimeout(maskTimer);
76
56
  disposer?.remove();
77
57
  };
78
- }, [optiCmsReady, router, timeout]);
58
+ }, [optiCmsReady, router]);
79
59
  return showMask ? children : null;
80
60
  };
81
61
  function tryGetCms() {
@@ -1 +1 @@
1
- {"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { FunctionComponent, ComponentPropsWithRef, ForwardRefExoticComponent, AnchorHTMLAttributes, ReactNode, RefAttributes } from "react";
2
+ import { LinkProps } from 'next/link.js';
3
+ import { CmsContentLinkDataType } from './types.js';
4
+ type LinkType = ForwardRefExoticComponent<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof LinkProps> & LinkProps & {
5
+ children?: ReactNode;
6
+ } & RefAttributes<HTMLAnchorElement>>;
7
+ type LinkTypeProps = ComponentPropsWithRef<LinkType>;
8
+ export type CmsContentLinkProps = {
9
+ /**
10
+ * The Link target as retrieved from Optimizely Graph
11
+ */
12
+ href?: CmsContentLinkDataType | null;
13
+ /**
14
+ * If set to a valid base URL, it will make all links targetting
15
+ * this base a same site link instead of an absolute link
16
+ */
17
+ base?: string;
18
+ } & Omit<LinkTypeProps, 'href'>;
19
+ /**
20
+ * Create a Next.js Link based upon data retrieved from Optimizely Graph, using the default
21
+ * IContentData, IContentInfo or LinkData fragments.
22
+ *
23
+ * @param param0 The component properties
24
+ * @returns The fully configured Next.js Link property
25
+ */
26
+ export declare const CmsContentLink: FunctionComponent<CmsContentLinkProps>;
27
+ export {};
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useMemo } from "react";
4
+ import LinkEl from 'next/link.js';
5
+ import { IsLinkItemData, isIContentData, isIContentInfo, isLinkData, iContentDataToHref, iContentInfoToHref, linkDataToHref, linkItemDataToHref } from './helpers.js';
6
+ const Link = LinkEl;
7
+ /**
8
+ * Create a Next.js Link based upon data retrieved from Optimizely Graph, using the default
9
+ * IContentData, IContentInfo or LinkData fragments.
10
+ *
11
+ * @param param0 The component properties
12
+ * @returns The fully configured Next.js Link property
13
+ */
14
+ export const CmsContentLink = ({ href, base, children, ...props }) => {
15
+ const linkHref = useMemo(() => {
16
+ let urlValue = '#';
17
+ if (typeof (href) == 'string')
18
+ urlValue = href;
19
+ else if (isIContentData(href))
20
+ urlValue = iContentDataToHref(href, base);
21
+ else if (isIContentInfo(href))
22
+ urlValue = iContentInfoToHref(href, base);
23
+ else if (isLinkData(href))
24
+ urlValue = linkDataToHref(href, base);
25
+ else if (IsLinkItemData(href))
26
+ urlValue = linkItemDataToHref(href, base);
27
+ return urlValue;
28
+ }, [href]);
29
+ return _jsx(Link, { href: linkHref, ...props, children: children });
30
+ };
31
+ //# sourceMappingURL=CmsContentLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsContentLink.js","sourceRoot":"","sources":["../../../src/components/shared/CmsContentLink.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,MAAqB,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAMrK,MAAM,IAAI,GAAc,MAA6B,CAAA;AAerD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1G,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,QAAQ,GAAG,GAAG,CAAA;QAClB,IAAI,OAAM,CAAC,IAAI,CAAC,IAAI,QAAQ;YACxB,QAAQ,GAAG,IAAI,CAAA;aACd,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACxC,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACxC,IAAI,UAAU,CAAC,IAAI,CAAC;YACrB,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACpC,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7C,OAAO,QAAQ,CAAA;IACnB,CAAC,EAAE,CAAE,IAAI,CAAE,CAAC,CAAA;IAEZ,OAAO,KAAC,IAAI,IAAC,IAAI,EAAG,QAAQ,KAAQ,KAAK,YAAK,QAAQ,GAAS,CAAA;AACnE,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CmsImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsImage.js","sourceRoot":"","sources":["../../../src/components/shared/CmsImage.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { FunctionComponent } from "react";
2
+ import type { LinkItemData } from './types.js';
3
+ import { type CmsContentLinkProps } from "./CmsContentLink.js";
4
+ export type CmsLinkProps = {
5
+ href: LinkItemData;
6
+ } & Omit<CmsContentLinkProps, 'href' | 'children' | 'title' | 'target'>;
7
+ export declare const CmsLink: FunctionComponent<CmsLinkProps>;
8
+ export default CmsLink;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { CmsContentLink } from "./CmsContentLink.js";
3
+ export const CmsLink = ({ href, ...props }) => {
4
+ const linkText = href.text ?? "";
5
+ const linkTitle = href.title ?? undefined;
6
+ const linkTarget = href.target ?? undefined;
7
+ return _jsx(CmsContentLink, { href: href, title: linkTitle, target: linkTarget, ...props, children: linkText });
8
+ };
9
+ export default CmsLink;
10
+ //# sourceMappingURL=CmsLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsLink.js","sourceRoot":"","sources":["../../../src/components/shared/CmsLink.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAM/E,MAAM,CAAC,MAAM,OAAO,GAAqC,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAA;IAC3C,OAAO,KAAC,cAAc,IAAC,IAAI,EAAG,IAAI,EAAG,KAAK,EAAG,SAAS,EAAG,MAAM,EAAG,UAAU,KAAQ,KAAK,YAAM,QAAQ,GAAmB,CAAA;AAC9H,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { CmsContentLinkDataType, IContentData, IContentInfo, LinkData, LinkItemData } from "./types.js";
2
+ export declare function createListKey(item: CmsContentLinkDataType): string;
3
+ export declare function isIContentData(toTest: CmsContentLinkDataType | null | undefined): toTest is IContentData;
4
+ export declare function isIContentInfo(toTest: CmsContentLinkDataType | null | undefined): toTest is IContentInfo;
5
+ export declare function isLinkData(toTest: CmsContentLinkDataType | null | undefined): toTest is LinkData;
6
+ export declare function IsLinkItemData(toTest: CmsContentLinkDataType | null | undefined): toTest is LinkItemData;
7
+ export declare function getLinkData(item: LinkItemData): LinkData | null;
8
+ export declare function linkDataToUrl(item: LinkData | null | undefined): URL | undefined;
9
+ export declare function linkToUrl(item: LinkItemData): URL | undefined;
10
+ export declare function iContentDataToHref(contentData: IContentData, base?: string): string;
11
+ export declare function iContentInfoToHref(contentInfo: IContentInfo, base?: string): string;
12
+ export declare function linkItemDataToHref(linkItemData: LinkItemData, base?: string): string;
13
+ export declare function linkDataToHref(linkData: LinkData, base?: string): string;
@@ -0,0 +1,81 @@
1
+ export function createListKey(item) {
2
+ if (isIContentData(item))
3
+ return iContentDataToHref(item);
4
+ else if (isIContentInfo(item))
5
+ return iContentInfoToHref(item);
6
+ else if (isLinkData(item))
7
+ return linkDataToHref(item);
8
+ else if (IsLinkItemData(item)) {
9
+ const link = getLinkData(item);
10
+ return link && link.default ? link.default : (item.text ?? '-');
11
+ }
12
+ else {
13
+ return item;
14
+ }
15
+ }
16
+ export function isIContentData(toTest) {
17
+ // ToTest must be an Object
18
+ if (typeof (toTest) != 'object' || toTest == null)
19
+ return false;
20
+ // ToTest is considered IContentData if it has metadata
21
+ return isIContentInfo(toTest._metadata);
22
+ }
23
+ export function isIContentInfo(toTest) {
24
+ // ToTest must be an Object
25
+ if (typeof (toTest) != 'object' || toTest == null)
26
+ return false;
27
+ // Valid IContentInfo has a non-empty key or null value (for Inline content)
28
+ return ((typeof (toTest.key) == 'string' && (toTest.key ?? '').length > 0) || toTest.key == null);
29
+ }
30
+ export function isLinkData(toTest) {
31
+ // ToTest must be an Object
32
+ if (typeof (toTest) != 'object' || toTest == null)
33
+ return false;
34
+ if (toTest.__typename == "ContentUrl")
35
+ return true;
36
+ return typeof (toTest.default) == 'string' || toTest.default == null;
37
+ }
38
+ export function IsLinkItemData(toTest) {
39
+ // ToTest must be an Object
40
+ if (typeof (toTest) != 'object' || toTest == null)
41
+ return false;
42
+ if (toTest.__typename == "Link")
43
+ return true;
44
+ return toTest.url == null || isLinkData(toTest.url);
45
+ }
46
+ export function getLinkData(item) {
47
+ const url = item.url;
48
+ return url && url.default ? url : null;
49
+ }
50
+ export function linkDataToUrl(item) {
51
+ try {
52
+ return new URL(item?.default ?? '/', item?.base ?? undefined);
53
+ }
54
+ catch {
55
+ return undefined;
56
+ }
57
+ }
58
+ export function linkToUrl(item) {
59
+ return linkDataToUrl(getLinkData(item));
60
+ }
61
+ export function iContentDataToHref(contentData, base) {
62
+ if (!contentData._metadata)
63
+ return '#';
64
+ return iContentInfoToHref(contentData._metadata, base);
65
+ }
66
+ export function iContentInfoToHref(contentInfo, base) {
67
+ if (!contentInfo.url)
68
+ return '#';
69
+ return linkDataToHref(contentInfo.url, base);
70
+ }
71
+ export function linkItemDataToHref(linkItemData, base) {
72
+ if (!linkItemData.url)
73
+ return '#';
74
+ return linkDataToHref(linkItemData.url);
75
+ }
76
+ export function linkDataToHref(linkData, base) {
77
+ if (base && linkData.base == base)
78
+ return linkData.default ?? '#';
79
+ return linkData.base ? (new URL(linkData.default ?? '/#', linkData.base)).href : linkData.default ?? '#';
80
+ }
81
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/shared/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './helpers.js';
2
+ export { CmsContentLink, type CmsContentLinkProps } from './CmsContentLink.js';
3
+ export { CmsLink, type CmsLinkProps } from './CmsLink.js';
@@ -0,0 +1,6 @@
1
+ // Export all utility functions
2
+ export * from './helpers.js';
3
+ // Export specific components
4
+ export { CmsContentLink } from './CmsContentLink.js';
5
+ export { CmsLink } from './CmsLink.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/shared/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,cAAc,cAAc,CAAA;AAE5B,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAA"}
@@ -0,0 +1,28 @@
1
+ export type CmsContentLinkDataType = IContentData | IContentInfo | LinkData | LinkItemData | string;
2
+ export type IContentData<LT = string> = {
3
+ __typename?: string | null;
4
+ _type?: string | null;
5
+ _metadata?: IContentInfo<LT> | null;
6
+ };
7
+ export type IContentInfo<LT = string> = {
8
+ __typename?: string | null;
9
+ key?: string | null;
10
+ locale?: LT | null;
11
+ types?: Array<string | null> | null;
12
+ displayName?: string | null;
13
+ version?: string | null;
14
+ url?: LinkData | null;
15
+ };
16
+ export type LinkData = {
17
+ __typename?: "ContentUrl";
18
+ base?: string | null;
19
+ hierarchical?: string | null;
20
+ default?: string | null;
21
+ };
22
+ export type LinkItemData = {
23
+ __typename?: "Link";
24
+ title?: string | null;
25
+ text?: string | null;
26
+ target?: string | null;
27
+ url?: LinkData | null;
28
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/shared/types.ts"],"names":[],"mappings":""}
package/dist/metadata.js CHANGED
@@ -19,10 +19,16 @@ export class MetaDataResolver {
19
19
  if (locale && locale.includes("-"))
20
20
  throw new Error("🟠 [MetaDataResolver] Invalid character detected within the locale");
21
21
  const Component = factory.resolve(contentType);
22
- if (!Component)
22
+ if (!Component) {
23
+ if (this._cgClient.debug)
24
+ console.log(`🟠 [MetaDataResolver] No component found for ${contentType.join('/')}`);
23
25
  return {};
26
+ }
27
+ if (this._cgClient.debug)
28
+ console.log(`⚪ [MetaDataResolver] Using component ${Component.displayName ?? 'Unnamed component'}`);
24
29
  if (isOptimizelyNextPageWithMetaData(Component) && Component.getMetaData) {
25
- console.log("⚪ [MetaDataResolver] Component for content type has 'getMetaData, invoking...");
30
+ if (this._cgClient.debug)
31
+ console.log("⚪ [MetaDataResolver] Component for content type has 'getMetaData, invoking...");
26
32
  const meta = await Component.getMetaData(contentLink, locale, this._cgClient);
27
33
  if (this._cgClient.debug)
28
34
  console.log(`⚪ [MetaDataResolver] Resolved metadata to: ${JSON.stringify(meta)}`);
@@ -30,7 +36,7 @@ export class MetaDataResolver {
30
36
  }
31
37
  else {
32
38
  if (this._cgClient.debug)
33
- console.warn(`🟠 [MetaDataResolver] Resolved component for ${JSON.stringify(contentType)} does provide additional metadata`);
39
+ console.warn(`🟠 [MetaDataResolver] Resolved component for ${contentType.join('/')} does not provide additional metadata`);
34
40
  }
35
41
  return {};
36
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,EAAE,EAAE,oBAAoB,EAAqD,MAAM,iCAAiC,CAAA;AAEvI,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAA;AAE5D,MAAM,OAAO,gBAAgB;IAIzB,YAAmB,cAAyD;QAExE,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;IACzG,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,WAAwB,EAAE,WAAqB,EAAE,MAAsB;QAEnH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,CAAC,GAAG,CAAC,gDAAiD,IAAI,CAAC,SAAS,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAC,CAAC,EAAE,CAAC,CAAA;QAEtH,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QAEzF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC9C,IAAI,CAAC,SAAS;YACV,OAAO,EAAE,CAAA;QAEb,IAAI,gCAAgC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;YAC5F,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7E,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,8CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAE,CAAC,CAAA;YACvF,OAAO,IAAI,CAAA;QACf,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,IAAI,CAAC,gDAAiD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAE,mCAAmC,CAAC,CAAA;QACtI,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,EAAE,EAAE,oBAAoB,EAAqD,MAAM,iCAAiC,CAAA;AAEvI,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAA;AAG5D,MAAM,OAAO,gBAAgB;IAIzB,YAAmB,cAAyD;QAExE,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;IACzG,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,WAAwB,EAAE,WAAqB,EAAE,MAAsB;QAEnH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,CAAC,GAAG,CAAC,gDAAiD,IAAI,CAAC,SAAS,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAC,CAAC,EAAE,CAAC,CAAA;QAEtH,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QAEzF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAA2B,CAAA;QACxE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,gDAAiD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,CAAA;YAC1F,OAAO,EAAE,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,CAAC,GAAG,CAAC,wCAAyC,SAAS,CAAC,WAAW,IAAI,mBAAoB,EAAE,CAAC,CAAA;QAEzG,IAAI,gCAAgC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YACvE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;YAChG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7E,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,8CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAE,CAAC,CAAA;YACvF,OAAO,IAAI,CAAA;QACf,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,IAAI,CAAC,gDAAiD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAE,uCAAuC,CAAC,CAAA;QACpI,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAED,eAAe,gBAAgB,CAAA"}
package/dist/ope/data.js CHANGED
@@ -3,7 +3,7 @@ export const getContentById = async (client, variables) => {
3
3
  return await client.request(gqlQuery, variables);
4
4
  };
5
5
  const gqlQuery = gql `query getContentByIdBase($key: String!, $version: String, $locale: [Locales!], $path: String, $domain: String) {
6
- content: Content(
6
+ content: _Content(
7
7
  where: {
8
8
  _or: [
9
9
  { _metadata: { key: { eq: $key }, version: { eq: $version } } }
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAA0B,KAAK,EAAuB,MAAqB,EAAE,SAAwC,EAAE,EAAE;IAEhJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAgE,QAAQ,EAAE,SAAS,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;EAsBlB,CAAA"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAA0B,KAAK,EAAuB,MAAqB,EAAE,SAAwC,EAAE,EAAE;IAEhJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAgE,QAAQ,EAAE,SAAS,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;EAsBlB,CAAA"}
package/dist/ope/page.js CHANGED
@@ -1,6 +1,5 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import 'server-only';
3
- import { AuthMode } from '@remkoj/optimizely-graph-client';
4
3
  import { contentLinkToString } from '@remkoj/optimizely-graph-client/utils';
5
4
  import { Utils } from '@remkoj/optimizely-cms-react';
6
5
  import { CmsContent, getServerContext } from '@remkoj/optimizely-cms-react/rsc';
@@ -10,67 +9,14 @@ import { getAuthorizedServerClient } from '../client.js';
10
9
  import React from 'react';
11
10
  import Script from 'next/script.js';
12
11
  import { getContentById } from './data.js';
13
- function readValue(variableName, defaultValue) {
14
- try {
15
- const stringValue = process?.env ? process.env[variableName] : undefined;
16
- return stringValue || defaultValue;
17
- }
18
- catch {
19
- return defaultValue;
20
- }
21
- }
22
- function readValueAsInt(variableName, defaultValue) {
23
- const stringValue = readValue(variableName);
24
- if (!stringValue)
25
- return defaultValue;
26
- try {
27
- return parseInt(stringValue);
28
- }
29
- catch {
30
- return defaultValue;
31
- }
32
- }
12
+ import { getContentRequest, isValidRequest } from './tools.js';
33
13
  const defaultOptions = {
34
- refreshDelay: 2000,
35
14
  refreshNotice: () => _jsx("div", { className: 'optly-refresh-notice', children: "Updating preview, please wait...." }),
36
- errorNotice: props => _jsxs("div", { className: 'optly-error-notice', children: [_jsx("div", { className: 'optly-error-title', children: props.title }), _jsx("div", { className: 'optly-error-message', children: props.message })] }),
37
15
  layout: props => _jsx(_Fragment, { children: props.children }),
38
16
  loader: getContentById,
39
17
  clientFactory: (token) => getAuthorizedServerClient(token),
40
18
  communicationInjectorPath: '/util/javascript/communicationinjector.js'
41
19
  };
42
- // Helper function to read the ContentID & WorkID
43
- function getContentRequest(path = "", searchParams) {
44
- try {
45
- if (searchParams.preview_token == AuthMode.HMAC || searchParams.preview_token == AuthMode.Basic) {
46
- console.error("🦺 [OnPageEdit] Edit mode requested with developer tokens, falling back to URL parsing to determine content");
47
- const fullPath = Array.isArray(path) ? path.map(p => decodeURIComponent(p)).join('/') : decodeURI(path);
48
- const [cmsPath, contentString] = fullPath.split(',,', 3);
49
- const [contentKey, contentVersion] = (contentString ?? '').split('_', 3);
50
- const contentPath = (cmsPath.startsWith('/') ? cmsPath.substring(1) : cmsPath).replace(/^(ui\/){0,1}(CMS\/){0,1}(Content\/){0,1}/gi, "");
51
- const firstSlug = contentPath.split('/')[0];
52
- const contentLocale = firstSlug?.length == 2 || firstSlug?.length == 5 ? firstSlug : undefined;
53
- return {
54
- key: contentKey,
55
- version: contentVersion,
56
- locale: contentLocale,
57
- path: '/' + contentPath + (contentPath.endsWith('/') || contentPath == '' ? '' : '/')
58
- };
59
- }
60
- else {
61
- const tokenInfo = JSON.parse(atob(searchParams.preview_token.split('.')[1]));
62
- return {
63
- key: tokenInfo.key,
64
- version: tokenInfo.ver,
65
- locale: tokenInfo.loc,
66
- path: ''
67
- };
68
- }
69
- }
70
- catch {
71
- return undefined;
72
- }
73
- }
74
20
  /**
75
21
  * Create the EditPage component needed by Next.JS to render the "On Page
76
22
  * Editing" variant of the content item selected by the editor.
@@ -82,40 +28,32 @@ function getContentRequest(path = "", searchParams) {
82
28
  * @returns The React Component that can be used by Next.JS to render the page
83
29
  */
84
30
  export function createEditPageComponent(factory, options) {
85
- const envRefreshDelay = readValueAsInt("OPTIMIZELY_GRAPH_UPDATE_DELAY", defaultOptions.refreshDelay);
86
- const { layout: PageLayout, refreshNotice: RefreshNotice, refreshDelay, errorNotice: ErrorNotice, loader: getContentById, clientFactory, communicationInjectorPath } = { ...defaultOptions, refreshDelay: envRefreshDelay, ...options };
87
- async function EditPage({ params: { path }, searchParams }) {
31
+ const { layout: PageLayout, refreshNotice: RefreshNotice, loader: getContentById, clientFactory, communicationInjectorPath } = { ...defaultOptions, ...options };
32
+ async function EditPage(props) {
88
33
  // Create context
89
34
  const context = getServerContext();
90
35
  // Validate the search parameters
91
- const epiEditMode = searchParams?.epieditmode?.toLowerCase();
92
- if (epiEditMode != 'true' && epiEditMode != 'false') {
93
- console.error("🔴 [OnPageEdit] Edit mode requested without valid EpiEditMode, refused to render the page. Mode set:", searchParams.epieditmode);
36
+ if (!isValidRequest(props, false, context.isDevelopment)) {
37
+ console.error("🔴 [OnPageEdit] Invalid edit mode request");
94
38
  return notFound();
95
39
  }
96
- // Allow use-hmac as magic token to be used only on a development environment, otherwise require a minimal length string as token
97
- const token = searchParams.preview_token;
98
- const validDev = context.isDevelopment && (searchParams.preview_token == AuthMode.HMAC || searchParams.preview_token == AuthMode.Basic);
99
- if (!token || (token.length < 20 && !validDev)) {
100
- console.error("🔴 [OnPageEdit] Edit mode requested without valid Preview Token, refused to render the page");
40
+ // Get the requested content item
41
+ const contentRequestInfo = getContentRequest(props);
42
+ if (!contentRequestInfo) {
43
+ console.error("🔴 [OnPageEdit] Unable to resolve requested content");
101
44
  return notFound();
102
45
  }
103
- if (context.isDebug)
104
- console.log(`⚪ [OnPageEdit] Valid edit mode request: EpiEditMode=${searchParams.epieditmode}`);
46
+ const { token, ctx, ...contentRequest } = contentRequestInfo;
105
47
  // Build context
106
48
  const client = clientFactory(token);
107
49
  context.setOptimizelyGraphClient(client);
108
50
  context.setComponentFactory(factory);
109
51
  context.setInEditMode(true);
110
52
  // Get information from the Request URI
111
- const contentRequest = getContentRequest(path, searchParams);
112
- if (!contentRequest) {
113
- console.error("🔴 [OnPageEdit] Unable to resolve requested content");
114
- return notFound();
115
- }
116
53
  if (context.isDebug) {
54
+ console.log("⚪ [OnPageEdit] Request context:", ctx);
55
+ console.log("⚪ [OnPageEdit] Request token:", token);
117
56
  console.log("⚪ [OnPageEdit] Requested content:", JSON.stringify(contentRequest));
118
- console.log("⚪ [OnPageEdit] Creating GraphQL Client:", token);
119
57
  }
120
58
  try {
121
59
  const contentInfo = await getContentById(client, contentRequest);
@@ -151,7 +89,7 @@ export function createEditPageComponent(factory, options) {
151
89
  // Render the content, with edit mode context
152
90
  const isPage = contentType.some(x => x?.toLowerCase() == "page") ?? false;
153
91
  const Layout = isPage ? PageLayout : React.Fragment;
154
- const output = _jsxs(_Fragment, { children: [_jsx(Script, { src: new URL(communicationInjectorPath, client.siteInfo.cmsURL).href, strategy: 'afterInteractive' }), _jsxs(Layout, { locale: contentItem.locale?.name ?? '', children: [_jsx(OnPageEdit, { timeout: refreshDelay, mode: context.inEditMode ? 'edit' : 'preview', children: _jsx(RefreshNotice, {}) }), _jsx(CmsContent, { contentType: contentType, contentLink: contentLink, fragmentData: contentItem })] }), _jsxs("div", { className: 'optly-contentLink', children: ["ContentItem: ", contentLink ? contentLinkToString(contentLink) : "Invalid content link returned from Optimizely Graph"] })] });
92
+ const output = _jsxs(_Fragment, { children: [_jsx(Script, { src: new URL(communicationInjectorPath, client.siteInfo.cmsURL).href, strategy: 'afterInteractive' }), _jsxs(Layout, { locale: contentItem.locale?.name ?? '', children: [_jsx(OnPageEdit, { mode: context.inEditMode ? 'edit' : 'preview', children: _jsx(RefreshNotice, {}) }), _jsx(CmsContent, { contentType: contentType, contentLink: contentLink, fragmentData: contentItem })] }), _jsxs("div", { className: 'optly-contentLink', children: ["ContentItem: ", contentLink ? contentLinkToString(contentLink) : "Invalid content link returned from Optimizely Graph"] })] });
155
93
  return output;
156
94
  }
157
95
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { EditPageProps, ValidatedEditPageProps, ContentRequest } from './types.js';
2
+ export declare function isValidRequest(toTest: EditPageProps, throwOnInvalid?: boolean, isDevelopment?: boolean): toTest is ValidatedEditPageProps;
3
+ export declare function getContentRequest({ params: { path, lang }, searchParams: { preview_token: token, ...searchParams } }: ValidatedEditPageProps): ContentRequest | undefined;
4
+ export declare function readValue<T extends string | undefined>(variableName: string, defaultValue?: T): T extends string ? string : string | undefined;
5
+ export declare function readValueAsInt<T extends number | undefined>(variableName: string, defaultValue?: T): T extends number ? number : number | undefined;
@@ -0,0 +1,119 @@
1
+ import { AuthMode } from '@remkoj/optimizely-graph-client';
2
+ export function isValidRequest(toTest, throwOnInvalid = false, isDevelopment = false) {
3
+ // Validate Route Params
4
+ if (Object.getOwnPropertyNames(toTest.params).some(x => x != 'path' && x != 'lang')) {
5
+ if (throwOnInvalid)
6
+ throw new Error("🔴 An Optimizely CMS NextJS edit page may only have 'path' and 'lang' route parameters");
7
+ return false;
8
+ }
9
+ if (toTest.params.lang && typeof (toTest.params.lang) != 'string') {
10
+ if (throwOnInvalid)
11
+ throw new Error("🔴 The 'lang' route parameter must be a string");
12
+ return false;
13
+ }
14
+ if (toTest.params.path && (!Array.isArray(toTest.params.path) || !toTest.params.path.every(x => typeof (x) == 'string'))) {
15
+ if (throwOnInvalid)
16
+ throw new Error("🔴 The 'path' route parameter must be an array of strings");
17
+ return false;
18
+ }
19
+ // Validate URL Params
20
+ const token = toTest.searchParams.preview_token ?? "";
21
+ const validDevToken = isDevelopment && (token == AuthMode.HMAC || token == AuthMode.Basic);
22
+ if (token.length < 20 && !validDevToken) {
23
+ if (throwOnInvalid)
24
+ throw new Error("🔴 The search paramater \"preview_token\" is invalid or missing");
25
+ return false;
26
+ }
27
+ // Validate CTX
28
+ if (!(toTest.searchParams.ctx == undefined || toTest.searchParams.ctx == 'edit' || toTest.searchParams.ctx == 'preview')) {
29
+ if (throwOnInvalid)
30
+ throw new Error("The 'ctx' search parameter must be omitted or 'edit' or 'preview'");
31
+ return false;
32
+ }
33
+ // Validate EpiEditMode
34
+ if (!(toTest.searchParams.epieditmode == undefined || toTest.searchParams.epieditmode.toLowerCase() == 'true' || toTest.searchParams.epieditmode.toLowerCase() == 'false')) {
35
+ if (throwOnInvalid)
36
+ throw new Error("The 'epieditmode' search parameter must be omitted or 'true' or 'false'");
37
+ return false;
38
+ }
39
+ if (toTest.searchParams.ctx && toTest.searchParams.epieditmode) {
40
+ if (throwOnInvalid)
41
+ throw new Error("The 'epieditmode' and 'ctx' search parameters cannot be both defined");
42
+ return false;
43
+ }
44
+ if (!toTest.searchParams.ctx && !toTest.searchParams.epieditmode) {
45
+ if (throwOnInvalid)
46
+ throw new Error("Either 'epieditmode' and 'ctx' search parameters must be defined");
47
+ return false;
48
+ }
49
+ return true;
50
+ }
51
+ // Helper function to read the ContentID & WorkID
52
+ export function getContentRequest({ params: { path, lang }, searchParams: { preview_token: token, ...searchParams } }) {
53
+ try {
54
+ // First try to use the new style parameters
55
+ if (searchParams.key) {
56
+ return {
57
+ token,
58
+ ctx: searchParams.ctx,
59
+ key: searchParams.key,
60
+ locale: searchParams.loc,
61
+ version: searchParams.ver,
62
+ path: null
63
+ };
64
+ }
65
+ // Then fall back to old-mode URL parsing for developer URLs
66
+ if (token == AuthMode.HMAC || token == AuthMode.Basic) {
67
+ console.error("🦺 [OnPageEdit] Edit mode requested with developer tokens, falling back to URL parsing to determine content");
68
+ // Determine the contentPath
69
+ const fullPath = Array.isArray(path) ? path.map(p => decodeURIComponent(p)).join('/') : decodeURIComponent(path ?? '');
70
+ const [cmsPath, contentString] = fullPath.split(',,', 3);
71
+ const contentPath = (cmsPath.startsWith('/') ? cmsPath.substring(1) : cmsPath).replace(/^(ui\/){0,1}(CMS\/){0,1}(Content\/){0,1}/gi, "");
72
+ const [contentKey, contentVersion] = (contentString ?? '').split('_', 3);
73
+ const firstSlug = contentPath.split('/')[0];
74
+ const contentLocale = firstSlug?.length == 2 || firstSlug?.length == 5 ? firstSlug : lang;
75
+ return {
76
+ token,
77
+ ctx: searchParams.epieditmode?.toLowerCase() == 'true' ? 'edit' : 'preview',
78
+ key: contentKey,
79
+ version: contentVersion,
80
+ locale: contentLocale,
81
+ path: '/' + contentPath + (contentPath.endsWith('/') || contentPath == '' ? '' : '/')
82
+ };
83
+ }
84
+ // Finally parse the token, this is a last-restort, as it might change at any given time
85
+ const tokenInfo = JSON.parse(atob(token.split('.')[1]));
86
+ return {
87
+ token,
88
+ ctx: searchParams.epieditmode?.toLowerCase() == 'true' ? 'edit' : 'preview',
89
+ key: tokenInfo.key,
90
+ version: tokenInfo.ver,
91
+ locale: tokenInfo.loc,
92
+ path: null
93
+ };
94
+ }
95
+ catch {
96
+ return undefined;
97
+ }
98
+ }
99
+ export function readValue(variableName, defaultValue) {
100
+ try {
101
+ const stringValue = process?.env ? process.env[variableName] : undefined;
102
+ return stringValue || defaultValue;
103
+ }
104
+ catch {
105
+ return defaultValue;
106
+ }
107
+ }
108
+ export function readValueAsInt(variableName, defaultValue) {
109
+ const stringValue = readValue(variableName);
110
+ if (!stringValue)
111
+ return defaultValue;
112
+ try {
113
+ return parseInt(stringValue);
114
+ }
115
+ catch {
116
+ return defaultValue;
117
+ }
118
+ }
119
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/ope/tools.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,11 @@ import { type ComponentType, type PropsWithChildren } from 'react';
2
2
  import { type ClientFactory } from '@remkoj/optimizely-graph-client';
3
3
  import { type GraphQLClient } from 'graphql-request';
4
4
  import { type ContentQueryProps } from '@remkoj/optimizely-cms-react';
5
- export { type ContentQueryProps } from '@remkoj/optimizely-cms-react';
5
+ export type ContentRequest = (Omit<ContentQueryProps<string>, 'path'> & {
6
+ path: string | null;
7
+ token: string;
8
+ ctx: 'edit' | 'preview';
9
+ });
6
10
  type ServerPageProps = {
7
11
  params: Record<string, string | Array<string>>;
8
12
  searchParams: Record<string, string>;
@@ -10,32 +14,45 @@ type ServerPageProps = {
10
14
  export type EditPageComponent<T extends ServerPageProps = EditPageProps> = ({ params, searchParams }: T) => Promise<JSX.Element>;
11
15
  export type EditPageProps = {
12
16
  params: {
13
- path: string[];
17
+ path?: string[] | string;
18
+ lang?: string;
14
19
  };
15
- searchParams: Partial<{
16
- epieditmode: string;
20
+ searchParams: {
17
21
  preview_token: string;
18
- }>;
22
+ key?: string;
23
+ ver?: string;
24
+ loc?: string;
25
+ ctx?: 'edit' | 'preview';
26
+ epieditmode?: string;
27
+ };
28
+ };
29
+ export type ValidatedEditPageProps = {
30
+ params: {
31
+ path?: string[] | string;
32
+ lang?: string;
33
+ };
34
+ searchParams: {
35
+ preview_token: string;
36
+ } & ({
37
+ key: string;
38
+ ver: string;
39
+ loc: string;
40
+ ctx: 'edit' | 'preview';
41
+ epieditmode: undefined;
42
+ } | {
43
+ key: undefined;
44
+ ver: undefined;
45
+ loc: undefined;
46
+ ctx: undefined;
47
+ epieditmode: 'true' | 'false';
48
+ });
19
49
  };
20
50
  export type EditViewOptions = {
21
- /**
22
- * The number of miliseconds to wait between receiving the 'dataSaved'
23
- * event from the Optimizely CMS and actually refreshing the preview.
24
- */
25
- refreshDelay: number;
26
51
  /**
27
52
  * The message to show to the editor when awaiting the data to be updated
28
53
  * in ContentGraph
29
54
  */
30
55
  refreshNotice: ComponentType<{}>;
31
- /**
32
- * The message to show to the editor when an error occured in rendering the
33
- * on page editing mode
34
- */
35
- errorNotice: ComponentType<{
36
- title: string;
37
- message: string;
38
- }>;
39
56
  /**
40
57
  * The layout to use when rendering a page component
41
58
  */
@@ -78,3 +95,4 @@ export type GetContentByIdData<LocaleType = string> = {
78
95
  };
79
96
  };
80
97
  export type GetContentByIdMethod = <LocaleType = string>(client: GraphQLClient, variables: ContentQueryProps<LocaleType>) => Promise<GetContentByIdData<LocaleType>>;
98
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remkoj/optimizely-cms-nextjs",
3
3
  "license": "Apache-2.0",
4
- "version": "2.0.0-pre4",
4
+ "version": "2.0.0",
5
5
  "packageManager": "yarn@4.1.1",
6
6
  "repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
7
7
  "author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
@@ -16,7 +16,8 @@
16
16
  ".": "./dist/index.js",
17
17
  "./rsc": "./dist/client.js",
18
18
  "./publish": "./dist/publish/index.js",
19
- "./types": "./dist/types.js"
19
+ "./types": "./dist/types.js",
20
+ "./components": "./dist/components/shared/index.js"
20
21
  },
21
22
  "typesVersions": {
22
23
  "*": {
@@ -28,40 +29,42 @@
28
29
  ],
29
30
  "types": [
30
31
  "dist/types.d.ts"
32
+ ],
33
+ "components": [
34
+ "dist/components/shared/index.js"
31
35
  ]
32
36
  }
33
37
  },
34
38
  "devDependencies": {
35
- "@remkoj/optimizely-cms-react": "2.0.0-pre4",
36
- "@remkoj/optimizely-graph-client": "2.0.0-pre4",
37
- "@types/node": "^20.12.12",
39
+ "@remkoj/optimizely-cms-react": "2.0.0",
40
+ "@remkoj/optimizely-graph-client": "2.0.0",
41
+ "@types/node": "^20.14.7",
38
42
  "@types/react": "^18.3.3",
39
43
  "@types/react-dom": "18.3.0",
40
- "graphql": "^16.8.1",
44
+ "graphql": "^16.8.2",
41
45
  "graphql-request": "^6.1.0",
42
- "next": "^14.2.3",
46
+ "next": "^14.2.4",
43
47
  "prop-types": "^15.8.1",
44
48
  "react": "^18.3.1",
45
49
  "react-dom": "^18.3.1",
46
50
  "scheduler": "^0.23.2",
47
- "typescript": "^5.4.5"
51
+ "typescript": "^5.5.2"
48
52
  },
49
53
  "dependencies": {
50
54
  "deepmerge": "^4.3.1"
51
55
  },
52
56
  "peerDependencies": {
53
- "@remkoj/optimizely-cms-react": "2.0.0-pre4",
54
- "@remkoj/optimizely-graph-client": "2.0.0-pre4",
55
- "graphql": "^16.8.1",
56
- "graphql-request": "^6.1.0",
57
- "next": "^14.2.3",
58
- "react": "^18.3.1"
57
+ "@remkoj/optimizely-cms-react": "2.0.0",
58
+ "@remkoj/optimizely-graph-client": "2.0.0",
59
+ "graphql": "^16",
60
+ "graphql-request": "^6",
61
+ "next": "^14",
62
+ "react": "^18"
59
63
  },
60
64
  "scripts": {
61
65
  "clean": "yarn tsc --build --clean",
62
66
  "prepare": "yarn tsc --build",
63
67
  "watch": "yarn tsc --watch",
64
68
  "recompile": "yarn tsc --build --clean && yarn tsc --build --force"
65
- },
66
- "stableVersion": "1.0.4"
69
+ }
67
70
  }