@sitecore-jss/sitecore-jss-nextjs 22.10.0-canary.3 → 22.10.0-canary.5
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,
|
|
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,
|
|
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
|
-
|
|
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 ?
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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 ?
|
|
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
|
|
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.
|
|
3
|
+
"version": "22.10.0-canary.5",
|
|
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.
|
|
76
|
-
"@sitecore-jss/sitecore-jss-dev-tools": "22.10.0-canary.
|
|
77
|
-
"@sitecore-jss/sitecore-jss-react": "22.10.0-canary.
|
|
75
|
+
"@sitecore-jss/sitecore-jss": "22.10.0-canary.5",
|
|
76
|
+
"@sitecore-jss/sitecore-jss-dev-tools": "22.10.0-canary.5",
|
|
77
|
+
"@sitecore-jss/sitecore-jss-react": "22.10.0-canary.5",
|
|
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": "
|
|
84
|
+
"gitHead": "9464444f5fbb9f8cefa12f4d1e0e4cb726cc5325",
|
|
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.
|