@se-studio/contentful-rest-api 1.0.46 → 1.0.47

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 (298) hide show
  1. package/CHANGELOG.md +416 -0
  2. package/dist/api/article-type.d.ts +37 -0
  3. package/dist/api/article-type.d.ts.map +1 -0
  4. package/dist/api/article-type.js +134 -0
  5. package/dist/api/article-type.js.map +1 -0
  6. package/dist/api/article.d.ts +32 -0
  7. package/dist/api/article.d.ts.map +1 -0
  8. package/dist/api/article.js +43 -0
  9. package/dist/api/article.js.map +1 -0
  10. package/dist/api/asset.d.ts +28 -0
  11. package/dist/api/asset.d.ts.map +1 -0
  12. package/dist/api/asset.js +55 -0
  13. package/dist/api/asset.js.map +1 -0
  14. package/dist/api/context.d.ts +24 -0
  15. package/dist/api/context.d.ts.map +1 -0
  16. package/dist/api/context.js +62 -0
  17. package/dist/api/context.js.map +1 -0
  18. package/dist/api/custom-type.d.ts +37 -0
  19. package/dist/api/custom-type.d.ts.map +1 -0
  20. package/dist/api/custom-type.js +44 -0
  21. package/dist/api/custom-type.js.map +1 -0
  22. package/dist/api/helpers.d.ts +73 -0
  23. package/dist/api/helpers.d.ts.map +1 -0
  24. package/dist/api/helpers.js +296 -0
  25. package/dist/api/helpers.js.map +1 -0
  26. package/dist/api/index.d.ts +22 -0
  27. package/dist/api/index.d.ts.map +1 -0
  28. package/dist/api/index.js +28 -0
  29. package/dist/api/index.js.map +1 -0
  30. package/dist/api/links.d.ts +109 -0
  31. package/dist/api/links.d.ts.map +1 -0
  32. package/dist/api/links.js +199 -0
  33. package/dist/api/links.js.map +1 -0
  34. package/dist/api/page.d.ts +33 -0
  35. package/dist/api/page.d.ts.map +1 -0
  36. package/dist/api/page.js +40 -0
  37. package/dist/api/page.js.map +1 -0
  38. package/dist/api/person.d.ts +37 -0
  39. package/dist/api/person.d.ts.map +1 -0
  40. package/dist/api/person.js +134 -0
  41. package/dist/api/person.js.map +1 -0
  42. package/dist/api/preview.d.ts +55 -0
  43. package/dist/api/preview.d.ts.map +1 -0
  44. package/dist/api/preview.js +160 -0
  45. package/dist/api/preview.js.map +1 -0
  46. package/dist/api/related-articles.d.ts +22 -0
  47. package/dist/api/related-articles.d.ts.map +1 -0
  48. package/dist/api/related-articles.js +82 -0
  49. package/dist/api/related-articles.js.map +1 -0
  50. package/dist/api/server-asset.d.ts +40 -0
  51. package/dist/api/server-asset.d.ts.map +1 -0
  52. package/dist/api/server-asset.js +65 -0
  53. package/dist/api/server-asset.js.map +1 -0
  54. package/dist/api/sitemap.d.ts +131 -0
  55. package/dist/api/sitemap.d.ts.map +1 -0
  56. package/dist/api/sitemap.js +199 -0
  57. package/dist/api/sitemap.js.map +1 -0
  58. package/dist/api/tag.d.ts +37 -0
  59. package/dist/api/tag.d.ts.map +1 -0
  60. package/dist/api/tag.js +131 -0
  61. package/dist/api/tag.js.map +1 -0
  62. package/dist/api/template.d.ts +49 -0
  63. package/dist/api/template.d.ts.map +1 -0
  64. package/dist/api/template.js +88 -0
  65. package/dist/api/template.js.map +1 -0
  66. package/dist/api/types.d.ts +98 -0
  67. package/dist/api/types.d.ts.map +1 -0
  68. package/dist/api/types.js +2 -0
  69. package/dist/api/types.js.map +1 -0
  70. package/dist/baseTypes/baseAlternatePageContent.d.ts +24 -0
  71. package/dist/baseTypes/baseAlternatePageContent.d.ts.map +1 -0
  72. package/dist/baseTypes/baseAlternatePageContent.js +2 -0
  73. package/dist/baseTypes/baseAlternatePageContent.js.map +1 -0
  74. package/dist/baseTypes/baseArticle.d.ts +179 -0
  75. package/dist/baseTypes/baseArticle.d.ts.map +1 -0
  76. package/dist/baseTypes/baseArticle.js +2 -0
  77. package/dist/baseTypes/baseArticle.js.map +1 -0
  78. package/dist/baseTypes/baseArticleType.d.ts +156 -0
  79. package/dist/baseTypes/baseArticleType.d.ts.map +1 -0
  80. package/dist/baseTypes/baseArticleType.js +2 -0
  81. package/dist/baseTypes/baseArticleType.js.map +1 -0
  82. package/dist/baseTypes/baseBanner.d.ts +76 -0
  83. package/dist/baseTypes/baseBanner.d.ts.map +1 -0
  84. package/dist/baseTypes/baseBanner.js +2 -0
  85. package/dist/baseTypes/baseBanner.js.map +1 -0
  86. package/dist/baseTypes/baseCollection.d.ts +132 -0
  87. package/dist/baseTypes/baseCollection.d.ts.map +1 -0
  88. package/dist/baseTypes/baseCollection.js +2 -0
  89. package/dist/baseTypes/baseCollection.js.map +1 -0
  90. package/dist/baseTypes/baseComponent.d.ts +130 -0
  91. package/dist/baseTypes/baseComponent.d.ts.map +1 -0
  92. package/dist/baseTypes/baseComponent.js +2 -0
  93. package/dist/baseTypes/baseComponent.js.map +1 -0
  94. package/dist/baseTypes/baseCustomType.d.ts +126 -0
  95. package/dist/baseTypes/baseCustomType.d.ts.map +1 -0
  96. package/dist/baseTypes/baseCustomType.js +2 -0
  97. package/dist/baseTypes/baseCustomType.js.map +1 -0
  98. package/dist/baseTypes/baseExternalComponent.d.ts +66 -0
  99. package/dist/baseTypes/baseExternalComponent.d.ts.map +1 -0
  100. package/dist/baseTypes/baseExternalComponent.js +2 -0
  101. package/dist/baseTypes/baseExternalComponent.js.map +1 -0
  102. package/dist/baseTypes/baseExternalVideo.d.ts +85 -0
  103. package/dist/baseTypes/baseExternalVideo.d.ts.map +1 -0
  104. package/dist/baseTypes/baseExternalVideo.js +2 -0
  105. package/dist/baseTypes/baseExternalVideo.js.map +1 -0
  106. package/dist/baseTypes/baseLink.d.ts +90 -0
  107. package/dist/baseTypes/baseLink.d.ts.map +1 -0
  108. package/dist/baseTypes/baseLink.js +2 -0
  109. package/dist/baseTypes/baseLink.js.map +1 -0
  110. package/dist/baseTypes/baseMedia.d.ts +92 -0
  111. package/dist/baseTypes/baseMedia.d.ts.map +1 -0
  112. package/dist/baseTypes/baseMedia.js +2 -0
  113. package/dist/baseTypes/baseMedia.js.map +1 -0
  114. package/dist/baseTypes/baseNavigation.d.ts +36 -0
  115. package/dist/baseTypes/baseNavigation.d.ts.map +1 -0
  116. package/dist/baseTypes/baseNavigation.js +2 -0
  117. package/dist/baseTypes/baseNavigation.js.map +1 -0
  118. package/dist/baseTypes/baseNavigationItem.d.ts +96 -0
  119. package/dist/baseTypes/baseNavigationItem.d.ts.map +1 -0
  120. package/dist/baseTypes/baseNavigationItem.js +2 -0
  121. package/dist/baseTypes/baseNavigationItem.js.map +1 -0
  122. package/dist/baseTypes/basePage.d.ts +120 -0
  123. package/dist/baseTypes/basePage.d.ts.map +1 -0
  124. package/dist/baseTypes/basePage.js +2 -0
  125. package/dist/baseTypes/basePage.js.map +1 -0
  126. package/dist/baseTypes/basePageTest.d.ts +66 -0
  127. package/dist/baseTypes/basePageTest.d.ts.map +1 -0
  128. package/dist/baseTypes/basePageTest.js +2 -0
  129. package/dist/baseTypes/basePageTest.js.map +1 -0
  130. package/dist/baseTypes/basePageVariant.d.ts +123 -0
  131. package/dist/baseTypes/basePageVariant.d.ts.map +1 -0
  132. package/dist/baseTypes/basePageVariant.js +2 -0
  133. package/dist/baseTypes/basePageVariant.js.map +1 -0
  134. package/dist/baseTypes/basePerson.d.ts +111 -0
  135. package/dist/baseTypes/basePerson.d.ts.map +1 -0
  136. package/dist/baseTypes/basePerson.js +2 -0
  137. package/dist/baseTypes/basePerson.js.map +1 -0
  138. package/dist/baseTypes/baseSchema.d.ts +18 -0
  139. package/dist/baseTypes/baseSchema.d.ts.map +1 -0
  140. package/dist/baseTypes/baseSchema.js +2 -0
  141. package/dist/baseTypes/baseSchema.js.map +1 -0
  142. package/dist/baseTypes/baseShared.d.ts +30 -0
  143. package/dist/baseTypes/baseShared.d.ts.map +1 -0
  144. package/dist/baseTypes/baseShared.js +2 -0
  145. package/dist/baseTypes/baseShared.js.map +1 -0
  146. package/dist/baseTypes/baseTag.d.ts +108 -0
  147. package/dist/baseTypes/baseTag.d.ts.map +1 -0
  148. package/dist/baseTypes/baseTag.js +2 -0
  149. package/dist/baseTypes/baseTag.js.map +1 -0
  150. package/dist/baseTypes/baseTagType.d.ts +11 -0
  151. package/dist/baseTypes/baseTagType.d.ts.map +1 -0
  152. package/dist/baseTypes/baseTagType.js +2 -0
  153. package/dist/baseTypes/baseTagType.js.map +1 -0
  154. package/dist/baseTypes/baseTemplate.d.ts +55 -0
  155. package/dist/baseTypes/baseTemplate.d.ts.map +1 -0
  156. package/dist/baseTypes/baseTemplate.js +2 -0
  157. package/dist/baseTypes/baseTemplate.js.map +1 -0
  158. package/dist/client.d.ts +143 -0
  159. package/dist/client.d.ts.map +1 -0
  160. package/dist/client.js +268 -0
  161. package/dist/client.js.map +1 -0
  162. package/dist/converters/article.d.ts +42 -0
  163. package/dist/converters/article.d.ts.map +1 -0
  164. package/dist/converters/article.js +220 -0
  165. package/dist/converters/article.js.map +1 -0
  166. package/dist/converters/asset.d.ts +22 -0
  167. package/dist/converters/asset.d.ts.map +1 -0
  168. package/dist/converters/asset.js +282 -0
  169. package/dist/converters/asset.js.map +1 -0
  170. package/dist/converters/collection.d.ts +26 -0
  171. package/dist/converters/collection.d.ts.map +1 -0
  172. package/dist/converters/collection.js +50 -0
  173. package/dist/converters/collection.js.map +1 -0
  174. package/dist/converters/component.d.ts +26 -0
  175. package/dist/converters/component.d.ts.map +1 -0
  176. package/dist/converters/component.js +54 -0
  177. package/dist/converters/component.js.map +1 -0
  178. package/dist/converters/customType.d.ts +24 -0
  179. package/dist/converters/customType.d.ts.map +1 -0
  180. package/dist/converters/customType.js +71 -0
  181. package/dist/converters/customType.js.map +1 -0
  182. package/dist/converters/externalComponent.d.ts +22 -0
  183. package/dist/converters/externalComponent.d.ts.map +1 -0
  184. package/dist/converters/externalComponent.js +34 -0
  185. package/dist/converters/externalComponent.js.map +1 -0
  186. package/dist/converters/helpers.d.ts +116 -0
  187. package/dist/converters/helpers.d.ts.map +1 -0
  188. package/dist/converters/helpers.js +128 -0
  189. package/dist/converters/helpers.js.map +1 -0
  190. package/dist/converters/iconCollector.d.ts +65 -0
  191. package/dist/converters/iconCollector.d.ts.map +1 -0
  192. package/dist/converters/iconCollector.js +282 -0
  193. package/dist/converters/iconCollector.js.map +1 -0
  194. package/dist/converters/index.d.ts +18 -0
  195. package/dist/converters/index.d.ts.map +1 -0
  196. package/dist/converters/index.js +18 -0
  197. package/dist/converters/index.js.map +1 -0
  198. package/dist/converters/link.d.ts +11 -0
  199. package/dist/converters/link.d.ts.map +1 -0
  200. package/dist/converters/link.js +96 -0
  201. package/dist/converters/link.js.map +1 -0
  202. package/dist/converters/navigationItem.d.ts +11 -0
  203. package/dist/converters/navigationItem.d.ts.map +1 -0
  204. package/dist/converters/navigationItem.js +73 -0
  205. package/dist/converters/navigationItem.js.map +1 -0
  206. package/dist/converters/page.d.ts +44 -0
  207. package/dist/converters/page.d.ts.map +1 -0
  208. package/dist/converters/page.js +121 -0
  209. package/dist/converters/page.js.map +1 -0
  210. package/dist/converters/person.d.ts +40 -0
  211. package/dist/converters/person.d.ts.map +1 -0
  212. package/dist/converters/person.js +109 -0
  213. package/dist/converters/person.js.map +1 -0
  214. package/dist/converters/resolver.d.ts +29 -0
  215. package/dist/converters/resolver.d.ts.map +1 -0
  216. package/dist/converters/resolver.js +317 -0
  217. package/dist/converters/resolver.js.map +1 -0
  218. package/dist/converters/schema.d.ts +14 -0
  219. package/dist/converters/schema.d.ts.map +1 -0
  220. package/dist/converters/schema.js +18 -0
  221. package/dist/converters/schema.js.map +1 -0
  222. package/dist/converters/svgProcessor.d.ts +23 -0
  223. package/dist/converters/svgProcessor.d.ts.map +1 -0
  224. package/dist/converters/svgProcessor.js +47 -0
  225. package/dist/converters/svgProcessor.js.map +1 -0
  226. package/dist/converters/tag.d.ts +25 -0
  227. package/dist/converters/tag.d.ts.map +1 -0
  228. package/dist/converters/tag.js +98 -0
  229. package/dist/converters/tag.js.map +1 -0
  230. package/dist/converters/template.d.ts +26 -0
  231. package/dist/converters/template.d.ts.map +1 -0
  232. package/dist/converters/template.js +44 -0
  233. package/dist/converters/template.js.map +1 -0
  234. package/dist/index.d.ts +28 -721
  235. package/dist/index.d.ts.map +1 -0
  236. package/dist/index.js +37 -3634
  237. package/dist/index.js.map +1 -1
  238. package/dist/revalidation/handlers.d.ts +52 -0
  239. package/dist/revalidation/handlers.d.ts.map +1 -0
  240. package/dist/revalidation/handlers.js +130 -0
  241. package/dist/revalidation/handlers.js.map +1 -0
  242. package/dist/revalidation/index.d.ts +3 -0
  243. package/dist/revalidation/index.d.ts.map +1 -0
  244. package/dist/revalidation/index.js +4 -0
  245. package/dist/revalidation/index.js.map +1 -0
  246. package/dist/revalidation/nextjs-route.d.ts +31 -0
  247. package/dist/revalidation/nextjs-route.d.ts.map +1 -0
  248. package/dist/revalidation/nextjs-route.js +34 -0
  249. package/dist/revalidation/nextjs-route.js.map +1 -0
  250. package/dist/revalidation/route.d.ts +3 -0
  251. package/dist/revalidation/route.d.ts.map +1 -0
  252. package/dist/revalidation/route.js +97 -0
  253. package/dist/revalidation/route.js.map +1 -0
  254. package/dist/revalidation/server-utils.d.ts +22 -0
  255. package/dist/revalidation/server-utils.d.ts.map +1 -0
  256. package/dist/revalidation/server-utils.js +41 -0
  257. package/dist/revalidation/server-utils.js.map +1 -0
  258. package/dist/revalidation/tags.d.ts +81 -0
  259. package/dist/revalidation/tags.d.ts.map +1 -0
  260. package/dist/revalidation/tags.js +117 -0
  261. package/dist/revalidation/tags.js.map +1 -0
  262. package/dist/revalidation/utils.d.ts +21 -0
  263. package/dist/revalidation/utils.d.ts.map +1 -0
  264. package/dist/revalidation/utils.js +51 -0
  265. package/dist/revalidation/utils.js.map +1 -0
  266. package/dist/server.d.ts +7 -0
  267. package/dist/server.d.ts.map +1 -0
  268. package/dist/server.js +10 -0
  269. package/dist/server.js.map +1 -0
  270. package/dist/types.d.ts +67 -0
  271. package/dist/types.d.ts.map +1 -0
  272. package/dist/types.js +2 -0
  273. package/dist/types.js.map +1 -0
  274. package/dist/utils/arrayUtils.d.ts +3 -0
  275. package/dist/utils/arrayUtils.d.ts.map +1 -0
  276. package/dist/utils/arrayUtils.js +12 -0
  277. package/dist/utils/arrayUtils.js.map +1 -0
  278. package/dist/utils/dateUtils.d.ts +9 -0
  279. package/dist/utils/dateUtils.d.ts.map +1 -0
  280. package/dist/utils/dateUtils.js +26 -0
  281. package/dist/utils/dateUtils.js.map +1 -0
  282. package/dist/utils/errors.d.ts +56 -0
  283. package/dist/utils/errors.d.ts.map +1 -0
  284. package/dist/utils/errors.js +100 -0
  285. package/dist/utils/errors.js.map +1 -0
  286. package/dist/utils/index.d.ts +8 -0
  287. package/dist/utils/index.d.ts.map +1 -0
  288. package/dist/utils/index.js +8 -0
  289. package/dist/utils/index.js.map +1 -0
  290. package/dist/utils/json-utils.d.ts +17 -0
  291. package/dist/utils/json-utils.d.ts.map +1 -0
  292. package/dist/utils/json-utils.js +43 -0
  293. package/dist/utils/json-utils.js.map +1 -0
  294. package/dist/utils/retry.d.ts +112 -0
  295. package/dist/utils/retry.d.ts.map +1 -0
  296. package/dist/utils/retry.js +221 -0
  297. package/dist/utils/retry.js.map +1 -0
  298. package/package.json +12 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconCollector.d.ts","sourceRoot":"","sources":["../../src/converters/iconCollector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EAEX,iBAAiB,EACjB,SAAS,EACT,MAAM,EACN,OAAO,EACR,MAAM,4BAA4B,CAAC;AAKpC;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CASxF;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,SAAS,EAAE,CAeb;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,EAAE,CAM5F;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,SAAS,EAAE,CAM/F;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,EAAE,CAqC3F;AA2CD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,EAAE,CAsGhG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,GACxC,SAAS,EAAE,GAAG,SAAS,CAczB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BjG"}
