@ethlete/contentful 4.0.0-next.7 → 4.0.0-next.9
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 +17 -0
- package/fesm2022/ethlete-contentful.mjs +342 -327
- package/fesm2022/ethlete-contentful.mjs.map +1 -1
- package/generators/migrate-to-contentful-v5/migration-scope.js +12 -6
- package/generators/migrate-to-contentful-v5/migration.js +96 -32
- package/migrations.json +12 -0
- package/package.json +5 -10
- package/types/ethlete-contentful.d.ts +28 -80
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/constants/contentful.constants.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.utils.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.ts","../../../../libs/contentful/src/lib/components/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/link/contentful-link.component.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-node-types.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.errors.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.util.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.component.ts","../../../../libs/contentful/src/lib/contentful.imports.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { GQL } from '@ethlete/query';\n\nexport const GQL_FRAGMENT_CONTENTFUL_ASSET = `\n fragment AssetData on Asset {\n sys {\n id\n }\n url\n title\n width\n height\n description\n contentType\n size\n }\n` as GQL;\n\nexport type ContentfulGqlAsset = {\n sys: {\n id: string;\n };\n title: string | null;\n contentType: string | null;\n url: string | null;\n description: string | null;\n width: number | null;\n height: number | null;\n size: number | null;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isContentfulGqlAsset = (asset: any): asset is ContentfulGqlAsset => {\n return asset?.sys?.id && asset?.url && typeof asset?.size === 'number';\n};\n\nexport type ContentfulGqlWhereFilter<TLinkedFrom extends Record<string, unknown> = Record<string, unknown>> = {\n /**\n * Filer by ids.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/sys-filters\n */\n sys?: {\n id?: string;\n id_not?: string;\n id_in?: string[];\n id_not_in?: string[];\n id_contains?: string;\n id_not_contains?: string;\n };\n /**\n * Filer by tags.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/contentfulmetadata-filters\n */\n contentfulMetadata?: {\n tags_exists?: boolean;\n tags?: {\n id_contains_some?: string[];\n id_contains_none?: string[];\n id_contains_all?: string[];\n };\n };\n /**\n * Retrieve a collection of entries linked to the specified entry or asset.\n * @see https://www.contentful.com/developers/docs/references/graphql/#links-to-a-specific-item\n */\n linkedFrom?: TLinkedFrom;\n};\n\nexport type ContentfulGqlOrder = `${string}_${'ASC' | 'DESC'}`;\n\nexport type ContentfulGqlCollectionFilterVariables<\n TCustomWhere extends Record<string, unknown> = Record<string, unknown>,\n TLinkedFrom extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /**\n * Zero-indexed offset in the collection from which items are fetched\n * @default 0\n */\n skip?: number;\n\n /**\n * Maximum number of items to fetch. Maximum is 1000.\n * @default 100\n */\n limit?: number;\n\n /**\n * Filter specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters\n */\n where?: TCustomWhere & ContentfulGqlWhereFilter<TLinkedFrom>;\n\n /**\n * Order specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-order\n */\n order?: ContentfulGqlOrder[];\n\n /**\n * When set to `true` the field will be resolved with non published content.\n * @default false\n */\n preview?: boolean;\n\n /**\n * Locale for the collection items. If not set the default locale is used.\n */\n locale?: string;\n};\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n @if (data(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.url }}\"></audio>\n </figure>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulAudioComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n audioClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n title: asset.title,\n };\n }\n\n return {\n url: asset.fields.file.url,\n title: asset.fields.title,\n };\n });\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n @if (data(); as data) {\n <a [href]=\"data.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.title }} ({{ data.size }} Bytes)\n </a>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulFileComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n fileClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n size: asset.size,\n title: asset.title,\n };\n }\n\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n size: asset.fields.file.details.size,\n title: asset.fields.title,\n };\n });\n}\n","import { InjectionToken } from '@angular/core';\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import { PictureSource } from '@ethlete/components';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulRestAsset | ContentfulGqlAsset): PictureSource => {\n if (isContentfulGqlAsset(data)) {\n if (!data.contentType || !data.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.contentType,\n srcset: data.url,\n };\n }\n\n if (!data.fields.file.contentType || !data.fields.file.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.fields.file.contentType,\n srcset: data.fields.file.url,\n };\n};\n\n/**\n * Parses source set sizes into an object containing with and height. Eg.\n * - `\"400\"` - 400px width\n * - `\"400x300\"` - 400px width and 300px height\n * - `\"400w\"` - 400px width\n * - `\"400h\"` - 400px height\n * - `\"400wx300h\"` - 400px width and 300px height\n **/\nexport const parseContentfulImageSize = (size: string): { width: number | null; height: number | null } => {\n let width: string | null | undefined = null;\n let height: string | null | undefined = null;\n\n if (size.includes('x')) {\n const [w, h] = size.split('x');\n\n width = w;\n height = h;\n } else if (size.includes('h')) {\n height = size;\n } else {\n width = size;\n }\n\n return {\n width: width ? parseInt(width, 10) : null,\n height: height ? parseInt(height, 10) : null,\n };\n};\n\nconst SOURCE_TYPES = ['image/avif', 'image/webp', 'image/png', 'image/jpg'];\n\nexport const generateContentfulImageSources = (\n data: ContentfulRestAsset | ContentfulGqlAsset,\n srcsetSizes: string[],\n backgroundColor: string | null,\n quality: number | null,\n focusArea: ContentfulImageFocusArea | null,\n resizeBehavior: ContentfulImageResizeBehavior | null,\n): PictureSource[] => {\n const assetData = data;\n\n if (!assetData) {\n return [];\n }\n\n const sources: PictureSource[] = [];\n\n for (const type of SOURCE_TYPES) {\n const baseUrl = isContentfulGqlAsset(assetData) ? assetData.url : assetData.fields.file.url;\n const sourceSets: string[] = [];\n const queryParams: string[] = [];\n\n // Set the format (e.g. 'fm=webp')\n queryParams.push(`fm=${type.split('/')[1]}`);\n\n if (backgroundColor) {\n queryParams.push(`bg=rgb:${backgroundColor}`);\n }\n\n if (quality !== null) {\n queryParams.push(`q=${quality}`);\n }\n\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\n }\n if (srcsetSizes?.length) {\n const urlWithParams = `${baseUrl}?${queryParams.join('&')}`;\n\n for (const size of srcsetSizes) {\n const { width, height } = parseContentfulImageSize(size);\n\n if (width && height) {\n sourceSets.push(`${urlWithParams}&w=${width}&h=${height} ${width}w`);\n } else if (width) {\n sourceSets.push(`${urlWithParams}&w=${width} ${width}w`);\n } else if (height) {\n sourceSets.push(`${urlWithParams}&h=${height} ${height}h`);\n }\n }\n }\n\n sources.push({\n type,\n srcset: sourceSets.length ? sourceSets.join(', ') : `${baseUrl}?${queryParams.join('&')}`,\n });\n }\n\n return sources;\n};\n","import {\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/components';\nimport { CONTENTFUL_CONFIG } from '../../constants';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\nimport {\n generateContentfulImageSources,\n generateDefaultContentfulImageSource,\n} from './contentful-image.component.utils';\n\n@Component({\n selector: 'et-contentful-image',\n template: `\n <et-picture\n [priority]=\"priority()\"\n [defaultSrc]=\"defaultSrcValue()\"\n [alt]=\"normalizedAsset().alt ?? ''\"\n [figcaption]=\"normalizedAsset().figcaption ?? null\"\n [width]=\"normalizedAsset().width ?? null\"\n [height]=\"normalizedAsset().height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"sourcesValue()\"\n />\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent {\n private contentfulConfig = inject(CONTENTFUL_CONFIG);\n\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n backgroundColor = input<string | null>(null);\n srcsetSizes = input<string[]>(this.contentfulConfig.imageOptions.srcsetSizes);\n\n quality = input(null, { transform: numberAttribute });\n focusArea = input<ContentfulImageFocusArea | null>(null);\n resizeBehavior = input<ContentfulImageResizeBehavior | null>(null);\n priority = input(false, { transform: booleanAttribute });\n sizes = input<string | null, string[] | string | null>(\n normalizePictureSizes(this.contentfulConfig.imageOptions.sizes),\n {\n transform: (v) => normalizePictureSizes(v),\n },\n );\n\n protected normalizedAsset = computed(() => {\n const asset = this.asset();\n\n if (isContentfulGqlAsset(asset)) {\n return {\n alt: asset.title || null,\n figcaption: asset.description || null,\n width: asset.width,\n height: asset.height,\n };\n } else {\n return {\n alt: asset?.fields?.title || null,\n figcaption: asset?.fields?.description || null,\n width: asset?.fields?.file?.details?.image?.width ?? null,\n height: asset?.fields?.file?.details?.image?.height ?? null,\n };\n }\n });\n\n protected sourcesValue = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n\n if (!asset) {\n return [];\n }\n\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n\n protected defaultSrcValue = computed(() => {\n const asset = this.asset();\n\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n @if (data(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.url }}\" type=\"{{ data.contentType }}\" />\n </video>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulVideoComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n videoClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n };\n }\n\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n };\n });\n}\n","import { inject } from '@angular/core';\nimport { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulLinkComponent } from '../components/link';\nimport { ContentfulVideoComponent } from '../components/video';\nimport { CONTENTFUL_CONFIG } from '../constants/contentful.constants';\nimport { ContentfulConfig } from '../types';\n\n/**\n * The config used when no `provideContentfulConfig()` is in scope. It declares no\n * `components`, so embedded assets are skipped and hyperlinks render as plain anchors\n * until a config is provided.\n */\nconst CONTENTFUL_FALLBACK_CONFIG: ContentfulConfig = {\n internalHosts: [],\n components: {},\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: [],\n backgroundColor: null,\n },\n};\n\nexport const createContentfulConfig = (\n config: Partial<ContentfulConfig> | null | undefined = {},\n): ContentfulConfig => ({\n // This default config must be inline and not saved inside a const for some weird webpack reason\n ...{\n internalHosts: [],\n components: {\n audio: ContentfulAudioComponent,\n file: ContentfulFileComponent,\n image: ContentfulImageComponent,\n video: ContentfulVideoComponent,\n link: ContentfulLinkComponent,\n },\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: [],\n backgroundColor: null,\n },\n },\n ...(config || {}),\n});\n\n/**\n * Reads the contentful config from the current injector. Falls back to a config without\n * any `components` when none was provided via `provideContentfulConfig()`.\n */\nexport const injectContentfulConfig = (): ContentfulConfig =>\n inject(CONTENTFUL_CONFIG, { optional: true }) ?? CONTENTFUL_FALLBACK_CONFIG;\n","import { DOCUMENT } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { injectContentfulConfig } from '../../utils/contentful-config';\n\nconst getPrimaryDomain = (host: string) => {\n const parts = host.split('.');\n return parts.length > 2 ? parts.slice(-2).join('.') : host;\n};\n\n@Component({\n selector: 'et-contentful-link',\n template: `\n @if (isExternal()) {\n <a\n [class]=\"linkClass()\"\n [href]=\"href()\"\n [target]=\"openInNewTab() ? '_blank' : null\"\n [rel]=\"openInNewTab() ? 'noopener noreferrer' : null\"\n >{{ text() }}</a\n >\n } @else {\n <a [class]=\"linkClass()\" [routerLink]=\"internalPath()\">{{ text() }}</a>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [RouterLink],\n host: {\n style: 'display: contents',\n },\n})\nexport class ContentfulLinkComponent {\n private document = inject(DOCUMENT);\n private readonly config = injectContentfulConfig();\n\n href = input.required<string>();\n text = input.required<string>();\n textClass = input('');\n\n isExternal = computed(() => {\n const href = this.href();\n const isAbsolute = href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//');\n\n if (!isAbsolute) return false;\n\n try {\n const parsed = new URL(href.startsWith('//') ? `https:${href}` : href);\n const internalHosts = [this.document.location.host, ...this.config.internalHosts];\n return !internalHosts.includes(parsed.host);\n } catch {\n return true;\n }\n });\n\n openInNewTab = computed(() => {\n if (!this.isExternal()) return false;\n\n const href = this.href();\n\n try {\n const parsed = new URL(href.startsWith('//') ? `https:${href}` : href);\n const internalPrimaryDomains = [\n getPrimaryDomain(this.document.location.host),\n ...this.config.internalHosts.map(getPrimaryDomain),\n ];\n return !internalPrimaryDomains.includes(getPrimaryDomain(parsed.host));\n } catch {\n return true;\n }\n });\n\n internalPath = computed(() => {\n const href = this.href();\n\n if (!href.startsWith('http://') && !href.startsWith('https://') && !href.startsWith('//')) {\n return href;\n }\n\n try {\n const url = new URL(href.startsWith('//') ? `https:${href}` : href);\n return url.pathname + url.search + url.hash;\n } catch {\n return href;\n }\n });\n\n linkClass = computed(() => {\n const base = 'et-contentful-rich-text-default-element et-contentful-rich-text-default-a';\n const extra = this.textClass();\n\n return extra ? `${base} ${extra}` : base;\n });\n}\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\n/**\n * The `BLOCKS` node type strings of `@contentful/rich-text-types`, as a plain literal map.\n * Keep the values in sync with the enum - they are part of the Contentful Delivery API.\n */\nexport const CF_BLOCKS = {\n DOCUMENT: 'document',\n PARAGRAPH: 'paragraph',\n HEADING_1: 'heading-1',\n HEADING_2: 'heading-2',\n HEADING_3: 'heading-3',\n HEADING_4: 'heading-4',\n HEADING_5: 'heading-5',\n HEADING_6: 'heading-6',\n OL_LIST: 'ordered-list',\n UL_LIST: 'unordered-list',\n LIST_ITEM: 'list-item',\n HR: 'hr',\n QUOTE: 'blockquote',\n EMBEDDED_ENTRY: 'embedded-entry-block',\n EMBEDDED_ASSET: 'embedded-asset-block',\n EMBEDDED_RESOURCE: 'embedded-resource-block',\n TABLE: 'table',\n TABLE_ROW: 'table-row',\n TABLE_CELL: 'table-cell',\n TABLE_HEADER_CELL: 'table-header-cell',\n} as unknown as typeof BLOCKS;\n\n/**\n * The `INLINES` node type strings of `@contentful/rich-text-types`, as a plain literal map.\n * Keep the values in sync with the enum - they are part of the Contentful Delivery API.\n */\nexport const CF_INLINES = {\n ASSET_HYPERLINK: 'asset-hyperlink',\n EMBEDDED_ENTRY: 'embedded-entry-inline',\n EMBEDDED_RESOURCE: 'embedded-resource-inline',\n ENTRY_HYPERLINK: 'entry-hyperlink',\n HYPERLINK: 'hyperlink',\n RESOURCE_HYPERLINK: 'resource-hyperlink',\n} as unknown as typeof INLINES;\n","import { RuntimeError } from '@ethlete/core';\n\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined:\n 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type:\n 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type:\n 'The parent node neither a html element nor a custom component. This structure is not supported.',\n} as const;\n\nconst RICH_TEXT_RENDERER_ERROR_CODES: Record<keyof typeof RICH_TEXT_RENDERER_ERRORS, number> = {\n rich_text_undefined: 0,\n rich_text_wrong_type: 1,\n asset_id_not_found: 2,\n entry_id_not_found: 3,\n asset_not_found: 4,\n entry_not_found: 5,\n custom_component_not_found: 6,\n text_parent_not_found: 7,\n text_parent_wrong_type: 8,\n};\n\nexport const richTextRendererError = (code: keyof typeof RICH_TEXT_RENDERER_ERRORS, data?: unknown) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, data);\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nimport { RichTextResponse } from '../../types';\nimport { CF_BLOCKS, CF_INLINES } from './rich-text-node-types';\n\nexport const isRichTextRootNode = (node: unknown): node is RichTextResponse => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\n};\n\nexport const translateContentfulNodeTypeToHtmlTag = (nodeType: 'text' | BLOCKS | INLINES) => {\n switch (nodeType) {\n case CF_BLOCKS.HEADING_1:\n return 'h1';\n case CF_BLOCKS.HEADING_2:\n return 'h2';\n case CF_BLOCKS.HEADING_3:\n return 'h3';\n case CF_BLOCKS.HEADING_4:\n return 'h4';\n case CF_BLOCKS.HEADING_5:\n return 'h5';\n case CF_BLOCKS.HEADING_6:\n return 'h6';\n case CF_BLOCKS.PARAGRAPH:\n return 'p';\n case CF_BLOCKS.UL_LIST:\n return 'ul';\n case CF_BLOCKS.OL_LIST:\n return 'ol';\n case CF_BLOCKS.LIST_ITEM:\n return 'li';\n case CF_BLOCKS.HR:\n return 'hr';\n case CF_BLOCKS.QUOTE:\n return 'blockquote';\n case CF_BLOCKS.TABLE:\n return 'table';\n case CF_BLOCKS.TABLE_ROW:\n return 'tr';\n case CF_BLOCKS.TABLE_CELL:\n return 'td';\n case CF_BLOCKS.TABLE_HEADER_CELL:\n return 'th';\n case CF_BLOCKS.EMBEDDED_ASSET:\n return 'div';\n\n case CF_INLINES.ENTRY_HYPERLINK:\n return 'a';\n case CF_INLINES.ASSET_HYPERLINK:\n return 'a';\n\n case 'text':\n return 'span';\n\n // Will be ignored by the renderer\n case 'document':\n return 'div';\n\n case CF_BLOCKS.EMBEDDED_ENTRY:\n return 'div';\n case CF_INLINES.EMBEDDED_ENTRY:\n return 'div';\n\n default:\n return 'div';\n }\n};\n","import {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Type,\n ViewContainerRef,\n ViewEncapsulation,\n WritableSignal,\n computed,\n effect,\n inject,\n input,\n inputBinding,\n isDevMode,\n linkedSignal,\n reflectComponentType,\n signal,\n untracked,\n} from '@angular/core';\nimport { Block, Inline, Mark, Text } from '@contentful/rich-text-types';\nimport { getObjectProperty, injectRenderer, isObject } from '@ethlete/core';\nimport {\n ContentfulCollection,\n ContentfulEntry,\n ContentfulEntryLinkItem,\n ContentfulRestAsset,\n RichTextResponse,\n} from '../../types';\nimport { injectContentfulConfig } from '../../utils/contentful-config';\nimport { CF_BLOCKS, CF_INLINES } from './rich-text-node-types';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\n\ntype HtmlOpenRenderCommand = {\n kind: 'htmlOpen';\n nestingLevel: number;\n domPosition: number;\n index: number;\n attributes: Record<string, string>;\n tagName: keyof HTMLElementTagNameMap;\n id: string;\n};\n\ntype HtmlCloseRenderCommand = {\n kind: 'htmlClose';\n nestingLevel: number;\n domPosition: number;\n index: number;\n tagName: keyof HTMLElementTagNameMap;\n id: string;\n};\n\ntype TextRenderCommand = {\n kind: 'text';\n nestingLevel: number;\n domPosition: number;\n index: number;\n attributes: Record<string, string>;\n markTags: MarkTagName[];\n text: string;\n id: string;\n};\n\ntype ComponentRenderCommand = {\n kind: 'component';\n nestingLevel: number;\n domPosition: number;\n index: number;\n component: Type<unknown>;\n inputs: Record<string, unknown>;\n id: string;\n};\n\ntype RenderCommand = HtmlOpenRenderCommand | HtmlCloseRenderCommand | TextRenderCommand | ComponentRenderCommand;\n\ntype RenderInstruction = {\n type: 'create' | 'update' | 'move' | 'delete';\n command: RenderCommand;\n};\n\ntype MarkTagName = 'strong' | 'em' | 'u' | 'code' | 's' | 'sub' | 'sup';\n\nconst MARK_TAG_MAP: Record<string, MarkTagName> = {\n bold: 'strong',\n italic: 'em',\n underline: 'u',\n code: 'code',\n strikethrough: 's',\n subscript: 'sub',\n superscript: 'sup',\n};\n\n/**\n * Translates contentful text marks into the semantic html elements the marked text is\n * wrapped in, outermost first. Unknown marks are skipped (with a dev-mode warning).\n */\nexport const marksToTags = (marks: Mark[]) => {\n const tags: MarkTagName[] = [];\n\n for (const mark of marks) {\n const tag = MARK_TAG_MAP[mark.type];\n\n if (!tag) {\n if (isDevMode()) {\n console.warn(`No element found for mark type \"${mark.type}\"! The mark is ignored.`, mark);\n }\n\n continue;\n }\n\n tags.push(tag);\n }\n\n return tags;\n};\n\n/**\n * The classes marked text inside a hyperlink is rendered with, since the link component\n * receives its text as a plain string.\n */\nexport const marksToClass = (marks: Mark[]) =>\n marks.map((mark) => `et-contentful-rich-text-mark-${mark.type}`).join(' ');\n\nconst LINK_COMPONENT_TYPE = '$$$_et-link';\n\ntype ExecutedCommandCacheItemBase = {\n element: HTMLElement;\n};\n\ntype ExecutedComponentCommandCacheItem = {\n command: ComponentRenderCommand;\n componentRef: ComponentRef<unknown>;\n inputs: WritableSignal<Record<string, unknown>>;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedHtmlCommandCacheItem = {\n command: HtmlOpenRenderCommand | HtmlCloseRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedTextCommandCacheItem = {\n command: TextRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedCommandCacheItem =\n ExecutedComponentCommandCacheItem | ExecutedHtmlCommandCacheItem | ExecutedTextCommandCacheItem;\n\nconst isExecutedComponentCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedComponentCommandCacheItem => {\n return cache.command.kind === 'component';\n};\n\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n\nexport type ContentfulIncludeMap = {\n /**\n * Select an entry by its ID and content type ID.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntry: <T extends { [key: string]: any }>(id: string, contentTypeId: string) => ContentfulEntry<T> | null;\n\n /**\n * Select multiple entries by their IDs and content type ID.\n * If an entry is not found, it will be omitted from the result.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntries: <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => ContentfulEntry<T>[];\n\n /**\n * Select an asset by its ID.\n */\n getAsset: (id: string) => ContentfulRestAsset | null;\n\n /**\n * Select multiple assets by their IDs. If an asset is not found, it will be omitted from the result.\n */\n getAssets: (ids: string[]) => ContentfulRestAsset[];\n};\n\nexport type CreateContentfulIncludeMapConfig = {\n /** The entries that should be present inside the map */\n entries: ContentfulEntry[];\n\n /** The assets that should be present inside the map */\n assets: ContentfulRestAsset[];\n};\n\n/**\n * Create a contentful include map using the provided entries and assets.\n */\nexport const createContentfulIncludeMap = (config: CreateContentfulIncludeMapConfig): ContentfulIncludeMap => {\n const { entries, assets } = config;\n\n const assetMap = new Map(assets.map((asset) => [asset.sys.id, asset]));\n const entryMap = new Map(entries.map((entry) => [entry.sys.id, entry]));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = <T extends { [key: string]: any }>(id: string, contentTypeId: string) => {\n const entry = entryMap.get(id);\n\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n\n return null;\n }\n\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry as ContentfulEntry<T>;\n }\n\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n\n return null;\n }\n\n return entry as ContentfulEntry<T>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry<T>(id, contentTypeId))\n .filter((entry): entry is ContentfulEntry<T> => entry !== null);\n\n return entries;\n };\n\n const getAsset = (id: string) => {\n return assetMap.get(id) ?? null;\n };\n\n const getAssets = (ids: string[]) => {\n return ids.map((id) => getAsset(id)).filter((asset): asset is ContentfulRestAsset => asset !== null);\n };\n\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n};\n\n@Component({\n selector: 'et-contentful-rich-text-renderer',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-contentful-rich-text-renderer',\n },\n})\nexport class ContentfulRichTextRendererComponent {\n private viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = injectRenderer();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly config = injectContentfulConfig();\n\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n content = input.required<ContentfulCollection | null | undefined>();\n\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @example \"items[0].fields.html\"\n */\n richTextPath = input.required<string>();\n\n /**\n * A cache for all executed commands that are not deleted.\n * This is used to keep track of all rendered elements and components.\n * The key is the render command ID.\n */\n private readonly executedCommandsCache = new Map<string, ExecutedCommandCacheItem>();\n\n /**\n * A map of all includes in the contentful response.\n * This is useful for looking up assets and entries that are referenced in the rich text without having to use loops.\n */\n contentIncludesMap = computed<ContentfulIncludeMap>(() => {\n const content = this.content();\n const assets = content?.includes.Asset;\n const entries = content?.includes.Entry;\n\n return createContentfulIncludeMap({ assets: assets ?? [], entries: entries ?? [] });\n });\n\n /**\n * The rich text data that should be rendered.\n */\n richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n\n if (!content) {\n return null;\n }\n\n const richText = getObjectProperty(content as unknown as Record<string, unknown>, richTextPath);\n\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', { content, richTextPath });\n }\n\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', { content, richTextPath });\n }\n\n return richText as RichTextResponse;\n });\n\n renderCommands = computed(() => {\n const richTextData = this.richTextData();\n\n if (!richTextData) {\n return [];\n }\n\n return this.createRenderCommands(richTextData);\n });\n\n private renderCommandHistory = linkedSignal<RenderCommand[], [RenderCommand[], RenderCommand[]]>({\n source: this.renderCommands,\n computation: (commands, previous) => [previous?.source ?? [], commands],\n });\n\n private previousRenderCommandMap = computed(() => {\n const [prevCommands] = this.renderCommandHistory();\n\n const map = new Map<string, RenderCommand>();\n\n for (const command of prevCommands) {\n map.set(command.id, command);\n }\n\n return map;\n });\n\n private renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = this.previousRenderCommandMap();\n\n const instructions: RenderInstruction[] = [];\n\n // Decide, in document order, which commands survive the change with their DOM intact.\n // A plain element or text node survives when the same id renders the same output at the same\n // spot inside a surviving parent. Ancestors are decided first because parents precede their\n // children in command order. Components survive on id alone — their DOM can be reattached.\n const preserved = new Set<string>();\n const needsReattach = new Set<string>();\n\n const parentIdOf = (command: RenderCommand): string | null => {\n if (command.nestingLevel === 0) {\n return null;\n }\n\n for (let i = command.index - 1; i >= 0; i--) {\n const cmd = commands[i];\n\n if (cmd && cmd.nestingLevel === command.nestingLevel - 1 && cmd.kind === 'htmlOpen') {\n return cmd.id;\n }\n }\n\n return null;\n };\n\n const markTagsEqual = (a: MarkTagName[], b: MarkTagName[]) =>\n a.length === b.length && a.every((tag, index) => tag === b[index]);\n\n const attributesEqual = (a: Record<string, string>, b: Record<string, string>) => {\n const aKeys = Object.keys(a);\n\n return aKeys.length === Object.keys(b).length && aKeys.every((key) => a[key] === b[key]);\n };\n\n for (const command of commands) {\n if (command.kind === 'htmlClose') {\n continue;\n }\n\n const previous = previousRenderCommandMap.get(command.id);\n\n if (!previous || previous.kind !== command.kind) {\n continue;\n }\n\n // The same key must render the same component class — a changed class means a fresh instance.\n if (previous.kind === 'component' && command.kind === 'component' && previous.component !== command.component) {\n continue;\n }\n\n const parentId = parentIdOf(command);\n const parentPreserved = parentId === null || preserved.has(parentId);\n\n if (command.kind === 'component') {\n preserved.add(command.id);\n\n const samePlace =\n parentPreserved &&\n previous.nestingLevel === command.nestingLevel &&\n previous.domPosition === command.domPosition;\n\n if (!samePlace) {\n needsReattach.add(command.id);\n }\n\n continue;\n }\n\n const sameOutput =\n previous.kind === command.kind &&\n (previous.kind !== 'htmlOpen' || previous.tagName === (command as HtmlOpenRenderCommand).tagName) &&\n (previous.kind !== 'text' ||\n (previous.text === (command as TextRenderCommand).text &&\n markTagsEqual(previous.markTags, (command as TextRenderCommand).markTags)));\n\n if (\n parentPreserved &&\n sameOutput &&\n previous.nestingLevel === command.nestingLevel &&\n previous.domPosition === command.domPosition &&\n attributesEqual(previous.attributes, command.attributes)\n ) {\n preserved.add(command.id);\n }\n }\n\n // Everything that did not survive is removed first, so the ordered pass below can rebuild\n // into a clean tree. Close commands never render DOM and are skipped throughout.\n for (const [id, command] of previousRenderCommandMap) {\n if (command.kind !== 'htmlClose' && !preserved.has(id)) {\n instructions.push({ type: 'delete', command });\n }\n }\n\n // One pass in document order: parents are created before a child component is reattached.\n // Surviving plain elements still get an update so the cache tracks their fresh command data.\n for (const command of commands) {\n if (command.kind === 'htmlClose') {\n continue;\n }\n\n if (!preserved.has(command.id)) {\n instructions.push({ type: 'create', command });\n } else if (command.kind === 'component' && needsReattach.has(command.id)) {\n instructions.push({ type: 'move', command });\n } else {\n instructions.push({ type: 'update', command });\n }\n }\n\n return instructions;\n });\n\n constructor() {\n effect(() => {\n const instructions = this.renderInstructions();\n\n untracked(() => this.execInstructions(instructions));\n });\n }\n\n private createRenderCommands(richTextData: RichTextResponse) {\n /** List of all render commands */\n const rootCommands: RenderCommand[] = [];\n\n /** Counter for generating unique html element IDs. */\n let elementOpenId = 0;\n\n /** Counter for generating unique html element IDs. */\n let elementCloseId = 0;\n\n /** Counter for generating unique component IDs. */\n const componentIdMap = new Map<string, number>();\n\n /** The nesting level of the current node. */\n let nestingLevel = 0;\n\n /** The position (index) of the current node inside the parent node. */\n let domPosition = 0;\n\n let textId = 0;\n\n let commandIndex = 0;\n\n const traverse = (node: Block | Inline | Text) => {\n switch (node.nodeType) {\n case 'text': {\n const text = node.value;\n\n if (!text) break;\n\n const attributes: Record<string, string> = {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n };\n\n rootCommands.push({\n kind: 'text',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes,\n markTags: node.marks.length ? marksToTags(node.marks) : [],\n text,\n id: 't' + textId++,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_BLOCKS.EMBEDDED_ASSET: {\n const assetId = node.data['target']?.sys?.id;\n\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', { node });\n }\n\n const asset = this.contentIncludesMap().getAsset(assetId);\n\n if (!asset) {\n throw richTextRendererError('asset_not_found', { assetId, node });\n }\n\n const contentType = asset.fields.file.contentType;\n const assetComponents = this.config.components;\n\n // Every property inside the asset will be null if no file was provided for a translation.\n // In this case, we can assume that the asset is missing due to user error.\n const isMissing = !contentType && !asset.fields.file.url;\n\n if (isMissing) {\n if (isDevMode()) {\n console.warn(\n 'Asset is missing file data! Asset will be skipped. Did you forget to upload a file for the current translation in Contentful?',\n { asset },\n );\n }\n\n break;\n }\n\n const isImage = contentType?.startsWith('image/');\n const isVideo = contentType?.startsWith('video/');\n const isAudio = contentType?.startsWith('audio/');\n\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n\n if (!component) {\n if (isDevMode()) {\n console.warn(\n 'No component registered for this embedded asset! The asset will be skipped. Provide one via provideContentfulConfig({ components: … }).',\n { asset },\n );\n }\n\n break;\n }\n\n const occurrenceKey = 'asset:' + assetId;\n const occurrence = (componentIdMap.get(occurrenceKey) ?? -1) + 1;\n componentIdMap.set(occurrenceKey, occurrence);\n const id = occurrence === 0 ? occurrenceKey : `${occurrenceKey}:${occurrence}`;\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component,\n inputs: { asset },\n id,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_INLINES.HYPERLINK: {\n const uri = (node.data['uri'] as string) ?? '';\n\n // Collect all text and marks from children (hyperlink children are text nodes)\n let linkText = '';\n const linkMarks: Mark[] = [];\n\n for (const child of node.content) {\n if (child.nodeType === 'text') {\n linkText += child.value;\n linkMarks.push(...child.marks);\n }\n }\n\n const linkComponent = this.config.components.link;\n\n if (!linkComponent) {\n // Without a link component the hyperlink still renders - as a plain anchor.\n rootCommands.push({\n kind: 'htmlOpen',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes: {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-a',\n href: uri,\n },\n tagName: 'a',\n id: 'e-o' + elementOpenId++,\n });\n\n const anchorDomPosition = domPosition;\n\n nestingLevel++;\n domPosition = 0;\n\n rootCommands.push({\n kind: 'text',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes: {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n },\n markTags: marksToTags(linkMarks),\n text: linkText,\n id: 't' + textId++,\n });\n\n nestingLevel--;\n domPosition = anchorDomPosition;\n\n rootCommands.push({\n kind: 'htmlClose',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n tagName: 'a',\n id: 'e-c' + elementCloseId++,\n });\n\n domPosition++;\n\n break;\n }\n\n const textClass = linkMarks.length ? marksToClass(linkMarks) : '';\n\n let linkComponentId = componentIdMap.get(LINK_COMPONENT_TYPE) ?? -1;\n const linkId = LINK_COMPONENT_TYPE + ++linkComponentId;\n componentIdMap.set(LINK_COMPONENT_TYPE, linkComponentId);\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component: linkComponent,\n inputs: { href: uri, text: linkText, textClass },\n id: linkId,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_BLOCKS.EMBEDDED_ENTRY:\n case CF_INLINES.EMBEDDED_ENTRY: {\n const entryId = node.data['target']?.sys?.id;\n\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', { node });\n }\n\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n\n if (!entry) {\n throw richTextRendererError('entry_not_found', { entryId, node });\n }\n\n const componentType = entry.sys.contentType.sys.id;\n\n const component = this.config.customComponents[componentType];\n\n if (!component) {\n throw richTextRendererError('custom_component_not_found', {\n componentType,\n customComponents: this.config.customComponents,\n entry,\n });\n }\n\n const occurrenceKey = 'entry:' + entryId;\n const occurrence = (componentIdMap.get(occurrenceKey) ?? -1) + 1;\n componentIdMap.set(occurrenceKey, occurrence);\n const id = occurrence === 0 ? occurrenceKey : `${occurrenceKey}:${occurrence}`;\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component,\n inputs: {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n },\n id,\n });\n\n domPosition++;\n\n break;\n }\n\n default: {\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes: Record<string, string> = {\n class: `et-contentful-rich-text-default-element et-contentful-rich-text-default-${tag}`,\n };\n\n rootCommands.push({\n kind: 'htmlOpen',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes,\n tagName: tag,\n id: 'e-o' + elementOpenId++,\n });\n\n const domPositionAtThisLevel = domPosition;\n // Normal html elements can have children\n for (const child of node.content) {\n domPosition = 0;\n nestingLevel++;\n traverse(child);\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n }\n\n const lastCommand = rootCommands[rootCommands.length - 1];\n\n if (lastCommand?.kind === 'htmlOpen' && lastCommand.tagName !== 'td' && lastCommand.tagName !== 'hr') {\n // If the last command is an open command, we can remove it since it's empty\n rootCommands.pop();\n elementOpenId--;\n commandIndex--;\n } else {\n rootCommands.push({\n kind: 'htmlClose',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n tagName: tag,\n id: 'e-c' + elementCloseId++,\n });\n\n domPosition++;\n }\n\n break;\n }\n }\n };\n\n for (const node of richTextData.content) {\n traverse(node);\n }\n\n return rootCommands;\n }\n\n private execInstructions(instructions: RenderInstruction[]) {\n for (const instruction of instructions) {\n switch (instruction.type) {\n case 'create':\n this.runCreateInstruction(instruction.command);\n break;\n case 'update':\n this.runUpdateInstruction(instruction.command);\n break;\n case 'move':\n this.runMoveInstruction(instruction.command);\n break;\n case 'delete':\n this.runDeleteInstruction(instruction.command);\n break;\n }\n }\n }\n\n private runCreateInstruction(command: RenderCommand) {\n const parentElement = this.findParent(command);\n const nextElement = this.findFollowingElement(command);\n\n if (command.kind === 'component') {\n const inputs = signal(command.inputs);\n\n // Components may declare any subset of the offered inputs — only bind the declared ones.\n const declaredInputs = reflectComponentType(command.component)?.inputs ?? [];\n const bindings = declaredInputs\n .filter((declared) => declared.propName in command.inputs)\n .map((declared) => inputBinding(declared.templateName, () => inputs()[declared.propName]));\n\n const componentRef = this.viewContainerRef.createComponent(command.component, { bindings });\n\n const rootNode = this.getComponentRootNode(componentRef);\n\n this.renderInsertOrAppend(rootNode, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n componentRef,\n inputs,\n element: rootNode,\n });\n } else if (command.kind === 'text') {\n const span = this.renderer.createElement('span');\n const textSplitInLineBreaks = command.text.split('\\n').filter((t) => t.trim().length > 0);\n\n for (const [key, value] of Object.entries(command.attributes)) {\n this.renderer.setAttribute(span, key, value);\n }\n\n if (command.text.startsWith('\\n')) {\n const brNode = this.renderer.createElement('br');\n this.renderer.appendChild(parentElement, brNode);\n }\n\n // Marks are rendered as nested semantic elements inside the span, outermost mark first.\n let textContainer = span;\n\n for (const tag of command.markTags) {\n const markElement = this.renderer.createElement(tag);\n\n this.renderer.appendChild(textContainer, markElement);\n textContainer = markElement;\n }\n\n for (const [textPartIndex, textPart] of textSplitInLineBreaks.entries()) {\n if (textPartIndex > 0) {\n const brNode = this.renderer.createElement('br');\n this.renderer.appendChild(textContainer, brNode);\n }\n\n const textNode = this.renderer.createText(textPart);\n\n this.renderer.appendChild(textContainer, textNode);\n }\n\n this.renderInsertOrAppend(span, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n element: span,\n });\n } else if (command.kind === 'htmlOpen') {\n const element = this.renderer.createElement(command.tagName);\n\n for (const [key, value] of Object.entries(command.attributes)) {\n this.renderer.setAttribute(element, key, value);\n }\n\n this.renderInsertOrAppend(element, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n element,\n });\n }\n }\n\n private runUpdateInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.inputs.set(command.inputs);\n }\n\n // `cached` and the fresh `command` share the same id and therefore the same union variant,\n // but TS can't correlate the two after the spread — assert the merged object as the union.\n this.executedCommandsCache.set(command.id, {\n ...cached,\n command,\n } as ExecutedCommandCacheItem);\n }\n\n private runMoveInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n\n if (oldParentElement) {\n this.renderer.removeChild(oldParentElement, rootNode);\n }\n\n const newParentElement = this.findParent(command);\n const nextElement = this.findFollowingElement(command);\n\n this.renderInsertOrAppend(rootNode, newParentElement, nextElement);\n\n cached.inputs.set(command.inputs);\n\n this.executedCommandsCache.set(command.id, {\n ...cached,\n command,\n } as ExecutedCommandCacheItem);\n }\n }\n\n private runDeleteInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n if (command.kind === 'htmlClose') {\n return;\n }\n\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.componentRef.destroy();\n } else if (command.kind === 'text' || command.kind === 'htmlOpen') {\n if (cached.element.parentElement) {\n this.renderer.removeChild(cached.element.parentElement, cached.element);\n }\n }\n\n this.executedCommandsCache.delete(command.id);\n }\n\n private getComponentRootNode(componentRef: ComponentRef<unknown>): HTMLElement {\n return (componentRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n }\n\n private findParent(command: RenderCommand) {\n const hostElement = this.elementRef.nativeElement;\n let parentElement: HTMLElement | undefined;\n\n if (command.nestingLevel === 0) {\n parentElement = hostElement;\n } else {\n // Reverse search all render commands beginning from the current one.\n // The parent is the closest preceding html open command one nesting level up.\n const allCommands = this.renderCommands();\n\n let parentCommand: HtmlOpenRenderCommand | null = null;\n\n for (let i = command.index - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n\n if (!cmd) {\n throw new Error('Command not found!');\n }\n\n if (cmd.nestingLevel === command.nestingLevel - 1 && cmd.kind === 'htmlOpen') {\n parentCommand = cmd;\n break;\n }\n }\n\n if (!parentCommand) {\n throw new Error('Parent command not found!');\n }\n\n parentElement = this.executedCommandsCache.get(parentCommand.id)?.element;\n }\n\n if (!parentElement) {\n throw new Error('Parent element not found!');\n }\n\n return parentElement;\n }\n\n private findFollowingElement(command: RenderCommand) {\n // Find the closest already rendered element at the same nesting level with a greater\n // domPosition, to insert before. Without one the element is appended to the parent.\n let nextElement: HTMLElement | undefined;\n let nextDomPosition = Infinity;\n\n for (const cached of this.executedCommandsCache.values()) {\n if (\n cached.command.domPosition > command.domPosition &&\n cached.command.domPosition < nextDomPosition &&\n cached.command.nestingLevel === command.nestingLevel &&\n cached.command.id !== command.id\n ) {\n nextElement = cached.element;\n nextDomPosition = cached.command.domPosition;\n }\n }\n\n return nextElement;\n }\n\n private renderInsertOrAppend(\n nodeToRender: HTMLElement,\n parentElement: HTMLElement,\n nextElement: HTMLElement | undefined,\n ) {\n if (nextElement) {\n this.renderer.insertBefore(parentElement, nodeToRender, nextElement);\n } else {\n this.renderer.appendChild(parentElement, nodeToRender);\n }\n }\n}\n","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\n\nexport const ContentfulImports = [\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n ContentfulRichTextRendererComponent,\n] as const;\n","import { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulConfig, ContentfulEntry } from '../types';\nimport { createContentfulConfig } from './contentful-config';\n\nexport const provideContentfulConfig = (contentfulConfig: Partial<ContentfulConfig> | null | undefined = {}) => {\n return { provide: CONTENTFUL_CONFIG, useValue: createContentfulConfig(contentfulConfig) };\n};\n\nexport const isContentfulEntryType = <T extends ContentfulEntry>(entry: ContentfulEntry, type: string): entry is T =>\n entry.sys.contentType.sys.id === type;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/components/link/contentful-link.component.ts","../../../../libs/contentful/src/lib/components/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/constants/contentful.constants.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.utils.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-node-types.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.errors.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.util.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.component.ts","../../../../libs/contentful/src/lib/contentful.imports.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { GQL } from '@ethlete/query';\n\nexport const GQL_FRAGMENT_CONTENTFUL_ASSET = `\n fragment ContentfulAssetData on Asset {\n sys {\n id\n }\n url\n title\n width\n height\n description\n contentType\n size\n }\n` as GQL;\n\nexport type ContentfulGqlAsset = {\n sys: {\n id: string;\n };\n title: string | null;\n contentType: string | null;\n url: string | null;\n description: string | null;\n width: number | null;\n height: number | null;\n size: number | null;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isContentfulGqlAsset = (asset: any): asset is ContentfulGqlAsset => {\n return Boolean(asset && typeof asset === 'object' && asset.sys?.id && !('fields' in asset));\n};\n\nexport type ContentfulGqlWhereFilter<TLinkedFrom extends Record<string, unknown> = Record<string, unknown>> = {\n /**\n * Filer by ids.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/sys-filters\n */\n sys?: {\n id?: string;\n id_not?: string;\n id_in?: string[];\n id_not_in?: string[];\n id_contains?: string;\n id_not_contains?: string;\n };\n /**\n * Filer by tags.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/contentfulmetadata-filters\n */\n contentfulMetadata?: {\n tags_exists?: boolean;\n tags?: {\n id_contains_some?: string[];\n id_contains_none?: string[];\n id_contains_all?: string[];\n };\n };\n /**\n * Retrieve a collection of entries linked to the specified entry or asset.\n * @see https://www.contentful.com/developers/docs/references/graphql/#links-to-a-specific-item\n */\n linkedFrom?: TLinkedFrom;\n};\n\nexport type ContentfulGqlOrder = `${string}_${'ASC' | 'DESC'}`;\n\nexport type ContentfulGqlCollectionFilterVariables<\n TCustomWhere extends Record<string, unknown> = Record<string, unknown>,\n TLinkedFrom extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /**\n * Zero-indexed offset in the collection from which items are fetched\n * @default 0\n */\n skip?: number;\n\n /**\n * Maximum number of items to fetch. Maximum is 1000.\n * @default 100\n */\n limit?: number;\n\n /**\n * Filter specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters\n */\n where?: TCustomWhere & ContentfulGqlWhereFilter<TLinkedFrom>;\n\n /**\n * Order specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-order\n */\n order?: ContentfulGqlOrder[];\n\n /**\n * When set to `true` the field will be resolved with non published content.\n * @default false\n */\n preview?: boolean;\n\n /**\n * Locale for the collection items. If not set the default locale is used.\n */\n locale?: string;\n};\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n @if (data(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" [src]=\"data.url\" controls></audio>\n </figure>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n host: {\n class: 'et-contentful-audio',\n },\n})\nexport class ContentfulAudioComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n audioClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n\n protected data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset) && asset.url) {\n return {\n url: asset.url,\n title: asset.title,\n };\n }\n\n if (!isContentfulGqlAsset(asset) && asset.fields.file.url) {\n return {\n url: asset.fields.file.url,\n title: asset.fields.title,\n };\n }\n\n return null;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n @if (data(); as data) {\n <a [href]=\"data.url\" [ngClass]=\"fileClass()\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ data.title }}\n @if (data.size !== null) {\n ({{ data.size }} Bytes)\n }\n </a>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n host: {\n class: 'et-contentful-file',\n },\n})\nexport class ContentfulFileComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n fileClass = input<NgClassType>(null);\n\n protected data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset) && asset.url) {\n return {\n url: asset.url,\n size: asset.size,\n title: asset.title,\n };\n }\n\n if (!isContentfulGqlAsset(asset) && asset.fields.file.url) {\n return {\n url: asset.fields.file.url,\n size: asset.fields.file.details.size,\n title: asset.fields.title,\n };\n }\n\n return null;\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport { injectContentfulConfig } from '../../utils/contentful-config';\n\nconst parseWebUrl = (href: string): URL | null => {\n if (!/^(?:https?:)?\\/\\//i.test(href)) {\n return null;\n }\n\n try {\n return new URL(href.startsWith('//') ? 'https:' + href : href);\n } catch {\n return null;\n }\n};\n\nconst normalizeHostname = (host: string) => {\n const value = host.trim().toLowerCase();\n\n try {\n return new URL(value.includes('://') ? value : 'https://' + value).hostname;\n } catch {\n return value.split(':')[0] ?? value;\n }\n};\n\nconst matchesHostname = (hostname: string, configuredHost: string) => {\n const normalizedHost = normalizeHostname(configuredHost);\n\n return hostname === normalizedHost || hostname.endsWith('.' + normalizedHost);\n};\n\n@Component({\n selector: 'et-contentful-link',\n template: `\n @if (usesRouterLink()) {\n <a [class]=\"linkClass()\" [routerLink]=\"internalUrlTree()\">{{ text() }}</a>\n } @else {\n <a\n [class]=\"linkClass()\"\n [href]=\"href()\"\n [target]=\"openInNewTab() ? '_blank' : null\"\n [rel]=\"openInNewTab() ? 'noopener noreferrer' : null\"\n >{{ text() }}</a\n >\n }\n `,\n styleUrl: './contentful-link.component.css',\n encapsulation: ViewEncapsulation.None,\n imports: [RouterLink],\n host: {\n class: 'et-contentful-link',\n },\n})\nexport class ContentfulLinkComponent {\n private document = inject(DOCUMENT);\n private router = inject(Router);\n private config = injectContentfulConfig();\n\n href = input.required<string>();\n text = input.required<string>();\n textClass = input('');\n\n protected usesRouterLink = computed(() => {\n const href = this.href();\n const absoluteUrl = parseWebUrl(href);\n\n if (absoluteUrl) {\n const internalHosts = [this.document.location.hostname, ...this.config.internalHosts];\n\n return internalHosts.some((host) => matchesHostname(absoluteUrl.hostname, host));\n }\n\n return !href.startsWith('#') && !/^[a-z][a-z\\d+.-]*:/i.test(href);\n });\n\n protected openInNewTab = computed(() => Boolean(parseWebUrl(this.href())) && !this.usesRouterLink());\n\n protected internalPath = computed(() => {\n const href = this.href();\n const url = parseWebUrl(href);\n\n if (!url) {\n return href;\n }\n\n return url.pathname + url.search + url.hash;\n });\n\n protected internalUrlTree = computed(() => this.router.parseUrl(this.internalPath()));\n\n protected linkClass = computed(() => {\n const base = 'et-contentful-rich-text-default-element et-contentful-rich-text-default-a';\n const extra = this.textClass();\n\n return extra ? `${base} ${extra}` : base;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n @if (data(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source [src]=\"data.url\" [type]=\"data.contentType\" />\n </video>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n host: {\n class: 'et-contentful-video',\n },\n})\nexport class ContentfulVideoComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n videoClass = input<NgClassType>(null);\n\n protected data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset) && asset.url) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n };\n }\n\n if (!isContentfulGqlAsset(asset) && asset.fields.file.url) {\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n };\n }\n\n return null;\n });\n}\n","import { InjectionToken } from '@angular/core';\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import { inject } from '@angular/core';\nimport { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulLinkComponent } from '../components/link';\nimport { ContentfulVideoComponent } from '../components/video';\nimport { CONTENTFUL_CONFIG } from '../constants/contentful.constants';\nimport { ContentfulConfig } from '../types';\n\n/**\n * The config used when no `provideContentfulConfig()` is in scope. It declares no\n * `components`, so embedded assets are skipped and hyperlinks render as plain anchors\n * until a config is provided.\n */\nconst CONTENTFUL_FALLBACK_CONFIG: ContentfulConfig = {\n internalHosts: [],\n components: {},\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: ['100vw'],\n backgroundColor: null,\n },\n};\n\nexport const createContentfulConfig = (config?: Partial<ContentfulConfig> | null): ContentfulConfig => ({\n ...{\n internalHosts: [],\n components: {\n audio: ContentfulAudioComponent,\n file: ContentfulFileComponent,\n image: ContentfulImageComponent,\n video: ContentfulVideoComponent,\n link: ContentfulLinkComponent,\n },\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: ['100vw'],\n backgroundColor: null,\n },\n },\n ...(config ?? {}),\n});\n\n/**\n * Reads the contentful config from the current injector. Falls back to a config without\n * any `components` when none was provided via `provideContentfulConfig()`.\n */\nexport const injectContentfulConfig = (): ContentfulConfig =>\n inject(CONTENTFUL_CONFIG, { optional: true }) ?? CONTENTFUL_FALLBACK_CONFIG;\n","import { PictureSource } from '@ethlete/components';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulRestAsset | ContentfulGqlAsset): PictureSource => {\n if (isContentfulGqlAsset(data)) {\n if (!data.contentType || !data.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.contentType,\n srcset: data.url,\n };\n }\n\n if (!data.fields.file.contentType || !data.fields.file.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.fields.file.contentType,\n srcset: data.fields.file.url,\n };\n};\n\n/**\n * Parses source set sizes into an object containing with and height. Eg.\n * - `\"400\"` - 400px width\n * - `\"400x300\"` - 400px width and 300px height\n * - `\"400w\"` - 400px width\n * - `\"400h\"` - 400px height\n * - `\"400wx300h\"` - 400px width and 300px height\n **/\nexport const parseContentfulImageSize = (size: string): { width: number | null; height: number | null } => {\n const widthAndHeight = /^(\\d+)w?x(\\d+)h?$/.exec(size);\n\n if (widthAndHeight) {\n return {\n width: Number(widthAndHeight[1]),\n height: Number(widthAndHeight[2]),\n };\n }\n\n const height = /^(\\d+)h$/.exec(size);\n\n if (height) {\n return { width: null, height: Number(height[1]) };\n }\n\n const width = /^(\\d+)w?$/.exec(size);\n\n return width ? { width: Number(width[1]), height: null } : { width: null, height: null };\n};\n\nconst SOURCE_TYPES = ['image/avif', 'image/webp'];\n\nexport const generateContentfulImageSources = (\n data: ContentfulRestAsset | ContentfulGqlAsset,\n srcsetSizes: string[],\n backgroundColor: string | null,\n quality: number | null,\n focusArea: ContentfulImageFocusArea | null,\n resizeBehavior: ContentfulImageResizeBehavior | null,\n): PictureSource[] => {\n const isGqlAsset = isContentfulGqlAsset(data);\n const baseUrl = isGqlAsset ? data.url : data.fields.file.url;\n\n if (!baseUrl) {\n return [];\n }\n\n const imageDimensions = isGqlAsset ? data : data.fields.file.details.image;\n const sources: PictureSource[] = [];\n\n for (const type of SOURCE_TYPES) {\n const sourceSets: string[] = [];\n const queryParams: string[] = [];\n\n queryParams.push(`fm=${type.split('/')[1]}`);\n\n if (backgroundColor) {\n queryParams.push(`bg=rgb:${backgroundColor}`);\n }\n\n if (quality !== null && Number.isFinite(quality)) {\n queryParams.push(`q=${quality}`);\n }\n\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\n }\n\n if (srcsetSizes?.length) {\n const urlWithParams = `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}${queryParams.join('&')}`;\n\n for (const size of srcsetSizes) {\n const { width, height } = parseContentfulImageSize(size);\n\n if (width && height) {\n sourceSets.push(`${urlWithParams}&w=${width}&h=${height} ${width}w`);\n } else if (width) {\n sourceSets.push(`${urlWithParams}&w=${width} ${width}w`);\n } else if (height && imageDimensions?.width && imageDimensions.height) {\n const derivedWidth = Math.round((height * imageDimensions.width) / imageDimensions.height);\n sourceSets.push(`${urlWithParams}&w=${derivedWidth}&h=${height} ${derivedWidth}w`);\n }\n }\n }\n\n sources.push({\n type,\n srcset: sourceSets.length\n ? sourceSets.join(', ')\n : `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}${queryParams.join('&')}`,\n });\n }\n\n return sources;\n};\n","import { Component, ViewEncapsulation, booleanAttribute, computed, input, numberAttribute } from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/components';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\nimport { injectContentfulConfig } from '../../utils/contentful-config';\nimport {\n generateContentfulImageSources,\n generateDefaultContentfulImageSource,\n} from './contentful-image.component.utils';\n\nconst optionalNumberAttribute = (value: unknown) => {\n const transformed = numberAttribute(value);\n\n return Number.isFinite(transformed) ? transformed : null;\n};\n\n@Component({\n selector: 'et-contentful-image',\n template: `\n <et-picture\n [priority]=\"priority()\"\n [defaultSrc]=\"defaultSrcValue()\"\n [alt]=\"normalizedAsset().alt ?? ''\"\n [figcaption]=\"normalizedAsset().figcaption ?? null\"\n [width]=\"normalizedAsset().width ?? null\"\n [height]=\"normalizedAsset().height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"sourcesValue()\"\n />\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent {\n private contentfulConfig = injectContentfulConfig();\n\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n backgroundColor = input<string | null>(this.contentfulConfig.imageOptions.backgroundColor);\n srcsetSizes = input<string[]>(this.contentfulConfig.imageOptions.srcsetSizes);\n\n quality = input(null, { transform: optionalNumberAttribute });\n focusArea = input<ContentfulImageFocusArea | null>(null);\n resizeBehavior = input<ContentfulImageResizeBehavior | null>(null);\n priority = input(false, { transform: booleanAttribute });\n sizes = input<string | null, string[] | string | null>(\n normalizePictureSizes(this.contentfulConfig.imageOptions.sizes),\n {\n transform: (v) => normalizePictureSizes(v),\n },\n );\n\n protected normalizedAsset = computed(() => {\n const asset = this.asset();\n\n if (isContentfulGqlAsset(asset)) {\n return {\n alt: asset.title || null,\n figcaption: asset.description || null,\n width: asset.width,\n height: asset.height,\n };\n } else {\n return {\n alt: asset?.fields?.title || null,\n figcaption: asset?.fields?.description || null,\n width: asset?.fields?.file?.details?.image?.width ?? null,\n height: asset?.fields?.file?.details?.image?.height ?? null,\n };\n }\n });\n\n protected sourcesValue = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n\n if (!asset) {\n return [];\n }\n\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n\n protected defaultSrcValue = computed(() => {\n const asset = this.asset();\n\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n}\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\n/**\n * The `BLOCKS` node type strings of `@contentful/rich-text-types`, as a plain literal map.\n * Keep the values in sync with the enum - they are part of the Contentful Delivery API.\n *\n * These maps exist because `BLOCKS` and `INLINES` are TS enums: reading one in a *value* position\n * anywhere in this lib emits a runtime import and costs every consumer ~2.4 kB gz. Use the enums for\n * types only - the `contentful-deps` size golden fails if that slips.\n */\nexport const CF_BLOCKS = {\n DOCUMENT: 'document',\n PARAGRAPH: 'paragraph',\n HEADING_1: 'heading-1',\n HEADING_2: 'heading-2',\n HEADING_3: 'heading-3',\n HEADING_4: 'heading-4',\n HEADING_5: 'heading-5',\n HEADING_6: 'heading-6',\n OL_LIST: 'ordered-list',\n UL_LIST: 'unordered-list',\n LIST_ITEM: 'list-item',\n HR: 'hr',\n QUOTE: 'blockquote',\n EMBEDDED_ENTRY: 'embedded-entry-block',\n EMBEDDED_ASSET: 'embedded-asset-block',\n EMBEDDED_RESOURCE: 'embedded-resource-block',\n TABLE: 'table',\n TABLE_ROW: 'table-row',\n TABLE_CELL: 'table-cell',\n TABLE_HEADER_CELL: 'table-header-cell',\n} as unknown as typeof BLOCKS;\n\n/**\n * The `INLINES` node type strings of `@contentful/rich-text-types`, as a plain literal map.\n * Keep the values in sync with the enum - they are part of the Contentful Delivery API.\n */\nexport const CF_INLINES = {\n ASSET_HYPERLINK: 'asset-hyperlink',\n EMBEDDED_ENTRY: 'embedded-entry-inline',\n EMBEDDED_RESOURCE: 'embedded-resource-inline',\n ENTRY_HYPERLINK: 'entry-hyperlink',\n HYPERLINK: 'hyperlink',\n RESOURCE_HYPERLINK: 'resource-hyperlink',\n} as unknown as typeof INLINES;\n","import { RuntimeError } from '@ethlete/core';\n\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined:\n 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type:\n 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type:\n 'The parent node neither a html element nor a custom component. This structure is not supported.',\n} as const;\n\nconst RICH_TEXT_RENDERER_ERROR_CODES: Record<keyof typeof RICH_TEXT_RENDERER_ERRORS, number> = {\n rich_text_undefined: 0,\n rich_text_wrong_type: 1,\n asset_id_not_found: 2,\n entry_id_not_found: 3,\n asset_not_found: 4,\n entry_not_found: 5,\n custom_component_not_found: 6,\n text_parent_not_found: 7,\n text_parent_wrong_type: 8,\n};\n\nexport const richTextRendererError = (code: keyof typeof RICH_TEXT_RENDERER_ERRORS, data?: unknown) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, data);\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nimport { RichTextResponse } from '../../types';\nimport { CF_BLOCKS, CF_INLINES } from './rich-text-node-types';\n\nexport const isRichTextRootNode = (node: unknown): node is RichTextResponse => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\n};\n\nexport const translateContentfulNodeTypeToHtmlTag = (nodeType: 'text' | BLOCKS | INLINES) => {\n switch (nodeType) {\n case CF_BLOCKS.HEADING_1:\n return 'h1';\n case CF_BLOCKS.HEADING_2:\n return 'h2';\n case CF_BLOCKS.HEADING_3:\n return 'h3';\n case CF_BLOCKS.HEADING_4:\n return 'h4';\n case CF_BLOCKS.HEADING_5:\n return 'h5';\n case CF_BLOCKS.HEADING_6:\n return 'h6';\n case CF_BLOCKS.PARAGRAPH:\n return 'p';\n case CF_BLOCKS.UL_LIST:\n return 'ul';\n case CF_BLOCKS.OL_LIST:\n return 'ol';\n case CF_BLOCKS.LIST_ITEM:\n return 'li';\n case CF_BLOCKS.HR:\n return 'hr';\n case CF_BLOCKS.QUOTE:\n return 'blockquote';\n case CF_BLOCKS.TABLE:\n return 'table';\n case CF_BLOCKS.TABLE_ROW:\n return 'tr';\n case CF_BLOCKS.TABLE_CELL:\n return 'td';\n case CF_BLOCKS.TABLE_HEADER_CELL:\n return 'th';\n case CF_BLOCKS.EMBEDDED_ASSET:\n return 'div';\n\n case CF_INLINES.ENTRY_HYPERLINK:\n return 'a';\n case CF_INLINES.ASSET_HYPERLINK:\n return 'a';\n\n case 'text':\n return 'span';\n\n // Will be ignored by the renderer\n case 'document':\n return 'div';\n\n case CF_BLOCKS.EMBEDDED_ENTRY:\n return 'div';\n case CF_INLINES.EMBEDDED_ENTRY:\n return 'div';\n\n default:\n return 'div';\n }\n};\n","import {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Type,\n ViewContainerRef,\n ViewEncapsulation,\n WritableSignal,\n computed,\n effect,\n inject,\n input,\n inputBinding,\n isDevMode,\n reflectComponentType,\n signal,\n untracked,\n} from '@angular/core';\nimport { Block, Inline, Mark, Text } from '@contentful/rich-text-types';\nimport { getObjectProperty, injectRenderer, isObject } from '@ethlete/core';\nimport {\n ContentfulCollection,\n ContentfulEntry,\n ContentfulEntryLinkItem,\n ContentfulRestAsset,\n RichTextResponse,\n} from '../../types';\nimport { injectContentfulConfig } from '../../utils/contentful-config';\nimport { CF_BLOCKS, CF_INLINES } from './rich-text-node-types';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\n\ntype HtmlOpenRenderCommand = {\n kind: 'htmlOpen';\n nestingLevel: number;\n domPosition: number;\n index: number;\n attributes: Record<string, string>;\n tagName: keyof HTMLElementTagNameMap;\n id: string;\n};\n\ntype HtmlCloseRenderCommand = {\n kind: 'htmlClose';\n nestingLevel: number;\n domPosition: number;\n index: number;\n tagName: keyof HTMLElementTagNameMap;\n id: string;\n};\n\ntype TextRenderCommand = {\n kind: 'text';\n nestingLevel: number;\n domPosition: number;\n index: number;\n attributes: Record<string, string>;\n markTags: MarkTagName[];\n text: string;\n id: string;\n};\n\ntype ComponentRenderCommand = {\n kind: 'component';\n nestingLevel: number;\n domPosition: number;\n index: number;\n component: Type<unknown>;\n inputs: Record<string, unknown>;\n id: string;\n};\n\ntype RenderCommand = HtmlOpenRenderCommand | HtmlCloseRenderCommand | TextRenderCommand | ComponentRenderCommand;\n\ntype RenderInstruction = {\n type: 'create' | 'update' | 'move' | 'delete';\n command: RenderCommand;\n};\n\ntype MarkTagName = 'strong' | 'em' | 'u' | 'code' | 's' | 'sub' | 'sup';\n\nconst MARK_TAG_MAP: Record<string, MarkTagName> = {\n bold: 'strong',\n italic: 'em',\n underline: 'u',\n code: 'code',\n strikethrough: 's',\n subscript: 'sub',\n superscript: 'sup',\n};\n\n/**\n * Translates contentful text marks into the semantic html elements the marked text is\n * wrapped in, outermost first. Unknown marks are skipped (with a dev-mode warning).\n */\nexport const marksToTags = (marks: Mark[]) => {\n const tags: MarkTagName[] = [];\n\n for (const mark of marks) {\n const tag = MARK_TAG_MAP[mark.type];\n\n if (!tag) {\n if (isDevMode()) {\n console.warn(`No element found for mark type \"${mark.type}\"! The mark is ignored.`, mark);\n }\n\n continue;\n }\n\n tags.push(tag);\n }\n\n return tags;\n};\n\n/**\n * The classes marked text inside a hyperlink is rendered with, since the link component\n * receives its text as a plain string.\n */\nexport const marksToClass = (marks: Mark[]) =>\n marks.map((mark) => `et-contentful-rich-text-mark-${mark.type}`).join(' ');\n\nconst LINK_COMPONENT_TYPE = '$$$_et-link';\n\nconst normalizeHref = (href: string): string | null => {\n if (!href.trim()) {\n return null;\n }\n\n try {\n const url = new URL(href, 'https://contentful.invalid');\n\n return ['http:', 'https:', 'mailto:', 'tel:', 'ftp:'].includes(url.protocol) ? href : null;\n } catch {\n return null;\n }\n};\n\ntype ExecutedCommandCacheItemBase = {\n element: HTMLElement;\n};\n\ntype ExecutedComponentCommandCacheItem = {\n command: ComponentRenderCommand;\n componentRef: ComponentRef<unknown>;\n inputs: WritableSignal<Record<string, unknown>>;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedHtmlCommandCacheItem = {\n command: HtmlOpenRenderCommand | HtmlCloseRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedTextCommandCacheItem = {\n command: TextRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedCommandCacheItem =\n ExecutedComponentCommandCacheItem | ExecutedHtmlCommandCacheItem | ExecutedTextCommandCacheItem;\n\nconst isExecutedComponentCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedComponentCommandCacheItem => {\n return cache.command.kind === 'component';\n};\n\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n\nexport type ContentfulIncludeMap = {\n /**\n * Select an entry by its ID and content type ID.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntry: <T extends { [key: string]: any }>(id: string, contentTypeId: string) => ContentfulEntry<T> | null;\n\n /**\n * Select multiple entries by their IDs and content type ID.\n * If an entry is not found, it will be omitted from the result.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntries: <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => ContentfulEntry<T>[];\n\n /**\n * Select an asset by its ID.\n */\n getAsset: (id: string) => ContentfulRestAsset | null;\n\n /**\n * Select multiple assets by their IDs. If an asset is not found, it will be omitted from the result.\n */\n getAssets: (ids: string[]) => ContentfulRestAsset[];\n};\n\nexport type CreateContentfulIncludeMapConfig = {\n /** The entries that should be present inside the map */\n entries: ContentfulEntry[];\n\n /** The assets that should be present inside the map */\n assets: ContentfulRestAsset[];\n};\n\n/**\n * Create a contentful include map using the provided entries and assets.\n */\nexport const createContentfulIncludeMap = (config: CreateContentfulIncludeMapConfig): ContentfulIncludeMap => {\n const { entries, assets } = config;\n\n const assetMap = new Map(assets.map((asset) => [asset.sys.id, asset]));\n const entryMap = new Map(entries.map((entry) => [entry.sys.id, entry]));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = <T extends { [key: string]: any }>(id: string, contentTypeId: string) => {\n const entry = entryMap.get(id);\n\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n\n return null;\n }\n\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry as ContentfulEntry<T>;\n }\n\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n\n return null;\n }\n\n return entry as ContentfulEntry<T>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry<T>(id, contentTypeId))\n .filter((entry): entry is ContentfulEntry<T> => entry !== null);\n\n return entries;\n };\n\n const getAsset = (id: string) => {\n return assetMap.get(id) ?? null;\n };\n\n const getAssets = (ids: string[]) => {\n return ids.map((id) => getAsset(id)).filter((asset): asset is ContentfulRestAsset => asset !== null);\n };\n\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n};\n\n@Component({\n selector: 'et-contentful-rich-text-renderer',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'et-contentful-rich-text-renderer',\n },\n})\nexport class ContentfulRichTextRendererComponent {\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = injectRenderer();\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private config = injectContentfulConfig();\n\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n content = input.required<ContentfulCollection | null | undefined>();\n\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @example \"items[0].fields.html\"\n */\n richTextPath = input.required<string>();\n\n private readonly executedCommandsCache = new Map<string, ExecutedCommandCacheItem>();\n\n private contentIncludesMap = computed<ContentfulIncludeMap>(() => {\n const content = this.content();\n const assets = content?.includes?.Asset;\n const entries = content?.includes?.Entry;\n\n return createContentfulIncludeMap({ assets: assets ?? [], entries: entries ?? [] });\n });\n\n private richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n\n if (!content) {\n return null;\n }\n\n const richText = getObjectProperty(content as unknown as Record<string, unknown>, richTextPath);\n\n if (richText === null || richText === undefined) {\n return null;\n }\n\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', { content, richTextPath });\n }\n\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', { content, richTextPath });\n }\n\n return richText as RichTextResponse;\n });\n\n private renderCommands = computed(() => {\n const richTextData = this.richTextData();\n\n if (!richTextData) {\n return [];\n }\n\n return this.createRenderCommands(richTextData);\n });\n\n private renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = new Map(\n [...this.executedCommandsCache.entries()].map(([id, item]) => [id, item.command]),\n );\n\n const instructions: RenderInstruction[] = [];\n\n const preserved = new Set<string>();\n const needsReattach = new Set<string>();\n\n const parentIdOf = (command: RenderCommand): string | null => {\n if (command.nestingLevel === 0) {\n return null;\n }\n\n for (let i = command.index - 1; i >= 0; i--) {\n const cmd = commands[i];\n\n if (cmd && cmd.nestingLevel === command.nestingLevel - 1 && cmd.kind === 'htmlOpen') {\n return cmd.id;\n }\n }\n\n return null;\n };\n\n const markTagsEqual = (a: MarkTagName[], b: MarkTagName[]) =>\n a.length === b.length && a.every((tag, index) => tag === b[index]);\n\n const attributesEqual = (a: Record<string, string>, b: Record<string, string>) => {\n const aKeys = Object.keys(a);\n\n return aKeys.length === Object.keys(b).length && aKeys.every((key) => a[key] === b[key]);\n };\n\n for (const command of commands) {\n if (command.kind === 'htmlClose') {\n continue;\n }\n\n const previous = previousRenderCommandMap.get(command.id);\n\n if (!previous || previous.kind !== command.kind) {\n continue;\n }\n\n if (previous.kind === 'component' && command.kind === 'component' && previous.component !== command.component) {\n continue;\n }\n\n const parentId = parentIdOf(command);\n const parentPreserved = parentId === null || preserved.has(parentId);\n\n if (command.kind === 'component') {\n preserved.add(command.id);\n\n const samePlace =\n parentPreserved &&\n previous.nestingLevel === command.nestingLevel &&\n previous.domPosition === command.domPosition;\n\n if (!samePlace) {\n needsReattach.add(command.id);\n }\n\n continue;\n }\n\n const sameOutput =\n previous.kind === command.kind &&\n (previous.kind !== 'htmlOpen' || previous.tagName === (command as HtmlOpenRenderCommand).tagName) &&\n (previous.kind !== 'text' ||\n (previous.text === (command as TextRenderCommand).text &&\n markTagsEqual(previous.markTags, (command as TextRenderCommand).markTags)));\n\n if (\n parentPreserved &&\n sameOutput &&\n previous.nestingLevel === command.nestingLevel &&\n previous.domPosition === command.domPosition &&\n attributesEqual(previous.attributes, command.attributes)\n ) {\n preserved.add(command.id);\n }\n }\n\n for (const [id, command] of previousRenderCommandMap) {\n if (command.kind !== 'htmlClose' && !preserved.has(id)) {\n instructions.push({ type: 'delete', command });\n }\n }\n\n for (const command of commands) {\n if (command.kind === 'htmlClose') {\n continue;\n }\n\n if (!preserved.has(command.id)) {\n instructions.push({ type: 'create', command });\n } else if (command.kind === 'component' && needsReattach.has(command.id)) {\n instructions.push({ type: 'move', command });\n } else {\n instructions.push({ type: 'update', command });\n }\n }\n\n return instructions;\n });\n\n constructor() {\n effect(() => {\n const instructions = this.renderInstructions();\n\n untracked(() => this.execInstructions(instructions));\n });\n }\n\n private createRenderCommands(richTextData: RichTextResponse) {\n const rootCommands: RenderCommand[] = [];\n let elementOpenId = 0;\n let elementCloseId = 0;\n const componentIdMap = new Map<string, number>();\n let nestingLevel = 0;\n let domPosition = 0;\n\n let textId = 0;\n\n let commandIndex = 0;\n\n const traverse = (node: Block | Inline | Text) => {\n switch (node.nodeType) {\n case 'text': {\n const text = node.value;\n\n if (!text) break;\n\n const attributes: Record<string, string> = {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n };\n\n rootCommands.push({\n kind: 'text',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes,\n markTags: node.marks.length ? marksToTags(node.marks) : [],\n text,\n id: 't' + textId++,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_BLOCKS.EMBEDDED_ASSET: {\n const assetId = node.data['target']?.sys?.id;\n\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', { node });\n }\n\n const asset = this.contentIncludesMap().getAsset(assetId);\n\n if (!asset) {\n throw richTextRendererError('asset_not_found', { assetId, node });\n }\n\n const contentType = asset.fields.file.contentType;\n const assetComponents = this.config.components;\n\n const isMissing = !contentType && !asset.fields.file.url;\n\n if (isMissing) {\n if (isDevMode()) {\n console.warn(\n 'Asset is missing file data! Asset will be skipped. Did you forget to upload a file for the current translation in Contentful?',\n { asset },\n );\n }\n\n break;\n }\n\n const isImage = contentType?.startsWith('image/');\n const isVideo = contentType?.startsWith('video/');\n const isAudio = contentType?.startsWith('audio/');\n\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n\n if (!component) {\n if (isDevMode()) {\n console.warn(\n 'No component registered for this embedded asset! The asset will be skipped. Provide one via provideContentfulConfig({ components: … }).',\n { asset },\n );\n }\n\n break;\n }\n\n const occurrenceKey = 'asset:' + assetId;\n const occurrence = (componentIdMap.get(occurrenceKey) ?? -1) + 1;\n componentIdMap.set(occurrenceKey, occurrence);\n const id = occurrence === 0 ? occurrenceKey : `${occurrenceKey}:${occurrence}`;\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component,\n inputs: { asset },\n id,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_INLINES.HYPERLINK:\n case CF_INLINES.ASSET_HYPERLINK:\n case CF_INLINES.ENTRY_HYPERLINK: {\n let href: string | null = null;\n\n if (node.nodeType === CF_INLINES.HYPERLINK) {\n href = normalizeHref((node.data['uri'] as string) ?? '');\n } else if (node.nodeType === CF_INLINES.ASSET_HYPERLINK) {\n const assetId = node.data['target']?.sys?.id;\n const asset = assetId ? this.contentIncludesMap().getAsset(assetId) : null;\n href = asset?.fields.file.url ? normalizeHref(asset.fields.file.url) : null;\n }\n\n let linkText = '';\n const linkMarks: Mark[] = [];\n\n for (const child of node.content) {\n if (child.nodeType === 'text') {\n linkText += child.value;\n linkMarks.push(...child.marks);\n }\n }\n\n const linkComponent = href ? this.config.components.link : null;\n\n if (href && !linkComponent) {\n rootCommands.push({\n kind: 'htmlOpen',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes: {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-a',\n href,\n },\n tagName: 'a',\n id: 'e-o' + elementOpenId++,\n });\n\n const anchorDomPosition = domPosition;\n\n nestingLevel++;\n domPosition = 0;\n\n rootCommands.push({\n kind: 'text',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes: {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n },\n markTags: marksToTags(linkMarks),\n text: linkText,\n id: 't' + textId++,\n });\n\n nestingLevel--;\n domPosition = anchorDomPosition;\n\n rootCommands.push({\n kind: 'htmlClose',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n tagName: 'a',\n id: 'e-c' + elementCloseId++,\n });\n\n domPosition++;\n\n break;\n }\n\n if (!href) {\n rootCommands.push({\n kind: 'text',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes: {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n },\n markTags: marksToTags(linkMarks),\n text: linkText,\n id: 't' + textId++,\n });\n domPosition++;\n\n break;\n }\n\n if (!linkComponent) {\n break;\n }\n\n const textClass = linkMarks.length ? marksToClass(linkMarks) : '';\n\n let linkComponentId = componentIdMap.get(LINK_COMPONENT_TYPE) ?? -1;\n const linkId = LINK_COMPONENT_TYPE + ++linkComponentId;\n componentIdMap.set(LINK_COMPONENT_TYPE, linkComponentId);\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component: linkComponent,\n inputs: { href, text: linkText, textClass },\n id: linkId,\n });\n\n domPosition++;\n\n break;\n }\n\n case CF_BLOCKS.EMBEDDED_ENTRY:\n case CF_INLINES.EMBEDDED_ENTRY: {\n const entryId = node.data['target']?.sys?.id;\n\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', { node });\n }\n\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n\n if (!entry) {\n throw richTextRendererError('entry_not_found', { entryId, node });\n }\n\n const componentType = entry.sys.contentType.sys.id;\n\n const component = this.config.customComponents[componentType];\n\n if (!component) {\n throw richTextRendererError('custom_component_not_found', {\n componentType,\n customComponents: this.config.customComponents,\n entry,\n });\n }\n\n const occurrenceKey = 'entry:' + entryId;\n const occurrence = (componentIdMap.get(occurrenceKey) ?? -1) + 1;\n componentIdMap.set(occurrenceKey, occurrence);\n const id = occurrence === 0 ? occurrenceKey : `${occurrenceKey}:${occurrence}`;\n\n rootCommands.push({\n kind: 'component',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n component,\n inputs: {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n },\n id,\n });\n\n domPosition++;\n\n break;\n }\n\n default: {\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes: Record<string, string> = {\n class: `et-contentful-rich-text-default-element et-contentful-rich-text-default-${tag}`,\n };\n\n rootCommands.push({\n kind: 'htmlOpen',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n attributes,\n tagName: tag,\n id: 'e-o' + elementOpenId++,\n });\n\n const domPositionAtThisLevel = domPosition;\n nestingLevel++;\n domPosition = 0;\n\n for (const child of node.content) {\n traverse(child);\n }\n\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n\n const lastCommand = rootCommands[rootCommands.length - 1];\n\n if (\n lastCommand?.kind === 'htmlOpen' &&\n lastCommand.tagName !== 'td' &&\n lastCommand.tagName !== 'th' &&\n lastCommand.tagName !== 'hr'\n ) {\n rootCommands.pop();\n elementOpenId--;\n commandIndex--;\n } else {\n rootCommands.push({\n kind: 'htmlClose',\n nestingLevel,\n domPosition,\n index: commandIndex++,\n tagName: tag,\n id: 'e-c' + elementCloseId++,\n });\n\n domPosition++;\n }\n\n break;\n }\n }\n };\n\n for (const node of richTextData.content) {\n traverse(node);\n }\n\n return rootCommands;\n }\n\n private execInstructions(instructions: RenderInstruction[]) {\n for (const instruction of instructions) {\n switch (instruction.type) {\n case 'create':\n this.runCreateInstruction(instruction.command);\n break;\n case 'update':\n this.runUpdateInstruction(instruction.command);\n break;\n case 'move':\n this.runMoveInstruction(instruction.command);\n break;\n case 'delete':\n this.runDeleteInstruction(instruction.command);\n break;\n }\n }\n }\n\n private runCreateInstruction(command: RenderCommand) {\n const parentElement = this.findParent(command);\n const nextElement = this.findFollowingElement(command);\n\n if (command.kind === 'component') {\n const inputs = signal(command.inputs);\n\n const declaredInputs = reflectComponentType(command.component)?.inputs ?? [];\n const bindings = declaredInputs\n .filter((declared) => declared.propName in command.inputs)\n .map((declared) => inputBinding(declared.templateName, () => inputs()[declared.propName]));\n\n const componentRef = this.viewContainerRef.createComponent(command.component, { bindings });\n\n const rootNode = this.getComponentRootNode(componentRef);\n\n this.renderInsertOrAppend(rootNode, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n componentRef,\n inputs,\n element: rootNode,\n });\n } else if (command.kind === 'text') {\n const span = this.renderer.createElement('span');\n const textSplitInLineBreaks = command.text.split('\\n');\n\n for (const [key, value] of Object.entries(command.attributes)) {\n this.renderer.setAttribute(span, key, value);\n }\n\n let textContainer = span;\n\n for (const tag of command.markTags) {\n const markElement = this.renderer.createElement(tag);\n\n this.renderer.appendChild(textContainer, markElement);\n textContainer = markElement;\n }\n\n for (const [textPartIndex, textPart] of textSplitInLineBreaks.entries()) {\n if (textPartIndex > 0) {\n const brNode = this.renderer.createElement('br');\n this.renderer.appendChild(textContainer, brNode);\n }\n\n if (textPart) {\n const textNode = this.renderer.createText(textPart);\n\n this.renderer.appendChild(textContainer, textNode);\n }\n }\n\n this.renderInsertOrAppend(span, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n element: span,\n });\n } else if (command.kind === 'htmlOpen') {\n const element = this.renderer.createElement(command.tagName);\n\n for (const [key, value] of Object.entries(command.attributes)) {\n this.renderer.setAttribute(element, key, value);\n }\n\n this.renderInsertOrAppend(element, parentElement, nextElement);\n\n this.executedCommandsCache.set(command.id, {\n command,\n element,\n });\n }\n }\n\n private runUpdateInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.inputs.set(command.inputs);\n }\n\n this.executedCommandsCache.set(command.id, {\n ...cached,\n command,\n } as ExecutedCommandCacheItem);\n }\n\n private runMoveInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n\n if (oldParentElement) {\n this.renderer.removeChild(oldParentElement, rootNode);\n }\n\n const newParentElement = this.findParent(command);\n const nextElement = this.findFollowingElement(command);\n\n this.renderInsertOrAppend(rootNode, newParentElement, nextElement);\n\n cached.inputs.set(command.inputs);\n\n this.executedCommandsCache.set(command.id, {\n ...cached,\n command,\n } as ExecutedCommandCacheItem);\n }\n }\n\n private runDeleteInstruction(command: RenderCommand) {\n const cached = this.executedCommandsCache.get(command.id);\n\n if (!cached) {\n if (command.kind === 'htmlClose') {\n return;\n }\n\n throw new Error('Cached command not found!');\n }\n\n if (command.kind === 'component') {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.componentRef.destroy();\n } else if (command.kind === 'text' || command.kind === 'htmlOpen') {\n if (cached.element.parentElement) {\n this.renderer.removeChild(cached.element.parentElement, cached.element);\n }\n }\n\n this.executedCommandsCache.delete(command.id);\n }\n\n private getComponentRootNode(componentRef: ComponentRef<unknown>): HTMLElement {\n return (componentRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n }\n\n private findParent(command: RenderCommand) {\n const hostElement = this.elementRef.nativeElement;\n let parentElement: HTMLElement | undefined;\n\n if (command.nestingLevel === 0) {\n parentElement = hostElement;\n } else {\n const allCommands = this.renderCommands();\n\n let parentCommand: HtmlOpenRenderCommand | null = null;\n\n for (let i = command.index - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n\n if (!cmd) {\n throw new Error('Command not found!');\n }\n\n if (cmd.nestingLevel === command.nestingLevel - 1 && cmd.kind === 'htmlOpen') {\n parentCommand = cmd;\n break;\n }\n }\n\n if (!parentCommand) {\n throw richTextRendererError('text_parent_not_found', { command });\n }\n\n parentElement = this.executedCommandsCache.get(parentCommand.id)?.element;\n }\n\n if (!parentElement) {\n throw richTextRendererError('text_parent_wrong_type', { command });\n }\n\n return parentElement;\n }\n\n private findFollowingElement(command: RenderCommand) {\n const parentElement = this.findParent(command);\n let nextElement: HTMLElement | undefined;\n let nextDomPosition = Infinity;\n\n for (const cached of this.executedCommandsCache.values()) {\n if (\n cached.command.domPosition > command.domPosition &&\n cached.command.domPosition < nextDomPosition &&\n cached.command.nestingLevel === command.nestingLevel &&\n cached.element.parentElement === parentElement &&\n cached.command.id !== command.id\n ) {\n nextElement = cached.element;\n nextDomPosition = cached.command.domPosition;\n }\n }\n\n return nextElement;\n }\n\n private renderInsertOrAppend(\n nodeToRender: HTMLElement,\n parentElement: HTMLElement,\n nextElement: HTMLElement | undefined,\n ) {\n if (nextElement) {\n this.renderer.insertBefore(parentElement, nodeToRender, nextElement);\n } else {\n this.renderer.appendChild(parentElement, nodeToRender);\n }\n }\n}\n","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\n\nexport const ContentfulImports = [\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n ContentfulRichTextRendererComponent,\n] as const;\n","import { Provider } from '@angular/core';\nimport { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulConfig, ContentfulEntry } from '../types';\nimport { createContentfulConfig } from './contentful-config';\n\nexport const provideContentfulConfig = (contentfulConfig?: Partial<ContentfulConfig> | null): Provider => {\n return { provide: CONTENTFUL_CONFIG, useValue: createContentfulConfig(contentfulConfig) };\n};\n\nexport const isContentfulEntryType = <T extends ContentfulEntry>(entry: ContentfulEntry, type: string): entry is T =>\n entry.sys.contentType.sys.id === type;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -6,18 +6,18 @@ const stripTrailingSlash = (value) => (value.endsWith('/') ? value.slice(0, -1)
|
|
|
6
6
|
* reviewable.
|
|
7
7
|
*/
|
|
8
8
|
export const createMigrationScope = (tree, options) => {
|
|
9
|
-
const roots =
|
|
9
|
+
const roots = new Set();
|
|
10
10
|
for (const projectName of options.projects ?? []) {
|
|
11
11
|
const project = getProjects(tree).get(projectName);
|
|
12
12
|
if (!project) {
|
|
13
13
|
throw new Error(`Unknown project "${projectName}". Pass names as they appear in \`nx show projects\`, or use --include with a path prefix.`);
|
|
14
14
|
}
|
|
15
|
-
roots.
|
|
15
|
+
roots.add(stripTrailingSlash(project.root));
|
|
16
16
|
}
|
|
17
17
|
for (const includePath of options.include ?? []) {
|
|
18
|
-
roots.
|
|
18
|
+
roots.add(stripTrailingSlash(includePath));
|
|
19
19
|
}
|
|
20
|
-
if (roots.
|
|
20
|
+
if (roots.size === 0) {
|
|
21
21
|
return {
|
|
22
22
|
visit: (targetTree, callback) => visitNotIgnoredFiles(targetTree, '', callback),
|
|
23
23
|
describe: () => 'the whole workspace',
|
|
@@ -25,11 +25,17 @@ export const createMigrationScope = (tree, options) => {
|
|
|
25
25
|
}
|
|
26
26
|
return {
|
|
27
27
|
visit: (targetTree, callback) => {
|
|
28
|
+
const visited = new Set();
|
|
28
29
|
for (const root of roots) {
|
|
29
|
-
visitNotIgnoredFiles(targetTree, root,
|
|
30
|
+
visitNotIgnoredFiles(targetTree, root, (filePath) => {
|
|
31
|
+
if (visited.has(filePath))
|
|
32
|
+
return;
|
|
33
|
+
visited.add(filePath);
|
|
34
|
+
callback(filePath);
|
|
35
|
+
});
|
|
30
36
|
}
|
|
31
37
|
},
|
|
32
|
-
describe: () => roots.join(', '),
|
|
38
|
+
describe: () => [...roots].join(', '),
|
|
33
39
|
};
|
|
34
40
|
};
|
|
35
41
|
//# sourceMappingURL=migration-scope.js.map
|