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