@sitecore-content-sdk/core 1.5.0 → 2.0.0-canary.10

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 (337) hide show
  1. package/LICENSE.txt +202 -202
  2. package/dist/cjs/constants.js +7 -21
  3. package/dist/cjs/debug.js +14 -18
  4. package/dist/cjs/graphql-request-client.js +10 -5
  5. package/dist/cjs/index.js +3 -7
  6. package/dist/cjs/native-fetcher.js +1 -1
  7. package/dist/cjs/{utils → tools}/ensurePath.js +1 -0
  8. package/dist/cjs/{media/index.js → tools/index-node.js} +27 -3
  9. package/dist/cjs/tools/index.js +28 -72
  10. package/dist/cjs/tools/{generateMetadata.js → metadata/generateMetadata.js} +2 -2
  11. package/dist/cjs/tools/metadata/index.js +5 -0
  12. package/dist/cjs/{editing → tools/metadata}/metadata.js +1 -6
  13. package/dist/cjs/tools/normalize-env-value.js +22 -0
  14. package/dist/cjs/{utils → tools}/normalize-url.js +6 -0
  15. package/dist/cjs/tools/resolve-edge-url.js +95 -0
  16. package/dist/cjs/{utils → tools}/utils.js +6 -64
  17. package/dist/esm/constants.js +6 -20
  18. package/dist/esm/debug.js +13 -17
  19. package/dist/esm/graphql-request-client.js +10 -5
  20. package/dist/esm/index.js +1 -6
  21. package/dist/esm/native-fetcher.js +1 -1
  22. package/dist/esm/{utils → tools}/ensurePath.js +1 -0
  23. package/dist/esm/tools/index-node.js +22 -0
  24. package/dist/esm/tools/index.js +6 -28
  25. package/dist/esm/tools/{generateMetadata.js → metadata/generateMetadata.js} +2 -2
  26. package/dist/esm/tools/metadata/index.js +1 -0
  27. package/dist/esm/{editing → tools/metadata}/metadata.js +1 -6
  28. package/dist/esm/tools/normalize-env-value.js +19 -0
  29. package/dist/esm/tools/normalize-url.js +7 -0
  30. package/dist/esm/tools/resolve-edge-url.js +89 -0
  31. package/dist/esm/{utils → tools}/utils.js +5 -61
  32. package/node-tools.d.ts +1 -0
  33. package/package.json +98 -163
  34. package/types/constants.d.ts +6 -17
  35. package/types/constants.d.ts.map +1 -1
  36. package/types/debug.d.ts +13 -13
  37. package/types/debug.d.ts.map +1 -1
  38. package/types/graphql-request-client.d.ts +8 -2
  39. package/types/graphql-request-client.d.ts.map +1 -1
  40. package/types/index.d.ts +3 -6
  41. package/types/index.d.ts.map +1 -1
  42. package/types/models.d.ts +0 -31
  43. package/types/models.d.ts.map +1 -1
  44. package/types/{utils → tools}/ensurePath.d.ts +1 -0
  45. package/types/tools/ensurePath.d.ts.map +1 -0
  46. package/types/{utils → tools}/globalCache.d.ts.map +1 -1
  47. package/types/tools/index-node.d.ts +14 -0
  48. package/types/tools/index-node.d.ts.map +1 -0
  49. package/types/tools/index.d.ts +5 -21
  50. package/types/tools/index.d.ts.map +1 -1
  51. package/types/tools/is-server.d.ts.map +1 -0
  52. package/types/tools/metadata/generateMetadata.d.ts.map +1 -0
  53. package/types/tools/metadata/index.d.ts +3 -0
  54. package/types/tools/metadata/index.d.ts.map +1 -0
  55. package/types/{editing → tools/metadata}/metadata.d.ts +9 -1
  56. package/types/tools/metadata/metadata.d.ts.map +1 -0
  57. package/types/tools/normalize-env-value.d.ts +10 -0
  58. package/types/tools/normalize-env-value.d.ts.map +1 -0
  59. package/types/tools/normalize-url.d.ts +8 -0
  60. package/types/tools/normalize-url.d.ts.map +1 -0
  61. package/types/tools/resolve-edge-url.d.ts +52 -0
  62. package/types/tools/resolve-edge-url.d.ts.map +1 -0
  63. package/types/{utils → tools}/timeout-promise.d.ts.map +1 -1
  64. package/types/{utils → tools}/utils.d.ts +6 -26
  65. package/types/tools/utils.d.ts.map +1 -0
  66. package/client.d.ts +0 -1
  67. package/codegen.d.ts +0 -1
  68. package/config-cli.d.ts +0 -1
  69. package/config.d.ts +0 -1
  70. package/dist/cjs/client/constants.js +0 -7
  71. package/dist/cjs/client/edge-proxy.js +0 -24
  72. package/dist/cjs/client/index.js +0 -15
  73. package/dist/cjs/client/models.js +0 -2
  74. package/dist/cjs/client/sitecore-client.js +0 -424
  75. package/dist/cjs/client/utils.js +0 -51
  76. package/dist/cjs/config/define-config.js +0 -195
  77. package/dist/cjs/config/index.js +0 -7
  78. package/dist/cjs/config/models.js +0 -12
  79. package/dist/cjs/config-cli/define-cli-config.js +0 -23
  80. package/dist/cjs/config-cli/index.js +0 -7
  81. package/dist/cjs/config-cli/models.js +0 -8
  82. package/dist/cjs/editing/codegen/index.js +0 -15
  83. package/dist/cjs/editing/codegen/preview.js +0 -306
  84. package/dist/cjs/editing/component-layout-service.js +0 -63
  85. package/dist/cjs/editing/design-library.js +0 -190
  86. package/dist/cjs/editing/editing-service.js +0 -81
  87. package/dist/cjs/editing/index.js +0 -34
  88. package/dist/cjs/editing/models.js +0 -44
  89. package/dist/cjs/editing/utils.js +0 -108
  90. package/dist/cjs/form/form.js +0 -81
  91. package/dist/cjs/form/index.js +0 -7
  92. package/dist/cjs/i18n/dictionary-service.js +0 -144
  93. package/dist/cjs/i18n/index.js +0 -7
  94. package/dist/cjs/i18n/utils.js +0 -16
  95. package/dist/cjs/layout/content-styles.js +0 -72
  96. package/dist/cjs/layout/index.js +0 -24
  97. package/dist/cjs/layout/layout-service.js +0 -68
  98. package/dist/cjs/layout/models.js +0 -39
  99. package/dist/cjs/layout/themes.js +0 -76
  100. package/dist/cjs/layout/utils.js +0 -117
  101. package/dist/cjs/media/media-api.js +0 -100
  102. package/dist/cjs/personalize/index.js +0 -15
  103. package/dist/cjs/personalize/layout-personalizer.js +0 -98
  104. package/dist/cjs/personalize/personalize-service.js +0 -109
  105. package/dist/cjs/personalize/utils.js +0 -143
  106. package/dist/cjs/site/error-pages-service.js +0 -82
  107. package/dist/cjs/site/index.js +0 -26
  108. package/dist/cjs/site/models.js +0 -2
  109. package/dist/cjs/site/redirects-service.js +0 -108
  110. package/dist/cjs/site/robots-service.js +0 -74
  111. package/dist/cjs/site/site-resolver.js +0 -73
  112. package/dist/cjs/site/siteinfo-service.js +0 -94
  113. package/dist/cjs/site/sitemap-xml-service.js +0 -92
  114. package/dist/cjs/site/sitepath-service.js +0 -201
  115. package/dist/cjs/site/utils.js +0 -55
  116. package/dist/cjs/sitecore-service-base.js +0 -36
  117. package/dist/cjs/tools/codegen/component-generation.js +0 -52
  118. package/dist/cjs/tools/codegen/extract-files.js +0 -105
  119. package/dist/cjs/tools/codegen/import-map.js +0 -411
  120. package/dist/cjs/tools/codegen/utils.js +0 -418
  121. package/dist/cjs/tools/generate-map.js +0 -2
  122. package/dist/cjs/tools/generateSites.js +0 -59
  123. package/dist/cjs/tools/scaffold.js +0 -62
  124. package/dist/cjs/tools/templating/components.js +0 -96
  125. package/dist/cjs/tools/templating/index.js +0 -11
  126. package/dist/cjs/tools/templating/plugins.js +0 -80
  127. package/dist/cjs/tools/templating/utils.js +0 -67
  128. package/dist/cjs/utils/env.js +0 -28
  129. package/dist/cjs/utils/index.js +0 -26
  130. package/dist/esm/client/constants.js +0 -4
  131. package/dist/esm/client/edge-proxy.js +0 -19
  132. package/dist/esm/client/index.js +0 -5
  133. package/dist/esm/client/models.js +0 -1
  134. package/dist/esm/client/sitecore-client.js +0 -417
  135. package/dist/esm/client/utils.js +0 -47
  136. package/dist/esm/config/define-config.js +0 -189
  137. package/dist/esm/config/index.js +0 -2
  138. package/dist/esm/config/models.js +0 -9
  139. package/dist/esm/config-cli/define-cli-config.js +0 -19
  140. package/dist/esm/config-cli/index.js +0 -2
  141. package/dist/esm/config-cli/models.js +0 -5
  142. package/dist/esm/editing/codegen/index.js +0 -1
  143. package/dist/esm/editing/codegen/preview.js +0 -288
  144. package/dist/esm/editing/component-layout-service.js +0 -56
  145. package/dist/esm/editing/design-library.js +0 -178
  146. package/dist/esm/editing/editing-service.js +0 -74
  147. package/dist/esm/editing/index.js +0 -6
  148. package/dist/esm/editing/models.js +0 -41
  149. package/dist/esm/editing/utils.js +0 -98
  150. package/dist/esm/form/form.js +0 -72
  151. package/dist/esm/form/index.js +0 -1
  152. package/dist/esm/i18n/dictionary-service.js +0 -137
  153. package/dist/esm/i18n/index.js +0 -2
  154. package/dist/esm/i18n/utils.js +0 -13
  155. package/dist/esm/layout/content-styles.js +0 -64
  156. package/dist/esm/layout/index.js +0 -6
  157. package/dist/esm/layout/layout-service.js +0 -61
  158. package/dist/esm/layout/models.js +0 -36
  159. package/dist/esm/layout/themes.js +0 -71
  160. package/dist/esm/layout/utils.js +0 -109
  161. package/dist/esm/media/index.js +0 -2
  162. package/dist/esm/media/media-api.js +0 -90
  163. package/dist/esm/personalize/index.js +0 -3
  164. package/dist/esm/personalize/layout-personalizer.js +0 -93
  165. package/dist/esm/personalize/personalize-service.js +0 -102
  166. package/dist/esm/personalize/utils.js +0 -135
  167. package/dist/esm/site/error-pages-service.js +0 -75
  168. package/dist/esm/site/index.js +0 -8
  169. package/dist/esm/site/models.js +0 -1
  170. package/dist/esm/site/redirects-service.js +0 -101
  171. package/dist/esm/site/robots-service.js +0 -67
  172. package/dist/esm/site/site-resolver.js +0 -69
  173. package/dist/esm/site/siteinfo-service.js +0 -87
  174. package/dist/esm/site/sitemap-xml-service.js +0 -85
  175. package/dist/esm/site/sitepath-service.js +0 -193
  176. package/dist/esm/site/utils.js +0 -49
  177. package/dist/esm/sitecore-service-base.js +0 -29
  178. package/dist/esm/tools/codegen/component-generation.js +0 -44
  179. package/dist/esm/tools/codegen/extract-files.js +0 -99
  180. package/dist/esm/tools/codegen/import-map.js +0 -368
  181. package/dist/esm/tools/codegen/utils.js +0 -373
  182. package/dist/esm/tools/generate-map.js +0 -1
  183. package/dist/esm/tools/generateSites.js +0 -52
  184. package/dist/esm/tools/scaffold.js +0 -54
  185. package/dist/esm/tools/templating/components.js +0 -59
  186. package/dist/esm/tools/templating/index.js +0 -3
  187. package/dist/esm/tools/templating/plugins.js +0 -72
  188. package/dist/esm/tools/templating/utils.js +0 -59
  189. package/dist/esm/utils/env.js +0 -24
  190. package/dist/esm/utils/index.js +0 -4
  191. package/dist/esm/utils/normalize-url.js +0 -1
  192. package/editing.d.ts +0 -1
  193. package/i18n.d.ts +0 -1
  194. package/layout.d.ts +0 -1
  195. package/media.d.ts +0 -1
  196. package/personalize.d.ts +0 -1
  197. package/site.d.ts +0 -1
  198. package/types/client/constants.d.ts +0 -5
  199. package/types/client/constants.d.ts.map +0 -1
  200. package/types/client/edge-proxy.d.ts +0 -18
  201. package/types/client/edge-proxy.d.ts.map +0 -1
  202. package/types/client/index.d.ts +0 -8
  203. package/types/client/index.d.ts.map +0 -1
  204. package/types/client/models.d.ts +0 -21
  205. package/types/client/models.d.ts.map +0 -1
  206. package/types/client/sitecore-client.d.ts +0 -338
  207. package/types/client/sitecore-client.d.ts.map +0 -1
  208. package/types/client/utils.d.ts +0 -15
  209. package/types/client/utils.d.ts.map +0 -1
  210. package/types/config/define-config.d.ts +0 -20
  211. package/types/config/define-config.d.ts.map +0 -1
  212. package/types/config/index.d.ts +0 -3
  213. package/types/config/index.d.ts.map +0 -1
  214. package/types/config/models.d.ts +0 -287
  215. package/types/config/models.d.ts.map +0 -1
  216. package/types/config-cli/define-cli-config.d.ts +0 -9
  217. package/types/config-cli/define-cli-config.d.ts.map +0 -1
  218. package/types/config-cli/index.d.ts +0 -3
  219. package/types/config-cli/index.d.ts.map +0 -1
  220. package/types/config-cli/models.d.ts +0 -6
  221. package/types/config-cli/models.d.ts.map +0 -1
  222. package/types/editing/codegen/index.d.ts +0 -2
  223. package/types/editing/codegen/index.d.ts.map +0 -1
  224. package/types/editing/codegen/preview.d.ts +0 -289
  225. package/types/editing/codegen/preview.d.ts.map +0 -1
  226. package/types/editing/component-layout-service.d.ts +0 -84
  227. package/types/editing/component-layout-service.d.ts.map +0 -1
  228. package/types/editing/design-library.d.ts +0 -118
  229. package/types/editing/design-library.d.ts.map +0 -1
  230. package/types/editing/editing-service.d.ts +0 -72
  231. package/types/editing/editing-service.d.ts.map +0 -1
  232. package/types/editing/index.d.ts +0 -7
  233. package/types/editing/index.d.ts.map +0 -1
  234. package/types/editing/metadata.d.ts.map +0 -1
  235. package/types/editing/models.d.ts +0 -103
  236. package/types/editing/models.d.ts.map +0 -1
  237. package/types/editing/utils.d.ts +0 -91
  238. package/types/editing/utils.d.ts.map +0 -1
  239. package/types/form/form.d.ts +0 -25
  240. package/types/form/form.d.ts.map +0 -1
  241. package/types/form/index.d.ts +0 -2
  242. package/types/form/index.d.ts.map +0 -1
  243. package/types/i18n/dictionary-service.d.ts +0 -135
  244. package/types/i18n/dictionary-service.d.ts.map +0 -1
  245. package/types/i18n/index.d.ts +0 -3
  246. package/types/i18n/index.d.ts.map +0 -1
  247. package/types/i18n/utils.d.ts +0 -9
  248. package/types/i18n/utils.d.ts.map +0 -1
  249. package/types/layout/content-styles.d.ts +0 -20
  250. package/types/layout/content-styles.d.ts.map +0 -1
  251. package/types/layout/index.d.ts +0 -6
  252. package/types/layout/index.d.ts.map +0 -1
  253. package/types/layout/layout-service.d.ts +0 -45
  254. package/types/layout/layout-service.d.ts.map +0 -1
  255. package/types/layout/models.d.ts +0 -174
  256. package/types/layout/models.d.ts.map +0 -1
  257. package/types/layout/themes.d.ts +0 -13
  258. package/types/layout/themes.d.ts.map +0 -1
  259. package/types/layout/utils.d.ts +0 -56
  260. package/types/layout/utils.d.ts.map +0 -1
  261. package/types/media/index.d.ts +0 -3
  262. package/types/media/index.d.ts.map +0 -1
  263. package/types/media/media-api.d.ts +0 -60
  264. package/types/media/media-api.d.ts.map +0 -1
  265. package/types/personalize/index.d.ts +0 -4
  266. package/types/personalize/index.d.ts.map +0 -1
  267. package/types/personalize/layout-personalizer.d.ts +0 -29
  268. package/types/personalize/layout-personalizer.d.ts.map +0 -1
  269. package/types/personalize/personalize-service.d.ts +0 -90
  270. package/types/personalize/personalize-service.d.ts.map +0 -1
  271. package/types/personalize/utils.d.ts +0 -78
  272. package/types/personalize/utils.d.ts.map +0 -1
  273. package/types/site/error-pages-service.d.ts +0 -64
  274. package/types/site/error-pages-service.d.ts.map +0 -1
  275. package/types/site/index.d.ts +0 -10
  276. package/types/site/index.d.ts.map +0 -1
  277. package/types/site/models.d.ts +0 -23
  278. package/types/site/models.d.ts.map +0 -1
  279. package/types/site/redirects-service.d.ts +0 -92
  280. package/types/site/redirects-service.d.ts.map +0 -1
  281. package/types/site/robots-service.d.ts +0 -57
  282. package/types/site/robots-service.d.ts.map +0 -1
  283. package/types/site/site-resolver.d.ts +0 -28
  284. package/types/site/site-resolver.d.ts.map +0 -1
  285. package/types/site/siteinfo-service.d.ts +0 -65
  286. package/types/site/siteinfo-service.d.ts.map +0 -1
  287. package/types/site/sitemap-xml-service.d.ts +0 -63
  288. package/types/site/sitemap-xml-service.d.ts.map +0 -1
  289. package/types/site/sitepath-service.d.ts +0 -137
  290. package/types/site/sitepath-service.d.ts.map +0 -1
  291. package/types/site/utils.d.ts +0 -41
  292. package/types/site/utils.d.ts.map +0 -1
  293. package/types/sitecore-service-base.d.ts +0 -31
  294. package/types/sitecore-service-base.d.ts.map +0 -1
  295. package/types/tools/codegen/component-generation.d.ts +0 -50
  296. package/types/tools/codegen/component-generation.d.ts.map +0 -1
  297. package/types/tools/codegen/extract-files.d.ts +0 -24
  298. package/types/tools/codegen/extract-files.d.ts.map +0 -1
  299. package/types/tools/codegen/import-map.d.ts +0 -102
  300. package/types/tools/codegen/import-map.d.ts.map +0 -1
  301. package/types/tools/codegen/utils.d.ts +0 -76
  302. package/types/tools/codegen/utils.d.ts.map +0 -1
  303. package/types/tools/generate-map.d.ts +0 -36
  304. package/types/tools/generate-map.d.ts.map +0 -1
  305. package/types/tools/generateMetadata.d.ts.map +0 -1
  306. package/types/tools/generateSites.d.ts +0 -25
  307. package/types/tools/generateSites.d.ts.map +0 -1
  308. package/types/tools/scaffold.d.ts +0 -27
  309. package/types/tools/scaffold.d.ts.map +0 -1
  310. package/types/tools/templating/components.d.ts +0 -104
  311. package/types/tools/templating/components.d.ts.map +0 -1
  312. package/types/tools/templating/index.d.ts +0 -4
  313. package/types/tools/templating/index.d.ts.map +0 -1
  314. package/types/tools/templating/plugins.d.ts +0 -71
  315. package/types/tools/templating/plugins.d.ts.map +0 -1
  316. package/types/tools/templating/utils.d.ts +0 -42
  317. package/types/tools/templating/utils.d.ts.map +0 -1
  318. package/types/utils/ensurePath.d.ts.map +0 -1
  319. package/types/utils/env.d.ts +0 -9
  320. package/types/utils/env.d.ts.map +0 -1
  321. package/types/utils/index.d.ts +0 -5
  322. package/types/utils/index.d.ts.map +0 -1
  323. package/types/utils/is-server.d.ts.map +0 -1
  324. package/types/utils/normalize-url.d.ts +0 -2
  325. package/types/utils/normalize-url.d.ts.map +0 -1
  326. package/types/utils/utils.d.ts.map +0 -1
  327. package/utils.d.ts +0 -1
  328. /package/dist/cjs/{utils → tools}/globalCache.js +0 -0
  329. /package/dist/cjs/{utils → tools}/is-server.js +0 -0
  330. /package/dist/cjs/{utils → tools}/timeout-promise.js +0 -0
  331. /package/dist/esm/{utils → tools}/globalCache.js +0 -0
  332. /package/dist/esm/{utils → tools}/is-server.js +0 -0
  333. /package/dist/esm/{utils → tools}/timeout-promise.js +0 -0
  334. /package/types/{utils → tools}/globalCache.d.ts +0 -0
  335. /package/types/{utils → tools}/is-server.d.ts +0 -0
  336. /package/types/tools/{generateMetadata.d.ts → metadata/generateMetadata.d.ts} +0 -0
  337. /package/types/{utils → tools}/timeout-promise.d.ts +0 -0
