@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.
@@ -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
- // 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);
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
- // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
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, 301);
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, 302);
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
- // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
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
- // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
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, 301);
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, 302);
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.5",
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.5",
76
- "@sitecore-jss/sitecore-jss-dev-tools": "^21.7.0-canary.5",
77
- "@sitecore-jss/sitecore-jss-react": "^21.7.0-canary.5",
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": "f076b7e95224d2494ed50ff2aeea664a5282af2e",
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
  }