@@ -0,0 +1,282 @@
1
+ import { isSvgImage } from '@se-studio/core-data-types';
2
+ import { fetchSvgContent, processSvgForSprite } from './svgProcessor';
3
+ /**
4
+ * Extract SVG image from a visual if it's marked as an icon.
5
+ * Only returns SVG images that have isIcon: true (set during conversion from icon fields).
6
+ *
7
+ * @param visual - Visual to check
8
+ * @returns SVG image if visual contains an icon SVG, undefined otherwise
9
+ */
10
+ export function extractIconFromVisual(visual) {
11
+ if (!visual?.image) {
12
+ return undefined;
13
+ }
14
+ // Only return SVG images that are marked as icons
15
+ if (isSvgImage(visual.image) && visual.image.isIcon) {
16
+ return visual.image;
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Extract icon SVG images from a responsive visual (both desktop and mobile).
22
+ * Only returns SVG images that have isIcon: true.
23
+ *
24
+ * @param visual - Responsive visual to check
25
+ * @returns Array of icon SVG images found (may contain 0, 1, or 2 items)
26
+ */
27
+ export function extractIconsFromResponsiveVisual(visual) {
28
+ const icons = [];
29
+ if (visual?.visual) {
30
+ const svg = extractIconFromVisual(visual.visual);
31
+ if (svg) {
32
+ icons.push(svg);
33
+ }
34
+ }
35
+ if (visual?.mobileVisual) {
36
+ const svg = extractIconFromVisual(visual.mobileVisual);
37
+ if (svg) {
38
+ icons.push(svg);
39
+ }
40
+ }
41
+ return icons;
42
+ }
43
+ /**
44
+ * Collect icon SVG from a component's icon field.
45
+ *
46
+ * @param component - Component to check
47
+ * @returns Array of icon SVGs found
48
+ */
49
+ export function collectIconsFromComponent(component) {
50
+ if (!component) {
51
+ return [];
52
+ }
53
+ const icon = extractIconFromVisual(component.icon);
54
+ return icon ? [icon] : [];
55
+ }
56
+ /**
57
+ * Collect icon SVG from a collection's icon field.
58
+ *
59
+ * @param collection - Collection to check
60
+ * @returns Array of icon SVGs found
61
+ */
62
+ export function collectIconsFromCollection(collection) {
63
+ if (!collection) {
64
+ return [];
65
+ }
66
+ const icon = extractIconFromVisual(collection.icon);
67
+ return icon ? [icon] : [];
68
+ }
69
+ /**
70
+ * Recursively collect all SVG icons from navigation structures.
71
+ * This includes icons from navigation item links and nested navigation entries.
72
+ *
73
+ * @param navigation - Navigation structure to scan
74
+ * @returns Array of all SVG icons found
75
+ */
76
+ export function collectIconsFromNavigation(navigation) {
77
+ if (!navigation) {
78
+ return [];
79
+ }
80
+ const icons = [];
81
+ const seenIds = new Set();
82
+ function addIcon(icon) {
83
+ // Deduplicate by ID
84
+ if (!seenIds.has(icon.id)) {
85
+ seenIds.add(icon.id);
86
+ icons.push(icon);
87
+ }
88
+ }
89
+ function processNavItem(item) {
90
+ // Check link icon
91
+ if (item.link?.icon) {
92
+ const linkIcons = extractIconsFromResponsiveVisual(item.link.icon);
93
+ for (const icon of linkIcons) {
94
+ addIcon(icon);
95
+ }
96
+ }
97
+ // Recursively process nested entries
98
+ if (item.entries) {
99
+ for (const nestedItem of item.entries) {
100
+ processNavItem(nestedItem);
101
+ }
102
+ }
103
+ }
104
+ for (const item of navigation.entries) {
105
+ processNavItem(item);
106
+ }
107
+ return icons;
108
+ }
109
+ /**
110
+ * Traverse a rich text document and collect icons from embedded entries.
111
+ * This handles embedded-entry-block and embedded-entry-inline nodes that contain
112
+ * resolved content (Components, Collections, etc.) with potential icons.
113
+ *
114
+ * @param richText - Rich text document to traverse
115
+ * @param processContent - Callback to process embedded content items
116
+ */
117
+ function collectIconsFromRichText(richText, processContent) {
118
+ if (!richText?.json) {
119
+ return;
120
+ }
121
+ const traverseNode = (node) => {
122
+ // Check for embedded entry in data.target (resolved by resolveRichTextDocument)
123
+ if (node.data?.target &&
124
+ typeof node.data.target === 'object' &&
125
+ 'type' in node.data.target &&
126
+ 'id' in node.data.target) {
127
+ processContent(node.data.target);
128
+ }
129
+ // Recurse into child content
130
+ if ('content' in node && Array.isArray(node.content)) {
131
+ for (const child of node.content) {
132
+ if (typeof child === 'object' && child !== null && 'nodeType' in child) {
133
+ traverseNode(child);
134
+ }
135
+ }
136
+ }
137
+ };
138
+ // Start traversal from the document root
139
+ traverseNode(richText.json);
140
+ }
141
+ /**
142
+ * Recursively collect all SVG icons from page content.
143
+ * This includes icons from components, collections, nested content,
144
+ * and embedded entries within rich text fields (body, additionalCopy).
145
+ *
146
+ * @param contents - Array of content items to scan
147
+ * @returns Array of all SVG icons found
148
+ */
149
+ export function collectIconsFromContent(contents) {
150
+ if (!contents) {
151
+ return [];
152
+ }
153
+ const icons = [];
154
+ const seenIds = new Set();
155
+ // Track processed content IDs to avoid infinite loops with circular references
156
+ const processedIds = new Set();
157
+ function addIcon(icon) {
158
+ // Deduplicate by ID
159
+ if (!seenIds.has(icon.id)) {
160
+ seenIds.add(icon.id);
161
+ icons.push(icon);
162
+ }
163
+ }
164
+ // Process a single content item (used by both main loop and rich text traversal)
165
+ function processContentItem(content) {
166
+ // Skip if already processed (prevents infinite loops)
167
+ if (processedIds.has(content.id)) {
168
+ return;
169
+ }
170
+ processedIds.add(content.id);
171
+ // Check component icon field
172
+ if (content.type === 'Component') {
173
+ const componentIcons = collectIconsFromComponent(content);
174
+ for (const icon of componentIcons) {
175
+ addIcon(icon);
176
+ }
177
+ // Type for component with optional rich text and contents fields
178
+ const component = content;
179
+ // Recursively check nested content if component has contents
180
+ if (component.contents) {
181
+ for (const nested of component.contents) {
182
+ processContentItem(nested);
183
+ }
184
+ }
185
+ // Check rich text fields for embedded content
186
+ collectIconsFromRichText(component.body, processContentItem);
187
+ collectIconsFromRichText(component.additionalCopy, processContentItem);
188
+ }
189
+ // Check collection icon field
190
+ if (content.type === 'Collection') {
191
+ const collectionIcons = collectIconsFromCollection(content);
192
+ for (const icon of collectionIcons) {
193
+ addIcon(icon);
194
+ }
195
+ // Type for collection with optional rich text fields
196
+ const collection = content;
197
+ // Recursively check collection contents
198
+ if (collection.contents) {
199
+ for (const nested of collection.contents) {
200
+ if (typeof nested === 'object' && nested !== null && 'type' in nested && 'id' in nested) {
201
+ processContentItem(nested);
202
+ }
203
+ }
204
+ }
205
+ // Check rich text fields for embedded content
206
+ collectIconsFromRichText(collection.body, processContentItem);
207
+ collectIconsFromRichText(collection.additionalCopy, processContentItem);
208
+ }
209
+ // Check links for icon fields (IResponsiveVisual)
210
+ if (content.type === 'Internal link' ||
211
+ content.type === 'External link' ||
212
+ content.type === 'Download link' ||
213
+ content.type === 'Blank link') {
214
+ const link = content;
215
+ if (link.icon) {
216
+ const linkIcons = extractIconsFromResponsiveVisual(link.icon);
217
+ for (const icon of linkIcons) {
218
+ addIcon(icon);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ // Process all top-level content items
224
+ for (const content of contents) {
225
+ processContentItem(content);
226
+ }
227
+ return icons;
228
+ }
229
+ /**
230
+ * Deduplicate icons by ID, preserving order of first occurrence.
231
+ * Takes any number of icon arrays and returns a single deduplicated array.
232
+ *
233
+ * @param iconArrays - Arrays of icons to merge and deduplicate
234
+ * @returns Deduplicated array of icons, or undefined if empty
235
+ */
236
+ export function deduplicateIcons(...iconArrays) {
237
+ const seenIds = new Set();
238
+ const icons = [];
239
+ for (const arr of iconArrays) {
240
+ for (const icon of arr) {
241
+ if (!seenIds.has(icon.id)) {
242
+ seenIds.add(icon.id);
243
+ icons.push(icon);
244
+ }
245
+ }
246
+ }
247
+ return icons.length > 0 ? icons : undefined;
248
+ }
249
+ /**
250
+ * Process icons by fetching SVG content and generating sprite symbols.
251
+ * This runs during data conversion to pre-process icons for the sprite sheet.
252
+ *
253
+ * @param icons - Array of icon SVG images to process
254
+ * @returns Array of icons with symbolContent populated
255
+ */
256
+ export async function processIconsForSprite(icons) {
257
+ if (icons.length === 0) {
258
+ return [];
259
+ }
260
+ // Process all icons in parallel
261
+ const processedIcons = await Promise.all(icons.map(async (icon) => {
262
+ try {
263
+ // Fetch SVG content (uses parent request's cache tags)
264
+ const svgContent = await fetchSvgContent(icon.svgSrc);
265
+ // Process into symbol format
266
+ const symbolContent = processSvgForSprite(svgContent, icon.id);
267
+ // Return icon with symbolContent populated
268
+ return {
269
+ ...icon,
270
+ symbolContent,
271
+ };
272
+ }
273
+ catch (error) {
274
+ // If processing fails, return icon without symbolContent
275
+ // The error will be logged but won't break the page
276
+ console.error(`Failed to process icon ${icon.id}:`, error);
277
+ return icon;
278
+ }
279
+ }));
280
+ return processedIcons;
281
+ }
282
+ //# sourceMappingURL=iconCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconCollector.js","sourceRoot":"","sources":["../../src/converters/iconCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Converters module
3
+ *
4
+ * Provides functional composition pattern for converting Contentful entries
5
+ * to typed objects. Use the base converters and compose with enhancers to
6
+ * create custom converters for your specific needs.
7
+ */
8
+ export { convertAssetToVisual, convertExternalVideoEntryToVisual, convertMediaEntryToVisual, createResponsiveVisual, lookupMediaEntry, } from './asset';
9
+ export { baseCollectionConverter, type IContentfulCollection } from './collection';
10
+ export { baseComponentConverter, type IContentfulComponent } from './component';
11
+ export { baseExternalComponentConverter } from './externalComponent';
12
+ export { addPositionMetadata, type BaseConverterContext, type ContentResolverFunction, type ConverterContext, createInternalLink, DEFAULT_POSITION_FIELDS, type LinkResolverFunction, type LinkResolverMap, lookupAsset, lookupDownloadAsset, makeContentfulDescription, makeContentfulTitle, type UrlCalculators, } from './helpers';
13
+ export { baseLinkConverter } from './link';
14
+ export { basePageConverter, basePageLinkConverter, basePageVariantLinkConverter, calculatePageHref, calculatePageVariantHref, } from './page';
15
+ export { basePersonConverter, basePersonLinkConverter, type IContentfulPerson, } from './person';
16
+ export { resolveCollectionContent, resolveLink, resolveLinks, resolveNavigationItem, resolvePageContent, resolveRichTextDocument, } from './resolver';
17
+ export { baseTagConverter, baseTagLinkConverter } from './tag';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,oBAAoB,EACpB,iCAAiC,EACjC,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,uBAAuB,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,WAAW,EACX,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Converters module
3
+ *
4
+ * Provides functional composition pattern for converting Contentful entries
5
+ * to typed objects. Use the base converters and compose with enhancers to
6
+ * create custom converters for your specific needs.
7
+ */
8
+ export { convertAssetToVisual, convertExternalVideoEntryToVisual, convertMediaEntryToVisual, createResponsiveVisual, lookupMediaEntry, } from './asset';
9
+ export { baseCollectionConverter } from './collection';
10
+ export { baseComponentConverter } from './component';
11
+ export { baseExternalComponentConverter } from './externalComponent';
12
+ export { addPositionMetadata, createInternalLink, DEFAULT_POSITION_FIELDS, lookupAsset, lookupDownloadAsset, makeContentfulDescription, makeContentfulTitle, } from './helpers';
13
+ export { baseLinkConverter } from './link';
14
+ export { basePageConverter, basePageLinkConverter, basePageVariantLinkConverter, calculatePageHref, calculatePageVariantHref, } from './page';
15
+ export { basePersonConverter, basePersonLinkConverter, } from './person';
16
+ export { resolveCollectionContent, resolveLink, resolveLinks, resolveNavigationItem, resolvePageContent, resolveRichTextDocument, } from './resolver';
17
+ export { baseTagConverter, baseTagLinkConverter } from './tag';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,oBAAoB,EACpB,iCAAiC,EACjC,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,uBAAuB,EAA8B,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAA6B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,mBAAmB,EAInB,kBAAkB,EAClB,uBAAuB,EAGvB,WAAW,EACX,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { IBlankLink, IDownloadLink, IExternalLink, IInternalLink } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BaseLinkSkeleton } from '../baseTypes/baseLink';
5
+ import type { ConverterContext } from './helpers';
6
+ /**
7
+ * Converts a Contentful link entry to an ILinkProps object
8
+ * Handles all link types: internal, external, download, and blank
9
+ */
10
+ export declare function baseLinkConverter(context: ConverterContext, entry: Entry<BaseLinkSkeleton, DefaultChainModifier, string>): IInternalLink | IExternalLink | IDownloadLink | IBlankLink;
11
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/converters/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIlD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAC3D,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CA+F5D"}
@@ -0,0 +1,96 @@
1
+ import { createResponsiveVisual } from './asset';
2
+ import { lookupAsset, lookupIconAsset, makeContentfulTitle, resolveBuildYear } from './helpers';
3
+ import { resolveLink } from './resolver';
4
+ /**
5
+ * Converts a Contentful link entry to an ILinkProps object
6
+ * Handles all link types: internal, external, download, and blank
7
+ */
8
+ export function baseLinkConverter(context, entry) {
9
+ const { sys, fields } = entry;
10
+ if (sys.contentType.sys.id !== 'link') {
11
+ throw new Error(`Invalid content type: expected "link", got "${sys.contentType.sys.id}"`);
12
+ }
13
+ const id = sys.id;
14
+ const name = fields.name;
15
+ const useName = fields.useName;
16
+ const text = resolveBuildYear(useName
17
+ ? name
18
+ : (fields.linkText ?? makeContentfulTitle(fields.linkText, id, 'Link text for ')));
19
+ const icon = createResponsiveVisual(lookupIconAsset(context, fields.icon), lookupIconAsset(context, fields.mobileIcon));
20
+ const backgroundColour = fields.backgroundColour ?? null;
21
+ const textColour = fields.textColour ?? null;
22
+ const variant = fields.variant;
23
+ const size = fields.size;
24
+ // Common base properties
25
+ const baseProps = {
26
+ id,
27
+ useName,
28
+ name,
29
+ text,
30
+ icon,
31
+ backgroundColour,
32
+ textColour,
33
+ variant,
34
+ size,
35
+ };
36
+ // Determine link type based on field priority: internal > external > download > blank
37
+ if (fields.internal) {
38
+ // Internal link: resolve the target entry to get its href
39
+ const internalTarget = resolveLink(context, id, fields.internal);
40
+ return {
41
+ ...baseProps,
42
+ type: 'Internal link',
43
+ internalType: internalTarget.internalType,
44
+ href: internalTarget.href,
45
+ slug: internalTarget.slug,
46
+ indexed: internalTarget.indexed,
47
+ hidden: internalTarget.hidden,
48
+ tags: internalTarget.tags,
49
+ title: internalTarget.title,
50
+ description: internalTarget.description,
51
+ };
52
+ }
53
+ if (fields.external) {
54
+ // External link: use the external URL
55
+ return {
56
+ ...baseProps,
57
+ type: 'External link',
58
+ href: fields.external,
59
+ };
60
+ }
61
+ if (fields.downloadAsset) {
62
+ // Download link: use the asset URL
63
+ const asset = lookupAsset(context, fields.downloadAsset);
64
+ let href = null;
65
+ if (asset?.image?.type === 'Picture') {
66
+ href = asset.image.src;
67
+ }
68
+ else if (asset?.image?.type === 'Svg image') {
69
+ href = asset.image.svgSrc;
70
+ }
71
+ else if (asset?.video) {
72
+ if (asset.video.type === 'Local video') {
73
+ href = asset.video.preview.videoUrl;
74
+ }
75
+ else if (asset.video.type === 'Full video') {
76
+ href = asset.video.full.videoUrl;
77
+ }
78
+ else if (asset.video.type === 'External video') {
79
+ href = asset.video.external;
80
+ }
81
+ }
82
+ return {
83
+ ...baseProps,
84
+ type: 'Download link',
85
+ href,
86
+ visual: asset,
87
+ };
88
+ }
89
+ // Blank link: no href
90
+ return {
91
+ ...baseProps,
92
+ type: 'Blank link',
93
+ href: null,
94
+ };
95
+ }
96
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/converters/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { INavigation, INavigationItem } from '@se-studio/core-data-types';
2
+ import type { Entry, UnresolvedLink } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BaseNavigationItemSkeleton } from '../baseTypes/baseNavigationItem';
5
+ import { type ConverterContext } from './helpers';
6
+ export declare function baseNavigationItemConverter(context: ConverterContext, entry: Entry<BaseNavigationItemSkeleton, DefaultChainModifier, string>): INavigationItem;
7
+ /**
8
+ * Resolves a navigation entry from an unresolved link
9
+ */
10
+ export declare function resolveNavigation(context: ConverterContext, link: UnresolvedLink<'Entry'>): INavigation | undefined;
11
+ //# sourceMappingURL=navigationItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigationItem.d.ts","sourceRoot":"","sources":["../../src/converters/navigationItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EACX,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,WAAW,CAAC;AAuDnB,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,CAAC,GACrE,eAAe,CAoBjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAC5B,WAAW,GAAG,SAAS,CAyBzB"}
@@ -0,0 +1,73 @@
1
+ import { createResponsiveVisual } from './asset';
2
+ import { lookupIconAsset, makeContentfulTitle, resolveBuildYear, } from './helpers';
3
+ import { resolveLink, resolveNavigationItem } from './resolver';
4
+ function createLink(context, entry) {
5
+ const { sys: { id }, fields, } = entry;
6
+ const { title, link, text, internal, icon: navIcon, mobileIcon: mobileNavIcon, useTitle, ...otherFields } = fields;
7
+ const icon = createResponsiveVisual(lookupIconAsset(context, navIcon), lookupIconAsset(context, mobileNavIcon));
8
+ const realText = useTitle ? resolveBuildYear(title) : text ? resolveBuildYear(text) : undefined;
9
+ if (link) {
10
+ return {
11
+ type: 'External link',
12
+ id,
13
+ href: link,
14
+ icon,
15
+ name: makeContentfulTitle(title, id),
16
+ ...otherFields,
17
+ text: realText,
18
+ };
19
+ }
20
+ if (internal) {
21
+ const resolved = resolveLink(context, id, internal);
22
+ return { ...resolved, icon, id, text: realText };
23
+ }
24
+ const blank = {
25
+ type: 'Blank link',
26
+ nick: true,
27
+ id,
28
+ name: makeContentfulTitle(title, id),
29
+ ...otherFields,
30
+ icon,
31
+ text: realText,
32
+ };
33
+ return blank;
34
+ }
35
+ export function baseNavigationItemConverter(context, entry) {
36
+ const { sys: { id }, fields, } = entry;
37
+ const { navigationItems } = fields;
38
+ const link = createLink(context, entry);
39
+ const resolvedNavigationItems = navigationItems
40
+ ?.map((item) => resolveNavigationItem(context, id, item))
41
+ .filter((item) => item !== undefined);
42
+ const result = {
43
+ id,
44
+ link,
45
+ entries: resolvedNavigationItems,
46
+ };
47
+ return result;
48
+ }
49
+ /**
50
+ * Resolves a navigation entry from an unresolved link
51
+ */
52
+ export function resolveNavigation(context, link) {
53
+ const id = link.sys.id;
54
+ const possibleEntry = context.includes.get(id);
55
+ if (!possibleEntry || possibleEntry.type !== 'navigation') {
56
+ return undefined;
57
+ }
58
+ const entry = possibleEntry.entry;
59
+ const { fields } = entry;
60
+ if (!fields) {
61
+ return undefined;
62
+ }
63
+ // Resolve navigation item entries
64
+ const { name, entries: fieldEntries, ...rest } = fields;
65
+ const entries = fieldEntries?.map((item) => resolveNavigationItem(context, id, item)) ?? [];
66
+ return {
67
+ id,
68
+ name,
69
+ entries,
70
+ ...rest,
71
+ };
72
+ }
73
+ //# sourceMappingURL=navigationItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigationItem.js","sourceRoot":"","sources":["../../src/converters/navigationItem.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAEL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhE,SAAS,UAAU,CACjB,OAAyB,EACzB,KAAsE;IAEtE,MAAM,EACJ,GAAG,EAAE,EAAE,EAAE,EAAE,EACX,MAAM,GACP,GAAG,KAAK,CAAC;IACV,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,aAAa,EACzB,QAAQ,EACR,GAAG,WAAW,EACf,GAAG,MAAM,CAAC;IACX,MAAM,IAAI,GAAG,sBAAsB,CACjC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,EACjC,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,CACxC,CAAC;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhG,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,EAAE;YACF,IAAI,EAAE,IAAI;YACV,IAAI;YACJ,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,GAAG,WAAW;YACd,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,IAAI;QACV,EAAE;QACF,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC;QACpC,GAAG,WAAW;QACd,IAAI;QACJ,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAyB,EACzB,KAAsE;IAEtE,MAAM,EACJ,GAAG,EAAE,EAAE,EAAE,EAAE,EACX,MAAM,GACP,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAEnC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAExC,MAAM,uBAAuB,GAAG,eAAe;QAC7C,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;SACxD,MAAM,CAAC,CAAC,IAAI,EAA2B,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG;QACb,EAAE;QACF,IAAI;QACJ,OAAO,EAAE,uBAAuB;KACjC,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,IAA6B;IAE7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAoE,CAAC;IACjG,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACxD,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5F,OAAO;QACL,EAAE;QACF,IAAI;QACJ,OAAO;QACP,GAAG,IAAI;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { IBasePage, IInternalLink } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BasePageSkeleton } from '../baseTypes/basePage';
5
+ import type { BasePageVariantSkeleton } from '../baseTypes/basePageVariant';
6
+ import { type ConverterContext } from './helpers';
7
+ /**
8
+ * Base converter for Contentful Page entries to IPage type
9
+ *
10
+ * This is a minimal implementation that can be extended using
11
+ * the functional composition pattern.
12
+ *
13
+ * @param entry - Contentful entry to convert
14
+ * @returns IPage object
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const page = basePageConverter(contentfulEntry);
19
+ * ```
20
+ */
21
+ export declare function basePageConverter(context: ConverterContext, entry: Entry<BasePageSkeleton, DefaultChainModifier, string>): IBasePage;
22
+ export declare function calculatePageHref(slug: string): string;
23
+ export declare function basePageLinkConverter(context: ConverterContext, entry: Entry<BasePageSkeleton, DefaultChainModifier, string>): IInternalLink;
24
+ /**
25
+ * Calculates the href for a page variant page
26
+ * @param slug - Page variant slug
27
+ * @returns Page variant href path with trailing slash
28
+ */
29
+ export declare function calculatePageVariantHref(slug: string): string;
30
+ /**
31
+ * Base converter for PageVariant entries to IInternalLink type
32
+ * Used when a page variant is referenced as a link in content
33
+ *
34
+ * @param context - Converter context containing assets, includes, and resolvers
35
+ * @param entry - Contentful page variant entry to convert
36
+ * @returns IInternalLink object representing the page variant link
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const pageVariantLink = basePageVariantLinkConverter(context, pageVariantEntry);
41
+ * ```
42
+ */
43
+ export declare function basePageVariantLinkConverter(context: ConverterContext, entry: Entry<BasePageVariantSkeleton, DefaultChainModifier, string>): IInternalLink;
44
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/converters/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAmB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAEL,KAAK,gBAAgB,EAMtB,MAAM,WAAW,CAAC;AAUnB;;;;;;;;;;;;;GAaG;AAEH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAC3D,SAAS,CAoFX;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,UAK7C;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAC3D,aAAa,CAoBf;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,UAEpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAClE,aAAa,CAoBf"}