@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,333 +1,333 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.generateMap = exports.defaultClientMapTemplate = void 0;
37
- const tools_1 = require("@sitecore-content-sdk/core/tools");
38
- const path = __importStar(require("path"));
39
- const fs = __importStar(require("fs"));
40
- // Common builder for Next.js component map content
41
- const prepareComponentsForMap = (components, opts) => {
42
- const groups = new Map();
43
- const getPrefix = (name) => {
44
- const index = name.indexOf('.');
45
- return index === -1 ? name : name.slice(0, index);
46
- };
47
- for (const file of components) {
48
- const dir = path.dirname(file.filePath).replace(/\\/g, '/');
49
- const prefix = getPrefix(file.componentName);
50
- const key = `${dir}::${prefix}`;
51
- let group = groups.get(key);
52
- if (!group) {
53
- group = { dir, prefix, neighbors: [] };
54
- groups.set(key, group);
55
- }
56
- if (file.componentName === prefix)
57
- group.base = file;
58
- else
59
- group.neighbors.push(file);
60
- }
61
- const entries = [];
62
- for (const group of groups.values()) {
63
- const imports = [];
64
- if (opts.includeVariants) {
65
- const spreads = [];
66
- for (const neighbor of group.neighbors) {
67
- imports.push(`import * as ${neighbor.moduleName} from '${neighbor.importPath}';`);
68
- spreads.push(`...${neighbor.moduleName}`);
69
- }
70
- if (group.base) {
71
- imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
72
- spreads.push(`...${group.base.moduleName}`);
73
- }
74
- const annotateClient = !!group.base && 'componentType' in group.base && group.base.componentType === 'client';
75
- let valueExpr;
76
- if (spreads.length) {
77
- valueExpr = spreads.join(', ');
78
- }
79
- else {
80
- valueExpr = group.base
81
- ? group.base.moduleName
82
- : group.neighbors[0].moduleName;
83
- }
84
- entries.push({
85
- key: group.prefix,
86
- imports,
87
- valueExpr,
88
- annotateClient,
89
- });
90
- }
91
- else {
92
- // Variants disabled: single entry per group
93
- if (group.base) {
94
- imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
95
- const annotateClient = 'componentType' in group.base && group.base.componentType === 'client';
96
- entries.push({
97
- key: group.prefix,
98
- imports,
99
- valueExpr: group.base.moduleName,
100
- annotateClient,
101
- });
102
- }
103
- else if (group.neighbors.length) {
104
- const first = group.neighbors[0];
105
- imports.push(`import * as ${first.moduleName} from '${first.importPath}';`);
106
- entries.push({
107
- key: group.prefix,
108
- imports,
109
- valueExpr: first.moduleName,
110
- annotateClient: false,
111
- });
112
- }
113
- }
114
- }
115
- return entries;
116
- };
117
- const buildNextjsMapContent = (entries, componentImports, options = {}) => {
118
- const { headerComment = "Below are built-in components that are available in the app, it's recommended to keep them as is", isClientMap = false, } = options;
119
- const wildcardImports = [];
120
- const namedImports = [];
121
- const builtInImports = options.builtInImports ||
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateMap = exports.defaultClientMapTemplate = void 0;
37
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
38
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs"));
40
+ const utils_1 = require("./templating/utils");
41
+ // Common builder for Next.js component map content
42
+ const prepareComponentsForMap = (components, opts) => {
43
+ const groups = new Map();
44
+ const getPrefix = (name) => {
45
+ const index = name.indexOf('.');
46
+ return index === -1 ? name : name.slice(0, index);
47
+ };
48
+ for (const file of components) {
49
+ const dir = path.dirname(file.filePath).replace(/\\/g, '/');
50
+ const prefix = getPrefix(file.componentName);
51
+ const key = `${dir}::${prefix}`;
52
+ let group = groups.get(key);
53
+ if (!group) {
54
+ group = { dir, prefix, neighbors: [] };
55
+ groups.set(key, group);
56
+ }
57
+ if (file.componentName === prefix)
58
+ group.base = file;
59
+ else
60
+ group.neighbors.push(file);
61
+ }
62
+ const entries = [];
63
+ for (const group of groups.values()) {
64
+ const imports = [];
65
+ if (opts.includeVariants) {
66
+ const spreads = [];
67
+ for (const neighbor of group.neighbors) {
68
+ imports.push(`import * as ${neighbor.moduleName} from '${neighbor.importPath}';`);
69
+ spreads.push(`...${neighbor.moduleName}`);
70
+ }
71
+ if (group.base) {
72
+ imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
73
+ spreads.push(`...${group.base.moduleName}`);
74
+ }
75
+ const annotateClient = !!group.base && 'componentType' in group.base && group.base.componentType === 'client';
76
+ let valueExpr;
77
+ if (spreads.length) {
78
+ valueExpr = spreads.join(', ');
79
+ }
80
+ else {
81
+ valueExpr = group.base ? group.base.moduleName : group.neighbors[0].moduleName;
82
+ }
83
+ entries.push({
84
+ key: group.prefix,
85
+ imports,
86
+ valueExpr,
87
+ annotateClient,
88
+ });
89
+ }
90
+ else {
91
+ // Variants disabled: single entry per group
92
+ if (group.base) {
93
+ imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
94
+ const annotateClient = 'componentType' in group.base && group.base.componentType === 'client';
95
+ entries.push({
96
+ key: group.prefix,
97
+ imports,
98
+ valueExpr: group.base.moduleName,
99
+ annotateClient,
100
+ });
101
+ }
102
+ else if (group.neighbors.length) {
103
+ const first = group.neighbors[0];
104
+ imports.push(`import * as ${first.moduleName} from '${first.importPath}';`);
105
+ entries.push({
106
+ key: group.prefix,
107
+ imports,
108
+ valueExpr: first.moduleName,
109
+ annotateClient: false,
110
+ });
111
+ }
112
+ }
113
+ }
114
+ return entries;
115
+ };
116
+ const buildNextjsMapContent = (entries, componentImports, options = {}) => {
117
+ const { headerComment = "Below are built-in components that are available in the app, it's recommended to keep them as is", isClientMap = false, } = options;
118
+ const wildcardImports = [];
119
+ const namedImports = [];
120
+ const builtInImports = options.builtInImports ||
122
121
  `
123
122
  import { BYOCWrapper, NextjsContentSdkComponent, FEaaSWrapper } from '@sitecore-content-sdk/nextjs';
124
123
  import { Form } from '@sitecore-content-sdk/nextjs';
125
- `;
126
- const builtInMapEntries = options.builtInMapEntries || [
127
- `['BYOCWrapper', BYOCWrapper]`,
128
- `['FEaaSWrapper', FEaaSWrapper]`,
129
- `['Form', Form]`,
130
- ];
131
- // Add per-entry imports
132
- entries.forEach((e) => wildcardImports.push(...e.imports));
133
- // Handle package imports
134
- componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
135
- if (pkg.importInfo.namedImports) {
136
- namedImports.push(`import { ${pkg.importInfo.namedImports.join(', ')} } from '${pkg.importInfo.importFrom}';`);
137
- }
138
- else {
139
- wildcardImports.push(`import * as ${pkg.importName} from '${pkg.importInfo.importFrom}';`);
140
- }
141
- });
142
- const importLines = [
143
- headerComment.includes('built-in') ? '// end of built-in components' : null,
144
- ...wildcardImports,
145
- ...namedImports,
146
- ].filter(Boolean);
147
- const importsSection = importLines.length ? `\n${importLines.join('\n')}` : '';
148
- // Build entry lines (package named imports are appended below)
149
- const componentMapEntries = builtInMapEntries;
150
- for (const e of entries) {
151
- const value = !isClientMap && e.annotateClient
152
- ? `{ ${e.valueExpr}, componentType: 'client' }`
153
- : e.valueExpr.includes('...')
154
- ? `{ ${e.valueExpr} }`
155
- : e.valueExpr;
156
- componentMapEntries.push(`['${e.key}', ${value}]`);
157
- }
158
- // Add package-based entries
159
- componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
160
- if (pkg.importInfo.namedImports) {
161
- pkg.importInfo.namedImports.forEach((name) => {
162
- componentMapEntries.push(`['${name}', ${name}]`);
163
- });
164
- }
165
- else {
166
- componentMapEntries.push(`['${pkg.importName}', ${pkg.importName}]`);
167
- }
168
- });
124
+ `;
125
+ const builtInMapEntries = options.builtInMapEntries || [
126
+ `['BYOCWrapper', BYOCWrapper]`,
127
+ `['FEaaSWrapper', FEaaSWrapper]`,
128
+ `['Form', Form]`,
129
+ ];
130
+ // Add per-entry imports
131
+ entries.forEach((e) => wildcardImports.push(...e.imports));
132
+ // Handle package imports
133
+ componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
134
+ if (pkg.importInfo.namedImports) {
135
+ namedImports.push(`import { ${pkg.importInfo.namedImports.join(', ')} } from '${pkg.importInfo.importFrom}';`);
136
+ }
137
+ else {
138
+ wildcardImports.push(`import * as ${pkg.importName} from '${pkg.importInfo.importFrom}';`);
139
+ }
140
+ });
141
+ const importLines = [
142
+ headerComment.includes('built-in') ? '// end of built-in components' : null,
143
+ ...wildcardImports,
144
+ ...namedImports,
145
+ ].filter(Boolean);
146
+ const importsSection = importLines.length ? `\n${importLines.join('\n')}` : '';
147
+ // Build entry lines (package named imports are appended below)
148
+ const componentMapEntries = builtInMapEntries;
149
+ for (const e of entries) {
150
+ const value = !isClientMap && e.annotateClient
151
+ ? `{ ${e.valueExpr}, componentType: 'client' }`
152
+ : e.valueExpr.includes('...')
153
+ ? `{ ${e.valueExpr} }`
154
+ : e.valueExpr;
155
+ componentMapEntries.push(`['${e.key}', ${value}]`);
156
+ }
157
+ // Add package-based entries
158
+ componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
159
+ if (pkg.importInfo.namedImports) {
160
+ pkg.importInfo.namedImports.forEach((name) => {
161
+ componentMapEntries.push(`['${name}', ${name}]`);
162
+ });
163
+ }
164
+ else {
165
+ componentMapEntries.push(`['${pkg.importName}', ${pkg.importName}]`);
166
+ }
167
+ });
169
168
  return `// ${headerComment}
