@sitecore-content-sdk/nextjs 1.5.0 → 2.0.0-canary.10
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.txt +202 -202
- package/dist/cjs/client/index.js +1 -1
- package/dist/cjs/client/sitecore-nextjs-client.js +4 -4
- package/dist/cjs/components/BYOCWrapper.js +0 -5
- package/dist/cjs/components/FEaaSWrapper.js +0 -5
- package/dist/cjs/components/NextImage.js +2 -2
- package/dist/cjs/config/define-config.js +7 -4
- package/dist/cjs/config-cli/define-cli-config.js +1 -1
- package/dist/cjs/debug.js +11 -0
- package/dist/cjs/editing/codegen/import-map-server.js +1 -1
- package/dist/cjs/editing/editing-config-middleware.js +13 -11
- package/dist/cjs/editing/editing-render-middleware.js +41 -29
- package/dist/cjs/editing/feaas-render-middleware.js +24 -13
- package/dist/cjs/editing/index.js +2 -2
- package/dist/cjs/editing/types.js +2 -0
- package/dist/cjs/editing/utils.js +35 -6
- package/dist/cjs/index.js +17 -11
- package/dist/cjs/middleware/index.js +1 -24
- package/dist/cjs/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +8 -8
- package/dist/cjs/proxy/index.js +29 -0
- package/dist/cjs/{middleware/locale-middleware.js → proxy/locale-proxy.js} +18 -15
- package/dist/cjs/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +23 -20
- package/dist/cjs/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +31 -28
- package/dist/cjs/{middleware/middleware.js → proxy/proxy.js} +31 -28
- package/dist/cjs/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +121 -111
- package/dist/cjs/route-handler/editing-config-route-handler.js +16 -13
- package/dist/cjs/route-handler/editing-render-route-handler.js +43 -32
- package/dist/cjs/route-handler/robots-route-handler.js +14 -6
- package/dist/cjs/route-handler/sitemap-route-handler.js +13 -5
- package/dist/cjs/site/index.js +1 -1
- package/dist/cjs/tools/codegen/import-map.js +2 -2
- package/dist/cjs/tools/generate-map.js +1 -1
- package/dist/cjs/tools/index.js +7 -8
- package/dist/cjs/tools/templating/byoc-component.js +1 -1
- package/dist/cjs/tools/templating/default-component.js +1 -1
- package/dist/cjs/tools/templating/utils.js +5 -6
- package/dist/cjs/utils/index.js +4 -5
- package/dist/cjs/utils/utils.js +3 -3
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/client/sitecore-nextjs-client.js +4 -4
- package/dist/esm/components/BYOCWrapper.js +0 -5
- package/dist/esm/components/FEaaSWrapper.js +0 -5
- package/dist/esm/components/NextImage.js +2 -2
- package/dist/esm/config/define-config.js +7 -4
- package/dist/esm/config-cli/define-cli-config.js +1 -1
- package/dist/esm/debug.js +9 -0
- package/dist/esm/editing/codegen/import-map-server.js +1 -1
- package/dist/esm/editing/editing-config-middleware.js +4 -5
- package/dist/esm/editing/editing-render-middleware.js +22 -13
- package/dist/esm/editing/feaas-render-middleware.js +14 -6
- package/dist/esm/editing/index.js +2 -2
- package/dist/esm/editing/types.js +1 -0
- package/dist/esm/editing/utils.js +32 -4
- package/dist/esm/index.js +11 -12
- package/dist/esm/middleware/index.js +0 -9
- package/dist/esm/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +6 -6
- package/dist/esm/proxy/index.js +9 -0
- package/dist/esm/{middleware/locale-middleware.js → proxy/locale-proxy.js} +12 -12
- package/dist/esm/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +16 -16
- package/dist/esm/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +17 -17
- package/dist/esm/{middleware/middleware.js → proxy/proxy.js} +24 -24
- package/dist/esm/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +112 -102
- package/dist/esm/route-handler/editing-config-route-handler.js +4 -4
- package/dist/esm/route-handler/editing-render-route-handler.js +19 -11
- package/dist/esm/route-handler/robots-route-handler.js +8 -3
- package/dist/esm/route-handler/sitemap-route-handler.js +8 -3
- package/dist/esm/site/index.js +1 -1
- package/dist/esm/tools/codegen/import-map.js +1 -1
- package/dist/esm/tools/generate-map.js +1 -1
- package/dist/esm/tools/index.js +2 -1
- package/dist/esm/tools/templating/byoc-component.js +1 -1
- package/dist/esm/tools/templating/default-component.js +1 -1
- package/dist/esm/tools/templating/utils.js +1 -2
- package/dist/esm/utils/index.js +2 -2
- package/dist/esm/utils/utils.js +2 -2
- package/package.json +187 -181
- package/proxy.d.ts +1 -0
- package/types/client/index.d.ts +1 -1
- package/types/client/index.d.ts.map +1 -1
- package/types/client/sitecore-nextjs-client.d.ts +3 -3
- package/types/client/sitecore-nextjs-client.d.ts.map +1 -1
- package/types/components/BYOCWrapper.d.ts +0 -5
- package/types/components/BYOCWrapper.d.ts.map +1 -1
- package/types/components/FEaaSWrapper.d.ts +0 -5
- package/types/components/FEaaSWrapper.d.ts.map +1 -1
- package/types/components/Placeholder.d.ts +2 -2
- package/types/components/Placeholder.d.ts.map +1 -1
- package/types/config/define-config.d.ts +1 -1
- package/types/config/define-config.d.ts.map +1 -1
- package/types/config-cli/define-cli-config.d.ts +1 -1
- package/types/config-cli/define-cli-config.d.ts.map +1 -1
- package/types/debug.d.ts +7 -0
- package/types/debug.d.ts.map +1 -0
- package/types/editing/codegen/import-map-server.d.ts +1 -1
- package/types/editing/codegen/import-map-server.d.ts.map +1 -1
- package/types/editing/codegen/import-map-utils.d.ts +1 -1
- package/types/editing/codegen/import-map-utils.d.ts.map +1 -1
- package/types/editing/codegen/import-map.d.ts +1 -1
- package/types/editing/codegen/import-map.d.ts.map +1 -1
- package/types/editing/codegen/index.d.ts +1 -1
- package/types/editing/codegen/index.d.ts.map +1 -1
- package/types/editing/editing-config-middleware.d.ts +1 -1
- package/types/editing/editing-config-middleware.d.ts.map +1 -1
- package/types/editing/editing-render-middleware.d.ts +8 -1
- package/types/editing/editing-render-middleware.d.ts.map +1 -1
- package/types/editing/feaas-render-middleware.d.ts +1 -1
- package/types/editing/feaas-render-middleware.d.ts.map +1 -1
- package/types/editing/index.d.ts +3 -2
- package/types/editing/index.d.ts.map +1 -1
- package/types/editing/types.d.ts +37 -0
- package/types/editing/types.d.ts.map +1 -0
- package/types/editing/utils.d.ts +12 -1
- package/types/editing/utils.d.ts.map +1 -1
- package/types/index.d.ts +13 -11
- package/types/index.d.ts.map +1 -1
- package/types/middleware/index.d.ts +0 -9
- package/types/middleware/index.d.ts.map +1 -1
- package/types/middleware/robots-middleware.d.ts +1 -1
- package/types/middleware/robots-middleware.d.ts.map +1 -1
- package/types/middleware/sitemap-middleware.d.ts +1 -1
- package/types/middleware/sitemap-middleware.d.ts.map +1 -1
- package/types/{middleware/app-router-multisite-middleware.d.ts → proxy/app-router-multisite-proxy.d.ts} +6 -6
- package/types/proxy/app-router-multisite-proxy.d.ts.map +1 -0
- package/types/proxy/index.d.ts +10 -0
- package/types/proxy/index.d.ts.map +1 -0
- package/types/proxy/locale-proxy.d.ts +35 -0
- package/types/proxy/locale-proxy.d.ts.map +1 -0
- package/types/{middleware/multisite-middleware.d.ts → proxy/multisite-proxy.d.ts} +11 -11
- package/types/proxy/multisite-proxy.d.ts.map +1 -0
- package/types/{middleware/personalize-middleware.d.ts → proxy/personalize-proxy.d.ts} +10 -10
- package/types/proxy/personalize-proxy.d.ts.map +1 -0
- package/types/{middleware/middleware.d.ts → proxy/proxy.d.ts} +24 -26
- package/types/proxy/proxy.d.ts.map +1 -0
- package/types/{middleware/redirects-middleware.d.ts → proxy/redirects-proxy.d.ts} +11 -11
- package/types/proxy/redirects-proxy.d.ts.map +1 -0
- package/types/route-handler/editing-config-route-handler.d.ts +1 -1
- package/types/route-handler/editing-config-route-handler.d.ts.map +1 -1
- package/types/route-handler/editing-render-route-handler.d.ts +7 -0
- package/types/route-handler/editing-render-route-handler.d.ts.map +1 -1
- package/types/route-handler/robots-route-handler.d.ts +2 -2
- package/types/route-handler/robots-route-handler.d.ts.map +1 -1
- package/types/route-handler/sitemap-route-handler.d.ts +2 -2
- package/types/route-handler/sitemap-route-handler.d.ts.map +1 -1
- package/types/services/component-props-service.d.ts +1 -1
- package/types/services/component-props-service.d.ts.map +1 -1
- package/types/sharedTypes/component-props.d.ts +1 -1
- package/types/sharedTypes/component-props.d.ts.map +1 -1
- package/types/sharedTypes/sitecore-page-props.d.ts +2 -2
- package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -1
- package/types/site/index.d.ts +1 -1
- package/types/site/index.d.ts.map +1 -1
- package/types/tools/codegen/import-map.d.ts +3 -3
- package/types/tools/codegen/import-map.d.ts.map +1 -1
- package/types/tools/generate-map.d.ts +1 -1
- package/types/tools/generate-map.d.ts.map +1 -1
- package/types/tools/index.d.ts +3 -1
- package/types/tools/index.d.ts.map +1 -1
- package/types/tools/templating/byoc-component.d.ts +1 -1
- package/types/tools/templating/byoc-component.d.ts.map +1 -1
- package/types/tools/templating/default-component.d.ts +1 -1
- package/types/tools/templating/default-component.d.ts.map +1 -1
- package/types/tools/templating/utils.d.ts +2 -2
- package/types/tools/templating/utils.d.ts.map +1 -1
- package/types/utils/index.d.ts +2 -2
- package/types/utils/index.d.ts.map +1 -1
- package/types/middleware/app-router-multisite-middleware.d.ts.map +0 -1
- package/types/middleware/locale-middleware.d.ts +0 -35
- package/types/middleware/locale-middleware.d.ts.map +0 -1
- package/types/middleware/middleware.d.ts.map +0 -1
- package/types/middleware/multisite-middleware.d.ts.map +0 -1
- package/types/middleware/personalize-middleware.d.ts.map +0 -1
- package/types/middleware/redirects-middleware.d.ts.map +0 -1
|
@@ -7,12 +7,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { EDITING_ALLOWED_ORIGINS, isDesignLibraryMode, PREVIEW_KEY, QUERY_PARAM_EDITING_SECRET, } from '@sitecore-content-sdk/
|
|
11
|
-
import { DEFAULT_VARIANT } from '@sitecore-content-sdk/
|
|
12
|
-
import { SITE_KEY } from '@sitecore-content-sdk/
|
|
10
|
+
import { EDITING_ALLOWED_ORIGINS, isDesignLibraryMode, PREVIEW_KEY, QUERY_PARAM_EDITING_SECRET, } from '@sitecore-content-sdk/content/editing';
|
|
11
|
+
import { DEFAULT_VARIANT } from '@sitecore-content-sdk/content/personalize';
|
|
12
|
+
import { SITE_KEY } from '@sitecore-content-sdk/content/site';
|
|
13
13
|
import { EDITING_PASS_THROUGH_HEADERS, QUERY_PARAM_VERCEL_PROTECTION_BYPASS, QUERY_PARAM_VERCEL_SET_BYPASS_COOKIE, } from './constants';
|
|
14
14
|
import { SERVER_PROPS_ID, STATIC_PROPS_ID } from 'next/constants';
|
|
15
|
-
import { getAllowedOriginsFromEnv } from '@sitecore-content-sdk/core/
|
|
15
|
+
import { getAllowedOriginsFromEnv } from '@sitecore-content-sdk/core/tools';
|
|
16
16
|
/**
|
|
17
17
|
* Gets editing secret value from request
|
|
18
18
|
* @param {NextApiRequest | NextRequest} req incoming request
|
|
@@ -64,6 +64,34 @@ export const mapEditingParams = (query) => {
|
|
|
64
64
|
};
|
|
65
65
|
return params;
|
|
66
66
|
};
|
|
67
|
+
/**
|
|
68
|
+
* Parses the query parameters based on the provided allowed parameters or a resolver function, to extract additional parameters that should be allowed.
|
|
69
|
+
* @param {{ [key: string]: string | undefined }} queryParams Object of query parameters from incoming URL.
|
|
70
|
+
* @param {AllowedQueryParams} allowedParams Allowed parameters to map.
|
|
71
|
+
* @returns Object containing the list of missing required parameters and the allowed query parameters that were extracted.
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
export const getAllowedQueryParams = (queryParams, allowedParams) => {
|
|
75
|
+
const allowedQueryParamsList = typeof allowedParams === 'function'
|
|
76
|
+
? allowedParams(Object.keys(queryParams))
|
|
77
|
+
: Array.isArray(allowedParams)
|
|
78
|
+
? allowedParams
|
|
79
|
+
: [];
|
|
80
|
+
if (!allowedQueryParamsList.length)
|
|
81
|
+
return { missingAllowedParams: [], allowedQueryParams: {} };
|
|
82
|
+
return allowedQueryParamsList.reduce((acc, param) => {
|
|
83
|
+
const name = typeof param === 'string' ? param : param.name;
|
|
84
|
+
const required = typeof param === 'string' ? false : param.required;
|
|
85
|
+
const value = queryParams[name];
|
|
86
|
+
if (value !== undefined) {
|
|
87
|
+
acc.allowedQueryParams[name] = value;
|
|
88
|
+
return acc;
|
|
89
|
+
}
|
|
90
|
+
if (required)
|
|
91
|
+
acc.missingAllowedParams.push(name);
|
|
92
|
+
return acc;
|
|
93
|
+
}, { missingAllowedParams: [], allowedQueryParams: {} });
|
|
94
|
+
};
|
|
67
95
|
/**
|
|
68
96
|
* Filters out Next.js preview cookies from a cookie string or array
|
|
69
97
|
* @param {string | string[] | null} cookies cookie header value
|
package/dist/esm/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
export { default as debug } from './debug';
|
|
1
2
|
export { constants,
|
|
2
3
|
// generic data access
|
|
3
|
-
NativeDataFetcher, enableDebug,
|
|
4
|
-
export { LayoutServicePageState, LayoutService, getChildPlaceholder, getFieldValue, getContentStylesheetLink, EditMode, RenderingType, } from '@sitecore-content-sdk/
|
|
5
|
-
export { ErrorPage } from '@sitecore-content-sdk/
|
|
6
|
-
export { ComponentLayoutService } from '@sitecore-content-sdk/
|
|
7
|
-
export { mediaApi } from '@sitecore-content-sdk/
|
|
8
|
-
export { DictionaryService, } from '@sitecore-content-sdk/
|
|
9
|
-
export { personalizeLayout, getPersonalizedRewrite, getPersonalizedRewriteData, getGroomedVariantIds, normalizePersonalizedRewrite, CdpHelper, PersonalizeService, } from '@sitecore-content-sdk/
|
|
10
|
-
export { SitePathService, RedirectsService, REDIRECT_TYPE_301, REDIRECT_TYPE_302, REDIRECT_TYPE_SERVER_TRANSFER, } from '@sitecore-content-sdk/
|
|
11
|
-
export { SitemapXmlService, ErrorPagesService, RobotsService, SiteResolver, SiteInfoService, getSiteRewrite, getSiteRewriteData, normalizeSiteRewrite, } from '@sitecore-content-sdk/
|
|
4
|
+
NativeDataFetcher, enableDebug, MemoryCacheClient, } from '@sitecore-content-sdk/core';
|
|
5
|
+
export { LayoutServicePageState, LayoutService, getChildPlaceholder, getFieldValue, getContentStylesheetLink, EditMode, RenderingType, } from '@sitecore-content-sdk/content/layout';
|
|
6
|
+
export { ErrorPage } from '@sitecore-content-sdk/content/client';
|
|
7
|
+
export { ComponentLayoutService } from '@sitecore-content-sdk/content/editing';
|
|
8
|
+
export { mediaApi } from '@sitecore-content-sdk/content/media';
|
|
9
|
+
export { DictionaryService, } from '@sitecore-content-sdk/content/i18n';
|
|
10
|
+
export { personalizeLayout, getPersonalizedRewrite, getPersonalizedRewriteData, getGroomedVariantIds, normalizePersonalizedRewrite, CdpHelper, PersonalizeService, } from '@sitecore-content-sdk/content/personalize';
|
|
11
|
+
export { SitePathService, RedirectsService, REDIRECT_TYPE_301, REDIRECT_TYPE_302, REDIRECT_TYPE_SERVER_TRANSFER, } from '@sitecore-content-sdk/content/site';
|
|
12
|
+
export { SitemapXmlService, ErrorPagesService, RobotsService, SiteResolver, SiteInfoService, getSiteRewrite, getSiteRewriteData, normalizeSiteRewrite, } from '@sitecore-content-sdk/content/site';
|
|
12
13
|
export { ComponentPropsService } from './services/component-props-service';
|
|
13
14
|
export { ComponentPropsReactContext, ComponentPropsContext, useComponentProps, } from './components/ComponentPropsContext';
|
|
14
15
|
export { Link } from './components/Link';
|
|
@@ -18,8 +19,6 @@ export { NextImage } from './components/NextImage';
|
|
|
18
19
|
import * as FEaaSWrapper from './components/FEaaSWrapper';
|
|
19
20
|
import * as BYOCWrapper from './components/BYOCWrapper';
|
|
20
21
|
export { FEaaSClientWrapper, FEaaSServerWrapper, BYOCClientWrapper, BYOCServerWrapper, } from '@sitecore-content-sdk/react';
|
|
21
|
-
// Preserving original FEaaSWrapper export name for backward compatibility
|
|
22
|
-
// TODO: remove in future major release
|
|
23
22
|
export { FEaaSWrapper };
|
|
24
23
|
export { BYOCWrapper };
|
|
25
|
-
export { Image, Text, DateField, FEaaSComponent, fetchFEaaSComponentServerProps, BYOCComponent, getDesignLibraryStylesheetLinks, File, DesignLibrary, DesignLibraryApp, DefaultEmptyFieldEditingComponentImage, DefaultEmptyFieldEditingComponentText, SitecoreProvider, SitecoreProviderReactContext, withSitecore, useSitecore, withEditorChromes, withPlaceholder, withDatasourceCheck, withFieldMetadata, withEmptyFieldEditingComponent, EditingScripts, Form, ClientEditingChromesUpdate, AppPlaceholder, } from '@sitecore-content-sdk/react';
|
|
24
|
+
export { Image, Text, DateField, FEaaSComponent, fetchFEaaSComponentServerProps, BYOCComponent, getDesignLibraryStylesheetLinks, File, DesignLibrary, DesignLibraryApp, DefaultEmptyFieldEditingComponentImage, DefaultEmptyFieldEditingComponentText, SitecoreProvider, SitecoreProviderReactContext, withSitecore, useSitecore, withEditorChromes, withAppPlaceholder, withPlaceholder, withDatasourceCheck, withFieldMetadata, withEmptyFieldEditingComponent, EditingScripts, Form, ClientEditingChromesUpdate, AppPlaceholder, renderEmptyPlaceholder, } from '@sitecore-content-sdk/react';
|
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
export { debug } from '@sitecore-content-sdk/core';
|
|
2
|
-
export { MiddlewareBase, Middleware, defineMiddleware } from './middleware';
|
|
3
|
-
export { RedirectsMiddleware } from './redirects-middleware';
|
|
4
|
-
export { PersonalizeMiddleware } from './personalize-middleware';
|
|
5
|
-
export { MultisiteMiddleware } from './multisite-middleware';
|
|
6
|
-
export { AppRouterMultisiteMiddleware } from './app-router-multisite-middleware';
|
|
7
1
|
export { SitemapMiddleware } from './sitemap-middleware';
|
|
8
2
|
export { RobotsMiddleware } from './robots-middleware';
|
|
9
|
-
export { LocaleMiddleware } from './locale-middleware';
|
|
10
|
-
export { PersonalizeService, } from '@sitecore-content-sdk/core/personalize';
|
|
11
|
-
export { RedirectsService, REDIRECT_TYPE_301, REDIRECT_TYPE_302, REDIRECT_TYPE_SERVER_TRANSFER, } from '@sitecore-content-sdk/core/site';
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MultisiteProxy } from './multisite-proxy';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Proxy/handler for enabling multisite support in the Next.js App Router.
|
|
4
4
|
* @public
|
|
5
5
|
*/
|
|
6
|
-
export class
|
|
6
|
+
export class AppRouterMultisiteProxy extends MultisiteProxy {
|
|
7
7
|
/**
|
|
8
8
|
* Warns when multisite is disabled in App Router.
|
|
9
|
-
* The
|
|
9
|
+
* The proxy will still run to prevent routing errors.
|
|
10
10
|
* @param {NextResponse} _res response (unused, kept for method signature compatibility)
|
|
11
11
|
*/
|
|
12
12
|
// eslint-disable-next-line no-unused-vars
|
|
13
13
|
shouldWarnWhenDisabled(_res) {
|
|
14
|
-
console.warn('⚠️ Warning: Multisite is disabled in App Router configuration, but the
|
|
14
|
+
console.warn('⚠️ Warning: Multisite is disabled in App Router configuration, but the proxy will continue running. ' +
|
|
15
15
|
'Disabling multisite in App Router would cause 404 errors for regular page requests because the route structure requires the [site] segment. ' +
|
|
16
16
|
'Preview/Editing modes will still work. ' +
|
|
17
17
|
'For single-site setups, keep multisite enabled and configure only one site.');
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* In App Router, we cannot skip the
|
|
20
|
+
* In App Router, we cannot skip the proxy even if enabled is false,
|
|
21
21
|
* because the route structure requires the [site] segment.
|
|
22
22
|
* @returns {boolean} always returns false (never skip) for App Router
|
|
23
23
|
*/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { ProxyBase, ProxyHandler, defineProxy } from './proxy';
|
|
2
|
+
export { RedirectsProxy } from './redirects-proxy';
|
|
3
|
+
export { PersonalizeProxy } from './personalize-proxy';
|
|
4
|
+
export { MultisiteProxy } from './multisite-proxy';
|
|
5
|
+
export { AppRouterMultisiteProxy } from './app-router-multisite-proxy';
|
|
6
|
+
export { LocaleProxy } from './locale-proxy';
|
|
7
|
+
export { PersonalizeService, } from '@sitecore-content-sdk/content/personalize';
|
|
8
|
+
export { RedirectsService, REDIRECT_TYPE_301, REDIRECT_TYPE_302, REDIRECT_TYPE_SERVER_TRANSFER, } from '@sitecore-content-sdk/content/site';
|
|
9
|
+
export { default as debug } from '../debug';
|
|
@@ -8,18 +8,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
11
|
+
import { getLocaleRewrite } from '@sitecore-content-sdk/content/i18n';
|
|
12
|
+
import { ProxyBase, LOCALE_HEADER_NAME } from './proxy';
|
|
13
|
+
import debug from '../debug';
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
* This
|
|
15
|
+
* Proxy/handler for handling locale-based routing in the Next.js App Router.
|
|
16
|
+
* This proxy is responsible for extracting the locale from the request path and rewriting it if necessary.
|
|
17
17
|
* It also sets the locale header in the response.
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
|
-
export class
|
|
20
|
+
export class LocaleProxy extends ProxyBase {
|
|
21
21
|
/**
|
|
22
|
-
* @param {
|
|
22
|
+
* @param {LocaleProxyConfig} config Locale proxy config
|
|
23
23
|
*/
|
|
24
24
|
constructor(config) {
|
|
25
25
|
super(config);
|
|
@@ -29,12 +29,12 @@ export class LocaleMiddleware extends MiddlewareBase {
|
|
|
29
29
|
const { pathname } = req.nextUrl;
|
|
30
30
|
const localeFromPath = this.getLocaleFromPath(pathname);
|
|
31
31
|
const locale = localeFromPath || this.getLanguage(req, res);
|
|
32
|
-
debug.locale('locale
|
|
32
|
+
debug.locale('locale proxy start: %o', {
|
|
33
33
|
pathname,
|
|
34
34
|
locale,
|
|
35
35
|
});
|
|
36
36
|
if (this.disabled(req, res)) {
|
|
37
|
-
debug.locale('skipped (locale
|
|
37
|
+
debug.locale('skipped (locale proxy is disabled)');
|
|
38
38
|
return res;
|
|
39
39
|
}
|
|
40
40
|
if (!localeFromPath) {
|
|
@@ -42,7 +42,7 @@ export class LocaleMiddleware extends MiddlewareBase {
|
|
|
42
42
|
const rewritePath = getLocaleRewrite(pathname, locale);
|
|
43
43
|
const response = this.rewrite(rewritePath, req, res);
|
|
44
44
|
this.setLocaleHeader(response, locale);
|
|
45
|
-
debug.locale('locale
|
|
45
|
+
debug.locale('locale proxy end, with rewrite: %o', {
|
|
46
46
|
pathname,
|
|
47
47
|
locale,
|
|
48
48
|
rewritePath,
|
|
@@ -50,14 +50,14 @@ export class LocaleMiddleware extends MiddlewareBase {
|
|
|
50
50
|
return response;
|
|
51
51
|
}
|
|
52
52
|
this.setLocaleHeader(res, locale);
|
|
53
|
-
debug.locale('locale
|
|
53
|
+
debug.locale('locale proxy end, no rewrite: %o', {
|
|
54
54
|
pathname,
|
|
55
55
|
locale,
|
|
56
56
|
});
|
|
57
57
|
return res;
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
60
|
-
console.log('Locale
|
|
60
|
+
console.log('Locale proxy failed:');
|
|
61
61
|
console.log(error);
|
|
62
62
|
return res;
|
|
63
63
|
}
|
|
@@ -8,17 +8,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
import { getSiteRewrite, SITE_KEY } from '@sitecore-content-sdk/
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
11
|
+
import { getSiteRewrite, SITE_KEY } from '@sitecore-content-sdk/content/site';
|
|
12
|
+
import { ProxyBase, REWRITE_HEADER_NAME } from './proxy';
|
|
13
|
+
import { PREVIEW_KEY } from '@sitecore-content-sdk/content/editing';
|
|
14
|
+
import debug from '../debug';
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Proxy / handler for multisite support
|
|
17
17
|
* @public
|
|
18
18
|
*/
|
|
19
|
-
export class
|
|
19
|
+
export class MultisiteProxy extends ProxyBase {
|
|
20
20
|
/**
|
|
21
|
-
* @param {
|
|
21
|
+
* @param {MultisiteProxyConfig} [config] Multisite proxy config
|
|
22
22
|
*/
|
|
23
23
|
constructor(config) {
|
|
24
24
|
super(config);
|
|
@@ -26,12 +26,12 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
26
26
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
27
27
|
var _a, _b, _c;
|
|
28
28
|
try {
|
|
29
|
-
// Path can be rewritten by previously executed
|
|
29
|
+
// Path can be rewritten by previously executed proxy
|
|
30
30
|
const pathname = (res === null || res === void 0 ? void 0 : res.headers.get(REWRITE_HEADER_NAME)) || req.nextUrl.pathname;
|
|
31
31
|
const language = this.getLanguage(req, res);
|
|
32
32
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
33
33
|
const startTimestamp = Date.now();
|
|
34
|
-
debug.multisite('multisite
|
|
34
|
+
debug.multisite('multisite proxy start: %o', {
|
|
35
35
|
pathname,
|
|
36
36
|
language,
|
|
37
37
|
hostname,
|
|
@@ -50,13 +50,13 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
50
50
|
if (!this.config.enabled) {
|
|
51
51
|
this.shouldWarnWhenDisabled(res);
|
|
52
52
|
if (this.shouldSkipWhenDisabled()) {
|
|
53
|
-
debug.multisite('skipped (multisite
|
|
53
|
+
debug.multisite('skipped (multisite proxy is disabled globally)');
|
|
54
54
|
return res;
|
|
55
55
|
}
|
|
56
56
|
// Continue execution if shouldSkipWhenDisabled returns false (App Router case)
|
|
57
57
|
}
|
|
58
58
|
if (this.disabled(req, res)) {
|
|
59
|
-
debug.multisite('skipped (multisite
|
|
59
|
+
debug.multisite('skipped (multisite proxy is disabled)');
|
|
60
60
|
return res;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -86,9 +86,9 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
86
86
|
httpOnly: true,
|
|
87
87
|
sameSite: 'none',
|
|
88
88
|
};
|
|
89
|
-
// Share site name with the following executed
|
|
89
|
+
// Share site name with the following executed proxies
|
|
90
90
|
response.cookies.set(SITE_KEY, siteName, defaultCookieAttributes);
|
|
91
|
-
debug.multisite('multisite
|
|
91
|
+
debug.multisite('multisite proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
92
92
|
rewritePath,
|
|
93
93
|
siteName,
|
|
94
94
|
headers: this.extractDebugHeaders(response.headers),
|
|
@@ -97,7 +97,7 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
97
97
|
return response;
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
100
|
-
console.log('Multisite
|
|
100
|
+
console.log('Multisite proxy failed:');
|
|
101
101
|
console.log(error);
|
|
102
102
|
return res;
|
|
103
103
|
}
|
|
@@ -116,9 +116,9 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
116
116
|
// Base implementation does nothing - subclasses can override to show warnings
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
|
-
* Determines if
|
|
119
|
+
* Determines if proxy should be skipped when multisite is disabled.
|
|
120
120
|
* Override in subclasses to provide router-specific behavior.
|
|
121
|
-
* @returns {boolean} true if
|
|
121
|
+
* @returns {boolean} true if proxy should be skipped when disabled
|
|
122
122
|
*/
|
|
123
123
|
shouldSkipWhenDisabled() {
|
|
124
124
|
return true; // Base class skips when disabled
|
|
@@ -7,18 +7,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { PersonalizeService, getPersonalizedRewrite, CdpHelper, DEFAULT_VARIANT, } from '@sitecore-content-sdk/
|
|
11
|
-
import {
|
|
12
|
-
import { MiddlewareBase, REWRITE_HEADER_NAME } from './middleware';
|
|
10
|
+
import { PersonalizeService, getPersonalizedRewrite, CdpHelper, DEFAULT_VARIANT, } from '@sitecore-content-sdk/content/personalize';
|
|
11
|
+
import { ProxyBase, REWRITE_HEADER_NAME } from './proxy';
|
|
13
12
|
import { CloudSDK } from '@sitecore-cloudsdk/core/server';
|
|
14
13
|
import { personalize } from '@sitecore-cloudsdk/personalize/server';
|
|
14
|
+
import debug from '../debug';
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Proxy / handler to support Sitecore Personalize
|
|
17
17
|
* @public
|
|
18
18
|
*/
|
|
19
|
-
export class
|
|
19
|
+
export class PersonalizeProxy extends ProxyBase {
|
|
20
20
|
/**
|
|
21
|
-
* @param {
|
|
21
|
+
* @param {PersonalizeProxyConfig} [config] Personalize proxy config
|
|
22
22
|
*/
|
|
23
23
|
constructor(config) {
|
|
24
24
|
var _a;
|
|
@@ -26,7 +26,7 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
26
26
|
this.config = config;
|
|
27
27
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
28
28
|
if (!this.config.enabled) {
|
|
29
|
-
debug.personalize('skipped (personalize
|
|
29
|
+
debug.personalize('skipped (personalize proxy is disabled globally)');
|
|
30
30
|
return res;
|
|
31
31
|
}
|
|
32
32
|
try {
|
|
@@ -38,11 +38,11 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
38
38
|
const geo = this.config.extractGeoDataCb
|
|
39
39
|
? yield this.config.extractGeoDataCb(req)
|
|
40
40
|
: undefined;
|
|
41
|
-
debug.personalize('personalize
|
|
41
|
+
debug.personalize('personalize proxy start: %o', Object.assign(Object.assign({ pathname,
|
|
42
42
|
language,
|
|
43
43
|
hostname }, (geo && { geo })), { headers: this.extractDebugHeaders(req.headers) }));
|
|
44
44
|
if (this.disabled(req, res)) {
|
|
45
|
-
debug.personalize('skipped (personalize
|
|
45
|
+
debug.personalize('skipped (personalize proxy is disabled)');
|
|
46
46
|
return res;
|
|
47
47
|
}
|
|
48
48
|
if (res.redirected || // Don't attempt to personalize a redirect
|
|
@@ -72,8 +72,8 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
72
72
|
// Personalized, but this is a prefetch request.
|
|
73
73
|
// In this case, don't execute a personalize request; otherwise, the metrics for component A/B experiments would be inaccurate.
|
|
74
74
|
// Disable preflight caching to force revalidation on client-side navigation (personalization WILL be influenced).
|
|
75
|
-
// Note the reason we don't move this any earlier in the
|
|
76
|
-
res.headers.set('x-
|
|
75
|
+
// Note the reason we don't move this any earlier in the proxy is that we would then be sacrificing performance for non-personalized pages.
|
|
76
|
+
res.headers.set('x-proxy-cache', 'no-cache');
|
|
77
77
|
res.headers.set('Cache-Control', 'no-store, must-revalidate');
|
|
78
78
|
return res;
|
|
79
79
|
}
|
|
@@ -102,29 +102,29 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
102
102
|
debug.personalize('skipped (no variant(s) identified)');
|
|
103
103
|
return res;
|
|
104
104
|
}
|
|
105
|
-
// Path can be rewritten by previously executed
|
|
105
|
+
// Path can be rewritten by previously executed proxy
|
|
106
106
|
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(REWRITE_HEADER_NAME)) || pathname;
|
|
107
107
|
// Rewrite to persononalized path
|
|
108
108
|
const rewritePath = getPersonalizedRewrite(basePath, identifiedVariantIds);
|
|
109
109
|
const response = this.rewrite(rewritePath, req, res);
|
|
110
110
|
// Disable preflight caching to force revalidation on client-side navigation (personalization MAY be influenced).
|
|
111
111
|
// See https://github.com/vercel/next.js/pull/32767
|
|
112
|
-
response.headers.set('x-
|
|
113
|
-
debug.personalize('personalize
|
|
112
|
+
response.headers.set('x-proxy-cache', 'no-cache');
|
|
113
|
+
debug.personalize('personalize proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
114
114
|
rewritePath,
|
|
115
115
|
headers: this.extractDebugHeaders(response.headers),
|
|
116
116
|
});
|
|
117
117
|
return response;
|
|
118
118
|
}
|
|
119
119
|
catch (error) {
|
|
120
|
-
console.log('Personalize
|
|
120
|
+
console.log('Personalize proxy failed:');
|
|
121
121
|
console.log(error);
|
|
122
122
|
return res;
|
|
123
123
|
}
|
|
124
124
|
});
|
|
125
125
|
// Validate edge config is present - personalize requires Edge platform
|
|
126
126
|
if (!this.config.contextId && !this.config.clientContextId) {
|
|
127
|
-
console.warn('[
|
|
127
|
+
console.warn('[PersonalizeProxy] Personalize proxy requires Edge configuration (contextId/clientContextId). ' +
|
|
128
128
|
'Personalize features will be disabled. This is expected in local container development.');
|
|
129
129
|
// Set to null to indicate service is disabled
|
|
130
130
|
this.personalizeService = null;
|
|
@@ -150,7 +150,7 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
disabled(req, res) {
|
|
153
|
-
// Check if API config is missing - if so, disable the
|
|
153
|
+
// Check if API config is missing - if so, disable the proxy
|
|
154
154
|
if (!this.personalizeService) {
|
|
155
155
|
debug.personalize('skipped (personalize service not configured - edge config required)');
|
|
156
156
|
return true;
|
|
@@ -7,23 +7,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { SITE_KEY, SiteResolver } from '@sitecore-content-sdk/
|
|
11
|
-
import { debug } from '@sitecore-content-sdk/core';
|
|
10
|
+
import { SITE_KEY, SiteResolver } from '@sitecore-content-sdk/content/site';
|
|
12
11
|
import { NextResponse } from 'next/server';
|
|
13
|
-
import { createGraphQLClientFactory, } from '@sitecore-content-sdk/
|
|
12
|
+
import { createGraphQLClientFactory, } from '@sitecore-content-sdk/content/client';
|
|
13
|
+
import debug from '../debug';
|
|
14
14
|
export const REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
15
15
|
export const LOCALE_HEADER_NAME = 'x-sc-locale';
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Proxy handler class to be extended by all proxy implementations
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
|
-
export class
|
|
20
|
+
export class ProxyHandler {
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Base
|
|
23
|
+
* Base proxy class with common methods
|
|
24
24
|
* @public
|
|
25
25
|
*/
|
|
26
|
-
export class
|
|
26
|
+
export class ProxyBase extends ProxyHandler {
|
|
27
27
|
constructor(config) {
|
|
28
28
|
super();
|
|
29
29
|
this.config = config;
|
|
@@ -60,14 +60,14 @@ export class MiddlewareBase extends Middleware {
|
|
|
60
60
|
const isKnownDevice = isMobile || isKnownPlatform;
|
|
61
61
|
const purpose = req.headers.get('purpose');
|
|
62
62
|
const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
|
|
63
|
-
const
|
|
63
|
+
const proxyPrefetch = req.headers.get('x-middleware-prefetch');
|
|
64
64
|
// Some real navigations on different devices may incorrectly include 'prefetch' headers.
|
|
65
65
|
// To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
|
|
66
|
-
if (isKnownDevice &&
|
|
66
|
+
if (isKnownDevice && proxyPrefetch === '1') {
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
69
|
// Otherwise, standard prefetch detection
|
|
70
|
-
return purpose === 'prefetch' || nextRouterPrefetch === '1' ||
|
|
70
|
+
return purpose === 'prefetch' || nextRouterPrefetch === '1' || proxyPrefetch === '1';
|
|
71
71
|
}
|
|
72
72
|
disabled(req, res) {
|
|
73
73
|
const { pathname } = req.nextUrl;
|
|
@@ -78,7 +78,7 @@ export class MiddlewareBase extends Middleware {
|
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
80
|
* Safely extract all headers for debug logging
|
|
81
|
-
* Necessary to avoid
|
|
81
|
+
* Necessary to avoid proxy issue https://github.com/vercel/next.js/issues/39765
|
|
82
82
|
* @param {Headers} incomingHeaders Incoming headers
|
|
83
83
|
* @returns Object with headers as key/value pairs
|
|
84
84
|
*/
|
|
@@ -102,7 +102,7 @@ export class MiddlewareBase extends Middleware {
|
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
104
|
* Extract language from locale header of the response
|
|
105
|
-
* set by
|
|
105
|
+
* set by LocaleProxy for app router application
|
|
106
106
|
* @param {NextResponse} res response
|
|
107
107
|
* @returns {string | undefined} language or undefined if not found
|
|
108
108
|
*/
|
|
@@ -156,8 +156,9 @@ export class MiddlewareBase extends Middleware {
|
|
|
156
156
|
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
157
157
|
const rewriteUrl = req.nextUrl.clone();
|
|
158
158
|
rewriteUrl.pathname = rewritePath;
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
// NextResponse.rewrite requires a string URL, not a NextURL object
|
|
160
|
+
const response = NextResponse.rewrite(rewriteUrl.href, res);
|
|
161
|
+
// Share rewrite path with following executed proxies
|
|
161
162
|
if (!skipHeader) {
|
|
162
163
|
response.headers.set(REWRITE_HEADER_NAME, rewritePath);
|
|
163
164
|
}
|
|
@@ -165,25 +166,24 @@ export class MiddlewareBase extends Middleware {
|
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
/**
|
|
168
|
-
* Define a
|
|
169
|
-
* @param {
|
|
169
|
+
* Define a proxy with a list of proxy handlers
|
|
170
|
+
* @param {ProxyHandler[]} proxies List of proxy handlers to execute
|
|
170
171
|
* @public
|
|
171
172
|
*/
|
|
172
|
-
export const
|
|
173
|
+
export const defineProxy = (...proxies) => {
|
|
173
174
|
return {
|
|
174
175
|
/**
|
|
175
|
-
* Execute all
|
|
176
|
+
* Execute all proxies
|
|
176
177
|
* @param {NextRequest} req request
|
|
177
|
-
* @param {NextFetchEvent} ev fetch event
|
|
178
178
|
* @param {NextResponse} [res] response
|
|
179
179
|
*/
|
|
180
|
-
exec: (req,
|
|
180
|
+
exec: (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
181
181
|
const response = res || NextResponse.next();
|
|
182
|
-
debug.common('
|
|
182
|
+
debug.common('proxy start');
|
|
183
183
|
const start = Date.now();
|
|
184
|
-
const
|
|
185
|
-
debug.common('
|
|
186
|
-
return
|
|
184
|
+
const proxyResponse = yield proxies.reduce((p, proxy) => p.then((res) => proxy.handle(req, res)), Promise.resolve(response));
|
|
185
|
+
debug.common('proxy end in %dms', Date.now() - start);
|
|
186
|
+
return proxyResponse;
|
|
187
187
|
}),
|
|
188
188
|
};
|
|
189
189
|
};
|