@sitecore-jss/sitecore-jss-nextjs 21.1.0-canary.8 → 21.1.0-canary.80
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/ComponentPropsContext.js +7 -3
- package/dist/cjs/components/EditingComponentPlaceholder.js +12 -0
- package/dist/cjs/components/Link.js +8 -4
- package/dist/cjs/components/NextImage.js +1 -1
- package/dist/cjs/components/Placeholder.js +6 -2
- package/dist/cjs/components/RichText.js +8 -4
- package/dist/cjs/editing/editing-data-cache.js +15 -10
- package/dist/cjs/editing/editing-data-middleware.js +4 -4
- package/dist/cjs/editing/editing-data-service.js +3 -3
- package/dist/cjs/editing/editing-render-middleware.js +13 -4
- package/dist/cjs/index.js +16 -6
- package/dist/cjs/middleware/index.js +5 -1
- package/dist/cjs/middleware/multisite-middleware.js +104 -0
- package/dist/cjs/middleware/personalize-middleware.js +19 -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 +48 -25
- package/dist/cjs/utils.js +3 -3
- 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 +11 -2
- package/dist/esm/index.js +3 -3
- package/dist/esm/middleware/index.js +2 -0
- package/dist/esm/middleware/multisite-middleware.js +100 -0
- package/dist/esm/middleware/personalize-middleware.js +18 -3
- 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 +47 -24
- package/monitoring.d.ts +1 -0
- package/monitoring.js +1 -0
- package/package.json +34 -33
- package/types/components/ComponentPropsContext.d.ts +1 -1
- package/types/components/EditingComponentPlaceholder.d.ts +4 -0
- package/types/components/Link.d.ts +1 -1
- package/types/components/NextImage.d.ts +1 -1
- package/types/components/RichText.d.ts +1 -1
- package/types/editing/editing-data-cache.d.ts +4 -4
- package/types/editing/editing-data.d.ts +1 -1
- package/types/index.d.ts +4 -4
- package/types/middleware/index.d.ts +2 -0
- package/types/middleware/multisite-middleware.d.ts +46 -0
- package/types/middleware/personalize-middleware.d.ts +12 -1
- package/types/middleware/redirects-middleware.d.ts +33 -4
- package/types/monitoring/healthcheck-middleware.d.ts +12 -0
- package/types/monitoring/index.d.ts +1 -0
- package/types/services/component-props-service.d.ts +3 -3
- package/types/services/graphql-sitemap-service.d.ts +10 -5
- package/types/sharedTypes/component-module.d.ts +2 -2
- package/types/sharedTypes/component-props.d.ts +4 -4
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -24,7 +28,7 @@ const react_1 = __importStar(require("react"));
|
|
|
24
28
|
/**
|
|
25
29
|
* Component props context which we are using in order to store data fetched on components level (getStaticProps/getServerSideProps)
|
|
26
30
|
*/
|
|
27
|
-
exports.ComponentPropsReactContext = react_1.createContext({});
|
|
31
|
+
exports.ComponentPropsReactContext = (0, react_1.createContext)({});
|
|
28
32
|
/**
|
|
29
33
|
* Hook in order to get access to props related to specific component. Data comes from ComponentPropsContext.
|
|
30
34
|
* @see ComponentPropsContext
|
|
@@ -35,7 +39,7 @@ function useComponentProps(componentUid) {
|
|
|
35
39
|
if (!componentUid) {
|
|
36
40
|
return undefined;
|
|
37
41
|
}
|
|
38
|
-
const data = react_1.useContext(exports.ComponentPropsReactContext);
|
|
42
|
+
const data = (0, react_1.useContext)(exports.ComponentPropsReactContext);
|
|
39
43
|
return data[componentUid];
|
|
40
44
|
}
|
|
41
45
|
exports.useComponentProps = useComponentProps;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EditingComponentPlaceholder = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
9
|
+
const Placeholder_1 = require("./Placeholder");
|
|
10
|
+
const EditingComponentPlaceholder = ({ rendering, }) => (react_1.default.createElement("div", { id: layout_1.EDITING_COMPONENT_ID },
|
|
11
|
+
react_1.default.createElement(Placeholder_1.Placeholder, { name: layout_1.EDITING_COMPONENT_PLACEHOLDER, rendering: rendering })));
|
|
12
|
+
exports.EditingComponentPlaceholder = EditingComponentPlaceholder;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -38,18 +42,18 @@ const react_1 = __importStar(require("react"));
|
|
|
38
42
|
const prop_types_1 = __importDefault(require("prop-types"));
|
|
39
43
|
const link_1 = __importDefault(require("next/link"));
|
|
40
44
|
const sitecore_jss_react_1 = require("@sitecore-jss/sitecore-jss-react");
|
|
41
|
-
exports.Link = react_1.forwardRef((props, ref) => {
|
|
45
|
+
exports.Link = (0, react_1.forwardRef)((props, ref) => {
|
|
42
46
|
const { field, editable, children, internalLinkMatcher = /^\//g, showLinkTextWithChildrenPresent } = props, htmlLinkProps = __rest(props, ["field", "editable", "children", "internalLinkMatcher", "showLinkTextWithChildrenPresent"]);
|
|
43
47
|
const value = (field.href
|
|
44
48
|
? field
|
|
45
49
|
: field.value);
|
|
46
|
-
const { href, querystring } = value;
|
|
50
|
+
const { href, querystring, anchor } = value;
|
|
47
51
|
const isEditing = editable && field.editable;
|
|
48
52
|
if (href && !isEditing) {
|
|
49
53
|
const text = showLinkTextWithChildrenPresent || !children ? value.text || value.href : null;
|
|
50
54
|
// determine if a link is a route or not.
|
|
51
55
|
if (internalLinkMatcher.test(href)) {
|
|
52
|
-
return (react_1.default.createElement(link_1.default, { href: { pathname: href, query: querystring }, key: "link", locale: false },
|
|
56
|
+
return (react_1.default.createElement(link_1.default, { href: { pathname: href, query: querystring, hash: anchor }, key: "link", locale: false },
|
|
53
57
|
react_1.default.createElement("a", Object.assign({ title: value.title, target: value.target, className: value.class }, htmlLinkProps, { ref: ref }),
|
|
54
58
|
text,
|
|
55
59
|
children)));
|
|
@@ -42,7 +42,7 @@ const NextImage = (_a) => {
|
|
|
42
42
|
const imageField = dynamicMedia;
|
|
43
43
|
// we likely have an experience editor value, should be a string
|
|
44
44
|
if (editable && imageField.editable) {
|
|
45
|
-
return sitecore_jss_react_1.getEEMarkup(imageField, imageParams, mediaUrlPrefix, otherProps);
|
|
45
|
+
return (0, sitecore_jss_react_1.getEEMarkup)(imageField, imageParams, mediaUrlPrefix, otherProps);
|
|
46
46
|
}
|
|
47
47
|
// some wise-guy/gal is passing in a 'raw' image object value
|
|
48
48
|
const img = dynamicMedia.src
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -24,7 +28,7 @@ const react_1 = __importStar(require("react"));
|
|
|
24
28
|
const sitecore_jss_react_1 = require("@sitecore-jss/sitecore-jss-react");
|
|
25
29
|
const ComponentPropsContext_1 = require("./ComponentPropsContext");
|
|
26
30
|
const Placeholder = (props) => {
|
|
27
|
-
const componentPropsContext = react_1.useContext(ComponentPropsContext_1.ComponentPropsReactContext);
|
|
31
|
+
const componentPropsContext = (0, react_1.useContext)(ComponentPropsContext_1.ComponentPropsReactContext);
|
|
28
32
|
return (react_1.default.createElement(sitecore_jss_react_1.Placeholder, Object.assign({}, props, { modifyComponentProps: (initialProps) => {
|
|
29
33
|
if (!initialProps.rendering.uid)
|
|
30
34
|
return initialProps;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -43,9 +47,9 @@ const RichText = (props) => {
|
|
|
43
47
|
const { internalLinksSelector = 'a[href^="/"]' } = props, rest = __rest(props, ["internalLinksSelector"]);
|
|
44
48
|
const hasText = props.field && props.field.value;
|
|
45
49
|
const isEditing = props.editable && props.field && props.field.editable;
|
|
46
|
-
const router = router_1.useRouter();
|
|
47
|
-
const richTextRef = react_1.useRef(null);
|
|
48
|
-
react_1.useEffect(() => {
|
|
50
|
+
const router = (0, router_1.useRouter)();
|
|
51
|
+
const richTextRef = (0, react_1.useRef)(null);
|
|
52
|
+
(0, react_1.useEffect)(() => {
|
|
49
53
|
// NOT IN EXPERIENCE EDITOR
|
|
50
54
|
if (hasText && !isEditing) {
|
|
51
55
|
initializeLinks();
|
|
@@ -22,19 +22,24 @@ class EditingDataDiskCache {
|
|
|
22
22
|
}
|
|
23
23
|
set(key, editingData) {
|
|
24
24
|
const filePath = this.cache.set(key, JSON.stringify(editingData));
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
if (!filePath || filePath.length === 0) {
|
|
27
|
+
reject(new Error(`Editing data cache not set for key ${key} at ${this.cache.root}`));
|
|
28
|
+
}
|
|
29
|
+
resolve();
|
|
30
|
+
});
|
|
28
31
|
}
|
|
29
32
|
get(key) {
|
|
30
33
|
const entry = this.cache.get(key);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return new Promise((resolve) => {
|
|
35
|
+
if (!entry.isCached) {
|
|
36
|
+
console.warn(`Editing data cache miss for key ${key} at ${this.cache.root}`);
|
|
37
|
+
resolve(undefined);
|
|
38
|
+
}
|
|
39
|
+
// Remove to preserve disk-space (as a macrotask so as not to block current execution)
|
|
40
|
+
setTimeout(() => this.cache.remove(key));
|
|
41
|
+
resolve(JSON.parse(entry.value));
|
|
42
|
+
});
|
|
38
43
|
}
|
|
39
44
|
}
|
|
40
45
|
exports.EditingDataDiskCache = EditingDataDiskCache;
|
|
@@ -29,24 +29,24 @@ class EditingDataMiddleware {
|
|
|
29
29
|
const secret = query[editing_data_service_1.QUERY_PARAM_EDITING_SECRET];
|
|
30
30
|
const key = query[this.queryParamKey];
|
|
31
31
|
// Validate secret
|
|
32
|
-
if (secret !== utils_1.getJssEditingSecret()) {
|
|
32
|
+
if (secret !== (0, utils_1.getJssEditingSecret)()) {
|
|
33
33
|
res.status(401).end('Missing or invalid secret');
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
switch (method) {
|
|
37
37
|
case 'GET': {
|
|
38
38
|
// Get cache value
|
|
39
|
-
const data = this.editingDataCache.get(key);
|
|
39
|
+
const data = yield this.editingDataCache.get(key);
|
|
40
40
|
res.status(200).json(data);
|
|
41
41
|
break;
|
|
42
42
|
}
|
|
43
43
|
case 'PUT': {
|
|
44
|
-
if (!editing_data_1.isEditingData(body)) {
|
|
44
|
+
if (!(0, editing_data_1.isEditingData)(body)) {
|
|
45
45
|
res.status(400).end('Missing or invalid editing data');
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
48
|
// Set cache value
|
|
49
|
-
this.editingDataCache.set(key, body);
|
|
49
|
+
yield this.editingDataCache.set(key, body);
|
|
50
50
|
res.status(200).end();
|
|
51
51
|
}
|
|
52
52
|
break;
|
|
@@ -56,7 +56,7 @@ class BasicEditingDataService {
|
|
|
56
56
|
key,
|
|
57
57
|
};
|
|
58
58
|
sitecore_jss_1.debug.editing('storing editing data for %o: %o', previewData, data);
|
|
59
|
-
this.editingDataCache.set(key, data);
|
|
59
|
+
yield this.editingDataCache.set(key, data);
|
|
60
60
|
return { key };
|
|
61
61
|
});
|
|
62
62
|
}
|
|
@@ -69,7 +69,7 @@ class BasicEditingDataService {
|
|
|
69
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
70
|
const editingPreviewData = previewData;
|
|
71
71
|
sitecore_jss_1.debug.editing('retrieving editing data for %o', previewData);
|
|
72
|
-
return this.editingDataCache.get(editingPreviewData.key);
|
|
72
|
+
return yield this.editingDataCache.get(editingPreviewData.key);
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -136,7 +136,7 @@ class ServerlessEditingDataService {
|
|
|
136
136
|
// http://localhost:3000/api/editing/data/52961eea-bafd-5287-a532-a72e36bd8a36-qkb4e3fv5x?secret=1234secret
|
|
137
137
|
const apiRoute = (_a = this.apiRoute) === null || _a === void 0 ? void 0 : _a.replace('[key]', key);
|
|
138
138
|
const url = new URL(apiRoute, serverUrl);
|
|
139
|
-
url.searchParams.append(exports.QUERY_PARAM_EDITING_SECRET, utils_1.getJssEditingSecret());
|
|
139
|
+
url.searchParams.append(exports.QUERY_PARAM_EDITING_SECRET, (0, utils_1.getJssEditingSecret)());
|
|
140
140
|
return url.toString();
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.extractEditingData = exports.EditingRenderMiddleware = void 0;
|
|
13
13
|
const constants_1 = require("next/constants");
|
|
14
14
|
const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
15
|
+
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
16
|
+
const node_html_parser_1 = require("node-html-parser");
|
|
15
17
|
const editing_data_service_1 = require("./editing-data-service");
|
|
16
18
|
const utils_1 = require("../utils");
|
|
17
19
|
/**
|
|
@@ -25,7 +27,7 @@ class EditingRenderMiddleware {
|
|
|
25
27
|
constructor(config) {
|
|
26
28
|
var _a, _b, _c, _d;
|
|
27
29
|
this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
var _e;
|
|
30
|
+
var _e, _f;
|
|
29
31
|
const { method, query, body, headers } = req;
|
|
30
32
|
sitecore_jss_1.debug.editing('editing render middleware start: %o', {
|
|
31
33
|
method,
|
|
@@ -42,8 +44,8 @@ class EditingRenderMiddleware {
|
|
|
42
44
|
}
|
|
43
45
|
// Validate secret
|
|
44
46
|
const secret = (_e = query[editing_data_service_1.QUERY_PARAM_EDITING_SECRET]) !== null && _e !== void 0 ? _e : body === null || body === void 0 ? void 0 : body.jssEditingSecret;
|
|
45
|
-
if (secret !== utils_1.getJssEditingSecret()) {
|
|
46
|
-
sitecore_jss_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, utils_1.getJssEditingSecret());
|
|
47
|
+
if (secret !== (0, utils_1.getJssEditingSecret)()) {
|
|
48
|
+
sitecore_jss_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getJssEditingSecret)());
|
|
47
49
|
return res.status(401).json({
|
|
48
50
|
html: '<html><body>Missing or invalid secret</body></html>',
|
|
49
51
|
});
|
|
@@ -94,12 +96,19 @@ class EditingRenderMiddleware {
|
|
|
94
96
|
// certain route configurations (e.g. multiple catch-all routes).
|
|
95
97
|
// The following line will trick it into thinking we're SSR, thus avoiding any router.replace.
|
|
96
98
|
html = html.replace(constants_1.STATIC_PROPS_ID, constants_1.SERVER_PROPS_ID);
|
|
99
|
+
if (editingData.layoutData.sitecore.context.renderingType === layout_1.RenderingType.Component) {
|
|
100
|
+
// Handle component rendering. Extract component markup only
|
|
101
|
+
html = (_f = (0, node_html_parser_1.parse)(html).getElementById(layout_1.EDITING_COMPONENT_ID)) === null || _f === void 0 ? void 0 : _f.innerHTML;
|
|
102
|
+
if (!html)
|
|
103
|
+
throw new Error(`Failed to render component for ${requestUrl}`);
|
|
104
|
+
}
|
|
97
105
|
const body = { html };
|
|
98
106
|
// Return expected JSON result
|
|
99
107
|
sitecore_jss_1.debug.editing('editing render middleware end: %o', { status: 200, body });
|
|
100
108
|
res.status(200).json(body);
|
|
101
109
|
}
|
|
102
|
-
catch (
|
|
110
|
+
catch (err) {
|
|
111
|
+
const error = err;
|
|
103
112
|
console.error(error);
|
|
104
113
|
if (error.response || error.request) {
|
|
105
114
|
// Axios error, which could mean the server or page URL isn't quite right, so provide a more helpful hint
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.File = exports.DateField = exports.Text = exports.Image = exports.NextImage = exports.EditingComponentPlaceholder = exports.Placeholder = exports.RichText = exports.Link = exports.getPublicUrl = exports.handleEditorFastRefresh = exports.useComponentProps = exports.ComponentPropsContext = exports.ComponentPropsReactContext = exports.normalizeSiteRewrite = exports.getSiteRewriteData = exports.getSiteRewrite = exports.GraphQLSiteInfoService = exports.SiteResolver = exports.GraphQLRobotsService = exports.GraphQLErrorPagesService = exports.GraphQLSitemapXmlService = exports.GraphQLSitemapService = exports.DisconnectedSitemapService = exports.ComponentPropsService = exports.GraphQLRequestClient = exports.CdpHelper = exports.normalizePersonalizedRewrite = exports.getPersonalizedRewriteData = exports.getPersonalizedRewrite = exports.personalizeLayout = exports.RestDictionaryService = exports.GraphQLDictionaryService = exports.trackingApi = exports.mediaApi = exports.EDITING_COMPONENT_ID = exports.EDITING_COMPONENT_PLACEHOLDER = exports.RenderingType = exports.getFieldValue = exports.getChildPlaceholder = exports.RestLayoutService = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.resolveUrl = exports.resetEditorChromes = exports.isEditorActive = exports.enableDebug = exports.NativeDataFetcher = exports.AxiosDataFetcher = exports.constants = void 0;
|
|
4
|
+
exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = void 0;
|
|
4
5
|
var sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
5
6
|
Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return sitecore_jss_1.constants; } });
|
|
6
7
|
Object.defineProperty(exports, "AxiosDataFetcher", { enumerable: true, get: function () { return sitecore_jss_1.AxiosDataFetcher; } });
|
|
@@ -16,6 +17,9 @@ Object.defineProperty(exports, "GraphQLLayoutService", { enumerable: true, get:
|
|
|
16
17
|
Object.defineProperty(exports, "RestLayoutService", { enumerable: true, get: function () { return layout_1.RestLayoutService; } });
|
|
17
18
|
Object.defineProperty(exports, "getChildPlaceholder", { enumerable: true, get: function () { return layout_1.getChildPlaceholder; } });
|
|
18
19
|
Object.defineProperty(exports, "getFieldValue", { enumerable: true, get: function () { return layout_1.getFieldValue; } });
|
|
20
|
+
Object.defineProperty(exports, "RenderingType", { enumerable: true, get: function () { return layout_1.RenderingType; } });
|
|
21
|
+
Object.defineProperty(exports, "EDITING_COMPONENT_PLACEHOLDER", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_PLACEHOLDER; } });
|
|
22
|
+
Object.defineProperty(exports, "EDITING_COMPONENT_ID", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_ID; } });
|
|
19
23
|
var media_1 = require("@sitecore-jss/sitecore-jss/media");
|
|
20
24
|
Object.defineProperty(exports, "mediaApi", { enumerable: true, get: function () { return media_1.mediaApi; } });
|
|
21
25
|
var tracking_1 = require("@sitecore-jss/sitecore-jss/tracking");
|
|
@@ -29,8 +33,6 @@ Object.defineProperty(exports, "getPersonalizedRewrite", { enumerable: true, get
|
|
|
29
33
|
Object.defineProperty(exports, "getPersonalizedRewriteData", { enumerable: true, get: function () { return personalize_1.getPersonalizedRewriteData; } });
|
|
30
34
|
Object.defineProperty(exports, "normalizePersonalizedRewrite", { enumerable: true, get: function () { return personalize_1.normalizePersonalizedRewrite; } });
|
|
31
35
|
Object.defineProperty(exports, "CdpHelper", { enumerable: true, get: function () { return personalize_1.CdpHelper; } });
|
|
32
|
-
var site_1 = require("@sitecore-jss/sitecore-jss/site");
|
|
33
|
-
Object.defineProperty(exports, "GraphQLRobotsService", { enumerable: true, get: function () { return site_1.GraphQLRobotsService; } });
|
|
34
36
|
var sitecore_jss_2 = require("@sitecore-jss/sitecore-jss");
|
|
35
37
|
Object.defineProperty(exports, "GraphQLRequestClient", { enumerable: true, get: function () { return sitecore_jss_2.GraphQLRequestClient; } });
|
|
36
38
|
var component_props_service_1 = require("./services/component-props-service");
|
|
@@ -39,9 +41,15 @@ var disconnected_sitemap_service_1 = require("./services/disconnected-sitemap-se
|
|
|
39
41
|
Object.defineProperty(exports, "DisconnectedSitemapService", { enumerable: true, get: function () { return disconnected_sitemap_service_1.DisconnectedSitemapService; } });
|
|
40
42
|
var graphql_sitemap_service_1 = require("./services/graphql-sitemap-service");
|
|
41
43
|
Object.defineProperty(exports, "GraphQLSitemapService", { enumerable: true, get: function () { return graphql_sitemap_service_1.GraphQLSitemapService; } });
|
|
42
|
-
var
|
|
43
|
-
Object.defineProperty(exports, "GraphQLSitemapXmlService", { enumerable: true, get: function () { return
|
|
44
|
-
Object.defineProperty(exports, "GraphQLErrorPagesService", { enumerable: true, get: function () { return
|
|
44
|
+
var site_1 = require("@sitecore-jss/sitecore-jss/site");
|
|
45
|
+
Object.defineProperty(exports, "GraphQLSitemapXmlService", { enumerable: true, get: function () { return site_1.GraphQLSitemapXmlService; } });
|
|
46
|
+
Object.defineProperty(exports, "GraphQLErrorPagesService", { enumerable: true, get: function () { return site_1.GraphQLErrorPagesService; } });
|
|
47
|
+
Object.defineProperty(exports, "GraphQLRobotsService", { enumerable: true, get: function () { return site_1.GraphQLRobotsService; } });
|
|
48
|
+
Object.defineProperty(exports, "SiteResolver", { enumerable: true, get: function () { return site_1.SiteResolver; } });
|
|
49
|
+
Object.defineProperty(exports, "GraphQLSiteInfoService", { enumerable: true, get: function () { return site_1.GraphQLSiteInfoService; } });
|
|
50
|
+
Object.defineProperty(exports, "getSiteRewrite", { enumerable: true, get: function () { return site_1.getSiteRewrite; } });
|
|
51
|
+
Object.defineProperty(exports, "getSiteRewriteData", { enumerable: true, get: function () { return site_1.getSiteRewriteData; } });
|
|
52
|
+
Object.defineProperty(exports, "normalizeSiteRewrite", { enumerable: true, get: function () { return site_1.normalizeSiteRewrite; } });
|
|
45
53
|
var ComponentPropsContext_1 = require("./components/ComponentPropsContext");
|
|
46
54
|
Object.defineProperty(exports, "ComponentPropsReactContext", { enumerable: true, get: function () { return ComponentPropsContext_1.ComponentPropsReactContext; } });
|
|
47
55
|
Object.defineProperty(exports, "ComponentPropsContext", { enumerable: true, get: function () { return ComponentPropsContext_1.ComponentPropsContext; } });
|
|
@@ -55,6 +63,8 @@ var RichText_1 = require("./components/RichText");
|
|
|
55
63
|
Object.defineProperty(exports, "RichText", { enumerable: true, get: function () { return RichText_1.RichText; } });
|
|
56
64
|
var Placeholder_1 = require("./components/Placeholder");
|
|
57
65
|
Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
|
|
66
|
+
var EditingComponentPlaceholder_1 = require("./components/EditingComponentPlaceholder");
|
|
67
|
+
Object.defineProperty(exports, "EditingComponentPlaceholder", { enumerable: true, get: function () { return EditingComponentPlaceholder_1.EditingComponentPlaceholder; } });
|
|
58
68
|
var NextImage_1 = require("./components/NextImage");
|
|
59
69
|
Object.defineProperty(exports, "NextImage", { enumerable: true, get: function () { return NextImage_1.NextImage; } });
|
|
60
70
|
var sitecore_jss_react_1 = require("@sitecore-jss/sitecore-jss-react");
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PersonalizeMiddleware = exports.RedirectsMiddleware = void 0;
|
|
3
|
+
exports.SiteResolver = exports.MultisiteMiddleware = exports.PersonalizeMiddleware = exports.RedirectsMiddleware = void 0;
|
|
4
4
|
var redirects_middleware_1 = require("./redirects-middleware");
|
|
5
5
|
Object.defineProperty(exports, "RedirectsMiddleware", { enumerable: true, get: function () { return redirects_middleware_1.RedirectsMiddleware; } });
|
|
6
6
|
var personalize_middleware_1 = require("./personalize-middleware");
|
|
7
7
|
Object.defineProperty(exports, "PersonalizeMiddleware", { enumerable: true, get: function () { return personalize_middleware_1.PersonalizeMiddleware; } });
|
|
8
|
+
var multisite_middleware_1 = require("./multisite-middleware");
|
|
9
|
+
Object.defineProperty(exports, "MultisiteMiddleware", { enumerable: true, get: function () { return multisite_middleware_1.MultisiteMiddleware; } });
|
|
10
|
+
var site_1 = require("@sitecore-jss/sitecore-jss/site");
|
|
11
|
+
Object.defineProperty(exports, "SiteResolver", { enumerable: true, get: function () { return site_1.SiteResolver; } });
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MultisiteMiddleware = void 0;
|
|
13
|
+
const server_1 = require("next/server");
|
|
14
|
+
const site_1 = require("@sitecore-jss/sitecore-jss/site");
|
|
15
|
+
const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
16
|
+
/**
|
|
17
|
+
* Middleware / handler for multisite support
|
|
18
|
+
*/
|
|
19
|
+
class MultisiteMiddleware {
|
|
20
|
+
/**
|
|
21
|
+
* @param {MultisiteMiddlewareConfig} [config] Multisite middleware config
|
|
22
|
+
*/
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
var _a;
|
|
27
|
+
const pathname = req.nextUrl.pathname;
|
|
28
|
+
const hostHeader = (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
|
|
29
|
+
const hostname = hostHeader || this.defaultHostname;
|
|
30
|
+
sitecore_jss_1.debug.multisite('multisite middleware start: %o', {
|
|
31
|
+
pathname,
|
|
32
|
+
hostname,
|
|
33
|
+
});
|
|
34
|
+
if (!hostHeader) {
|
|
35
|
+
sitecore_jss_1.debug.multisite(`host header is missing, default ${hostname} is used`);
|
|
36
|
+
}
|
|
37
|
+
// Response will be provided if other middleware is run before us
|
|
38
|
+
let response = res || server_1.NextResponse.next();
|
|
39
|
+
if (this.excludeRoute(pathname) ||
|
|
40
|
+
(this.config.excludeRoute && this.config.excludeRoute(pathname))) {
|
|
41
|
+
sitecore_jss_1.debug.multisite('skipped (route excluded)');
|
|
42
|
+
return response;
|
|
43
|
+
}
|
|
44
|
+
// Site name can be forced by query string parameter or cookie
|
|
45
|
+
const siteName = req.nextUrl.searchParams.get('sc_site') ||
|
|
46
|
+
(this.config.useCookieResolution &&
|
|
47
|
+
this.config.useCookieResolution(req) &&
|
|
48
|
+
req.cookies.get('sc_site')) ||
|
|
49
|
+
this.config.getSite(hostname).name;
|
|
50
|
+
// Rewrite to site specific path
|
|
51
|
+
const rewritePath = (0, site_1.getSiteRewrite)(pathname, {
|
|
52
|
+
siteName,
|
|
53
|
+
});
|
|
54
|
+
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
55
|
+
const rewriteUrl = req.nextUrl.clone();
|
|
56
|
+
rewriteUrl.pathname = rewritePath;
|
|
57
|
+
response = server_1.NextResponse.rewrite(rewriteUrl);
|
|
58
|
+
// Share site name with the following executed middlewares
|
|
59
|
+
response.cookies.set('sc_site', siteName);
|
|
60
|
+
// Share rewrite path with following executed middlewares
|
|
61
|
+
response.headers.set('x-sc-rewrite', rewritePath);
|
|
62
|
+
sitecore_jss_1.debug.multisite('multisite middleware end: %o', {
|
|
63
|
+
rewritePath,
|
|
64
|
+
siteName,
|
|
65
|
+
headers: this.extractDebugHeaders(response.headers),
|
|
66
|
+
cookies: response.cookies,
|
|
67
|
+
});
|
|
68
|
+
return response;
|
|
69
|
+
});
|
|
70
|
+
this.defaultHostname = config.defaultHostname || 'localhost';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Gets the Next.js middleware handler with error handling
|
|
74
|
+
* @returns middleware handler
|
|
75
|
+
*/
|
|
76
|
+
getHandler() {
|
|
77
|
+
return (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
try {
|
|
79
|
+
return yield this.handler(req, res);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.log('Multisite middleware failed:');
|
|
83
|
+
console.log(error);
|
|
84
|
+
return res || server_1.NextResponse.next();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
excludeRoute(pathname) {
|
|
89
|
+
if (pathname.includes('.') || // Ignore files
|
|
90
|
+
pathname.startsWith('/api/') || // Ignore Next.js API calls
|
|
91
|
+
pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
|
|
92
|
+
pathname.startsWith('/_next') // Ignore next service calls
|
|
93
|
+
) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
extractDebugHeaders(incomingHeaders) {
|
|
99
|
+
const headers = {};
|
|
100
|
+
incomingHeaders.forEach((value, key) => (headers[key] = value));
|
|
101
|
+
return headers;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.MultisiteMiddleware = MultisiteMiddleware;
|
|
@@ -23,13 +23,20 @@ class PersonalizeMiddleware {
|
|
|
23
23
|
constructor(config) {
|
|
24
24
|
this.config = config;
|
|
25
25
|
this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
var _a;
|
|
27
|
+
const hostHeader = (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
|
|
28
|
+
const hostname = hostHeader || this.defaultHostname;
|
|
26
29
|
const pathname = req.nextUrl.pathname;
|
|
27
30
|
const language = req.nextUrl.locale || req.nextUrl.defaultLocale || 'en';
|
|
31
|
+
const siteName = (res === null || res === void 0 ? void 0 : res.cookies.get('sc_site')) || this.config.getSite(hostname).name;
|
|
28
32
|
let browserId = this.getBrowserId(req);
|
|
29
33
|
sitecore_jss_1.debug.personalize('personalize middleware start: %o', {
|
|
30
34
|
pathname,
|
|
31
35
|
language,
|
|
32
36
|
});
|
|
37
|
+
if (!hostHeader) {
|
|
38
|
+
sitecore_jss_1.debug.personalize(`host header is missing, default ${hostname} is used`);
|
|
39
|
+
}
|
|
33
40
|
// Response will be provided if other middleware is run before us (e.g. redirects)
|
|
34
41
|
let response = res || server_1.NextResponse.next();
|
|
35
42
|
if (this.config.disabled && this.config.disabled(req, response)) {
|
|
@@ -44,7 +51,7 @@ class PersonalizeMiddleware {
|
|
|
44
51
|
return response;
|
|
45
52
|
}
|
|
46
53
|
// Get personalization info from Experience Edge
|
|
47
|
-
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language);
|
|
54
|
+
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, siteName);
|
|
48
55
|
if (!personalizeInfo) {
|
|
49
56
|
// Likely an invalid route / language
|
|
50
57
|
sitecore_jss_1.debug.personalize('skipped (personalize info not found)');
|
|
@@ -62,7 +69,7 @@ class PersonalizeMiddleware {
|
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
71
|
// Execute targeted experience in CDP
|
|
65
|
-
const { ua } = server_1.userAgent(req);
|
|
72
|
+
const { ua } = (0, server_1.userAgent)(req);
|
|
66
73
|
const params = this.getExperienceParams(req);
|
|
67
74
|
const pointOfSale = this.config.getPointOfSale(language);
|
|
68
75
|
const variantId = yield this.cdpService.executeExperience(personalizeInfo.contentId, browserId, ua, pointOfSale, params);
|
|
@@ -74,8 +81,10 @@ class PersonalizeMiddleware {
|
|
|
74
81
|
sitecore_jss_1.debug.personalize('skipped (invalid variant)');
|
|
75
82
|
return response;
|
|
76
83
|
}
|
|
84
|
+
// Path can be rewritten by previously executed middleware
|
|
85
|
+
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get('x-sc-rewrite')) || pathname;
|
|
77
86
|
// Rewrite to persononalized path
|
|
78
|
-
const rewritePath = personalize_1.getPersonalizedRewrite(
|
|
87
|
+
const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, { variantId });
|
|
79
88
|
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
80
89
|
const rewriteUrl = req.nextUrl.clone();
|
|
81
90
|
rewriteUrl.pathname = rewritePath;
|
|
@@ -83,8 +92,12 @@ class PersonalizeMiddleware {
|
|
|
83
92
|
// Disable preflight caching to force revalidation on client-side navigation (personalization may be influenced)
|
|
84
93
|
// See https://github.com/vercel/next.js/issues/32727
|
|
85
94
|
response.headers.set('x-middleware-cache', 'no-cache');
|
|
95
|
+
// Share rewrite path with following executed middlewares
|
|
96
|
+
response.headers.set('x-sc-rewrite', rewritePath);
|
|
86
97
|
// Set browserId cookie on the response
|
|
87
98
|
this.setBrowserId(response, browserId);
|
|
99
|
+
// Share site name with the following executed middlewares
|
|
100
|
+
response.cookies.set('sc_site', siteName);
|
|
88
101
|
sitecore_jss_1.debug.personalize('personalize middleware end: %o', {
|
|
89
102
|
rewritePath,
|
|
90
103
|
browserId,
|
|
@@ -96,13 +109,15 @@ class PersonalizeMiddleware {
|
|
|
96
109
|
// (underlying default 'cross-fetch' is not currently compatible: https://github.com/lquixada/cross-fetch/issues/78)
|
|
97
110
|
this.personalizeService = new personalize_1.GraphQLPersonalizeService(Object.assign(Object.assign({}, config.edgeConfig), { fetch: fetch }));
|
|
98
111
|
// NOTE: same here, we provide NativeDataFetcher for compatibility on Next.js Edge Runtime
|
|
99
|
-
this.cdpService = new personalize_1.CdpService(Object.assign(Object.assign({}, config.cdpConfig), { dataFetcherResolver: ({ timeout }) => {
|
|
112
|
+
this.cdpService = new personalize_1.CdpService(Object.assign(Object.assign({}, config.cdpConfig), { dataFetcherResolver: ({ timeout, headers, }) => {
|
|
100
113
|
const fetcher = new sitecore_jss_1.NativeDataFetcher({
|
|
101
114
|
debugger: sitecore_jss_1.debug.personalize,
|
|
102
115
|
timeout,
|
|
116
|
+
headers,
|
|
103
117
|
});
|
|
104
118
|
return (url, data) => fetcher.fetch(url, data);
|
|
105
119
|
} }));
|
|
120
|
+
this.defaultHostname = config.defaultHostname || 'localhost';
|
|
106
121
|
}
|
|
107
122
|
/**
|
|
108
123
|
* Gets the Next.js middleware handler with error handling
|