@remkoj/optimizely-cms-nextjs 6.0.0-pre8 → 6.0.0-pre9
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/LICENSE +12 -12
- package/dist/client.d.ts +6 -1
- package/dist/client.js +29 -3
- package/dist/client.js.map +1 -1
- package/dist/cms-page/_getInfoByPath.d.ts +1 -1
- package/dist/cms-page/_getInfoByPath.js +4 -4
- package/dist/cms-page/_getInfoByPath.js.map +1 -1
- package/dist/cms-page/_globals.d.ts +1 -0
- package/dist/cms-page/_globals.js +2 -0
- package/dist/cms-page/_globals.js.map +1 -0
- package/dist/cms-page/_loadContentByPath.d.ts +1 -1
- package/dist/cms-page/_loadContentByPath.js +2 -1
- package/dist/cms-page/_loadContentByPath.js.map +1 -1
- package/dist/cms-page/data.d.ts +3 -2
- package/dist/cms-page/middleware.js +2 -0
- package/dist/cms-page/middleware.js.map +1 -1
- package/dist/cms-page/page.d.ts +12 -2
- package/dist/cms-page/page.js +112 -47
- package/dist/cms-page/page.js.map +1 -1
- package/dist/ope/data.js +3 -0
- package/dist/ope/data.js.map +1 -1
- package/dist/ope/middleware.js +1 -1
- package/dist/ope/middleware.js.map +1 -1
- package/dist/ope/page.js +20 -6
- package/dist/ope/page.js.map +1 -1
- package/package.json +15 -15
package/LICENSE
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Copyright 2024 Remko Jantzen
|
|
2
|
-
|
|
3
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
you may not use this file except in compliance with the License.
|
|
5
|
-
You may obtain a copy of the License at
|
|
6
|
-
|
|
7
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
|
|
9
|
-
Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
See the License for the specific language governing permissions and
|
|
1
|
+
Copyright 2024 Remko Jantzen
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
13
|
limitations under the License.
|
package/dist/client.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import 'server-only';
|
|
|
2
2
|
import { type IOptiGraphClient, type OptimizelyGraphConfig } from '@remkoj/optimizely-graph-client';
|
|
3
3
|
/**
|
|
4
4
|
* Create a new client instance. This is a direct wrapper for the `createClient` function
|
|
5
|
-
* exported from `@remkoj/optimizely-graph-client`.
|
|
5
|
+
* exported from `@remkoj/optimizely-graph-client`. It creates the instance with the
|
|
6
|
+
* recommended configuration for published content in a Next.JS frontend.
|
|
6
7
|
*
|
|
7
8
|
* @returns The newly created GraphQL Client
|
|
8
9
|
*/
|
|
@@ -12,6 +13,10 @@ export declare function createClient(): IOptiGraphClient;
|
|
|
12
13
|
* wraps the `createClient` function from `@remkoj/optimizely-graph-client` and applies some
|
|
13
14
|
* configuration defaults.
|
|
14
15
|
*
|
|
16
|
+
* It creates the instance with the recommended configuration for published content in a Next.JS
|
|
17
|
+
* frontend. When the token is a non-empty string, the configuration applied is intended to access
|
|
18
|
+
* non-published content in a Next.JS frontend, for example in the preview endpoint of Optimizely CMS.
|
|
19
|
+
*
|
|
15
20
|
* @returns The newly created GraphQL Client
|
|
16
21
|
*/
|
|
17
22
|
export declare function createAuthorizedClient(token?: string, config?: OptimizelyGraphConfig): IOptiGraphClient;
|
package/dist/client.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
2
|
import { createClient as createBaseClient, AuthMode } from '@remkoj/optimizely-graph-client';
|
|
3
|
+
import { isNonEmptyString } from '@remkoj/optimizely-cms-react/utils';
|
|
4
|
+
const AuthModeValues = Object.getOwnPropertyNames(AuthMode).reduce((a, b) => {
|
|
5
|
+
//@ts-ignore
|
|
6
|
+
a.push(AuthMode[b]);
|
|
7
|
+
return a;
|
|
8
|
+
}, []);
|
|
3
9
|
/**
|
|
4
10
|
* Create a new client instance. This is a direct wrapper for the `createClient` function
|
|
5
|
-
* exported from `@remkoj/optimizely-graph-client`.
|
|
11
|
+
* exported from `@remkoj/optimizely-graph-client`. It creates the instance with the
|
|
12
|
+
* recommended configuration for published content in a Next.JS frontend.
|
|
6
13
|
*
|
|
7
14
|
* @returns The newly created GraphQL Client
|
|
8
15
|
*/
|
|
@@ -14,18 +21,37 @@ export function createClient() {
|
|
|
14
21
|
* wraps the `createClient` function from `@remkoj/optimizely-graph-client` and applies some
|
|
15
22
|
* configuration defaults.
|
|
16
23
|
*
|
|
24
|
+
* It creates the instance with the recommended configuration for published content in a Next.JS
|
|
25
|
+
* frontend. When the token is a non-empty string, the configuration applied is intended to access
|
|
26
|
+
* non-published content in a Next.JS frontend, for example in the preview endpoint of Optimizely CMS.
|
|
27
|
+
*
|
|
17
28
|
* @returns The newly created GraphQL Client
|
|
18
29
|
*/
|
|
19
30
|
export function createAuthorizedClient(token, config) {
|
|
20
|
-
|
|
31
|
+
// Check the token
|
|
32
|
+
const isPotentialValidToken = isNonEmptyString(token);
|
|
33
|
+
// Create the client, but keep the cache disabled if we've got a non-empty string as token
|
|
34
|
+
const client = createBaseClient(config, undefined, {
|
|
35
|
+
nextJsFetchDirectives: true,
|
|
36
|
+
cache: !isPotentialValidToken,
|
|
37
|
+
queryCache: !isPotentialValidToken,
|
|
38
|
+
});
|
|
21
39
|
if (client.debug)
|
|
22
40
|
console.log('⚪ [ContentGraph Client] Created new Optimizely Graph client');
|
|
23
41
|
// Apply token if needed
|
|
24
|
-
if (
|
|
42
|
+
if (isPotentialValidToken) {
|
|
25
43
|
if (token == client.siteInfo.publishToken) {
|
|
26
44
|
console.warn(`🔐 [ContentGraph Client] Allowed authenticated access by publish token, switching to HMAC`);
|
|
27
45
|
client.updateAuthentication(AuthMode.HMAC);
|
|
28
46
|
}
|
|
47
|
+
else if (AuthModeValues.includes(token)) {
|
|
48
|
+
if (client.isDebugOrDevelopment() && (token === AuthMode.HMAC || token === AuthMode.Basic)) {
|
|
49
|
+
console.warn(`🔐 [ContentGraph Client] Allowing authenticated access by using a mode as token in development or debug`);
|
|
50
|
+
client.updateAuthentication(token);
|
|
51
|
+
}
|
|
52
|
+
else
|
|
53
|
+
console.warn(`🔐 [ContentGraph Client] Blocked authenticated access by using a mode as token`);
|
|
54
|
+
}
|
|
29
55
|
else {
|
|
30
56
|
client.updateAuthentication(token);
|
|
31
57
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,QAAQ,EAAqD,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,QAAQ,EAAqD,MAAM,iCAAiC,CAAA;AAC/I,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAErE,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAW,CAAC,CAAW,EAAE,CAAS,EAAE,EAAE;IACtG,YAAY;IACZ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,CAAA;AACV,CAAC,EAAE,EAAc,CAAC,CAAA;AAElB;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,sBAAsB,EAAE,CAAA;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,MAA8B;IACnF,kBAAkB;IAClB,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAErD,0FAA0F;IAC1F,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE;QACjD,qBAAqB,EAAE,IAAI;QAC3B,KAAK,EAAE,CAAC,qBAAqB;QAC7B,UAAU,EAAE,CAAC,qBAAqB;KACnC,CAAC,CAAA;IACF,IAAI,MAAM,CAAC,KAAK;QACd,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;IAE5E,wBAAwB;IACxB,IAAI,qBAAqB,EAAE,CAAC;QAC1B,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAA;YACzG,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;aAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAA;gBACvH,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACpC,CAAC;;gBACC,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;QAClG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,kEAAkE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAA;YACxG,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAA;AAE3C,eAAe,YAAY,CAAA"}
|
|
@@ -2,4 +2,4 @@ import { type IOptiGraphClient } from "@remkoj/optimizely-graph-client/client";
|
|
|
2
2
|
import { type IRouteResolver } from "@remkoj/optimizely-graph-client/router";
|
|
3
3
|
import { type ChannelDefinition } from "@remkoj/optimizely-graph-client/channels";
|
|
4
4
|
import { type LookupResponse } from "./_base.js";
|
|
5
|
-
export declare function getInfoByPath(client: IOptiGraphClient, routerFactory: (client?: IOptiGraphClient) => IRouteResolver, requestPath: string, channel?: ChannelDefinition | string): Promise<LookupResponse | undefined>;
|
|
5
|
+
export declare function getInfoByPath(client: IOptiGraphClient, routerFactory: (client?: IOptiGraphClient) => IRouteResolver, requestPath: string, channel?: ChannelDefinition | string, variation?: string): Promise<LookupResponse | undefined>;
|
|
@@ -3,12 +3,10 @@ import { ifChannelDefinition } from "@remkoj/optimizely-graph-client/channels";
|
|
|
3
3
|
import { getChannelId } from "./_base.js";
|
|
4
4
|
import { localeToGraphLocale } from "./utils.js";
|
|
5
5
|
// Helper function to obtain the info by path
|
|
6
|
-
export async function getInfoByPath(client, routerFactory, requestPath, channel) {
|
|
7
|
-
if (client.debug)
|
|
8
|
-
console.log(`⚪ [CmsPage.getInfoByPath] Loading content for path "${requestPath}" using RouteResolver`);
|
|
6
|
+
export async function getInfoByPath(client, routerFactory, requestPath, channel, variation) {
|
|
9
7
|
const channelId = getChannelId(client, channel);
|
|
10
8
|
const router = routerFactory(client);
|
|
11
|
-
const route = await router.getContentInfoByPath(requestPath, channelId);
|
|
9
|
+
const route = await router.getContentInfoByPath(requestPath, channelId, variation);
|
|
12
10
|
if (!route) {
|
|
13
11
|
if (client.debug)
|
|
14
12
|
console.warn(`🟠 [CmsPage.getInfoByPath] The RouteResolver was unable to resolve the route information for "${requestPath}"`);
|
|
@@ -17,6 +15,8 @@ export async function getInfoByPath(client, routerFactory, requestPath, channel)
|
|
|
17
15
|
const contentLink = router.routeToContentLink(route);
|
|
18
16
|
const contentType = route.contentType;
|
|
19
17
|
const graphLocale = localeToGraphLocale(route.locale, ifChannelDefinition(channel));
|
|
18
|
+
if (client.debug)
|
|
19
|
+
console.log(`⚪ [CmsPage.getInfoByPath] Resolved path "${requestPath}"${variation ? ` in variation ${variation}` : ""} to content ${JSON.stringify(contentLink)} of type ${contentType.join('/')} using RouteResolver`);
|
|
20
20
|
return [route, contentLink, contentType, graphLocale, null];
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=_getInfoByPath.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_getInfoByPath.js","sourceRoot":"","sources":["../../src/cms-page/_getInfoByPath.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAIZ,OAAO,EAA0B,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAEvG,OAAO,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAwB,EACxB,aAA4D,EAC5D,WAAmB,EACnB,OAAoC
|
|
1
|
+
{"version":3,"file":"_getInfoByPath.js","sourceRoot":"","sources":["../../src/cms-page/_getInfoByPath.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAIZ,OAAO,EAA0B,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAEvG,OAAO,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAwB,EACxB,aAA4D,EAC5D,WAAmB,EACnB,OAAoC,EACpC,SAAkB;IAElB,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IAClF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,KAAK;YACd,OAAO,CAAC,IAAI,CACV,iGAAiG,WAAW,GAAG,CAChH,CAAA;QACH,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;IACrC,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAA;IACnF,IAAI,MAAM,CAAC,KAAK;QACd,OAAO,CAAC,GAAG,CACT,4CAA4C,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAC1M,CAAA;IACH,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAmB,CAAA;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_globals.js","sourceRoot":"","sources":["../../src/cms-page/_globals.ts"],"names":[],"mappings":""}
|
|
@@ -2,4 +2,4 @@ import { type IOptiGraphClient } from "@remkoj/optimizely-graph-client";
|
|
|
2
2
|
import { type ChannelDefinition } from "@remkoj/optimizely-graph-client/channels";
|
|
3
3
|
import { type GetContentByPathMethod } from './data.js';
|
|
4
4
|
import { SystemLocales, type LookupResponse } from "./_base.js";
|
|
5
|
-
export declare function loadContentByPath<LocaleEnum = SystemLocales>(client: IOptiGraphClient, getContentByPath: GetContentByPathMethod<LocaleEnum>, requestPath: string, channel?: ChannelDefinition | string, locale?: LocaleEnum | LocaleEnum[]): Promise<LookupResponse | undefined | null>;
|
|
5
|
+
export declare function loadContentByPath<LocaleEnum = SystemLocales>(client: IOptiGraphClient, getContentByPath: GetContentByPathMethod<LocaleEnum>, requestPath: string, channel?: ChannelDefinition | string, locale?: LocaleEnum | LocaleEnum[], variation?: string): Promise<LookupResponse | undefined | null>;
|
|
@@ -4,7 +4,7 @@ import { normalizeContentLinkWithLocale, isContentLinkWithSetLocale } from '@rem
|
|
|
4
4
|
import { Utils } from '@remkoj/optimizely-cms-react/rsc';
|
|
5
5
|
import { getChannelId } from "./_base.js";
|
|
6
6
|
import { localeToGraphLocale } from './utils.js';
|
|
7
|
-
export async function loadContentByPath(client, getContentByPath, requestPath, channel, locale) {
|
|
7
|
+
export async function loadContentByPath(client, getContentByPath, requestPath, channel, locale, variation) {
|
|
8
8
|
if (client.debug)
|
|
9
9
|
console.log(`⚪ [CmsPage.loadContentByPath] Loading content for path "${requestPath}" using getContentByPath method`);
|
|
10
10
|
const channelId = getChannelId(client, channel);
|
|
@@ -18,6 +18,7 @@ export async function loadContentByPath(client, getContentByPath, requestPath, c
|
|
|
18
18
|
path: pathForRequest,
|
|
19
19
|
siteId: channelId,
|
|
20
20
|
locale,
|
|
21
|
+
variation: variation ? { include: "SOME", value: [variation] } : undefined
|
|
21
22
|
};
|
|
22
23
|
if (client.isPreviewEnabled())
|
|
23
24
|
requestVars.changeset = client?.getChangeset();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_loadContentByPath.js","sourceRoot":"","sources":["../../src/cms-page/_loadContentByPath.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAGZ,OAAO,EAA0B,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACvG,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAEnH,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAsC,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAwB,EACxB,gBAAoD,EACpD,WAAmB,EACnB,OAAoC,EACpC,MAAkC;
|
|
1
|
+
{"version":3,"file":"_loadContentByPath.js","sourceRoot":"","sources":["../../src/cms-page/_loadContentByPath.ts"],"names":[],"mappings":"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"}
|
package/dist/cms-page/data.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IOptiGraphClient, VariationInput } from "@remkoj/optimizely-graph-client";
|
|
2
|
+
export type { VariationInput } from "@remkoj/optimizely-graph-client";
|
|
2
3
|
export type GetContentByPathVariables<LocaleType = string> = {
|
|
3
4
|
path: string | string[];
|
|
4
5
|
locale?: Array<LocaleType> | LocaleType;
|
|
5
6
|
siteId?: string;
|
|
6
7
|
changeset?: string | null;
|
|
8
|
+
variation?: VariationInput | null;
|
|
7
9
|
};
|
|
8
10
|
type MayBe<T> = T extends Array<infer R> ? Array<R | null> | null : T | null;
|
|
9
11
|
export type GetContentByPathResponse = {
|
|
@@ -32,4 +34,3 @@ export type GetMetaDataByPathResponse = {
|
|
|
32
34
|
};
|
|
33
35
|
export type GetContentByPathMethod<LocaleType = string> = (client: IOptiGraphClient, variables: GetContentByPathVariables<LocaleType>) => Promise<GetContentByPathResponse>;
|
|
34
36
|
export type GetMetaDataByPathMethod<LocaleType = string> = (client: IOptiGraphClient, variables: GetContentByPathVariables<LocaleType>) => Promise<GetMetaDataByPathResponse>;
|
|
35
|
-
export {};
|
|
@@ -24,6 +24,8 @@ export function withLanguagePrefix(next, channel) {
|
|
|
24
24
|
}
|
|
25
25
|
const newMiddleware = (request, ...params) => {
|
|
26
26
|
const pathname = request.nextUrl.pathname;
|
|
27
|
+
if (pathname.startsWith("/_") || pathname.startsWith("/."))
|
|
28
|
+
return next(request, ...params);
|
|
27
29
|
const DEBUG = process.env.NODE_ENV == 'development';
|
|
28
30
|
const pathnameIsMissingLocale = !slugs.some(slug => pathname.toLowerCase().startsWith(`/${slug.toLowerCase()}/`) || pathname.toLowerCase() === `/${slug.toLowerCase()}`);
|
|
29
31
|
if (pathnameIsMissingLocale) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/cms-page/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAyC,MAAM,gBAAgB,CAAA;AAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAA2B,IAAO,EAAE,OAA0B;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/cms-page/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAyC,MAAM,gBAAgB,CAAA;AAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAA2B,IAAO,EAAE,OAA0B;IAC9F,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IAEnF,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;IAEhC,SAAS,SAAS,CAAC,OAAoB;QACrC,MAAM,OAAO,GAA8B,EAAE,CAAA;QAC7C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;QACzD,OAAO,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,aAAa,GAAmB,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAA;QACzC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAA;QACnD,MAAM,uBAAuB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACxK,IAAI,uBAAuB,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YACxC,IAAI,KAAK;gBACP,OAAO,CAAC,GAAG,CAAC,8CAA8C,QAAQ,qBAAqB,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAA;YAC3G,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACtC,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAA;YACvC,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;aAC1B,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAA;IACjC,CAAC,CAAA;IACD,OAAO,aAAkB,CAAA;AAC3B,CAAC"}
|
package/dist/cms-page/page.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type OptiCmsNextJsPage<TParams extends Record<string, string | Array<stri
|
|
|
32
32
|
* @param resolving The metadata that is currently resolving
|
|
33
33
|
* @returns Updated metadat
|
|
34
34
|
*/
|
|
35
|
-
generateMetadata: (props: DefaultCmsPageProps<TParams, TSearchParams>, resolving: ResolvingMetadata) => Promise<Metadata
|
|
35
|
+
generateMetadata: (props: DefaultCmsPageProps<TParams, TSearchParams>, resolving: ResolvingMetadata) => Promise<Metadata> | Metadata;
|
|
36
36
|
/**
|
|
37
37
|
* The actual component that performs the page rendering
|
|
38
38
|
*
|
|
@@ -55,7 +55,7 @@ export type CreatePageOptions<LocaleEnum = SystemLocales, TParams extends Record
|
|
|
55
55
|
* draftMode in configuring the client
|
|
56
56
|
* @returns The client instance
|
|
57
57
|
*/
|
|
58
|
-
client: (token?: string, scope?: 'request' | 'metadata') => IOptiGraphClient | Promise<IOptiGraphClient
|
|
58
|
+
client: ((token?: string, scope?: 'request' | 'metadata') => IOptiGraphClient) | ((token?: string, scope?: 'request' | 'metadata') => Promise<IOptiGraphClient>);
|
|
59
59
|
/**
|
|
60
60
|
* The channel information used to resolve locales, domains and more.
|
|
61
61
|
*
|
|
@@ -85,6 +85,16 @@ export type CreatePageOptions<LocaleEnum = SystemLocales, TParams extends Record
|
|
|
85
85
|
* function
|
|
86
86
|
*/
|
|
87
87
|
propsToCmsPath: (props: DefaultCmsPageProps<TParams, TSearchParams>) => Promise<string | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Take the props received by the CmsPage from Next.JS and tranform those
|
|
90
|
+
* into a the page variant used by the CMS.
|
|
91
|
+
*
|
|
92
|
+
* @param props The Properties (slugs & search params) received
|
|
93
|
+
* by Next.JS
|
|
94
|
+
* @return The path to be retrieved from Router or getContentByPath
|
|
95
|
+
* function
|
|
96
|
+
*/
|
|
97
|
+
propsToVariant: (props: DefaultCmsPageProps<TParams, TSearchParams>) => Promise<string | null | undefined>;
|
|
88
98
|
/**
|
|
89
99
|
* Take the route from the Routing Service and transform that to the route
|
|
90
100
|
* params used by Next.JS. The default implementation assumes that the CMS
|
package/dist/cms-page/page.js
CHANGED
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import 'server-only';
|
|
3
|
-
import deepmerge from 'deepmerge';
|
|
4
3
|
import { notFound } from 'next/navigation.js';
|
|
4
|
+
import { cache } from 'react';
|
|
5
5
|
// GraphQL Client & Services
|
|
6
6
|
import { RouteResolver, } from '@remkoj/optimizely-graph-client/router';
|
|
7
7
|
import { ifChannelDefinition, } from '@remkoj/optimizely-graph-client/channels';
|
|
8
8
|
// React Support
|
|
9
|
-
import { CmsContent, ServerContext,
|
|
9
|
+
import { CmsContent, ServerContext, } from '@remkoj/optimizely-cms-react/rsc';
|
|
10
10
|
// Within package
|
|
11
11
|
import { MetaDataResolver } from '../metadata.js';
|
|
12
12
|
import { urlToPath } from './utils.js';
|
|
13
13
|
import { createClient } from '../client.js';
|
|
14
14
|
import { getChannelId } from './_base.js';
|
|
15
|
-
import { loadContentByPath } from './_loadContentByPath.js';
|
|
16
|
-
import { getInfoByPath } from './_getInfoByPath.js';
|
|
15
|
+
import { loadContentByPath as loadContentByPathBase } from './_loadContentByPath.js';
|
|
16
|
+
import { getInfoByPath as getInfoByPathBase } from './_getInfoByPath.js';
|
|
17
|
+
const getInfoByPath = cache(getInfoByPathBase);
|
|
18
|
+
const loadContentByPath = cache(loadContentByPathBase);
|
|
17
19
|
export { SystemLocales } from './_base.js';
|
|
18
20
|
const CreatePageOptionDefaults = {
|
|
19
21
|
client: createClient,
|
|
20
22
|
routerFactory: (client) => new RouteResolver(client),
|
|
21
23
|
propsToCmsPath: async ({ params }) => buildRequestPath(await params),
|
|
24
|
+
propsToVariant: async ({ params }) => {
|
|
25
|
+
const pathSegments = (await params).path;
|
|
26
|
+
const variantPrefix = encodeURIComponent('var:');
|
|
27
|
+
const variantSegment = Array.isArray(pathSegments) ? pathSegments.filter(x => typeof x === 'string' && x.startsWith(variantPrefix)).at(0) : undefined;
|
|
28
|
+
return variantSegment ? variantSegment.substring(variantPrefix.length) : undefined;
|
|
29
|
+
},
|
|
22
30
|
routeToParams: (route) => {
|
|
23
|
-
|
|
31
|
+
const pathSegments = urlToPath(route.url);
|
|
32
|
+
if (route.variation)
|
|
33
|
+
pathSegments.push(`var:${route.variation}`);
|
|
34
|
+
return { path: pathSegments, lang: route.locale };
|
|
24
35
|
},
|
|
25
36
|
paramsToLocale: async (params, channel) => {
|
|
26
37
|
// If there's no channel, just return undefined
|
|
@@ -51,7 +62,7 @@ const CreatePageOptionDefaults = {
|
|
|
51
62
|
*/
|
|
52
63
|
export function createPage(factory, options) {
|
|
53
64
|
// Build the global/shared configuration for the Optimizely CMS Page
|
|
54
|
-
const { getContentByPath, client: clientFactory, channel, propsToCmsPath, routeToParams, routerFactory, paramsToLocale, } = {
|
|
65
|
+
const { getContentByPath, client: clientFactory, channel, propsToCmsPath, propsToVariant, routeToParams, routerFactory, paramsToLocale, } = {
|
|
55
66
|
...CreatePageOptionDefaults,
|
|
56
67
|
...options,
|
|
57
68
|
};
|
|
@@ -68,74 +79,130 @@ export function createPage(factory, options) {
|
|
|
68
79
|
const client = await clientFactory(undefined, 'metadata');
|
|
69
80
|
const router = routerFactory(client);
|
|
70
81
|
const channelId = getChannelId(client, channel);
|
|
71
|
-
const allRoutes = await router.getRoutes(channelId, channel ? undefined : true);
|
|
82
|
+
const allRoutes = await router.getRoutes(channelId, channel ? undefined : true, true);
|
|
72
83
|
return allRoutes.map((r) => routeToParams(r));
|
|
73
84
|
},
|
|
74
|
-
generateMetadata: async ({ params, searchParams },
|
|
75
|
-
//
|
|
85
|
+
generateMetadata: async ({ params, searchParams }, resolvingMetadata) => {
|
|
86
|
+
// Prepare the context
|
|
76
87
|
const context = await buildContext();
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const [requestPath, initialLocale] = await Promise.all([
|
|
88
|
+
// Analyze the Next.JS Request props
|
|
89
|
+
const [requestPath, initialLocale, variation] = await Promise.all([
|
|
80
90
|
propsToCmsPath({ params, searchParams }),
|
|
81
91
|
paramsToLocale(params, ifChannelDefinition(channel)),
|
|
92
|
+
(await propsToVariant({ params, searchParams })) ?? undefined
|
|
82
93
|
]);
|
|
94
|
+
// Valdiate path
|
|
83
95
|
if (!requestPath)
|
|
84
|
-
return
|
|
96
|
+
return {};
|
|
97
|
+
// Track initial locale
|
|
85
98
|
if (initialLocale)
|
|
86
99
|
context.setLocale(initialLocale);
|
|
87
|
-
|
|
100
|
+
// Resolve route
|
|
101
|
+
const [route, contentLink, contentType, graphLocale] = (await getInfoByPath(context.client, routerFactory, requestPath, channel, variation)) || {};
|
|
102
|
+
if (!contentLink || !contentType)
|
|
103
|
+
return {};
|
|
104
|
+
// Update context from route
|
|
105
|
+
if (route)
|
|
106
|
+
context.setLocale(route.locale);
|
|
107
|
+
// Fetch the metadata based upon the actual content type and resolve parent
|
|
108
|
+
const metaResolver = new MetaDataResolver(context.client);
|
|
109
|
+
const [pageMetadata, baseMetadata] = await Promise.all([
|
|
110
|
+
metaResolver.resolve(factory, contentLink, contentType, graphLocale),
|
|
111
|
+
resolvingMetadata,
|
|
112
|
+
]);
|
|
113
|
+
return pageMetadata;
|
|
114
|
+
/*// Get context
|
|
115
|
+
const context = await buildContext()
|
|
116
|
+
const channelId = getChannelId(context.client, channel)
|
|
117
|
+
|
|
118
|
+
// Read variables from request
|
|
119
|
+
const [requestPath, initialLocale] = await Promise.all([
|
|
120
|
+
propsToCmsPath({ params, searchParams }),
|
|
121
|
+
paramsToLocale(params, ifChannelDefinition(channel)),
|
|
122
|
+
])
|
|
123
|
+
if (!requestPath) return {}
|
|
124
|
+
if (initialLocale) context.setLocale(initialLocale)
|
|
125
|
+
|
|
126
|
+
const awaitedParams = await params
|
|
127
|
+
|
|
88
128
|
// Debug output
|
|
89
129
|
if (context.isDebug)
|
|
90
|
-
|
|
130
|
+
console.log(
|
|
131
|
+
`⚪ [CmsPage.generateMetadata] Processed Next.JS route: ${JSON.stringify(awaitedParams)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath, siteId: channelId })}`
|
|
132
|
+
)
|
|
133
|
+
|
|
91
134
|
// Resolve the route to a content link
|
|
92
|
-
const routeInfo = await getInfoByPath(
|
|
135
|
+
const routeInfo = await getInfoByPath(
|
|
136
|
+
context.client,
|
|
137
|
+
routerFactory,
|
|
138
|
+
requestPath,
|
|
139
|
+
channel
|
|
140
|
+
)
|
|
93
141
|
if (!routeInfo || !routeInfo[0]) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
142
|
+
if (context.isDebug)
|
|
143
|
+
console.log('⚪ [CmsPage.generateMetadata] No data received')
|
|
144
|
+
return {}
|
|
97
145
|
}
|
|
98
|
-
const [route, contentLink, contentType, graphLocale] = routeInfo
|
|
146
|
+
const [route, contentLink, contentType, graphLocale] = routeInfo
|
|
99
147
|
if (context.isDebug)
|
|
100
|
-
|
|
148
|
+
console.log(
|
|
149
|
+
`⚪ [CmsPage.generateMetadata] Retrieved content info:`,
|
|
150
|
+
route
|
|
151
|
+
)
|
|
152
|
+
|
|
101
153
|
// Update context from route
|
|
102
|
-
context.setLocale(route.locale)
|
|
103
|
-
|
|
104
|
-
updateSharedServerContext(context);
|
|
154
|
+
context.setLocale(route.locale)
|
|
155
|
+
|
|
105
156
|
// Fetch the metadata based upon the actual content type and resolve parent
|
|
106
|
-
const metaResolver = new MetaDataResolver(context.client)
|
|
157
|
+
const metaResolver = new MetaDataResolver(context.client)
|
|
107
158
|
const [pageMetadata, baseMetadata] = await Promise.all([
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
])
|
|
159
|
+
metaResolver.resolve(factory, contentLink, contentType, graphLocale),
|
|
160
|
+
parent,
|
|
161
|
+
])
|
|
162
|
+
|
|
111
163
|
if (context.isDebug)
|
|
112
|
-
|
|
164
|
+
console.log(
|
|
165
|
+
`⚪ [CmsPage.generateMetadata] Component yielded metadata:`,
|
|
166
|
+
pageMetadata
|
|
167
|
+
)
|
|
168
|
+
|
|
113
169
|
// Make sure merging of objects goes correctly
|
|
114
|
-
for (const metaKey of Object.getOwnPropertyNames(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
170
|
+
for (const metaKey of Object.getOwnPropertyNames(
|
|
171
|
+
pageMetadata
|
|
172
|
+
) as (keyof Metadata)[]) {
|
|
173
|
+
if (
|
|
174
|
+
isObject(pageMetadata[metaKey]) &&
|
|
175
|
+
isObject(baseMetadata[metaKey])
|
|
176
|
+
) {
|
|
177
|
+
//@ts-expect-error Silence error due to failed introspection...
|
|
178
|
+
pageMetadata[metaKey] = deepmerge<object>(
|
|
179
|
+
baseMetadata[metaKey],
|
|
180
|
+
pageMetadata[metaKey],
|
|
181
|
+
{ arrayMerge: (target, source) => [...source] }
|
|
182
|
+
)
|
|
183
|
+
}
|
|
120
184
|
}
|
|
185
|
+
|
|
121
186
|
// Not sure, but needed somehow...
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
187
|
+
if (
|
|
188
|
+
typeof baseMetadata.metadataBase == 'string' &&
|
|
189
|
+
(baseMetadata.metadataBase as string).length > 1
|
|
190
|
+
) {
|
|
191
|
+
pageMetadata.metadataBase = new URL(baseMetadata.metadataBase)
|
|
125
192
|
}
|
|
126
|
-
return pageMetadata
|
|
193
|
+
return pageMetadata*/
|
|
127
194
|
},
|
|
128
195
|
CmsPage: async ({ params, searchParams }) => {
|
|
129
196
|
// Prepare the context
|
|
130
197
|
const context = await buildContext();
|
|
131
|
-
//const params = await asyncParams;
|
|
132
198
|
// Analyze the Next.JS Request props
|
|
133
|
-
const [requestPath, initialLocale] = await Promise.all([
|
|
199
|
+
const [requestPath, initialLocale, requestVariant] = await Promise.all([
|
|
134
200
|
propsToCmsPath({ params, searchParams }),
|
|
135
201
|
paramsToLocale(params, ifChannelDefinition(channel)),
|
|
202
|
+
(await propsToVariant({ params, searchParams })) ?? undefined
|
|
136
203
|
]);
|
|
137
204
|
if (context.isDebug)
|
|
138
|
-
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(await params)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath })}`);
|
|
205
|
+
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(await params)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath, variant: requestVariant })}`);
|
|
139
206
|
// If we don't have the path, or the path is an internal Next.js route reject it.
|
|
140
207
|
if (!requestPath || requestPath.startsWith('/_next/'))
|
|
141
208
|
return notFound();
|
|
@@ -144,8 +211,8 @@ export function createPage(factory, options) {
|
|
|
144
211
|
context.setLocale(initialLocale);
|
|
145
212
|
// Resolve the content based upon the path
|
|
146
213
|
const lookupData = await (getContentByPath
|
|
147
|
-
? loadContentByPath(context.client, getContentByPath, requestPath, channel, initialLocale)
|
|
148
|
-
: getInfoByPath(context.client, routerFactory, requestPath, channel));
|
|
214
|
+
? loadContentByPath(context.client, getContentByPath, requestPath, channel, initialLocale, requestVariant)
|
|
215
|
+
: getInfoByPath(context.client, routerFactory, requestPath, channel, requestVariant));
|
|
149
216
|
if (!lookupData) {
|
|
150
217
|
console.error(`🔴 [CmsPage] Unable to resolve the content for ${JSON.stringify(await params)}!`);
|
|
151
218
|
return notFound();
|
|
@@ -153,8 +220,6 @@ export function createPage(factory, options) {
|
|
|
153
220
|
const [route, contentLink, contentType, graphLocale, contentData] = lookupData;
|
|
154
221
|
if (contentLink?.locale)
|
|
155
222
|
context.setLocale(contentLink.locale);
|
|
156
|
-
// Make the shared server context available
|
|
157
|
-
updateSharedServerContext(context);
|
|
158
223
|
// Render the content link
|
|
159
224
|
return (_jsx(CmsContent, { contentType: contentType, contentLink: contentLink, fragmentData: contentData ?? undefined, ctx: context }));
|
|
160
225
|
},
|
|
@@ -177,7 +242,7 @@ function buildRequestPath({ lang, path, }) {
|
|
|
177
242
|
return '/';
|
|
178
243
|
const fullPath = '/' +
|
|
179
244
|
slugs
|
|
180
|
-
.filter((x) => x && x.length > 0)
|
|
245
|
+
.filter((x) => x && x.length > 0 && !x.startsWith(encodeURIComponent('var:')))
|
|
181
246
|
.map((x) => decodeURIComponent(x))
|
|
182
247
|
.join('/');
|
|
183
248
|
if (!slugs[slugs.length - 1].includes('.'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
|
package/dist/ope/data.js
CHANGED
|
@@ -11,6 +11,7 @@ const gqlQuery = gql `query getContentByIdBase($key: String!, $version: String,
|
|
|
11
11
|
]
|
|
12
12
|
}
|
|
13
13
|
locale: $locale
|
|
14
|
+
variation: {include: ALL}
|
|
14
15
|
) {
|
|
15
16
|
total
|
|
16
17
|
items {
|
|
@@ -20,6 +21,8 @@ const gqlQuery = gql `query getContentByIdBase($key: String!, $version: String,
|
|
|
20
21
|
types
|
|
21
22
|
displayName
|
|
22
23
|
version
|
|
24
|
+
changeset
|
|
25
|
+
variation
|
|
23
26
|
}
|
|
24
27
|
_type: __typename
|
|
25
28
|
}
|
package/dist/ope/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAyB,KAAK,EAAuB,MAAqB,EAAE,SAAwC,EAAE,EAAE;IACjJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAoD,QAAQ,EAAE,SAAS,CAAC,CAAA;AACrG,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;EAyBlB,CAAA"}
|
package/dist/ope/middleware.js
CHANGED
|
@@ -27,7 +27,7 @@ export function withEditFallback(middleware, adminSlug = "ui", previewRoute = "/
|
|
|
27
27
|
let requestPath = path.replace(previewPath, "/");
|
|
28
28
|
if (!requestPath.endsWith('/'))
|
|
29
29
|
requestPath = requestPath + '/';
|
|
30
|
-
const rewrittenUrl = new URL(
|
|
30
|
+
const rewrittenUrl = new URL(previewRoute, request.url);
|
|
31
31
|
rewrittenUrl.searchParams.set("key", contentId);
|
|
32
32
|
rewrittenUrl.searchParams.set("ver", versionId);
|
|
33
33
|
rewrittenUrl.searchParams.set("loc", "ALL"); // Locale cannot be inferred from URL, however a contentId/versionId should always be unique
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/ope/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIhE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAc,UAA0B,EAAE,YAAoB,IAAI,EAAE,eAAuB,UAAU;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/ope/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIhE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAc,UAA0B,EAAE,YAAoB,IAAI,EAAE,eAAuB,UAAU;IACnI,MAAM,WAAW,GAAG,IAAI,SAAS,eAAe,CAAA;IAChD,MAAM,iBAAiB,GAAkB,OAAO,CAAC,EAAE;QACjD,IACE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YAChD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAC/C,CAAC;YACD,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACnE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACxD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;YAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,UAAU,CAAA;YAClK,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YAChD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC5B,WAAW,GAAG,WAAW,GAAG,GAAG,CAAA;YAEjC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;YACvD,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAC/C,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAC/C,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA,CAAC,4FAA4F;YACxI,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACzC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;YACrD,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAClD,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,CAAoB,CAAA;QAC9D,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,YAAY,CAAC,IAAI,EAAsB,CAAA;IACpF,CAAC,CAAA;IACD,OAAO,iBAAiB,CAAA;AAC1B,CAAC"}
|
package/dist/ope/page.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import 'server-only';
|
|
3
3
|
import { contentLinkToString, localeToGraphLocale, } from '@remkoj/optimizely-graph-client/utils';
|
|
4
|
-
import { ServerContext, Utils, CmsContent,
|
|
4
|
+
import { ServerContext, Utils, CmsContent, OptimizelyComposition, isNode, } from '@remkoj/optimizely-cms-react/rsc';
|
|
5
5
|
import { notFound } from 'next/navigation.js';
|
|
6
6
|
import OnPageEdit from '../components/on-page-edit.js';
|
|
7
7
|
import { createAuthorizedClient } from '../client.js';
|
|
@@ -65,7 +65,11 @@ export function createEditPageComponent(factory, options) {
|
|
|
65
65
|
try {
|
|
66
66
|
const contentInfo = await getContentById(client, {
|
|
67
67
|
...contentRequest,
|
|
68
|
-
locale:
|
|
68
|
+
locale: contentRequest.locale && contentRequest.locale.length > 0
|
|
69
|
+
? localeToGraphLocale(Array.isArray(contentRequest.locale)
|
|
70
|
+
? contentRequest.locale.at(0)
|
|
71
|
+
: contentRequest.locale)
|
|
72
|
+
: undefined,
|
|
69
73
|
changeset: client.getChangeset(),
|
|
70
74
|
});
|
|
71
75
|
if ((contentInfo?.content?.total ?? 0) > 1) {
|
|
@@ -101,12 +105,22 @@ export function createEditPageComponent(factory, options) {
|
|
|
101
105
|
context.setEditableContentId(contentLink);
|
|
102
106
|
if (contentLink.locale)
|
|
103
107
|
context.setLocale(contentLink.locale);
|
|
104
|
-
//
|
|
105
|
-
updateSharedServerContext(context);
|
|
106
|
-
// Render the content, with edit mode context
|
|
108
|
+
// Determine rendering flow controls
|
|
107
109
|
const isPage = contentType.some((x) => x?.toLowerCase() == 'page') ?? false;
|
|
110
|
+
const isSection = contentType.some(x => x?.toLowerCase() == 'section') ?? false;
|
|
111
|
+
const sectionData = isSection && contentItem['composition'] && isNode(contentItem['composition']) ? contentItem['composition'] : undefined;
|
|
112
|
+
if (sectionData) {
|
|
113
|
+
delete contentItem['composition'];
|
|
114
|
+
sectionData.component = contentItem;
|
|
115
|
+
context.setEditableContentIsExperience(true);
|
|
116
|
+
}
|
|
117
|
+
// Prepare communication injector
|
|
118
|
+
const injectorUrl = new URL(communicationInjectorPath, client.siteInfo.cmsURL).href;
|
|
119
|
+
// Render edit page
|
|
108
120
|
const Layout = isPage ? PageLayout : React.Fragment;
|
|
109
|
-
const output = (_jsxs(_Fragment, { children: [_jsx(Script, { src:
|
|
121
|
+
const output = (_jsxs(_Fragment, { children: [_jsx(Script, { src: injectorUrl, strategy: "afterInteractive" }), _jsxs(Layout, { locale: contentItem.locale?.name ?? '', children: [_jsx(OnPageEdit, { refreshTimeout: refreshTimeout, children: _jsx(RefreshNotice, {}) }), sectionData ?
|
|
122
|
+
_jsx(OptimizelyComposition, { node: sectionData, ctx: context }) :
|
|
123
|
+
_jsx(CmsContent, { contentType: contentType, contentLink: contentLink, fragmentData: contentItem, ctx: context })] }), context.isDebug && (_jsxs("div", { className: "optly-contentLink", children: ["ContentItem:", ' ', contentLink
|
|
110
124
|
? contentLinkToString(contentLink)
|
|
111
125
|
: 'Invalid content link returned from Optimizely Graph'] }))] }));
|
|
112
126
|
return output;
|
package/dist/ope/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAOpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EACL,aAAa,EACb,KAAK,EACL,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAOpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uCAAuC,CAAA;AAE9C,OAAO,EACL,aAAa,EACb,KAAK,EACL,UAAU,EACV,qBAAqB,EACrB,MAAM,GAGP,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,UAAU,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAmB,MAAM,OAAO,CAAA;AACvC,OAAO,MAAM,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE9D,MAAM,cAAc,GAA4B;IAC9C,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAK;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,4BAAG,KAAK,CAAC,QAAQ,GAAI;IACxC,MAAM,EAAE,cAAc;IACtB,aAAa,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;IAChE,yBAAyB,EAAE,2CAA2C;IACtE,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,cAAc;IAChC,cAAc,EAAE,KAAK;CACtB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAyB,EACzB,OAA8C;IAE9C,MAAM,EACJ,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,cAAc,EACtB,aAAa,EACb,yBAAyB,EACzB,eAAe,EAAE,cAAc,EAC/B,gBAAgB,EAAE,eAAe,EACjC,cAAc,GACf,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAA6B,CAAA;IAEhE,SAAS,aAAa;QACpB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAA;IAC9C,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,EACtB,MAAM,EACN,YAAY,GACE;QACd,MAAM,KAAK,GAAG;YACZ,MAAM,EAAE,MAAM,MAAM;YACpB,YAAY,EAAE,MAAM,YAAY;SACjC,CAAA;QAED,iCAAiC;QACjC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC1D,OAAO,QAAQ,EAAE,CAAA;QACnB,CAAC;QAED,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAA;YACpE,OAAO,QAAQ,EAAE,CAAA;QACnB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,kBAAkB,CAAA;QAE5D,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,GAAG;SACV,CAAC,CAAA;QAEF,uCAAuC;QACvC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CACT,mCAAmC,EACnC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAC/B,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;gBAC/C,GAAG,cAAc;gBACjB,MAAM,EACJ,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBACvD,CAAC,CAAC,mBAAmB,CACjB,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;wBAClC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,CAAC,CAAC,cAAc,CAAC,MAAM,CAC1B;oBACH,CAAC,CAAC,SAAS;gBACf,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;aACjC,CAAC,CAAA;YACF,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CACV,kCAAkC;oBAChC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;oBAC9B,qDAAqD,CACxD,CAAA;YACH,CAAC;YACD,MAAM,WAAW,GACf,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;gBACzC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAChC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,CAAA;YAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAC5C,WAAW,EAAE,SAAS,CAAC,KAAK,CAC7B,CAAA;YAED,iEAAiE;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CACV,wCAAwC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,4CAA4C,CACnH,CAAA;gBACD,OAAO,QAAQ,EAAE,CAAA;YACnB,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CACV,wCAAwC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,2CAA2C,CAClH,CAAA;gBACD,OAAO,QAAQ,EAAE,CAAA;YACnB,CAAC;YAED,MAAM,WAAW,GAA0B;gBACzC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG;gBAC9B,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM;gBACpC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO;aACvC,CAAA;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,kCAAkC,EAClC,IAAI,CAAC,SAAS,CAAC;oBACb,GAAG,WAAW;oBACd,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAChD,CAAC,CACH,CAAA;YACH,CAAC;YAGD,iDAAiD;YACjD,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;YACzC,IAAI,WAAW,CAAC,MAAM;gBAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAE7D,oCAAoC;YACpC,MAAM,MAAM,GACV,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAA;YAC9D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,KAAK,CAAA;YAC/E,MAAM,WAAW,GAAG,SAAS,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAoB,CAAC,CAAC,CAAC,SAAS,CAAA;YAC7J,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC,aAAa,CAAC,CAAA;gBACjC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAA;gBACnC,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAA;YAC9C,CAAC;YAED,iCAAiC;YACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;YAEnF,mBAAmB;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;YACnD,MAAM,MAAM,GAAG,CACb,8BAEE,KAAC,MAAM,IAAC,GAAG,EAAG,WAAW,EAAG,QAAQ,EAAC,kBAAkB,GAAE,EACzD,MAAC,MAAM,IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,aAC5C,KAAC,UAAU,IAAC,cAAc,EAAE,cAAc,YACxC,KAAC,aAAa,KAAG,GACN,EACX,WAAW,CAAC,CAAC;gCACb,KAAC,qBAAqB,IAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAI,CAAC,CAAC;gCAC5D,KAAC,UAAU,IAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAI,IAEtG,EACR,OAAO,CAAC,OAAO,IAAI,CAClB,eAAK,SAAS,EAAC,mBAAmB,6BACnB,GAAG,EACf,WAAW;gCACV,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC;gCAClC,CAAC,CAAC,qDAAqD,IACrD,CACP,IACA,CACJ,CAAA;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;YAChD,OAAO,QAAQ,EAAE,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,eAAe,uBAAuB,CAAA"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@remkoj/optimizely-cms-nextjs",
|
|
3
3
|
"description": "Next.JS integration for Optimizely SaaS CMS",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "6.0.0-
|
|
5
|
+
"version": "6.0.0-pre9",
|
|
6
6
|
"repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
|
|
7
7
|
"author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
|
|
8
8
|
"homepage": "https://github.com/remkoj/optimizely-dxp-clients",
|
|
@@ -44,25 +44,25 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@remkoj/optimizely-cms-react": "6.0.0-
|
|
48
|
-
"@remkoj/optimizely-graph-client": "6.0.0-
|
|
47
|
+
"@remkoj/optimizely-cms-react": "6.0.0-pre9",
|
|
48
|
+
"@remkoj/optimizely-graph-client": "6.0.0-pre9",
|
|
49
49
|
"@types/negotiator": "^0.6.4",
|
|
50
|
-
"@types/node": "^22.
|
|
51
|
-
"@types/react": "^19.
|
|
52
|
-
"@types/react-dom": "19.1
|
|
53
|
-
"next": "^15.4
|
|
50
|
+
"@types/node": "^22.18.10",
|
|
51
|
+
"@types/react": "^19.2.2",
|
|
52
|
+
"@types/react-dom": "19.2.1",
|
|
53
|
+
"next": "^15.5.4",
|
|
54
54
|
"prop-types": "^15.8.1",
|
|
55
|
-
"react": "^19.
|
|
56
|
-
"react-dom": "^19.
|
|
57
|
-
"scheduler": "^0.
|
|
58
|
-
"typescript": "^5.
|
|
55
|
+
"react": "^19.2.0",
|
|
56
|
+
"react-dom": "^19.2.0",
|
|
57
|
+
"scheduler": "^0.27.0",
|
|
58
|
+
"typescript": "^5.9.3"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@formatjs/intl-localematcher": "^0.6.
|
|
62
|
-
"@remkoj/optimizely-cms-react": "^6.0.0-
|
|
63
|
-
"@remkoj/optimizely-graph-client": "^6.0.0-
|
|
61
|
+
"@formatjs/intl-localematcher": "^0.6.2",
|
|
62
|
+
"@remkoj/optimizely-cms-react": "^6.0.0-pre9",
|
|
63
|
+
"@remkoj/optimizely-graph-client": "^6.0.0-pre9",
|
|
64
64
|
"deepmerge": "^4.3.1",
|
|
65
|
-
"entities": "^
|
|
65
|
+
"entities": "^7.0.0",
|
|
66
66
|
"graphql": "^16.11.0",
|
|
67
67
|
"graphql-request": "^7.2.0",
|
|
68
68
|
"negotiator": "^1.0.0"
|