@sitecore-jss/sitecore-jss-nextjs 22.10.0-canary.4 → 22.10.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.
@@ -26,9 +26,6 @@ const REGEXP_ABSOLUTE_URL = new RegExp('^(?:[a-z]+:)?//', 'i');
26
26
  * compares with current url and redirects to target url
27
27
  */
28
28
  class RedirectsMiddleware extends middleware_1.MiddlewareBase {
29
- /**
30
- * @param {RedirectsMiddlewareConfig} [config] redirects middleware config
31
- */
32
29
  constructor(config) {
33
30
  super(config);
34
31
  this.config = config;
@@ -136,7 +133,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
136
133
  const createResponse = () => __awaiter(this, void 0, void 0, function* () {
137
134
  var _a;
138
135
  const response = res || server_1.NextResponse.next();
139
- if (this.config.disabled && this.config.disabled(req, res || server_1.NextResponse.next())) {
136
+ if (this.config.disabled && this.config.disabled(req, response)) {
140
137
  sitecore_jss_1.debug.redirects('skipped (redirects middleware is disabled)');
141
138
  return response;
142
139
  }
@@ -152,7 +149,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
152
149
  response.headers.set('Cache-Control', 'no-store, must-revalidate');
153
150
  return response;
154
151
  }
155
- site = this.getSite(req, res);
152
+ site = this.getSite(req, response);
156
153
  // Find the redirect from result of RedirectService
157
154
  const existsRedirect = yield this.getExistsRedirect(req, site.name);
158
155
  if (!existsRedirect) {
@@ -169,7 +166,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
169
166
  }
170
167
  const url = this.normalizeUrl(req.nextUrl.clone());
171
168
  if (REGEXP_ABSOLUTE_URL.test(existsRedirect.target)) {
172
- url.href = existsRedirect.target;
169
+ return this.dispatchRedirect(existsRedirect.target, existsRedirect.redirectType, req, response, true);
173
170
  }
174
171
  else {
175
172
  const isUrl = (0, utils_1.isRegexOrUrl)(existsRedirect.pattern) === 'url';
@@ -191,25 +188,12 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
191
188
  const mergedQueryString = existsRedirect.isQueryStringPreserved
192
189
  ? (0, utils_1.mergeURLSearchParams)(new URLSearchParams((_a = url.search) !== null && _a !== void 0 ? _a : ''), new URLSearchParams(targetQueryString || ''))
193
190
  : targetQueryString || '';
194
- const prepareNewURL = new URL(`${targetPath}${mergedQueryString ? '?' + mergedQueryString : ''}`, url.origin);
191
+ const prepareNewURL = new URL(`${targetPath}${mergedQueryString ? `?${mergedQueryString}` : ''}`, url.origin);
195
192
  url.href = prepareNewURL.href;
196
193
  url.pathname = prepareNewURL.pathname;
197
194
  url.search = prepareNewURL.search;
198
195
  url.locale = req.nextUrl.locale;
199
- }
200
- /** return Response redirect with http code of redirect type */
201
- switch (existsRedirect.redirectType) {
202
- case site_1.REDIRECT_TYPE_301: {
203
- return this.createRedirectResponse(url, response, 301, 'Moved Permanently');
204
- }
205
- case site_1.REDIRECT_TYPE_302: {
206
- return this.createRedirectResponse(url, response, 302, 'Found');
207
- }
208
- case site_1.REDIRECT_TYPE_SERVER_TRANSFER: {
209
- return this.rewrite(url.href, req, response, true);
210
- }
211
- default:
212
- return response;
196
+ return this.dispatchRedirect(url, existsRedirect.redirectType, req, response, false);
213
197
  }
214
198
  });
215
199
  const response = yield createResponse();
@@ -230,7 +214,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
230
214
  */
231
215
  getRedirects(siteName) {
232
216
  return __awaiter(this, void 0, void 0, function* () {
233
- return yield this.redirectsService.fetchRedirects(siteName);
217
+ return this.redirectsService.fetchRedirects(siteName);
234
218
  });
235
219
  }
236
220
  /**
@@ -241,9 +225,8 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
241
225
  * @returns {string} normalize url
242
226
  */
243
227
  normalizeUrl(url) {
244
- if (!url.search) {
228
+ if (!url.search)
245
229
  return url;
246
- }
247
230
  /**
248
231
  * Prepare special parameters for exclusion.
249
232
  */
@@ -260,12 +243,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
260
243
  const newQueryString = url.search
261
244
  .replace(/^\?/, '')
262
245
  .split('&')
263
- .filter((param) => {
264
- if (!splittedPathname.includes(param)) {
265
- return param;
266
- }
267
- return false;
268
- })
246
+ .filter((param) => !splittedPathname.includes(param))
269
247
  .join('&');
270
248
  const newUrl = new URL(`${url.pathname.toLowerCase()}?${newQueryString}`, url.origin);
271
249
  url.search = newUrl.search;
@@ -273,6 +251,29 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
273
251
  url.href = newUrl.href;
274
252
  return url;
275
253
  }
254
+ /**
255
+ * Dispatch a redirect or rewrite based on type.
256
+ * @param {NextURL | string} target Final target to redirect/rewrite to (NextURL or string for externals).
257
+ * @param {string} type One of `REDIRECT_TYPE_301`, `REDIRECT_TYPE_302`, or `REDIRECT_TYPE_SERVER_TRANSFER`.
258
+ * @param {NextRequest} req Incoming request.
259
+ * @param {NextResponse} res Current response (used for header cleanup/carry-over).
260
+ * @param {boolean} isExternal Set to `true` when target is an external absolute URL.
261
+ * @returns A NextResponse.
262
+ */
263
+ dispatchRedirect(target, type, req, res, isExternal = false) {
264
+ switch (type) {
265
+ case site_1.REDIRECT_TYPE_301:
266
+ return this.createRedirectResponse(target, res, 301, 'Moved Permanently');
267
+ case site_1.REDIRECT_TYPE_302:
268
+ return this.createRedirectResponse(target, res, 302, 'Found');
269
+ case site_1.REDIRECT_TYPE_SERVER_TRANSFER:
270
+ // rewrite expects a string; unwrap NextURL if needed
271
+ return this.rewrite(typeof target === 'string' ? target : target.href, req, res, isExternal);
272
+ default:
273
+ // Unknown type: return the input response unchanged
274
+ return res;
275
+ }
276
+ }
276
277
  /**
277
278
  * Helper function to create a redirect response and remove the x-middleware-next header.
278
279
  * @param {NextURL} url The URL to redirect to.
@@ -20,9 +20,6 @@ const REGEXP_ABSOLUTE_URL = new RegExp('^(?:[a-z]+:)?//', 'i');
20
20
  * compares with current url and redirects to target url
21
21
  */
22
22
  export class RedirectsMiddleware extends MiddlewareBase {
23
- /**
24
- * @param {RedirectsMiddlewareConfig} [config] redirects middleware config
25
- */
26
23
  constructor(config) {
27
24
  super(config);
28
25
  this.config = config;
@@ -130,7 +127,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
130
127
  const createResponse = () => __awaiter(this, void 0, void 0, function* () {
131
128
  var _a;
132
129
  const response = res || NextResponse.next();
133
- if (this.config.disabled && this.config.disabled(req, res || NextResponse.next())) {
130
+ if (this.config.disabled && this.config.disabled(req, response)) {
134
131
  debug.redirects('skipped (redirects middleware is disabled)');
135
132
  return response;
136
133
  }
@@ -146,7 +143,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
146
143
  response.headers.set('Cache-Control', 'no-store, must-revalidate');
147
144
  return response;
148
145
  }
149
- site = this.getSite(req, res);
146
+ site = this.getSite(req, response);
150
147
  // Find the redirect from result of RedirectService
151
148
  const existsRedirect = yield this.getExistsRedirect(req, site.name);
152
149
  if (!existsRedirect) {
@@ -163,7 +160,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
163
160
  }
164
161
  const url = this.normalizeUrl(req.nextUrl.clone());
165
162
  if (REGEXP_ABSOLUTE_URL.test(existsRedirect.target)) {
166
- url.href = existsRedirect.target;
163
+ return this.dispatchRedirect(existsRedirect.target, existsRedirect.redirectType, req, response, true);
167
164
  }
168
165
  else {
169
166
  const isUrl = isRegexOrUrl(existsRedirect.pattern) === 'url';
@@ -185,25 +182,12 @@ export class RedirectsMiddleware extends MiddlewareBase {
185
182
  const mergedQueryString = existsRedirect.isQueryStringPreserved
186
183
  ? mergeURLSearchParams(new URLSearchParams((_a = url.search) !== null && _a !== void 0 ? _a : ''), new URLSearchParams(targetQueryString || ''))
187
184
  : targetQueryString || '';
188
- const prepareNewURL = new URL(`${targetPath}${mergedQueryString ? '?' + mergedQueryString : ''}`, url.origin);
185
+ const prepareNewURL = new URL(`${targetPath}${mergedQueryString ? `?${mergedQueryString}` : ''}`, url.origin);
189
186
  url.href = prepareNewURL.href;
190
187
  url.pathname = prepareNewURL.pathname;
191
188
  url.search = prepareNewURL.search;
192
189
  url.locale = req.nextUrl.locale;
193
- }
194
- /** return Response redirect with http code of redirect type */
195
- switch (existsRedirect.redirectType) {
196
- case REDIRECT_TYPE_301: {
197
- return this.createRedirectResponse(url, response, 301, 'Moved Permanently');
198
- }
199
- case REDIRECT_TYPE_302: {
200
- return this.createRedirectResponse(url, response, 302, 'Found');
201
- }
202
- case REDIRECT_TYPE_SERVER_TRANSFER: {
203
- return this.rewrite(url.href, req, response, true);
204
- }
205
- default:
206
- return response;
190
+ return this.dispatchRedirect(url, existsRedirect.redirectType, req, response, false);
207
191
  }
208
192
  });
209
193
  const response = yield createResponse();
@@ -224,7 +208,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
224
208
  */
225
209
  getRedirects(siteName) {
226
210
  return __awaiter(this, void 0, void 0, function* () {
227
- return yield this.redirectsService.fetchRedirects(siteName);
211
+ return this.redirectsService.fetchRedirects(siteName);
228
212
  });
229
213
  }
230
214
  /**
@@ -235,9 +219,8 @@ export class RedirectsMiddleware extends MiddlewareBase {
235
219
  * @returns {string} normalize url
236
220
  */
237
221
  normalizeUrl(url) {
238
- if (!url.search) {
222
+ if (!url.search)
239
223
  return url;
240
- }
241
224
  /**
242
225
  * Prepare special parameters for exclusion.
243
226
  */
@@ -254,12 +237,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
254
237
  const newQueryString = url.search
255
238
  .replace(/^\?/, '')
256
239
  .split('&')
257
- .filter((param) => {
258
- if (!splittedPathname.includes(param)) {
259
- return param;
260
- }
261
- return false;
262
- })
240
+ .filter((param) => !splittedPathname.includes(param))
263
241
  .join('&');
264
242
  const newUrl = new URL(`${url.pathname.toLowerCase()}?${newQueryString}`, url.origin);
265
243
  url.search = newUrl.search;
@@ -267,6 +245,29 @@ export class RedirectsMiddleware extends MiddlewareBase {
267
245
  url.href = newUrl.href;
268
246
  return url;
269
247
  }
248
+ /**
249
+ * Dispatch a redirect or rewrite based on type.
250
+ * @param {NextURL | string} target Final target to redirect/rewrite to (NextURL or string for externals).
251
+ * @param {string} type One of `REDIRECT_TYPE_301`, `REDIRECT_TYPE_302`, or `REDIRECT_TYPE_SERVER_TRANSFER`.
252
+ * @param {NextRequest} req Incoming request.
253
+ * @param {NextResponse} res Current response (used for header cleanup/carry-over).
254
+ * @param {boolean} isExternal Set to `true` when target is an external absolute URL.
255
+ * @returns A NextResponse.
256
+ */
257
+ dispatchRedirect(target, type, req, res, isExternal = false) {
258
+ switch (type) {
259
+ case REDIRECT_TYPE_301:
260
+ return this.createRedirectResponse(target, res, 301, 'Moved Permanently');
261
+ case REDIRECT_TYPE_302:
262
+ return this.createRedirectResponse(target, res, 302, 'Found');
263
+ case REDIRECT_TYPE_SERVER_TRANSFER:
264
+ // rewrite expects a string; unwrap NextURL if needed
265
+ return this.rewrite(typeof target === 'string' ? target : target.href, req, res, isExternal);
266
+ default:
267
+ // Unknown type: return the input response unchanged
268
+ return res;
269
+ }
270
+ }
270
271
  /**
271
272
  * Helper function to create a redirect response and remove the x-middleware-next header.
272
273
  * @param {NextURL} url The URL to redirect to.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-nextjs",
3
- "version": "22.10.0-canary.4",
3
+ "version": "22.10.0-canary.6",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -72,16 +72,16 @@
72
72
  "react-dom": "^19.1.0"
73
73
  },
74
74
  "dependencies": {
75
- "@sitecore-jss/sitecore-jss": "22.10.0-canary.4",
76
- "@sitecore-jss/sitecore-jss-dev-tools": "22.10.0-canary.4",
77
- "@sitecore-jss/sitecore-jss-react": "22.10.0-canary.4",
75
+ "@sitecore-jss/sitecore-jss": "22.10.0-canary.6",
76
+ "@sitecore-jss/sitecore-jss-dev-tools": "22.10.0-canary.6",
77
+ "@sitecore-jss/sitecore-jss-react": "22.10.0-canary.6",
78
78
  "@vercel/kv": "^0.2.1",
79
79
  "regex-parser": "^2.2.11",
80
80
  "sync-disk-cache": "^2.1.0"
81
81
  },
82
82
  "description": "",
83
83
  "types": "types/index.d.ts",
84
- "gitHead": "e81a0014dd741ecf72386451bc1136caca82dbec",
84
+ "gitHead": "352e16edcf9b8a0628bb5bedfe9463a69c108995",
85
85
  "files": [
86
86
  "dist",
87
87
  "types",
@@ -22,9 +22,6 @@ export declare class RedirectsMiddleware extends MiddlewareBase {
22
22
  protected config: RedirectsMiddlewareConfig;
23
23
  private redirectsService;
24
24
  private locales;
25
- /**
26
- * @param {RedirectsMiddlewareConfig} [config] redirects middleware config
27
- */
28
25
  constructor(config: RedirectsMiddlewareConfig);
29
26
  /**
30
27
  * Gets the Next.js middleware handler with error handling
@@ -60,6 +57,16 @@ export declare class RedirectsMiddleware extends MiddlewareBase {
60
57
  * @returns {string} normalize url
61
58
  */
62
59
  private normalizeUrl;
60
+ /**
61
+ * Dispatch a redirect or rewrite based on type.
62
+ * @param {NextURL | string} target Final target to redirect/rewrite to (NextURL or string for externals).
63
+ * @param {string} type One of `REDIRECT_TYPE_301`, `REDIRECT_TYPE_302`, or `REDIRECT_TYPE_SERVER_TRANSFER`.
64
+ * @param {NextRequest} req Incoming request.
65
+ * @param {NextResponse} res Current response (used for header cleanup/carry-over).
66
+ * @param {boolean} isExternal Set to `true` when target is an external absolute URL.
67
+ * @returns A NextResponse.
68
+ */
69
+ private dispatchRedirect;
63
70
  /**
64
71
  * Helper function to create a redirect response and remove the x-middleware-next header.
65
72
  * @param {NextURL} url The URL to redirect to.