@@ -1,368 +0,0 @@
1
- import * as ts from 'typescript';
2
- import path from 'path';
3
- import fs from 'fs';
4
- import { getComponentList } from './../templating';
5
- import debug from './../../debug';
6
- import crypto from 'crypto';
7
- import { isNodeModuleImport, stripExtension, getRelativeImportPath, toPosixPath } from './utils';
8
- let _getComponentList = getComponentList;
9
- const aliasImport = /^([a-zA-Z0-9]+) as .+$/;
10
- export const unitMocks = ({ getComponentListStub, }) => {
11
- getComponentListStub && (_getComponentList = getComponentListStub);
12
- };
13
- /**
14
- * Gets a Map object with import modules and their respective exports present throughout the paths specified
15
- * @param {string} paths paths to files to be processed for import-map
16
- * @returns {Map<string, ImportModule>} collection of keys and values, where keys refer to modules being processed and values are collections of exports for each module
17
- */
18
- export let getImportMap = _getImportMap;
19
- /**
20
- * Builds file contents for component map based on the default template
21
- * @param {Map<string, ImportModule>} indexedImportMap map to be processed into final component-map.ts file
22
- * @returns {string} file code for component-map.ts
23
- * @internal
24
- */
25
- export let defaultMapTemplate = _defaultMapTemplate;
26
- export const importUnitMocks = {
27
- set getImportMap(mockImplementation) {
28
- getImportMap = mockImplementation;
29
- },
30
- get getImportMap() {
31
- return _getImportMap;
32
- },
33
- set defaultMapTemplate(mockImplementation) {
34
- defaultMapTemplate = mockImplementation;
35
- },
36
- get defaultMapTemplate() {
37
- return _defaultMapTemplate;
38
- },
39
- };
40
- /**
41
- * Parses and AST import node and extracts all imported values from it
42
- * @param {ts.ImportDeclaration} importNode import node to be parsed
43
- * @returns {ImportNames | null} object with named, default and namespace imported values, or null if import node is not valid
44
- */
45
- export const getImportedValues = (importNode) => {
46
- const importClause = importNode.importClause;
47
- if (!importClause) {
48
- console.warn('Cannot parse import string from: %s', importNode.getText());
49
- return null;
50
- }
51
- const result = {
52
- named: [],
53
- default: null,
54
- namespace: null,
55
- };
56
- importClause.getChildren().forEach((child) => {
57
- if (child.kind === ts.SyntaxKind.NamedImports) {
58
- // import [...,]{a,b,c}
59
- child.forEachChild((namedChild) => {
60
- const importText = namedChild.getText().trim();
61
- const aliasMatch = aliasImport.exec(importText);
62
- result.named.push(aliasMatch ? aliasMatch[1] : importText);
63
- });
64
- }
65
- else if (child.kind === ts.SyntaxKind.NamespaceImport) {
66
- // * as coolName
67
- result.namespace = child.getText().replace('* as ', '');
68
- }
69
- else if (child.kind === ts.SyntaxKind.Identifier) {
70
- // import coolName
71
- result.default = child.getText();
72
- }
73
- });
74
- return result;
75
- };
76
- // return alias-like name for an import value/variable name
77
- // this helps alleviate duplicate import names in import-map.ts
78
- export const getImportValueAlias = (importValue, moduleName, importType) => {
79
- if (process.env.IMPORT_ALIAS_STRATEGY === 'plain')
80
- return importValue;
81
- // Add extra uniqueness since the same alias can be used for different import types
82
- const importTypeId = importType === 'named' ? 'n' : importType === 'default' ? 'd' : 'ns';
83
- const suffix = crypto.hash('sha1', `${moduleName}_${importTypeId}`);
84
- return `${importValue}_${suffix}`;
85
- };
86
- // eslint-disable-next-line jsdoc/require-jsdoc
87
- function _getImportMap(paths) {
88
- // make preparations for handling ts/js files
89
- const appPath = process.cwd();
90
- let cliCompilerOptions = {
91
- baseUrl: appPath,
92
- allowJs: true,
93
- target: ts.ScriptTarget.ESNext,
94
- };
95
- const tsConfig = ts.readConfigFile(path.resolve(appPath, 'tsconfig.json'), ts.sys.readFile);
96
- if (tsConfig.error) {
97
- console.warn(`[Codegen] Error reading tsconfig.json from app root: ${tsConfig.error.messageText}`);
98
- }
99
- else {
100
- cliCompilerOptions = Object.assign(Object.assign({}, tsConfig.config.compilerOptions), cliCompilerOptions);
101
- }
102
- const tsHost = ts.createCompilerHost(cliCompilerOptions, true);
103
- // indexed version of import map - we will store and aggregate unique import paths and their imports here
104
- const importMap = new Map();
105
- // index to keep track of unique import values imported from different modules
106
- // helps avoid duplicate import names in the final import-map.ts file
107
- const importsList = [];
108
- paths.forEach((codeFilePath) => {
109
- const codeFileFullPath = path.isAbsolute(codeFilePath)
110
- ? codeFilePath
111
- : path.resolve(appPath, codeFilePath);
112
- // attempt to parse current file to extract imports from
113
- const tsCodeSource = tsHost.getSourceFile(codeFileFullPath, ts.ScriptTarget.Latest, (msg) => {
114
- throw new Error(`[Codegen] Failed to parse ${codeFileFullPath}: ${msg}`);
115
- });
116
- if (!tsCodeSource)
117
- throw ReferenceError(`[Codegen] Failed to find file ${codeFileFullPath}`);
118
- // By transpiling the code from current file to JS we get rid of unused imports and the type imports
119
- const jsCode = ts.transpileModule(tsCodeSource.getFullText(), {
120
- compilerOptions: cliCompilerOptions,
121
- });
122
- // despite the name, ts.createSourceFile only creates SourceFile instance in runtime. Go figure ¯\_(ツ)_/¯
123
- const jsCodeSource = ts.createSourceFile('code.js', jsCode.outputText, ts.ScriptTarget.ESNext, true);
124
- // finally, we parse the final, trasformed js code and process import statements
125
- ts.forEachChild(jsCodeSource, (childNode) => {
126
- var _a;
127
- if (ts.isImportDeclaration(childNode) && childNode.importClause) {
128
- const imports = getImportedValues(childNode);
129
- if (!imports) {
130
- return;
131
- }
132
- // import path is extracted
133
- const moduleName = childNode.moduleSpecifier.getText().replace(/['"]/g, '');
134
- const resolvedModule = ts.nodeModuleNameResolver(moduleName, codeFileFullPath, cliCompilerOptions, tsHost);
135
- // get import path and check if its import target exists
136
- const resolvedImportPath = (_a = resolvedModule === null || resolvedModule === void 0 ? void 0 : resolvedModule.resolvedModule) === null || _a === void 0 ? void 0 : _a.resolvedFileName;
137
- if (!resolvedImportPath) {
138
- console.warn('[Codegen] Could not resolve a file for import %s', moduleName);
139
- return;
140
- }
141
- let importModuleName;
142
- if (resolvedImportPath.includes('node_modules') ||
143
- resolvedImportPath.endsWith('.d.ts') ||
144
- !toPosixPath(resolvedImportPath).startsWith(toPosixPath(appPath) + '/')) {
145
- // if import path points to a file in local app - process import path to the file (i.e. ./myComponent)
146
- // if it points to node_modules or a file in monorepo - parse import path as dependency module name (i.e. React)
147
- // external dependency → keep as-is
148
- importModuleName = isNodeModuleImport(moduleName)
149
- ? stripExtension(moduleName)
150
- : getRelativeImportPath(resolvedImportPath, appPath);
151
- }
152
- else {
153
- // local file
154
- importModuleName = isNodeModuleImport(moduleName)
155
- ? stripExtension(moduleName)
156
- : getRelativeImportPath(resolvedImportPath, appPath);
157
- }
158
- // Set module import info in the map. If module import exists - add entries to existing entry
159
- // Otherwise, add new entry
160
- if (!importMap.has(importModuleName)) {
161
- importMap.set(importModuleName, {
162
- namedExports: new Map(),
163
- defaultExport: null,
164
- namespaceExport: null,
165
- });
166
- }
167
- const moduleEntry = importMap.get(importModuleName);
168
- imports.named.forEach((importEntry) => {
169
- const sameModuleNamedAlready = moduleEntry.namedExports.has(importEntry);
170
- if (sameModuleNamedAlready) {
171
- return;
172
- }
173
- const nameTaken = importsList.includes(importEntry);
174
- const importValue = nameTaken
175
- ? getImportValueAlias(importEntry, importModuleName, 'named')
176
- : importEntry;
177
- moduleEntry.namedExports.set(importEntry, importValue);
178
- importsList.push(importEntry);
179
- });
180
- if (imports.namespace) {
181
- const sameModuleNamedAlready = moduleEntry.namespaceExport;
182
- if (sameModuleNamedAlready) {
183
- return;
184
- }
185
- const nameTaken = importsList.includes(imports.namespace);
186
- const importValue = nameTaken
187
- ? getImportValueAlias(imports.namespace, importModuleName, 'namespace')
188
- : imports.namespace;
189
- moduleEntry.namespaceExport = importValue;
190
- importsList.push(importValue);
191
- }
192
- if (imports.default) {
193
- const sameModuleNamedAlready = moduleEntry.defaultExport;
194
- if (sameModuleNamedAlready) {
195
- return;
196
- }
197
- const nameTaken = importsList.includes(imports.default);
198
- const importValue = nameTaken
199
- ? getImportValueAlias(imports.default, importModuleName, 'default')
200
- : imports.default;
201
- moduleEntry.defaultExport = importValue;
202
- importsList.push(importValue);
203
- }
204
- }
205
- });
206
- });
207
- return importMap;
208
- }
209
- const prepImportMaps = async (paths, separateMaps) => {
210
- const importMapFileDefault = path.join(process.cwd(), '.sitecore', 'import-map.ts');
211
- if (!separateMaps) {
212
- return [{ map: getImportMap(paths), path: importMapFileDefault }];
213
- }
214
- const appPath = process.cwd();
215
- const serverPaths = [];
216
- const clientPaths = [];
217
- const importMapFileClient = path.join(process.cwd(), '.sitecore', 'import-map.client.ts');
218
- const importMapFileServer = path.join(process.cwd(), '.sitecore', 'import-map.server.ts');
219
- for (const componentPath of paths) {
220
- const fullPath = path.isAbsolute(componentPath)
221
- ? componentPath
222
- : path.resolve(appPath, componentPath);
223
- // read the start of the file that may be 'use client'
224
- const firstLine = await new Promise((resolve) => {
225
- let readBuffer = '';
226
- const stream = fs.createReadStream(fullPath, { end: 12 });
227
- stream
228
- .on('data', async (chunk) => {
229
- readBuffer += chunk.toString();
230
- })
231
- .on('close', () => resolve(readBuffer))
232
- .on('error', () => resolve(''));
233
- });
234
- if (!firstLine)
235
- continue;
236
- if (firstLine.match(/['"]use client['"]/)) {
237
- clientPaths.push(fullPath);
238
- }
239
- else {
240
- serverPaths.push(fullPath);
241
- }
242
- }
243
- return [
244
- { map: getImportMap(serverPaths), path: importMapFileServer },
245
- { map: getImportMap(clientPaths), path: importMapFileClient, isClient: true },
246
- ];
247
- };
248
- /**
249
- * Entry point function for generating import-map. Parses provided paths and outputs the modules and imports from those files into .sitecore/import-map.ts
250
- * @param {WriteImportMapArgsInternal} args include/exclude paths settings to be processed for import-map, and the Sitecore configuration.
251
- * @public
252
- */
253
- export const writeImportMap = (args) => {
254
- return async ({ scConfig } = {}) => {
255
- var _a;
256
- const config = (_a = args.scConfig) !== null && _a !== void 0 ? _a : scConfig;
257
- const defaultTemplate = args.defaultTemplate || defaultMapTemplate;
258
- const clientTemplate = args.clientTemplate || defaultMapTemplate;
259
- if (!config) {
260
- throw new Error('Sitecore configuration is required to be provided');
261
- }
262
- if (config.disableCodeGeneration) {
263
- debug.common('Skipping import map generation. Code generation functionality is disabled.');
264
- return;
265
- }
266
- const paths = _getComponentList(args.paths, args.exclude).map((entry) => entry.filePath);
267
- // TODO: don't run in pages router
268
- const importMaps = await prepImportMaps(paths, args.separateServerClientMaps);
269
- for (const importMap of importMaps) {
270
- console.log(`[Codegen] Generating import map: ${JSON.stringify({
271
- paths: args.paths,
272
- exclude: args.exclude,
273
- })}.\n Writing into ${importMap.path} ...`);
274
- // get generated map and combine with default one
275
- // can be expanded when adding support for non-react frameworks
276
- const importMapContent = importMap.isClient
277
- ? clientTemplate(importMap.map)
278
- : defaultTemplate(importMap.map);
279
- try {
280
- fs.writeFileSync(importMap.path, importMapContent, {
281
- encoding: 'utf8',
282
- });
283
- }
284
- catch (error) {
285
- console.error(`[Codegen] Import Map generation failed. Error writing to file ${importMap.path}:`, error);
286
- throw error;
287
- }
288
- }
289
- };
290
- };
291
- // eslint-disable-next-line jsdoc/require-jsdoc
292
- function _defaultMapTemplate(indexedImportMap, framework = 'core', defaultImportEntriesImport = 'defaultImportEntries') {
293
- const importStatements = [];
294
- const importMapArray = Array.from(indexedImportMap);
295
- // get import map entries after
296
- const finalImportMap = importMapArray.map(([modulePath, imports]) => {
297
- const defaultExport = {
298
- name: 'default',
299
- value: imports.defaultExport,
300
- };
301
- const namedExports = Array.from(imports.namedExports).map(([name, value]) => {
302
- return {
303
- name,
304
- value,
305
- };
306
- });
307
- const namespaceExport = {
308
- name: '*',
309
- value: imports.namespaceExport,
310
- };
311
- return {
312
- module: modulePath,
313
- defaultExport,
314
- namedExports,
315
- namespaceExport,
316
- };
317
- });
318
- finalImportMap.forEach((entry) => {
319
- if (entry.namedExports.length > 0) {
320
- const namedExports = entry.namedExports
321
- .map((entry) => {
322
- return entry.name !== entry.value ? `${entry.name} as ${entry.value}` : entry.name;
323
- })
324
- .join(', ');
325
- importStatements.push(`import { ${namedExports} } from '${entry.module}';`);
326
- }
327
- if (entry.defaultExport.value) {
328
- importStatements.push(`import ${entry.defaultExport.value} from '${entry.module}';`);
329
- }
330
- if (entry.namespaceExport.value) {
331
- importStatements.push(`import * as ${entry.namespaceExport.value} from '${entry.module}';`);
332
- }
333
- });
334
- const outputExportEntries = (entry) => {
335
- return ([...entry.namedExports, entry.defaultExport, entry.namespaceExport]
336
- .filter((entry) => entry.value !== null)
337
- .map((namedExport) => ` { name: '${namedExport.name}', value: ${namedExport.value} }`)
338
- .join(',\n') + ',');
339
- };
340
- return `// This file is auto-generated by the Sitecore Content SDK.
341
- // Below are built-in Content SDK imports neccessary for the import map
342
- import {
343
- combineImportEntries,
344
- ${defaultImportEntriesImport},
345
- ImportEntry,
346
- } from '@sitecore-content-sdk/${framework}/codegen';
347
- // end of built-in imports
348
-
349
- ${importStatements.join('\n')}
350
-
351
- const importMap = [
352
- ${finalImportMap
353
- .map((entry) => [
354
- ' {',
355
- ` module: '${entry.module}',`,
356
- ' exports: [',
357
- outputExportEntries(entry),
358
- ' ]',
359
- ' }',
360
- ]
361
- .filter(Boolean)
362
- .join('\n'))
363
- .join(',\n')}
364
- ] as ImportEntry[];
365
-
366
- export default combineImportEntries(${defaultImportEntriesImport}, importMap);
367
- `;
368
- }