@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,192 +1,195 @@
1
- "use strict";
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
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.defineMiddleware = exports.MiddlewareBase = exports.Middleware = exports.LOCALE_HEADER_NAME = exports.REWRITE_HEADER_NAME = void 0;
13
- const site_1 = require("@sitecore-content-sdk/core/site");
14
- const core_1 = require("@sitecore-content-sdk/core");
15
- const server_1 = require("next/server");
16
- const client_1 = require("@sitecore-content-sdk/core/client");
17
- exports.REWRITE_HEADER_NAME = 'x-sc-rewrite';
18
- exports.LOCALE_HEADER_NAME = 'x-sc-locale';
19
- /**
20
- * Middleware class to be extended by all middleware implementations
21
- */
22
- class Middleware {
23
- }
24
- exports.Middleware = Middleware;
25
- /**
26
- * Base middleware class with common methods
27
- */
28
- class MiddlewareBase extends Middleware {
29
- constructor(config) {
30
- super();
31
- this.config = config;
32
- this.siteResolver = new site_1.SiteResolver(config.sites);
33
- this.defaultHostname = config.defaultHostname || 'localhost';
34
- }
35
- /**
36
- * Determines if mode is preview
37
- * @param {NextRequest} req request
38
- * @returns {boolean} is preview
39
- */
40
- isPreview(req) {
41
- var _a, _b;
42
- return !!(((_a = req.cookies.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _a === void 0 ? void 0 : _a.value) ||
43
- ((_b = req.cookies.get("__next_preview_data" /* PreviewCookies.PREVIEW_DATA */)) === null || _b === void 0 ? void 0 : _b.value));
44
- }
45
- /**
46
- * Determines if the application is using the app router based on the locale header
47
- * @param {NextResponse} res response
48
- * @returns {boolean} true if app router is used
49
- */
50
- isAppRouter(res) {
51
- return !!this.getLanguageFromHeader(res);
52
- }
53
- /**
54
- * Determines if the request is a Next.js (next/link) prefetch request
55
- * @param {NextRequest} req request
56
- * @returns {boolean} is prefetch
57
- */
58
- isPrefetch(req) {
59
- const isMobile = req.headers.get('sec-ch-ua-mobile') === '?1';
60
- const userAgent = req.headers.get('user-agent') || '';
61
- const isKnownPlatform = /iPhone|Mac|Linux|Windows|Android/i.test(userAgent);
62
- const isKnownDevice = isMobile || isKnownPlatform;
63
- const purpose = req.headers.get('purpose');
64
- const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
65
- const middlewarePrefetch = req.headers.get('x-middleware-prefetch');
66
- // Some real navigations on different devices may incorrectly include 'prefetch' headers.
67
- // To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
68
- if (isKnownDevice && middlewarePrefetch === '1') {
69
- return false;
70
- }
71
- // Otherwise, standard prefetch detection
72
- return purpose === 'prefetch' || nextRouterPrefetch === '1' || middlewarePrefetch === '1';
73
- }
74
- disabled(req, res) {
75
- const { pathname } = req.nextUrl;
76
- return (pathname.startsWith('/api/') || // Ignore Next.js API calls
77
- pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
78
- pathname.startsWith('/_next') || // Ignore next service calls
79
- (this.config.skip && this.config.skip(req, res)));
80
- }
81
- /**
82
- * Safely extract all headers for debug logging
83
- * Necessary to avoid middleware issue https://github.com/vercel/next.js/issues/39765
84
- * @param {Headers} incomingHeaders Incoming headers
85
- * @returns Object with headers as key/value pairs
86
- */
87
- extractDebugHeaders(incomingHeaders) {
88
- const headers = {};
89
- incomingHeaders.forEach((value, key) => (headers[key] = value));
90
- return headers;
91
- }
92
- /**
93
- * Provides used language
94
- * @param {NextRequest} req request
95
- * @param {NextResponse} res response
96
- * @returns {string} language
97
- */
98
- getLanguage(req, res) {
99
- return (this.getLanguageFromHeader(res) ||
100
- req.nextUrl.locale ||
101
- req.nextUrl.defaultLocale ||
102
- this.config.defaultLanguage ||
103
- 'en');
104
- }
105
- /**
106
- * Extract language from locale header of the response
107
- * set by LocaleMiddleware for app router application
108
- * @param {NextResponse} res response
109
- * @returns {string | undefined} language or undefined if not found
110
- */
111
- getLanguageFromHeader(res) {
112
- var _a;
113
- return (_a = res === null || res === void 0 ? void 0 : res.headers.get(exports.LOCALE_HEADER_NAME)) !== null && _a !== void 0 ? _a : undefined;
114
- }
115
- /**
116
- * Extract 'host' header
117
- * @param {NextRequest} req request
118
- */
119
- getHostHeader(req) {
120
- var _a;
121
- return (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
122
- }
123
- /**
124
- * Get site information. If site name is stored in cookie, use it, otherwise resolve by hostname
125
- * - If site can't be resolved by site name cookie use default site info based on provided parameters
126
- * - If site can't be resolved by hostname throw an error
127
- * @param {NextRequest} req request
128
- * @param {NextResponse} [res] response
129
- * @returns {SiteInfo} site information
130
- */
131
- getSite(req, res) {
132
- var _a;
133
- const siteNameCookie = (_a = res === null || res === void 0 ? void 0 : res.cookies.get(site_1.SITE_KEY)) === null || _a === void 0 ? void 0 : _a.value;
134
- const hostname = this.getHostHeader(req) || this.defaultHostname;
135
- if (siteNameCookie) {
136
- // Usually we should be able to resolve site by cookie
137
- // in case of Sitecore Preview mode, there can be a case that new site was created
138
- // but it's not present in the sitemap, so we fallback to default site info
139
- return (this.siteResolver.getByName(siteNameCookie) || {
140
- name: siteNameCookie,
141
- language: this.getLanguage(req),
142
- hostName: '*',
143
- });
144
- }
145
- return this.siteResolver.getByHost(hostname);
146
- }
147
- getClientFactory(graphQLOptions) {
148
- return (0, client_1.createGraphQLClientFactory)(graphQLOptions);
149
- }
150
- /**
151
- * Create a rewrite response
152
- * @param {string} rewritePath the destionation path
153
- * @param {NextRequest} req the current request
154
- * @param {NextResponse} res the current response
155
- * @param {boolean} [skipHeader] don't write 'x-sc-rewrite' header
156
- */
157
- rewrite(rewritePath, req, res, skipHeader) {
158
- // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
159
- const rewriteUrl = req.nextUrl.clone();
160
- rewriteUrl.pathname = rewritePath;
161
- const response = server_1.NextResponse.rewrite(rewriteUrl, res);
162
- // Share rewrite path with following executed middlewares
163
- if (!skipHeader) {
164
- response.headers.set(exports.REWRITE_HEADER_NAME, rewritePath);
165
- }
166
- return response;
167
- }
168
- }
169
- exports.MiddlewareBase = MiddlewareBase;
170
- /**
171
- * Define a middleware with a list of middlewares
172
- * @param {Middleware[]} middlewares List of middlewares to execute
173
- */
174
- const defineMiddleware = (...middlewares) => {
175
- return {
176
- /**
177
- * Execute all middlewares
178
- * @param {NextRequest} req request
179
- * @param {NextFetchEvent} ev fetch event
180
- * @param {NextResponse} [res] response
181
- */
182
- exec: (req, ev, res) => __awaiter(void 0, void 0, void 0, function* () {
183
- const response = res || server_1.NextResponse.next();
184
- core_1.debug.common('middleware start');
185
- const start = Date.now();
186
- const middlewareResponse = yield middlewares.reduce((p, middleware) => p.then((res) => middleware.handle(req, res, ev)), Promise.resolve(response));
187
- core_1.debug.common('middleware end in %dms', Date.now() - start);
188
- return middlewareResponse;
189
- }),
190
- };
191
- };
192
- exports.defineMiddleware = defineMiddleware;
1
+ "use strict";
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.defineMiddleware = exports.MiddlewareBase = exports.Middleware = exports.LOCALE_HEADER_NAME = exports.REWRITE_HEADER_NAME = void 0;
13
+ const site_1 = require("@sitecore-content-sdk/core/site");
14
+ const core_1 = require("@sitecore-content-sdk/core");
15
+ const server_1 = require("next/server");
16
+ const client_1 = require("@sitecore-content-sdk/core/client");
17
+ exports.REWRITE_HEADER_NAME = 'x-sc-rewrite';
18
+ exports.LOCALE_HEADER_NAME = 'x-sc-locale';
19
+ /**
20
+ * Middleware class to be extended by all middleware implementations
21
+ * @public
22
+ */
23
+ class Middleware {
24
+ }
25
+ exports.Middleware = Middleware;
26
+ /**
27
+ * Base middleware class with common methods
28
+ * @public
29
+ */
30
+ class MiddlewareBase extends Middleware {
31
+ constructor(config) {
32
+ super();
33
+ this.config = config;
34
+ this.siteResolver = new site_1.SiteResolver(config.sites);
35
+ this.defaultHostname = config.defaultHostname || 'localhost';
36
+ }
37
+ /**
38
+ * Determines if mode is preview
39
+ * @param {NextRequest} req request
40
+ * @returns {boolean} is preview
41
+ */
42
+ isPreview(req) {
43
+ var _a, _b;
44
+ return !!(((_a = req.cookies.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _a === void 0 ? void 0 : _a.value) ||
45
+ ((_b = req.cookies.get("__next_preview_data" /* PreviewCookies.PREVIEW_DATA */)) === null || _b === void 0 ? void 0 : _b.value));
46
+ }
47
+ /**
48
+ * Determines if the application is using the app router based on the locale header
49
+ * @param {NextResponse} res response
50
+ * @returns {boolean} true if app router is used
51
+ */
52
+ isAppRouter(res) {
53
+ return !!this.getLanguageFromHeader(res);
54
+ }
55
+ /**
56
+ * Determines if the request is a Next.js (next/link) prefetch request
57
+ * @param {NextRequest} req request
58
+ * @returns {boolean} is prefetch
59
+ */
60
+ isPrefetch(req) {
61
+ const isMobile = req.headers.get('sec-ch-ua-mobile') === '?1';
62
+ const userAgent = req.headers.get('user-agent') || '';
63
+ const isKnownPlatform = /iPhone|Mac|Linux|Windows|Android/i.test(userAgent);
64
+ const isKnownDevice = isMobile || isKnownPlatform;
65
+ const purpose = req.headers.get('purpose');
66
+ const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
67
+ const middlewarePrefetch = req.headers.get('x-middleware-prefetch');
68
+ // Some real navigations on different devices may incorrectly include 'prefetch' headers.
69
+ // To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
70
+ if (isKnownDevice && middlewarePrefetch === '1') {
71
+ return false;
72
+ }
73
+ // Otherwise, standard prefetch detection
74
+ return purpose === 'prefetch' || nextRouterPrefetch === '1' || middlewarePrefetch === '1';
75
+ }
76
+ disabled(req, res) {
77
+ const { pathname } = req.nextUrl;
78
+ return (pathname.startsWith('/api/') || // Ignore Next.js API calls
79
+ pathname.startsWith('/sitecore/') || // Ignore Sitecore API calls
80
+ pathname.startsWith('/_next') || // Ignore next service calls
81
+ (this.config.skip && this.config.skip(req, res)));
82
+ }
83
+ /**
84
+ * Safely extract all headers for debug logging
85
+ * Necessary to avoid middleware issue https://github.com/vercel/next.js/issues/39765
86
+ * @param {Headers} incomingHeaders Incoming headers
87
+ * @returns Object with headers as key/value pairs
88
+ */
89
+ extractDebugHeaders(incomingHeaders) {
90
+ const headers = {};
91
+ incomingHeaders.forEach((value, key) => (headers[key] = value));
92
+ return headers;
93
+ }
94
+ /**
95
+ * Provides used language
96
+ * @param {NextRequest} req request
97
+ * @param {NextResponse} res response
98
+ * @returns {string} language
99
+ */
100
+ getLanguage(req, res) {
101
+ return (this.getLanguageFromHeader(res) ||
102
+ req.nextUrl.locale ||
103
+ req.nextUrl.defaultLocale ||
104
+ this.config.defaultLanguage ||
105
+ 'en');
106
+ }
107
+ /**
108
+ * Extract language from locale header of the response
109
+ * set by LocaleMiddleware for app router application
110
+ * @param {NextResponse} res response
111
+ * @returns {string | undefined} language or undefined if not found
112
+ */
113
+ getLanguageFromHeader(res) {
114
+ var _a;
115
+ return (_a = res === null || res === void 0 ? void 0 : res.headers.get(exports.LOCALE_HEADER_NAME)) !== null && _a !== void 0 ? _a : undefined;
116
+ }
117
+ /**
118
+ * Extract 'host' header
119
+ * @param {NextRequest} req request
120
+ */
121
+ getHostHeader(req) {
122
+ var _a;
123
+ return (_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0];
124
+ }
125
+ /**
126
+ * Get site information. If site name is stored in cookie, use it, otherwise resolve by hostname
127
+ * - If site can't be resolved by site name cookie use default site info based on provided parameters
128
+ * - If site can't be resolved by hostname throw an error
129
+ * @param {NextRequest} req request
130
+ * @param {NextResponse} [res] response
131
+ * @returns {SiteInfo} site information
132
+ */
133
+ getSite(req, res) {
134
+ var _a;
135
+ const siteNameCookie = (_a = res === null || res === void 0 ? void 0 : res.cookies.get(site_1.SITE_KEY)) === null || _a === void 0 ? void 0 : _a.value;
136
+ const hostname = this.getHostHeader(req) || this.defaultHostname;
137
+ if (siteNameCookie) {
138
+ // Usually we should be able to resolve site by cookie
139
+ // in case of Sitecore Preview mode, there can be a case that new site was created
140
+ // but it's not present in the sitemap, so we fallback to default site info
141
+ return (this.siteResolver.getByName(siteNameCookie) || {
142
+ name: siteNameCookie,
143
+ language: this.getLanguage(req),
144
+ hostName: '*',
145
+ });
146
+ }
147
+ return this.siteResolver.getByHost(hostname);
148
+ }
149
+ getClientFactory(graphQLOptions) {
150
+ return (0, client_1.createGraphQLClientFactory)(graphQLOptions);
151
+ }
152
+ /**
153
+ * Create a rewrite response
154
+ * @param {string} rewritePath the destionation path
155
+ * @param {NextRequest} req the current request
156
+ * @param {NextResponse} res the current response
157
+ * @param {boolean} [skipHeader] don't write 'x-sc-rewrite' header
158
+ */
159
+ rewrite(rewritePath, req, res, skipHeader) {
160
+ // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
161
+ const rewriteUrl = req.nextUrl.clone();
162
+ rewriteUrl.pathname = rewritePath;
163
+ const response = server_1.NextResponse.rewrite(rewriteUrl, res);
164
+ // Share rewrite path with following executed middlewares
165
+ if (!skipHeader) {
166
+ response.headers.set(exports.REWRITE_HEADER_NAME, rewritePath);
167
+ }
168
+ return response;
169
+ }
170
+ }
171
+ exports.MiddlewareBase = MiddlewareBase;
172
+ /**
173
+ * Define a middleware with a list of middlewares
174
+ * @param {Middleware[]} middlewares List of middlewares to execute
175
+ * @public
176
+ */
177
+ const defineMiddleware = (...middlewares) => {
178
+ return {
179
+ /**
180
+ * Execute all middlewares
181
+ * @param {NextRequest} req request
182
+ * @param {NextFetchEvent} ev fetch event
183
+ * @param {NextResponse} [res] response
184
+ */
185
+ exec: (req, ev, res) => __awaiter(void 0, void 0, void 0, function* () {
186
+ const response = res || server_1.NextResponse.next();
187
+ core_1.debug.common('middleware start');
188
+ const start = Date.now();
189
+ const middlewareResponse = yield middlewares.reduce((p, middleware) => p.then((res) => middleware.handle(req, res, ev)), Promise.resolve(response));
190
+ core_1.debug.common('middleware end in %dms', Date.now() - start);
191
+ return middlewareResponse;
192
+ }),
193
+ };
194
+ };
195
+ exports.defineMiddleware = defineMiddleware;