@se-studio/contentful-rest-api 0.0.0-next16-20260822103555

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 (472) hide show
  1. package/CHANGELOG.md +2036 -0
  2. package/README.md +764 -0
  3. package/dist/api/article-type.d.ts +37 -0
  4. package/dist/api/article-type.d.ts.map +1 -0
  5. package/dist/api/article-type.js +140 -0
  6. package/dist/api/article-type.js.map +1 -0
  7. package/dist/api/article.d.ts +32 -0
  8. package/dist/api/article.d.ts.map +1 -0
  9. package/dist/api/article.js +43 -0
  10. package/dist/api/article.js.map +1 -0
  11. package/dist/api/asset.d.ts +28 -0
  12. package/dist/api/asset.d.ts.map +1 -0
  13. package/dist/api/asset.js +56 -0
  14. package/dist/api/asset.js.map +1 -0
  15. package/dist/api/banner.d.ts +8 -0
  16. package/dist/api/banner.d.ts.map +1 -0
  17. package/dist/api/banner.js +96 -0
  18. package/dist/api/banner.js.map +1 -0
  19. package/dist/api/breadcrumb.d.ts +40 -0
  20. package/dist/api/breadcrumb.d.ts.map +1 -0
  21. package/dist/api/breadcrumb.js +60 -0
  22. package/dist/api/breadcrumb.js.map +1 -0
  23. package/dist/api/componentPreview.d.ts +59 -0
  24. package/dist/api/componentPreview.d.ts.map +1 -0
  25. package/dist/api/componentPreview.js +88 -0
  26. package/dist/api/componentPreview.js.map +1 -0
  27. package/dist/api/context.d.ts +24 -0
  28. package/dist/api/context.d.ts.map +1 -0
  29. package/dist/api/context.js +73 -0
  30. package/dist/api/context.js.map +1 -0
  31. package/dist/api/custom-type.d.ts +37 -0
  32. package/dist/api/custom-type.d.ts.map +1 -0
  33. package/dist/api/custom-type.js +44 -0
  34. package/dist/api/custom-type.js.map +1 -0
  35. package/dist/api/document.d.ts +8 -0
  36. package/dist/api/document.d.ts.map +1 -0
  37. package/dist/api/document.js +84 -0
  38. package/dist/api/document.js.map +1 -0
  39. package/dist/api/helpers.d.ts +59 -0
  40. package/dist/api/helpers.d.ts.map +1 -0
  41. package/dist/api/helpers.js +313 -0
  42. package/dist/api/helpers.js.map +1 -0
  43. package/dist/api/index.d.ts +33 -0
  44. package/dist/api/index.d.ts.map +1 -0
  45. package/dist/api/index.js +37 -0
  46. package/dist/api/index.js.map +1 -0
  47. package/dist/api/links.d.ts +124 -0
  48. package/dist/api/links.d.ts.map +1 -0
  49. package/dist/api/links.js +307 -0
  50. package/dist/api/links.js.map +1 -0
  51. package/dist/api/listing-fetch-params.d.ts +70 -0
  52. package/dist/api/listing-fetch-params.d.ts.map +1 -0
  53. package/dist/api/listing-fetch-params.js +124 -0
  54. package/dist/api/listing-fetch-params.js.map +1 -0
  55. package/dist/api/media-library.d.ts +59 -0
  56. package/dist/api/media-library.d.ts.map +1 -0
  57. package/dist/api/media-library.js +315 -0
  58. package/dist/api/media-library.js.map +1 -0
  59. package/dist/api/navigation.d.ts +10 -0
  60. package/dist/api/navigation.d.ts.map +1 -0
  61. package/dist/api/navigation.js +18 -0
  62. package/dist/api/navigation.js.map +1 -0
  63. package/dist/api/page.d.ts +15 -0
  64. package/dist/api/page.d.ts.map +1 -0
  65. package/dist/api/page.js +39 -0
  66. package/dist/api/page.js.map +1 -0
  67. package/dist/api/person.d.ts +37 -0
  68. package/dist/api/person.d.ts.map +1 -0
  69. package/dist/api/person.js +135 -0
  70. package/dist/api/person.js.map +1 -0
  71. package/dist/api/preview-types.d.ts +65 -0
  72. package/dist/api/preview-types.d.ts.map +1 -0
  73. package/dist/api/preview-types.js +7 -0
  74. package/dist/api/preview-types.js.map +1 -0
  75. package/dist/api/preview.d.ts +49 -0
  76. package/dist/api/preview.d.ts.map +1 -0
  77. package/dist/api/preview.js +261 -0
  78. package/dist/api/preview.js.map +1 -0
  79. package/dist/api/redirects.d.ts +16 -0
  80. package/dist/api/redirects.d.ts.map +1 -0
  81. package/dist/api/redirects.js +110 -0
  82. package/dist/api/redirects.js.map +1 -0
  83. package/dist/api/related-articles.d.ts +28 -0
  84. package/dist/api/related-articles.d.ts.map +1 -0
  85. package/dist/api/related-articles.js +147 -0
  86. package/dist/api/related-articles.js.map +1 -0
  87. package/dist/api/server-asset.d.ts +67 -0
  88. package/dist/api/server-asset.d.ts.map +1 -0
  89. package/dist/api/server-asset.js +106 -0
  90. package/dist/api/server-asset.js.map +1 -0
  91. package/dist/api/sitemap.d.ts +131 -0
  92. package/dist/api/sitemap.d.ts.map +1 -0
  93. package/dist/api/sitemap.js +201 -0
  94. package/dist/api/sitemap.js.map +1 -0
  95. package/dist/api/tag-type.d.ts +32 -0
  96. package/dist/api/tag-type.d.ts.map +1 -0
  97. package/dist/api/tag-type.js +123 -0
  98. package/dist/api/tag-type.js.map +1 -0
  99. package/dist/api/tag.d.ts +37 -0
  100. package/dist/api/tag.d.ts.map +1 -0
  101. package/dist/api/tag.js +132 -0
  102. package/dist/api/tag.js.map +1 -0
  103. package/dist/api/template.d.ts +61 -0
  104. package/dist/api/template.d.ts.map +1 -0
  105. package/dist/api/template.js +94 -0
  106. package/dist/api/template.js.map +1 -0
  107. package/dist/api/types.d.ts +113 -0
  108. package/dist/api/types.d.ts.map +1 -0
  109. package/dist/api/types.js +2 -0
  110. package/dist/api/types.js.map +1 -0
  111. package/dist/baseTypes/baseAlternatePageContent.d.ts +32 -0
  112. package/dist/baseTypes/baseAlternatePageContent.d.ts.map +1 -0
  113. package/dist/baseTypes/baseAlternatePageContent.js +2 -0
  114. package/dist/baseTypes/baseAlternatePageContent.js.map +1 -0
  115. package/dist/baseTypes/baseArticle.d.ts +206 -0
  116. package/dist/baseTypes/baseArticle.d.ts.map +1 -0
  117. package/dist/baseTypes/baseArticle.js +2 -0
  118. package/dist/baseTypes/baseArticle.js.map +1 -0
  119. package/dist/baseTypes/baseArticleType.d.ts +177 -0
  120. package/dist/baseTypes/baseArticleType.d.ts.map +1 -0
  121. package/dist/baseTypes/baseArticleType.js +2 -0
  122. package/dist/baseTypes/baseArticleType.js.map +1 -0
  123. package/dist/baseTypes/baseBanner.d.ts +113 -0
  124. package/dist/baseTypes/baseBanner.d.ts.map +1 -0
  125. package/dist/baseTypes/baseBanner.js +2 -0
  126. package/dist/baseTypes/baseBanner.js.map +1 -0
  127. package/dist/baseTypes/baseCollection.d.ts +132 -0
  128. package/dist/baseTypes/baseCollection.d.ts.map +1 -0
  129. package/dist/baseTypes/baseCollection.js +2 -0
  130. package/dist/baseTypes/baseCollection.js.map +1 -0
  131. package/dist/baseTypes/baseComponent.d.ts +130 -0
  132. package/dist/baseTypes/baseComponent.d.ts.map +1 -0
  133. package/dist/baseTypes/baseComponent.js +2 -0
  134. package/dist/baseTypes/baseComponent.js.map +1 -0
  135. package/dist/baseTypes/baseCustomType.d.ts +147 -0
  136. package/dist/baseTypes/baseCustomType.d.ts.map +1 -0
  137. package/dist/baseTypes/baseCustomType.js +2 -0
  138. package/dist/baseTypes/baseCustomType.js.map +1 -0
  139. package/dist/baseTypes/baseDocument.d.ts +70 -0
  140. package/dist/baseTypes/baseDocument.d.ts.map +1 -0
  141. package/dist/baseTypes/baseDocument.js +2 -0
  142. package/dist/baseTypes/baseDocument.js.map +1 -0
  143. package/dist/baseTypes/baseExternalComponent.d.ts +138 -0
  144. package/dist/baseTypes/baseExternalComponent.d.ts.map +1 -0
  145. package/dist/baseTypes/baseExternalComponent.js +2 -0
  146. package/dist/baseTypes/baseExternalComponent.js.map +1 -0
  147. package/dist/baseTypes/baseExternalVideo.d.ts +86 -0
  148. package/dist/baseTypes/baseExternalVideo.d.ts.map +1 -0
  149. package/dist/baseTypes/baseExternalVideo.js +2 -0
  150. package/dist/baseTypes/baseExternalVideo.js.map +1 -0
  151. package/dist/baseTypes/baseHtmlComponent.d.ts +72 -0
  152. package/dist/baseTypes/baseHtmlComponent.d.ts.map +1 -0
  153. package/dist/baseTypes/baseHtmlComponent.js +2 -0
  154. package/dist/baseTypes/baseHtmlComponent.js.map +1 -0
  155. package/dist/baseTypes/baseLink.d.ts +115 -0
  156. package/dist/baseTypes/baseLink.d.ts.map +1 -0
  157. package/dist/baseTypes/baseLink.js +2 -0
  158. package/dist/baseTypes/baseLink.js.map +1 -0
  159. package/dist/baseTypes/baseMedia.d.ts +100 -0
  160. package/dist/baseTypes/baseMedia.d.ts.map +1 -0
  161. package/dist/baseTypes/baseMedia.js +2 -0
  162. package/dist/baseTypes/baseMedia.js.map +1 -0
  163. package/dist/baseTypes/baseNavigation.d.ts +37 -0
  164. package/dist/baseTypes/baseNavigation.d.ts.map +1 -0
  165. package/dist/baseTypes/baseNavigation.js +2 -0
  166. package/dist/baseTypes/baseNavigation.js.map +1 -0
  167. package/dist/baseTypes/baseNavigationItem.d.ts +109 -0
  168. package/dist/baseTypes/baseNavigationItem.d.ts.map +1 -0
  169. package/dist/baseTypes/baseNavigationItem.js +2 -0
  170. package/dist/baseTypes/baseNavigationItem.js.map +1 -0
  171. package/dist/baseTypes/basePage.d.ts +142 -0
  172. package/dist/baseTypes/basePage.d.ts.map +1 -0
  173. package/dist/baseTypes/basePage.js +2 -0
  174. package/dist/baseTypes/basePage.js.map +1 -0
  175. package/dist/baseTypes/basePageVariant.d.ts +145 -0
  176. package/dist/baseTypes/basePageVariant.d.ts.map +1 -0
  177. package/dist/baseTypes/basePageVariant.js +2 -0
  178. package/dist/baseTypes/basePageVariant.js.map +1 -0
  179. package/dist/baseTypes/basePerson.d.ts +160 -0
  180. package/dist/baseTypes/basePerson.d.ts.map +1 -0
  181. package/dist/baseTypes/basePerson.js +2 -0
  182. package/dist/baseTypes/basePerson.js.map +1 -0
  183. package/dist/baseTypes/baseRedirect.d.ts +69 -0
  184. package/dist/baseTypes/baseRedirect.d.ts.map +1 -0
  185. package/dist/baseTypes/baseRedirect.js +2 -0
  186. package/dist/baseTypes/baseRedirect.js.map +1 -0
  187. package/dist/baseTypes/baseSchema.d.ts +19 -0
  188. package/dist/baseTypes/baseSchema.d.ts.map +1 -0
  189. package/dist/baseTypes/baseSchema.js +2 -0
  190. package/dist/baseTypes/baseSchema.js.map +1 -0
  191. package/dist/baseTypes/baseShared.d.ts +25 -0
  192. package/dist/baseTypes/baseShared.d.ts.map +1 -0
  193. package/dist/baseTypes/baseShared.js +2 -0
  194. package/dist/baseTypes/baseShared.js.map +1 -0
  195. package/dist/baseTypes/baseTag.d.ts +129 -0
  196. package/dist/baseTypes/baseTag.d.ts.map +1 -0
  197. package/dist/baseTypes/baseTag.js +2 -0
  198. package/dist/baseTypes/baseTag.js.map +1 -0
  199. package/dist/baseTypes/baseTagType.d.ts +70 -0
  200. package/dist/baseTypes/baseTagType.d.ts.map +1 -0
  201. package/dist/baseTypes/baseTagType.js +2 -0
  202. package/dist/baseTypes/baseTagType.js.map +1 -0
  203. package/dist/baseTypes/baseTemplate.d.ts +77 -0
  204. package/dist/baseTypes/baseTemplate.d.ts.map +1 -0
  205. package/dist/baseTypes/baseTemplate.js +2 -0
  206. package/dist/baseTypes/baseTemplate.js.map +1 -0
  207. package/dist/client.d.ts +145 -0
  208. package/dist/client.d.ts.map +1 -0
  209. package/dist/client.js +322 -0
  210. package/dist/client.js.map +1 -0
  211. package/dist/cms-integrity.d.ts +10 -0
  212. package/dist/cms-integrity.d.ts.map +1 -0
  213. package/dist/cms-integrity.js +7 -0
  214. package/dist/cms-integrity.js.map +1 -0
  215. package/dist/converters/animationEnricher.d.ts +17 -0
  216. package/dist/converters/animationEnricher.d.ts.map +1 -0
  217. package/dist/converters/animationEnricher.js +177 -0
  218. package/dist/converters/animationEnricher.js.map +1 -0
  219. package/dist/converters/article.d.ts +48 -0
  220. package/dist/converters/article.d.ts.map +1 -0
  221. package/dist/converters/article.js +364 -0
  222. package/dist/converters/article.js.map +1 -0
  223. package/dist/converters/asset.d.ts +33 -0
  224. package/dist/converters/asset.d.ts.map +1 -0
  225. package/dist/converters/asset.js +340 -0
  226. package/dist/converters/asset.js.map +1 -0
  227. package/dist/converters/banner.d.ts +10 -0
  228. package/dist/converters/banner.d.ts.map +1 -0
  229. package/dist/converters/banner.js +63 -0
  230. package/dist/converters/banner.js.map +1 -0
  231. package/dist/converters/collection.d.ts +26 -0
  232. package/dist/converters/collection.d.ts.map +1 -0
  233. package/dist/converters/collection.js +52 -0
  234. package/dist/converters/collection.js.map +1 -0
  235. package/dist/converters/component.d.ts +26 -0
  236. package/dist/converters/component.d.ts.map +1 -0
  237. package/dist/converters/component.js +54 -0
  238. package/dist/converters/component.js.map +1 -0
  239. package/dist/converters/customType.d.ts +24 -0
  240. package/dist/converters/customType.d.ts.map +1 -0
  241. package/dist/converters/customType.js +93 -0
  242. package/dist/converters/customType.js.map +1 -0
  243. package/dist/converters/document.d.ts +14 -0
  244. package/dist/converters/document.d.ts.map +1 -0
  245. package/dist/converters/document.js +51 -0
  246. package/dist/converters/document.js.map +1 -0
  247. package/dist/converters/enrichAssets.d.ts +19 -0
  248. package/dist/converters/enrichAssets.d.ts.map +1 -0
  249. package/dist/converters/enrichAssets.js +36 -0
  250. package/dist/converters/enrichAssets.js.map +1 -0
  251. package/dist/converters/externalComponent.d.ts +27 -0
  252. package/dist/converters/externalComponent.d.ts.map +1 -0
  253. package/dist/converters/externalComponent.js +46 -0
  254. package/dist/converters/externalComponent.js.map +1 -0
  255. package/dist/converters/externalVideoEnricher.d.ts +12 -0
  256. package/dist/converters/externalVideoEnricher.d.ts.map +1 -0
  257. package/dist/converters/externalVideoEnricher.js +70 -0
  258. package/dist/converters/externalVideoEnricher.js.map +1 -0
  259. package/dist/converters/helpers.d.ts +173 -0
  260. package/dist/converters/helpers.d.ts.map +1 -0
  261. package/dist/converters/helpers.js +167 -0
  262. package/dist/converters/helpers.js.map +1 -0
  263. package/dist/converters/heroVideoEnricher.d.ts +9 -0
  264. package/dist/converters/heroVideoEnricher.d.ts.map +1 -0
  265. package/dist/converters/heroVideoEnricher.js +108 -0
  266. package/dist/converters/heroVideoEnricher.js.map +1 -0
  267. package/dist/converters/heroVideoEnv.d.ts +14 -0
  268. package/dist/converters/heroVideoEnv.d.ts.map +1 -0
  269. package/dist/converters/heroVideoEnv.js +28 -0
  270. package/dist/converters/heroVideoEnv.js.map +1 -0
  271. package/dist/converters/htmlComponent.d.ts +17 -0
  272. package/dist/converters/htmlComponent.d.ts.map +1 -0
  273. package/dist/converters/htmlComponent.js +33 -0
  274. package/dist/converters/htmlComponent.js.map +1 -0
  275. package/dist/converters/iconCollector.d.ts +36 -0
  276. package/dist/converters/iconCollector.d.ts.map +1 -0
  277. package/dist/converters/iconCollector.js +309 -0
  278. package/dist/converters/iconCollector.js.map +1 -0
  279. package/dist/converters/index.d.ts +26 -0
  280. package/dist/converters/index.d.ts.map +1 -0
  281. package/dist/converters/index.js +21 -0
  282. package/dist/converters/index.js.map +1 -0
  283. package/dist/converters/link.d.ts +11 -0
  284. package/dist/converters/link.d.ts.map +1 -0
  285. package/dist/converters/link.js +109 -0
  286. package/dist/converters/link.js.map +1 -0
  287. package/dist/converters/navigationItem.d.ts +17 -0
  288. package/dist/converters/navigationItem.d.ts.map +1 -0
  289. package/dist/converters/navigationItem.js +126 -0
  290. package/dist/converters/navigationItem.js.map +1 -0
  291. package/dist/converters/page.d.ts +44 -0
  292. package/dist/converters/page.d.ts.map +1 -0
  293. package/dist/converters/page.js +160 -0
  294. package/dist/converters/page.js.map +1 -0
  295. package/dist/converters/pageVariantMerge.d.ts +24 -0
  296. package/dist/converters/pageVariantMerge.d.ts.map +1 -0
  297. package/dist/converters/pageVariantMerge.js +151 -0
  298. package/dist/converters/pageVariantMerge.js.map +1 -0
  299. package/dist/converters/person.d.ts +40 -0
  300. package/dist/converters/person.d.ts.map +1 -0
  301. package/dist/converters/person.js +152 -0
  302. package/dist/converters/person.js.map +1 -0
  303. package/dist/converters/pictureBlurEnricher.d.ts +9 -0
  304. package/dist/converters/pictureBlurEnricher.d.ts.map +1 -0
  305. package/dist/converters/pictureBlurEnricher.js +79 -0
  306. package/dist/converters/pictureBlurEnricher.js.map +1 -0
  307. package/dist/converters/redirect.d.ts +20 -0
  308. package/dist/converters/redirect.d.ts.map +1 -0
  309. package/dist/converters/redirect.js +50 -0
  310. package/dist/converters/redirect.js.map +1 -0
  311. package/dist/converters/resolver.d.ts +26 -0
  312. package/dist/converters/resolver.d.ts.map +1 -0
  313. package/dist/converters/resolver.js +383 -0
  314. package/dist/converters/resolver.js.map +1 -0
  315. package/dist/converters/schema.d.ts +14 -0
  316. package/dist/converters/schema.d.ts.map +1 -0
  317. package/dist/converters/schema.js +25 -0
  318. package/dist/converters/schema.js.map +1 -0
  319. package/dist/converters/svgProcessor.d.ts +58 -0
  320. package/dist/converters/svgProcessor.d.ts.map +1 -0
  321. package/dist/converters/svgProcessor.js +225 -0
  322. package/dist/converters/svgProcessor.js.map +1 -0
  323. package/dist/converters/tag.d.ts +25 -0
  324. package/dist/converters/tag.d.ts.map +1 -0
  325. package/dist/converters/tag.js +170 -0
  326. package/dist/converters/tag.js.map +1 -0
  327. package/dist/converters/tagType.d.ts +15 -0
  328. package/dist/converters/tagType.d.ts.map +1 -0
  329. package/dist/converters/tagType.js +56 -0
  330. package/dist/converters/tagType.js.map +1 -0
  331. package/dist/converters/template.d.ts +31 -0
  332. package/dist/converters/template.d.ts.map +1 -0
  333. package/dist/converters/template.js +53 -0
  334. package/dist/converters/template.js.map +1 -0
  335. package/dist/converters/videoEnricher.d.ts +14 -0
  336. package/dist/converters/videoEnricher.d.ts.map +1 -0
  337. package/dist/converters/videoEnricher.js +85 -0
  338. package/dist/converters/videoEnricher.js.map +1 -0
  339. package/dist/icons/rebuildIconSprite.d.ts +8 -0
  340. package/dist/icons/rebuildIconSprite.d.ts.map +1 -0
  341. package/dist/icons/rebuildIconSprite.js +15 -0
  342. package/dist/icons/rebuildIconSprite.js.map +1 -0
  343. package/dist/index.d.ts +33 -0
  344. package/dist/index.d.ts.map +1 -0
  345. package/dist/index.js +42 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/navigation/assembly.d.ts +8 -0
  348. package/dist/navigation/assembly.d.ts.map +1 -0
  349. package/dist/navigation/assembly.js +115 -0
  350. package/dist/navigation/assembly.js.map +1 -0
  351. package/dist/navigation/cacheOptions.d.ts +17 -0
  352. package/dist/navigation/cacheOptions.d.ts.map +1 -0
  353. package/dist/navigation/cacheOptions.js +45 -0
  354. package/dist/navigation/cacheOptions.js.map +1 -0
  355. package/dist/navigation/enrichModelNavigation.d.ts +17 -0
  356. package/dist/navigation/enrichModelNavigation.d.ts.map +1 -0
  357. package/dist/navigation/enrichModelNavigation.js +46 -0
  358. package/dist/navigation/enrichModelNavigation.js.map +1 -0
  359. package/dist/navigation/linkIndex.d.ts +10 -0
  360. package/dist/navigation/linkIndex.d.ts.map +1 -0
  361. package/dist/navigation/linkIndex.js +34 -0
  362. package/dist/navigation/linkIndex.js.map +1 -0
  363. package/dist/navigation/listingLinkBundle.d.ts +22 -0
  364. package/dist/navigation/listingLinkBundle.d.ts.map +1 -0
  365. package/dist/navigation/listingLinkBundle.js +88 -0
  366. package/dist/navigation/listingLinkBundle.js.map +1 -0
  367. package/dist/navigation/registry.d.ts +15 -0
  368. package/dist/navigation/registry.d.ts.map +1 -0
  369. package/dist/navigation/registry.js +130 -0
  370. package/dist/navigation/registry.js.map +1 -0
  371. package/dist/navigation/requestCache.d.ts +18 -0
  372. package/dist/navigation/requestCache.d.ts.map +1 -0
  373. package/dist/navigation/requestCache.js +66 -0
  374. package/dist/navigation/requestCache.js.map +1 -0
  375. package/dist/navigation/types.d.ts +45 -0
  376. package/dist/navigation/types.d.ts.map +1 -0
  377. package/dist/navigation/types.js +2 -0
  378. package/dist/navigation/types.js.map +1 -0
  379. package/dist/revalidation/entry-handlers.d.ts +40 -0
  380. package/dist/revalidation/entry-handlers.d.ts.map +1 -0
  381. package/dist/revalidation/entry-handlers.js +144 -0
  382. package/dist/revalidation/entry-handlers.js.map +1 -0
  383. package/dist/revalidation/handlers.d.ts +19 -0
  384. package/dist/revalidation/handlers.d.ts.map +1 -0
  385. package/dist/revalidation/handlers.js +50 -0
  386. package/dist/revalidation/handlers.js.map +1 -0
  387. package/dist/revalidation/index.d.ts +4 -0
  388. package/dist/revalidation/index.d.ts.map +1 -0
  389. package/dist/revalidation/index.js +5 -0
  390. package/dist/revalidation/index.js.map +1 -0
  391. package/dist/revalidation/nextjs-route.d.ts +38 -0
  392. package/dist/revalidation/nextjs-route.d.ts.map +1 -0
  393. package/dist/revalidation/nextjs-route.js +36 -0
  394. package/dist/revalidation/nextjs-route.js.map +1 -0
  395. package/dist/revalidation/route.d.ts +3 -0
  396. package/dist/revalidation/route.d.ts.map +1 -0
  397. package/dist/revalidation/route.js +99 -0
  398. package/dist/revalidation/route.js.map +1 -0
  399. package/dist/revalidation/server-utils.d.ts +31 -0
  400. package/dist/revalidation/server-utils.d.ts.map +1 -0
  401. package/dist/revalidation/server-utils.js +54 -0
  402. package/dist/revalidation/server-utils.js.map +1 -0
  403. package/dist/revalidation/tags.d.ts +110 -0
  404. package/dist/revalidation/tags.d.ts.map +1 -0
  405. package/dist/revalidation/tags.js +160 -0
  406. package/dist/revalidation/tags.js.map +1 -0
  407. package/dist/revalidation/utils.d.ts +21 -0
  408. package/dist/revalidation/utils.d.ts.map +1 -0
  409. package/dist/revalidation/utils.js +61 -0
  410. package/dist/revalidation/utils.js.map +1 -0
  411. package/dist/revalidation/webhook-content-types.d.ts +12 -0
  412. package/dist/revalidation/webhook-content-types.d.ts.map +1 -0
  413. package/dist/revalidation/webhook-content-types.js +28 -0
  414. package/dist/revalidation/webhook-content-types.js.map +1 -0
  415. package/dist/routing/index.d.ts +2 -0
  416. package/dist/routing/index.d.ts.map +1 -0
  417. package/dist/routing/index.js +2 -0
  418. package/dist/routing/index.js.map +1 -0
  419. package/dist/routing/marketing-site-url-calculators.d.ts +21 -0
  420. package/dist/routing/marketing-site-url-calculators.d.ts.map +1 -0
  421. package/dist/routing/marketing-site-url-calculators.js +43 -0
  422. package/dist/routing/marketing-site-url-calculators.js.map +1 -0
  423. package/dist/server.d.ts +7 -0
  424. package/dist/server.d.ts.map +1 -0
  425. package/dist/server.js +10 -0
  426. package/dist/server.js.map +1 -0
  427. package/dist/telemetry/deriveOperation.d.ts +8 -0
  428. package/dist/telemetry/deriveOperation.d.ts.map +1 -0
  429. package/dist/telemetry/deriveOperation.js +59 -0
  430. package/dist/telemetry/deriveOperation.js.map +1 -0
  431. package/dist/telemetry/queryContext.d.ts +7 -0
  432. package/dist/telemetry/queryContext.d.ts.map +1 -0
  433. package/dist/telemetry/queryContext.js +9 -0
  434. package/dist/telemetry/queryContext.js.map +1 -0
  435. package/dist/telemetry/queryLog.d.ts +17 -0
  436. package/dist/telemetry/queryLog.d.ts.map +1 -0
  437. package/dist/telemetry/queryLog.js +54 -0
  438. package/dist/telemetry/queryLog.js.map +1 -0
  439. package/dist/types.d.ts +93 -0
  440. package/dist/types.d.ts.map +1 -0
  441. package/dist/types.js +2 -0
  442. package/dist/types.js.map +1 -0
  443. package/dist/utils/arrayUtils.d.ts +3 -0
  444. package/dist/utils/arrayUtils.d.ts.map +1 -0
  445. package/dist/utils/arrayUtils.js +12 -0
  446. package/dist/utils/arrayUtils.js.map +1 -0
  447. package/dist/utils/dateUtils.d.ts +9 -0
  448. package/dist/utils/dateUtils.d.ts.map +1 -0
  449. package/dist/utils/dateUtils.js +26 -0
  450. package/dist/utils/dateUtils.js.map +1 -0
  451. package/dist/utils/errors.d.ts +56 -0
  452. package/dist/utils/errors.d.ts.map +1 -0
  453. package/dist/utils/errors.js +100 -0
  454. package/dist/utils/errors.js.map +1 -0
  455. package/dist/utils/index.d.ts +9 -0
  456. package/dist/utils/index.d.ts.map +1 -0
  457. package/dist/utils/index.js +9 -0
  458. package/dist/utils/index.js.map +1 -0
  459. package/dist/utils/redirectMap.d.ts +40 -0
  460. package/dist/utils/redirectMap.d.ts.map +1 -0
  461. package/dist/utils/redirectMap.js +129 -0
  462. package/dist/utils/redirectMap.js.map +1 -0
  463. package/dist/utils/retry.d.ts +103 -0
  464. package/dist/utils/retry.d.ts.map +1 -0
  465. package/dist/utils/retry.js +248 -0
  466. package/dist/utils/retry.js.map +1 -0
  467. package/dist/utils/tags.d.ts +35 -0
  468. package/dist/utils/tags.d.ts.map +1 -0
  469. package/dist/utils/tags.js +37 -0
  470. package/dist/utils/tags.js.map +1 -0
  471. package/docs/llms.md +430 -0
  472. package/package.json +86 -0
