@sitecore-content-sdk/nextjs 1.3.0-canary.9 → 1.4.0-canary.2

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.
Files changed (234) hide show
  1. package/README.md +11 -11
  2. package/dist/cjs/client/index.js +10 -10
  3. package/dist/cjs/client/models.js +2 -2
  4. package/dist/cjs/client/sitecore-nextjs-client.js +160 -156
  5. package/dist/cjs/components/BYOCWrapper.js +31 -30
  6. package/dist/cjs/components/ComponentPropsContext.js +66 -59
  7. package/dist/cjs/components/FEaaSWrapper.js +33 -32
  8. package/dist/cjs/components/Link.js +117 -90
  9. package/dist/cjs/components/NextImage.js +66 -62
  10. package/dist/cjs/components/Placeholder.js +55 -50
  11. package/dist/cjs/components/RichText.js +133 -128
  12. package/dist/cjs/config/define-config.js +26 -25
  13. package/dist/cjs/config/index.js +5 -5
  14. package/dist/cjs/config-cli/define-cli-config.js +40 -39
  15. package/dist/cjs/config-cli/index.js +5 -5
  16. package/dist/cjs/editing/codegen/import-map.js +129 -118
  17. package/dist/cjs/editing/codegen/index.js +6 -6
  18. package/dist/cjs/editing/constants.js +10 -10
  19. package/dist/cjs/editing/editing-config-middleware.js +70 -69
  20. package/dist/cjs/editing/editing-render-middleware.js +145 -144
  21. package/dist/cjs/editing/feaas-render-middleware.js +102 -101
  22. package/dist/cjs/editing/index.js +19 -19
  23. package/dist/cjs/editing/render-middleware.js +46 -46
  24. package/dist/cjs/editing/utils.js +260 -257
  25. package/dist/cjs/index.js +132 -131
  26. package/dist/cjs/middleware/app-router-multisite-middleware.js +41 -20
  27. package/dist/cjs/middleware/index.js +30 -30
  28. package/dist/cjs/middleware/locale-middleware.js +85 -84
  29. package/dist/cjs/middleware/middleware.js +195 -192
  30. package/dist/cjs/middleware/multisite-middleware.js +141 -118
  31. package/dist/cjs/middleware/personalize-middleware.js +240 -236
  32. package/dist/cjs/middleware/redirects-middleware.js +323 -297
  33. package/dist/cjs/middleware/robots-middleware.js +45 -44
  34. package/dist/cjs/middleware/sitemap-middleware.js +50 -49
  35. package/dist/cjs/monitoring/healthcheck-middleware.js +31 -30
  36. package/dist/cjs/monitoring/index.js +5 -5
  37. package/dist/cjs/route-handler/editing-config-route-handler.js +110 -106
  38. package/dist/cjs/route-handler/editing-render-route-handler.js +270 -165
  39. package/dist/cjs/route-handler/index.js +11 -11
  40. package/dist/cjs/route-handler/robots-route-handler.js +69 -68
  41. package/dist/cjs/route-handler/sitemap-route-handler.js +66 -65
  42. package/dist/cjs/search/index.js +17 -0
  43. package/dist/cjs/services/component-props-service.js +142 -138
  44. package/dist/cjs/sharedTypes/component-props.js +2 -2
  45. package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -2
  46. package/dist/cjs/site/index.js +5 -5
  47. package/dist/cjs/tools/codegen/import-map.js +15 -0
  48. package/dist/cjs/tools/component-props.loader.js +95 -95
  49. package/dist/cjs/tools/generate-map.js +317 -317
  50. package/dist/cjs/tools/index.js +14 -13
  51. package/dist/cjs/tools/templating/byoc-component.js +36 -36
  52. package/dist/cjs/tools/templating/constants.js +7 -7
  53. package/dist/cjs/tools/templating/default-component.js +35 -35
  54. package/dist/cjs/tools/templating/utils.js +200 -0
  55. package/dist/cjs/utils/index.js +14 -14
  56. package/dist/cjs/utils/utils.js +82 -73
  57. package/dist/esm/client/index.js +2 -2
  58. package/dist/esm/client/models.js +1 -1
  59. package/dist/esm/client/sitecore-nextjs-client.js +156 -152
  60. package/dist/esm/components/BYOCWrapper.js +27 -26
  61. package/dist/esm/components/ComponentPropsContext.js +28 -21
  62. package/dist/esm/components/FEaaSWrapper.js +29 -28
  63. package/dist/esm/components/Link.js +78 -51
  64. package/dist/esm/components/NextImage.js +60 -56
  65. package/dist/esm/components/Placeholder.js +18 -13
  66. package/dist/esm/components/RichText.js +96 -91
  67. package/dist/esm/config/define-config.js +21 -20
  68. package/dist/esm/config/index.js +1 -1
  69. package/dist/esm/config-cli/define-cli-config.js +36 -35
  70. package/dist/esm/config-cli/index.js +1 -1
  71. package/dist/esm/editing/codegen/import-map.js +92 -81
  72. package/dist/esm/editing/codegen/index.js +1 -1
  73. package/dist/esm/editing/constants.js +7 -7
  74. package/dist/esm/editing/editing-config-middleware.js +66 -65
  75. package/dist/esm/editing/editing-render-middleware.js +141 -140
  76. package/dist/esm/editing/feaas-render-middleware.js +98 -97
  77. package/dist/esm/editing/index.js +6 -6
  78. package/dist/esm/editing/render-middleware.js +42 -42
  79. package/dist/esm/editing/utils.js +246 -243
  80. package/dist/esm/index.js +25 -25
  81. package/dist/esm/middleware/app-router-multisite-middleware.js +37 -16
  82. package/dist/esm/middleware/index.js +11 -11
  83. package/dist/esm/middleware/locale-middleware.js +81 -80
  84. package/dist/esm/middleware/middleware.js +189 -186
  85. package/dist/esm/middleware/multisite-middleware.js +137 -114
  86. package/dist/esm/middleware/personalize-middleware.js +236 -232
  87. package/dist/esm/middleware/redirects-middleware.js +316 -290
  88. package/dist/esm/middleware/robots-middleware.js +41 -40
  89. package/dist/esm/middleware/sitemap-middleware.js +46 -45
  90. package/dist/esm/monitoring/healthcheck-middleware.js +27 -26
  91. package/dist/esm/monitoring/index.js +1 -1
  92. package/dist/esm/route-handler/editing-config-route-handler.js +106 -102
  93. package/dist/esm/route-handler/editing-render-route-handler.js +265 -160
  94. package/dist/esm/route-handler/index.js +4 -4
  95. package/dist/esm/route-handler/robots-route-handler.js +65 -64
  96. package/dist/esm/route-handler/sitemap-route-handler.js +63 -62
  97. package/dist/esm/search/index.js +1 -0
  98. package/dist/esm/services/component-props-service.js +135 -131
  99. package/dist/esm/sharedTypes/component-props.js +1 -1
  100. package/dist/esm/sharedTypes/sitecore-page-props.js +1 -1
  101. package/dist/esm/site/index.js +1 -1
  102. package/dist/esm/tools/codegen/import-map.js +11 -0
  103. package/dist/esm/tools/component-props.loader.js +59 -59
  104. package/dist/esm/tools/generate-map.js +279 -279
  105. package/dist/esm/tools/index.js +3 -2
  106. package/dist/esm/tools/templating/byoc-component.js +30 -30
  107. package/dist/esm/tools/templating/constants.js +4 -4
  108. package/dist/esm/tools/templating/default-component.js +29 -29
  109. package/dist/esm/tools/templating/utils.js +190 -0
  110. package/dist/esm/utils/index.js +3 -3
  111. package/dist/esm/utils/utils.js +74 -65
  112. package/package.json +87 -13
  113. package/search.d.ts +1 -0
  114. package/types/client/index.d.ts +3 -2
  115. package/types/client/index.d.ts.map +1 -0
  116. package/types/client/models.d.ts +9 -8
  117. package/types/client/models.d.ts.map +1 -0
  118. package/types/client/sitecore-nextjs-client.d.ts +68 -63
  119. package/types/client/sitecore-nextjs-client.d.ts.map +1 -0
  120. package/types/components/BYOCWrapper.d.ts +16 -14
  121. package/types/components/BYOCWrapper.d.ts.map +1 -0
  122. package/types/components/ComponentPropsContext.d.ts +30 -18
  123. package/types/components/ComponentPropsContext.d.ts.map +1 -0
  124. package/types/components/FEaaSWrapper.d.ts +17 -15
  125. package/types/components/FEaaSWrapper.d.ts.map +1 -0
  126. package/types/components/Link.d.ts +25 -15
  127. package/types/components/Link.d.ts.map +1 -0
  128. package/types/components/NextImage.d.ts +11 -6
  129. package/types/components/NextImage.d.ts.map +1 -0
  130. package/types/components/Placeholder.d.ts +14 -8
  131. package/types/components/Placeholder.d.ts.map +1 -0
  132. package/types/components/RichText.d.ts +35 -25
  133. package/types/components/RichText.d.ts.map +1 -0
  134. package/types/config/define-config.d.ts +42 -38
  135. package/types/config/define-config.d.ts.map +1 -0
  136. package/types/config/index.d.ts +2 -1
  137. package/types/config/index.d.ts.map +1 -0
  138. package/types/config-cli/define-cli-config.d.ts +10 -8
  139. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  140. package/types/config-cli/index.d.ts +2 -1
  141. package/types/config-cli/index.d.ts.map +1 -0
  142. package/types/editing/codegen/import-map.d.ts +15 -3
  143. package/types/editing/codegen/import-map.d.ts.map +1 -0
  144. package/types/editing/codegen/index.d.ts +3 -2
  145. package/types/editing/codegen/index.d.ts.map +1 -0
  146. package/types/editing/constants.d.ts +8 -7
  147. package/types/editing/constants.d.ts.map +1 -0
  148. package/types/editing/editing-config-middleware.d.ts +37 -31
  149. package/types/editing/editing-config-middleware.d.ts.map +1 -0
  150. package/types/editing/editing-render-middleware.d.ts +47 -44
  151. package/types/editing/editing-render-middleware.d.ts.map +1 -0
  152. package/types/editing/feaas-render-middleware.d.ts +35 -32
  153. package/types/editing/feaas-render-middleware.d.ts.map +1 -0
  154. package/types/editing/index.d.ts +7 -6
  155. package/types/editing/index.d.ts.map +1 -0
  156. package/types/editing/render-middleware.d.ts +26 -25
  157. package/types/editing/render-middleware.d.ts.map +1 -0
  158. package/types/editing/utils.d.ts +110 -106
  159. package/types/editing/utils.d.ts.map +1 -0
  160. package/types/index.d.ts +25 -24
  161. package/types/index.d.ts.map +1 -0
  162. package/types/middleware/app-router-multisite-middleware.d.ts +28 -13
  163. package/types/middleware/app-router-multisite-middleware.d.ts.map +1 -0
  164. package/types/middleware/index.d.ts +12 -11
  165. package/types/middleware/index.d.ts.map +1 -0
  166. package/types/middleware/locale-middleware.d.ts +35 -32
  167. package/types/middleware/locale-middleware.d.ts.map +1 -0
  168. package/types/middleware/middleware.d.ts +135 -127
  169. package/types/middleware/middleware.d.ts.map +1 -0
  170. package/types/middleware/multisite-middleware.d.ts +54 -37
  171. package/types/middleware/multisite-middleware.d.ts.map +1 -0
  172. package/types/middleware/personalize-middleware.d.ts +81 -65
  173. package/types/middleware/personalize-middleware.d.ts.map +1 -0
  174. package/types/middleware/redirects-middleware.d.ts +68 -65
  175. package/types/middleware/redirects-middleware.d.ts.map +1 -0
  176. package/types/middleware/robots-middleware.d.ts +15 -13
  177. package/types/middleware/robots-middleware.d.ts.map +1 -0
  178. package/types/middleware/sitemap-middleware.d.ts +16 -14
  179. package/types/middleware/sitemap-middleware.d.ts.map +1 -0
  180. package/types/monitoring/healthcheck-middleware.d.ts +14 -12
  181. package/types/monitoring/healthcheck-middleware.d.ts.map +1 -0
  182. package/types/monitoring/index.d.ts +2 -1
  183. package/types/monitoring/index.d.ts.map +1 -0
  184. package/types/route-handler/editing-config-route-handler.d.ts +30 -24
  185. package/types/route-handler/editing-config-route-handler.d.ts.map +1 -0
  186. package/types/route-handler/editing-render-route-handler.d.ts +33 -25
  187. package/types/route-handler/editing-render-route-handler.d.ts.map +1 -0
  188. package/types/route-handler/index.d.ts +5 -4
  189. package/types/route-handler/index.d.ts.map +1 -0
  190. package/types/route-handler/robots-route-handler.d.ts +30 -28
  191. package/types/route-handler/robots-route-handler.d.ts.map +1 -0
  192. package/types/route-handler/sitemap-route-handler.d.ts +30 -28
  193. package/types/route-handler/sitemap-route-handler.d.ts.map +1 -0
  194. package/types/search/index.d.ts +2 -0
  195. package/types/search/index.d.ts.map +1 -0
  196. package/types/services/component-props-service.d.ts +62 -57
  197. package/types/services/component-props-service.d.ts.map +1 -0
  198. package/types/sharedTypes/component-props.d.ts +62 -47
  199. package/types/sharedTypes/component-props.d.ts.map +1 -0
  200. package/types/sharedTypes/sitecore-page-props.d.ts +14 -9
  201. package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -0
  202. package/types/site/index.d.ts +2 -1
  203. package/types/site/index.d.ts.map +1 -0
  204. package/types/tools/codegen/import-map.d.ts +10 -0
  205. package/types/tools/codegen/import-map.d.ts.map +1 -0
  206. package/types/tools/component-props.loader.d.ts +8 -7
  207. package/types/tools/component-props.loader.d.ts.map +1 -0
  208. package/types/tools/generate-map.d.ts +26 -24
  209. package/types/tools/generate-map.d.ts.map +1 -0
  210. package/types/tools/index.d.ts +4 -2
  211. package/types/tools/index.d.ts.map +1 -0
  212. package/types/tools/templating/byoc-component.d.ts +3 -2
  213. package/types/tools/templating/byoc-component.d.ts.map +1 -0
  214. package/types/tools/templating/constants.d.ts +5 -4
  215. package/types/tools/templating/constants.d.ts.map +1 -0
  216. package/types/tools/templating/default-component.d.ts +3 -2
  217. package/types/tools/templating/default-component.d.ts.map +1 -0
  218. package/types/tools/templating/utils.d.ts +44 -0
  219. package/types/tools/templating/utils.d.ts.map +1 -0
  220. package/types/utils/index.d.ts +4 -3
  221. package/types/utils/index.d.ts.map +1 -0
  222. package/types/utils/utils.d.ts +34 -24
  223. package/types/utils/utils.d.ts.map +1 -0
  224. package/client.js +0 -1
  225. package/codegen.js +0 -1
  226. package/config-cli.js +0 -1
  227. package/config.js +0 -1
  228. package/editing.js +0 -1
  229. package/middleware.js +0 -1
  230. package/monitoring.js +0 -1
  231. package/route-handler.js +0 -1
  232. package/site.js +0 -1
  233. package/tools.js +0 -1
  234. package/utils.js +0 -1
