@sitecore-jss/sitecore-jss-nextjs 21.7.0-canary.5 → 21.7.0-canary.6
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/middleware/middleware.js +17 -0
- package/dist/cjs/middleware/multisite-middleware.js +1 -6
- package/dist/cjs/middleware/personalize-middleware.js +1 -15
- package/dist/cjs/middleware/redirects-middleware.js +13 -8
- package/dist/esm/middleware/middleware.js +17 -0
- package/dist/esm/middleware/multisite-middleware.js +1 -6
- package/dist/esm/middleware/personalize-middleware.js +1 -15
- package/dist/esm/middleware/redirects-middleware.js +13 -8
- package/package.json +5 -5
- package/types/middleware/middleware.d.ts +8 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MiddlewareBase = void 0;
|
|
4
|
+
const server_1 = require("next/server");
|
|
4
5
|
class MiddlewareBase {
|
|
5
6
|
constructor(config) {
|
|
6
7
|
this.config = config;
|
|
7
8
|
this.SITE_SYMBOL = 'sc_site';
|
|
9
|
+
this.REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
8
10
|
this.defaultHostname = config.defaultHostname || 'localhost';
|
|
9
11
|
}
|
|
10
12
|
/**
|
|
@@ -65,5 +67,20 @@ class MiddlewareBase {
|
|
|
65
67
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
66
68
|
return this.config.siteResolver.getByHost(hostname);
|
|
67
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a rewrite response
|
|
72
|
+
* @param {string} rewritePath the destionation path
|
|
73
|
+
* @param {NextRequest} req the current request
|
|
74
|
+
* @param {NextResponse} res the current response
|
|
75
|
+
*/
|
|
76
|
+
rewrite(rewritePath, req, res) {
|
|
77
|
+
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
78
|
+
const rewriteUrl = req.nextUrl.clone();
|
|
79
|
+
rewriteUrl.pathname = rewritePath;
|
|
80
|
+
const response = server_1.NextResponse.rewrite(rewriteUrl, res);
|
|
81
|
+
// Share rewrite path with following executed middlewares
|
|
82
|
+
response.headers.set(this.REWRITE_HEADER_NAME, rewritePath);
|
|
83
|
+
return response;
|
|
84
|
+
}
|
|
68
85
|
}
|
|
69
86
|
exports.MiddlewareBase = MiddlewareBase;
|
|
@@ -51,14 +51,9 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
51
51
|
const rewritePath = (0, site_1.getSiteRewrite)(pathname, {
|
|
52
52
|
siteName,
|
|
53
53
|
});
|
|
54
|
-
|
|
55
|
-
const rewriteUrl = req.nextUrl.clone();
|
|
56
|
-
rewriteUrl.pathname = rewritePath;
|
|
57
|
-
response = server_1.NextResponse.rewrite(rewriteUrl);
|
|
54
|
+
response = this.rewrite(rewritePath, req, response);
|
|
58
55
|
// Share site name with the following executed middlewares
|
|
59
56
|
response.cookies.set(this.SITE_SYMBOL, siteName);
|
|
60
|
-
// Share rewrite path with following executed middlewares
|
|
61
|
-
response.headers.set('x-sc-rewrite', rewritePath);
|
|
62
57
|
sitecore_jss_1.debug.multisite('multisite middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
63
58
|
rewritePath,
|
|
64
59
|
siteName,
|
|
@@ -102,24 +102,10 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
102
102
|
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get('x-sc-rewrite')) || pathname;
|
|
103
103
|
// Rewrite to persononalized path
|
|
104
104
|
const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, { variantId });
|
|
105
|
-
|
|
106
|
-
const rewriteUrl = req.nextUrl.clone();
|
|
107
|
-
// Preserve cookies from previous response
|
|
108
|
-
const cookies = response.cookies.getAll();
|
|
109
|
-
rewriteUrl.pathname = rewritePath;
|
|
110
|
-
response = server_1.NextResponse.rewrite(rewriteUrl, response);
|
|
105
|
+
response = this.rewrite(rewritePath, req, response);
|
|
111
106
|
// Disable preflight caching to force revalidation on client-side navigation (personalization may be influenced)
|
|
112
107
|
// See https://github.com/vercel/next.js/issues/32727
|
|
113
108
|
response.headers.set('x-middleware-cache', 'no-cache');
|
|
114
|
-
// Share rewrite path with following executed middleware
|
|
115
|
-
response.headers.set('x-sc-rewrite', rewritePath);
|
|
116
|
-
// Share site name with the following executed middlewares
|
|
117
|
-
response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
118
|
-
// Restore cookies from previous response since
|
|
119
|
-
// browserId cookie gets omitted after rewrite
|
|
120
|
-
cookies.forEach((cookie) => {
|
|
121
|
-
response.cookies.set(cookie);
|
|
122
|
-
});
|
|
123
109
|
sitecore_jss_1.debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
124
110
|
rewritePath,
|
|
125
111
|
headers: this.extractDebugHeaders(response.headers),
|
|
@@ -42,7 +42,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
|
|
|
42
42
|
hostname,
|
|
43
43
|
});
|
|
44
44
|
const createResponse = () => __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
if (this.config.disabled && this.config.disabled(req, server_1.NextResponse.next())) {
|
|
45
|
+
if (this.config.disabled && this.config.disabled(req, res || server_1.NextResponse.next())) {
|
|
46
46
|
sitecore_jss_1.debug.redirects('skipped (redirects middleware is disabled)');
|
|
47
47
|
return res || server_1.NextResponse.next();
|
|
48
48
|
}
|
|
@@ -82,19 +82,24 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
|
|
|
82
82
|
/** return Response redirect with http code of redirect type **/
|
|
83
83
|
switch (existsRedirect.redirectType) {
|
|
84
84
|
case site_1.REDIRECT_TYPE_301:
|
|
85
|
-
return server_1.NextResponse.redirect(redirectUrl,
|
|
85
|
+
return server_1.NextResponse.redirect(redirectUrl, {
|
|
86
|
+
status: 301,
|
|
87
|
+
statusText: 'Moved Permanently',
|
|
88
|
+
headers: res === null || res === void 0 ? void 0 : res.headers,
|
|
89
|
+
});
|
|
86
90
|
case site_1.REDIRECT_TYPE_302:
|
|
87
|
-
return server_1.NextResponse.redirect(redirectUrl,
|
|
91
|
+
return server_1.NextResponse.redirect(redirectUrl, {
|
|
92
|
+
status: 302,
|
|
93
|
+
statusText: 'Found',
|
|
94
|
+
headers: res === null || res === void 0 ? void 0 : res.headers,
|
|
95
|
+
});
|
|
88
96
|
case site_1.REDIRECT_TYPE_SERVER_TRANSFER:
|
|
89
|
-
return server_1.NextResponse.rewrite(redirectUrl);
|
|
97
|
+
return server_1.NextResponse.rewrite(redirectUrl, res);
|
|
90
98
|
default:
|
|
91
|
-
return server_1.NextResponse.next();
|
|
99
|
+
return res || server_1.NextResponse.next();
|
|
92
100
|
}
|
|
93
101
|
});
|
|
94
102
|
const response = yield createResponse();
|
|
95
|
-
// Share site name with the following executed middlewares
|
|
96
|
-
// Don't need to set when middleware is disabled
|
|
97
|
-
site && response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
98
103
|
sitecore_jss_1.debug.redirects('redirects middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
99
104
|
redirected: response.redirected,
|
|
100
105
|
status: response.status,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
1
2
|
export class MiddlewareBase {
|
|
2
3
|
constructor(config) {
|
|
3
4
|
this.config = config;
|
|
4
5
|
this.SITE_SYMBOL = 'sc_site';
|
|
6
|
+
this.REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
5
7
|
this.defaultHostname = config.defaultHostname || 'localhost';
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
@@ -62,4 +64,19 @@ export class MiddlewareBase {
|
|
|
62
64
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
63
65
|
return this.config.siteResolver.getByHost(hostname);
|
|
64
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a rewrite response
|
|
69
|
+
* @param {string} rewritePath the destionation path
|
|
70
|
+
* @param {NextRequest} req the current request
|
|
71
|
+
* @param {NextResponse} res the current response
|
|
72
|
+
*/
|
|
73
|
+
rewrite(rewritePath, req, res) {
|
|
74
|
+
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
75
|
+
const rewriteUrl = req.nextUrl.clone();
|
|
76
|
+
rewriteUrl.pathname = rewritePath;
|
|
77
|
+
const response = NextResponse.rewrite(rewriteUrl, res);
|
|
78
|
+
// Share rewrite path with following executed middlewares
|
|
79
|
+
response.headers.set(this.REWRITE_HEADER_NAME, rewritePath);
|
|
80
|
+
return response;
|
|
81
|
+
}
|
|
65
82
|
}
|
|
@@ -48,14 +48,9 @@ export class MultisiteMiddleware extends MiddlewareBase {
|
|
|
48
48
|
const rewritePath = getSiteRewrite(pathname, {
|
|
49
49
|
siteName,
|
|
50
50
|
});
|
|
51
|
-
|
|
52
|
-
const rewriteUrl = req.nextUrl.clone();
|
|
53
|
-
rewriteUrl.pathname = rewritePath;
|
|
54
|
-
response = NextResponse.rewrite(rewriteUrl);
|
|
51
|
+
response = this.rewrite(rewritePath, req, response);
|
|
55
52
|
// Share site name with the following executed middlewares
|
|
56
53
|
response.cookies.set(this.SITE_SYMBOL, siteName);
|
|
57
|
-
// Share rewrite path with following executed middlewares
|
|
58
|
-
response.headers.set('x-sc-rewrite', rewritePath);
|
|
59
54
|
debug.multisite('multisite middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
60
55
|
rewritePath,
|
|
61
56
|
siteName,
|
|
@@ -99,24 +99,10 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
99
99
|
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get('x-sc-rewrite')) || pathname;
|
|
100
100
|
// Rewrite to persononalized path
|
|
101
101
|
const rewritePath = getPersonalizedRewrite(basePath, { variantId });
|
|
102
|
-
|
|
103
|
-
const rewriteUrl = req.nextUrl.clone();
|
|
104
|
-
// Preserve cookies from previous response
|
|
105
|
-
const cookies = response.cookies.getAll();
|
|
106
|
-
rewriteUrl.pathname = rewritePath;
|
|
107
|
-
response = NextResponse.rewrite(rewriteUrl, response);
|
|
102
|
+
response = this.rewrite(rewritePath, req, response);
|
|
108
103
|
// Disable preflight caching to force revalidation on client-side navigation (personalization may be influenced)
|
|
109
104
|
// See https://github.com/vercel/next.js/issues/32727
|
|
110
105
|
response.headers.set('x-middleware-cache', 'no-cache');
|
|
111
|
-
// Share rewrite path with following executed middleware
|
|
112
|
-
response.headers.set('x-sc-rewrite', rewritePath);
|
|
113
|
-
// Share site name with the following executed middlewares
|
|
114
|
-
response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
115
|
-
// Restore cookies from previous response since
|
|
116
|
-
// browserId cookie gets omitted after rewrite
|
|
117
|
-
cookies.forEach((cookie) => {
|
|
118
|
-
response.cookies.set(cookie);
|
|
119
|
-
});
|
|
120
106
|
debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
121
107
|
rewritePath,
|
|
122
108
|
headers: this.extractDebugHeaders(response.headers),
|
|
@@ -36,7 +36,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
|
|
|
36
36
|
hostname,
|
|
37
37
|
});
|
|
38
38
|
const createResponse = () => __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
if (this.config.disabled && this.config.disabled(req, NextResponse.next())) {
|
|
39
|
+
if (this.config.disabled && this.config.disabled(req, res || NextResponse.next())) {
|
|
40
40
|
debug.redirects('skipped (redirects middleware is disabled)');
|
|
41
41
|
return res || NextResponse.next();
|
|
42
42
|
}
|
|
@@ -76,19 +76,24 @@ export class RedirectsMiddleware extends MiddlewareBase {
|
|
|
76
76
|
/** return Response redirect with http code of redirect type **/
|
|
77
77
|
switch (existsRedirect.redirectType) {
|
|
78
78
|
case REDIRECT_TYPE_301:
|
|
79
|
-
return NextResponse.redirect(redirectUrl,
|
|
79
|
+
return NextResponse.redirect(redirectUrl, {
|
|
80
|
+
status: 301,
|
|
81
|
+
statusText: 'Moved Permanently',
|
|
82
|
+
headers: res === null || res === void 0 ? void 0 : res.headers,
|
|
83
|
+
});
|
|
80
84
|
case REDIRECT_TYPE_302:
|
|
81
|
-
return NextResponse.redirect(redirectUrl,
|
|
85
|
+
return NextResponse.redirect(redirectUrl, {
|
|
86
|
+
status: 302,
|
|
87
|
+
statusText: 'Found',
|
|
88
|
+
headers: res === null || res === void 0 ? void 0 : res.headers,
|
|
89
|
+
});
|
|
82
90
|
case REDIRECT_TYPE_SERVER_TRANSFER:
|
|
83
|
-
return NextResponse.rewrite(redirectUrl);
|
|
91
|
+
return NextResponse.rewrite(redirectUrl, res);
|
|
84
92
|
default:
|
|
85
|
-
return NextResponse.next();
|
|
93
|
+
return res || NextResponse.next();
|
|
86
94
|
}
|
|
87
95
|
});
|
|
88
96
|
const response = yield createResponse();
|
|
89
|
-
// Share site name with the following executed middlewares
|
|
90
|
-
// Don't need to set when middleware is disabled
|
|
91
|
-
site && response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
92
97
|
debug.redirects('redirects middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
93
98
|
redirected: response.redirected,
|
|
94
99
|
status: response.status,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sitecore-jss/sitecore-jss-nextjs",
|
|
3
|
-
"version": "21.7.0-canary.
|
|
3
|
+
"version": "21.7.0-canary.6",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"react-dom": "^18.2.0"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@sitecore-jss/sitecore-jss": "^21.7.0-canary.
|
|
76
|
-
"@sitecore-jss/sitecore-jss-dev-tools": "^21.7.0-canary.
|
|
77
|
-
"@sitecore-jss/sitecore-jss-react": "^21.7.0-canary.
|
|
75
|
+
"@sitecore-jss/sitecore-jss": "^21.7.0-canary.6",
|
|
76
|
+
"@sitecore-jss/sitecore-jss-dev-tools": "^21.7.0-canary.6",
|
|
77
|
+
"@sitecore-jss/sitecore-jss-react": "^21.7.0-canary.6",
|
|
78
78
|
"@vercel/kv": "^0.2.1",
|
|
79
79
|
"node-html-parser": "^6.1.4",
|
|
80
80
|
"prop-types": "^15.8.1",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
"description": "",
|
|
85
85
|
"types": "types/index.d.ts",
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "3468861efc54046977809988c5a6d0745a40aacb",
|
|
87
87
|
"files": [
|
|
88
88
|
"dist",
|
|
89
89
|
"types",
|
|
@@ -28,6 +28,7 @@ export type MiddlewareBaseConfig = {
|
|
|
28
28
|
export declare abstract class MiddlewareBase {
|
|
29
29
|
protected config: MiddlewareBaseConfig;
|
|
30
30
|
protected SITE_SYMBOL: string;
|
|
31
|
+
protected REWRITE_HEADER_NAME: string;
|
|
31
32
|
protected defaultHostname: string;
|
|
32
33
|
constructor(config: MiddlewareBaseConfig);
|
|
33
34
|
/**
|
|
@@ -65,4 +66,11 @@ export declare abstract class MiddlewareBase {
|
|
|
65
66
|
* @returns {SiteInfo} site information
|
|
66
67
|
*/
|
|
67
68
|
protected getSite(req: NextRequest, res?: NextResponse): SiteInfo;
|
|
69
|
+
/**
|
|
70
|
+
* Create a rewrite response
|
|
71
|
+
* @param {string} rewritePath the destionation path
|
|
72
|
+
* @param {NextRequest} req the current request
|
|
73
|
+
* @param {NextResponse} res the current response
|
|
74
|
+
*/
|
|
75
|
+
protected rewrite(rewritePath: string, req: NextRequest, res: NextResponse): NextResponse;
|
|
68
76
|
}
|