@sitecore-jss/sitecore-jss-nextjs 21.1.0-canary.7 → 21.1.0-canary.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/EditingComponentPlaceholder.js +12 -0
- package/dist/cjs/components/Link.js +2 -2
- package/dist/cjs/editing/editing-data-cache.js +15 -10
- package/dist/cjs/editing/editing-data-middleware.js +2 -2
- package/dist/cjs/editing/editing-data-service.js +2 -2
- package/dist/cjs/editing/editing-render-middleware.js +9 -1
- package/dist/cjs/index.js +16 -6
- package/dist/cjs/middleware/index.js +5 -1
- package/dist/cjs/middleware/multisite-middleware.js +102 -0
- package/dist/cjs/middleware/personalize-middleware.js +20 -4
- package/dist/cjs/middleware/redirects-middleware.js +75 -42
- package/dist/cjs/monitoring/healthcheck-middleware.js +30 -0
- package/dist/cjs/monitoring/index.js +5 -0
- package/dist/cjs/services/graphql-sitemap-service.js +42 -19
- package/dist/esm/components/EditingComponentPlaceholder.js +5 -0
- package/dist/esm/components/Link.js +2 -2
- package/dist/esm/editing/editing-data-cache.js +15 -10
- package/dist/esm/editing/editing-data-middleware.js +2 -2
- package/dist/esm/editing/editing-data-service.js +2 -2
- package/dist/esm/editing/editing-render-middleware.js +9 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/middleware/index.js +2 -0
- package/dist/esm/middleware/multisite-middleware.js +98 -0
- package/dist/esm/middleware/personalize-middleware.js +20 -4
- package/dist/esm/middleware/redirects-middleware.js +75 -42
- package/dist/esm/monitoring/healthcheck-middleware.js +26 -0
- package/dist/esm/monitoring/index.js +1 -0
- package/dist/esm/services/graphql-sitemap-service.js +41 -18
- package/monitoring.d.ts +1 -0
- package/monitoring.js +1 -0
- package/package.json +16 -15
- package/types/components/EditingComponentPlaceholder.d.ts +4 -0
- package/types/editing/editing-data-cache.d.ts +4 -4
- package/types/index.d.ts +3 -3
- package/types/middleware/index.d.ts +2 -0
- package/types/middleware/multisite-middleware.d.ts +42 -0
- package/types/middleware/personalize-middleware.d.ts +11 -0
- package/types/middleware/redirects-middleware.d.ts +32 -3
- package/types/monitoring/healthcheck-middleware.d.ts +12 -0
- package/types/monitoring/index.d.ts +1 -0
- package/types/services/graphql-sitemap-service.d.ts +8 -3
|
@@ -10,8 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { GraphQLRequestClient } from '@sitecore-jss/sitecore-jss/graphql';
|
|
11
11
|
import { debug } from '@sitecore-jss/sitecore-jss';
|
|
12
12
|
import { getPersonalizedRewrite } from '@sitecore-jss/sitecore-jss/personalize';
|
|
13
|
+
import { getSiteRewrite } from '@sitecore-jss/sitecore-jss/site';
|
|
13
14
|
/** @private */
|
|
14
15
|
export const languageError = 'The list of languages cannot be empty';
|
|
16
|
+
export const sitesError = 'The list of sites cannot be empty';
|
|
15
17
|
/**
|
|
16
18
|
* @param {string} siteName to inject into error text
|
|
17
19
|
* @private
|
|
@@ -49,7 +51,7 @@ query ${usesPersonalize ? 'PersonalizeSitemapQuery' : 'DefaultSitemapQuery'}(
|
|
|
49
51
|
hasNext
|
|
50
52
|
}
|
|
51
53
|
results {
|
|
52
|
-
path: routePath
|
|
54
|
+
path: routePath
|
|
53
55
|
${usesPersonalize
|
|
54
56
|
? `
|
|
55
57
|
route {
|
|
@@ -62,7 +64,7 @@ query ${usesPersonalize ? 'PersonalizeSitemapQuery' : 'DefaultSitemapQuery'}(
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
}
|
|
67
|
+
}
|
|
66
68
|
`;
|
|
67
69
|
/**
|
|
68
70
|
* Service that fetches the list of site pages using Sitecore's GraphQL API.
|
|
@@ -128,43 +130,64 @@ export class GraphQLSitemapService {
|
|
|
128
130
|
*/
|
|
129
131
|
fetchSitemap(languages, formatStaticPath) {
|
|
130
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
const paths = new Array();
|
|
131
134
|
if (!languages.length) {
|
|
132
135
|
throw new RangeError(languageError);
|
|
133
136
|
}
|
|
134
|
-
//
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
// Get all sites
|
|
138
|
+
const sites = this.options.sites;
|
|
139
|
+
if (!sites || !sites.length) {
|
|
140
|
+
throw new RangeError(sitesError);
|
|
141
|
+
}
|
|
142
|
+
// Fetch paths for each site
|
|
143
|
+
for (let i = 0; i < sites.length; i++) {
|
|
144
|
+
const siteName = sites[i];
|
|
145
|
+
const multiSiteName = sites.length > 1 ? siteName : undefined;
|
|
146
|
+
// Fetch paths using all locales
|
|
147
|
+
yield Promise.all(languages.map((language) => __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
if (language === '') {
|
|
149
|
+
throw new RangeError(languageEmptyError);
|
|
150
|
+
}
|
|
151
|
+
debug.sitemap('fetching sitemap data for %s %s', language, siteName);
|
|
152
|
+
const results = yield this.fetchLanguageSitePaths(language, siteName);
|
|
153
|
+
const transformedPaths = yield this.transformLanguageSitePaths(results, formatStaticPath, language, multiSiteName);
|
|
154
|
+
paths.push(...transformedPaths);
|
|
155
|
+
})));
|
|
156
|
+
}
|
|
143
157
|
return [].concat(...paths);
|
|
144
158
|
});
|
|
145
159
|
}
|
|
146
|
-
transformLanguageSitePaths(sitePaths, formatStaticPath, language) {
|
|
160
|
+
transformLanguageSitePaths(sitePaths, formatStaticPath, language, multiSiteName) {
|
|
147
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
162
|
const formatPath = (path) => formatStaticPath(path.replace(/^\/|\/$/g, '').split('/'), language);
|
|
149
163
|
const aggregatedPaths = [];
|
|
150
164
|
sitePaths.forEach((item) => {
|
|
151
|
-
var _a, _b, _c, _d;
|
|
165
|
+
var _a, _b, _c, _d, _e, _f;
|
|
152
166
|
if (!item)
|
|
153
167
|
return;
|
|
154
|
-
|
|
168
|
+
if (!multiSiteName) {
|
|
169
|
+
aggregatedPaths.push(formatPath(item.path));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
aggregatedPaths.push(formatPath(getSiteRewrite(item.path, { siteName: multiSiteName })));
|
|
173
|
+
}
|
|
155
174
|
// check for type safety's sake - personalize may be empty depending on query type
|
|
156
175
|
if ((_b = (_a = item.route) === null || _a === void 0 ? void 0 : _a.personalization) === null || _b === void 0 ? void 0 : _b.variantIds.length) {
|
|
157
|
-
|
|
176
|
+
multiSiteName
|
|
177
|
+
? aggregatedPaths.push(...(_d = (_c = item.route) === null || _c === void 0 ? void 0 : _c.personalization) === null || _d === void 0 ? void 0 : _d.variantIds.map((varId) => formatPath(getPersonalizedRewrite(getSiteRewrite(item.path, { siteName: multiSiteName }), {
|
|
178
|
+
variantId: varId,
|
|
179
|
+
}))))
|
|
180
|
+
: aggregatedPaths.push(...(_f = (_e = item.route) === null || _e === void 0 ? void 0 : _e.personalization) === null || _f === void 0 ? void 0 : _f.variantIds.map((varId) => formatPath(getPersonalizedRewrite(item.path, { variantId: varId }))));
|
|
158
181
|
}
|
|
159
182
|
});
|
|
160
183
|
return aggregatedPaths;
|
|
161
184
|
});
|
|
162
185
|
}
|
|
163
|
-
fetchLanguageSitePaths(language) {
|
|
186
|
+
fetchLanguageSitePaths(language, siteName) {
|
|
164
187
|
var _a, _b, _c, _d;
|
|
165
188
|
return __awaiter(this, void 0, void 0, function* () {
|
|
166
189
|
const args = {
|
|
167
|
-
siteName:
|
|
190
|
+
siteName: siteName,
|
|
168
191
|
language: language,
|
|
169
192
|
pageSize: this.options.pageSize,
|
|
170
193
|
includedPaths: this.options.includedPaths,
|
|
@@ -176,7 +199,7 @@ export class GraphQLSitemapService {
|
|
|
176
199
|
while (hasNext) {
|
|
177
200
|
const fetchResponse = yield this.graphQLClient.request(this.query, Object.assign(Object.assign({}, args), { after }));
|
|
178
201
|
if (!((_a = fetchResponse === null || fetchResponse === void 0 ? void 0 : fetchResponse.site) === null || _a === void 0 ? void 0 : _a.siteInfo)) {
|
|
179
|
-
throw new RangeError(getSiteEmptyError(
|
|
202
|
+
throw new RangeError(getSiteEmptyError(siteName));
|
|
180
203
|
}
|
|
181
204
|
else {
|
|
182
205
|
results = results.concat((_b = fetchResponse.site.siteInfo.routes) === null || _b === void 0 ? void 0 : _b.results);
|
package/monitoring.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types/monitoring/index';
|
package/monitoring.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/cjs/monitoring/index');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sitecore-jss/sitecore-jss-nextjs",
|
|
3
|
-
"version": "21.1.0-canary.
|
|
3
|
+
"version": "21.1.0-canary.71",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"test": "mocha --require ./test/setup.js \"./src/**/*.test.ts\" \"./src/**/*.test.tsx\" --exit",
|
|
12
12
|
"prepublishOnly": "npm run build",
|
|
13
13
|
"coverage": "nyc npm test",
|
|
14
|
-
"generate-docs": "npx typedoc --plugin typedoc-plugin-markdown --readme none --out ../../ref-docs/sitecore-jss-nextjs --entryPoints src/index.ts --entryPoints src/editing/index.ts --entryPoints src/middleware/index.ts --githubPages false"
|
|
14
|
+
"generate-docs": "npx typedoc --plugin typedoc-plugin-markdown --readme none --out ../../ref-docs/sitecore-jss-nextjs --entryPoints src/index.ts --entryPoints src/monitoring/index.ts --entryPoints src/editing/index.ts --entryPoints src/middleware/index.ts --githubPages false"
|
|
15
15
|
},
|
|
16
16
|
"engines": {
|
|
17
17
|
"node": ">=12",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"@types/enzyme": "^3.10.12",
|
|
37
37
|
"@types/mocha": "^9.0.0",
|
|
38
38
|
"@types/node": "17.0.40",
|
|
39
|
-
"@types/prop-types": "^15.7.
|
|
40
|
-
"@types/react": "^18.0.
|
|
39
|
+
"@types/prop-types": "^15.7.5",
|
|
40
|
+
"@types/react": "^18.0.25",
|
|
41
41
|
"@types/react-dom": "^18.0.5",
|
|
42
42
|
"@types/sinon": "^7.5.0",
|
|
43
43
|
"@types/sinon-chai": "^3.2.5",
|
|
@@ -54,32 +54,33 @@
|
|
|
54
54
|
"eslint-plugin-react": "^7.21.5",
|
|
55
55
|
"jsdom": "^15.1.1",
|
|
56
56
|
"mocha": "^9.1.3",
|
|
57
|
-
"next": "^12.
|
|
57
|
+
"next": "^12.3.1",
|
|
58
58
|
"nock": "^13.0.5",
|
|
59
59
|
"nyc": "^15.1.0",
|
|
60
|
-
"react": "^18.
|
|
61
|
-
"react-dom": "^18.
|
|
60
|
+
"react": "^18.2.0",
|
|
61
|
+
"react-dom": "^18.2.0",
|
|
62
62
|
"sinon": "^7.5.0",
|
|
63
63
|
"sinon-chai": "^3.7.0",
|
|
64
64
|
"ts-node": "^9.0.0",
|
|
65
65
|
"typescript": "~4.3.5"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
|
-
"next": "^12.
|
|
69
|
-
"react": "^18.
|
|
70
|
-
"react-dom": "^18.
|
|
68
|
+
"next": "^12.3.1",
|
|
69
|
+
"react": "^18.2.0",
|
|
70
|
+
"react-dom": "^18.2.0"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@sitecore-jss/sitecore-jss": "^21.1.0-canary.
|
|
74
|
-
"@sitecore-jss/sitecore-jss-dev-tools": "^21.1.0-canary.
|
|
75
|
-
"@sitecore-jss/sitecore-jss-react": "^21.1.0-canary.
|
|
76
|
-
"
|
|
73
|
+
"@sitecore-jss/sitecore-jss": "^21.1.0-canary.71",
|
|
74
|
+
"@sitecore-jss/sitecore-jss-dev-tools": "^21.1.0-canary.71",
|
|
75
|
+
"@sitecore-jss/sitecore-jss-react": "^21.1.0-canary.71",
|
|
76
|
+
"node-html-parser": "^6.0.0",
|
|
77
|
+
"prop-types": "^15.8.1",
|
|
77
78
|
"regex-parser": "^2.2.11",
|
|
78
79
|
"sync-disk-cache": "^2.1.0"
|
|
79
80
|
},
|
|
80
81
|
"description": "",
|
|
81
82
|
"types": "types/index.d.ts",
|
|
82
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "61fb3846e35e869452e1143a0b0e092478670d07",
|
|
83
84
|
"files": [
|
|
84
85
|
"dist",
|
|
85
86
|
"types",
|
|
@@ -3,8 +3,8 @@ import { EditingData } from './editing-data';
|
|
|
3
3
|
* Defines an editing data cache implementation
|
|
4
4
|
*/
|
|
5
5
|
export interface EditingDataCache {
|
|
6
|
-
set(key: string, editingData: EditingData): void
|
|
7
|
-
get(key: string): EditingData | undefined
|
|
6
|
+
set(key: string, editingData: EditingData): Promise<void>;
|
|
7
|
+
get(key: string): Promise<EditingData | undefined>;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* A disk-based editing data cache implementation (required for hosting on Vercel via Serverless Functions)
|
|
@@ -16,8 +16,8 @@ export declare class EditingDataDiskCache implements EditingDataCache {
|
|
|
16
16
|
* @param {string} [tmpDir] Temp directory to use. Default is the OS temp directory (os.tmpdir()).
|
|
17
17
|
*/
|
|
18
18
|
constructor(tmpDir?: string);
|
|
19
|
-
set(key: string, editingData: EditingData): void
|
|
20
|
-
get(key: string): EditingData | undefined
|
|
19
|
+
set(key: string, editingData: EditingData): Promise<void>;
|
|
20
|
+
get(key: string): Promise<EditingData | undefined>;
|
|
21
21
|
}
|
|
22
22
|
/** EditingDataDiskCache singleton */
|
|
23
23
|
export declare const editingDataDiskCache: EditingDataDiskCache;
|
package/types/index.d.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
export { constants, HttpDataFetcher, HttpResponse, AxiosDataFetcher, AxiosDataFetcherConfig, NativeDataFetcher, NativeDataFetcherConfig, enableDebug, } from '@sitecore-jss/sitecore-jss';
|
|
2
2
|
export { isEditorActive, resetEditorChromes, resolveUrl } from '@sitecore-jss/sitecore-jss/utils';
|
|
3
|
-
export { LayoutService, LayoutServiceData, LayoutServicePageState, LayoutServiceContext, LayoutServiceContextData, GraphQLLayoutService, GraphQLLayoutServiceConfig, RestLayoutService, RestLayoutServiceConfig, PlaceholderData, PlaceholdersData, RouteData, Field, Item, HtmlElementRendering, getChildPlaceholder, getFieldValue, ComponentRendering, ComponentFields, ComponentParams, } from '@sitecore-jss/sitecore-jss/layout';
|
|
3
|
+
export { LayoutService, LayoutServiceData, LayoutServicePageState, LayoutServiceContext, LayoutServiceContextData, GraphQLLayoutService, GraphQLLayoutServiceConfig, RestLayoutService, RestLayoutServiceConfig, PlaceholderData, PlaceholdersData, RouteData, Field, Item, HtmlElementRendering, getChildPlaceholder, getFieldValue, ComponentRendering, ComponentFields, ComponentParams, RenderingType, EDITING_COMPONENT_PLACEHOLDER, EDITING_COMPONENT_ID, } from '@sitecore-jss/sitecore-jss/layout';
|
|
4
4
|
export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
5
5
|
export { trackingApi, TrackingRequestOptions, CampaignInstance, GoalInstance, OutcomeInstance, EventInstance, PageViewInstance, } from '@sitecore-jss/sitecore-jss/tracking';
|
|
6
6
|
export { DictionaryPhrases, DictionaryService, GraphQLDictionaryService, GraphQLDictionaryServiceConfig, RestDictionaryService, RestDictionaryServiceConfig, } from '@sitecore-jss/sitecore-jss/i18n';
|
|
7
7
|
export { personalizeLayout, getPersonalizedRewrite, getPersonalizedRewriteData, normalizePersonalizedRewrite, CdpHelper, } from '@sitecore-jss/sitecore-jss/personalize';
|
|
8
|
-
export { RobotsQueryResult, GraphQLRobotsService, GraphQLRobotsServiceConfig, } from '@sitecore-jss/sitecore-jss/site';
|
|
9
8
|
export { GraphQLRequestClient } from '@sitecore-jss/sitecore-jss';
|
|
10
9
|
export { ComponentPropsCollection, GetStaticComponentProps, GetServerSideComponentProps, } from './sharedTypes/component-props';
|
|
11
10
|
export { ComponentModule } from './sharedTypes/component-module';
|
|
12
11
|
export { ComponentPropsService } from './services/component-props-service';
|
|
13
12
|
export { DisconnectedSitemapService } from './services/disconnected-sitemap-service';
|
|
14
13
|
export { GraphQLSitemapService, GraphQLSitemapServiceConfig, } from './services/graphql-sitemap-service';
|
|
15
|
-
export { GraphQLSitemapXmlService, GraphQLSitemapXmlServiceConfig, GraphQLErrorPagesService, GraphQLErrorPagesServiceConfig, ErrorPages, } from '@sitecore-jss/sitecore-jss/site';
|
|
14
|
+
export { GraphQLSitemapXmlService, GraphQLSitemapXmlServiceConfig, GraphQLErrorPagesService, GraphQLErrorPagesServiceConfig, RobotsQueryResult, GraphQLRobotsService, GraphQLRobotsServiceConfig, ErrorPages, SiteInfo, SiteResolver, GraphQLSiteInfoService, GraphQLSiteInfoServiceConfig, getSiteRewrite, getSiteRewriteData, normalizeSiteRewrite, } from '@sitecore-jss/sitecore-jss/site';
|
|
16
15
|
export { StaticPath } from './services/graphql-sitemap-service';
|
|
17
16
|
export { ComponentPropsReactContext, ComponentPropsContextProps, ComponentPropsContext, useComponentProps, } from './components/ComponentPropsContext';
|
|
18
17
|
export { handleEditorFastRefresh, getPublicUrl } from './utils';
|
|
19
18
|
export { Link, LinkProps } from './components/Link';
|
|
20
19
|
export { RichText, RichTextProps } from './components/RichText';
|
|
21
20
|
export { Placeholder } from './components/Placeholder';
|
|
21
|
+
export { EditingComponentPlaceholder } from './components/EditingComponentPlaceholder';
|
|
22
22
|
export { NextImage } from './components/NextImage';
|
|
23
23
|
export { ComponentFactory, Image, ImageField, ImageFieldValue, ImageProps, LinkField, LinkFieldValue, Text, TextField, DateField, File, FileField, RichTextField, VisitorIdentification, PlaceholderComponentProps, SitecoreContext, SitecoreContextState, SitecoreContextValue, SitecoreContextReactContext, withSitecoreContext, useSitecoreContext, withEditorChromes, withPlaceholder, withDatasourceCheck, ImageSizeParameters, ComponentConsumerProps, WithSitecoreContextOptions, WithSitecoreContextProps, } from '@sitecore-jss/sitecore-jss-react';
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { RedirectsMiddleware, RedirectsMiddlewareConfig } from './redirects-middleware';
|
|
2
2
|
export { PersonalizeMiddleware, PersonalizeMiddlewareConfig } from './personalize-middleware';
|
|
3
|
+
export { MultisiteMiddleware, MultisiteMiddlewareConfig } from './multisite-middleware';
|
|
4
|
+
export { SiteResolver, SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { NextResponse, NextRequest } from 'next/server';
|
|
2
|
+
import { SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
3
|
+
export declare type MultisiteMiddlewareConfig = {
|
|
4
|
+
/**
|
|
5
|
+
* Function used to determine if route should be excluded during execution.
|
|
6
|
+
* By default, files (pathname.includes('.')), Next.js API routes (pathname.startsWith('/api/')), and Sitecore API routes (pathname.startsWith('/sitecore/')) are ignored.
|
|
7
|
+
* This is an important performance consideration since Next.js Edge middleware runs on every request.
|
|
8
|
+
* @param {string} pathname The pathname
|
|
9
|
+
* @returns {boolean} Whether to exclude the route
|
|
10
|
+
*/
|
|
11
|
+
excludeRoute?: (pathname: string) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* function used to resolve site for given hostname
|
|
14
|
+
*/
|
|
15
|
+
getSite: (hostname: string) => SiteInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Fallback hostname in case `host` header is not present
|
|
18
|
+
* @default localhost
|
|
19
|
+
*/
|
|
20
|
+
defaultHostname?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Middleware / handler for multisite support
|
|
24
|
+
*/
|
|
25
|
+
export declare class MultisiteMiddleware {
|
|
26
|
+
protected config: MultisiteMiddlewareConfig;
|
|
27
|
+
private defaultHostname;
|
|
28
|
+
/**
|
|
29
|
+
* @param {MultisiteMiddlewareConfig} [config] Multisite middleware config
|
|
30
|
+
*/
|
|
31
|
+
constructor(config: MultisiteMiddlewareConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Gets the Next.js middleware handler with error handling
|
|
34
|
+
* @returns middleware handler
|
|
35
|
+
*/
|
|
36
|
+
getHandler(): (req: NextRequest, res?: NextResponse) => Promise<NextResponse>;
|
|
37
|
+
protected excludeRoute(pathname: string): boolean;
|
|
38
|
+
protected extractDebugHeaders(incomingHeaders: Headers): {
|
|
39
|
+
[key: string]: string;
|
|
40
|
+
};
|
|
41
|
+
private handler;
|
|
42
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NextResponse, NextRequest } from 'next/server';
|
|
2
2
|
import { GraphQLPersonalizeServiceConfig, CdpServiceConfig, ExperienceParams } from '@sitecore-jss/sitecore-jss/personalize';
|
|
3
|
+
import { SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
3
4
|
export declare type PersonalizeMiddlewareConfig = {
|
|
4
5
|
/**
|
|
5
6
|
* Function used to determine if route should be excluded from personalization.
|
|
@@ -29,6 +30,15 @@ export declare type PersonalizeMiddlewareConfig = {
|
|
|
29
30
|
* @returns {boolean} false by default
|
|
30
31
|
*/
|
|
31
32
|
disabled?: (req?: NextRequest, res?: NextResponse) => boolean;
|
|
33
|
+
/**
|
|
34
|
+
* function used to resolve site for given hostname
|
|
35
|
+
*/
|
|
36
|
+
getSite: (hostname: string) => SiteInfo;
|
|
37
|
+
/**
|
|
38
|
+
* fallback hostname in case `host` header is not present
|
|
39
|
+
* @default localhost
|
|
40
|
+
*/
|
|
41
|
+
defaultHostname?: string;
|
|
32
42
|
};
|
|
33
43
|
/**
|
|
34
44
|
* Middleware / handler to support Sitecore Personalize
|
|
@@ -37,6 +47,7 @@ export declare class PersonalizeMiddleware {
|
|
|
37
47
|
protected config: PersonalizeMiddlewareConfig;
|
|
38
48
|
private personalizeService;
|
|
39
49
|
private cdpService;
|
|
50
|
+
private defaultHostname;
|
|
40
51
|
/**
|
|
41
52
|
* @param {PersonalizeMiddlewareConfig} [config] Personalize middleware config
|
|
42
53
|
*/
|
|
@@ -1,18 +1,44 @@
|
|
|
1
1
|
import { NextResponse, NextRequest } from 'next/server';
|
|
2
|
-
import { GraphQLRedirectsServiceConfig } from '@sitecore-jss/sitecore-jss/site';
|
|
2
|
+
import { GraphQLRedirectsServiceConfig, SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
3
3
|
/**
|
|
4
4
|
* extended RedirectsMiddlewareConfig config type for RedirectsMiddleware
|
|
5
5
|
*/
|
|
6
6
|
export declare type RedirectsMiddlewareConfig = Omit<GraphQLRedirectsServiceConfig, 'fetch'> & {
|
|
7
7
|
locales: string[];
|
|
8
|
+
/**
|
|
9
|
+
* Function used to determine if route should be excluded from RedirectsMiddleware.
|
|
10
|
+
* By default, files (pathname.includes('.')), Next.js API routes (pathname.startsWith('/api/')), and Sitecore API routes (pathname.startsWith('/sitecore/')) are ignored.
|
|
11
|
+
* This is an important performance consideration since Next.js Edge middleware runs on every request.
|
|
12
|
+
* @param {string} pathname The pathname
|
|
13
|
+
* @returns {boolean} Whether to exclude the route from RedirectsMiddleware
|
|
14
|
+
*/
|
|
15
|
+
excludeRoute?: (pathname: string) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* function, determines if middleware should be turned off, based on cookie, header, or other considerations
|
|
18
|
+
* @param {NextRequest} [req] optional: request object from middleware handler
|
|
19
|
+
* @param {NextResponse} [res] optional: response object from middleware handler
|
|
20
|
+
* @returns {boolean} false by default
|
|
21
|
+
*/
|
|
22
|
+
disabled?: (req?: NextRequest, res?: NextResponse) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* function used to resolve site for given hostname
|
|
25
|
+
*/
|
|
26
|
+
getSite: (hostname: string) => SiteInfo;
|
|
27
|
+
/**
|
|
28
|
+
* fallback hostname in case `host` header is not present
|
|
29
|
+
* @default localhost
|
|
30
|
+
*/
|
|
31
|
+
defaultHostname?: string;
|
|
8
32
|
};
|
|
9
33
|
/**
|
|
10
34
|
* Middleware / handler fetches all redirects from Sitecore instance by grapqhl service
|
|
11
35
|
* compares with current url and redirects to target url
|
|
12
36
|
*/
|
|
13
37
|
export declare class RedirectsMiddleware {
|
|
38
|
+
protected config: RedirectsMiddlewareConfig;
|
|
14
39
|
private redirectsService;
|
|
15
40
|
private locales;
|
|
41
|
+
private defaultHostname;
|
|
16
42
|
/**
|
|
17
43
|
* @param {RedirectsMiddlewareConfig} [config] redirects middleware config
|
|
18
44
|
*/
|
|
@@ -21,11 +47,14 @@ export declare class RedirectsMiddleware {
|
|
|
21
47
|
* Gets the Next.js API route handler
|
|
22
48
|
* @returns route handler
|
|
23
49
|
*/
|
|
24
|
-
getHandler(): (req: NextRequest) => Promise<NextResponse>;
|
|
50
|
+
getHandler(): (req: NextRequest, res?: NextResponse) => Promise<NextResponse>;
|
|
51
|
+
protected excludeRoute(pathname: string): boolean;
|
|
52
|
+
protected getHostname(req: NextRequest): string;
|
|
25
53
|
private handler;
|
|
26
54
|
/**
|
|
27
55
|
* Method returns RedirectInfo when matches
|
|
28
|
-
* @param {NextRequest} req
|
|
56
|
+
* @param {NextRequest} req request
|
|
57
|
+
* @param {string} siteName site name
|
|
29
58
|
* @returns Promise<RedirectInfo | undefined>
|
|
30
59
|
* @private
|
|
31
60
|
*/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NextApiResponse, NextApiRequest } from 'next';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware / handler for use in healthcheck Next.js API route (e.g. '/api/healthz').
|
|
4
|
+
*/
|
|
5
|
+
export declare class HealthcheckMiddleware {
|
|
6
|
+
/**
|
|
7
|
+
* Gets the Next.js API route handler
|
|
8
|
+
* @returns route handler
|
|
9
|
+
*/
|
|
10
|
+
getHandler(): (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
|
|
11
|
+
private handler;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { HealthcheckMiddleware } from './healthcheck-middleware';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GraphQLClient, PageInfo } from '@sitecore-jss/sitecore-jss/graphql';
|
|
2
2
|
/** @private */
|
|
3
3
|
export declare const languageError = "The list of languages cannot be empty";
|
|
4
|
+
export declare const sitesError = "The list of sites cannot be empty";
|
|
4
5
|
/**
|
|
5
6
|
* @param {string} siteName to inject into error text
|
|
6
7
|
* @private
|
|
@@ -64,7 +65,7 @@ export declare type RouteListQueryResult = {
|
|
|
64
65
|
/**
|
|
65
66
|
* Configuration options for @see GraphQLSitemapService instances
|
|
66
67
|
*/
|
|
67
|
-
export interface GraphQLSitemapServiceConfig extends Omit<SiteRouteQueryVariables, 'language'> {
|
|
68
|
+
export interface GraphQLSitemapServiceConfig extends Omit<SiteRouteQueryVariables, 'language' | 'siteName'> {
|
|
68
69
|
/**
|
|
69
70
|
* Your Graphql endpoint
|
|
70
71
|
*/
|
|
@@ -73,6 +74,10 @@ export interface GraphQLSitemapServiceConfig extends Omit<SiteRouteQueryVariable
|
|
|
73
74
|
* The API key to use for authentication.
|
|
74
75
|
*/
|
|
75
76
|
apiKey: string;
|
|
77
|
+
/**
|
|
78
|
+
* Names of the configured sites
|
|
79
|
+
*/
|
|
80
|
+
sites: string[];
|
|
76
81
|
/**
|
|
77
82
|
* A flag for whether to include personalized routes in service output - only works on XM Cloud
|
|
78
83
|
* turned off by default
|
|
@@ -129,8 +134,8 @@ export declare class GraphQLSitemapService {
|
|
|
129
134
|
* @throws {RangeError} if the any of the languages is an empty string.
|
|
130
135
|
*/
|
|
131
136
|
protected fetchSitemap(languages: string[], formatStaticPath: (path: string[], language: string) => StaticPath): Promise<StaticPath[]>;
|
|
132
|
-
protected transformLanguageSitePaths(sitePaths: RouteListQueryResult[], formatStaticPath: (path: string[], language: string) => StaticPath, language: string): Promise<StaticPath[]>;
|
|
133
|
-
protected fetchLanguageSitePaths(language: string): Promise<RouteListQueryResult[]>;
|
|
137
|
+
protected transformLanguageSitePaths(sitePaths: RouteListQueryResult[], formatStaticPath: (path: string[], language: string) => StaticPath, language: string, multiSiteName?: string): Promise<StaticPath[]>;
|
|
138
|
+
protected fetchLanguageSitePaths(language: string, siteName: string): Promise<RouteListQueryResult[]>;
|
|
134
139
|
/**
|
|
135
140
|
* Gets a GraphQL client that can make requests to the API. Uses graphql-request as the default
|
|
136
141
|
* library for fetching graphql data (@see GraphQLRequestClient). Override this method if you
|