@@ -1,80 +1,81 @@
1
- /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
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
- import { debug } from '@sitecore-content-sdk/core';
12
- import { getLocaleRewrite } from '@sitecore-content-sdk/core/i18n';
13
- import { MiddlewareBase, LOCALE_HEADER_NAME } from './middleware';
14
- /**
15
- * Middleware/handler for handling locale-based routing in the Next.js App Router.
16
- * This middleware is responsible for extracting the locale from the request path and rewriting it if necessary.
17
- * It also sets the locale header in the response.
18
- */
19
- export class LocaleMiddleware extends MiddlewareBase {
20
- /**
21
- * @param {LocaleMiddlewareConfig} config Locale middleware config
22
- */
23
- constructor(config) {
24
- super(config);
25
- this.config = config;
26
- this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
27
- try {
28
- const { pathname } = req.nextUrl;
29
- const localeFromPath = this.getLocaleFromPath(pathname);
30
- const locale = localeFromPath || this.getLanguage(req, res);
31
- debug.locale('locale middleware start: %o', {
32
- pathname,
33
- locale,
34
- });
35
- if (this.disabled(req, res)) {
36
- debug.locale('skipped (locale middleware is disabled)');
37
- return res;
38
- }
39
- if (!localeFromPath) {
40
- // locale is not present in path, we need to rewrite to include the locale segment
41
- const rewritePath = getLocaleRewrite(pathname, locale);
42
- const response = this.rewrite(rewritePath, req, res);
43
- this.setLocaleHeader(response, locale);
44
- debug.locale('locale middleware end, with rewrite: %o', {
45
- pathname,
46
- locale,
47
- rewritePath,
48
- });
49
- return response;
50
- }
51
- this.setLocaleHeader(res, locale);
52
- debug.locale('locale middleware end, no rewrite: %o', {
53
- pathname,
54
- locale,
55
- });
56
- return res;
57
- }
58
- catch (error) {
59
- console.log('Locale middleware failed:');
60
- console.log(error);
61
- return res;
62
- }
63
- });
64
- }
65
- disabled(req, res) {
66
- // ignore files
67
- return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
68
- }
69
- /**
70
- * Extract locale from path
71
- * @param {string} path request path
72
- * @returns {string | undefined} the locale if found
73
- */
74
- getLocaleFromPath(path) {
75
- return this.config.locales.find((locale) => path.includes(`/${locale}/`) || path.endsWith(`/${locale}`));
76
- }
77
- setLocaleHeader(res, locale) {
78
- res.headers.set(LOCALE_HEADER_NAME, locale);
79
- }
80
- }
1
+ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
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
+ import { debug } from '@sitecore-content-sdk/core';
12
+ import { getLocaleRewrite } from '@sitecore-content-sdk/core/i18n';
13
+ import { MiddlewareBase, LOCALE_HEADER_NAME } from './middleware';
14
+ /**
15
+ * Middleware/handler for handling locale-based routing in the Next.js App Router.
16
+ * This middleware is responsible for extracting the locale from the request path and rewriting it if necessary.
17
+ * It also sets the locale header in the response.
18
+ * @public
19
+ */
20
+ export class LocaleMiddleware extends MiddlewareBase {
21
+ /**
22
+ * @param {LocaleMiddlewareConfig} config Locale middleware config
23
+ */
24
+ constructor(config) {
25
+ super(config);
26
+ this.config = config;
27
+ this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
28
+ try {
29
+ const { pathname } = req.nextUrl;
30
+ const localeFromPath = this.getLocaleFromPath(pathname);
31
+ const locale = localeFromPath || this.getLanguage(req, res);
32
+ debug.locale('locale middleware start: %o', {
33
+ pathname,
34
+ locale,
35
+ });
36
+ if (this.disabled(req, res)) {
37
+ debug.locale('skipped (locale middleware is disabled)');
38
+ return res;
39
+ }
40
+ if (!localeFromPath) {
41
+ // locale is not present in path, we need to rewrite to include the locale segment
42
+ const rewritePath = getLocaleRewrite(pathname, locale);
43
+ const response = this.rewrite(rewritePath, req, res);
44
+ this.setLocaleHeader(response, locale);
45
+ debug.locale('locale middleware end, with rewrite: %o', {
46
+ pathname,
47
+ locale,
48
+ rewritePath,
49
+ });
50
+ return response;
51
+ }
52
+ this.setLocaleHeader(res, locale);
53
+ debug.locale('locale middleware end, no rewrite: %o', {
54
+ pathname,
55
+ locale,
56
+ });
57
+ return res;
58
+ }
59
+ catch (error) {
60
+ console.log('Locale middleware failed:');
61
+ console.log(error);
62
+ return res;
63
+ }
64
+ });
65
+ }
66
+ disabled(req, res) {
67
+ // ignore files
68
+ return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
69
+ }
70
+ /**
71
+ * Extract locale from path
72
+ * @param {string} path request path
73
+ * @returns {string | undefined} the locale if found
74
+ */
75
+ getLocaleFromPath(path) {
76
+ return this.config.locales.find((locale) => path.includes(`/${locale}/`) || path.endsWith(`/${locale}`));
77
+ }
78
+ setLocaleHeader(res, locale) {
79
+ res.headers.set(LOCALE_HEADER_NAME, locale);
80
+ }
81
+ }
@@ -1,186 +1,189 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { SITE_KEY, SiteResolver } from '@sitecore-content-sdk/core/site';
11
- import { debug } from '@sitecore-content-sdk/core';
12
- import { NextResponse } from 'next/server';
13
- import { createGraphQLClientFactory, } from '@sitecore-content-sdk/core/client';
14
- export const REWRITE_HEADER_NAME = 'x-sc-rewrite';
15
- export const LOCALE_HEADER_NAME = 'x-sc-locale';
16
- /**
17
- * Middleware class to be extended by all middleware implementations
18
- */
19
- export class Middleware {
20
- }
21
- /**
22
- * Base middleware class with common methods
23
- */
24
- export class MiddlewareBase extends Middleware {
25
- constructor(config) {
26
- super();
27
- this.config = config;
28
- this.siteResolver = new SiteResolver(config.sites);
29
- this.defaultHostname = config.defaultHostname || 'localhost';
30
- }
31
- /**
32
- * Determines if mode is preview
33
- * @param {NextRequest} req request
34
- * @returns {boolean} is preview
35
- */
36
- isPreview(req) {
37
- var _a, _b;
38
- return !!(((_a = req.cookies.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _a === void 0 ? void 0 : _a.value) ||
39
- ((_b = req.cookies.get("__next_preview_data" /* PreviewCookies.PREVIEW_DATA */)) === null || _b === void 0 ? void 0 : _b.value));
40
- }
41
- /**
42
- * Determines if the application is using the app router based on the locale header
43
- * @param {NextResponse} res response
44
- * @returns {boolean} true if app router is used
45
- */
46
- isAppRouter(res) {
47
- return !!this.getLanguageFromHeader(res);
48
- }
49
- /**
50
- * Determines if the request is a Next.js (next/link) prefetch request
51
- * @param {NextRequest} req request
52
- * @returns {boolean} is prefetch
53
- */
54
- isPrefetch(req) {
55
- const isMobile = req.headers.get('sec-ch-ua-mobile') === '?1';
56
- const userAgent = req.headers.get('user-agent') || '';
57
- const isKnownPlatform = /iPhone|Mac|Linux|Windows|Android/i.test(userAgent);
58
- const isKnownDevice = isMobile || isKnownPlatform;
59
- const purpose = req.headers.get('purpose');
60
- const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
61
- const middlewarePrefetch = req.headers.get('x-middleware-prefetch');
62
- // Some real navigations on different devices may incorrectly include 'prefetch' headers.
63
- // To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
64
- if (isKnownDevice && middlewarePrefetch === '1') {
65
- return false;
66
- }
67
- // Otherwise, standard prefetch detection
68
- return purpose === 'prefetch' || nextRouterPrefetch === '1' || middlewarePrefetch === '1';
69
- }
70
- disabled(req, res) {
71
- const { pathname } = req.nextUrl;
72
- return (pathname.startsWith('/api/') || // Ignore Next.js API calls
73
- pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
74
- pathname.startsWith('/_next') || // Ignore next service calls
75
- (this.config.skip && this.config.skip(req, res)));
76
- }
77
- /**
78
- * Safely extract all headers for debug logging
79
- * Necessary to avoid middleware issue https://github.com/vercel/next.js/issues/39765
80
- * @param {Headers} incomingHeaders Incoming headers
81
- * @returns Object with headers as key/value pairs
82
- */
83
- extractDebugHeaders(incomingHeaders) {
84
- const headers = {};
85
- incomingHeaders.forEach((value, key) => (headers[key] = value));
86
- return headers;
87
- }
88
- /**
89
- * Provides used language
90
- * @param {NextRequest} req request
91
- * @param {NextResponse} res response
92
- * @returns {string} language
93
- */
94
- getLanguage(req, res) {
95
- return (this.getLanguageFromHeader(res) ||
96
- req.nextUrl.locale ||
97
- req.nextUrl.defaultLocale ||
98
- this.config.defaultLanguage ||
99
- 'en');
100
- }
101
- /**
102
- * Extract language from locale header of the response
103
- * set by LocaleMiddleware for app router application
104
- * @param {NextResponse} res response
105
- * @returns {string | undefined} language or undefined if not found
106
- */
107
- getLanguageFromHeader(res) {
108
- var _a;
109
- return (_a = res === null || res === void 0 ? void 0 : res.headers.get(LOCALE_HEADER_NAME)) !== null && _a !== void 0 ? _a : undefined;
110
- }
111
- /**
112
- * Extract 'host' header
113
- * @param {NextRequest} req request
114
- */
115
- getHostHeader(req) {
116
- var _a;
117
- return (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
118
- }
119
- /**
120
- * Get site information. If site name is stored in cookie, use it, otherwise resolve by hostname
121
- * - If site can't be resolved by site name cookie use default site info based on provided parameters
122
- * - If site can't be resolved by hostname throw an error
123
- * @param {NextRequest} req request
124
- * @param {NextResponse} [res] response
125
- * @returns {SiteInfo} site information
126
- */
127
- getSite(req, res) {
128
- var _a;
129
- const siteNameCookie = (_a = res === null || res === void 0 ? void 0 : res.cookies.get(SITE_KEY)) === null || _a === void 0 ? void 0 : _a.value;
130
- const hostname = this.getHostHeader(req) || this.defaultHostname;
131
- if (siteNameCookie) {
132
- // Usually we should be able to resolve site by cookie
133
- // in case of Sitecore Preview mode, there can be a case that new site was created
134
- // but it's not present in the sitemap, so we fallback to default site info
135
- return (this.siteResolver.getByName(siteNameCookie) || {
136
- name: siteNameCookie,
137
- language: this.getLanguage(req),
138
- hostName: '*',
139
- });
140
- }
141
- return this.siteResolver.getByHost(hostname);
142
- }
143
- getClientFactory(graphQLOptions) {
144
- return createGraphQLClientFactory(graphQLOptions);
145
- }
146
- /**
147
- * Create a rewrite response
148
- * @param {string} rewritePath the destionation path
149
- * @param {NextRequest} req the current request
150
- * @param {NextResponse} res the current response
151
- * @param {boolean} [skipHeader] don't write 'x-sc-rewrite' header
152
- */
153
- rewrite(rewritePath, req, res, skipHeader) {
154
- // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
155
- const rewriteUrl = req.nextUrl.clone();
156
- rewriteUrl.pathname = rewritePath;
157
- const response = NextResponse.rewrite(rewriteUrl, res);
158
- // Share rewrite path with following executed middlewares
159
- if (!skipHeader) {
160
- response.headers.set(REWRITE_HEADER_NAME, rewritePath);
161
- }
162
- return response;
163
- }
164
- }
165
- /**
166
- * Define a middleware with a list of middlewares
167
- * @param {Middleware[]} middlewares List of middlewares to execute
168
- */
169
- export const defineMiddleware = (...middlewares) => {
170
- return {
171
- /**
172
- * Execute all middlewares
173
- * @param {NextRequest} req request
174
- * @param {NextFetchEvent} ev fetch event
175
- * @param {NextResponse} [res] response
176
- */
177
- exec: (req, ev, res) => __awaiter(void 0, void 0, void 0, function* () {
178
- const response = res || NextResponse.next();
179
- debug.common('middleware start');
180
- const start = Date.now();
181
- const middlewareResponse = yield middlewares.reduce((p, middleware) => p.then((res) => middleware.handle(req, res, ev)), Promise.resolve(response));
182
- debug.common('middleware end in %dms', Date.now() - start);
183
- return middlewareResponse;
184
- }),
185
- };
186
- };
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { SITE_KEY, SiteResolver } from '@sitecore-content-sdk/core/site';
11
+ import { debug } from '@sitecore-content-sdk/core';
12
+ import { NextResponse } from 'next/server';
13
+ import { createGraphQLClientFactory, } from '@sitecore-content-sdk/core/client';
14
+ export const REWRITE_HEADER_NAME = 'x-sc-rewrite';
15
+ export const LOCALE_HEADER_NAME = 'x-sc-locale';
16
+ /**
17
+ * Middleware class to be extended by all middleware implementations
18
+ * @public
19
+ */
20
+ export class Middleware {
21
+ }
22
+ /**
23
+ * Base middleware class with common methods
24
+ * @public
25
+ */
26
+ export class MiddlewareBase extends Middleware {
27
+ constructor(config) {
28
+ super();
29
+ this.config = config;
30
+ this.siteResolver = new SiteResolver(config.sites);
31
+ this.defaultHostname = config.defaultHostname || 'localhost';
32
+ }
33
+ /**
34
+ * Determines if mode is preview
35
+ * @param {NextRequest} req request
36
+ * @returns {boolean} is preview
37
+ */
38
+ isPreview(req) {
39
+ var _a, _b;
40
+ return !!(((_a = req.cookies.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _a === void 0 ? void 0 : _a.value) ||
41
+ ((_b = req.cookies.get("__next_preview_data" /* PreviewCookies.PREVIEW_DATA */)) === null || _b === void 0 ? void 0 : _b.value));
42
+ }
43
+ /**
44
+ * Determines if the application is using the app router based on the locale header
45
+ * @param {NextResponse} res response
46
+ * @returns {boolean} true if app router is used
47
+ */
48
+ isAppRouter(res) {
49
+ return !!this.getLanguageFromHeader(res);
50
+ }
51
+ /**
52
+ * Determines if the request is a Next.js (next/link) prefetch request
53
+ * @param {NextRequest} req request
54
+ * @returns {boolean} is prefetch
55
+ */
56
+ isPrefetch(req) {
57
+ const isMobile = req.headers.get('sec-ch-ua-mobile') === '?1';
58
+ const userAgent = req.headers.get('user-agent') || '';
59
+ const isKnownPlatform = /iPhone|Mac|Linux|Windows|Android/i.test(userAgent);
60
+ const isKnownDevice = isMobile || isKnownPlatform;
61
+ const purpose = req.headers.get('purpose');
62
+ const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
63
+ const middlewarePrefetch = req.headers.get('x-middleware-prefetch');
64
+ // Some real navigations on different devices may incorrectly include 'prefetch' headers.
65
+ // To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
66
+ if (isKnownDevice && middlewarePrefetch === '1') {
67
+ return false;
68
+ }
69
+ // Otherwise, standard prefetch detection
70
+ return purpose === 'prefetch' || nextRouterPrefetch === '1' || middlewarePrefetch === '1';
71
+ }
72
+ disabled(req, res) {
73
+ const { pathname } = req.nextUrl;
74
+ return (pathname.startsWith('/api/') || // Ignore Next.js API calls
75
+ pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
76
+ pathname.startsWith('/_next') || // Ignore next service calls
77
+ (this.config.skip && this.config.skip(req, res)));
78
+ }
79
+ /**
80
+ * Safely extract all headers for debug logging
81
+ * Necessary to avoid middleware issue https://github.com/vercel/next.js/issues/39765
82
+ * @param {Headers} incomingHeaders Incoming headers
83
+ * @returns Object with headers as key/value pairs
84
+ */
85
+ extractDebugHeaders(incomingHeaders) {
86
+ const headers = {};
87
+ incomingHeaders.forEach((value, key) => (headers[key] = value));
88
+ return headers;
89
+ }
90
+ /**
91
+ * Provides used language
92
+ * @param {NextRequest} req request
93
+ * @param {NextResponse} res response
94
+ * @returns {string} language
95
+ */
96
+ getLanguage(req, res) {
97
+ return (this.getLanguageFromHeader(res) ||
98
+ req.nextUrl.locale ||
99
+ req.nextUrl.defaultLocale ||
100
+ this.config.defaultLanguage ||
101
+ 'en');
102
+ }
103
+ /**
104
+ * Extract language from locale header of the response
105
+ * set by LocaleMiddleware for app router application
106
+ * @param {NextResponse} res response
107
+ * @returns {string | undefined} language or undefined if not found
108
+ */
109
+ getLanguageFromHeader(res) {
110
+ var _a;
111
+ return (_a = res === null || res === void 0 ? void 0 : res.headers.get(LOCALE_HEADER_NAME)) !== null && _a !== void 0 ? _a : undefined;
112
+ }
113
+ /**
114
+ * Extract 'host' header
115
+ * @param {NextRequest} req request
116
+ */
117
+ getHostHeader(req) {
118
+ var _a;
119
+ return (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
120
+ }
121
+ /**
122
+ * Get site information. If site name is stored in cookie, use it, otherwise resolve by hostname
123
+ * - If site can't be resolved by site name cookie use default site info based on provided parameters
124
+ * - If site can't be resolved by hostname throw an error
125
+ * @param {NextRequest} req request
126
+ * @param {NextResponse} [res] response
127
+ * @returns {SiteInfo} site information
128
+ */
129
+ getSite(req, res) {
130
+ var _a;
131
+ const siteNameCookie = (_a = res === null || res === void 0 ? void 0 : res.cookies.get(SITE_KEY)) === null || _a === void 0 ? void 0 : _a.value;
132
+ const hostname = this.getHostHeader(req) || this.defaultHostname;
133
+ if (siteNameCookie) {
134
+ // Usually we should be able to resolve site by cookie
135
+ // in case of Sitecore Preview mode, there can be a case that new site was created
136
+ // but it's not present in the sitemap, so we fallback to default site info
137
+ return (this.siteResolver.getByName(siteNameCookie) || {
138
+ name: siteNameCookie,
139
+ language: this.getLanguage(req),
140
+ hostName: '*',
141
+ });
142
+ }
143
+ return this.siteResolver.getByHost(hostname);
144
+ }
145
+ getClientFactory(graphQLOptions) {
146
+ return createGraphQLClientFactory(graphQLOptions);
147
+ }
148
+ /**
149
+ * Create a rewrite response
150
+ * @param {string} rewritePath the destionation path
151
+ * @param {NextRequest} req the current request
152
+ * @param {NextResponse} res the current response
153
+ * @param {boolean} [skipHeader] don't write 'x-sc-rewrite' header
154
+ */
155
+ rewrite(rewritePath, req, res, skipHeader) {
156
+ // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
157
+ const rewriteUrl = req.nextUrl.clone();
158
+ rewriteUrl.pathname = rewritePath;
159
+ const response = NextResponse.rewrite(rewriteUrl, res);
160
+ // Share rewrite path with following executed middlewares
161
+ if (!skipHeader) {
162
+ response.headers.set(REWRITE_HEADER_NAME, rewritePath);
163
+ }
164
+ return response;
165
+ }
166
+ }
167
+ /**
168
+ * Define a middleware with a list of middlewares
169
+ * @param {Middleware[]} middlewares List of middlewares to execute
170
+ * @public
171
+ */
172
+ export const defineMiddleware = (...middlewares) => {
173
+ return {
174
+ /**
175
+ * Execute all middlewares
176
+ * @param {NextRequest} req request
177
+ * @param {NextFetchEvent} ev fetch event
178
+ * @param {NextResponse} [res] response
179
+ */
180
+ exec: (req, ev, res) => __awaiter(void 0, void 0, void 0, function* () {
181
+ const response = res || NextResponse.next();
182
+ debug.common('middleware start');
183
+ const start = Date.now();
184
+ const middlewareResponse = yield middlewares.reduce((p, middleware) => p.then((res) => middleware.handle(req, res, ev)), Promise.resolve(response));
185
+ debug.common('middleware end in %dms', Date.now() - start);
186
+ return middlewareResponse;
187
+ }),
188
+ };
189
+ };