170
169
  ${builtInImports}${importsSection}
171
170
 
172
171
  export const componentMap = new Map<string, NextjsContentSdkComponent>([
173
- ${componentMapEntries
174
- .map((component) => {
175
- return ` ${component},\n`;
176
- })
172
+ ${componentMapEntries
173
+ .map((component) => {
174
+ return ` ${component},\n`;
175
+ })
177
176
  .join('')}]);
178
177
 
179
178
  export default componentMap;
180
- `;
181
- };
182
- // default client template
183
- const defaultClientMapTemplate = (components, componentImports, ctx) => {
184
- var _a, _b;
179
+ `;
180
+ };
181
+ // default client template
182
+ const defaultClientMapTemplate = (components, componentImports, ctx) => {
183
+ var _a, _b;
185
184
  const builtInImports = `
186
185
  import { BYOCClientWrapper, NextjsContentSdkComponent, FEaaSClientWrapper } from '@sitecore-content-sdk/nextjs';
187
186
  import { Form } from '@sitecore-content-sdk/nextjs';
188
- `;
189
- const builtInMapEntries = [
190
- `['BYOCWrapper', BYOCClientWrapper]`,
191
- `['FEaaSWrapper', FEaaSClientWrapper]`,
192
- `['Form', Form]`,
193
- ];
194
- const entries = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.entries) !== null && _a !== void 0 ? _a : prepareComponentsForMap(components, {
195
- includeVariants: (_b = ctx === null || ctx === void 0 ? void 0 : ctx.includeVariants) !== null && _b !== void 0 ? _b : true,
196
- });
197
- return buildNextjsMapContent(entries, componentImports, {
198
- headerComment: 'Client-safe component map for App Router',
199
- isClientMap: true,
200
- builtInImports,
201
- builtInMapEntries,
202
- });
203
- };
204
- exports.defaultClientMapTemplate = defaultClientMapTemplate;
205
- // Collect components from specified paths, apply exclude and type filter, and prepare map entries.
206
- const collectComponents = (opts) => {
207
- const withTypes = (0, tools_1.getComponentListWithTypes)(opts.paths, opts.exclude, opts.includeVariants);
208
- const filtered = opts.filter === 'client'
209
- ? (0, tools_1.filterComponentsByType)(withTypes, ['client', 'universal'])
210
- : withTypes;
211
- for (const file of filtered) {
212
- console.debug(`Registering Content SDK component ${file.componentName}`);
213
- }
214
- return {
215
- raw: filtered,
216
- entries: prepareComponentsForMap(filtered, { includeVariants: opts.includeVariants }),
217
- };
218
- };
219
- /**
220
- * Generate and write componentMap.ts files based on provided params.
221
- *
222
- * When clientComponentMap is true, generates:
223
- * - component-map.ts : Full component map with all components (server, client, universal)
224
- * - component-map.client.ts : Client-safe map with only client + universal components
225
- *
226
- * When clientComponentMap is false, generates:
227
- * - component-map.ts : Single component map (traditional behavior)
228
- *
229
- * When includeVariants is true (in either mode):
230
- * - Includes component **variants** in the generated map(s) alongside base components
231
- * - Preserves the same client/server filtering rules (variants obey clientComponentMap filtering)
232
- * - Variant entries are emitted using the same naming/keys convention as their base components
233
- *
234
- * Template Customization:
235
- * - mapTemplate: Custom template for main component map (works for both single and dual map modes)
236
- * - clientMapTemplate: Custom template for client component map (only used when clientComponentMap is true)
237
- * @param {GenerateMapArgs} param0 params for generateMap
238
- */
239
- const generateMap = ({ paths, destination = '.sitecore', exclude, componentImports, mapTemplate, clientMapTemplate, clientComponentMap, includeVariants = true, }) => {
240
- const isAppRouter = (0, tools_1.detectRouterType)() === 'app';
241
- const shouldGenerateClientMap = clientComponentMap !== null && clientComponentMap !== void 0 ? clientComponentMap : isAppRouter;
242
- if (shouldGenerateClientMap) {
243
- // App Router case, main map
244
- const getComponents = collectComponents({ paths, exclude, includeVariants, filter: 'all' });
245
- let mainContent;
246
- if (mapTemplate) {
247
- mainContent = mapTemplate(getComponents.raw, componentImports, {
248
- entries: getComponents.entries,
249
- includeVariants,
250
- isClientMap: false,
251
- });
252
- }
253
- else {
254
- // default app router server map
187
+ `;
188
+ const builtInMapEntries = [
189
+ `['BYOCWrapper', BYOCClientWrapper]`,
190
+ `['FEaaSWrapper', FEaaSClientWrapper]`,
191
+ `['Form', Form]`,
192
+ ];
193
+ const entries = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.entries) !== null && _a !== void 0 ? _a : prepareComponentsForMap(components, {
194
+ includeVariants: (_b = ctx === null || ctx === void 0 ? void 0 : ctx.includeVariants) !== null && _b !== void 0 ? _b : true,
195
+ });
196
+ return buildNextjsMapContent(entries, componentImports, {
197
+ headerComment: 'Client-safe component map for App Router',
198
+ isClientMap: true,
199
+ builtInImports,
200
+ builtInMapEntries,
201
+ });
202
+ };
203
+ exports.defaultClientMapTemplate = defaultClientMapTemplate;
204
+ // Collect components from specified paths, apply exclude and type filter, and prepare map entries.
205
+ const collectComponents = (opts) => {
206
+ const withTypes = (0, utils_1.getComponentListWithTypes)(opts.paths, opts.exclude, opts.includeVariants);
207
+ const filtered = opts.filter === 'client'
208
+ ? (0, tools_1.filterComponentsByType)(withTypes, ['client', 'universal'])
209
+ : withTypes;
210
+ for (const file of filtered) {
211
+ console.debug(`Registering Content SDK component ${file.componentName}`);
212
+ }
213
+ return {
214
+ raw: filtered,
215
+ entries: prepareComponentsForMap(filtered, { includeVariants: opts.includeVariants }),
216
+ };
217
+ };
218
+ /**
219
+ * Generate and write componentMap.ts files based on provided params.
220
+ *
221
+ * When clientComponentMap is true, generates:
222
+ * - component-map.ts : Full component map with all components (server, client, universal)
223
+ * - component-map.client.ts : Client-safe map with only client + universal components
224
+ *
225
+ * When clientComponentMap is false, generates:
226
+ * - component-map.ts : Single component map (traditional behavior)
227
+ *
228
+ * When includeVariants is true (in either mode):
229
+ * - Includes component **variants** in the generated map(s) alongside base components
230
+ * - Preserves the same client/server filtering rules (variants obey clientComponentMap filtering)
231
+ * - Variant entries are emitted using the same naming/keys convention as their base components
232
+ *
233
+ * Template Customization:
234
+ * - mapTemplate: Custom template for main component map (works for both single and dual map modes)
235
+ * - clientMapTemplate: Custom template for client component map (only used when clientComponentMap is true)
236
+ * @param {GenerateMapArgs} params - The parameters for the generateMap function.
237
+ * @public
238
+ */
239
+ const generateMap = ({ paths, destination = '.sitecore', exclude, componentImports, mapTemplate, clientMapTemplate, clientComponentMap, includeVariants = true, }) => {
240
+ const isAppRouter = (0, utils_1.detectRouterType)() === 'app';
241
+ const shouldGenerateClientMap = clientComponentMap !== null && clientComponentMap !== void 0 ? clientComponentMap : isAppRouter;
242
+ if (shouldGenerateClientMap) {
243
+ // App Router case, main map
244
+ const getComponents = collectComponents({ paths, exclude, includeVariants, filter: 'all' });
245
+ let mainContent;
246
+ if (mapTemplate) {
247
+ mainContent = mapTemplate(getComponents.raw, componentImports, {
248
+ entries: getComponents.entries,
249
+ includeVariants,
250
+ isClientMap: false,
251
+ });
252
+ }
253
+ else {
254
+ // default app router server map
255
255
  const builtInImports = `
256
256
  import { BYOCServerWrapper, NextjsContentSdkComponent, FEaaSServerWrapper } from '@sitecore-content-sdk/nextjs';
257
257
  import { Form } from '@sitecore-content-sdk/nextjs';
258
- `;
259
- const builtInMapEntries = [
260
- `['BYOCWrapper', BYOCServerWrapper]`,
261
- `['FEaaSWrapper', FEaaSServerWrapper]`,
262
- `['Form', Form]`,
263
- ];
264
- mainContent = buildNextjsMapContent(getComponents.entries, componentImports, {
265
- headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
266
- isClientMap: false,
267
- builtInImports,
268
- builtInMapEntries,
269
- });
270
- }
271
- fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), mainContent, 'utf8');
272
- // App Router, client map
273
- const clientComponents = collectComponents({
274
- paths,
275
- exclude,
276
- includeVariants,
277
- filter: 'client',
278
- });
279
- const clientTemplate = clientMapTemplate || exports.defaultClientMapTemplate;
280
- let clientContent;
281
- if (clientTemplate.length >= 2) {
282
- clientContent = clientTemplate(clientComponents.raw, componentImports);
283
- }
284
- else {
285
- clientContent = clientTemplate(clientComponents.raw, componentImports, {
286
- entries: clientComponents.entries,
287
- includeVariants,
288
- isClientMap: true,
289
- });
290
- }
291
- fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.client.ts'), clientContent, 'utf8');
292
- }
293
- else {
294
- // Either in pages/app router or clientComponentMap = false
295
- const components = collectComponents({
296
- paths,
297
- exclude,
298
- includeVariants,
299
- filter: 'all',
300
- }).entries;
301
- const content = buildNextjsMapContent(components, componentImports, {
302
- headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
303
- isClientMap: false,
304
- });
305
- fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), content, 'utf8');
306
- // For App Router compatibility, always generate client map file even when clientComponentMap is false
307
- // When clientComponentMap is false, only include built-in components (no custom client components)
308
- if (shouldGenerateClientMap || isAppRouter) {
309
- const clientMapTemplateToUse = clientMapTemplate || exports.defaultClientMapTemplate;
310
- const components = collectComponents({ paths: [], includeVariants, filter: 'all' });
311
- let clientMapContent;
312
- if (clientMapTemplateToUse.length >= 2) {
313
- clientMapContent = clientMapTemplateToUse([], componentImports);
314
- }
315
- else {
316
- clientMapContent = clientMapTemplateToUse([], componentImports, {
317
- entries: components.entries,
318
- includeVariants,
319
- isClientMap: true,
320
- });
321
- }
322
- const clientMapFile = path.join(process.cwd(), destination, 'component-map.client.ts');
323
- try {
324
- fs.writeFileSync(clientMapFile, clientMapContent, { encoding: 'utf8' });
325
- }
326
- catch (error) {
327
- console.error(`Client Component Map generation failed. Error writing to file ${destination}:`, error);
328
- throw error;
329
- }
330
- }
331
- }
332
- };
333
- exports.generateMap = generateMap;
258
+ `;
259
+ const builtInMapEntries = [
260
+ `['BYOCWrapper', BYOCServerWrapper]`,
261
+ `['FEaaSWrapper', FEaaSServerWrapper]`,
262
+ `['Form', Form]`,
263
+ ];
264
+ mainContent = buildNextjsMapContent(getComponents.entries, componentImports, {
265
+ headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
266
+ isClientMap: false,
267
+ builtInImports,
268
+ builtInMapEntries,
269
+ });
270
+ }
271
+ fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), mainContent, 'utf8');
272
+ // App Router, client map
273
+ const clientComponents = collectComponents({
274
+ paths,
275
+ exclude,
276
+ includeVariants,
277
+ filter: 'client',
278
+ });
279
+ const clientTemplate = clientMapTemplate || exports.defaultClientMapTemplate;
280
+ let clientContent;
281
+ if (clientTemplate.length >= 2) {
282
+ clientContent = clientTemplate(clientComponents.raw, componentImports);
283
+ }
284
+ else {
285
+ clientContent = clientTemplate(clientComponents.raw, componentImports, {
286
+ entries: clientComponents.entries,
287
+ includeVariants,
288
+ isClientMap: true,
289
+ });
290
+ }
291
+ fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.client.ts'), clientContent, 'utf8');
292
+ }
293
+ else {
294
+ // Either in pages/app router or clientComponentMap = false
295
+ const components = collectComponents({
296
+ paths,
297
+ exclude,
298
+ includeVariants,
299
+ filter: 'all',
300
+ }).entries;
301
+ const content = buildNextjsMapContent(components, componentImports, {
302
+ headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
303
+ isClientMap: false,
304
+ });
305
+ fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), content, 'utf8');
306
+ // For App Router compatibility, always generate client map file even when clientComponentMap is false
307
+ // When clientComponentMap is false, only include built-in components (no custom client components)
308
+ if (shouldGenerateClientMap || isAppRouter) {
309
+ const clientMapTemplateToUse = clientMapTemplate || exports.defaultClientMapTemplate;
310
+ const components = collectComponents({ paths: [], includeVariants, filter: 'all' });
311
+ let clientMapContent;
312
+ if (clientMapTemplateToUse.length >= 2) {
313
+ clientMapContent = clientMapTemplateToUse([], componentImports);
314
+ }
315
+ else {
316
+ clientMapContent = clientMapTemplateToUse([], componentImports, {
317
+ entries: components.entries,
318
+ includeVariants,
319
+ isClientMap: true,
320
+ });
321
+ }
322
+ const clientMapFile = path.join(process.cwd(), destination, 'component-map.client.ts');
323
+ try {
324
+ fs.writeFileSync(clientMapFile, clientMapContent, { encoding: 'utf8' });
325
+ }
326
+ catch (error) {
327
+ console.error(`Client Component Map generation failed. Error writing to file ${destination}:`, error);
328
+ throw error;
329
+ }
330
+ }
331
+ }
332
+ };
333
+ exports.generateMap = generateMap;