@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,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const storage = new AsyncLocalStorage();
3
+ export function withCmsQueryContext(context, fn) {
4
+ return storage.run(context, fn);
5
+ }
6
+ export function getCmsQueryContext() {
7
+ return storage.getStore();
8
+ }
9
+ //# sourceMappingURL=queryContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryContext.js","sourceRoot":"","sources":["../../src/telemetry/queryContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAEzD,MAAM,UAAU,mBAAmB,CAAI,OAAwB,EAAE,EAAW;IAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface CmsQueryLogEntry {
2
+ url: string;
3
+ operation: string;
4
+ identifier?: string;
5
+ bytes: number;
6
+ ms: number;
7
+ }
8
+ export declare function isCmsQueryLoggingEnabled(): boolean;
9
+ /** Format byte count as a compact human-readable size (e.g. 23.5k, 1.2M). */
10
+ export declare function formatPayloadSize(bytes: number): string;
11
+ export declare function logCmsQuery(entry: Omit<CmsQueryLogEntry, 'operation' | 'identifier'> & Partial<Pick<CmsQueryLogEntry, 'operation' | 'identifier'>>): void;
12
+ /** Read response body bytes and return text for JSON parsing. */
13
+ export declare function readResponseBodyWithSize(response: Response): Promise<{
14
+ bytes: number;
15
+ text: string;
16
+ }>;
17
+ //# sourceMappingURL=queryLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryLog.d.ts","sourceRoot":"","sources":["../../src/telemetry/queryLog.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,YAAY,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC,GAC5D,IAAI,CAuBN;AAED,iEAAiE;AACjE,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAc1C"}
@@ -0,0 +1,54 @@
1
+ import { deriveOperationFromUrl } from './deriveOperation.js';
2
+ import { getCmsQueryContext } from './queryContext.js';
3
+ export function isCmsQueryLoggingEnabled() {
4
+ return process.env.LOG_CMS_QUERIES === '1';
5
+ }
6
+ /** Format byte count as a compact human-readable size (e.g. 23.5k, 1.2M). */
7
+ export function formatPayloadSize(bytes) {
8
+ if (bytes < 1024)
9
+ return `${bytes}`;
10
+ if (bytes < 1024 * 1024) {
11
+ const kb = bytes / 1024;
12
+ return kb >= 100 ? `${Math.round(kb)}k` : `${kb.toFixed(1)}k`;
13
+ }
14
+ const mb = bytes / (1024 * 1024);
15
+ return mb >= 100 ? `${Math.round(mb)}M` : `${mb.toFixed(1)}M`;
16
+ }
17
+ export function logCmsQuery(entry) {
18
+ if (!isCmsQueryLoggingEnabled())
19
+ return;
20
+ const context = getCmsQueryContext();
21
+ const derived = deriveOperationFromUrl(entry.url);
22
+ const payload = {
23
+ url: entry.url,
24
+ operation: entry.operation ?? context?.operation ?? derived.operation,
25
+ ...(entry.identifier !== undefined
26
+ ? entry.identifier
27
+ ? { identifier: entry.identifier }
28
+ : {}
29
+ : context?.identifier
30
+ ? { identifier: context.identifier }
31
+ : derived.identifier
32
+ ? { identifier: derived.identifier }
33
+ : {}),
34
+ bytes: entry.bytes,
35
+ ms: entry.ms,
36
+ };
37
+ console.log(`[CMS query] ${JSON.stringify(payload)}`);
38
+ }
39
+ /** Read response body bytes and return text for JSON parsing. */
40
+ export async function readResponseBodyWithSize(response) {
41
+ const contentLength = response.headers.get('content-length');
42
+ if (contentLength) {
43
+ const parsed = Number.parseInt(contentLength, 10);
44
+ const text = await response.text();
45
+ return {
46
+ bytes: Number.isNaN(parsed) ? Buffer.byteLength(text, 'utf8') : parsed,
47
+ text,
48
+ };
49
+ }
50
+ const buffer = await response.arrayBuffer();
51
+ const text = new TextDecoder().decode(buffer);
52
+ return { bytes: buffer.byteLength, text };
53
+ }
54
+ //# sourceMappingURL=queryLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryLog.js","sourceRoot":"","sources":["../../src/telemetry/queryLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Configuration options for creating a Contentful client
3
+ */
4
+ export interface ContentfulConfig {
5
+ /** Contentful space ID */
6
+ spaceId: string;
7
+ /** Access token for the Contentful API (CDA or CPA token) */
8
+ accessToken: string;
9
+ /** Environment name (defaults to 'master') */
10
+ environment?: string;
11
+ /** Host override (useful for proxies or custom endpoints) */
12
+ host?: string;
13
+ }
14
+ /**
15
+ * Retry configuration for failed requests
16
+ */
17
+ export interface RetryConfig {
18
+ /** Maximum number of retry attempts */
19
+ maxRetries?: number;
20
+ /** Initial delay in milliseconds */
21
+ initialDelay?: number;
22
+ /** Maximum delay in milliseconds */
23
+ maxDelay?: number;
24
+ /** Backoff multiplier */
25
+ backoffMultiplier?: number;
26
+ }
27
+ /**
28
+ * Options for fetching content from Contentful
29
+ */
30
+ export interface FetchOptions {
31
+ /** Locale to fetch content in */
32
+ locale?: string;
33
+ /** Use preview API instead of delivery API */
34
+ preview: boolean;
35
+ /** Include depth for linked entries */
36
+ include?: number;
37
+ cache?: 'force-cache' | 'no-store';
38
+ next?: {
39
+ revalidate?: number | false;
40
+ tags?: string[];
41
+ };
42
+ /** Retry configuration */
43
+ retry?: RetryConfig;
44
+ /**
45
+ * When true, `enrichAllAssets` fetches a tiny Contentful CDN variant per included raster picture
46
+ * and sets `IPicture.blurDataURL` for Next.js blur placeholders. One HTTP request per distinct
47
+ * picture asset; SVG assets and pictures that already have `blurDataURL` are skipped. Default off.
48
+ */
49
+ enrichPictureBlurPlaceholders?: boolean;
50
+ /**
51
+ * `page` — full layout model (nav, template, contents). Default for single-entity REST.
52
+ * `listing` — metadata/links only (no nav or content trees). Default for bulk link fetches.
53
+ */
54
+ fetchProfile?: CmsFetchProfile;
55
+ /**
56
+ * `bundled` (default) — resolve menu/footer via Contentful includes during conversion.
57
+ * `flat` — stub nav root ids during conversion; assemble full trees post-convert via registry.
58
+ */
59
+ navigationResolution?: NavigationResolution;
60
+ /** Pagination page size for `contentfulAllArticleLinks`. Default 100. */
61
+ pageSize?: number;
62
+ /**
63
+ * When true, skip video/blur asset enrichment (for Node smoke integrity checks outside Next.js).
64
+ */
65
+ skipAssetEnrichment?: boolean;
66
+ }
67
+ /** CMS fetch profile: full page render vs lightweight listing/metadata. */
68
+ export type CmsFetchProfile = 'page' | 'listing';
69
+ /** How menu/footer are resolved on page-profile entity fetches. */
70
+ export type NavigationResolution = 'flat' | 'bundled';
71
+ /**
72
+ * Error information for failed content conversion
73
+ */
74
+ export interface CmsError {
75
+ /** ID of the entry that failed to convert */
76
+ entryId: string;
77
+ /** Content type of the entry that failed */
78
+ entryType?: string;
79
+ /** Human-readable error message */
80
+ message: string;
81
+ /** Original error object for debugging */
82
+ error?: unknown;
83
+ }
84
+ /**
85
+ * Response wrapper for CMS operations that may include partial errors
86
+ */
87
+ export interface CmsResponse<T> {
88
+ /** The successful data */
89
+ data: T;
90
+ /** Any errors that occurred during processing */
91
+ errors: CmsError[];
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;IACnC,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,0BAA0B;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC;;;OAGG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,2EAA2E;AAC3E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,CAAC;AAEjD,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,iDAAiD;IACjD,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare function notEmpty<TValue>(value: TValue | null | undefined): value is TValue;
2
+ export declare function arrayOrUndefined<T>(array?: ReadonlyArray<T>): readonly T[] | undefined;
3
+ //# sourceMappingURL=arrayUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.d.ts","sourceRoot":"","sources":["../../src/utils/arrayUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,MAAM,CAGlF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,4BAK3D"}
@@ -0,0 +1,12 @@
1
+ export function notEmpty(value) {
2
+ if (value === null || value === undefined)
3
+ return false;
4
+ return true;
5
+ }
6
+ export function arrayOrUndefined(array) {
7
+ if (array && array.length > 0) {
8
+ return array;
9
+ }
10
+ return undefined;
11
+ }
12
+ //# sourceMappingURL=arrayUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../src/utils/arrayUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAS,KAAgC;IAC/D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,KAAwB;IAC1D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Validates if a value can be converted to a valid Date object
3
+ */
4
+ export declare function isValidDate(date: unknown): boolean;
5
+ /**
6
+ * Safely creates a Date object, returning null if invalid
7
+ */
8
+ export declare function safeDate(date: unknown): Date | null;
9
+ //# sourceMappingURL=dateUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAWlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAUnD"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Validates if a value can be converted to a valid Date object
3
+ */
4
+ export function isValidDate(date) {
5
+ if (date instanceof Date) {
6
+ return !Number.isNaN(date.getTime());
7
+ }
8
+ if (typeof date === 'string' || typeof date === 'number') {
9
+ const parsed = new Date(date);
10
+ return !Number.isNaN(parsed.getTime()) && parsed.getTime() > 0;
11
+ }
12
+ return false;
13
+ }
14
+ /**
15
+ * Safely creates a Date object, returning null if invalid
16
+ */
17
+ export function safeDate(date) {
18
+ if (!isValidDate(date)) {
19
+ return null;
20
+ }
21
+ if (date instanceof Date) {
22
+ return date;
23
+ }
24
+ return new Date(date);
25
+ }
26
+ //# sourceMappingURL=dateUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateUtils.js","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,IAAuB,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Custom error classes for Contentful API errors
3
+ */
4
+ /**
5
+ * Base error class for all Contentful-related errors
6
+ */
7
+ export declare class ContentfulError extends Error {
8
+ readonly statusCode?: number | undefined;
9
+ readonly details?: unknown | undefined;
10
+ constructor(message: string, statusCode?: number | undefined, details?: unknown | undefined);
11
+ }
12
+ /**
13
+ * Error thrown when rate limit is exceeded
14
+ */
15
+ export declare class RateLimitError extends ContentfulError {
16
+ readonly retryAfter?: number | undefined;
17
+ constructor(message: string, retryAfter?: number | undefined, details?: unknown);
18
+ }
19
+ /**
20
+ * Error thrown when entry is not found
21
+ */
22
+ export declare class EntryNotFoundError extends ContentfulError {
23
+ readonly entryId: string;
24
+ readonly contentType?: string | undefined;
25
+ constructor(entryId: string, contentType?: string | undefined);
26
+ }
27
+ /**
28
+ * Error thrown when authentication fails
29
+ */
30
+ export declare class AuthenticationError extends ContentfulError {
31
+ constructor(message?: string);
32
+ }
33
+ /**
34
+ * Error thrown when validation fails
35
+ */
36
+ export declare class ValidationError extends ContentfulError {
37
+ readonly validationErrors?: unknown | undefined;
38
+ constructor(message: string, validationErrors?: unknown | undefined);
39
+ }
40
+ /**
41
+ * Checks if an error is a Contentful error
42
+ */
43
+ export declare function isContentfulError(error: unknown): error is ContentfulError;
44
+ /**
45
+ * Checks if an error is a rate limit error
46
+ */
47
+ export declare function isRateLimitError(error: unknown): error is RateLimitError;
48
+ /**
49
+ * Checks if an error is retryable
50
+ */
51
+ export declare function isRetryableError(error: unknown): boolean;
52
+ /**
53
+ * Extracts retry-after header value from error
54
+ */
55
+ export declare function getRetryAfter(error: unknown): number | undefined;
56
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,UAAU,CAAC,EAAE,MAAM;aACnB,OAAO,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,OAAO,YAAA;CAMpC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,eAAe;aAG/B,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnC,OAAO,CAAC,EAAE,OAAO;CAMpB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;aAEnC,OAAO,EAAE,MAAM;aACf,WAAW,CAAC,EAAE,MAAM;gBADpB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,YAAA;CAMvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAA0B;CAK9C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;aAGhC,gBAAgB,CAAC,EAAE,OAAO;gBAD1C,OAAO,EAAE,MAAM,EACC,gBAAgB,CAAC,EAAE,OAAO,YAAA;CAM7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKhE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Custom error classes for Contentful API errors
3
+ */
4
+ /**
5
+ * Base error class for all Contentful-related errors
6
+ */
7
+ export class ContentfulError extends Error {
8
+ statusCode;
9
+ details;
10
+ constructor(message, statusCode, details) {
11
+ super(message);
12
+ this.statusCode = statusCode;
13
+ this.details = details;
14
+ this.name = 'ContentfulError';
15
+ Object.setPrototypeOf(this, ContentfulError.prototype);
16
+ }
17
+ }
18
+ /**
19
+ * Error thrown when rate limit is exceeded
20
+ */
21
+ export class RateLimitError extends ContentfulError {
22
+ retryAfter;
23
+ constructor(message, retryAfter, details) {
24
+ super(message, 429, details);
25
+ this.retryAfter = retryAfter;
26
+ this.name = 'RateLimitError';
27
+ Object.setPrototypeOf(this, RateLimitError.prototype);
28
+ }
29
+ }
30
+ /**
31
+ * Error thrown when entry is not found
32
+ */
33
+ export class EntryNotFoundError extends ContentfulError {
34
+ entryId;
35
+ contentType;
36
+ constructor(entryId, contentType) {
37
+ super(`Entry not found: ${entryId}${contentType ? ` (${contentType})` : ''}`, 404);
38
+ this.entryId = entryId;
39
+ this.contentType = contentType;
40
+ this.name = 'EntryNotFoundError';
41
+ Object.setPrototypeOf(this, EntryNotFoundError.prototype);
42
+ }
43
+ }
44
+ /**
45
+ * Error thrown when authentication fails
46
+ */
47
+ export class AuthenticationError extends ContentfulError {
48
+ constructor(message = 'Authentication failed') {
49
+ super(message, 401);
50
+ this.name = 'AuthenticationError';
51
+ Object.setPrototypeOf(this, AuthenticationError.prototype);
52
+ }
53
+ }
54
+ /**
55
+ * Error thrown when validation fails
56
+ */
57
+ export class ValidationError extends ContentfulError {
58
+ validationErrors;
59
+ constructor(message, validationErrors) {
60
+ super(message, 400, validationErrors);
61
+ this.validationErrors = validationErrors;
62
+ this.name = 'ValidationError';
63
+ Object.setPrototypeOf(this, ValidationError.prototype);
64
+ }
65
+ }
66
+ /**
67
+ * Checks if an error is a Contentful error
68
+ */
69
+ export function isContentfulError(error) {
70
+ return error instanceof ContentfulError;
71
+ }
72
+ /**
73
+ * Checks if an error is a rate limit error
74
+ */
75
+ export function isRateLimitError(error) {
76
+ return error instanceof RateLimitError;
77
+ }
78
+ /**
79
+ * Checks if an error is retryable
80
+ */
81
+ export function isRetryableError(error) {
82
+ if (isRateLimitError(error)) {
83
+ return true;
84
+ }
85
+ if (isContentfulError(error)) {
86
+ // Retry on 5xx errors and rate limits
87
+ return error.statusCode !== undefined && (error.statusCode >= 500 || error.statusCode === 429);
88
+ }
89
+ return false;
90
+ }
91
+ /**
92
+ * Extracts retry-after header value from error
93
+ */
94
+ export function getRetryAfter(error) {
95
+ if (isRateLimitError(error)) {
96
+ return error.retryAfter;
97
+ }
98
+ return undefined;
99
+ }
100
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB;IACA;IAHlB,YACE,OAAe,EACC,UAAmB,EACnB,OAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAS;QACnB,YAAO,GAAP,OAAO,CAAU;QAGjC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IAG/B;IAFlB,YACE,OAAe,EACC,UAAmB,EACnC,OAAiB;QAEjB,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAHb,eAAU,GAAV,UAAU,CAAS;QAInC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IAEnC;IACA;IAFlB,YACkB,OAAe,EACf,WAAoB;QAEpC,KAAK,CAAC,oBAAoB,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAHnE,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAS;QAGpC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAO,GAAG,uBAAuB;QAC3C,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,eAAe;IAGhC;IAFlB,YACE,OAAe,EACC,gBAA0B;QAE1C,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAFtB,qBAAgB,GAAhB,gBAAgB,CAAU;QAG1C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,eAAe,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,cAAc,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,sCAAsC;QACtC,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility functions for error handling, retry logic, and rate limiting
3
+ */
4
+ export { arrayOrUndefined, notEmpty } from './arrayUtils';
5
+ export { isValidDate, safeDate } from './dateUtils';
6
+ export { AuthenticationError, ContentfulError, EntryNotFoundError, getRetryAfter, isContentfulError, isRateLimitError, isRetryableError, RateLimitError, ValidationError, } from './errors';
7
+ export { calculateBackoffDelay, getRateLimiter, getRateLimitPauseSeconds, getRetryConfig, RateLimiter, withRetry, } from './retry';
8
+ export { type ArticleForTagSelection, filterVisibleTags, getPrimaryTag, isTagShowEnabled, isTagVisible, type PrimaryTagSelector, type TagVisibilityFields, } from './tags';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility functions for error handling, retry logic, and rate limiting
3
+ */
4
+ export { arrayOrUndefined, notEmpty } from './arrayUtils.js';
5
+ export { isValidDate, safeDate } from './dateUtils.js';
6
+ export { AuthenticationError, ContentfulError, EntryNotFoundError, getRetryAfter, isContentfulError, isRateLimitError, isRetryableError, RateLimitError, ValidationError, } from './errors.js';
7
+ export { calculateBackoffDelay, getRateLimiter, getRateLimitPauseSeconds, getRetryConfig, RateLimiter, withRetry, } from './retry.js';
8
+ export { filterVisibleTags, getPrimaryTag, isTagShowEnabled, isTagVisible, } from './tags.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,GAGb,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { IRedirect } from '@se-studio/core-data-types';
2
+ /**
3
+ * Shape of the baked redirect map consumed by middleware (and generated at build time).
4
+ * Keyed by normalized fromPath.
5
+ */
6
+ export interface RedirectMapEntry {
7
+ to: string;
8
+ status: 301 | 302 | 307 | 308;
9
+ }
10
+ export type RedirectMap = Record<string, RedirectMapEntry>;
11
+ /**
12
+ * Pure helper that turns a list of IRedirect (from Contentful) into the simple
13
+ * map used by middleware at runtime or baked into a static module at build.
14
+ *
15
+ * - Filters out inactive redirects.
16
+ * - Prefers explicit statusCode; defaults to 301.
17
+ * - Normalizes paths: ensures leading `/` (unless external) and trailing `/`
18
+ * for internal paths (aligns with the project's trailingSlash: true convention
19
+ * used by UrlCalculators and sitemap hrefs).
20
+ * - Drops self-redirects (A → A) after normalization.
21
+ * - Detects and drops rules that participate in redirect cycles (A → B → A, etc.).
22
+ * A console warning is emitted for cycles (visible during build/generate scripts).
23
+ *
24
+ * This is intentionally side-effect free (except build-visible warnings) and safe
25
+ * to run in a Next.js build script or edge middleware context.
26
+ */
27
+ export declare function buildRedirectMap(redirects: IRedirect[] | null | undefined): RedirectMap;
28
+ /**
29
+ * Filter a list of sitemap-like entries, removing any whose `url` (after light
30
+ * normalization for trailing slash) is the source ("from") of an active redirect.
31
+ *
32
+ * Use this (or pass `redirectMap` to `getSitemapEntries`) so that URLs which
33
+ * redirect away do not appear in your sitemap.
34
+ *
35
+ * Works for any `{ url: string }` shape (SitemapEntry, ISitemapEntry, etc.).
36
+ */
37
+ export declare function filterSitemapEntriesExcludingRedirects<T extends {
38
+ url: string;
39
+ }>(entries: T[], redirectMap: RedirectMap): T[];
40
+ //# sourceMappingURL=redirectMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirectMap.d.ts","sourceRoot":"","sources":["../../src/utils/redirectMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAW3D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CA8EvF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAC9E,OAAO,EAAE,CAAC,EAAE,EACZ,WAAW,EAAE,WAAW,GACvB,CAAC,EAAE,CAoBL"}
@@ -0,0 +1,129 @@
1
+ function normalizeRedirectPath(p) {
2
+ if (!p)
3
+ return '';
4
+ let s = p.trim();
5
+ const isExternal = /^https?:\/\//i.test(s);
6
+ if (!isExternal && !s.startsWith('/'))
7
+ s = `/${s}`;
8
+ if (!isExternal && !s.endsWith('/'))
9
+ s = `${s}/`;
10
+ return s;
11
+ }
12
+ /**
13
+ * Pure helper that turns a list of IRedirect (from Contentful) into the simple
14
+ * map used by middleware at runtime or baked into a static module at build.
15
+ *
16
+ * - Filters out inactive redirects.
17
+ * - Prefers explicit statusCode; defaults to 301.
18
+ * - Normalizes paths: ensures leading `/` (unless external) and trailing `/`
19
+ * for internal paths (aligns with the project's trailingSlash: true convention
20
+ * used by UrlCalculators and sitemap hrefs).
21
+ * - Drops self-redirects (A → A) after normalization.
22
+ * - Detects and drops rules that participate in redirect cycles (A → B → A, etc.).
23
+ * A console warning is emitted for cycles (visible during build/generate scripts).
24
+ *
25
+ * This is intentionally side-effect free (except build-visible warnings) and safe
26
+ * to run in a Next.js build script or edge middleware context.
27
+ */
28
+ export function buildRedirectMap(redirects) {
29
+ const map = {};
30
+ if (!redirects || redirects.length === 0) {
31
+ return map;
32
+ }
33
+ for (const r of redirects) {
34
+ if (r.active === false)
35
+ continue;
36
+ const from = normalizeRedirectPath(r.fromPath || '');
37
+ if (!from)
38
+ continue;
39
+ const to = normalizeRedirectPath(r.to || '');
40
+ if (!to)
41
+ continue;
42
+ // Self-loop guard (after normalization)
43
+ if (from === to)
44
+ continue;
45
+ const status = (r.statusCode ?? 301);
46
+ // Last one wins if duplicates (editors should avoid); keeps it simple.
47
+ map[from] = { to, status };
48
+ }
49
+ // Cycle detection: walk the graph of internal redirects and drop any 'from' that
50
+ // participates in a cycle. We do this after the initial map so we have a clean
51
+ // from->to graph of only the candidates.
52
+ const fromTo = {};
53
+ for (const [f, e] of Object.entries(map)) {
54
+ // Only follow if the target is itself a redirect source (internal hop)
55
+ if (map[e.to]) {
56
+ fromTo[f] = e.to;
57
+ }
58
+ }
59
+ function findCycle(start) {
60
+ const path = [];
61
+ const seen = new Set();
62
+ let cur = start;
63
+ while (cur) {
64
+ if (seen.has(cur)) {
65
+ // cycle detected; return the cycle portion
66
+ const idx = path.indexOf(cur);
67
+ return idx >= 0 ? path.slice(idx).concat(cur) : path.concat(cur);
68
+ }
69
+ seen.add(cur);
70
+ path.push(cur);
71
+ cur = fromTo[cur];
72
+ }
73
+ return null;
74
+ }
75
+ const cyclicFroms = new Set();
76
+ for (const f of Object.keys(fromTo)) {
77
+ if (!cyclicFroms.has(f)) {
78
+ const cycle = findCycle(f);
79
+ if (cycle) {
80
+ for (const node of cycle) {
81
+ if (fromTo[node] !== undefined)
82
+ cyclicFroms.add(node);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ if (cyclicFroms.size > 0) {
88
+ if (typeof console !== 'undefined' && console.warn) {
89
+ console.warn(`[redirects] Dropping ${cyclicFroms.size} redirect rule(s) that participate in cycle(s):`, Array.from(cyclicFroms));
90
+ }
91
+ for (const bad of cyclicFroms) {
92
+ delete map[bad];
93
+ }
94
+ }
95
+ return map;
96
+ }
97
+ /**
98
+ * Filter a list of sitemap-like entries, removing any whose `url` (after light
99
+ * normalization for trailing slash) is the source ("from") of an active redirect.
100
+ *
101
+ * Use this (or pass `redirectMap` to `getSitemapEntries`) so that URLs which
102
+ * redirect away do not appear in your sitemap.
103
+ *
104
+ * Works for any `{ url: string }` shape (SitemapEntry, ISitemapEntry, etc.).
105
+ */
106
+ export function filterSitemapEntriesExcludingRedirects(entries, redirectMap) {
107
+ if (!redirectMap || Object.keys(redirectMap).length === 0) {
108
+ return entries;
109
+ }
110
+ const froms = new Set(Object.keys(redirectMap));
111
+ return entries.filter((entry) => {
112
+ const u = entry.url || '';
113
+ if (!u)
114
+ return true;
115
+ if (froms.has(u))
116
+ return false;
117
+ // Robustness for trailing slash differences (map keys are normalized with trailing / for internals)
118
+ if (u.endsWith('/')) {
119
+ if (froms.has(u.slice(0, -1)))
120
+ return false;
121
+ }
122
+ else {
123
+ if (froms.has(`${u}/`))
124
+ return false;
125
+ }
126
+ return true;
127
+ });
128
+ }
129
+ //# sourceMappingURL=redirectMap.js.map