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

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 +424 -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,50 @@
1
+ import { createResponsiveVisual, lookupMediaEntry } from './asset';
2
+ import { DEFAULT_POSITION_FIELDS, lookupAsset, lookupIconAsset, } from './helpers';
3
+ import { resolveCollectionContent, resolveLink, resolveRichTextDocument } from './resolver';
4
+ /**
5
+ * Base converter for Contentful Collection entries to ICollection type
6
+ *
7
+ * This is a minimal implementation that can be extended using
8
+ * the functional composition pattern.
9
+ *
10
+ * @param context - Converter context containing assets, includes, and resolvers
11
+ * @param entry - Contentful entry to convert
12
+ * @returns ICollection object
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const collection = baseCollectionConverter(context, contentfulEntry);
17
+ * ```
18
+ */
19
+ export function baseCollectionConverter(context, entry) {
20
+ const { sys, fields } = entry;
21
+ const { id } = sys;
22
+ // Destructure to exclude fields that need special handling
23
+ const {
24
+ // Fields requiring transformation
25
+ backgroundVisual: bgVisual, mobileBackgroundVisual: mobileBgVisual, visual: visualField, mobileVisual: mobileVisualField, visualCustomSize, icon: iconField, links: linksField, contents: contentsField, body: bodyField, additionalCopy: additionalCopyField, showHeading, heading,
26
+ // Already handled elsewhere
27
+ cmsLabel, ...simpleFields // anchor, backgroundColour, textColour, preHeading, heading, postHeading, backgroundOverlayOpacity
28
+ } = fields;
29
+ // Convert background visuals to responsive visual
30
+ const backgroundVisual = createResponsiveVisual(lookupAsset(context, bgVisual), lookupAsset(context, mobileBgVisual));
31
+ const visual = createResponsiveVisual(lookupMediaEntry(context, visualField), lookupMediaEntry(context, mobileVisualField), visualCustomSize);
32
+ const collection = {
33
+ type: 'Collection',
34
+ id,
35
+ name: cmsLabel,
36
+ cmsLabel,
37
+ ...DEFAULT_POSITION_FIELDS,
38
+ ...simpleFields,
39
+ heading: showHeading ? heading : undefined,
40
+ body: resolveRichTextDocument(context, id, bodyField),
41
+ additionalCopy: resolveRichTextDocument(context, id, additionalCopyField),
42
+ icon: lookupIconAsset(context, iconField),
43
+ backgroundVisual,
44
+ visual,
45
+ links: linksField?.map((link) => resolveLink(context, id, link)),
46
+ contents: contentsField?.map((content) => resolveCollectionContent(context, id, content)),
47
+ };
48
+ return collection;
49
+ }
50
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/converters/collection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAEL,uBAAuB,EACvB,WAAW,EACX,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQ5F;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAyB,EACzB,KAAkE;IAElE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IACnB,2DAA2D;IAC3D,MAAM;IACJ,kCAAkC;IAClC,gBAAgB,EAAE,QAAQ,EAC1B,sBAAsB,EAAE,cAAc,EACtC,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,iBAAiB,EAC/B,gBAAgB,EAChB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,mBAAmB,EACnC,WAAW,EACX,OAAO;IACP,4BAA4B;IAC5B,QAAQ,EACR,GAAG,YAAY,CAAC,mGAAmG;MACpH,GAAG,MAAM,CAAC;IAEX,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9B,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CACrC,CAAC;IAEF,MAAM,MAAM,GAAG,sBAAsB,CACnC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,EACtC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAC5C,gBAAgB,CACjB,CAAC;IAEF,MAAM,UAAU,GAA0B;QACxC,IAAI,EAAE,YAAY;QAClB,EAAE;QACF,IAAI,EAAE,QAAQ;QACd,QAAQ;QACR,GAAG,uBAAuB;QAC1B,GAAG,YAAY;QACf,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC1C,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;QACrD,cAAc,EAAE,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,mBAAmB,CAAC;QACzE,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;QACzC,gBAAgB;QAChB,MAAM;QACN,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAChE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;KAC1F,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { IBaseComponent } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier, IContentfulRichText } from '../api';
4
+ import type { BaseComponentSkeleton } from '../baseTypes/baseComponent';
5
+ import { type ConverterContext } from './helpers';
6
+ export type IContentfulComponent = IBaseComponent & {
7
+ body?: IContentfulRichText | null;
8
+ additionalCopy?: IContentfulRichText | null;
9
+ };
10
+ /**
11
+ * Base converter for Contentful Component entries to IComponent type
12
+ *
13
+ * This is a minimal implementation that can be extended using
14
+ * the functional composition pattern.
15
+ *
16
+ * @param context - Converter context containing assets, includes, and resolvers
17
+ * @param entry - Contentful entry to convert
18
+ * @returns IComponent object
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const component = baseComponentConverter(context, contentfulEntry);
23
+ * ```
24
+ */
25
+ export declare function baseComponentConverter(context: ConverterContext, entry: Entry<BaseComponentSkeleton, DefaultChainModifier, string>): IContentfulComponent;
26
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/converters/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,WAAW,CAAC;AAGnB,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC7C,CAAC;AACF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAChE,oBAAoB,CAwDtB"}
@@ -0,0 +1,54 @@
1
+ import { arrayOrUndefined, notEmpty } from '../utils';
2
+ import { createResponsiveVisual, lookupMediaEntry } from './asset';
3
+ import { DEFAULT_POSITION_FIELDS, lookupAsset, lookupIconAsset, } from './helpers';
4
+ import { resolveLinks, resolveRichTextDocument } from './resolver';
5
+ /**
6
+ * Base converter for Contentful Component entries to IComponent type
7
+ *
8
+ * This is a minimal implementation that can be extended using
9
+ * the functional composition pattern.
10
+ *
11
+ * @param context - Converter context containing assets, includes, and resolvers
12
+ * @param entry - Contentful entry to convert
13
+ * @returns IComponent object
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const component = baseComponentConverter(context, contentfulEntry);
18
+ * ```
19
+ */
20
+ export function baseComponentConverter(context, entry) {
21
+ const { sys, fields } = entry;
22
+ const { id } = sys;
23
+ // Destructure to exclude fields that need special handling
24
+ const {
25
+ // Fields requiring transformation
26
+ backgroundVisual: bgVisual, mobileBackgroundVisual: mobileBgVisual, visual: visualField, mobileVisual: mobileVisualField, visualCustomSize, icon: iconField, links: linksField, body: bodyField, additionalCopy: additionalCopyField,
27
+ // Field name change
28
+ showHeading, heading, otherMedia: otherMediaField,
29
+ // Already handled elsewhere
30
+ cmsLabel, ...simpleFields // anchor, backgroundColour, textColour, preHeading, heading, postHeading, backgroundOverlayOpacity
31
+ } = fields;
32
+ // Convert background visuals to responsive visual
33
+ const backgroundVisual = createResponsiveVisual(lookupAsset(context, bgVisual), lookupAsset(context, mobileBgVisual));
34
+ const visual = createResponsiveVisual(lookupMediaEntry(context, visualField), lookupMediaEntry(context, mobileVisualField), visualCustomSize);
35
+ const otherMedia = otherMediaField?.map((media) => lookupAsset(context, media));
36
+ const component = {
37
+ type: 'Component',
38
+ id,
39
+ name: cmsLabel,
40
+ cmsLabel,
41
+ ...DEFAULT_POSITION_FIELDS,
42
+ ...simpleFields,
43
+ heading: showHeading ? heading : undefined,
44
+ body: resolveRichTextDocument(context, id, bodyField),
45
+ additionalCopy: resolveRichTextDocument(context, id, additionalCopyField),
46
+ icon: lookupIconAsset(context, iconField),
47
+ backgroundVisual,
48
+ visual,
49
+ links: resolveLinks(context, id, linksField),
50
+ otherMedia: arrayOrUndefined(otherMedia?.filter(notEmpty)),
51
+ };
52
+ return component;
53
+ }
54
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/converters/component.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAEL,uBAAuB,EACvB,WAAW,EACX,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAMnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAyB,EACzB,KAAiE;IAEjE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IAEnB,2DAA2D;IAC3D,MAAM;IACJ,kCAAkC;IAClC,gBAAgB,EAAE,QAAQ,EAC1B,sBAAsB,EAAE,cAAc,EACtC,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,iBAAiB,EAC/B,gBAAgB,EAChB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,mBAAmB;IACnC,oBAAoB;IACpB,WAAW,EACX,OAAO,EACP,UAAU,EAAE,eAAe;IAC3B,4BAA4B;IAC5B,QAAQ,EACR,GAAG,YAAY,CAAC,mGAAmG;MACpH,GAAG,MAAM,CAAC;IAEX,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9B,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CACrC,CAAC;IAEF,MAAM,MAAM,GAAG,sBAAsB,CACnC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,EACtC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAC5C,gBAAgB,CACjB,CAAC;IAEF,MAAM,UAAU,GAAG,eAAe,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAEhF,MAAM,SAAS,GAAyB;QACtC,IAAI,EAAE,WAAW;QACjB,EAAE;QACF,IAAI,EAAE,QAAQ;QACd,QAAQ;QACR,GAAG,uBAAuB;QAC1B,GAAG,YAAY;QACf,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC1C,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC;QACrD,cAAc,EAAE,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,mBAAmB,CAAC;QACzE,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;QACzC,gBAAgB;QAChB,MAAM;QACN,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC;QAC5C,UAAU,EAAE,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC3D,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { IBaseCustomType, IInternalLink } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BaseCustomTypeSkeleton } from '../baseTypes/baseCustomType';
5
+ import { type ConverterContext } from './helpers';
6
+ /**
7
+ * Base converter for Contentful Custom Type entries to IBaseCustomType
8
+ *
9
+ * Custom types represent index pages for categories like Topics or Resources.
10
+ * They provide configuration for both the main index page and potentially
11
+ * individual entry pages.
12
+ *
13
+ * @param context - Converter context containing includes and assets
14
+ * @param entry - Contentful entry to convert
15
+ * @returns IBaseCustomType object
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const customType = baseCustomTypeConverter(context, contentfulEntry);
20
+ * ```
21
+ */
22
+ export declare function baseCustomTypeConverter(context: ConverterContext, entry: Entry<BaseCustomTypeSkeleton, DefaultChainModifier, string>): IBaseCustomType;
23
+ export declare function baseCustomTypeLinkConverter(context: ConverterContext, entry: Entry<BaseCustomTypeSkeleton, DefaultChainModifier, string>): IInternalLink;
24
+ //# sourceMappingURL=customType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customType.d.ts","sourceRoot":"","sources":["../../src/converters/customType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAmB,MAAM,4BAA4B,CAAC;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAEL,KAAK,gBAAgB,EAKtB,MAAM,WAAW,CAAC;AAUnB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GACjE,eAAe,CAkEjB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GACjE,aAAa,CAgBf"}
@@ -0,0 +1,71 @@
1
+ import { addPositionMetadata, createInternalLink, lookupAsset, makeContentfulDescription, makeContentfulTitle, } from './helpers';
2
+ import { collectIconsFromContent, collectIconsFromNavigation, deduplicateIcons, } from './iconCollector';
3
+ import { resolveNavigation } from './navigationItem';
4
+ import { resolvePageContent, resolveSchema } from './resolver';
5
+ import { resolveTemplate } from './template';
6
+ /**
7
+ * Base converter for Contentful Custom Type entries to IBaseCustomType
8
+ *
9
+ * Custom types represent index pages for categories like Topics or Resources.
10
+ * They provide configuration for both the main index page and potentially
11
+ * individual entry pages.
12
+ *
13
+ * @param context - Converter context containing includes and assets
14
+ * @param entry - Contentful entry to convert
15
+ * @returns IBaseCustomType object
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const customType = baseCustomTypeConverter(context, contentfulEntry);
20
+ * ```
21
+ */
22
+ export function baseCustomTypeConverter(context, entry) {
23
+ const { sys, fields } = entry;
24
+ const { id } = sys;
25
+ const { name, slug, indexPageTitle, indexPageDescription, featuredImage, menu: menuLink, footer: footerLink, indexPageTemplate: templateLink, indexPageTopContent: topContentLinks, structuredData, indexPageStructuredData, ...other } = fields;
26
+ // Resolve template (if exists)
27
+ const template = templateLink ? resolveTemplate(context, templateLink) : null;
28
+ // Resolve navigation
29
+ const menu = menuLink ? resolveNavigation(context, menuLink) : template?.menu;
30
+ const footer = footerLink ? resolveNavigation(context, footerLink) : template?.footer;
31
+ // Resolve all content sections
32
+ const topContent = topContentLinks
33
+ ?.map((c) => resolvePageContent(context, id, c))
34
+ .filter((item) => item !== null) ?? [];
35
+ const preContent = template?.preContent ?? [];
36
+ const postContent = template?.postContent ?? [];
37
+ // Merge in correct order and add position metadata
38
+ const contents = addPositionMetadata([...topContent, ...preContent, ...postContent]);
39
+ // Collect and deduplicate all SVG icons from custom type content and navigation
40
+ const icons = deduplicateIcons(collectIconsFromContent(contents), collectIconsFromNavigation(menu), collectIconsFromNavigation(footer));
41
+ const title = makeContentfulTitle(indexPageTitle, sys.id);
42
+ const description = makeContentfulDescription(indexPageDescription, sys.id);
43
+ const customType = {
44
+ type: 'Custom type',
45
+ id,
46
+ slug,
47
+ name,
48
+ title,
49
+ description: description,
50
+ featuredImage: lookupAsset(context, featuredImage),
51
+ contentCount: 0,
52
+ contents,
53
+ icons,
54
+ structuredData: [
55
+ ...(structuredData?.map((link) => resolveSchema(context, id, link)) ?? []),
56
+ ...(indexPageStructuredData?.map((link) => resolveSchema(context, id, link)) ?? []),
57
+ ].filter((item) => item !== null),
58
+ menu,
59
+ footer,
60
+ ...other,
61
+ };
62
+ return customType;
63
+ }
64
+ export function baseCustomTypeLinkConverter(context, entry) {
65
+ const { sys: { id, contentType }, fields, } = entry;
66
+ if (contentType.sys.id !== 'customType') {
67
+ throw new Error(`Invalid content type: expected "customType", got "${contentType.sys.id}"`);
68
+ }
69
+ return createInternalLink(id, fields, context, context.urlCalculators.customType(fields.slug), 'CustomType');
70
+ }
71
+ //# sourceMappingURL=customType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customType.js","sourceRoot":"","sources":["../../src/converters/customType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IBaseExternalComponent } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BaseExternalComponentSkeleton } from '../baseTypes/baseExternalComponent';
5
+ import { type ConverterContext } from './helpers';
6
+ /**
7
+ * Base converter for Contentful ExternalComponent entries to IExternalComponent type
8
+ *
9
+ * This is a minimal implementation that can be extended using
10
+ * the functional composition pattern.
11
+ *
12
+ * @param context - Converter context containing assets, includes, and resolvers
13
+ * @param entry - Contentful entry to convert
14
+ * @returns IExternalComponent object
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const externalComponent = baseExternalComponentConverter(context, contentfulEntry);
19
+ * ```
20
+ */
21
+ export declare function baseExternalComponentConverter(context: ConverterContext, entry: Entry<BaseExternalComponentSkeleton, DefaultChainModifier, string>): IBaseExternalComponent;
22
+ //# sourceMappingURL=externalComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalComponent.d.ts","sourceRoot":"","sources":["../../src/converters/externalComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,CAAC,GACxE,sBAAsB,CA0BxB"}
@@ -0,0 +1,34 @@
1
+ import { createResponsiveVisual } from './asset';
2
+ import { DEFAULT_POSITION_FIELDS, lookupAsset, makeContentfulTitle, } from './helpers';
3
+ /**
4
+ * Base converter for Contentful ExternalComponent entries to IExternalComponent type
5
+ *
6
+ * This is a minimal implementation that can be extended using
7
+ * the functional composition pattern.
8
+ *
9
+ * @param context - Converter context containing assets, includes, and resolvers
10
+ * @param entry - Contentful entry to convert
11
+ * @returns IExternalComponent object
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const externalComponent = baseExternalComponentConverter(context, contentfulEntry);
16
+ * ```
17
+ */
18
+ export function baseExternalComponentConverter(context, entry) {
19
+ const { sys, fields } = entry;
20
+ const { cmsLabel, backgroundVisual: bgVisual, mobileBackgroundVisual: mobileBgVisual, ...simpleFields } = fields;
21
+ // Convert background visuals to responsive visual
22
+ const backgroundVisual = createResponsiveVisual(lookupAsset(context, bgVisual), lookupAsset(context, mobileBgVisual));
23
+ const externalComponent = {
24
+ type: 'External component',
25
+ id: sys.id,
26
+ name: makeContentfulTitle(cmsLabel, sys.id),
27
+ cmsLabel: cmsLabel,
28
+ ...DEFAULT_POSITION_FIELDS,
29
+ ...simpleFields,
30
+ backgroundVisual,
31
+ };
32
+ return externalComponent;
33
+ }
34
+ //# sourceMappingURL=externalComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalComponent.js","sourceRoot":"","sources":["../../src/converters/externalComponent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAEL,uBAAuB,EACvB,WAAW,EACX,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAyB,EACzB,KAAyE;IAEzE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE9B,MAAM,EACJ,QAAQ,EACR,gBAAgB,EAAE,QAAQ,EAC1B,sBAAsB,EAAE,cAAc,EACtC,GAAG,YAAY,EAChB,GAAG,MAAM,CAAC;IAEX,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9B,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CACrC,CAAC;IAEF,MAAM,iBAAiB,GAA2B;QAChD,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,EAAE,QAAQ;QAClB,GAAG,uBAAuB;QAC1B,GAAG,YAAY;QACf,gBAAgB;KACjB,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,116 @@
1
+ import type { IDownloadAsset, IInternalLink, InternalType, ITyped, IVisual } from '@se-studio/core-data-types';
2
+ import type { Asset, Entry, UnresolvedLink } from 'contentful';
3
+ import type { DefaultChainModifier, PossibleResolvedEntry } from '../api';
4
+ import type { BaseContent, BaseLink } from '../baseTypes/baseShared';
5
+ import type { CmsError } from '../types';
6
+ import type { baseArticleConverter, baseArticleTypeConverter } from './article';
7
+ import type { baseCollectionConverter } from './collection';
8
+ import type { baseComponentConverter } from './component';
9
+ import type { baseCustomTypeConverter } from './customType';
10
+ import type { baseNavigationItemConverter } from './navigationItem';
11
+ import type { basePageConverter } from './page';
12
+ import type { baseTagConverter } from './tag';
13
+ export declare function resolveBuildYear(value: string): string;
14
+ export declare function makeContentfulTitle(title: string | undefined | null, id: string, prefix?: string): string;
15
+ export declare function stringOrUndefined(value: string | null | undefined): string | undefined;
16
+ export declare function makeContentfulDescription(description: string | undefined | null, id: string): string;
17
+ export declare function lookupAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IVisual | undefined;
18
+ /**
19
+ * Looks up an asset that is used as an icon.
20
+ * If the asset is an SVG image, it marks it with isIcon: true so it uses the sprite system.
21
+ */
22
+ export declare function lookupIconAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IVisual | undefined;
23
+ /**
24
+ * Looks up a raw asset and converts it to IDownloadAsset for download functionality.
25
+ * Returns undefined if the asset doesn't exist or doesn't have a valid file.
26
+ */
27
+ export declare function lookupDownloadAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IDownloadAsset | undefined;
28
+ /**
29
+ * Default positioning fields for content items before they are processed
30
+ */
31
+ export declare const DEFAULT_POSITION_FIELDS: {
32
+ readonly index: 0;
33
+ readonly isFirst: false;
34
+ readonly isLast: false;
35
+ readonly indexOfType: 0;
36
+ };
37
+ /**
38
+ * Creates an internal link object with common fields
39
+ * Used by multiple converters (tag, page, article, person) to reduce duplication
40
+ */
41
+ export declare function createInternalLink(id: string, fields: {
42
+ cmsLabel?: string | null;
43
+ name: string | null;
44
+ useName?: boolean | null;
45
+ title?: string | null;
46
+ featuredImage?: UnresolvedLink<'Asset'>;
47
+ backgroundColour?: string | null;
48
+ textColour?: string | null;
49
+ indexed?: boolean | null;
50
+ hidden?: boolean | null;
51
+ slug: string;
52
+ description?: string | null;
53
+ }, context: ConverterContext, href: string, internalType: InternalType, additionalProps?: any): IInternalLink;
54
+ export type ContentResolverFunction = (context: ConverterContext, entry: Entry<BaseContent, DefaultChainModifier, string>) => unknown;
55
+ export type ContentResolverMap = Map<string, ContentResolverFunction>;
56
+ export type LinkResolverFunction<TResult extends IInternalLink = IInternalLink> = (context: ConverterContext, entry: Entry<BaseLink, DefaultChainModifier, string>) => TResult;
57
+ export type LinkResolverMap = Map<string, LinkResolverFunction>;
58
+ /**
59
+ * URL calculators for each content type.
60
+ * Apps can override these to customize URL patterns.
61
+ */
62
+ export type UrlCalculators = {
63
+ page: (slug: string) => string;
64
+ pageVariant: (slug: string) => string;
65
+ article: (articleTypeSlug: string, slug: string, primaryTagSlug?: string) => string;
66
+ articleType: (slug: string) => string;
67
+ tag: (slug: string) => string;
68
+ person: (slug: string) => string;
69
+ customType: (slug: string) => string;
70
+ };
71
+ export type BaseConverterContext = {
72
+ videoPrefix: string;
73
+ /**
74
+ * Resolves a mask dropdown value (e.g., 'Rounded diamond') to a URL.
75
+ * Each project provides its own implementation with project-specific masks.
76
+ */
77
+ maskResolver?: (maskName: string) => string | undefined;
78
+ /**
79
+ * URL calculators for each content type.
80
+ * Apps can override these to customize URL patterns for links, sitemaps, and preview.
81
+ */
82
+ urlCalculators: UrlCalculators;
83
+ linkResolver: LinkResolverMap;
84
+ contentResolver: Map<string, (context: ConverterContext, entry: Entry<BaseContent, DefaultChainModifier, string>) => unknown>;
85
+ navigationItemResolver: typeof baseNavigationItemConverter;
86
+ pageResolver: typeof basePageConverter;
87
+ articleResolver: typeof baseArticleConverter;
88
+ articleTypeResolver: typeof baseArticleTypeConverter;
89
+ tagResolver: typeof baseTagConverter;
90
+ personResolver: typeof import('./person').basePersonConverter;
91
+ customTypeResolver: typeof baseCustomTypeConverter;
92
+ componentResolver: typeof baseComponentConverter;
93
+ collectionResolver: typeof baseCollectionConverter;
94
+ };
95
+ export type ConverterContext = BaseConverterContext & {
96
+ includes: Map<string, PossibleResolvedEntry>;
97
+ assets: Map<string, IVisual>;
98
+ rawAssets: Map<string, Asset>;
99
+ errors: CmsError[];
100
+ };
101
+ /**
102
+ * Adds position metadata to an array of content items
103
+ * Each item gets: index, isFirst, isLast, indexOfType
104
+ *
105
+ * @param items - Array of content items to add metadata to
106
+ * @returns New array with position metadata added to each item
107
+ */
108
+ export declare function addPositionMetadata<T extends {
109
+ type: string;
110
+ index?: number;
111
+ isFirst?: boolean;
112
+ isLast?: boolean;
113
+ indexOfType?: number;
114
+ }>(items: T[]): T[];
115
+ export declare function calculateContentCount(...contents: ITyped[][]): number;
116
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/converters/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ export function resolveBuildYear(value) {
2
+ const buildYear = new Date().getFullYear();
3
+ return value.replaceAll('#buildYear#', buildYear.toString());
4
+ }
5
+ export function makeContentfulTitle(title, id, prefix = 'Title for ') {
6
+ return title ?? `${prefix}${id}`;
7
+ }
8
+ export function stringOrUndefined(value) {
9
+ if (value && value.length > 0) {
10
+ return value;
11
+ }
12
+ return undefined;
13
+ }
14
+ export function makeContentfulDescription(description, id) {
15
+ return description ?? `Description for ${id}`;
16
+ }
17
+ export function lookupAsset(context, asset) {
18
+ if (!asset)
19
+ return undefined;
20
+ return context.assets.get(asset.sys.id);
21
+ }
22
+ /**
23
+ * Looks up an asset that is used as an icon.
24
+ * If the asset is an SVG image, it marks it with isIcon: true so it uses the sprite system.
25
+ */
26
+ export function lookupIconAsset(context, asset) {
27
+ const visual = lookupAsset(context, asset);
28
+ if (!visual)
29
+ return undefined;
30
+ // Mark SVG images as icons
31
+ if (visual.image?.type === 'Svg image') {
32
+ return {
33
+ ...visual,
34
+ image: {
35
+ ...visual.image,
36
+ isIcon: true,
37
+ },
38
+ };
39
+ }
40
+ return visual;
41
+ }
42
+ /**
43
+ * Looks up a raw asset and converts it to IDownloadAsset for download functionality.
44
+ * Returns undefined if the asset doesn't exist or doesn't have a valid file.
45
+ */
46
+ export function lookupDownloadAsset(context, asset) {
47
+ if (!asset)
48
+ return undefined;
49
+ const rawAsset = context.rawAssets.get(asset.sys.id);
50
+ if (!rawAsset?.fields?.file)
51
+ return undefined;
52
+ // Cast to AssetFile since we're working with resolved assets without link resolution
53
+ const file = rawAsset.fields.file;
54
+ if (!file.url || !file.fileName || !file.contentType)
55
+ return undefined;
56
+ return {
57
+ assetId: rawAsset.sys.id,
58
+ filename: file.fileName,
59
+ contentType: file.contentType,
60
+ size: file.details?.size,
61
+ url: `https:${file.url}`,
62
+ };
63
+ }
64
+ /**
65
+ * Default positioning fields for content items before they are processed
66
+ */
67
+ export const DEFAULT_POSITION_FIELDS = {
68
+ index: 0,
69
+ isFirst: false,
70
+ isLast: false,
71
+ indexOfType: 0,
72
+ };
73
+ /**
74
+ * Creates an internal link object with common fields
75
+ * Used by multiple converters (tag, page, article, person) to reduce duplication
76
+ */
77
+ export function createInternalLink(id, fields, context, href, internalType,
78
+ // biome-ignore lint/suspicious/noExplicitAny: Used for expanding
79
+ additionalProps) {
80
+ const { cmsLabel, title, name, useName, featuredImage, backgroundColour, textColour, indexed, hidden, slug, description, } = fields;
81
+ const text = makeContentfulTitle(title, id);
82
+ return {
83
+ type: 'Internal link',
84
+ internalType,
85
+ id,
86
+ name: name ?? cmsLabel ?? '',
87
+ useName,
88
+ text,
89
+ visual: lookupAsset(context, featuredImage),
90
+ backgroundColour,
91
+ textColour,
92
+ indexed,
93
+ hidden,
94
+ slug,
95
+ href,
96
+ title,
97
+ description,
98
+ ...additionalProps,
99
+ };
100
+ }
101
+ /**
102
+ * Adds position metadata to an array of content items
103
+ * Each item gets: index, isFirst, isLast, indexOfType
104
+ *
105
+ * @param items - Array of content items to add metadata to
106
+ * @returns New array with position metadata added to each item
107
+ */
108
+ export function addPositionMetadata(items) {
109
+ if (items.length === 0)
110
+ return items;
111
+ // Count items by type for indexOfType calculation
112
+ const typeCount = new Map();
113
+ return items.map((item, index) => {
114
+ const currentTypeIndex = typeCount.get(item.type) ?? 0;
115
+ typeCount.set(item.type, currentTypeIndex + 1);
116
+ return {
117
+ ...item,
118
+ index,
119
+ isFirst: index === 0,
120
+ isLast: index === items.length - 1,
121
+ indexOfType: currentTypeIndex,
122
+ };
123
+ });
124
+ }
125
+ export function calculateContentCount(...contents) {
126
+ return contents.reduce((acc, content) => acc + content.length, 0);
127
+ }
128
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/converters/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { IBaseCollection, IBaseComponent, INavigation, IResponsiveVisual, ISvgImage, ITyped, IVisual } from '@se-studio/core-data-types';
2
+ /**
3
+ * Extract SVG image from a visual if it's marked as an icon.
4
+ * Only returns SVG images that have isIcon: true (set during conversion from icon fields).
5
+ *
6
+ * @param visual - Visual to check
7
+ * @returns SVG image if visual contains an icon SVG, undefined otherwise
8
+ */
9
+ export declare function extractIconFromVisual(visual: IVisual | undefined): ISvgImage | undefined;
10
+ /**
11
+ * Extract icon SVG images from a responsive visual (both desktop and mobile).
12
+ * Only returns SVG images that have isIcon: true.
13
+ *
14
+ * @param visual - Responsive visual to check
15
+ * @returns Array of icon SVG images found (may contain 0, 1, or 2 items)
16
+ */
17
+ export declare function extractIconsFromResponsiveVisual(visual: IResponsiveVisual | undefined): ISvgImage[];
18
+ /**
19
+ * Collect icon SVG from a component's icon field.
20
+ *
21
+ * @param component - Component to check
22
+ * @returns Array of icon SVGs found
23
+ */
24
+ export declare function collectIconsFromComponent(component: IBaseComponent | undefined): ISvgImage[];
25
+ /**
26
+ * Collect icon SVG from a collection's icon field.
27
+ *
28
+ * @param collection - Collection to check
29
+ * @returns Array of icon SVGs found
30
+ */
31
+ export declare function collectIconsFromCollection(collection: IBaseCollection | undefined): ISvgImage[];
32
+ /**
33
+ * Recursively collect all SVG icons from navigation structures.
34
+ * This includes icons from navigation item links and nested navigation entries.
35
+ *
36
+ * @param navigation - Navigation structure to scan
37
+ * @returns Array of all SVG icons found
38
+ */
39
+ export declare function collectIconsFromNavigation(navigation: INavigation | undefined): ISvgImage[];
40
+ /**
41
+ * Recursively collect all SVG icons from page content.
42
+ * This includes icons from components, collections, nested content,
43
+ * and embedded entries within rich text fields (body, additionalCopy).
44
+ *
45
+ * @param contents - Array of content items to scan
46
+ * @returns Array of all SVG icons found
47
+ */
48
+ export declare function collectIconsFromContent(contents: ReadonlyArray<ITyped> | undefined): ISvgImage[];
49
+ /**
50
+ * Deduplicate icons by ID, preserving order of first occurrence.
51
+ * Takes any number of icon arrays and returns a single deduplicated array.
52
+ *
53
+ * @param iconArrays - Arrays of icons to merge and deduplicate
54
+ * @returns Deduplicated array of icons, or undefined if empty
55
+ */
56
+ export declare function deduplicateIcons(...iconArrays: ReadonlyArray<ISvgImage>[]): ISvgImage[] | undefined;
57
+ /**
58
+ * Process icons by fetching SVG content and generating sprite symbols.
59
+ * This runs during data conversion to pre-process icons for the sprite sheet.
60
+ *
61
+ * @param icons - Array of icon SVG images to process
62
+ * @returns Array of icons with symbolContent populated
63
+ */
64
+ export declare function processIconsForSprite(icons: ReadonlyArray<ISvgImage>): Promise<ISvgImage[]>;
65
+ //# sourceMappingURL=iconCollector.d.ts.map