@sitecore-content-sdk/core 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 (342) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/cache-client.js +55 -54
  3. package/dist/cjs/client/constants.js +7 -7
  4. package/dist/cjs/client/edge-proxy.js +24 -22
  5. package/dist/cjs/client/index.js +15 -15
  6. package/dist/cjs/client/models.js +2 -2
  7. package/dist/cjs/client/sitecore-client.js +421 -419
  8. package/dist/cjs/client/utils.js +47 -46
  9. package/dist/cjs/config/define-config.js +194 -193
  10. package/dist/cjs/config/index.js +7 -7
  11. package/dist/cjs/config/models.js +12 -11
  12. package/dist/cjs/config-cli/define-cli-config.js +23 -22
  13. package/dist/cjs/config-cli/index.js +7 -7
  14. package/dist/cjs/config-cli/models.js +8 -7
  15. package/dist/cjs/constants.js +49 -17
  16. package/dist/cjs/debug.js +48 -46
  17. package/dist/cjs/editing/codegen/index.js +14 -9
  18. package/dist/cjs/editing/codegen/preview.js +277 -193
  19. package/dist/cjs/editing/component-layout-service.js +62 -61
  20. package/dist/cjs/editing/design-library.js +183 -126
  21. package/dist/cjs/editing/editing-service.js +75 -74
  22. package/dist/cjs/editing/index.js +33 -27
  23. package/dist/cjs/editing/metadata.js +42 -42
  24. package/dist/cjs/editing/models.js +44 -38
  25. package/dist/cjs/editing/utils.js +108 -90
  26. package/dist/cjs/form/form.js +81 -78
  27. package/dist/cjs/form/index.js +7 -7
  28. package/dist/cjs/graphql-request-client.js +108 -107
  29. package/dist/cjs/i18n/dictionary-service.js +122 -121
  30. package/dist/cjs/i18n/index.js +7 -7
  31. package/dist/cjs/i18n/utils.js +16 -15
  32. package/dist/cjs/index.js +60 -60
  33. package/dist/cjs/layout/content-styles.js +72 -71
  34. package/dist/cjs/layout/index.js +24 -24
  35. package/dist/cjs/layout/layout-service.js +62 -57
  36. package/dist/cjs/layout/models.js +39 -34
  37. package/dist/cjs/layout/themes.js +76 -75
  38. package/dist/cjs/layout/utils.js +117 -110
  39. package/dist/cjs/media/index.js +38 -38
  40. package/dist/cjs/media/media-api.js +100 -96
  41. package/dist/cjs/models.js +2 -2
  42. package/dist/cjs/native-fetcher.js +194 -179
  43. package/dist/cjs/personalize/index.js +15 -15
  44. package/dist/cjs/personalize/layout-personalizer.js +98 -97
  45. package/dist/cjs/personalize/personalize-service.js +98 -94
  46. package/dist/cjs/personalize/utils.js +143 -136
  47. package/dist/cjs/retries.js +43 -42
  48. package/dist/cjs/site/error-pages-service.js +65 -64
  49. package/dist/cjs/site/index.js +26 -26
  50. package/dist/cjs/site/models.js +2 -2
  51. package/dist/cjs/site/redirects-service.js +94 -81
  52. package/dist/cjs/site/robots-service.js +66 -65
  53. package/dist/cjs/site/site-resolver.js +73 -72
  54. package/dist/cjs/site/siteinfo-service.js +84 -80
  55. package/dist/cjs/site/sitemap-xml-service.js +84 -83
  56. package/dist/cjs/site/sitepath-service.js +165 -164
  57. package/dist/cjs/site/utils.js +55 -47
  58. package/dist/cjs/sitecore-service-base.js +36 -36
  59. package/dist/cjs/tools/auth/flow.js +65 -64
  60. package/dist/cjs/tools/auth/index.js +5 -5
  61. package/dist/cjs/tools/auth/models.js +2 -2
  62. package/dist/cjs/tools/auth/tenant-store.js +38 -38
  63. package/dist/cjs/tools/codegen/component-generation.js +52 -50
  64. package/dist/cjs/tools/codegen/extract-files.js +105 -107
  65. package/dist/cjs/tools/codegen/import-map.js +401 -349
  66. package/dist/cjs/tools/codegen/utils.js +418 -418
  67. package/dist/cjs/tools/generate-map.js +2 -2
  68. package/dist/cjs/tools/generateMetadata.js +36 -35
  69. package/dist/cjs/tools/generateSites.js +59 -58
  70. package/dist/cjs/tools/index.js +75 -73
  71. package/dist/cjs/tools/scaffold.js +60 -59
  72. package/dist/cjs/tools/templating/components.js +96 -266
  73. package/dist/cjs/tools/templating/index.js +11 -14
  74. package/dist/cjs/tools/templating/plugins.js +80 -78
  75. package/dist/cjs/tools/templating/utils.js +67 -66
  76. package/dist/cjs/utils/ensurePath.js +20 -20
  77. package/dist/cjs/utils/env.js +28 -27
  78. package/dist/cjs/utils/globalCache.js +55 -0
  79. package/dist/cjs/utils/index.js +26 -21
  80. package/dist/cjs/utils/is-server.js +11 -10
  81. package/dist/cjs/utils/normalize-url.js +5 -5
  82. package/dist/cjs/utils/timeout-promise.js +31 -31
  83. package/dist/cjs/utils/utils.js +254 -229
  84. package/dist/esm/cache-client.js +51 -50
  85. package/dist/esm/client/constants.js +4 -4
  86. package/dist/esm/client/edge-proxy.js +19 -17
  87. package/dist/esm/client/index.js +5 -5
  88. package/dist/esm/client/models.js +1 -1
  89. package/dist/esm/client/sitecore-client.js +414 -412
  90. package/dist/esm/client/utils.js +43 -42
  91. package/dist/esm/config/define-config.js +188 -187
  92. package/dist/esm/config/index.js +2 -2
  93. package/dist/esm/config/models.js +9 -8
  94. package/dist/esm/config-cli/define-cli-config.js +19 -18
  95. package/dist/esm/config-cli/index.js +2 -2
  96. package/dist/esm/config-cli/models.js +5 -4
  97. package/dist/esm/constants.js +46 -14
  98. package/dist/esm/debug.js +41 -39
  99. package/dist/esm/editing/codegen/index.js +1 -1
  100. package/dist/esm/editing/codegen/preview.js +263 -185
  101. package/dist/esm/editing/component-layout-service.js +55 -54
  102. package/dist/esm/editing/design-library.js +171 -117
  103. package/dist/esm/editing/editing-service.js +68 -67
  104. package/dist/esm/editing/index.js +6 -5
  105. package/dist/esm/editing/metadata.js +39 -39
  106. package/dist/esm/editing/models.js +41 -35
  107. package/dist/esm/editing/utils.js +98 -80
  108. package/dist/esm/form/form.js +72 -69
  109. package/dist/esm/form/index.js +1 -1
  110. package/dist/esm/graphql-request-client.js +101 -100
  111. package/dist/esm/i18n/dictionary-service.js +115 -114
  112. package/dist/esm/i18n/index.js +2 -2
  113. package/dist/esm/i18n/utils.js +13 -12
  114. package/dist/esm/index.js +13 -13
  115. package/dist/esm/layout/content-styles.js +64 -63
  116. package/dist/esm/layout/index.js +6 -6
  117. package/dist/esm/layout/layout-service.js +55 -50
  118. package/dist/esm/layout/models.js +36 -31
  119. package/dist/esm/layout/themes.js +71 -70
  120. package/dist/esm/layout/utils.js +109 -102
  121. package/dist/esm/media/index.js +2 -2
  122. package/dist/esm/media/media-api.js +90 -86
  123. package/dist/esm/models.js +1 -1
  124. package/dist/esm/native-fetcher.js +187 -172
  125. package/dist/esm/personalize/index.js +3 -3
  126. package/dist/esm/personalize/layout-personalizer.js +93 -92
  127. package/dist/esm/personalize/personalize-service.js +91 -87
  128. package/dist/esm/personalize/utils.js +135 -128
  129. package/dist/esm/retries.js +39 -38
  130. package/dist/esm/site/error-pages-service.js +58 -57
  131. package/dist/esm/site/index.js +8 -8
  132. package/dist/esm/site/models.js +1 -1
  133. package/dist/esm/site/redirects-service.js +87 -74
  134. package/dist/esm/site/robots-service.js +59 -58
  135. package/dist/esm/site/site-resolver.js +69 -68
  136. package/dist/esm/site/siteinfo-service.js +77 -73
  137. package/dist/esm/site/sitemap-xml-service.js +77 -76
  138. package/dist/esm/site/sitepath-service.js +157 -156
  139. package/dist/esm/site/utils.js +49 -41
  140. package/dist/esm/sitecore-service-base.js +29 -29
  141. package/dist/esm/tools/auth/flow.js +62 -61
  142. package/dist/esm/tools/auth/index.js +1 -1
  143. package/dist/esm/tools/auth/models.js +1 -1
  144. package/dist/esm/tools/auth/tenant-store.js +35 -35
  145. package/dist/esm/tools/codegen/component-generation.js +44 -42
  146. package/dist/esm/tools/codegen/extract-files.js +99 -101
  147. package/dist/esm/tools/codegen/import-map.js +358 -306
  148. package/dist/esm/tools/codegen/utils.js +373 -373
  149. package/dist/esm/tools/generate-map.js +1 -1
  150. package/dist/esm/tools/generateMetadata.js +29 -28
  151. package/dist/esm/tools/generateSites.js +52 -51
  152. package/dist/esm/tools/index.js +28 -27
  153. package/dist/esm/tools/scaffold.js +52 -51
  154. package/dist/esm/tools/templating/components.js +59 -223
  155. package/dist/esm/tools/templating/index.js +3 -3
  156. package/dist/esm/tools/templating/plugins.js +72 -70
  157. package/dist/esm/tools/templating/utils.js +59 -58
  158. package/dist/esm/utils/ensurePath.js +13 -13
  159. package/dist/esm/utils/env.js +24 -23
  160. package/dist/esm/utils/globalCache.js +49 -0
  161. package/dist/esm/utils/index.js +4 -3
  162. package/dist/esm/utils/is-server.js +9 -8
  163. package/dist/esm/utils/normalize-url.js +1 -1
  164. package/dist/esm/utils/timeout-promise.js +28 -28
  165. package/dist/esm/utils/utils.js +238 -213
  166. package/package.json +73 -5
  167. package/types/cache-client.d.ts +68 -64
  168. package/types/cache-client.d.ts.map +1 -0
  169. package/types/client/constants.d.ts +5 -4
  170. package/types/client/constants.d.ts.map +1 -0
  171. package/types/client/edge-proxy.d.ts +18 -15
  172. package/types/client/edge-proxy.d.ts.map +1 -0
  173. package/types/client/index.d.ts +8 -7
  174. package/types/client/index.d.ts.map +1 -0
  175. package/types/client/models.d.ts +21 -19
  176. package/types/client/models.d.ts.map +1 -0
  177. package/types/client/sitecore-client.d.ts +338 -327
  178. package/types/client/sitecore-client.d.ts.map +1 -0
  179. package/types/client/utils.d.ts +15 -9
  180. package/types/client/utils.d.ts.map +1 -0
  181. package/types/config/define-config.d.ts +20 -18
  182. package/types/config/define-config.d.ts.map +1 -0
  183. package/types/config/index.d.ts +3 -2
  184. package/types/config/index.d.ts.map +1 -0
  185. package/types/config/models.d.ts +287 -268
  186. package/types/config/models.d.ts.map +1 -0
  187. package/types/config-cli/define-cli-config.d.ts +9 -7
  188. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  189. package/types/config-cli/index.d.ts +3 -2
  190. package/types/config-cli/index.d.ts.map +1 -0
  191. package/types/config-cli/models.d.ts +6 -4
  192. package/types/config-cli/models.d.ts.map +1 -0
  193. package/types/constants.d.ts +44 -11
  194. package/types/constants.d.ts.map +1 -0
  195. package/types/debug.d.ts +35 -28
  196. package/types/debug.d.ts.map +1 -0
  197. package/types/editing/codegen/index.d.ts +2 -1
  198. package/types/editing/codegen/index.d.ts.map +1 -0
  199. package/types/editing/codegen/preview.d.ts +256 -195
  200. package/types/editing/codegen/preview.d.ts.map +1 -0
  201. package/types/editing/component-layout-service.d.ts +84 -80
  202. package/types/editing/component-layout-service.d.ts.map +1 -0
  203. package/types/editing/design-library.d.ts +111 -63
  204. package/types/editing/design-library.d.ts.map +1 -0
  205. package/types/editing/editing-service.d.ts +72 -62
  206. package/types/editing/editing-service.d.ts.map +1 -0
  207. package/types/editing/index.d.ts +7 -6
  208. package/types/editing/index.d.ts.map +1 -0
  209. package/types/editing/metadata.d.ts +8 -7
  210. package/types/editing/metadata.d.ts.map +1 -0
  211. package/types/editing/models.d.ts +103 -92
  212. package/types/editing/models.d.ts.map +1 -0
  213. package/types/editing/utils.d.ts +91 -74
  214. package/types/editing/utils.d.ts.map +1 -0
  215. package/types/form/form.d.ts +25 -21
  216. package/types/form/form.d.ts.map +1 -0
  217. package/types/form/index.d.ts +2 -1
  218. package/types/form/index.d.ts.map +1 -0
  219. package/types/graphql-request-client.d.ts +112 -105
  220. package/types/graphql-request-client.d.ts.map +1 -0
  221. package/types/i18n/dictionary-service.d.ts +135 -131
  222. package/types/i18n/dictionary-service.d.ts.map +1 -0
  223. package/types/i18n/index.d.ts +3 -2
  224. package/types/i18n/index.d.ts.map +1 -0
  225. package/types/i18n/utils.d.ts +9 -7
  226. package/types/i18n/utils.d.ts.map +1 -0
  227. package/types/index.d.ts +13 -12
  228. package/types/index.d.ts.map +1 -0
  229. package/types/layout/content-styles.d.ts +20 -18
  230. package/types/layout/content-styles.d.ts.map +1 -0
  231. package/types/layout/index.d.ts +6 -5
  232. package/types/layout/index.d.ts.map +1 -0
  233. package/types/layout/layout-service.d.ts +45 -35
  234. package/types/layout/layout-service.d.ts.map +1 -0
  235. package/types/layout/models.d.ts +174 -151
  236. package/types/layout/models.d.ts.map +1 -0
  237. package/types/layout/themes.d.ts +13 -11
  238. package/types/layout/themes.d.ts.map +1 -0
  239. package/types/layout/utils.d.ts +56 -41
  240. package/types/layout/utils.d.ts.map +1 -0
  241. package/types/media/index.d.ts +3 -2
  242. package/types/media/index.d.ts.map +1 -0
  243. package/types/media/media-api.d.ts +60 -55
  244. package/types/media/media-api.d.ts.map +1 -0
  245. package/types/models.d.ts +94 -84
  246. package/types/models.d.ts.map +1 -0
  247. package/types/native-fetcher.d.ts +124 -114
  248. package/types/native-fetcher.d.ts.map +1 -0
  249. package/types/personalize/index.d.ts +4 -3
  250. package/types/personalize/index.d.ts.map +1 -0
  251. package/types/personalize/layout-personalizer.d.ts +29 -27
  252. package/types/personalize/layout-personalizer.d.ts.map +1 -0
  253. package/types/personalize/personalize-service.d.ts +90 -80
  254. package/types/personalize/personalize-service.d.ts.map +1 -0
  255. package/types/personalize/utils.d.ts +78 -69
  256. package/types/personalize/utils.d.ts.map +1 -0
  257. package/types/retries.d.ts +26 -24
  258. package/types/retries.d.ts.map +1 -0
  259. package/types/site/error-pages-service.d.ts +64 -57
  260. package/types/site/error-pages-service.d.ts.map +1 -0
  261. package/types/site/index.d.ts +10 -9
  262. package/types/site/index.d.ts.map +1 -0
  263. package/types/site/models.d.ts +23 -18
  264. package/types/site/models.d.ts.map +1 -0
  265. package/types/site/redirects-service.d.ts +92 -69
  266. package/types/site/redirects-service.d.ts.map +1 -0
  267. package/types/site/robots-service.d.ts +57 -50
  268. package/types/site/robots-service.d.ts.map +1 -0
  269. package/types/site/site-resolver.d.ts +28 -26
  270. package/types/site/site-resolver.d.ts.map +1 -0
  271. package/types/site/siteinfo-service.d.ts +65 -52
  272. package/types/site/siteinfo-service.d.ts.map +1 -0
  273. package/types/site/sitemap-xml-service.d.ts +63 -56
  274. package/types/site/sitemap-xml-service.d.ts.map +1 -0
  275. package/types/site/sitepath-service.d.ts +137 -134
  276. package/types/site/sitepath-service.d.ts.map +1 -0
  277. package/types/site/utils.d.ts +41 -28
  278. package/types/site/utils.d.ts.map +1 -0
  279. package/types/sitecore-service-base.d.ts +31 -30
  280. package/types/sitecore-service-base.d.ts.map +1 -0
  281. package/types/tools/auth/flow.d.ts +29 -27
  282. package/types/tools/auth/flow.d.ts.map +1 -0
  283. package/types/tools/auth/index.d.ts +2 -1
  284. package/types/tools/auth/index.d.ts.map +1 -0
  285. package/types/tools/auth/models.d.ts +35 -33
  286. package/types/tools/auth/models.d.ts.map +1 -0
  287. package/types/tools/auth/tenant-store.d.ts +12 -11
  288. package/types/tools/auth/tenant-store.d.ts.map +1 -0
  289. package/types/tools/codegen/component-generation.d.ts +50 -47
  290. package/types/tools/codegen/component-generation.d.ts.map +1 -0
  291. package/types/tools/codegen/extract-files.d.ts +24 -22
  292. package/types/tools/codegen/extract-files.d.ts.map +1 -0
  293. package/types/tools/codegen/import-map.d.ts +103 -70
  294. package/types/tools/codegen/import-map.d.ts.map +1 -0
  295. package/types/tools/codegen/utils.d.ts +76 -75
  296. package/types/tools/codegen/utils.d.ts.map +1 -0
  297. package/types/tools/generate-map.d.ts +36 -26
  298. package/types/tools/generate-map.d.ts.map +1 -0
  299. package/types/tools/generateMetadata.d.ts +24 -22
  300. package/types/tools/generateMetadata.d.ts.map +1 -0
  301. package/types/tools/generateSites.d.ts +25 -22
  302. package/types/tools/generateSites.d.ts.map +1 -0
  303. package/types/tools/index.d.ts +22 -20
  304. package/types/tools/index.d.ts.map +1 -0
  305. package/types/tools/scaffold.d.ts +27 -25
  306. package/types/tools/scaffold.d.ts.map +1 -0
  307. package/types/tools/templating/components.d.ts +104 -103
  308. package/types/tools/templating/components.d.ts.map +1 -0
  309. package/types/tools/templating/index.d.ts +4 -3
  310. package/types/tools/templating/index.d.ts.map +1 -0
  311. package/types/tools/templating/plugins.d.ts +71 -67
  312. package/types/tools/templating/plugins.d.ts.map +1 -0
  313. package/types/tools/templating/utils.d.ts +42 -40
  314. package/types/tools/templating/utils.d.ts.map +1 -0
  315. package/types/utils/ensurePath.d.ts +7 -6
  316. package/types/utils/ensurePath.d.ts.map +1 -0
  317. package/types/utils/env.d.ts +9 -7
  318. package/types/utils/env.d.ts.map +1 -0
  319. package/types/utils/globalCache.d.ts +37 -0
  320. package/types/utils/globalCache.d.ts.map +1 -0
  321. package/types/utils/index.d.ts +5 -3
  322. package/types/utils/index.d.ts.map +1 -0
  323. package/types/utils/is-server.d.ts +8 -6
  324. package/types/utils/is-server.d.ts.map +1 -0
  325. package/types/utils/normalize-url.d.ts +2 -1
  326. package/types/utils/normalize-url.d.ts.map +1 -0
  327. package/types/utils/timeout-promise.d.ts +18 -17
  328. package/types/utils/timeout-promise.d.ts.map +1 -0
  329. package/types/utils/utils.d.ts +104 -79
  330. package/types/utils/utils.d.ts.map +1 -0
  331. package/client.js +0 -1
  332. package/codegen.js +0 -1
  333. package/config-cli.js +0 -1
  334. package/config.js +0 -1
  335. package/editing.js +0 -1
  336. package/i18n.js +0 -1
  337. package/layout.js +0 -1
  338. package/media.js +0 -1
  339. package/personalize.js +0 -1
  340. package/site.js +0 -1
  341. package/tools.js +0 -1
  342. package/utils.js +0 -1
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,28 +1,29 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { getMetadata } from '../editing/metadata';
4
- import { ensurePathExists } from '../utils/ensurePath';
5
- /**
6
- * Generate application metadata
7
- * @param {GenerateMetadataConfig} config - Optional configuration for generating metadata.
8
- * If not provided, the default '.sitecore/metadata.json' will be used and allowWorkspaces will be set to false.
9
- * @returns {Promise<void>} A promise that resolves when the metadata generation is complete.
10
- */
11
- export const generateMetadata = (config) => {
12
- return async () => {
13
- var _a;
14
- const metadata = getMetadata(!!(config === null || config === void 0 ? void 0 : config.allowWorkspaces));
15
- writeMetadata(metadata, (_a = config === null || config === void 0 ? void 0 : config.destinationPath) !== null && _a !== void 0 ? _a : '.sitecore/metadata.json');
16
- };
17
- };
18
- /**
19
- * Writes the metadata object to disk.
20
- * @param {Metadata} metadata metadata to write.
21
- * @param {string} destinationPath path to write the metadata to.
22
- */
23
- function writeMetadata(metadata, destinationPath) {
24
- const filePath = path.resolve(destinationPath);
25
- ensurePathExists(filePath);
26
- console.log(`Writing metadata to ${filePath}`);
27
- fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2), { encoding: 'utf8' });
28
- }
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { getMetadata } from '../editing/metadata';
4
+ import { ensurePathExists } from '../utils/ensurePath';
5
+ /**
6
+ * Generate application metadata
7
+ * @param {GenerateMetadataConfig} config - Optional configuration for generating metadata.
8
+ * If not provided, the default '.sitecore/metadata.json' will be used and allowWorkspaces will be set to false.
9
+ * @returns {Promise<void>} A promise that resolves when the metadata generation is complete.
10
+ * @public
11
+ */
12
+ export const generateMetadata = (config) => {
13
+ return async () => {
14
+ var _a;
15
+ const metadata = getMetadata(!!(config === null || config === void 0 ? void 0 : config.allowWorkspaces));
16
+ writeMetadata(metadata, (_a = config === null || config === void 0 ? void 0 : config.destinationPath) !== null && _a !== void 0 ? _a : '.sitecore/metadata.json');
17
+ };
18
+ };
19
+ /**
20
+ * Writes the metadata object to disk.
21
+ * @param {Metadata} metadata metadata to write.
22
+ * @param {string} destinationPath path to write the metadata to.
23
+ */
24
+ function writeMetadata(metadata, destinationPath) {
25
+ const filePath = path.resolve(destinationPath);
26
+ ensurePathExists(filePath);
27
+ console.log(`Writing metadata to ${filePath}`);
28
+ fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2), { encoding: 'utf8' });
29
+ }
@@ -1,51 +1,52 @@
1
- import path from 'path';
2
- import chalk from 'chalk';
3
- import fs from 'fs';
4
- import debug from '../debug';
5
- import { SiteInfoService } from '../site';
6
- import { ensurePathExists } from '../utils/ensurePath';
7
- import { createGraphQLClientFactory } from '../client';
8
- const DEFAULT_SITES_DIST_PATH = '.sitecore/sites.json';
9
- /**
10
- * Generates site information and writes it to a specified destination path.
11
- * @param {GenerateSitesConfig} config - The configuration for generating site info.
12
- * @returns {Promise<Function>} - A promise that resolves to an asynchronous function that fetches site information and writes it to a file.
13
- */
14
- export const generateSites = ({ scConfig: deprecatedScConfig, destinationPath, } = {}) => {
15
- return async ({ scConfig } = {}) => {
16
- const config = deprecatedScConfig !== null && deprecatedScConfig !== void 0 ? deprecatedScConfig : scConfig;
17
- if (!config) {
18
- throw new Error('Sitecore configuration is required to be provided');
19
- }
20
- let sites = [];
21
- const sitesFilePath = path.resolve(destinationPath !== null && destinationPath !== void 0 ? destinationPath : DEFAULT_SITES_DIST_PATH);
22
- debug.multisite(config.multisite.enabled
23
- ? 'Multisite Enabled: Generating site information'
24
- : 'Multisite Disabled');
25
- if (config.multisite.enabled) {
26
- try {
27
- const siteInfoService = new SiteInfoService({
28
- clientFactory: createGraphQLClientFactory({
29
- api: config.api,
30
- retries: config.retries.count,
31
- retryStrategy: config.retries.retryStrategy,
32
- }),
33
- });
34
- sites = await siteInfoService.fetchSiteInfo();
35
- }
36
- catch (error) {
37
- console.error(chalk.red('Error fetching site information'));
38
- throw error;
39
- }
40
- }
41
- // Add default site to the list
42
- const defaultSite = {
43
- name: config.defaultSite,
44
- hostName: '*',
45
- language: config.defaultLanguage,
46
- };
47
- sites.unshift(defaultSite);
48
- ensurePathExists(sitesFilePath);
49
- fs.writeFileSync(sitesFilePath, JSON.stringify(sites, null, 2), { encoding: 'utf8' });
50
- };
51
- };
1
+ import path from 'path';
2
+ import chalk from 'chalk';
3
+ import fs from 'fs';
4
+ import debug from '../debug';
5
+ import { SiteInfoService } from '../site';
6
+ import { ensurePathExists } from '../utils/ensurePath';
7
+ import { createGraphQLClientFactory } from '../client';
8
+ const DEFAULT_SITES_DIST_PATH = '.sitecore/sites.json';
9
+ /**
10
+ * Generates site information and writes it to a specified destination path.
11
+ * @param {GenerateSitesConfig} config - The configuration for generating site info.
12
+ * @returns {Promise<Function>} - A promise that resolves to an asynchronous function that fetches site information and writes it to a file.
13
+ * @public
14
+ */
15
+ export const generateSites = ({ scConfig: deprecatedScConfig, destinationPath, } = {}) => {
16
+ return async ({ scConfig } = {}) => {
17
+ const config = deprecatedScConfig !== null && deprecatedScConfig !== void 0 ? deprecatedScConfig : scConfig;
18
+ if (!config) {
19
+ throw new Error('Sitecore configuration is required to be provided');
20
+ }
21
+ let sites = [];
22
+ const sitesFilePath = path.resolve(destinationPath !== null && destinationPath !== void 0 ? destinationPath : DEFAULT_SITES_DIST_PATH);
23
+ debug.multisite(config.multisite.enabled
24
+ ? 'Multisite Enabled: Generating site information'
25
+ : 'Multisite Disabled');
26
+ if (config.multisite.enabled) {
27
+ try {
28
+ const siteInfoService = new SiteInfoService({
29
+ clientFactory: createGraphQLClientFactory({
30
+ api: config.api,
31
+ retries: config.retries.count,
32
+ retryStrategy: config.retries.retryStrategy,
33
+ }),
34
+ });
35
+ sites = await siteInfoService.fetchSiteInfo();
36
+ }
37
+ catch (error) {
38
+ console.error(chalk.red('Error fetching site information'));
39
+ throw error;
40
+ }
41
+ }
42
+ // Add default site to the list
43
+ const defaultSite = {
44
+ name: config.defaultSite,
45
+ hostName: '*',
46
+ language: config.defaultLanguage,
47
+ };
48
+ sites.unshift(defaultSite);
49
+ ensurePathExists(sitesFilePath);
50
+ fs.writeFileSync(sitesFilePath, JSON.stringify(sites, null, 2), { encoding: 'utf8' });
51
+ };
52
+ };
@@ -1,27 +1,28 @@
1
- export { generateSites } from './generateSites';
2
- export { generateMetadata } from './generateMetadata';
3
- export { scaffoldComponent } from './scaffold';
4
- export { extractFiles } from './codegen/extract-files';
5
- export { writeImportMap } from './codegen/import-map';
6
- export { getComponentSpec, getComponentSpecUrl } from './codegen/component-generation';
7
- export * from './templating';
8
- export * from './auth/models';
9
- import * as authModule from './auth';
10
- /**
11
- * Preserve "live binding" semantics similar to ES module imports: production
12
- * code always sees the current implementation; tests can swap it safely and
13
- * restore via `sandbox.restore()` with no hidden global state.
14
- *
15
- * Public surface consumed by the rest of the codebase.
16
- */
17
- export const auth = {};
18
- /*
19
- * Define an accessor so reads are dynamic
20
- * - Production: returns the real `authModule.clientCredentialsFlow`.
21
- * - Tests: can be replaced with a stub via `sinon.replaceGetter` or `sandbox.replaceGetter`
22
- */
23
- Object.defineProperty(auth, 'clientCredentialsFlow', {
24
- get: () => authModule.clientCredentialsFlow,
25
- configurable: true,
26
- enumerable: true,
27
- });
1
+ export { generateSites } from './generateSites';
2
+ export { generateMetadata } from './generateMetadata';
3
+ export { scaffoldComponent } from './scaffold';
4
+ export { extractFiles } from './codegen/extract-files';
5
+ export { writeImportMap, defaultMapTemplate as defaultImportMapTemplate, } from './codegen/import-map';
6
+ export { getComponentSpec, getComponentSpecUrl } from './codegen/component-generation';
7
+ export * from './templating';
8
+ export * from './auth/models';
9
+ import * as authModule from './auth';
10
+ /**
11
+ * Preserve "live binding" semantics similar to ES module imports: production
12
+ * code always sees the current implementation; tests can swap it safely and
13
+ * restore via `sandbox.restore()` with no hidden global state.
14
+ *
15
+ * Public surface consumed by the rest of the codebase.
16
+ * @public
17
+ */
18
+ export const auth = {};
19
+ /*
20
+ * Define an accessor so reads are dynamic
21
+ * - Production: returns the real `authModule.clientCredentialsFlow`.
22
+ * - Tests: can be replaced with a stub via `sinon.replaceGetter` or `sandbox.replaceGetter`
23
+ */
24
+ Object.defineProperty(auth, 'clientCredentialsFlow', {
25
+ get: () => authModule.clientCredentialsFlow,
26
+ configurable: true,
27
+ enumerable: true,
28
+ });
@@ -1,53 +1,54 @@
1
- import fs from 'fs';
2
- import chalk from 'chalk';
3
- import path from 'path';
4
- /**
5
- * Force to use `crlf` line endings, we are using `crlf` across the project.
6
- * Replace: `lf` (\n), `cr` (\r)
7
- * @param {string} content
8
- */
9
- export function editLineEndings(content) {
10
- return content.replace(/\r|\n/gm, '\r\n');
11
- }
12
- /**
13
- * Creates a file relative to the specified path if the file doesn't exist.
14
- * Creates directories as needed.
15
- * Does not overwrite existing files.
16
- * @param {string} filePath - the file path
17
- * @param {string} fileContent - the file content
18
- * @returns {string} the file path if the file was created, otherwise null
19
- */
20
- export function scaffoldFile(filePath, fileContent) {
21
- const outputDir = path.dirname(filePath);
22
- if (fs.existsSync(filePath)) {
23
- console.log(chalk.red(`Skipping creating ${filePath}; already exists.`));
24
- return null;
25
- }
26
- fs.mkdirSync(outputDir, { recursive: true });
27
- fs.writeFileSync(filePath, editLineEndings(fileContent), 'utf8');
28
- console.log(chalk.green(`File ${filePath} has been scaffolded.`));
29
- return filePath;
30
- }
31
- /**
32
- * Scaffolds a new component based on the provided template.
33
- * @param {string} outputFolderPath - The file path where the component will be created.
34
- * @param {string} componentName - The name of the component to be created.
35
- * @param {string} templateName - The name of the template to use for scaffolding. If not provided, defaults to 'byoc' if `byoc` is true, otherwise 'default'.
36
- * @param {ScaffoldTemplate[]} templates - An array of template objects, each containing a name, a template function, and a getNextSteps function.
37
- * @throws Will throw an error if the specified template is not found.
38
- */
39
- export function scaffoldComponent(outputFolderPath, componentName, templateName, templates) {
40
- const template = templates.find((t) => t.name === templateName);
41
- if (!template) {
42
- throw new Error(`Template ${templateName} not found.`);
43
- }
44
- const outputFilePath = path.join(outputFolderPath, `${componentName}.${template.fileExtension}`);
45
- const componentOutputPath = scaffoldFile(outputFilePath, template.generateTemplate(componentName));
46
- if (componentOutputPath) {
47
- const nextSteps = [];
1
+ import fs from 'fs';
2
+ import chalk from 'chalk';
3
+ import path from 'path';
4
+ /**
5
+ * Force to use `crlf` line endings, we are using `crlf` across the project.
6
+ * Replace: `lf` (\n), `cr` (\r)
7
+ * @param {string} content
8
+ */
9
+ export function editLineEndings(content) {
10
+ return content.replace(/\r|\n/gm, '\r\n');
11
+ }
12
+ /**
13
+ * Creates a file relative to the specified path if the file doesn't exist.
14
+ * Creates directories as needed.
15
+ * Does not overwrite existing files.
16
+ * @param {string} filePath - the file path
17
+ * @param {string} fileContent - the file content
18
+ * @returns {string} the file path if the file was created, otherwise null
19
+ */
20
+ export function scaffoldFile(filePath, fileContent) {
21
+ const outputDir = path.dirname(filePath);
22
+ if (fs.existsSync(filePath)) {
23
+ console.log(chalk.red(`Skipping creating ${filePath}; already exists.`));
24
+ return null;
25
+ }
26
+ fs.mkdirSync(outputDir, { recursive: true });
27
+ fs.writeFileSync(filePath, editLineEndings(fileContent), 'utf8');
28
+ console.log(chalk.green(`File ${filePath} has been scaffolded.`));
29
+ return filePath;
30
+ }
31
+ /**
32
+ * Scaffolds a new component based on the provided template.
33
+ * @param {string} outputFolderPath - The file path where the component will be created.
34
+ * @param {string} componentName - The name of the component to be created.
35
+ * @param {string} templateName - The name of the template to use for scaffolding. If not provided, defaults to 'byoc' if `byoc` is true, otherwise 'default'.
36
+ * @param {ScaffoldTemplate[]} templates - An array of template objects, each containing a name, a template function, and a getNextSteps function.
37
+ * @throws Will throw an error if the specified template is not found.
38
+ * @internal
39
+ */
40
+ export function scaffoldComponent(outputFolderPath, componentName, templateName, templates) {
41
+ const template = templates.find((t) => t.name === templateName);
42
+ if (!template) {
43
+ throw new Error(`Template ${templateName} not found.`);
44
+ }
45
+ const outputFilePath = path.join(outputFolderPath, `${componentName}.${template.fileExtension}`);
46
+ const componentOutputPath = scaffoldFile(outputFilePath, template.generateTemplate(componentName));
47
+ if (componentOutputPath) {
48
+ const nextSteps = [];
48
49
  nextSteps.push(chalk.green(`
49
50
  Scaffolding of ${componentName} complete.
50
- Next steps:`), ...(template.getNextSteps ? template.getNextSteps(componentOutputPath) : []));
51
- console.log(nextSteps.join('\n'));
52
- }
53
- }
51
+ Next steps:`), ...(template.getNextSteps ? template.getNextSteps(componentOutputPath) : []));
52
+ console.log(nextSteps.join('\n'));
53
+ }
54
+ }
@@ -1,223 +1,59 @@
1
- import * as glob from 'glob';
2
- import fs from 'fs';
3
- import * as ts from 'typescript';
4
- export let getComponentList = _getComponentList;
5
- export const componentUnitMocks = {
6
- set getComponentList(mockImplementation) {
7
- getComponentList = mockImplementation;
8
- },
9
- get getComponentList() {
10
- return _getComponentList;
11
- },
12
- };
13
- const componentNamePattern = /^[\/]*(.+[\/\\])*(.+)\.[jt]sx?$/;
14
- const componentPathPattern = /^([\/]*.+[\/\\].+)\..+$/;
15
- /**
16
- * Get list of components from @var path
17
- * Returns a list of components in the following format:
18
- * {
19
- * path: 'path/to/component',
20
- * componentName: 'ComponentName',
21
- * moduleName: 'ComponentName'
22
- * }
23
- * @param {string[]} paths paths to search
24
- * @param {string[]} [exclude] paths and glob patterns to exclude from final result
25
- * @param {boolean} [includeVariants] whether to include variant components
26
- */
27
- function _getComponentList(paths, exclude, includeVariants) {
28
- const components = paths.reduce((result, path) => {
29
- const globPath = glob.hasMagic(path, { magicalBraces: true }) || path.match(componentNamePattern)
30
- ? path
31
- : path.replace(/\/$/, '').concat('/**/*.{js,jsx,ts,tsx}');
32
- return result.concat(...glob
33
- .sync(globPath, { ignore: exclude, nodir: true })
34
- .filter((path) => path.match(componentNamePattern))
35
- .map((filePath) => {
36
- const name = filePath.match(componentNamePattern)[2];
37
- return {
38
- filePath,
39
- importPath: filePath.match(componentPathPattern)[1].replace(/\\/g, '/'), // use forward slashes for consistency
40
- componentName: name,
41
- moduleName: name.replace(/[^\w]+/g, ''),
42
- };
43
- }));
44
- }, []);
45
- return includeVariants
46
- ? components
47
- : components.filter((component) => !component.componentName.includes('.'));
48
- }
49
- /**
50
- * Detects the Next.js router type (App Router or Pages Router) based on directory structure.
51
- * @param {string} projectRoot - The project root directory. Defaults to current working directory.
52
- * @returns {RouterType} 'app' if App Router is detected, 'pages' otherwise
53
- */
54
- export function detectRouterType(projectRoot = process.cwd()) {
55
- const appDirExists = fs.existsSync(`${projectRoot}/src/app`) || fs.existsSync(`${projectRoot}/app`);
56
- const pagesDirExists = fs.existsSync(`${projectRoot}/src/pages`) || fs.existsSync(`${projectRoot}/pages`);
57
- if (appDirExists) {
58
- return 'app';
59
- }
60
- if (pagesDirExists) {
61
- return 'pages';
62
- }
63
- return 'pages';
64
- }
65
- /**
66
- * Detects the component type based on directives, imports, and router context.
67
- * - Checks for 'use client' directive
68
- * - Checks for explicit componentType export
69
- * - Checks for server-only imports (next/headers, etc.)
70
- * - Defaults to 'server' for App Router, 'universal' for Pages Router
71
- * @param {string} filePath - Path to the component file
72
- * @param {RouterType} [routerType] - Optional router type override. Auto-detected if not provided.
73
- * @returns {ComponentType} 'server', 'client', or 'universal'
74
- */
75
- export function detectComponentType(filePath, routerType) {
76
- try {
77
- const content = fs.readFileSync(filePath, 'utf-8');
78
- // Parse using TypeScript AST (following patterns from import-map.ts and utils.ts)
79
- const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
80
- let hasUseClientDirective = false;
81
- let explicitComponentType = null;
82
- let hasServerOnlyImports = false;
83
- // Auto-detect router type if not provided
84
- const detectedRouterType = routerType || detectRouterType();
85
- // Track position to ensure directives come before imports/other statements
86
- let foundFirstNonDirectiveStatement = false;
87
- // Helper function to check if a node is a valid directive
88
- const isValidDirective = (node) => {
89
- return (ts.isExpressionStatement(node) &&
90
- ts.isStringLiteral(node.expression) &&
91
- !foundFirstNonDirectiveStatement);
92
- };
93
- // More comprehensive AST traversal (following patterns from import-map.ts and utils.ts)
94
- const traverseNode = (node) => {
95
- var _a;
96
- // Check for 'use client'/'use server' directives (must be at top, before imports)
97
- if (isValidDirective(node) &&
98
- ts.isStringLiteral(node.expression)) {
99
- const directiveText = node.expression
100
- .text;
101
- if (directiveText === 'use client') {
102
- hasUseClientDirective = true;
103
- return; // Don't mark as non-directive statement
104
- }
105
- if (directiveText === 'use server') {
106
- explicitComponentType = 'server';
107
- return; // Don't mark as non-directive statement
108
- }
109
- }
110
- // Mark that we've seen a non-directive statement (imports, declarations, etc.)
111
- if (ts.isImportDeclaration(node) ||
112
- ts.isVariableStatement(node) ||
113
- ts.isFunctionDeclaration(node) ||
114
- ts.isExportDeclaration(node) ||
115
- ts.isExportAssignment(node)) {
116
- foundFirstNonDirectiveStatement = true;
117
- }
118
- // Check for import declarations with server-only modules
119
- if (ts.isImportDeclaration(node)) {
120
- const moduleSpecifier = node.moduleSpecifier;
121
- if (ts.isStringLiteral(moduleSpecifier)) {
122
- const importPath = moduleSpecifier.text;
123
- // Expand server-only module detection
124
- if (importPath === 'next/headers' ||
125
- importPath === 'server-only' ||
126
- importPath === 'next/cache' ||
127
- importPath === 'next/cookies' ||
128
- importPath.startsWith('node:') ||
129
- importPath === 'fs' ||
130
- importPath === 'path') {
131
- hasServerOnlyImports = true;
132
- }
133
- }
134
- }
135
- // Check for explicit componentType export (improved detection)
136
- if (ts.isVariableStatement(node)) {
137
- const hasExportModifier = (_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword);
138
- if (hasExportModifier) {
139
- node.declarationList.declarations.forEach((declaration) => {
140
- if (ts.isIdentifier(declaration.name) &&
141
- declaration.name.text === 'componentType' &&
142
- declaration.initializer) {
143
- // Handle string literal
144
- if (ts.isStringLiteral(declaration.initializer)) {
145
- const typeValue = declaration.initializer.text;
146
- if (typeValue === 'server' || typeValue === 'client' || typeValue === 'universal') {
147
- explicitComponentType = typeValue;
148
- }
149
- }
150
- // Handle template literal (e.g., `client`)
151
- else if (ts.isNoSubstitutionTemplateLiteral(declaration.initializer)) {
152
- const typeValue = declaration.initializer.text;
153
- if (typeValue === 'server' || typeValue === 'client' || typeValue === 'universal') {
154
- explicitComponentType = typeValue;
155
- }
156
- }
157
- }
158
- });
159
- }
160
- }
161
- // Check for named export of componentType (export const componentType = ...)
162
- if (ts.isExportDeclaration(node) &&
163
- node.exportClause &&
164
- ts.isNamedExports(node.exportClause)) {
165
- node.exportClause.elements.forEach((exportSpecifier) => {
166
- if (exportSpecifier.name.text === 'componentType') {
167
- // This would need additional logic to resolve the actual value, but for now
168
- // we'll rely on the variable declaration detection above
169
- }
170
- });
171
- }
172
- // Recursively traverse child nodes (following import-map.ts pattern)
173
- ts.forEachChild(node, traverseNode);
174
- };
175
- // Start traversal from the source file (following utils.ts pattern)
176
- ts.forEachChild(sourceFile, traverseNode);
177
- // Priority: explicit componentType export > use client/server directives > server-only imports > universal default
178
- if (explicitComponentType) {
179
- return explicitComponentType;
180
- }
181
- if (hasUseClientDirective) {
182
- return 'client';
183
- }
184
- if (hasServerOnlyImports) {
185
- return 'server';
186
- }
187
- // Router-aware defaults:
188
- // - App Router: defaults to server (RSC by default)
189
- // - Pages Router: defaults to universal (isomorphic by default)
190
- if (detectedRouterType === 'app') {
191
- return 'server';
192
- }
193
- else {
194
- return 'universal';
195
- }
196
- }
197
- catch (error) {
198
- console.warn(`Failed to parse component file ${filePath}, defaulting to universal:`, error);
199
- return 'universal';
200
- }
201
- }
202
- /**
203
- * Get list of components with detected types (server, client, or universal).
204
- * @param {string[]} paths - Paths to search for components
205
- * @param {string[]} [exclude] - Paths and glob patterns to exclude from final result
206
- * @param {boolean} includeVariants - Whether to include variant components
207
- * @param {RouterType} [routerType] - Optional router type override for type detection. Auto-detected if not provided.
208
- * @returns {ComponentFileWithType[]} Array of components with their detected types
209
- */
210
- export function getComponentListWithTypes(paths, exclude, includeVariants, routerType) {
211
- const components = getComponentList(paths, exclude, includeVariants);
212
- const detectedRouterType = routerType || detectRouterType();
213
- return components.map((component) => (Object.assign(Object.assign({}, component), { componentType: detectComponentType(component.filePath, detectedRouterType) })));
214
- }
215
- /**
216
- * Filters components by their detected type.
217
- * @param {ComponentFileWithType[]} components - Array of components with types
218
- * @param {ComponentType[]} allowedTypes - Array of allowed component types to filter by
219
- * @returns {ComponentFileWithType[]} Filtered array containing only components matching allowed types
220
- */
221
- export function filterComponentsByType(components, allowedTypes) {
222
- return components.filter((component) => allowedTypes.includes(component.componentType));
223
- }
1
+ import * as glob from 'glob';
2
+ /**
3
+ * @public
4
+ */
5
+ export let getComponentList = _getComponentList;
6
+ export const componentUnitMocks = {
7
+ set getComponentList(mockImplementation) {
8
+ getComponentList = mockImplementation;
9
+ },
10
+ get getComponentList() {
11
+ return _getComponentList;
12
+ },
13
+ };
14
+ const componentNamePattern = /^[\/]*(.+[\/\\])*(.+)\.[jt]sx?$/;
15
+ const componentPathPattern = /^([\/]*.+[\/\\].+)\..+$/;
16
+ /**
17
+ * Get list of components from @var path
18
+ * Returns a list of components in the following format:
19
+ * {
20
+ * path: 'path/to/component',
21
+ * componentName: 'ComponentName',
22
+ * moduleName: 'ComponentName'
23
+ * }
24
+ * @param {string[]} paths paths to search
25
+ * @param {string[]} [exclude] paths and glob patterns to exclude from final result
26
+ * @param {boolean} [includeVariants] whether to include variant components
27
+ */
28
+ function _getComponentList(paths, exclude, includeVariants) {
29
+ const components = paths.reduce((result, path) => {
30
+ const globPath = glob.hasMagic(path, { magicalBraces: true }) || path.match(componentNamePattern)
31
+ ? path
32
+ : path.replace(/\/$/, '').concat('/**/*.{js,jsx,ts,tsx}');
33
+ return result.concat(...glob
34
+ .sync(globPath, { ignore: exclude, nodir: true })
35
+ .filter((path) => path.match(componentNamePattern))
36
+ .map((filePath) => {
37
+ const name = filePath.match(componentNamePattern)[2];
38
+ return {
39
+ filePath,
40
+ importPath: filePath.match(componentPathPattern)[1].replace(/\\/g, '/'), // use forward slashes for consistency
41
+ componentName: name,
42
+ moduleName: name.replace(/[^\w]+/g, ''),
43
+ };
44
+ }));
45
+ }, []);
46
+ return includeVariants
47
+ ? components
48
+ : components.filter((component) => !component.componentName.includes('.'));
49
+ }
50
+ /**
51
+ * Filters components by their detected type.
52
+ * @param {ComponentFileWithType[]} components - Array of components with types
53
+ * @param {ComponentType[]} allowedTypes - Array of allowed component types to filter by
54
+ * @returns {ComponentFileWithType[]} Filtered array containing only components matching allowed types
55
+ * @internal
56
+ */
57
+ export function filterComponentsByType(components, allowedTypes) {
58
+ return components.filter((component) => allowedTypes.includes(component.componentType));
59
+ }
@@ -1,3 +1,3 @@
1
- export { getComponentList, detectRouterType, detectComponentType, getComponentListWithTypes, filterComponentsByType, } from './components';
2
- export { generatePlugins, ModuleType } from './plugins';
3
- export { matchPath } from './utils';
1
+ export { getComponentList, filterComponentsByType, } from './components';
2
+ export { generatePlugins, ModuleType } from './plugins';
3
+ export { matchPath } from './utils';