@@ -0,0 +1,93 @@
1
+ import { resolvedMeta } from '@se-studio/core-data-types';
2
+ import { addPositionMetadata, createInternalLink, lookupAsset, makeContentfulDescription, makeContentfulTitle, shouldResolveContents, shouldResolveNavigation, } from './helpers.js';
3
+ import { collectIconsFromContent, collectIconsFromNavigation, deduplicateIcons, } from './iconCollector.js';
4
+ import { resolveNavigationOrStub } from './navigationItem.js';
5
+ import { resolvePageContent, resolveSchema } from './resolver.js';
6
+ import { resolveTemplate } from './template.js';
7
+ /**
8
+ * Base converter for Contentful Custom Type entries to IBaseCustomType
9
+ *
10
+ * Custom types represent index pages for categories like Topics or Resources.
11
+ * They provide configuration for both the main index page and potentially
12
+ * individual entry pages.
13
+ *
14
+ * @param context - Converter context containing includes and assets
15
+ * @param entry - Contentful entry to convert
16
+ * @returns IBaseCustomType object
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const customType = baseCustomTypeConverter(context, contentfulEntry);
21
+ * ```
22
+ */
23
+ export function baseCustomTypeConverter(context, entry) {
24
+ const { sys, fields } = entry;
25
+ const { id } = sys;
26
+ const { name, slug, indexPageName, indexPageTitle, indexPageDescription, featuredImage, menu: menuLink, footer: footerLink, indexPageTemplate: templateLink, indexPageTopContent: topContentLinks, structuredData: _entryStructuredData, indexPageStructuredData, meta: customTypeMeta, backgroundColour: customTypeBackgroundColour, textColour: customTypeTextColour, ...other } = fields;
27
+ const title = makeContentfulTitle(indexPageName ?? indexPageTitle, sys.id);
28
+ const description = makeContentfulDescription(indexPageDescription, sys.id);
29
+ if (!shouldResolveNavigation(context) && !shouldResolveContents(context)) {
30
+ return {
31
+ type: 'Custom type',
32
+ id,
33
+ slug,
34
+ name,
35
+ title,
36
+ description,
37
+ featuredImage: lookupAsset(context, featuredImage),
38
+ href: context.urlCalculators.customType(slug),
39
+ contentCount: 0,
40
+ ...other,
41
+ backgroundColour: customTypeBackgroundColour,
42
+ textColour: customTypeTextColour,
43
+ meta: resolvedMeta(customTypeMeta),
44
+ };
45
+ }
46
+ const template = templateLink ? resolveTemplate(context, templateLink) : null;
47
+ const menu = menuLink ? resolveNavigationOrStub(context, menuLink) : template?.menu;
48
+ const footer = footerLink ? resolveNavigationOrStub(context, footerLink) : template?.footer;
49
+ const topContent = shouldResolveContents(context)
50
+ ? (topContentLinks
51
+ ?.map((c) => resolvePageContent(context, id, c))
52
+ .filter((item) => item !== null) ?? [])
53
+ : [];
54
+ const preContent = shouldResolveContents(context) ? (template?.preContent ?? []) : [];
55
+ const postContent = shouldResolveContents(context) ? (template?.postContent ?? []) : [];
56
+ const contents = shouldResolveContents(context)
57
+ ? addPositionMetadata([...topContent, ...preContent, ...postContent])
58
+ : [];
59
+ const icons = deduplicateIcons(collectIconsFromContent(contents), collectIconsFromNavigation(menu), collectIconsFromNavigation(footer));
60
+ const customType = {
61
+ type: 'Custom type',
62
+ id,
63
+ slug,
64
+ name,
65
+ title,
66
+ description: description,
67
+ featuredImage: lookupAsset(context, featuredImage),
68
+ href: context.urlCalculators.customType(slug),
69
+ contentCount: 0,
70
+ contents,
71
+ icons,
72
+ structuredData: shouldResolveContents(context)
73
+ ? [
74
+ ...(indexPageStructuredData?.map((link) => resolveSchema(context, id, link)) ?? []),
75
+ ].filter((item) => item !== null)
76
+ : undefined,
77
+ menu,
78
+ footer,
79
+ backgroundColour: customTypeBackgroundColour ?? template?.backgroundColour,
80
+ textColour: customTypeTextColour ?? template?.textColour,
81
+ meta: resolvedMeta(template?.meta, customTypeMeta),
82
+ ...other,
83
+ };
84
+ return customType;
85
+ }
86
+ export function baseCustomTypeLinkConverter(context, entry) {
87
+ const { sys: { id, contentType }, fields, } = entry;
88
+ if (contentType.sys.id !== 'customType') {
89
+ throw new Error(`Invalid content type: expected "customType", got "${contentType.sys.id}"`);
90
+ }
91
+ return createInternalLink(id, fields, context, context.urlCalculators.customType(fields.slug), 'CustomType');
92
+ }
93
+ //# 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,14 @@
1
+ import type { IBaseDocument } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier } from '../api';
4
+ import type { BaseDocumentSkeleton } from '../baseTypes/baseDocument';
5
+ import { type ConverterContext } from './helpers';
6
+ /**
7
+ * Converts a Contentful document entry to {@link IBaseDocument}.
8
+ *
9
+ * Public file links always go through `urlCalculators.download` (site proxy).
10
+ * Optional hop-page href uses `urlCalculators.document(slug)` when provided;
11
+ * otherwise falls back to the file proxy href, then `#`.
12
+ */
13
+ export declare function baseDocumentConverter(context: ConverterContext, entry: Entry<BaseDocumentSkeleton, DefaultChainModifier, string>): IBaseDocument;
14
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/converters/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,WAAW,CAAC;AAmBnB;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAC/D,aAAa,CAwCf"}
@@ -0,0 +1,51 @@
1
+ import { lookupDownloadAsset, makeContentfulDescription, makeContentfulTitle, } from './helpers.js';
2
+ const DOCUMENT_TYPES = new Set([
3
+ 'Compliance',
4
+ 'Marketing',
5
+ 'Fact Sheet',
6
+ 'Report',
7
+ 'Prospectus',
8
+ 'Holdings',
9
+ 'Regulatory',
10
+ 'Other',
11
+ ]);
12
+ function normalizeDocumentType(raw) {
13
+ if (typeof raw !== 'string' || raw.length === 0)
14
+ return null;
15
+ if (DOCUMENT_TYPES.has(raw))
16
+ return raw;
17
+ return raw;
18
+ }
19
+ /**
20
+ * Converts a Contentful document entry to {@link IBaseDocument}.
21
+ *
22
+ * Public file links always go through `urlCalculators.download` (site proxy).
23
+ * Optional hop-page href uses `urlCalculators.document(slug)` when provided;
24
+ * otherwise falls back to the file proxy href, then `#`.
25
+ */
26
+ export function baseDocumentConverter(context, entry) {
27
+ const { sys: { id, contentType }, fields, } = entry;
28
+ if (contentType.sys.id !== 'document') {
29
+ throw new Error(`Invalid content type: expected "document", got "${contentType.sys.id}"`);
30
+ }
31
+ const { name, slug, description, title, documentType: rawDocumentType, file: fileLink, publishDate, ...rest } = fields;
32
+ const file = lookupDownloadAsset(context, fileLink) ?? null;
33
+ const displayTitle = makeContentfulTitle(title ?? name, id);
34
+ const hopHref = context.urlCalculators.document?.(slug);
35
+ const href = hopHref ?? file?.href ?? '#';
36
+ return {
37
+ type: 'Document',
38
+ id,
39
+ slug,
40
+ name: name ?? displayTitle,
41
+ title: displayTitle,
42
+ description: makeContentfulDescription(description, id),
43
+ href,
44
+ contentCount: 0,
45
+ documentType: normalizeDocumentType(rawDocumentType),
46
+ file,
47
+ publishDate: publishDate ?? null,
48
+ ...rest,
49
+ };
50
+ }
51
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/converters/document.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS;IACrC,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,GAA2B,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAyB,EACzB,KAAgE;IAEhE,MAAM,EACJ,GAAG,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EACxB,MAAM,GACP,GAAG,KAAK,CAAC;IAEV,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,KAAK,EACL,YAAY,EAAE,eAAe,EAC7B,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,GAAG,IAAI,EACR,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC5D,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,IAAI,IAAI,YAAY;QAC1B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,yBAAyB,CAAC,WAAW,EAAE,EAAE,CAAC;QACvD,IAAI;QACJ,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,qBAAqB,CAAC,eAAe,CAAC;QACpD,IAAI;QACJ,WAAW,EAAE,WAAW,IAAI,IAAI;QAChC,GAAG,IAAI;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { IVideoEmbed, IVisual } from '@se-studio/core-data-types';
2
+ import type { PossibleResolvedEntry } from '../api/types';
3
+ import type { FetchOptions } from '../types';
4
+ /**
5
+ * Runs asset-enrichment steps in parallel and returns the map of pre-fetched oEmbed data for
6
+ * ConverterContext.
7
+ *
8
+ * - seEnrichVideoAssets / imagekitEnrichVideoAssets: R2 mute-loop pack or ImageKit dimensions
9
+ * - enrichAnimationAssets: fetches Lottie SVG placeholders (mutates assets)
10
+ * - enrichExternalVideoEmbeds: fetches oEmbed data for external video entries
11
+ * - enrichPictureBlurPlaceholders: optional; when `fetchOptions.enrichPictureBlurPlaceholders`,
12
+ * fetches tiny JPEGs and sets IPicture.blurDataURL (mutates assets)
13
+ *
14
+ * @param assets - Map<assetId, IVisual> built by convertAllAssets
15
+ * @param includes - Map<entryId, PossibleResolvedEntry> built by convertAllIncludes
16
+ * @param fetchOptions - When `enrichPictureBlurPlaceholders` is true, picture blur enrichment runs
17
+ */
18
+ export declare function enrichAllAssets(assets: Map<string, IVisual>, includes: Map<string, PossibleResolvedEntry>, fetchOptions?: Pick<FetchOptions, 'enrichPictureBlurPlaceholders'>): Promise<Map<string, IVideoEmbed>>;
19
+ //# sourceMappingURL=enrichAssets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichAssets.d.ts","sourceRoot":"","sources":["../../src/converters/enrichAssets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQ7C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC5C,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,+BAA+B,CAAC,GACjE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAiBnC"}
@@ -0,0 +1,36 @@
1
+ import { enrichAnimationAssets } from './animationEnricher.js';
2
+ import { enrichExternalVideoEmbeds } from './externalVideoEnricher.js';
3
+ import { seEnrichVideoAssets } from './heroVideoEnricher.js';
4
+ import { readHeroVideoEnv } from './heroVideoEnv.js';
5
+ import { enrichPictureBlurPlaceholders } from './pictureBlurEnricher.js';
6
+ import { imagekitEnrichVideoAssets } from './videoEnricher.js';
7
+ /**
8
+ * Runs asset-enrichment steps in parallel and returns the map of pre-fetched oEmbed data for
9
+ * ConverterContext.
10
+ *
11
+ * - seEnrichVideoAssets / imagekitEnrichVideoAssets: R2 mute-loop pack or ImageKit dimensions
12
+ * - enrichAnimationAssets: fetches Lottie SVG placeholders (mutates assets)
13
+ * - enrichExternalVideoEmbeds: fetches oEmbed data for external video entries
14
+ * - enrichPictureBlurPlaceholders: optional; when `fetchOptions.enrichPictureBlurPlaceholders`,
15
+ * fetches tiny JPEGs and sets IPicture.blurDataURL (mutates assets)
16
+ *
17
+ * @param assets - Map<assetId, IVisual> built by convertAllAssets
18
+ * @param includes - Map<entryId, PossibleResolvedEntry> built by convertAllIncludes
19
+ * @param fetchOptions - When `enrichPictureBlurPlaceholders` is true, picture blur enrichment runs
20
+ */
21
+ export async function enrichAllAssets(assets, includes, fetchOptions) {
22
+ const pictureBlur = fetchOptions?.enrichPictureBlurPlaceholders === true
23
+ ? enrichPictureBlurPlaceholders(assets)
24
+ : Promise.resolve();
25
+ const videoEnrichment = readHeroVideoEnv()
26
+ ? seEnrichVideoAssets(assets)
27
+ : imagekitEnrichVideoAssets(assets);
28
+ const [, , externalVideoEmbeds] = await Promise.all([
29
+ videoEnrichment,
30
+ enrichAnimationAssets(assets),
31
+ enrichExternalVideoEmbeds(includes),
32
+ pictureBlur,
33
+ ]);
34
+ return externalVideoEmbeds;
35
+ }
36
+ //# sourceMappingURL=enrichAssets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichAssets.js","sourceRoot":"","sources":["../../src/converters/enrichAssets.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA4B,EAC5B,QAA4C,EAC5C,YAAkE;IAElE,MAAM,WAAW,GACf,YAAY,EAAE,6BAA6B,KAAK,IAAI;QAClD,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAExB,MAAM,eAAe,GAAG,gBAAgB,EAAE;QACxC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC7B,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,CAAC,EAAE,AAAD,EAAG,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,eAAe;QACf,qBAAqB,CAAC,MAAM,CAAC;QAC7B,yBAAyB,CAAC,QAAQ,CAAC;QACnC,WAAW;KACZ,CAAC,CAAC;IACH,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { IBaseExternalComponent } from '@se-studio/core-data-types';
2
+ import type { Entry } from 'contentful';
3
+ import type { DefaultChainModifier, IContentfulRichText } from '../api';
4
+ import type { BaseExternalComponentSkeleton } from '../baseTypes/baseExternalComponent';
5
+ import { type ConverterContext } from './helpers';
6
+ export type IContentfulExternalComponent = IBaseExternalComponent & {
7
+ copy?: IContentfulRichText | null;
8
+ additionalCopy?: IContentfulRichText | null;
9
+ extraCopy?: IContentfulRichText | null;
10
+ };
11
+ /**
12
+ * Base converter for Contentful ExternalComponent entries to IExternalComponent type
13
+ *
14
+ * This is a minimal implementation that can be extended using
15
+ * the functional composition pattern.
16
+ *
17
+ * @param context - Converter context containing assets, includes, and resolvers
18
+ * @param entry - Contentful entry to convert
19
+ * @returns IExternalComponent object
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const externalComponent = baseExternalComponentConverter(context, contentfulEntry);
24
+ * ```
25
+ */
26
+ export declare function baseExternalComponentConverter(context: ConverterContext, entry: Entry<BaseExternalComponentSkeleton, DefaultChainModifier, string>): IContentfulExternalComponent;
27
+ //# 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,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,WAAW,CAAC;AAGnB,MAAM,MAAM,4BAA4B,GAAG,sBAAsB,GAAG;IAClE,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxC,CAAC;AACF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,CAAC,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,CAAC,GACxE,4BAA4B,CA8C9B"}
@@ -0,0 +1,46 @@
1
+ import { applyHideMobileBackgroundFlag, createResponsiveVisual } from './asset.js';
2
+ import { DEFAULT_POSITION_FIELDS, lookupAsset, lookupDownloadAsset, makeContentfulTitle, } from './helpers.js';
3
+ import { resolveLink, resolveRichTextDocument } from './resolver.js';
4
+ /**
5
+ * Base converter for Contentful ExternalComponent entries to IExternalComponent 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 IExternalComponent object
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const externalComponent = baseExternalComponentConverter(context, contentfulEntry);
17
+ * ```
18
+ */
19
+ export function baseExternalComponentConverter(context, entry) {
20
+ const { sys, fields } = entry;
21
+ const { id } = sys;
22
+ const { cmsLabel, backgroundVisual: bgVisual, mobileBackgroundVisual: mobileBgVisual, internalLink: internalLinkField, attachment: attachmentField, copy: copyField, additionalCopy: additionalCopyField, extraCopy: extraCopyField, flags, ...simpleFields } = fields;
23
+ // Convert background visuals to responsive visual
24
+ const backgroundVisual = applyHideMobileBackgroundFlag(createResponsiveVisual(lookupAsset(context, bgVisual), lookupAsset(context, mobileBgVisual)), flags);
25
+ const internalLink = internalLinkField ? resolveLink(context, id, internalLinkField) : null;
26
+ const attachment = attachmentField ? lookupDownloadAsset(context, attachmentField) : null;
27
+ const copy = resolveRichTextDocument(context, id, copyField);
28
+ const additionalCopy = resolveRichTextDocument(context, id, additionalCopyField);
29
+ const extraCopy = resolveRichTextDocument(context, id, extraCopyField);
30
+ const externalComponent = {
31
+ type: 'External component',
32
+ id,
33
+ name: makeContentfulTitle(cmsLabel, id),
34
+ cmsLabel: cmsLabel,
35
+ ...DEFAULT_POSITION_FIELDS,
36
+ ...simpleFields,
37
+ backgroundVisual,
38
+ copy,
39
+ additionalCopy,
40
+ extraCopy,
41
+ internalLink: internalLink ?? undefined,
42
+ attachment: attachment ?? undefined,
43
+ };
44
+ return externalComponent;
45
+ }
46
+ //# sourceMappingURL=externalComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalComponent.js","sourceRoot":"","sources":["../../src/converters/externalComponent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAEL,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAOlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAyB,EACzB,KAAyE;IAEzE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IAEnB,MAAM,EACJ,QAAQ,EACR,gBAAgB,EAAE,QAAQ,EAC1B,sBAAsB,EAAE,cAAc,EACtC,YAAY,EAAE,iBAAiB,EAC/B,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,mBAAmB,EACnC,SAAS,EAAE,cAAc,EACzB,KAAK,EACL,GAAG,YAAY,EAChB,GAAG,MAAM,CAAC;IAEX,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,6BAA6B,CACpD,sBAAsB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,EAC5F,KAAK,CACN,CAAC;IAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1F,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;IAEvE,MAAM,iBAAiB,GAAiC;QACtD,IAAI,EAAE,oBAAoB;QAC1B,EAAE;QACF,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvC,QAAQ,EAAE,QAAQ;QAClB,GAAG,uBAAuB;QAC1B,GAAG,YAAY;QACf,gBAAgB;QAChB,IAAI;QACJ,cAAc;QACd,SAAS;QACT,YAAY,EAAE,YAAY,IAAI,SAAS;QACvC,UAAU,EAAE,UAAU,IAAI,SAAS;KACpC,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { IVideoEmbed } from '@se-studio/core-data-types';
2
+ import type { PossibleResolvedEntry } from '../api/types';
3
+ /**
4
+ * Pre-fetches oEmbed data for all external video entries in the includes map.
5
+ * Returns a Map<entryId, IVideoEmbed> so converters can attach embed data
6
+ * synchronously without making async calls at render time. The results are
7
+ * serialised into the ISR cache as part of the converted page data.
8
+ *
9
+ * @param includes - The Map<entryId, PossibleResolvedEntry> built by convertAllIncludes
10
+ */
11
+ export declare function enrichExternalVideoEmbeds(includes: Map<string, PossibleResolvedEntry>): Promise<Map<string, IVideoEmbed>>;
12
+ //# sourceMappingURL=externalVideoEnricher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalVideoEnricher.d.ts","sourceRoot":"","sources":["../../src/converters/externalVideoEnricher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AA8D1D;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAsBnC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Returns the oEmbed endpoint URL for a known video provider, or undefined for
3
+ * unrecognised URLs. Using hardcoded patterns (rather than HTML discovery) lets
4
+ * us use Next.js native fetch with cache tags instead of delegating to a
5
+ * library whose internal fetch call bypasses the ISR cache.
6
+ */
7
+ function getOEmbedEndpoint(url) {
8
+ if (/youtube\.com|youtu\.be/.test(url)) {
9
+ return `https://www.youtube.com/oembed?url=${encodeURIComponent(url)}&format=json`;
10
+ }
11
+ if (/vimeo\.com/.test(url)) {
12
+ return `https://vimeo.com/api/oembed.json?url=${encodeURIComponent(url)}`;
13
+ }
14
+ return undefined;
15
+ }
16
+ /**
17
+ * Fetches oEmbed data for a known external video URL using Next.js native fetch
18
+ * so the response is cached via `force-cache`. Returns undefined for unrecognised
19
+ * providers or on any fetch failure.
20
+ */
21
+ async function fetchOEmbedData(url) {
22
+ const endpoint = getOEmbedEndpoint(url);
23
+ if (!endpoint)
24
+ return undefined;
25
+ try {
26
+ const response = await fetch(endpoint, {
27
+ cache: 'force-cache',
28
+ });
29
+ if (!response.ok)
30
+ return undefined;
31
+ const data = (await response.json());
32
+ if (data.type !== 'video' || !data.html)
33
+ return undefined;
34
+ return {
35
+ html: data.html,
36
+ width: data.width,
37
+ height: data.height,
38
+ thumbnailUrl: data.thumbnail_url,
39
+ title: data.title,
40
+ };
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ }
46
+ /**
47
+ * Pre-fetches oEmbed data for all external video entries in the includes map.
48
+ * Returns a Map<entryId, IVideoEmbed> so converters can attach embed data
49
+ * synchronously without making async calls at render time. The results are
50
+ * serialised into the ISR cache as part of the converted page data.
51
+ *
52
+ * @param includes - The Map<entryId, PossibleResolvedEntry> built by convertAllIncludes
53
+ */
54
+ export async function enrichExternalVideoEmbeds(includes) {
55
+ const result = new Map();
56
+ const externalVideoEntries = Array.from(includes.values()).filter((item) => item.type === 'externalVideo');
57
+ if (externalVideoEntries.length === 0)
58
+ return result;
59
+ await Promise.all(externalVideoEntries.map(async (item) => {
60
+ const url = item.entry.fields.url;
61
+ if (!url)
62
+ return;
63
+ const embed = await fetchOEmbedData(url);
64
+ if (embed) {
65
+ result.set(item.id, embed);
66
+ }
67
+ }));
68
+ return result;
69
+ }
70
+ //# sourceMappingURL=externalVideoEnricher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalVideoEnricher.js","sourceRoot":"","sources":["../../src/converters/externalVideoEnricher.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,sCAAsC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC;IACrF,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,yCAAyC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAAC,GAAW;IACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,aAAa;SACN,CAAC,CAAC;QAElB,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAEnC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;QAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE1D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAA4C;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CACxC,CAAC;IAEF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAErD,MAAM,OAAO,CAAC,GAAG,CACf,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACtC,MAAM,GAAG,GAAI,IAAI,CAAC,KAAK,CAAC,MAA8B,CAAC,GAAG,CAAC;QAC3D,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,173 @@
1
+ import type { IDownloadAsset, IInternalLink, InternalType, ITyped, IVideoEmbed, 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 ConverterResolutionScope } from '../api/listing-fetch-params';
5
+ import type { BaseContent, BaseLink } from '../baseTypes/baseShared';
6
+ import type { CmsError } from '../types';
7
+ import type { PrimaryTagSelector } from '../utils/tags';
8
+ import type { baseArticleConverter, baseArticleTypeConverter } from './article';
9
+ import type { baseBannerConverter } from './banner';
10
+ import type { baseCollectionConverter } from './collection';
11
+ import type { baseComponentConverter } from './component';
12
+ import type { baseCustomTypeConverter } from './customType';
13
+ import type { baseDocumentConverter } from './document';
14
+ import type { baseNavigationItemConverter } from './navigationItem';
15
+ import type { basePageConverter } from './page';
16
+ import type { baseTagConverter } from './tag';
17
+ import type { baseTagTypeConverter } from './tagType';
18
+ export declare function resolveBuildYear(value: string | null | undefined): string | undefined;
19
+ export declare function makeContentfulTitle(title: string | undefined | null, id: string, prefix?: string): string;
20
+ export declare function stringOrUndefined(value: string | null | undefined): string | undefined;
21
+ export declare function makeContentfulDescription(description: string | undefined | null, id: string): string;
22
+ export declare function lookupAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IVisual | undefined;
23
+ /**
24
+ * Looks up entries from a list of unresolved links
25
+ */
26
+ export declare function lookupEntries(context: ConverterContext, entries: UnresolvedLink<'Entry'>[] | undefined): PossibleResolvedEntry[];
27
+ /**
28
+ * Looks up an asset that is used as an icon.
29
+ * If the asset is an SVG image, it marks it with isIcon: true so it uses the sprite system.
30
+ */
31
+ export declare function lookupIconAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IVisual | undefined;
32
+ /**
33
+ * Looks up a raw asset and converts it to IDownloadAsset for download functionality.
34
+ * Returns undefined if the asset doesn't exist or doesn't have a valid file.
35
+ */
36
+ export declare function buildDownloadAssetFromRawAsset(context: BaseConverterContext, rawAsset: Asset): IDownloadAsset | undefined;
37
+ export declare function lookupDownloadAsset(context: ConverterContext, asset: UnresolvedLink<'Asset'> | undefined): IDownloadAsset | undefined;
38
+ /**
39
+ * Default positioning fields for content items before they are processed
40
+ */
41
+ export declare const DEFAULT_POSITION_FIELDS: {
42
+ readonly index: 0;
43
+ readonly isFirst: false;
44
+ readonly isLast: false;
45
+ readonly indexOfType: 0;
46
+ };
47
+ /**
48
+ * Creates an internal link object with common fields
49
+ * Used by multiple converters (tag, page, article, person) to reduce duplication
50
+ */
51
+ export declare function createInternalLink(id: string, fields: {
52
+ cmsLabel?: string | null;
53
+ name: string | null;
54
+ useName?: boolean | null;
55
+ title?: string | null;
56
+ breadcrumbTitle?: string | null;
57
+ featuredImage?: UnresolvedLink<'Asset'>;
58
+ backgroundColour?: string | null;
59
+ textColour?: string | null;
60
+ indexed?: boolean | null;
61
+ hidden?: boolean | null;
62
+ slug: string;
63
+ description?: string | null;
64
+ }, context: ConverterContext, href: string, internalType: InternalType, additionalProps?: any): IInternalLink;
65
+ export type ContentResolverFunction = (context: ConverterContext, entry: Entry<BaseContent, DefaultChainModifier, string>) => unknown;
66
+ export type ContentResolverMap = Map<string, ContentResolverFunction>;
67
+ export type LinkResolverFunction<TResult extends IInternalLink = IInternalLink> = (context: ConverterContext, entry: Entry<BaseLink, DefaultChainModifier, string>) => TResult;
68
+ export type LinkResolverMap = Map<string, LinkResolverFunction>;
69
+ /**
70
+ * URL calculators for each content type.
71
+ * Apps can (and must) override these to customize URL patterns for their project.
72
+ *
73
+ * These are called by link converters, sitemap generators, preview, breadcrumbs,
74
+ * markdown canonicals, and search indexing. All consuming projects (see docs/RELATED_PROJECTS.md
75
+ * and docs/routing.md) provide their own implementations matching their app routes and
76
+ * MarketingSiteSitemapConfig.
77
+ *
78
+ * Return values should typically include a trailing slash for page-like paths (except downloads).
79
+ */
80
+ export type UrlCalculators = {
81
+ page: (slug: string) => string;
82
+ pageVariant: (slug: string) => string;
83
+ article: (articleTypeSlug: string, slug: string, primaryTagSlug?: string) => string;
84
+ articleType: (slug: string) => string;
85
+ articleTypeTag: (articleTypeSlug: string, tagSlug: string) => string;
86
+ tag: (slug: string) => string;
87
+ person: (slug: string) => string;
88
+ team: () => string;
89
+ customType: (slug: string) => string;
90
+ tagType: (slug: string) => string;
91
+ download: (assetId: string, filename: string) => string;
92
+ /**
93
+ * Optional hop-page URL for Document entries (e.g. `/documents/${slug}/`).
94
+ * When omitted, document `href` falls back to the download-proxy path for the file.
95
+ */
96
+ document?: (slug: string) => string;
97
+ };
98
+ export type BaseConverterContext = {
99
+ videoPrefix: string;
100
+ /**
101
+ * Resolves a mask dropdown value (e.g., 'Rounded diamond') to a URL.
102
+ * Each project provides its own implementation with project-specific masks.
103
+ */
104
+ maskResolver?: (maskName: string) => string | undefined;
105
+ /**
106
+ * Resolves a gradient dropdown value to a CSS gradient string.
107
+ * Each project provides its own implementation with project-specific gradients.
108
+ */
109
+ gradientResolver?: (gradientName: string) => string | undefined;
110
+ /**
111
+ * URL calculators for each content type.
112
+ * Apps can override these to customize URL patterns for links, sitemaps, and preview.
113
+ */
114
+ urlCalculators: UrlCalculators;
115
+ /**
116
+ * Optional project resolvers for Contentful Live Preview entry → URL lookup.
117
+ * Keys are Contentful content type ids (e.g. `location`). Used by
118
+ * getPreviewEntryInfo when the content type is not a built-in type.
119
+ * See {@link import('../api/preview-types').PreviewEntryResolver}.
120
+ */
121
+ previewEntryResolvers?: Readonly<Record<string, import('../api/preview-types').PreviewEntryResolver>>;
122
+ linkResolver: LinkResolverMap;
123
+ contentResolver: Map<string, (context: ConverterContext, entry: Entry<BaseContent, DefaultChainModifier, string>) => unknown>;
124
+ navigationItemResolver: typeof baseNavigationItemConverter;
125
+ pageResolver: typeof basePageConverter;
126
+ articleResolver: typeof baseArticleConverter;
127
+ articleTypeResolver: typeof baseArticleTypeConverter;
128
+ tagResolver: typeof baseTagConverter;
129
+ tagTypeResolver: typeof baseTagTypeConverter;
130
+ personResolver: typeof import('./person').basePersonConverter;
131
+ customTypeResolver: typeof baseCustomTypeConverter;
132
+ componentResolver: typeof baseComponentConverter;
133
+ collectionResolver: typeof baseCollectionConverter;
134
+ bannerResolver: typeof baseBannerConverter;
135
+ documentResolver: typeof baseDocumentConverter;
136
+ redirectResolver: typeof import('./redirect').baseRedirectConverter;
137
+ /**
138
+ * Optional selector to determine the primary tag for URL generation.
139
+ * Receives each tag and the article type; return true for the desired primary tag.
140
+ * Falls back to tags[0] when omitted or no match found.
141
+ */
142
+ primaryTagSelector?: PrimaryTagSelector;
143
+ };
144
+ export type ConverterContext = BaseConverterContext & {
145
+ includes: Map<string, PossibleResolvedEntry>;
146
+ assets: Map<string, IVisual>;
147
+ rawAssets: Map<string, Asset>;
148
+ errors: CmsError[];
149
+ externalVideoEmbeds: Map<string, IVideoEmbed>;
150
+ /** When omitted, treated as full page resolution (nav + contents). */
151
+ resolutionScope?: ConverterResolutionScope;
152
+ };
153
+ export declare function getResolutionScope(context: ConverterContext): ConverterResolutionScope;
154
+ export declare function shouldResolveNavigation(context: ConverterContext): boolean;
155
+ export declare function shouldResolveContents(context: ConverterContext): boolean;
156
+ /**
157
+ * Adds position metadata to an array of content items
158
+ * Each item gets: index, isFirst, isLast, indexOfType
159
+ *
160
+ * indexOfType is keyed by CMS-facing type (componentType, collectionType, etc.),
161
+ * not structural item.type.
162
+ *
163
+ * @param items - Array of content items to add metadata to
164
+ * @returns New array with position metadata added to each item
165
+ */
166
+ export declare function addPositionMetadata<T extends ITyped & {
167
+ index?: number;
168
+ isFirst?: boolean;
169
+ isLast?: boolean;
170
+ indexOfType?: number;
171
+ }>(items: T[]): T[];
172
+ export declare function calculateContentCount(...contents: ITyped[][]): number;
173
+ //# 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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"}