@contentful/experiences-core 3.8.4-beta.1 → 3.8.4-beta.2
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/dist/cjs/index.cjs +4 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -3
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/utils/components.ts","../../src/definitions/styles.ts","../../src/registries/designTokenRegistry.ts","../../../validators/dist/index.js","../../src/registries/breakpointsRegistry.ts","../../src/registries/sdkOptionsRegistry.ts","../../src/utils/breakpoints.ts","../../src/utils/debugLogger.ts","../../src/utils/domValues.ts","../../src/utils/isLinkToAsset.ts","../../src/utils/isLinkToEntry.ts","../../src/utils/isLink.ts","../../src/utils/localizeEntity.ts","../../src/utils/pathSchema.ts","../../src/utils/resolveHyperlinkPattern.ts","../../src/utils/sanitizeNodeProps.ts","../../src/utils/styleUtils/styleTransformers.ts","../../src/utils/styleUtils/stylesUtils.ts","../../src/utils/utils.ts","../../src/utils/styleUtils/toMediaQuery.ts","../../src/utils/transformers/media/getOptimizedImageUrl.ts","../../src/utils/transformers/media/mediaUtils.ts","../../src/utils/transformers/media/getOptimizedBackgroundImageAsset.ts","../../src/utils/styleUtils/ssrStyles.ts","../../src/utils/get.ts","../../src/utils/transformers/getBoundValue.ts","../../src/utils/transformers/transformRichText.ts","../../src/utils/transformers/media/getOptimizedImageAsset.ts","../../src/utils/transformers/media/transformMedia.ts","../../src/utils/typeguards.ts","../../src/utils/transformers/getResolvedEntryFromLink.ts","../../src/utils/transformers/getArrayValue.ts","../../src/utils/transformers/transformBoundContentValue.ts","../../src/utils/treeTraversal.ts","../../src/utils/validations.ts","../../src/utils/schema/references.ts","../../src/utils/schema/experienceSchema.ts","../../src/utils/splitDirectAndSlotChildren.ts","../../src/utils/extractPrebindingData.ts","../../src/communication/sendMessage.ts","../../src/utils/freeze.ts","../../src/entity/EntityStoreBase.ts","../../src/entity/EditorEntityStore.ts","../../src/entity/value-transformers/TransformAssetFile.ts","../../src/entity/EditorModeEntityStore.ts","../../src/entity/utils/resolveDeepUsedComponents.ts","../../src/entity/EntityStore.ts","../../src/entity/UninitializedEntityStore.ts","../../src/entity/InMemoryEntitiesStore.ts","../../src/entity/InMemoryEntitiesPublicApi.ts","../../src/enums.ts","../../src/fetchers/createExperience.ts","../../src/fetchers/fetchExperienceEntry.ts","../../src/deep-binding/DeepReference.ts","../../src/fetchers/gatherAutoFetchedReferentsFromIncludes.ts","../../src/fetchers/fetchAllEntities.ts","../../src/fetchers/fetchReferencedEntities.ts","../../src/fetchers/shared/circularityCheckers.ts","../../src/fetchers/shared/prepareExperienceEntry.ts","../../src/fetchers/fetchBySlug.ts","../../src/fetchers/fetchById.ts"],"sourcesContent":["/** @deprecated will be removed when dropping backward compatibility for old DND */\nexport const SCROLL_STATES = {\n Start: 'scrollStart',\n IsScrolling: 'isScrolling',\n End: 'scrollEnd',\n} as const;\n\nexport const OUTGOING_EVENTS = {\n Connected: 'connected',\n DesignTokens: 'registerDesignTokens',\n RegisteredBreakpoints: 'registeredBreakpoints',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n MouseMove: 'mouseMove',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentSelected: 'componentSelected',\n RegisteredComponents: 'registeredComponents',\n RequestComponentTreeUpdate: 'requestComponentTreeUpdate',\n CanvasReload: 'canvasReload',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n UpdateSelectedComponentCoordinates: 'updateSelectedComponentCoordinates',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n CanvasScroll: 'canvasScrolling',\n CanvasError: 'canvasError',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n OutsideCanvasClick: 'outsideCanvasClick',\n SDKFeatures: 'sdkFeatures',\n RequestEntities: 'REQUEST_ENTITIES',\n CanvasGeometryUpdated: 'canvasGeometryUpdated',\n CanvasPan: 'canvasPan',\n} as const;\n\nexport const INCOMING_EVENTS = {\n RequestEditorMode: 'requestEditorMode',\n RequestReadOnlyMode: 'requestReadOnlyMode',\n ExperienceUpdated: 'componentTreeUpdated',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDraggingChanged: 'componentDraggingChanged',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragCanceled: 'componentDragCanceled',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragStarted: 'componentDragStarted',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragEnded: 'componentDragEnded',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentMoveEnded: 'componentMoveEnded',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n CanvasResized: 'canvasResized',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n SelectComponent: 'selectComponent',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n HoverComponent: 'hoverComponent',\n UpdatedEntity: 'updatedEntity',\n /** @deprecated not needed after `patternResolution` was introduced. Will be removed in the next major version. */\n AssembliesAdded: 'assembliesAdded',\n /** @deprecated not needed after `patternResolution` was introduced. Will be removed in the next major version. */\n AssembliesRegistered: 'assembliesRegistered',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n MouseMove: 'mouseMove',\n RequestedEntities: 'REQUESTED_ENTITIES',\n} as const;\n\nexport const INTERNAL_EVENTS = {\n ComponentsRegistered: 'cfComponentsRegistered',\n VisualEditorInitialize: 'cfVisualEditorInitialize',\n} as const;\n\nexport const VISUAL_EDITOR_EVENTS = {\n Ready: 'cfVisualEditorReady',\n};\n\n/**\n * These modes are ONLY intended to be internally used within the context of\n * editing an experience inside of Contentful Studio. i.e. these modes\n * intentionally do not include preview/delivery modes.\n */\nexport enum StudioCanvasMode {\n READ_ONLY = 'readOnlyMode',\n EDITOR = 'editorMode',\n NONE = 'none',\n}\n\nexport const VISUAL_EDITOR_CONTAINER_ID = 'cf-visual-editor';\nexport const CONTENTFUL_COMPONENT_CATEGORY = 'contentful-component';\nexport const CONTENTFUL_DEFAULT_CATEGORY = 'Contentful';\n\nexport const CONTENTFUL_COMPONENTS = {\n section: {\n id: 'contentful-section',\n name: 'Section',\n },\n container: {\n id: 'contentful-container',\n name: 'Container',\n },\n columns: {\n id: 'contentful-columns',\n name: 'Columns',\n },\n singleColumn: {\n id: 'contentful-single-column',\n name: 'Column',\n },\n button: {\n id: 'contentful-button',\n name: 'Button',\n },\n heading: {\n id: 'contentful-heading',\n name: 'Heading',\n },\n image: {\n id: 'contentful-image',\n name: 'Image',\n },\n richText: {\n id: 'contentful-richText',\n name: 'Rich Text',\n },\n text: {\n id: 'contentful-text',\n name: 'Text',\n },\n divider: {\n id: 'contentful-divider',\n name: 'Divider',\n },\n carousel: {\n id: 'contentful-carousel',\n name: 'Carousel',\n },\n} as const;\n\nexport const ASSEMBLY_NODE_TYPE = 'assembly';\nexport const ASSEMBLY_DEFAULT_CATEGORY = 'Assemblies';\nexport const ASSEMBLY_BLOCK_NODE_TYPE = 'assemblyBlock';\nexport const ASSEMBLY_NODE_TYPES = [ASSEMBLY_NODE_TYPE, ASSEMBLY_BLOCK_NODE_TYPE];\nexport const LATEST_SCHEMA_VERSION = '2023-09-28';\nexport const CF_STYLE_ATTRIBUTES = [\n 'cfVisibility',\n 'cfHorizontalAlignment',\n 'cfVerticalAlignment',\n 'cfMargin',\n 'cfPadding',\n 'cfBackgroundColor',\n 'cfWidth',\n 'cfMaxWidth',\n 'cfHeight',\n 'cfImageAsset',\n 'cfImageOptions',\n 'cfBackgroundImageUrl',\n 'cfBackgroundImageOptions',\n 'cfFlexDirection',\n 'cfFlexWrap',\n 'cfFlexReverse',\n 'cfBorder',\n 'cfBorderRadius',\n 'cfGap',\n 'cfColumnSpan',\n 'cfColumnSpanLock',\n 'cfColumns',\n 'cfFontSize',\n 'cfFontWeight',\n 'cfLineHeight',\n 'cfLetterSpacing',\n 'cfTextColor',\n 'cfTextAlign',\n 'cfTextTransform',\n 'cfTextBold',\n 'cfTextItalic',\n 'cfTextUnderline',\n];\n\nexport const EMPTY_CONTAINER_SIZE = '80px';\n\nexport const HYPERLINK_DEFAULT_PATTERN = `/{locale}/{entry.fields.slug}/`;\n\nexport enum PostMessageMethods {\n REQUEST_ENTITIES = 'REQUEST_ENTITIES',\n REQUESTED_ENTITIES = 'REQUESTED_ENTITIES',\n}\n\nexport const SUPPORTED_IMAGE_FORMATS = ['jpg', 'png', 'webp', 'gif', 'avif'] as const;\n","import {\n ASSEMBLY_BLOCK_NODE_TYPE,\n ASSEMBLY_DEFAULT_CATEGORY,\n ASSEMBLY_NODE_TYPE,\n CONTENTFUL_COMPONENTS,\n} from '../constants';\n\nconst structureComponentIds = new Set([\n CONTENTFUL_COMPONENTS.section.id,\n CONTENTFUL_COMPONENTS.columns.id,\n CONTENTFUL_COMPONENTS.container.id,\n CONTENTFUL_COMPONENTS.singleColumn.id,\n]);\n\nconst patternTypes = new Set([ASSEMBLY_NODE_TYPE, ASSEMBLY_BLOCK_NODE_TYPE]);\n\ntype ComponentAllowOnRoot = {\n type?: string;\n category?: string;\n componentId?: string;\n};\n\nconst allContentfulComponentIds = new Set(\n Object.values(CONTENTFUL_COMPONENTS).map((component) => component.id),\n);\n\ntype SetElement<ElementType> = ElementType extends Set<infer E> ? E : never;\ntype StructureComponentId = SetElement<typeof structureComponentIds>;\ntype AllContentfulComponentId = SetElement<typeof allContentfulComponentIds>;\n\nexport const isPatternComponent = (type?: string) => patternTypes.has(type ?? '');\n\nexport const isContentfulStructureComponent = (\n componentId?: string,\n): componentId is StructureComponentId =>\n structureComponentIds.has((componentId ?? '') as StructureComponentId);\n\nexport const isContentfulComponent = (\n componentId?: string,\n): componentId is AllContentfulComponentId =>\n allContentfulComponentIds.has((componentId ?? '') as AllContentfulComponentId);\n\nexport const isComponentAllowedOnRoot = ({ type, category, componentId }: ComponentAllowOnRoot) =>\n isPatternComponent(type) ||\n category === ASSEMBLY_DEFAULT_CATEGORY ||\n isContentfulStructureComponent(componentId) ||\n componentId === CONTENTFUL_COMPONENTS.divider.id;\n\nexport const isStructureWithRelativeHeight = (\n componentId?: string,\n height?: string | number,\n): componentId is StructureComponentId => {\n return isContentfulStructureComponent(componentId) && !height?.toString().endsWith('px');\n};\n","import { DesignVariableMap } from '../types';\n\n// These styles get added to every component, user custom or contentful provided\nexport const builtInStyles: Partial<DesignVariableMap> = {\n cfVerticalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align left',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align right',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Vertical alignment',\n },\n cfHorizontalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align top',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align bottom',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Horizontal alignment',\n },\n cfVisibility: {\n displayName: 'Visibility toggle',\n type: 'Boolean',\n group: 'style',\n defaultValue: true,\n },\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 0)',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfHeight: {\n displayName: 'Height',\n type: 'Text',\n group: 'style',\n defaultValue: 'fit-content',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfFlexDirection: {\n displayName: 'Direction',\n type: 'Text',\n group: 'style',\n defaultValue: 'column',\n },\n cfFlexReverse: {\n displayName: 'Reverse Direction',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfFlexWrap: {\n displayName: 'Wrap objects',\n type: 'Text',\n group: 'style',\n defaultValue: 'nowrap',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfHyperlink: {\n displayName: 'URL',\n type: 'Hyperlink',\n defaultValue: '',\n validations: {\n format: 'URL',\n bindingSourceType: ['entry', 'experience', 'manual'],\n },\n },\n cfOpenInNewTab: {\n displayName: 'URL behaviour',\n type: 'Boolean',\n defaultValue: false,\n description: 'Open in new tab',\n },\n};\n\nexport const optionalBuiltInStyles: Partial<DesignVariableMap> = {\n cfFontSize: {\n displayName: 'Font Size',\n type: 'Text',\n group: 'style',\n defaultValue: '16px',\n },\n cfFontWeight: {\n validations: {\n in: [\n {\n value: '400',\n displayName: 'Normal',\n },\n {\n value: '500',\n displayName: 'Medium',\n },\n {\n value: '600',\n displayName: 'Semi Bold',\n },\n ],\n },\n displayName: 'Font Weight',\n type: 'Text',\n group: 'style',\n defaultValue: '400',\n },\n cfImageAsset: {\n displayName: 'Image',\n type: 'Media',\n validations: {\n bindingSourceType: ['asset', 'entry', 'manual'],\n },\n },\n cfImageOptions: {\n displayName: 'Image options',\n type: 'Object',\n group: 'style',\n defaultValue: {\n width: '100%',\n height: '100%',\n targetSize: 'unset',\n },\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 0)',\n },\n cfBackgroundImageUrl: {\n displayName: 'Background image',\n type: 'Media',\n validations: {\n bindingSourceType: ['asset', 'entry', 'manual'],\n },\n },\n cfBackgroundImageOptions: {\n displayName: 'Background image options',\n type: 'Object',\n group: 'style',\n defaultValue: {\n scaling: 'fill',\n alignment: 'left top',\n targetSize: '2000px',\n },\n },\n cfBorderRadius: {\n displayName: 'Border Radius',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfLineHeight: {\n displayName: 'Line Height',\n type: 'Text',\n group: 'style',\n defaultValue: '20px',\n },\n cfLetterSpacing: {\n displayName: 'Letter Spacing',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfTextColor: {\n displayName: 'Text Color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 1)',\n },\n cfTextAlign: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align start',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align end',\n },\n ],\n },\n displayName: 'Text Align',\n type: 'Text',\n group: 'style',\n defaultValue: 'start',\n },\n cfTextTransform: {\n validations: {\n in: [\n {\n value: 'none',\n displayName: 'Normal',\n },\n {\n value: 'capitalize',\n displayName: 'Capitalize',\n },\n {\n value: 'uppercase',\n displayName: 'Uppercase',\n },\n {\n value: 'lowercase',\n displayName: 'Lowercase',\n },\n ],\n },\n displayName: 'Text Transform',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfTextBold: {\n displayName: 'Bold',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfTextItalic: {\n displayName: 'Italic',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfTextUnderline: {\n displayName: 'Underline',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n};\n\nexport const sectionBuiltInStyles: Partial<DesignVariableMap> = {\n ...builtInStyles,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n};\n\nexport const containerBuiltInStyles: Partial<DesignVariableMap> = {\n ...builtInStyles,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n // Note: The UI overwrites '0 Auto 0 Auto' as the default value for top-level containers\n defaultValue: '0 0 0 0',\n },\n cfMaxWidth: {\n displayName: 'Max Width',\n type: 'Text',\n group: 'style',\n defaultValue: '1192px',\n },\n};\n\nexport const dividerBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n defaultValue: '20px 0px 20px 0px',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfHeight: {\n displayName: 'Height',\n type: 'Text',\n group: 'style',\n defaultValue: '1px',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(204, 204, 204, 1)',\n },\n};\n\nexport const singleColumnBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundColor: optionalBuiltInStyles.cfBackgroundColor,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfVerticalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align left',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align right',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Vertical alignment',\n },\n cfHorizontalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align top',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align bottom',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Horizontal alignment',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfFlexDirection: {\n displayName: 'Direction',\n type: 'Text',\n group: 'style',\n defaultValue: 'column',\n },\n cfFlexWrap: {\n displayName: 'Wrap objects',\n type: 'Text',\n group: 'style',\n defaultValue: 'nowrap',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfColumnSpan: {\n type: 'Text',\n defaultValue: '6',\n group: 'style',\n },\n cfColumnSpanLock: {\n type: 'Boolean',\n defaultValue: false,\n group: 'style',\n },\n};\n\nexport const columnsBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundColor: optionalBuiltInStyles.cfBackgroundColor,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n // Note: The UI overwrites '0 Auto 0 Auto' as the default value for top-level columns\n defaultValue: '0 0 0 0',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: '1192px',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '10px 10px 10px 10px',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '10px 10px',\n },\n cfColumns: {\n type: 'Text',\n defaultValue: '[6,6]',\n group: 'style',\n },\n cfWrapColumns: {\n type: 'Boolean',\n defaultValue: false,\n group: 'style',\n },\n cfWrapColumnsCount: {\n type: 'Text',\n defaultValue: '2',\n group: 'style',\n },\n};\n","import { builtInStyles, optionalBuiltInStyles } from '@/definitions';\nimport { DesignTokensDefinition } from '@/types';\n\nexport let designTokensRegistry: DesignTokensDefinition = {};\n\n// This function is used to ensure that the composite values are valid since composite values are optional.\n// Therefore only border and in the future text related design tokens are/will be checked in this funciton.\n// Ensuring values for simple key-value design tokens are not neccessary since they are required via typescript.\nconst ensureValidCompositeValues = (designTokenDefinition: DesignTokensDefinition) => {\n // Text token validation\n if (designTokenDefinition.text) {\n for (const textKey in designTokenDefinition.text) {\n const textValue = designTokenDefinition.text[textKey];\n designTokenDefinition.text[textKey] = {\n emphasis: textValue.emphasis || 'none',\n fontSize: textValue.fontSize || '16px',\n case: textValue.case || 'normal',\n fontWeight: textValue.fontWeight || '400',\n lineHeight: textValue.lineHeight || '20px',\n letterSpacing: textValue.letterSpacing || '0px',\n color: textValue.color || '#000000',\n };\n }\n }\n\n // Border validation\n if (designTokenDefinition.border) {\n for (const borderKey in designTokenDefinition.border) {\n const borderValue = designTokenDefinition.border[borderKey];\n designTokenDefinition.border[borderKey] = {\n width: borderValue.width || '1px',\n style: borderValue.style || 'solid',\n color: borderValue.color || '#000000',\n };\n }\n }\n return designTokenDefinition;\n};\n\n/**\n * Register design tokens styling\n * @param designTokenDefinition - {[key:string]: Record<string, string>}\n * @returns void\n */\nexport const defineDesignTokens = (designTokenDefinition: DesignTokensDefinition) => {\n Object.assign(designTokensRegistry, ensureValidCompositeValues(designTokenDefinition));\n};\n\nconst templateStringRegex = /\\${(\\w.+?)}/g;\n\nexport const getDesignTokenRegistration = (breakpointValue: string, variableName: string) => {\n if (!breakpointValue) return breakpointValue;\n\n let resolvedValue = '';\n\n // Match all parts of the string, including design tokens and other parts\n const parts = breakpointValue.match(/(\\${.+?}|\\S+)/g);\n\n if (parts) {\n for (const part of parts) {\n const isDesignToken = templateStringRegex.test(part);\n const tokenValue = isDesignToken ? resolveSimpleDesignToken(part, variableName) : part;\n resolvedValue += `${tokenValue} `;\n }\n }\n\n // Not trimming would end up with a trailing space that breaks the check in `calculateNodeDefaultHeight`\n return resolvedValue.trim();\n};\n\nconst resolveSimpleDesignToken = (templateString: string, variableName: string) => {\n const nonTemplateValue = templateString.replace(templateStringRegex, '$1');\n const [tokenCategory, tokenName] = nonTemplateValue.split('.');\n const tokenValues = designTokensRegistry[tokenCategory];\n\n if (tokenValues && tokenValues[tokenName]) {\n if (variableName === 'cfBorder') {\n const { width, style, color } = tokenValues[tokenName];\n return `${width} ${style} ${color}`;\n }\n\n return tokenValues[tokenName];\n }\n\n if (builtInStyles[variableName]) {\n return builtInStyles[variableName].defaultValue;\n }\n if (optionalBuiltInStyles[variableName]) {\n return optionalBuiltInStyles[variableName].defaultValue;\n }\n return '0px';\n};\n\n// Used in unit tests to reset the design token registry\nexport const resetDesignTokenRegistry = () => {\n designTokensRegistry = {};\n};\n","import { z, ZodIssueCode } from 'zod';\n\n// If more than one version is supported, use z.union\nconst SchemaVersions = z.literal('2023-09-28');\n// Keep deprecated versions here just for reference\nz.union([\n z.literal('2023-08-23'),\n z.literal('2023-07-26'),\n z.literal('2023-06-27'),\n]);\n\nconst DefinitionPropertyTypeSchema = z.enum([\n 'Text',\n 'RichText',\n 'Number',\n 'Date',\n 'Boolean',\n 'Location',\n 'Media',\n 'Object',\n 'Hyperlink',\n 'Array',\n 'Link',\n]);\nconst DefinitionPropertyKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,32}$/, { message: 'Property needs to match: /^[a-zA-Z0-9-_]{1,32}$/' });\nconst PrimitiveValueSchema = z.union([\n z.string(),\n z.boolean(),\n z.number(),\n z.record(z.any(), z.any()),\n z.undefined(),\n]);\nconst UsedComponentsSchema = z.array(z.object({\n sys: z.object({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.literal('Entry'),\n }),\n}));\nconst uuidKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,21}$/, { message: 'Does not match /^[a-zA-Z0-9-_]{1,21}$/' });\nconst DataSourceSchema = z.record(uuidKeySchema, z.object({\n sys: z.object({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.enum(['Entry', 'Asset']),\n }),\n}));\nconst UnboundValuesSchema = z.record(uuidKeySchema, z.object({\n value: PrimitiveValueSchema,\n}));\n/**\n * Property keys for imported components have a limit of 32 characters (to be implemented) while\n * property keys for patterns have a limit of 54 characters (<32-char-variable-name>_<21-char-nanoid-id>).\n * Because we cannot distinguish between the two in the componentTree, we will use the larger limit for both.\n */\nconst propertyKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,54}$/, { message: 'Does not match /^[a-zA-Z0-9-_]{1,54}$/' });\nconst ComponentTreeNodeIdSchema = z\n .string()\n .regex(/^[a-zA-Z0-9]{1,8}$/, { message: 'Does not match /^[a-zA-Z0-9]{1,8}$/' });\nconst breakpointsRefinement = (value, ctx) => {\n if (!value.length || value[0].query !== '*') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The first breakpoint should include the following attributes: { \"query\": \"*\" }`,\n });\n return;\n }\n // Return early if there's only one generic breakpoint\n const hasNoBreakpointsStrategy = value.length === 1;\n if (hasNoBreakpointsStrategy) {\n return;\n }\n // Check if any breakpoint id occurs twice\n const ids = value.map((breakpoint) => breakpoint.id);\n const hasDuplicateIds = new Set(ids).size !== ids.length;\n if (hasDuplicateIds) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint IDs must be unique`,\n });\n return;\n }\n // Skip the first one which is guaranteed to be a wildcard query\n const nonBaseBreakpoints = value.slice(1);\n const isMobileFirstStrategy = nonBaseBreakpoints[0].query.startsWith('>');\n const isDesktopFirstStrategy = nonBaseBreakpoints[0].query.startsWith('<');\n if (isMobileFirstStrategy) {\n const areOperatorsEqual = nonBaseBreakpoints.every(({ query }) => query.startsWith('>'));\n if (!areOperatorsEqual) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint queries must be in the format \">[size]px\" for mobile-first strategy`,\n });\n }\n // Extract the queries boundary by removing the special characters around it\n const queries = nonBaseBreakpoints.map((bp) => parseInt(bp.query.replace(/px|<|>/, '')));\n // Starting with the third breakpoint, check that every query is higher than the one above\n const isIncreasing = queries.every((value, index, array) => index === 0 || value > array[index - 1]);\n if (!isIncreasing) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `When using a mobile-first strategy, all breakpoints must have strictly increasing pixel values`,\n });\n }\n }\n else if (isDesktopFirstStrategy) {\n const areOperatorsEqual = nonBaseBreakpoints.every(({ query }) => query.startsWith('<'));\n if (!areOperatorsEqual) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint queries must be in the format \"<[size]px\" for desktop-first strategy`,\n });\n }\n // Extract the queries boundary by removing the special characters around it\n const queries = nonBaseBreakpoints.map((bp) => parseInt(bp.query.replace(/px|<|>/, '')));\n // Starting with the third breakpoint, check that every query is lower than the one above\n const isDecreasing = queries.every((value, index, array) => index === 0 || value < array[index - 1]);\n if (!isDecreasing) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `When using a desktop-first strategy, all breakpoints must have strictly decreasing pixel values`,\n });\n }\n }\n else if (!isMobileFirstStrategy && !isDesktopFirstStrategy) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `You may only use a mobile-first or desktop-first strategy for breakpoints using '<' or '>' queries`,\n });\n }\n};\nconst ValuesByBreakpointSchema = z.record(z.lazy(() => PrimitiveValueSchema));\nconst BindingSourceTypeEnumSchema = z\n .array(z.enum(['entry', 'asset', 'manual', 'experience']))\n .nonempty();\nconst DesignValueSchema = z\n .object({\n type: z.literal('DesignValue'),\n valuesByBreakpoint: ValuesByBreakpointSchema,\n})\n .strict();\nconst BoundValueSchema = z\n .object({\n type: z.literal('BoundValue'),\n path: z.string(),\n})\n .strict();\nconst HyperlinkValueSchema = z\n .object({\n type: z.literal('HyperlinkValue'),\n linkTargetKey: z.string(),\n /** Allows to override parts of the URL, e.g. the locale */\n overrides: z.object({}).optional(),\n})\n .strict();\nconst UnboundValueSchema = z\n .object({\n type: z.literal('UnboundValue'),\n key: z.string(),\n})\n .strict();\nconst ComponentValueSchema = z\n .object({\n type: z.literal('ComponentValue'),\n key: z.string(),\n})\n .strict();\nconst NoValueSchema = z.object({ type: z.literal('NoValue') }).strict();\nconst ComponentPropertyValueSchema = z.discriminatedUnion('type', [\n DesignValueSchema,\n BoundValueSchema,\n UnboundValueSchema,\n HyperlinkValueSchema,\n ComponentValueSchema,\n NoValueSchema,\n]);\n// TODO: finalize schema structure before release\n// https://contentful.atlassian.net/browse/LUMOS-523\nconst ParameterSchema = z.object({\n type: z.literal('BoundValue'),\n path: z.string(),\n});\nconst ParametersSchema = z.record(propertyKeySchema, ParameterSchema);\nconst BREAKPOINT_QUERY_REGEX = /^\\*$|^[<>][0-9]+px$/;\nconst BreakpointSchema = z\n .object({\n id: propertyKeySchema,\n // Can be replaced with z.templateLiteral when upgrading to zod v4\n query: z.string().refine((s) => BREAKPOINT_QUERY_REGEX.test(s)),\n previewSize: z.string().optional(),\n displayName: z.string(),\n displayIcon: z.enum(['desktop', 'tablet', 'mobile']).optional(),\n})\n .strict();\n// Use helper schema to define a recursive schema with its type correctly below\nconst BaseComponentTreeNodeSchema = z.object({\n id: ComponentTreeNodeIdSchema.optional(),\n definitionId: DefinitionPropertyKeySchema,\n prebindingId: z.string().optional(),\n displayName: z.string().optional(),\n slotId: z.string().optional(),\n variables: z.record(propertyKeySchema, ComponentPropertyValueSchema),\n parameters: ParametersSchema.optional(),\n});\nconst ComponentVariableSchema = z.object({\n displayName: z.string().optional(),\n type: DefinitionPropertyTypeSchema,\n description: z.string().optional(),\n group: z.string().optional(),\n defaultValue: PrimitiveValueSchema.or(ComponentPropertyValueSchema).optional(),\n validations: z\n .object({\n bindingSourceType: BindingSourceTypeEnumSchema.optional(),\n required: z.boolean().optional(),\n format: z.literal('URL').optional(),\n in: z\n .array(z.object({\n value: z.union([z.string(), z.number()]),\n displayName: z.string().optional(),\n }))\n .optional(),\n })\n .optional(),\n});\nconst ComponentTreeNodeSchema = BaseComponentTreeNodeSchema.extend({\n children: z.lazy(() => ComponentTreeNodeSchema.array()),\n}).superRefine(({ id, prebindingId, parameters }, ctx) => {\n // We don't fail if parameters are present but prebindingId is not because\n // older experiences (updated before 21-09-2025) always included parameters\n // and they will start failing if we do.\n if (prebindingId && !parameters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Found \"prebindingId\" but no \"parameters\" for node with id: \"${id}\"`,\n });\n }\n});\nconst ComponentTreeSchema = z\n .object({\n breakpoints: z.array(BreakpointSchema).superRefine(breakpointsRefinement),\n children: z.array(ComponentTreeNodeSchema),\n schemaVersion: SchemaVersions,\n})\n .strict();\nconst localeWrapper = (fieldSchema) => z.record(z.string(), fieldSchema);\n\nconst ExperienceFieldsCMAShapeSchema = z.object({\n componentTree: localeWrapper(ComponentTreeSchema),\n dataSource: localeWrapper(DataSourceSchema),\n unboundValues: localeWrapper(UnboundValuesSchema),\n usedComponents: localeWrapper(UsedComponentsSchema).optional(),\n});\n\nfunction treeVisit(initialNode, onNode) {\n const _treeVisit = (currentNode) => {\n const children = [...currentNode.children];\n onNode(currentNode);\n for (const child of children) {\n _treeVisit(child);\n }\n };\n if (Array.isArray(initialNode)) {\n for (const node of initialNode) {\n _treeVisit(node);\n }\n }\n else {\n _treeVisit(initialNode);\n }\n}\n\nconst MAX_ALLOWED_PATHS = 200;\nconst THUMBNAIL_IDS = [\n 'columns',\n 'columnsPlusRight',\n 'imagesSquare',\n 'subtitles',\n 'rowsPlusBottom',\n 'userRectangle',\n 'textbox',\n 'monitorPlay',\n 'article',\n 'table',\n 'star',\n 'heartStraight',\n 'frameCorners',\n 'rows',\n 'dotsThreeOutline',\n 'listDashes',\n 'checkerBoard',\n 'gridFour',\n 'slideshow',\n 'diamondsFour',\n 'cards',\n 'textColumns',\n 'duplex',\n];\n// TODO: finalize schema structure before release\n// https://contentful.atlassian.net/browse/LUMOS-523\nconst VariableMappingSchema = z.object({\n parameterId: propertyKeySchema,\n type: z.literal('ContentTypeMapping'),\n pathsByContentType: z\n .record(z.string(), z.object({ path: z.string() }))\n .superRefine((paths, ctx) => {\n const variableId = ctx.path[ctx.path.length - 2];\n if (Object.keys(paths).length > MAX_ALLOWED_PATHS) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Too many paths defined for variable mapping with id \"${variableId}\", maximum allowed is ${MAX_ALLOWED_PATHS}`,\n });\n }\n }),\n});\nconst PassToNodeSchema = z\n .object({\n nodeId: propertyKeySchema,\n parameterId: propertyKeySchema,\n prebindingId: propertyKeySchema,\n})\n .strict();\nconst ParameterDefinitionSchema = z.object({\n defaultSource: z\n .strictObject({\n type: z.enum(['Entry']),\n contentTypeId: z.string(),\n link: z.strictObject({\n sys: z.strictObject({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.enum(['Entry']),\n }),\n }),\n })\n .optional(),\n contentTypes: z.array(z.string()).min(1),\n passToNodes: z\n .array(PassToNodeSchema)\n .max(1, 'At most one \"passToNodes\" element is allowed per parameter definition.'),\n});\nconst ParameterDefinitionsSchema = z.record(propertyKeySchema, ParameterDefinitionSchema);\nconst VariableMappingsSchema = z.record(propertyKeySchema, VariableMappingSchema);\nconst ComponentVariablesSchema = z.record(z.string().regex(/^[a-zA-Z0-9-_]{1,54}$/), // Here the key is <variableName>_<nanoidId> so we need to allow for a longer length\nComponentVariableSchema);\nconst PrebindingDefinitionSchema = z\n .object({\n id: propertyKeySchema,\n parameterDefinitions: ParameterDefinitionsSchema,\n variableMappings: VariableMappingsSchema.optional(),\n allowedVariableOverrides: z.array(z.string()).optional(),\n})\n .strict();\nconst ComponentSettingsSchema = z\n .object({\n variableDefinitions: ComponentVariablesSchema,\n thumbnailId: z.enum(THUMBNAIL_IDS).optional(),\n category: z.string().max(50, 'Category must contain at most 50 characters').optional(),\n prebindingDefinitions: z.array(PrebindingDefinitionSchema).length(1).optional(),\n})\n .strict()\n .superRefine((componentSettings, ctx) => {\n const { variableDefinitions, prebindingDefinitions } = componentSettings;\n if (!prebindingDefinitions || prebindingDefinitions.length === 0) {\n return;\n }\n const { parameterDefinitions, variableMappings, allowedVariableOverrides } = prebindingDefinitions[0];\n validateAtMostOneNativeParameterDefinition(parameterDefinitions, ctx);\n validateNoOverlapBetweenMappingAndOverrides(variableMappings, allowedVariableOverrides, ctx);\n validateMappingsAgainstVariableDefinitions(variableMappings, allowedVariableOverrides, variableDefinitions, ctx);\n validateMappingsAgainstParameterDefinitions(variableMappings, parameterDefinitions, ctx);\n});\nconst PatternFieldsCMAShapeSchema = z\n .object({\n componentTree: localeWrapper(ComponentTreeSchema),\n dataSource: localeWrapper(DataSourceSchema),\n unboundValues: localeWrapper(UnboundValuesSchema),\n usedComponents: localeWrapper(UsedComponentsSchema).optional(),\n componentSettings: localeWrapper(ComponentSettingsSchema),\n})\n .superRefine((patternFields, ctx) => {\n const { componentTree, componentSettings } = patternFields;\n // values at this point are wrapped under locale code\n const nonLocalisedComponentTree = Object.values(componentTree)[0];\n const nonLocalisedComponentSettings = Object.values(componentSettings)[0];\n if (!nonLocalisedComponentSettings || !nonLocalisedComponentTree) {\n return;\n }\n validatePassToNodes(nonLocalisedComponentTree.children || [], nonLocalisedComponentSettings || {}, ctx);\n});\nconst validateAtMostOneNativeParameterDefinition = (parameterDefinitions, ctx) => {\n const nativeParamDefinitions = Object.values(parameterDefinitions).filter((paramDefinition) => !(paramDefinition.passToNodes && paramDefinition.passToNodes.length > 0));\n if (nativeParamDefinitions.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Only one native parameter definition (parameter definition without passToNodes) is allowed per prebinding definition.`,\n });\n }\n};\nconst validateNoOverlapBetweenMappingAndOverrides = (variableMappings, allowedVariableOverrides, ctx) => {\n const variableMappingKeys = Object.keys(variableMappings || {});\n const overridesSet = new Set(allowedVariableOverrides || []);\n const overlap = variableMappingKeys.filter((key) => overridesSet.has(key));\n if (overlap.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Found both variable mapping and allowed override for the following keys: ${overlap.map((key) => `\"${key}\"`).join(', ')}.`,\n });\n }\n};\nconst validateMappingsAgainstVariableDefinitions = (variableMappings, allowedVariableOverrides, variableDefinitions, ctx) => {\n const nonDesignVariableDefinitionKeys = Object.entries(variableDefinitions)\n .filter(([_, def]) => def.group !== 'style')\n .map(([key]) => key);\n const variableMappingKeys = Object.keys(variableMappings || {});\n const allKeys = [...variableMappingKeys, ...(allowedVariableOverrides || [])];\n const invalidMappings = allKeys.filter((key) => !nonDesignVariableDefinitionKeys.includes(key));\n if (invalidMappings.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The following variable mappings or overrides are missing from the variable definitions: ${invalidMappings.map((key) => `\"${key}\"`).join(', ')}.`,\n });\n }\n};\nconst validateMappingsAgainstParameterDefinitions = (variableMappings, parameterDefinitions, ctx) => {\n const parameterDefinitionKeys = Object.keys(parameterDefinitions || {});\n for (const [mappingKey, mappingValue] of Object.entries(variableMappings || {})) {\n if (!parameterDefinitionKeys.includes(mappingValue.parameterId)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The variable mapping with id \"${mappingKey}\" references a non-existing parameterId \"${mappingValue.parameterId}\".`,\n });\n }\n }\n};\nconst validatePassToNodes = (rootChildren, componentSettings, ctx) => {\n if (!componentSettings.prebindingDefinitions ||\n componentSettings.prebindingDefinitions.length === 0) {\n return;\n }\n const { parameterDefinitions } = componentSettings.prebindingDefinitions[0];\n const nodeIds = new Set();\n for (const paramDef of Object.values(parameterDefinitions || {})) {\n paramDef.passToNodes?.forEach((n) => nodeIds.add(n.nodeId));\n }\n treeVisit(rootChildren, (node) => {\n if (!node.id)\n return;\n if (nodeIds.has(node.id)) {\n nodeIds.delete(node.id);\n }\n });\n if (nodeIds.size > 0) {\n const stringifiedNodeIds = Array.from(nodeIds)\n .map((id) => `\"${id}\"`)\n .join(', ');\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The following node IDs referenced in passToNodes are not present in the component tree: ${stringifiedNodeIds}.`,\n });\n }\n};\n\nconst ComponentDefinitionSchema = z\n .object({\n id: DefinitionPropertyKeySchema,\n name: z.string(),\n category: z.string().optional(),\n thumbnailUrl: z.string().optional(),\n thumbnailId: z.string().optional(),\n hyperlinkPattern: z.string().optional(),\n children: z.boolean().optional(),\n slots: z\n .record(DefinitionPropertyKeySchema, z.object({ displayName: z.string().optional() }))\n .optional(),\n builtInStyles: z.array(z.string()).optional(),\n tooltip: z.object({ imageUrl: z.string().optional(), description: z.string() }).optional(),\n variables: z.record(DefinitionPropertyKeySchema, ComponentVariableSchema.extend({\n defaultValue: PrimitiveValueSchema.optional(),\n }).superRefine((val, ctx) => {\n switch (val.type) {\n case 'Array':\n if (typeof val.defaultValue !== 'undefined') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue is not supported for \"Array\" type for ${ctx.path.join('.')}`,\n fatal: false,\n });\n }\n break;\n case 'Boolean':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'boolean') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a boolean when type is \"Boolean\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Date':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Date\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Hyperlink':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Hyperlink\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Link':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue is not supported for \"Link\" type for ${ctx.path.join('.')}`,\n fatal: false,\n });\n }\n break;\n case 'Location':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"Location\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Media':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Media\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Number':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'number') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a number when type is \"Number\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Object':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"Object\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'RichText':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"RichText\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Text':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Text\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n }\n })),\n})\n .superRefine((val, ctx) => {\n if (val.children === true && (!!val.variables.children || !!val.slots?.children)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Cannot activate 'children: true' and name a variable or slot 'children' at the same time`,\n fatal: false,\n });\n }\n // Ensure that slots and variables don't use the same names\n if (val.variables && val.slots) {\n Object.keys(val.variables).forEach((name) => {\n if (val.slots[name]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Variable and slot cannot have the same name: ${name}`,\n fatal: false,\n });\n }\n });\n }\n});\n\nvar CodeNames;\n(function (CodeNames) {\n CodeNames[\"Type\"] = \"type\";\n CodeNames[\"Required\"] = \"required\";\n CodeNames[\"Unexpected\"] = \"unexpected\";\n CodeNames[\"Regex\"] = \"regex\";\n CodeNames[\"In\"] = \"in\";\n CodeNames[\"Size\"] = \"size\";\n CodeNames[\"Custom\"] = \"custom\";\n})(CodeNames || (CodeNames = {}));\nconst convertInvalidType = (issue) => {\n const name = issue.received === 'undefined' ? CodeNames.Required : CodeNames.Type;\n const details = issue.received === 'undefined'\n ? `The property \"${issue.path.slice(-1)}\" is required here`\n : `The type of \"${issue.path.slice(-1)}\" is incorrect, expected type: ${issue.expected}`;\n return {\n details: details,\n name: name,\n path: issue.path,\n value: issue.received.toString(),\n };\n};\nconst convertUnrecognizedKeys = (issue) => {\n const missingProperties = issue.keys.map((k) => `\"${k}\"`).join(', ');\n return {\n details: issue.keys.length > 1\n ? `The properties ${missingProperties} are not expected`\n : `The property ${missingProperties} is not expected`,\n name: CodeNames.Unexpected,\n path: issue.path,\n };\n};\nconst convertInvalidString = (issue) => {\n return {\n details: issue.message || 'Invalid string',\n name: issue.validation === 'regex' ? CodeNames.Regex : CodeNames.Unexpected,\n path: issue.path,\n };\n};\nconst convertInvalidEnumValue = (issue) => {\n return {\n details: issue.message || 'Value must be one of expected values',\n name: CodeNames.In,\n path: issue.path,\n value: issue.received.toString(),\n expected: issue.options,\n };\n};\nconst convertInvalidLiteral = (issue) => {\n return {\n details: issue.message || 'Value must be one of expected values',\n name: CodeNames.In,\n path: issue.path,\n value: issue.received,\n expected: [issue.expected],\n };\n};\nconst convertTooBig = (issue) => {\n return {\n details: issue.message || `Size should be at most ${issue.maximum}`,\n name: CodeNames.Size,\n path: issue.path,\n max: issue.maximum,\n };\n};\nconst convertTooSmall = (issue) => {\n return {\n details: issue.message || `Size should be at least ${issue.minimum}`,\n name: CodeNames.Size,\n path: issue.path,\n min: issue.minimum,\n };\n};\nconst defaultConversion = (issue) => {\n return {\n details: issue.message || 'An unexpected error occurred',\n name: CodeNames.Custom,\n path: issue.path.map(String),\n };\n};\nconst zodToContentfulError = (issue) => {\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n return convertInvalidType(issue);\n case ZodIssueCode.unrecognized_keys:\n return convertUnrecognizedKeys(issue);\n case ZodIssueCode.invalid_enum_value:\n return convertInvalidEnumValue(issue);\n case ZodIssueCode.invalid_string:\n return convertInvalidString(issue);\n case ZodIssueCode.too_small:\n return convertTooSmall(issue);\n case ZodIssueCode.too_big:\n return convertTooBig(issue);\n case ZodIssueCode.invalid_literal:\n return convertInvalidLiteral(issue);\n default:\n return defaultConversion(issue);\n }\n};\n\nconst validateBreakpointsDefinition = (breakpoints) => {\n const result = z\n .array(BreakpointSchema)\n .superRefine(breakpointsRefinement)\n .safeParse(breakpoints);\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst validateComponentDefinition = (definition) => {\n const result = ComponentDefinitionSchema.safeParse(definition);\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst VERSION_SCHEMAS$1 = {\n '2023-09-28': PatternFieldsCMAShapeSchema,\n};\n/**\n *\n * @param pattern The pattern entry to validate\n * @param schemaVersionOverride Optional override for the schema version to validate against.\n * By default, the schema version is read from the pattern entry\n * @returns object with success property and optional errors array\n */\nconst validatePatternFields = (\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches KeyValueMap in EntryProps['fields']\npattern, schemaVersionOverride) => {\n let schemaVersion;\n if (schemaVersionOverride) {\n schemaVersion = schemaVersionOverride;\n }\n else if (pattern.fields.componentTree) {\n const locale = Object.keys(pattern.fields.componentTree)[0];\n schemaVersion = pattern.fields.componentTree[locale].schemaVersion;\n }\n const schema = schemaVersion && VERSION_SCHEMAS$1[schemaVersion];\n if (!schema) {\n return {\n success: false,\n errors: [\n {\n name: schemaVersion ? CodeNames.In : CodeNames.Required,\n expected: Object.keys(VERSION_SCHEMAS$1),\n value: schemaVersion,\n path: ['fields', 'componentTree', 'schemaVersion'],\n details: schemaVersion\n ? 'Unsupported schema version'\n : 'The property \"schemaVersion\" is required here',\n },\n ],\n };\n }\n const fieldsToValidate = {\n componentTree: pattern.fields.componentTree,\n dataSource: pattern.fields.dataSource,\n unboundValues: pattern.fields.unboundValues,\n usedComponents: pattern.fields.usedComponents,\n componentSettings: pattern.fields.componentSettings,\n };\n const result = schema.safeParse(fieldsToValidate);\n if (!result.success) {\n return {\n success: result.success,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst VERSION_SCHEMAS = {\n '2023-09-28': ExperienceFieldsCMAShapeSchema,\n};\n// TODO: fix typing when the Entry type is exposed\nfunction isPattern(experience) {\n return experience.fields.componentSettings !== undefined;\n}\n/**\n *\n * @param experience The experience entry to validate\n * @param schemaVersionOverride Optional override for the schema version to validate against.\n * By default, the schema version is read from the experience entry\n * @returns object with success property and optional errors array\n */\nconst validateExperienceFields = (\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches KeyValueMap in EntryProps['fields']\nexperience, schemaVersionOverride) => {\n // If this is a pattern, use the pattern validator\n if (isPattern(experience)) {\n return validatePatternFields(experience, schemaVersionOverride);\n }\n let schemaVersion;\n if (schemaVersionOverride) {\n schemaVersion = schemaVersionOverride;\n }\n else if (experience.fields.componentTree) {\n const locale = Object.keys(experience.fields.componentTree)[0];\n schemaVersion = experience.fields.componentTree[locale].schemaVersion;\n }\n const schema = schemaVersion && VERSION_SCHEMAS[schemaVersion];\n if (!schema) {\n return {\n success: false,\n errors: [\n {\n name: schemaVersion ? CodeNames.In : CodeNames.Required,\n expected: ['2023-09-28'],\n value: schemaVersion,\n path: ['fields', 'componentTree', 'schemaVersion'],\n details: schemaVersion\n ? 'Unsupported schema version'\n : 'The property \"schemaVersion\" is required here',\n },\n ],\n };\n }\n const fieldsToValidate = {\n componentTree: experience.fields.componentTree,\n dataSource: experience.fields.dataSource,\n unboundValues: experience.fields.unboundValues,\n usedComponents: experience.fields.usedComponents,\n };\n const result = schema.safeParse(fieldsToValidate);\n if (!result.success) {\n return {\n success: result.success,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nexport { ComponentDefinitionSchema, ExperienceFieldsCMAShapeSchema as ExperienceSchema_2023_09_28, PatternFieldsCMAShapeSchema as PatternSchema_2023_09_28, validateBreakpointsDefinition, validateComponentDefinition, validateExperienceFields };\n//# sourceMappingURL=index.js.map\n","import { Breakpoint, validateBreakpointsDefinition } from '@contentful/experiences-validators';\n\nexport const breakpointsRegistry: Breakpoint[] = [];\n\n/**\n * Define custom breakpoints that should be used for all your experiences.\n * A breakpoint consists of:\n * - id: a unique identifier for this breakpoint\n * - query: a media query string that defines when this breakpoint is active\n * - previewSize: an optional fixed preview size to be used in the Studio editor when selecting this breakpoint\n * - displayName: the name to be displayed in the Studio editor for this breakpoint\n * - displayIcon: an optional icon to be displayed in the Studio editor for this breakpoint\n *\n * The first breakpoint must use a wildcard query (`*`) to match all sizes.\n *\n * Every subsequent breakpoint inherits the designs of the previous ones by default.\n *\n * The order of breakpoints must be either:\n * - desktop first: from largest to smallest, using `<` operators\n * - mobile first: from smallest to largest, using `>` operators\n *\n * @note changing breakpoints after you have created experiences may break those experiences\n * @example\n * defineBreakpoints([{\n * id: 'desktop',\n * query: '*',\n * displayName: 'Desktop',\n * displayIcon: 'desktop',\n * }, {\n * id: 'tablet',\n * query: '<992px',\n * displayName: 'Tablet',\n * displayIcon: 'tablet',\n * }, {\n * id: 'mobile',\n * query: '<576px',\n * displayName: 'Mobile',\n * displayIcon: 'mobile',\n * }]);\n */\nexport const defineBreakpoints = (breakpoints: Breakpoint[]) => {\n Object.assign(breakpointsRegistry, breakpoints);\n};\n\nexport const runBreakpointsValidation = () => {\n if (!breakpointsRegistry.length) return;\n\n const validation = validateBreakpointsDefinition(breakpointsRegistry);\n if (!validation.success) {\n throw new Error(\n `Invalid breakpoints definition. Failed with errors: \\n${JSON.stringify(validation.errors, null, 2)}`,\n );\n }\n};\n","import { SdkOptions } from '@/types';\n\nexport const sdkOptionsRegistry: SdkOptions = {};\n\n/**\n * Used inside defineComponents to forward registry arguments to this registry\n * of SDK options.\n */\nexport const defineSdkOptions = (options: typeof sdkOptionsRegistry) => {\n Object.assign(sdkOptionsRegistry, options);\n};\n\nexport const getSdkOptions = (): Readonly<typeof sdkOptionsRegistry> => {\n return { ...sdkOptionsRegistry };\n};\n","import { getDesignTokenRegistration } from '@/registries';\nimport { Breakpoint, PrimitiveValue, ValuesByBreakpoint, DesignValue } from '@/types';\n\nexport const MEDIA_QUERY_REGEXP = /(<|>)(\\d{1,})(px|cm|mm|in|pt|pc)$/;\n\nconst toCSSMediaQuery = ({ query }: Breakpoint): string | undefined => {\n if (query === '*') return undefined;\n const match = query.match(MEDIA_QUERY_REGEXP);\n if (!match) return undefined;\n const [, operator, value, unit] = match;\n if (operator === '<') {\n const maxScreenWidth = Number(value) - 1;\n return `(max-width: ${maxScreenWidth}${unit})`;\n } else if (operator === '>') {\n const minScreenWidth = Number(value) + 1;\n return `(min-width: ${minScreenWidth}${unit})`;\n }\n return undefined;\n};\n\n// Remove this helper when upgrading to TypeScript 5.0 - https://github.com/microsoft/TypeScript/issues/48829\nconst findLast = <T>(\n array: Array<T>,\n predicate: Parameters<Array<T>['find']>[0],\n): T | undefined => {\n return [...array].reverse().find(predicate);\n};\n\n// Initialise media query matchers. This won't include the always matching fallback breakpoint.\nexport const mediaQueryMatcher = (breakpoints: Breakpoint[]) => {\n const mediaQueryMatches: Record<string, boolean> = {};\n\n const mediaQueryMatchers = breakpoints\n .map((breakpoint) => {\n const cssMediaQuery = toCSSMediaQuery(breakpoint);\n if (!cssMediaQuery) return undefined;\n if (typeof window === 'undefined') return undefined;\n const mediaQueryMatcher = window.matchMedia(cssMediaQuery);\n\n mediaQueryMatches[breakpoint.id] = mediaQueryMatcher.matches;\n return { id: breakpoint.id, signal: mediaQueryMatcher };\n })\n .filter((matcher): matcher is { id: string; signal: MediaQueryList } => !!matcher);\n\n return [mediaQueryMatchers, mediaQueryMatches] as [\n typeof mediaQueryMatchers,\n typeof mediaQueryMatches,\n ];\n};\n\nexport const getActiveBreakpointIndex = (\n breakpoints: Breakpoint[],\n mediaQueryMatches: Record<string, boolean>,\n fallbackBreakpointIndex: number,\n) => {\n // The breakpoints are ordered (desktop-first: descending by screen width, mobile-first: ascending by screen width).\n const breakpointsWithMatches = breakpoints.map(({ id }, index) => ({\n id,\n index,\n // The fallback breakpoint with wildcard query will always match\n isMatch: mediaQueryMatches[id] ?? index === fallbackBreakpointIndex,\n }));\n\n // Find the last breakpoint in the list that matches (desktop-first: the narrowest one, mobile-first: the widest one)\n const mostSpecificIndex = findLast(breakpointsWithMatches, ({ isMatch }) => isMatch)?.index;\n return mostSpecificIndex ?? fallbackBreakpointIndex;\n};\n\nexport const getFallbackBreakpointIndex = (breakpoints: Breakpoint[]) => {\n // The validation ensures that there will be exactly one breakpoint using the wildcard query.\n // If there is none, we just take the first one in the list.\n return Math.max(\n breakpoints.findIndex(({ query }) => query === '*'),\n 0,\n );\n};\n\nconst builtInStylesWithDesignTokens = [\n 'cfMargin',\n 'cfPadding',\n 'cfGap',\n 'cfWidth',\n 'cfHeight',\n 'cfBackgroundColor',\n 'cfBorder',\n 'cfBorderRadius',\n 'cfFontSize',\n 'cfLineHeight',\n 'cfLetterSpacing',\n 'cfTextColor',\n 'cfMaxWidth',\n];\n\nexport const isValidBreakpointValue = (\n value: PrimitiveValue,\n): value is Exclude<PrimitiveValue, undefined> => {\n return value !== undefined && value !== null && value !== '';\n};\n\nexport const getValueForBreakpoint = (\n valuesByBreakpoint: ValuesByBreakpoint | undefined,\n breakpoints: Breakpoint[],\n activeBreakpointIndex: number,\n fallbackBreakpointIndex: number,\n /** Provide the name for built-in styles to replace design tokens. Supported properties are:\n * cfMargin, cfPadding, cfGap, cfWidth, cfHeight, cfBackgroundColor,\n * cfBorder, cfBorderRadius, cfFontSize, cfLineHeight, cfLetterSpacing,\n * cfTextColor, cfMaxWidth\n */\n propertyName?: string,\n resolveDesignTokens = true,\n) => {\n const eventuallyResolveDesignTokens = (value: PrimitiveValue) => {\n // This is used externally in the web app to determine the original persisted value\n if (!resolveDesignTokens) {\n return value;\n }\n // For some built-in design properties, we support design tokens\n if (propertyName && builtInStylesWithDesignTokens.includes(propertyName)) {\n return getDesignTokenRegistration(value as string, propertyName);\n }\n // For all other properties, we just return the breakpoint-specific value\n return value;\n };\n\n if (valuesByBreakpoint instanceof Object) {\n // Assume that the values are sorted by media query to apply the cascading CSS logic\n for (let index = activeBreakpointIndex; index >= 0; index--) {\n const breakpointId = breakpoints[index]?.id;\n if (isValidBreakpointValue(valuesByBreakpoint[breakpointId])) {\n // If the value is defined, we use it and stop the breakpoints cascade\n return eventuallyResolveDesignTokens(valuesByBreakpoint[breakpointId]);\n }\n }\n\n const fallbackBreakpointId = breakpoints[fallbackBreakpointIndex]?.id;\n if (isValidBreakpointValue(valuesByBreakpoint[fallbackBreakpointId])) {\n return eventuallyResolveDesignTokens(valuesByBreakpoint[fallbackBreakpointId]);\n }\n } else {\n // Old design properties did not support breakpoints, keep for backward compatibility\n return valuesByBreakpoint;\n }\n};\n\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue,\n overwriteValue: DesignValue | undefined,\n): DesignValue;\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue,\n): DesignValue;\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue | undefined,\n): DesignValue | undefined;\n/** Overwrites the default value breakpoint by breakpoint. If a breakpoint\n * is not overwritten, it will fall back to the default. */\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue | undefined,\n): DesignValue | undefined {\n if (!defaultValue || !overwriteValue) {\n return defaultValue ?? overwriteValue;\n }\n\n const mergedValuesByBreakpoint = { ...defaultValue.valuesByBreakpoint };\n\n for (const [breakpointId, value] of Object.entries(overwriteValue.valuesByBreakpoint)) {\n if (!isValidBreakpointValue(value)) {\n continue;\n }\n mergedValuesByBreakpoint[breakpointId] = value;\n }\n\n return {\n type: 'DesignValue',\n valuesByBreakpoint: mergedValuesByBreakpoint,\n };\n}\n\nexport const BREAKPOINTS_STRATEGY_DESKTOP_FIRST = 'desktop-first';\nexport const BREAKPOINTS_STRATEGY_MOBILE_FIRST = 'mobile-first';\nexport type BreakpointsStrategy =\n | typeof BREAKPOINTS_STRATEGY_DESKTOP_FIRST\n | typeof BREAKPOINTS_STRATEGY_MOBILE_FIRST\n | undefined;\n\n/**\n * Detects the breakpoint strategy based on the provided breakpoints.\n *\n * @param breakpoints The array of breakpoints to analyze.\n * @returns The detected breakpoint strategy or undefined if not determinable.\n */\nexport const detectBreakpointsStrategy = (breakpoints: Breakpoint[]): BreakpointsStrategy => {\n if (breakpoints.length < 2) {\n return undefined;\n }\n\n const hasMobileFirst = breakpoints.slice(1).every((bp) => bp.query.startsWith('>'));\n if (hasMobileFirst) {\n return BREAKPOINTS_STRATEGY_MOBILE_FIRST;\n }\n\n const hasDesktopFirst = breakpoints.slice(1).every((bp) => bp.query.startsWith('<'));\n if (hasDesktopFirst) {\n return BREAKPOINTS_STRATEGY_DESKTOP_FIRST;\n }\n\n return undefined;\n};\n","const CF_DEBUG_KEY = 'cf_debug';\n\n/**\n * To ensure that the localStorage API can be used safely, we check\n * for availability (e.g. undefined in Node.js). Additionally, we\n * check if the localStorage can be used as some browsers throw a\n * SecurityError (e.g. Brave or Chromium with specific settings).\n */\nconst checkLocalStorageAvailability = () => {\n try {\n // Even the typeof check can throw an error in an agressive browser like Brave (requires using the deprecated flag #block-all-cookies-toggle)\n if (typeof localStorage === 'undefined' || localStorage === null) {\n return false;\n }\n // Attempt to set and remove an item to check if localStorage is enabled\n const TEST_KEY = 'cf_test_local_storage';\n localStorage.setItem(TEST_KEY, 'yes');\n if (localStorage.getItem(TEST_KEY) === 'yes') {\n localStorage.removeItem(TEST_KEY);\n return true;\n } else {\n return false;\n }\n } catch (_error) {\n return false;\n }\n};\n\nconst DEBUG_LEVELS_HIERARCHY = ['error', 'warn', 'log', 'debug'] as const;\ntype DEBUG_LEVEL = (typeof DEBUG_LEVELS_HIERARCHY)[number];\n\nexport class DebugLogger {\n private static instance: DebugLogger | null = null;\n private activeLevel: DEBUG_LEVEL = 'warn';\n\n constructor() {\n if (!checkLocalStorageAvailability()) {\n return;\n }\n\n // Default to checking localStorage for the debug mode on initialization if in browser\n if (localStorage.getItem(CF_DEBUG_KEY) === 'true') {\n this.activeLevel = 'debug';\n }\n }\n\n public static getInstance(): DebugLogger {\n if (this.instance === null) {\n this.instance = new DebugLogger();\n }\n return this.instance;\n }\n\n public getActiveLevel() {\n return this.activeLevel;\n }\n\n public setActiveLevel(level: DEBUG_LEVEL) {\n this.activeLevel = level;\n\n if (!checkLocalStorageAvailability()) {\n return;\n }\n if (this.activeLevel === 'debug' || this.activeLevel === 'log') {\n localStorage.setItem(CF_DEBUG_KEY, 'true');\n } else {\n localStorage.removeItem(CF_DEBUG_KEY);\n }\n }\n\n // Log method for different levels (error, warn, log)\n private logger(level: DEBUG_LEVEL): typeof console.log {\n return (...args: unknown[]) => {\n const levelPriority = DEBUG_LEVELS_HIERARCHY.indexOf(level);\n const activeLevelPriority = DEBUG_LEVELS_HIERARCHY.indexOf(this.activeLevel);\n const enabled = levelPriority <= activeLevelPriority;\n if (enabled) {\n console[level](...args);\n }\n };\n }\n\n // Public methods for logging\n public error = this.logger('error');\n public warn = this.logger('warn');\n public log = this.logger('log');\n public debug = this.logger('debug');\n}\n\nexport const debug = DebugLogger.getInstance();\n\n/** Set the logging level to `debug` */\nexport const enableDebug = () => {\n debug.setActiveLevel('debug');\n console.log('Debug mode enabled');\n};\n\n/** Set the debug level to `warn` */\nexport const disableDebug = () => {\n debug.setActiveLevel('warn');\n console.log('Debug mode disabled');\n};\n\n/** Set the debug level to the provided level */\nexport const setDebugLevel = (level: DEBUG_LEVEL) => {\n debug.setActiveLevel(level);\n console.log(`Debug mode set to ${level}`);\n};\n","type Rect = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nexport const findOutermostCoordinates = (first: Rect, second: Rect) => {\n return {\n top: Math.min(first.top, second.top),\n right: Math.max(first.right, second.right),\n bottom: Math.max(first.bottom, second.bottom),\n left: Math.min(first.left, second.left),\n };\n};\n\nexport const isElementHidden = (rect: DOMRect): boolean => {\n /** if the rect has no size and position, its element is not rendered in the DOM */\n return rect.width === 0 && rect.height === 0 && rect.x === 0 && rect.y === 0;\n};\n\nexport const getElementCoordinates = (element: Element): DOMRect => {\n const rect = element.getBoundingClientRect();\n\n /**\n * If element does not have children, or element has it's own width or height,\n * return the element's coordinates.\n */\n if (element.children.length === 0 || rect.width !== 0 || rect.height !== 0) {\n return rect;\n }\n\n const rects: Rect[] = [];\n\n /**\n * If element has children, or element does not have it's own width and height,\n * we find the cordinates of the children, and assume the outermost coordinates of the children\n * as the coordinate of the element.\n *\n * E.g child1 => {top: 2, bottom: 3, left: 4, right: 6} & child2 => {top: 1, bottom: 8, left: 12, right: 24}\n * The final assumed coordinates of the element would be => { top: 1, right: 24, bottom: 8, left: 4 }\n */\n for (const child of element.children) {\n const childRect = getElementCoordinates(child);\n if (childRect.width !== 0 || childRect.height !== 0) {\n const { top, right, bottom, left } = childRect;\n rects.push({ top, right, bottom, left });\n }\n }\n\n if (rects.length === 0) {\n return rect;\n }\n\n const { top, right, bottom, left } = rects.reduce(findOutermostCoordinates);\n\n return DOMRect.fromRect({\n x: left,\n y: top,\n height: bottom - top,\n width: right - left,\n });\n};\n","import type { Link } from '@/types';\n\nexport const isLinkToAsset = (variable: unknown): variable is Link<'Asset'> => {\n if (variable === null || typeof variable !== 'object') return false;\n\n // The `'prop' in` pattern is informing TypeScript of the object shape, no need to cast `as`.\n if (!('sys' in variable)) return false;\n if (variable.sys === null || typeof variable.sys !== 'object') return false;\n\n if (!('linkType' in variable.sys)) return false;\n if (!('id' in variable.sys)) return false;\n if (!('type' in variable.sys)) return false;\n\n return (\n variable.sys?.linkType === 'Asset' &&\n typeof variable.sys?.id === 'string' &&\n !!variable.sys?.id &&\n variable.sys?.type === 'Link'\n );\n};\n","import type { Link } from '@/types';\n\nexport const isLinkToEntry = (variable: unknown): variable is Link<'Entry'> => {\n if (variable === null || typeof variable !== 'object') return false;\n\n // The `'prop' in` pattern is informing TypeScript of the object shape, no need to cast `as`.\n if (!('sys' in variable)) return false;\n if (variable.sys === null || typeof variable.sys !== 'object') return false;\n\n if (!('linkType' in variable.sys)) return false;\n if (!('id' in variable.sys)) return false;\n if (!('type' in variable.sys)) return false;\n\n return (\n variable.sys?.linkType === 'Entry' &&\n typeof variable.sys?.id === 'string' &&\n !!variable.sys?.id &&\n variable.sys?.type === 'Link'\n );\n};\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\n\nexport function isLink(\n maybeLink: UnresolvedLink<'Entry'> | Entry | undefined,\n): maybeLink is UnresolvedLink<'Entry'>;\nexport function isLink(\n maybeLink: UnresolvedLink<'Asset'> | Asset | undefined,\n): maybeLink is UnresolvedLink<'Asset'>;\nexport function isLink(maybeLink: unknown): maybeLink is UnresolvedLink<'Entry' | 'Asset'>;\nexport function isLink(maybeLink: unknown): maybeLink is UnresolvedLink<'Entry' | 'Asset'> {\n if (maybeLink === null) return false;\n if (typeof maybeLink !== 'object') return false;\n\n const link = maybeLink as {\n sys?: {\n id?: string;\n type?: string;\n linkType?: string;\n };\n };\n\n return Boolean(link.sys?.id) && link.sys?.type === 'Link' && Boolean(link.sys?.linkType);\n}\n","import { Asset, Entry } from 'contentful';\nimport cloneDeep from 'lodash.clonedeep';\n\n/**\n * Localizes the provided entry or asset to match the regular format of CDA/CPA entities.\n * Note that this function does not apply a fallback to the default locale nor does it check\n * the content type for the localization setting of each field.\n * It will simply resolve each field to the requested locale. As using single and multiple\n * reference fields is still considered an experimental feature, this function does not handle\n * recursive localization of deeper referenced entities.\n *\n * If the entity is already localized, it will return the entity as is.\n *\n * Note that localization is later on determined by the existence of the `sys.locale` property (matching the API shape).\n *\n * @example\n * ```\n * const multiLocaleEntry = { fields: { title: { 'en-US': 'Hello' } } };\n * const localizedEntry = localizeEntity(multiLocaleEntry, 'en-US');\n * console.log(localizedEntry.fields.title); // 'Hello'\n * ```\n */\nexport function localizeEntity<T extends Asset | Entry>(entity: T, locale: string): T {\n if (!entity || !entity.fields) {\n throw new Error('Invalid entity provided');\n }\n if (entity.sys.locale) {\n return entity;\n }\n const cloned = cloneDeep(entity);\n // Set the requested locale as entry locale to follow the API shape:\n // https://www.contentful.com/developers/docs/references/content-delivery-api/#/introduction/common-resource-attributes\n cloned.sys.locale = locale;\n\n for (const key in cloned.fields) {\n cloned.fields[key] = cloned.fields[key][locale];\n }\n\n return cloned;\n}\n","/**\n * This module encapsulates format of the path to a deep reference.\n */\n\nimport { BoundValue, ComponentPropertyValue } from '@contentful/experiences-validators';\nimport { Asset, Entry } from 'contentful';\nimport { debug } from './debugLogger';\n\nexport type PreboundVariable = {\n type: 'BoundValue';\n path: string;\n isPrebound: boolean;\n pathsByContentType: Record<string, { path: string }>;\n};\n\nexport const isPreboundProp = (variable: ComponentPropertyValue): variable is PreboundVariable => {\n return (\n variable.type === 'BoundValue' &&\n typeof (variable as PreboundVariable).isPrebound === 'boolean' &&\n !!(variable as PreboundVariable).pathsByContentType\n );\n};\n\nexport type UnresolvedFieldset = Array<[null, string, string?]>;\nexport type Fieldset = Array<[Entry | Asset, string, string?]>;\n\nexport const parseDataSourcePathIntoFieldset = (path: string): UnresolvedFieldset => {\n const parsedPath = parseDeepPath(path);\n\n if (null === parsedPath) {\n throw new Error(`Cannot parse path '${path}' as deep path`);\n }\n\n return parsedPath.fields.map((field) => [null, field, '~locale']);\n};\n\n/**\n * Parse path into components, supports L1 references (one reference follow) atm.\n * @param path from data source. eg. `/uuid123/fields/image/~locale/fields/file/~locale`\n * eg. `/uuid123/fields/file/~locale/fields/title/~locale`\n * @returns\n */\nexport const parseDataSourcePathWithL1DeepBindings = (\n path: string,\n): {\n key: string;\n field: string;\n referentField: string;\n} => {\n const parsedPath = parseDeepPath(path);\n\n if (null === parsedPath) {\n throw new Error(`Cannot parse path '${path}' as deep path`);\n }\n\n return {\n key: parsedPath.key,\n field: parsedPath.fields[0],\n referentField: parsedPath.fields[1],\n };\n};\n\n/**\n * Detects if paths is valid deep-path, like:\n * - /gV6yKXp61hfYrR7rEyKxY/fields/mainStory/~locale/fields/cover/~locale/fields/title/~locale\n * or regular, like:\n * - /6J8eA60yXwdm5eyUh9fX6/fields/mainStory/~locale\n * @returns\n */\nexport const isDeepPath = (deepPathCandidate: string): boolean => {\n const deepPathParsed = parseDeepPath(deepPathCandidate);\n if (!deepPathParsed) {\n return false;\n }\n return deepPathParsed.fields.length > 1;\n};\n\nexport const isDeepPrebinding = (boundValueProperty: BoundValue): boolean => {\n if (!boundValueProperty?.path || boundValueProperty.type !== 'BoundValue') {\n return false;\n }\n\n if (!isPreboundProp(boundValueProperty)) {\n return false;\n }\n\n if (isDeepPath(boundValueProperty.path)) {\n return true;\n }\n\n const hasDeepPathByContentType = Object.values(boundValueProperty.pathsByContentType || {}).some(\n (val) => isDeepPath(val.path),\n );\n\n return hasDeepPathByContentType;\n};\n\nexport const getPrebindingPathBySourceEntry = (\n preboundValueProperty: PreboundVariable,\n getHeadEntityByDataSourceKey: (id: string) => Entry | Asset | undefined,\n): string | undefined => {\n if (!isPreboundProp(preboundValueProperty)) {\n return undefined;\n }\n\n // incomplete path due to several content types and not known default source\n const [, dataSourceKey] = preboundValueProperty.path.split('/');\n if (!dataSourceKey) {\n return undefined;\n }\n\n const headEntity = getHeadEntityByDataSourceKey(dataSourceKey);\n if (headEntity?.sys.type !== 'Entry') {\n return undefined;\n }\n\n const contentTypeId = headEntity.sys.contentType.sys.id;\n if (!preboundValueProperty.pathsByContentType?.[contentTypeId]) {\n return undefined;\n }\n\n return preboundValueProperty.pathsByContentType?.[contentTypeId]?.path;\n};\n\ntype DeepPathParsed = {\n key: string;\n fields: string[]; // without locale (as it's not used in SDK atm)\n};\n\nconst parseDeepPath = (deepPathCandidate: string): DeepPathParsed | null => {\n // ALGORITHM:\n // We start with deep path in form:\n // /uuid123/fields/mainStory/~locale/fields/cover/~locale/fields/title/~locale\n // First turn string into array of segments\n // ['', 'uuid123', 'fields', 'mainStory', '~locale', 'fields', 'cover', '~locale', 'fields', 'title', '~locale']\n // Then group segments into intermediate represenatation - chunks, where each non-initial chunk starts with 'fields'\n // [\n // [ \"\", \"uuid123\" ],\n // [ \"fields\", \"mainStory\", \"~locale\" ],\n // [ \"fields\", \"cover\", \"~locale\" ],\n // [ \"fields\", \"title\", \"~locale\" ]\n // ]\n // Then check \"initial\" chunk for corretness\n // Then check all \"field-leading\" chunks for correctness\n\n const isValidInitialChunk = (initialChunk: string[]) => {\n // must have start with '' and have at least 2 segments, second non-empty\n // eg. /-_432uuid123123\n return /^\\/([^/^~]+)$/.test(initialChunk.join('/'));\n };\n\n const isValidFieldChunk = (fieldChunk: string[]) => {\n // must start with 'fields' and have at least 3 segments, second non-empty and last segment must be '~locale'\n // eg. fields/-32234mainStory/~locale\n return /^fields\\/[^/^~]+\\/~locale$/.test(fieldChunk.join('/'));\n };\n\n const deepPathSegments = deepPathCandidate.split('/');\n const chunks = chunkSegments(deepPathSegments, { startNextChunkOnElementEqualTo: 'fields' });\n if (chunks.length <= 1) {\n return null; // malformed path, even regular paths have at least 2 chunks\n } else if (chunks.length === 2) {\n return null; // deep paths have at least 3 chunks\n }\n\n // With 3+ chunks we can now check for deep path correctness\n const [initialChunk, ...fieldChunks] = chunks;\n\n if (!isValidInitialChunk(initialChunk)) {\n return null;\n }\n\n if (!fieldChunks.every(isValidFieldChunk)) {\n return null;\n }\n\n return {\n key: initialChunk[1], // pick uuid from initial chunk ['','uuid123'],\n fields: fieldChunks.map((fieldChunk) => fieldChunk[1]), // pick only fieldName eg. from ['fields','mainStory', '~locale'] we pick `mainStory`\n };\n};\n\nconst chunkSegments = (\n segments: string[],\n { startNextChunkOnElementEqualTo }: { startNextChunkOnElementEqualTo: string },\n): Array<string[]> => {\n const chunks: Array<string[]> = [];\n let currentChunk: string[] = [];\n\n const isSegmentBeginningOfChunk = (segment: string) => segment === startNextChunkOnElementEqualTo;\n const excludeEmptyChunks = (chunk: string[]) => chunk.length > 0;\n\n for (let i = 0; i < segments.length; i++) {\n const isInitialElement = i === 0;\n const segment = segments[i];\n if (isInitialElement) {\n currentChunk = [segment];\n } else if (isSegmentBeginningOfChunk(segment)) {\n chunks.push(currentChunk);\n currentChunk = [segment];\n } else {\n currentChunk.push(segment);\n }\n }\n chunks.push(currentChunk);\n\n return chunks.filter(excludeEmptyChunks);\n};\n\nexport const lastPathNamedSegmentEq = (path: string, expectedName: string) => {\n // `/key123/fields/featureImage/~locale/fields/file/~locale`\n // ['', 'key123', 'fields', 'featureImage', '~locale', 'fields', 'file', '~locale']\n const segments = path.split('/');\n\n if (segments.length < 2) {\n debug.warn(\n `[experiences-core::pathSchema] Attempting to check whether last named segment of the path (${path}) equals to '${expectedName}', but the path doesn't have enough segments.`,\n );\n return false;\n }\n const secondLast = segments[segments.length - 2]; // skipping trailing '~locale'\n return secondLast === expectedName;\n};\n","import { Entry } from 'contentful';\n\nexport const resolveHyperlinkPattern = (\n pattern: string,\n entry: Entry | null,\n locale: string | null,\n) => {\n if (!entry || !locale) return null;\n const variables = {\n entry,\n locale,\n };\n\n return buildTemplate({ template: pattern, context: variables });\n};\n\nfunction getValue(obj, path) {\n return path\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.')\n .reduce((o, k) => (o || {})[k], obj);\n}\n\nexport function addLocale(str: string, locale: string): string {\n const fieldsIndicator = 'fields';\n const fieldsIndex = str.indexOf(fieldsIndicator);\n if (fieldsIndex !== -1) {\n const dotIndex = str.indexOf('.', fieldsIndex + fieldsIndicator.length + 1); // +1 for '.'\n if (dotIndex !== -1) {\n return str.slice(0, dotIndex + 1) + locale + '.' + str.slice(dotIndex + 1);\n }\n }\n\n return str;\n}\n\nexport function getTemplateValue(\n ctx: { entry: Entry; locale: string },\n path: string,\n): string | (() => string) {\n const pathWithLocale = addLocale(path, ctx.locale);\n const retrievedValue = getValue(ctx, pathWithLocale) as string | Record<string, string>;\n\n return typeof retrievedValue === 'object' && retrievedValue !== null\n ? retrievedValue[ctx.locale]!\n : retrievedValue;\n}\n\nexport function buildTemplate({\n template,\n context,\n}: {\n template: string;\n context: { entry: Entry; locale: string };\n}): string {\n const localeVariable = /{\\s*locale\\s*}/g;\n // e.g. \"{ page.sys.id }\"\n const variables = /{\\s*([\\S]+?)\\s*}/g;\n\n return (\n template\n // first replace the locale pattern\n .replace(localeVariable, context.locale)\n // then resolve the remaining variables\n .replace(variables, (_, path: string) => {\n const fallback = path + '_NOT_FOUND';\n const value = getTemplateValue(context, path) ?? fallback;\n\n // using _.result didn't gave proper results so we run our own version of it\n return String(typeof value === 'function' ? value() : value);\n })\n );\n}\n","import { CF_STYLE_ATTRIBUTES } from '../constants';\nimport type { PrimitiveValue } from '../types';\n\nconst stylesToKeep = ['cfImageAsset'];\nconst stylesToRemove = CF_STYLE_ATTRIBUTES.filter((style) => !stylesToKeep.includes(style));\n// cfWrapColumns & cfWrapColumnsCount are no real style attributes as they are handled on the editor side\nconst propsToRemove = ['cfSsrClassName', 'cfWrapColumns', 'cfWrapColumnsCount'];\n\nexport const sanitizeNodeProps = (nodeProps: Record<PropertyKey, PrimitiveValue>) => {\n const keysToRemove = [...stylesToRemove, ...propsToRemove];\n const sanitizedProps = Object.fromEntries(\n Object.entries(nodeProps).filter(([key]) => !keysToRemove.includes(key)),\n );\n return sanitizedProps;\n};\n","import { getSdkOptions } from '@/registries/sdkOptionsRegistry';\nimport {\n StyleProps,\n CSSProperties,\n OptimizedBackgroundImageAsset,\n BackgroundImageScalingOption,\n BackgroundImageAlignmentOption,\n} from '@/types';\n\n/** Turn the visibility value into a style object that can be used for inline styles in React */\nexport const transformVisibility = (value?: boolean): CSSProperties => {\n if (value === false) {\n return {\n display: 'none !important',\n };\n }\n // Don't explicitly set anything when visible to not overwrite values like `grid` or `flex`.\n return {};\n};\n\nexport const transformGridColumn = (span?: string): CSSProperties => {\n if (!span) {\n return {};\n }\n\n return {\n gridColumn: `span ${span}`,\n };\n};\n\nexport const transformBorderStyle = (value?: string): CSSProperties => {\n if (!value) return {};\n const parts = value.split(' ');\n // Just accept the passed value\n if (parts.length < 3) return { border: value };\n const [borderSize, borderStyle, ...borderColorParts] = parts;\n const borderColor = borderColorParts.join(' ');\n return {\n border: `${borderSize} ${borderStyle} ${borderColor}`,\n };\n};\n\nexport const transformAlignment = (\n cfHorizontalAlignment?: string,\n cfVerticalAlignment?: string,\n cfFlexDirection = 'column',\n): CSSProperties =>\n cfFlexDirection === 'row'\n ? {\n alignItems: cfHorizontalAlignment,\n justifyContent:\n cfVerticalAlignment === 'center' ? `safe ${cfVerticalAlignment}` : cfVerticalAlignment,\n }\n : {\n alignItems: cfVerticalAlignment,\n justifyContent:\n cfHorizontalAlignment === 'center'\n ? `safe ${cfHorizontalAlignment}`\n : cfHorizontalAlignment,\n };\n\ninterface CSSPropertiesForBackground extends CSSProperties {\n backgroundImage: string;\n backgroundImage2?: string;\n backgroundRepeat: 'repeat' | 'no-repeat';\n backgroundSize?: 'cover' | 'contain';\n\n backgroundPosition?:\n | 'left top'\n | 'left center'\n | 'left bottom'\n | 'right top'\n | 'right center'\n | 'right bottom'\n | 'center top'\n | 'center center'\n | 'center bottom';\n}\n\nexport const transformBackgroundImage = (\n cfBackgroundImageUrl: string | OptimizedBackgroundImageAsset | null | undefined,\n cfBackgroundImageOptions?: StyleProps['cfBackgroundImageOptions'],\n): CSSPropertiesForBackground | undefined => {\n const matchBackgroundSize = (scaling?: BackgroundImageScalingOption) => {\n if ('fill' === scaling) return 'cover';\n if ('fit' === scaling) return 'contain';\n };\n\n const matchBackgroundPosition = (\n alignment?: BackgroundImageAlignmentOption,\n ): CSSPropertiesForBackground['backgroundPosition'] | undefined => {\n if (!alignment || 'string' !== typeof alignment) {\n return;\n }\n let [horizontalAlignment, verticalAlignment] = alignment.trim().split(/\\s+/, 2);\n\n const isHorizontalValid = ['left', 'right', 'center'].includes(horizontalAlignment);\n const isVerticalValid = ['top', 'bottom', 'center'].includes(verticalAlignment);\n\n horizontalAlignment = isHorizontalValid ? horizontalAlignment : 'left';\n verticalAlignment = isVerticalValid ? verticalAlignment : 'top';\n\n return `${horizontalAlignment} ${verticalAlignment}` as CSSPropertiesForBackground['backgroundPosition'];\n };\n\n if (!cfBackgroundImageUrl) {\n return;\n }\n\n let backgroundImage: string;\n let backgroundImageSet: string | undefined;\n\n if (typeof cfBackgroundImageUrl === 'string') {\n backgroundImage = `url(${cfBackgroundImageUrl})`;\n } else {\n const imgSet = cfBackgroundImageUrl.srcSet?.join(',');\n backgroundImage = `url(${cfBackgroundImageUrl.url})`;\n backgroundImageSet = `image-set(${imgSet})`;\n }\n\n return {\n backgroundImage,\n backgroundImage2: backgroundImageSet,\n backgroundRepeat: cfBackgroundImageOptions?.scaling === 'tile' ? 'repeat' : 'no-repeat',\n backgroundPosition: matchBackgroundPosition(cfBackgroundImageOptions?.alignment),\n backgroundSize: matchBackgroundSize(cfBackgroundImageOptions?.scaling),\n };\n};\n\nexport const transformTextAlign = (\n value?: CSSProperties['textAlign'],\n): undefined | CSSProperties['textAlign'] => {\n if (!value) return undefined;\n const sdkOptions = getSdkOptions();\n // New behavior: translate left/right to start/end\n // Customer can opt out by activating this global option toggle\n if (!sdkOptions.__disableTextAlignmentTransform) {\n if (value === 'left') return 'start';\n if (value === 'right') return 'end';\n }\n return value;\n};\n","import md5 from 'md5';\nimport {\n transformAlignment,\n transformBackgroundImage,\n transformBorderStyle,\n transformGridColumn,\n transformTextAlign,\n} from './styleTransformers';\nimport { isContentfulStructureComponent, isStructureWithRelativeHeight } from '../components';\nimport { EMPTY_CONTAINER_SIZE } from '../../constants';\nimport {\n CSSProperties,\n StyleProps,\n PrimitiveValue,\n ExperienceTreeNode,\n ComponentTreeNode,\n} from '@/types';\n\nexport const toCSSAttribute = (key: string) => {\n let val = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\n // Remove the number from the end of the key to allow for overrides on style properties\n val = val.replace(/\\d+$/, '');\n\n return val;\n};\n\n/**\n * Turns a list of CSSProperties into a joined CSS string that can be\n * used for <style> tags. Per default it creates a minimized version.\n * For editor mode, use the `useWhitespaces` flag to create a more readable version.\n *\n * @param cssProperties list of CSS properties\n * @param useWhitespaces adds whitespaces and newlines between each rule\n * @returns a string of CSS rules\n */\nexport const stringifyCssProperties = (\n cssProperties: CSSProperties,\n useWhitespaces: boolean = false,\n) => {\n const rules = Object.entries(cssProperties)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) =>\n useWhitespaces ? `${toCSSAttribute(key)}: ${value};` : `${toCSSAttribute(key)}:${value};`,\n );\n return rules.join(useWhitespaces ? '\\n' : '');\n};\n\nexport const buildStyleTag = ({ styles, nodeId }: { styles: CSSProperties; nodeId?: string }) => {\n const generatedStyles = stringifyCssProperties(styles, true);\n const className = `cfstyles-${nodeId ? nodeId : md5(generatedStyles)}`;\n const styleRule = `.${className}{ ${generatedStyles} }`;\n\n return [className, styleRule];\n};\n\n/**\n * Takes plain design values and transforms them into CSS properties. Undefined values will\n * be filtered out.\n *\n * **Example Input**\n * ```\n * values = {\n * cfVisibility: 'visible',\n * cfMargin: '10px',\n * cfFlexReverse: true,\n * cfImageOptions: { objectFit: 'cover' },\n * // ...\n * }\n * ```\n * **Example Output**\n * ```\n * cssProperties = {\n * margin: '10px',\n * flexDirection: 'row-reverse',\n * objectFit: 'cover',\n * // ...\n * }\n * ```\n */\nexport const buildCfStyles = (values: Partial<StyleProps>): CSSProperties => {\n const cssProperties = {\n margin: values.cfMargin,\n padding: values.cfPadding,\n backgroundColor: values.cfBackgroundColor,\n width: values.cfWidth || values.cfImageOptions?.width,\n height: values.cfHeight || values.cfImageOptions?.height,\n maxWidth: values.cfMaxWidth,\n ...transformGridColumn(values.cfColumnSpan),\n ...transformBorderStyle(values.cfBorder),\n borderRadius: values.cfBorderRadius,\n gap: values.cfGap,\n ...transformAlignment(\n values.cfHorizontalAlignment,\n values.cfVerticalAlignment,\n values.cfFlexDirection,\n ),\n flexDirection:\n values.cfFlexReverse && values.cfFlexDirection\n ? `${values.cfFlexDirection}-reverse`\n : values.cfFlexDirection,\n flexWrap: values.cfFlexWrap,\n ...transformBackgroundImage(values.cfBackgroundImageUrl, values.cfBackgroundImageOptions),\n fontSize: values.cfFontSize,\n fontWeight: values.cfTextBold ? 'bold' : values.cfFontWeight,\n fontStyle: values.cfTextItalic ? 'italic' : undefined,\n textDecoration: values.cfTextUnderline ? 'underline' : undefined,\n lineHeight: values.cfLineHeight,\n letterSpacing: values.cfLetterSpacing,\n color: values.cfTextColor,\n textAlign: transformTextAlign(values.cfTextAlign),\n textTransform: values.cfTextTransform,\n objectFit: values.cfImageOptions?.objectFit,\n objectPosition: values.cfImageOptions?.objectPosition,\n };\n const cssPropertiesWithoutUndefined = Object.fromEntries(\n Object.entries(cssProperties).filter(([, value]) => value !== undefined),\n );\n return cssPropertiesWithoutUndefined;\n};\n\n/**\n * **Only meant to be used in editor mode!**\n *\n * If the node is an empty structure component with a relative height (e.g. '100%'),\n * it might render with a zero height. In this case, add a min height of 80px to ensure\n * that child nodes can be added via drag & drop.\n */\nexport const addMinHeightForEmptyStructures = (\n cssProperties: CSSProperties,\n node: ComponentTreeNode,\n) => {\n if (\n !node.children.length &&\n isStructureWithRelativeHeight(node.definitionId, cssProperties.height)\n ) {\n return {\n ...cssProperties,\n minHeight: EMPTY_CONTAINER_SIZE,\n };\n }\n return cssProperties;\n};\n\n/**\n * Container/section default behavior:\n * Default height => height: EMPTY_CONTAINER_SIZE\n * If a container component has children => height: 'fit-content'\n */\nexport const calculateNodeDefaultHeight = ({\n blockId,\n children,\n value,\n}: {\n blockId?: string;\n children: ExperienceTreeNode['children'];\n value: PrimitiveValue;\n}) => {\n if (!blockId || !isContentfulStructureComponent(blockId) || value !== 'auto') {\n return value;\n }\n\n if (children.length) {\n return '100%';\n }\n\n return EMPTY_CONTAINER_SIZE;\n};\n","import {\n ExperienceTree,\n ExperienceDataSource,\n ExperienceUnboundValues,\n ExperienceEntry,\n ComponentDefinition,\n} from '@/types';\nimport { Entry } from 'contentful';\nimport { ASSEMBLY_DEFAULT_CATEGORY } from '@/constants';\n\nexport const getDataFromTree = (\n tree: ExperienceTree,\n): {\n dataSource: ExperienceDataSource;\n unboundValues: ExperienceUnboundValues;\n} => {\n let dataSource: ExperienceDataSource = {};\n let unboundValues: ExperienceUnboundValues = {};\n const queue = [...tree.root.children];\n\n while (queue.length) {\n const node = queue.shift();\n if (!node) {\n continue;\n }\n\n dataSource = { ...dataSource, ...node.data.dataSource };\n unboundValues = { ...unboundValues, ...node.data.unboundValues };\n\n if (node.children.length) {\n queue.push(...node.children);\n }\n }\n\n return {\n dataSource,\n unboundValues,\n };\n};\n\nexport const generateRandomId = (letterCount: number): string => {\n const LETTERS = 'abcdefghijklmnopqvwxyzABCDEFGHIJKLMNOPQVWXYZ';\n const NUMS = '0123456789';\n const ALNUM = NUMS + LETTERS;\n\n const times = (n: number, callback: () => string) => Array.from({ length: n }, callback);\n const random = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min;\n\n return times(letterCount, () => ALNUM[random(0, ALNUM.length - 1)]).join('');\n};\n\nexport const checkIsAssemblyNode = ({\n componentId,\n usedComponents,\n}: {\n componentId: string;\n usedComponents: ExperienceEntry['fields']['usedComponents'];\n}) => {\n if (!usedComponents?.length) return false;\n\n return usedComponents.some((usedComponent) => usedComponent.sys.id === componentId);\n};\n\n/**\n * This check assumes that the entry is already ensured to be an experience, i.e. the\n * content type of the entry is an experience type with the necessary annotations.\n **/\nexport const checkIsAssemblyEntry = (entry: Entry): boolean => {\n return Boolean(entry.fields?.componentSettings);\n};\n\nexport const checkIsAssemblyDefinition = (component?: ComponentDefinition) =>\n component?.category === ASSEMBLY_DEFAULT_CATEGORY;\n\ninterface ParsedValue {\n value: number;\n unit: 'px' | 'em' | 'rem';\n}\n\nexport function parseCSSValue(input: string): ParsedValue | null {\n const regex = /^(\\d+(\\.\\d+)?)(px|em|rem)$/;\n const match = input.match(regex);\n\n if (match) {\n return {\n value: parseFloat(match[1]),\n unit: match[3] as 'px' | 'em' | 'rem',\n };\n }\n\n return null;\n}\n\nexport function getTargetValueInPixels(targetWidthObject: ParsedValue) {\n switch (targetWidthObject.unit) {\n case 'px':\n return targetWidthObject.value;\n case 'em':\n return targetWidthObject.value * 16;\n case 'rem':\n return targetWidthObject.value * 16;\n default:\n return targetWidthObject.value;\n }\n}\n\n/**\n * Creates a component definition for an assembly. As all assemblies use the same definition in the SDK,\n * all should be registered via this function.\n */\nexport const createAssemblyDefinition = (definitionId: string): ComponentDefinition => {\n return {\n id: definitionId,\n name: 'Component',\n variables: {},\n children: true,\n category: ASSEMBLY_DEFAULT_CATEGORY,\n };\n};\n","/**\n * Turns a condition like `<768px` or `>1024px` into a media query rule.\n * For example, `<768px` becomes `max-width:768px` and `>1024px` becomes `min-width:1024px`.\n */\nconst toMediaQueryRule = (condition: string) => {\n const [evaluation, pixelValue] = [condition[0], condition.substring(1)];\n const mediaQueryRule = evaluation === '<' ? 'max-width' : 'min-width';\n return `(${mediaQueryRule}:${pixelValue})`;\n};\n\n/**\n * Converts a map of class names to CSS strings into a single CSS string.\n *\n * @param cssByClassName map of class names to CSS strings containing all rules for each class\n * @returns joined string of all CSS class definitions\n */\nconst toCompoundCss = (cssByClassName: Record<string, string>): string => {\n return Object.entries(cssByClassName).reduce<string>((acc, [className, css]) => {\n if (css === '') return acc;\n return `${acc}.${className}{${css}}`;\n }, ``);\n};\n\n/**\n * Create a single CSS string containing all class definitions for a given media query.\n *\n * @param cssByClassName map of class names to CSS strings containing all rules for each class\n * @param condition e.g. \"*\", \"<520px\", \">520px\"\n * @param nextCondition optional next condition to create a disjunct media query that doesn't affect the next breakpoint\n * @returns joined string of all CSS class definitions wrapped into media queries\n */\nexport const toMediaQuery = ({\n cssByClassName,\n condition,\n nextCondition,\n}: {\n cssByClassName: Record<string, string>;\n condition: string;\n nextCondition?: string;\n}) => {\n const compoundCss = toCompoundCss(cssByClassName);\n if (compoundCss === '') {\n return '';\n }\n\n const queryRule = toMediaQueryRule(condition);\n if (!nextCondition) {\n if (condition === '*') {\n return compoundCss;\n }\n return `@media${queryRule}{${compoundCss}}`;\n }\n\n const nextRule = toMediaQueryRule(nextCondition);\n if (condition === '*') {\n return `@media not ${nextRule}{${compoundCss}}`;\n }\n return `@media${queryRule} and (not ${nextRule}){${compoundCss}}`;\n};\n","export function getOptimizedImageUrl(\n url: string,\n width?: number,\n quality?: number,\n format?: string,\n) {\n if (url.startsWith('//')) {\n url = 'https:' + url;\n }\n\n const params = new URLSearchParams();\n if (width) {\n params.append('w', width.toString());\n }\n if (quality && quality > 0 && quality < 100) {\n params.append('q', quality.toString());\n }\n if (format) {\n params.append('fm', format);\n }\n\n const queryString = params.toString();\n return `${url}${queryString ? '?' + queryString : ''}`;\n}\n","import { SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport { AssetFile } from 'contentful';\n\nexport type ValidFormats = (typeof SUPPORTED_IMAGE_FORMATS)[number];\n\nexport interface AssetFileWithRequiredImage extends AssetFile {\n details: Required<AssetFile['details']>;\n}\n\nexport function validateParams(\n file: AssetFile,\n quality: number,\n format?: ValidFormats,\n): file is AssetFileWithRequiredImage {\n if (!file.details.image) {\n throw Error('No image in file asset to transform');\n }\n if (quality < 0 || quality > 100) {\n throw Error('Quality must be between 0 and 100');\n }\n if (format && !SUPPORTED_IMAGE_FORMATS.includes(format)) {\n throw Error(`Format must be one of ${SUPPORTED_IMAGE_FORMATS.join(', ')}`);\n }\n return true;\n}\n","import { OptimizedBackgroundImageAsset } from '@/types';\nimport { getOptimizedImageUrl } from './getOptimizedImageUrl';\nimport { AssetFile } from 'contentful';\nimport { ValidFormats, validateParams, AssetFileWithRequiredImage } from './mediaUtils';\n\nconst MAX_WIDTH_ALLOWED = 2000;\n\nexport const getOptimizedBackgroundImageAsset = (\n file: AssetFile,\n widthStyle: string,\n quality: string = '100%',\n format?: ValidFormats,\n): OptimizedBackgroundImageAsset => {\n const qualityNumber = Number(quality.replace('%', ''));\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n const url = file.url;\n\n const { width1x, width2x } = getWidths(widthStyle, file);\n\n const imageUrl1x = getOptimizedImageUrl(url, width1x, qualityNumber, format);\n const imageUrl2x = getOptimizedImageUrl(url, width2x, qualityNumber, format);\n\n const srcSet = [`url(${imageUrl1x}) 1x`, `url(${imageUrl2x}) 2x`];\n\n const returnedUrl = getOptimizedImageUrl(url, width2x, qualityNumber, format);\n\n const optimizedBackgroundImageAsset: OptimizedBackgroundImageAsset = {\n url: returnedUrl,\n srcSet,\n file,\n };\n\n return optimizedBackgroundImageAsset;\n\n function getWidths(widthStyle: string, file: AssetFileWithRequiredImage) {\n let width1x = 0;\n let width2x = 0;\n const intrinsicImageWidth = file.details.image.width;\n if (widthStyle.endsWith('px')) {\n width1x = Math.min(Number(widthStyle.replace('px', '')), intrinsicImageWidth);\n } else {\n width1x = Math.min(MAX_WIDTH_ALLOWED, intrinsicImageWidth);\n }\n width2x = Math.min(width1x * 2, intrinsicImageWidth);\n return { width1x, width2x };\n }\n};\n","import md5 from 'md5';\nimport { Asset, Entry, UnresolvedLink } from 'contentful/dist/types/types';\nimport {\n ComponentPropertyValue,\n DesignValue,\n ExperienceComponentSettings,\n ExperienceComponentTree,\n ExperienceDataSource,\n ExperienceUnboundValues,\n PrimitiveValue,\n} from '@contentful/experiences-validators';\nimport { buildCfStyles, stringifyCssProperties } from './stylesUtils';\n// import {\nimport { checkIsAssemblyNode, getTargetValueInPixels, parseCSSValue } from '@/utils/utils';\nimport { isValidBreakpointValue, mergeDesignValuesByBreakpoint } from '../breakpoints';\nimport { toMediaQuery } from './toMediaQuery';\nimport { transformVisibility } from './styleTransformers';\nimport { debug } from '@/utils/debugLogger';\nimport { builtInStyles, optionalBuiltInStyles } from '@/definitions';\nimport { designTokensRegistry } from '@/registries';\nimport {\n BackgroundImageOptions,\n ComponentTreeNode,\n DesignTokensDefinition,\n Experience,\n StyleProps,\n} from '@/types';\nimport { CF_STYLE_ATTRIBUTES, SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport { getOptimizedBackgroundImageAsset } from '@/utils/transformers/media/getOptimizedBackgroundImageAsset';\nimport { AssetDetails, AssetFile } from 'contentful';\n\ntype FlattenedDesignTokens = Record<\n string,\n string | { width?: string; style?: string; color?: string }\n>;\n\nexport const detachExperienceStyles = (experience: Experience): string | undefined => {\n const experienceTreeRoot = experience.entityStore?.experienceEntryFields\n ?.componentTree as ExperienceComponentTree;\n\n if (!experienceTreeRoot) {\n return;\n }\n\n const isRenderingAPatternEntry = experience.entityStore?.isExperienceAPatternEntry;\n\n const mapOfDesignVariableKeys = flattenDesignTokenRegistry(designTokensRegistry);\n\n // getting breakpoints from the entry componentTree field\n const { breakpoints } = experienceTreeRoot;\n\n // creating the structure which I thought would work best for aggregation\n const mediaQueryDataByBreakpoint = breakpoints.reduce(\n (mediaQueryTemplate, breakpoint) => ({\n ...mediaQueryTemplate,\n [breakpoint.id]: {\n condition: breakpoint.query,\n cssByClassName: {},\n visibilityCssByClassName: {},\n },\n }),\n {} as Record<\n string,\n {\n condition: string;\n cssByClassName: Record<string, string>;\n visibilityCssByClassName: Record<string, string>;\n }\n >,\n );\n\n // getting the breakpoint ids\n const breakpointIds = Object.keys(mediaQueryDataByBreakpoint);\n\n const iterateOverTreeAndExtractStyles = ({\n componentTree,\n dataSource,\n unboundValues,\n componentSettings,\n componentVariablesOverwrites,\n patternWrapper,\n wrappingPatternIds,\n wrappingPatternNodeIds = isRenderingAPatternEntry ? ['root'] : [],\n }: {\n componentTree: ExperienceComponentTree;\n dataSource: ExperienceDataSource;\n unboundValues: ExperienceUnboundValues;\n componentSettings?: ExperienceComponentSettings;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n patternWrapper?: ComponentTreeNode;\n wrappingPatternIds: Set<string>;\n wrappingPatternNodeIds?: string[];\n }) => {\n // traversing the tree\n const queue: ComponentTreeNode[] = [];\n\n queue.push(...componentTree.children);\n\n // for each tree node\n while (queue.length) {\n const currentNode = queue.shift();\n if (!currentNode) {\n break;\n }\n\n const usedComponents = experience.entityStore?.usedComponents ?? [];\n\n const isPatternNode = checkIsAssemblyNode({\n componentId: currentNode.definitionId,\n usedComponents,\n });\n\n if (isPatternNode) {\n // When detecting a circular dependency among patterns, stop to avoid an infinite loop\n if (wrappingPatternIds.has(currentNode.definitionId)) {\n continue;\n }\n\n const patternEntry = usedComponents.find(\n (component) => component.sys.id === currentNode!.definitionId,\n );\n\n if (!patternEntry || !('fields' in patternEntry)) {\n continue;\n }\n\n const nextComponentVariablesOverwrites = resolveComponentVariablesOverwrites({\n patternNode: currentNode,\n wrapperComponentVariablesOverwrites: componentVariablesOverwrites,\n wrapperComponentSettings: componentSettings,\n });\n\n // the node of a used pattern contains only the definitionId (id of the patter entry)\n // as well as the variables overwrites\n // the layout of a pattern is stored in it's entry\n iterateOverTreeAndExtractStyles({\n // that is why we pass it here to iterate of the pattern tree\n componentTree: patternEntry.fields.componentTree,\n // but we pass the data source of the experience entry cause that's where the binding is stored\n dataSource,\n // unbound values of a pattern store the default values of pattern variables\n unboundValues: patternEntry.fields.unboundValues,\n // this is where we can map the pattern variable to it's default value\n componentSettings: patternEntry.fields.componentSettings,\n // and this is where the over-writes for the default values are stored\n // yes, I know, it's a bit confusing\n componentVariablesOverwrites: nextComponentVariablesOverwrites,\n // pass top-level pattern node to store instance-specific child styles for rendering\n patternWrapper: currentNode,\n wrappingPatternIds: new Set([...wrappingPatternIds, currentNode.definitionId]),\n wrappingPatternNodeIds: [...wrappingPatternNodeIds, currentNode.id || ''],\n });\n continue;\n }\n\n /* [Data format] `currentNode.variables` uses the following serialized shape:\n * {\n * cfMargin: { type: 'DesignValue', valuesByBreakpoint: { desktop: '1px', tablet: '2px' } },\n * cfPadding: { type: 'DesignValue', valuesByBreakpoint: { desktop: '3px' } }\n * cfBackgroundImageUrl: { type: 'BoundValue', path: '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale' }\n * asdf1234: { type: 'ComponentValue', key: 'qwer567' }\n * // ...\n * }\n */\n\n // so first, I convert it into a map to help me make it easier to access the values\n const propsByBreakpoint = indexByBreakpoint({\n variables: currentNode.variables,\n breakpointIds,\n unboundValues: unboundValues,\n dataSource: dataSource,\n componentSettings,\n componentVariablesOverwrites,\n getBoundEntityById: (id: string) => {\n return experience.entityStore?.entities.find(\n (entity: Entry | Asset) => entity.sys.id === id,\n );\n },\n });\n\n // When the node is hidden for any breakpoint, we need to handle this separately with a disjunct media query.\n const isAnyVisibilityValueHidden = Object.values(propsByBreakpoint).some(\n (designProperties) => designProperties.cfVisibility === false,\n );\n // We always need an explicit value when using disjunct media queries\n // Example: desktop uses \"false\" and tablet is undefined -> we need to set `display: none` for tablet as well.\n let previousVisibilityValue: boolean | undefined = undefined;\n\n /* [Data format] `propsByBreakpoint` is a map of \"breakpointId > propertyName > plainValue\":\n * {\n * desktop: {\n * cfMargin: '1px',\n * cfWidth: '100%',\n * cfBackgroundImageUrl: 'https://example.com/image.jpg'\n * //...\n * }\n * }\n */\n\n const currentNodeClassNames: string[] = [];\n // Chain IDs to avoid overwriting styles across multiple instances of the same pattern\n // e.g. `{outerPatternNodeId}{innerPatternNodeId}-{currentNodeId}`\n // (!) Notice that the chain of patterns (before the dash) follows the format of prebinding/ parameters\n const currentNodeIdsChain = [...wrappingPatternNodeIds, currentNode.id].join('-');\n\n // For each breakpoint, resolve design tokens, create the CSS and generate a unique className.\n for (const breakpointId of breakpointIds) {\n const propsByBreakpointWithResolvedDesignTokens = Object.entries(\n propsByBreakpoint[breakpointId],\n ).reduce((acc, [variableName, variableValue]) => {\n return {\n ...acc,\n [variableName]: maybePopulateDesignTokenValue(\n variableName,\n variableValue,\n mapOfDesignVariableKeys,\n ),\n };\n }, {} as Partial<StyleProps>);\n\n // Convert CF-specific property names to CSS variables, e.g. `cfMargin` -> `margin`\n const cfStyles = buildCfStyles(propsByBreakpointWithResolvedDesignTokens);\n\n /* [Data format] `cfStyles` is a list of CSSProperties (React format):\n * {\n * margin: '1px',\n * width: '100%',\n * backgroundImage: 'url(https://example.com/image.jpg)'\n * //...\n * }\n */\n const generatedCss = stringifyCssProperties(cfStyles);\n\n if (!generatedCss && !isAnyVisibilityValueHidden) {\n // If there are no styles to apply, skip this breakpoint completely including the class name\n continue;\n }\n\n /* [Data format] `generatedCss` is the minimized CSS string that will be added to the DOM:\n * generatedCss = \"margin: 1px;width: 100%;...\"\n */\n\n // - Adding breakpointId to ensure not using the same IDs between breakpoints as this leads to\n // conflicts between different breakpoint values from multiple nodes where the hash would be equal\n // - Adding wrapping pattern nodes IDs to avoid conflicts between similar nested patterns as those\n // could override each others CSS for some breakpoints just through the order of `<style>` tags in the DOM.\n const styleHash = md5(currentNodeIdsChain + breakpointId + generatedCss);\n\n // and prefix the className to make sure the value can be processed\n const className = `cf-${styleHash}`;\n\n // I save the generated hashes into an array to later save it in the tree node\n // as cfSsrClassName prop\n // making sure to avoid the duplicates in case styles for > 1 breakpoints are the same\n if (!currentNodeClassNames.includes(className)) {\n currentNodeClassNames.push(className);\n }\n\n // Only if the hash was not used yet, save the CSS to the stylesheet\n if (!mediaQueryDataByBreakpoint[breakpointId].cssByClassName[className]) {\n mediaQueryDataByBreakpoint[breakpointId].cssByClassName[className] = generatedCss;\n }\n\n // Special case for visibility to override any custom `display` values but only for a specific breakpoint.\n if (isAnyVisibilityValueHidden) {\n const visibilityValue =\n propsByBreakpointWithResolvedDesignTokens.cfVisibility ?? previousVisibilityValue;\n previousVisibilityValue = visibilityValue;\n const visibilityStyles = transformVisibility(visibilityValue);\n const visibilityCss = stringifyCssProperties(visibilityStyles);\n if (!mediaQueryDataByBreakpoint[breakpointId].visibilityCssByClassName[className]) {\n mediaQueryDataByBreakpoint[breakpointId].visibilityCssByClassName[className] =\n visibilityCss;\n }\n }\n }\n\n // all generated classNames are saved in the tree node\n // to be handled by the sdk later\n // each node will get N classNames, where N is the number of breakpoints\n // browsers process classNames in the order they are defined\n // meaning that in case of className1 className2 className3\n // className3 will win over className2 and className1\n // making sure that we respect the order of breakpoints from\n // we can achieve \"desktop first\" or \"mobile first\" approach to style over-writes\n if (patternWrapper) {\n // @ts-expect-error -- valueByBreakpoint is not explicitly defined, but it's already defined in the patternWrapper styles\n patternWrapper.variables.cfSsrClassName = {\n ...(patternWrapper.variables.cfSsrClassName ?? {}),\n type: 'DesignValue',\n [currentNodeIdsChain]: {\n valuesByBreakpoint: {\n [breakpointIds[0]]: currentNodeClassNames.join(' '),\n },\n },\n };\n } else {\n currentNode.variables.cfSsrClassName = {\n type: 'DesignValue',\n valuesByBreakpoint: {\n [breakpointIds[0]]: currentNodeClassNames.join(' '),\n },\n };\n }\n\n queue.push(...currentNode.children);\n }\n };\n\n iterateOverTreeAndExtractStyles({\n componentTree: experienceTreeRoot,\n dataSource: experience.entityStore?.dataSource ?? {},\n unboundValues: experience.entityStore?.unboundValues ?? {},\n componentSettings: experience.entityStore?.experienceEntryFields?.componentSettings,\n wrappingPatternIds: new Set(\n experience.entityStore?.experienceEntryId ? [experience.entityStore.experienceEntryId] : [],\n ),\n });\n\n // once the whole tree was traversed, for each breakpoint, I aggregate the styles\n // for each generated className into one css string\n return Object.values(mediaQueryDataByBreakpoint).reduce(\n (acc, { condition, cssByClassName, visibilityCssByClassName }, index) => {\n const mediaQueryCss = toMediaQuery({ cssByClassName, condition });\n\n // Handle visibility separately to use disjunct media queries (\"if desktop but not tablet ...\")\n // Enables to hide on one breakpoint but render any unknown custom `display` value on another breakpoint.\n const visibilityMediaQueryCss = toMediaQuery({\n cssByClassName: visibilityCssByClassName,\n condition,\n // Breakpoint validation ensures that it starts with the '*' breakpoint\n nextCondition: Object.values(mediaQueryDataByBreakpoint)[index + 1]?.condition,\n });\n\n return `${acc}${mediaQueryCss}${visibilityMediaQueryCss}`;\n },\n '',\n );\n};\n\n/**\n * Rendering pattern nodes inside pattern entry by injecting default values from the top:\n * When there is a ComponentValue but the recursive logic is not wrapped by a pattern node (no `componentVariablesOverwrites`),\n * a pattern entry is rendered directly. In this case, we replace each ComponentValue with the default value from componentSettings.\n */\nconst injectDefaultValuesForComponentValues = ({\n patternNode,\n wrapperComponentSettings,\n}: {\n patternNode: ComponentTreeNode;\n wrapperComponentSettings?: ExperienceComponentSettings;\n}): Record<string, ComponentPropertyValue> => {\n const propertyDefinitions = wrapperComponentSettings?.variableDefinitions;\n return Object.entries(patternNode.variables).reduce(\n (resolvedProperties, [propertyName, propertyValue]) => {\n if (propertyValue.type === 'ComponentValue') {\n const componentValueKey = propertyValue.key;\n const componentDefaultValue = propertyDefinitions?.[componentValueKey].defaultValue;\n // We're only considering design properties for styles generation\n if ((componentDefaultValue as DesignValue)?.type === 'DesignValue') {\n resolvedProperties[propertyName] = componentDefaultValue;\n }\n } else {\n // Do nothing when it's not a ComponentValue & just keep the defined value\n resolvedProperties[propertyName] = propertyValue;\n }\n return resolvedProperties;\n },\n {},\n );\n};\n\n/**\n * In case of nested patterns, we need to resolve the ComponentValue properties and overwrite them with the value\n * stored in the parent component.\n *\n *\n * @param patternNode - pattern node which contains the variables\n * @param componentVariablesOverwrites - object which contains the variables of the parent component\n */\nconst resolveComponentVariablesOverwrites = ({\n patternNode,\n wrapperComponentVariablesOverwrites,\n wrapperComponentSettings,\n}: {\n patternNode: ComponentTreeNode;\n wrapperComponentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n wrapperComponentSettings?: ExperienceComponentSettings;\n}): Record<string, ComponentPropertyValue> => {\n // In case of rendering a pattern entry, there are no custom ComponentValues.\n // So we pass down the default values from this pattern node down to each deeper pattern level.\n if (!wrapperComponentVariablesOverwrites) {\n return injectDefaultValuesForComponentValues({\n patternNode,\n wrapperComponentSettings,\n });\n }\n\n // Rendering (nested) pattern node inside another pattern node (for both experience & pattern entry):\n // The `wrapperComponentVariablesOverwrites` from the top-most pattern node is passed through to each child\n // node (and nested pattern nodes). It replaces each ComponentValue in the subtree with either the overwrite\n // or the default value.\n return Object.entries(patternNode?.variables).reduce(\n (resolvedValues, [propertyName, propertyValue]) => {\n if (propertyValue.type === 'ComponentValue') {\n // Copying the values from the parent node\n const overwritingValue = wrapperComponentVariablesOverwrites?.[propertyValue.key];\n // Property definition from the parent pattern\n const propertyDefinition =\n wrapperComponentSettings?.variableDefinitions?.[propertyValue.key];\n const defaultValue = propertyDefinition?.defaultValue as ComponentPropertyValue | undefined;\n // The overwriting value is either a custom value from the experience or default value from a\n // wrapping pattern node that got trickled down to this nesting level.\n resolvedValues[propertyName] = mergeDefaultAndOverwriteValues(\n defaultValue,\n overwritingValue,\n );\n } else {\n // Keep raw values\n resolvedValues[propertyName] = propertyValue;\n }\n return resolvedValues;\n },\n {},\n );\n};\n\nexport const isCfStyleAttribute = (variableName: string): variableName is keyof StyleProps => {\n return CF_STYLE_ATTRIBUTES.includes(variableName);\n};\n\nexport const maybePopulateDesignTokenValue = (\n variableName: string,\n variableValue: unknown,\n mapOfDesignVariableKeys: FlattenedDesignTokens,\n) => {\n // TODO: refactor to reuse fn from core package\n if (typeof variableValue !== 'string') {\n return variableValue;\n }\n\n if (!isCfStyleAttribute(variableName)) {\n return variableValue;\n }\n\n // matches ${...} and captures the content between ${ and }\n // ${color.Blue}, ${spacing.Sizes.Large} or ${border.Text Heading.Small}\n const templateStringRegex = /\\$\\{(\\w[^}]*)}/g;\n\n const result = variableValue\n .replace(templateStringRegex, (_: string, rawKey: string): string => {\n const value = mapOfDesignVariableKeys[rawKey];\n\n if (!value) {\n if (builtInStyles[variableName]?.defaultValue) {\n return String(builtInStyles[variableName]!.defaultValue);\n }\n if (optionalBuiltInStyles[variableName]?.defaultValue) {\n return String(optionalBuiltInStyles[variableName]!.defaultValue);\n }\n\n return '0px';\n }\n if (variableName === 'cfBorder' || variableName.startsWith('cfBorder_')) {\n if (typeof value === 'object') {\n const { width, style, color } = value;\n return `${width} ${style} ${color}`;\n }\n }\n return String(value);\n })\n // Replace all multiple spaces with a single space\n .replace(/ +/g, ' ');\n return result;\n};\n\nconst transformMedia = (boundAsset: Asset, width?: string, options?: BackgroundImageOptions) => {\n try {\n const asset = boundAsset as Asset;\n // Target width (px/rem/em) will be applied to the css url if it's lower than the original image width (in px)\n const assetDetails = asset.fields.file?.details as AssetDetails;\n\n const assetWidth = assetDetails?.image?.width || 0; // This is always in px\n if (!options) {\n return asset.fields.file?.url as string;\n }\n const targetWidthObject = parseCSSValue(options.targetSize); // Contains value and unit (px/rem/em) so convert and then compare to assetWidth\n const targetValue = targetWidthObject ? getTargetValueInPixels(targetWidthObject) : assetWidth;\n\n if (targetValue < assetWidth) width = `${targetValue}px`;\n return getOptimizedBackgroundImageAsset(\n asset.fields.file as AssetFile,\n width as string,\n options.quality,\n options.format as (typeof SUPPORTED_IMAGE_FORMATS)[number],\n );\n } catch (error) {\n debug.error('[experiences-core::ssrStyles] Error transforming image asset', error);\n }\n return boundAsset.fields.file?.url as string;\n};\n\nexport const resolveBackgroundImageBinding = ({\n variableData,\n getBoundEntityById,\n dataSource = {},\n unboundValues = {},\n componentVariablesOverwrites,\n componentSettings = { variableDefinitions: {} },\n options,\n width,\n}: {\n variableData: ComponentPropertyValue;\n getBoundEntityById: (id: string) => Entry | Asset | undefined;\n unboundValues?: ExperienceUnboundValues;\n dataSource?: ExperienceDataSource;\n componentSettings?: ExperienceComponentSettings;\n // patternNode.variables - a place which contains bindings scoped to the pattern\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n options?: BackgroundImageOptions;\n width?: string;\n}) => {\n if (variableData.type === 'UnboundValue') {\n const uuid = variableData.key;\n return unboundValues[uuid]?.value as string;\n }\n\n if (variableData.type === 'ComponentValue') {\n const variableDefinitionKey = variableData.key;\n const variableDefinition = componentSettings.variableDefinitions[variableDefinitionKey];\n\n // @ts-expect-error TODO: Types coming from validations erroneously assume that `defaultValue` can be a primitive value (e.g. string or number)\n const defaultValueKey = variableDefinition.defaultValue?.key;\n const defaultValue = unboundValues[defaultValueKey].value;\n\n const overwriteValue = componentVariablesOverwrites?.[variableDefinitionKey];\n\n // overwriteValue is a ComponentValue we can safely return the default value\n if (!overwriteValue || overwriteValue.type === 'ComponentValue') {\n return defaultValue as string | undefined;\n }\n\n // at this point overwriteValue will either be type of 'DesignValue' or 'BoundValue'\n // so we recursively run resolution again to resolve it\n const resolvedValue = resolveBackgroundImageBinding({\n variableData: overwriteValue,\n getBoundEntityById,\n dataSource,\n unboundValues,\n componentVariablesOverwrites,\n componentSettings,\n options,\n width,\n });\n\n return resolvedValue || (defaultValue as string | undefined);\n }\n\n if (variableData.type === 'BoundValue') {\n // '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale'\n const [, uuid] = variableData.path.split('/');\n const binding = dataSource[uuid] as UnresolvedLink<'Entry' | 'Asset'> | undefined;\n // Safeguard against edge cases - we should not have bound style values that do not have a data source entry.\n // However, just in case, we handle it here as empty and allow the user to replace without errors.\n if (!binding) {\n return;\n }\n\n const boundEntity = getBoundEntityById(binding.sys.id);\n if (!boundEntity) {\n return;\n }\n\n if (boundEntity.sys.type === 'Asset') {\n return transformMedia(boundEntity as Asset, width, options);\n } else {\n // '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale'\n // becomes\n // '/fields/assetReference/~locale/fields/file/~locale'\n const pathWithoutUUID = variableData.path.split(uuid)[1];\n // '/fields/assetReference/~locale/fields/file/~locale'\n // becomes\n // '/fields/assetReference/'\n const pathToReferencedAsset: string = pathWithoutUUID.split('~locale')[0];\n // '/fields/assetReference/'\n // becomes\n // '[fields, assetReference]'\n const [, fieldName] = pathToReferencedAsset.substring(1).split('/') ?? undefined;\n\n const referenceToAsset = (boundEntity as Entry).fields[fieldName] as\n | UnresolvedLink<'Asset'>\n | undefined;\n\n if (!referenceToAsset) {\n return;\n }\n\n if (referenceToAsset.sys?.linkType === 'Asset') {\n const referencedAsset = getBoundEntityById(referenceToAsset.sys.id) as Asset | undefined;\n if (!referencedAsset) {\n return;\n }\n\n return transformMedia(referencedAsset as Asset, width, options);\n }\n }\n }\n};\n\nconst resolveVariable = ({\n variableData,\n defaultBreakpoint,\n componentSettings = { variableDefinitions: {} },\n componentVariablesOverwrites,\n}: {\n variableData: ComponentPropertyValue;\n defaultBreakpoint: string;\n componentSettings?: ExperienceComponentSettings;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n}) => {\n if (variableData?.type === 'DesignValue') {\n return variableData.valuesByBreakpoint[defaultBreakpoint] || {};\n } else if (variableData?.type === 'ComponentValue') {\n const variableDefinitionKey = variableData.key;\n const variableDefinition = componentSettings.variableDefinitions[variableDefinitionKey];\n const defaultValue = variableDefinition.defaultValue;\n const userSetValue = componentVariablesOverwrites?.[variableDefinitionKey];\n if (!userSetValue || userSetValue.type === 'ComponentValue') {\n return (defaultValue as DesignValue)?.valuesByBreakpoint[defaultBreakpoint] || '';\n }\n return resolveVariable({\n variableData: userSetValue,\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n });\n }\n};\n\n/**\n * Takes the initial set of properties, filters only design properties that will be mapped to CSS and\n * re-organizes them to be indexed by breakpoint ID (\"breakpoint > variable > value\"). It will\n * also resolve the design/ component values to plain values.\n *\n * **Example Input**\n * ```\n * variables = {\n * cfMargin: { type: 'DesignValue', valuesByBreakpoint: { desktop: '1px', tablet: '2px' } },\n * cfPadding: { type: 'DesignValue', valuesByBreakpoint: { desktop: '3px', mobile: '4px' } }\n * }\n * ```\n *\n * **Example Output**\n * ```\n * variableValuesByBreakpoints = {\n * desktop: {\n * cfMargin: '1px',\n * cfPadding: '3px'\n * },\n * tablet: {\n * cfMargin: '2px'\n * },\n * mobile: {\n * cfPadding: '4px'\n * }\n * }\n * ```\n *\n * **Note**\n * - The property cfBackgroundImageUrl is the only content property that gets mapped to CSS as well.\n * It will be solely stored on the default breakpoint.\n * - For ComponentValues, it will either take the override from the pattern instance or fallback to\n * the defaultValue defined in variableDefinitions.\n */\nexport const indexByBreakpoint = ({\n variables,\n breakpointIds,\n getBoundEntityById,\n unboundValues = {},\n dataSource = {},\n componentVariablesOverwrites,\n componentSettings = { variableDefinitions: {} },\n}: {\n variables: Record<string, ComponentPropertyValue>;\n breakpointIds: string[];\n getBoundEntityById: (id: string) => Entry | Asset | undefined;\n unboundValues?: ExperienceUnboundValues;\n dataSource?: ExperienceDataSource;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n componentSettings?: ExperienceComponentSettings;\n}) => {\n const variableValuesByBreakpoints = breakpointIds.reduce<\n Record<string, Record<string, Exclude<PrimitiveValue, undefined>>>\n >((acc, breakpointId) => {\n return {\n ...acc,\n [breakpointId]: {},\n };\n }, {});\n\n const defaultBreakpoint = breakpointIds[0];\n\n for (const [variableName, variableData] of Object.entries(variables)) {\n // handling the special case - cfBackgroundImageUrl variable, which can be bound or unbound\n // so, we need to resolve it here and pass it down as a css property to be converted into the CSS\n\n // I used .startsWith() cause it can be part of a pattern node\n if (\n variableName === 'cfBackgroundImageUrl' ||\n // TODO: Test this for nested patterns as the name might be just a random hash without the actual name (needs to be validated).\n variableName.startsWith('cfBackgroundImageUrl_')\n ) {\n const width = resolveVariable({\n variableData: variables['cfWidth'],\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n }) as string;\n\n const options = resolveVariable({\n variableData: variables['cfBackgroundImageOptions'],\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n }) as BackgroundImageOptions;\n\n if (!options) {\n debug.error(\n '[experiences-core::ssrStyles] Error transforming image asset: Required variable [cfBackgroundImageOptions] missing from component definition',\n );\n continue;\n }\n\n const imageUrl = resolveBackgroundImageBinding({\n variableData,\n getBoundEntityById,\n unboundValues,\n dataSource,\n componentSettings,\n componentVariablesOverwrites,\n width,\n options,\n });\n\n if (imageUrl) {\n variableValuesByBreakpoints[defaultBreakpoint][variableName] = imageUrl;\n }\n\n continue;\n }\n\n let resolvedVariableData = variableData;\n\n if (variableData.type === 'ComponentValue') {\n const variableDefinition = componentSettings?.variableDefinitions[variableData.key];\n const defaultValue = variableDefinition.defaultValue as ComponentPropertyValue;\n if (variableDefinition.group === 'style' && defaultValue !== undefined) {\n const overwriteVariableData = componentVariablesOverwrites?.[variableData.key];\n resolvedVariableData = mergeDefaultAndOverwriteValues(defaultValue, overwriteVariableData);\n }\n }\n\n if (resolvedVariableData.type !== 'DesignValue') {\n continue;\n }\n\n for (const [breakpointId, variableValue] of Object.entries(\n resolvedVariableData.valuesByBreakpoint,\n )) {\n if (!isValidBreakpointValue(variableValue)) {\n continue;\n }\n\n variableValuesByBreakpoints[breakpointId] = {\n ...variableValuesByBreakpoints[breakpointId],\n [variableName]: variableValue,\n };\n }\n }\n\n return variableValuesByBreakpoints;\n};\n\n/**\n * Flattens the object from\n * `{ color: { [key]: [value] } }`\n * to\n * `{ 'color.key': [value] }`\n */\nexport const flattenDesignTokenRegistry = (\n designTokenRegistry: DesignTokensDefinition,\n): FlattenedDesignTokens => {\n const flattenObject = (obj: object, prefix = ''): FlattenedDesignTokens => {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n // handle border types\n !(typeof value === 'object' && ('width' in value || 'style' in value || 'color' in value))\n ) {\n // Recursively flatten nested objects, but skip objects that look like border definitions\n return {\n ...acc,\n ...flattenObject(value, newKey),\n };\n } else {\n // This is a leaf value (string, number, or border object)\n return {\n ...acc,\n [newKey]: value,\n };\n }\n }, {});\n };\n\n return flattenObject(designTokenRegistry);\n};\n\nfunction mergeDefaultAndOverwriteValues(\n defaultValue: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue;\nfunction mergeDefaultAndOverwriteValues(\n defaultValue?: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue | undefined;\nfunction mergeDefaultAndOverwriteValues(\n defaultValue?: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue | undefined {\n if (defaultValue?.type === 'DesignValue' && overwriteValue?.type === 'DesignValue') {\n return mergeDesignValuesByBreakpoint(defaultValue, overwriteValue);\n }\n return overwriteValue ?? defaultValue;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function get<T>(obj: Record<string, any>, path: string[]): T | undefined {\n if (!path.length) {\n return obj as T;\n }\n\n try {\n const [currentPath, ...nextPath] = path;\n return get(obj[currentPath], nextPath);\n } catch (err) {\n return undefined;\n }\n}\n","import { PrimitiveValue } from '@/types';\nimport { Asset, AssetFile, Entry } from 'contentful';\nimport { get } from '../get';\n\nexport const getBoundValue = (entryOrAsset: Entry | Asset, path: string): PrimitiveValue => {\n const value = get<string>(entryOrAsset, path.split('/').slice(2, -1));\n return value && typeof value == 'object' && (value as AssetFile).url\n ? (value as AssetFile).url\n : (value as string | undefined);\n};\n","import {\n BLOCKS,\n Document as RichTextDocument,\n Block,\n Inline,\n Text,\n} from '@contentful/rich-text-types';\nimport { getBoundValue } from './getBoundValue';\nimport { Asset, Entry } from 'contentful';\nimport { EntityStoreBase } from '@/entity';\nimport cloneDeep from 'lodash.clonedeep';\n\nexport const transformRichText = (\n entryOrAsset: Entry | Asset,\n entityStore: EntityStoreBase,\n path,\n): RichTextDocument | undefined => {\n const value = getBoundValue(entryOrAsset, path);\n if (typeof value === 'string') {\n return {\n data: {},\n content: [\n {\n nodeType: BLOCKS.PARAGRAPH,\n data: {},\n content: [\n {\n data: {},\n nodeType: 'text',\n value: value,\n marks: [],\n },\n ],\n },\n ],\n nodeType: BLOCKS.DOCUMENT,\n };\n }\n if (typeof value === 'object' && value.nodeType === BLOCKS.DOCUMENT) {\n // resolve any links to assets/entries/hyperlinks\n // we need to clone, as we want to keep the original Entity in the EntityStore intact,\n // and resolveLinks() is mutating the node object.\n const richTextDocument = cloneDeep(value) as RichTextDocument;\n resolveLinks(richTextDocument, entityStore);\n return richTextDocument;\n }\n return undefined;\n};\n\ntype Node = Block | Inline | Text;\n\nconst isLinkTarget = (node: Node): boolean => {\n return node?.data?.target?.sys?.type === 'Link';\n};\n\nconst resolveLinks = (node: Node, entityStore: EntityStoreBase): void => {\n if (!node) return;\n\n // Resolve link if current node has one\n if (isLinkTarget(node)) {\n const entity = entityStore.getEntityFromLink(node.data.target);\n if (entity) {\n node.data.target = entity;\n }\n }\n\n // Process content array if it exists\n if ('content' in node && Array.isArray(node.content)) {\n node.content.forEach((childNode) => resolveLinks(childNode, entityStore));\n }\n};\n","import { ImageLoadingOption, OptimizedImageAsset } from '@/types';\nimport { AssetFile } from 'contentful';\nimport { getOptimizedImageUrl } from './getOptimizedImageUrl';\nimport { ValidFormats, validateParams } from './mediaUtils';\n\nconst MAX_WIDTH_ALLOWED = 4000;\n\ntype GetOptimizedImageAssetProps = {\n file: AssetFile;\n sizes?: string;\n loading?: ImageLoadingOption;\n quality?: string;\n format?: ValidFormats;\n};\n\nexport const getOptimizedImageAsset = ({\n file,\n sizes,\n loading,\n quality = '100%',\n format,\n}: GetOptimizedImageAssetProps): OptimizedImageAsset => {\n const qualityNumber = Number(quality.replace('%', ''));\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n const url = file.url;\n const maxWidth = Math.min(file.details.image.width, MAX_WIDTH_ALLOWED);\n const numOfParts = Math.max(2, Math.ceil(maxWidth / 500));\n const widthParts = Array.from({ length: numOfParts }, (_, index) =>\n Math.ceil((index + 1) * (maxWidth / numOfParts)),\n );\n const srcSet = sizes\n ? widthParts.map(\n (width) => `${getOptimizedImageUrl(url, width, qualityNumber, format)} ${width}w`,\n )\n : [];\n\n const intrinsicImageWidth = file.details.image.width;\n\n if (intrinsicImageWidth > MAX_WIDTH_ALLOWED) {\n srcSet.push(\n `${getOptimizedImageUrl(url, undefined, qualityNumber, format)} ${intrinsicImageWidth}w`,\n );\n }\n\n const returnedUrl = getOptimizedImageUrl(\n url,\n file.details.image.width > 2000 ? 2000 : undefined,\n qualityNumber,\n format,\n );\n\n const optimizedImageAsset: OptimizedImageAsset = {\n url: returnedUrl,\n srcSet,\n sizes,\n file,\n loading,\n };\n\n return optimizedImageAsset;\n};\n","import { SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport {\n BackgroundImageOptions,\n BoundComponentPropertyTypes,\n ComponentTreeNode,\n ImageOptions,\n ResolveDesignValueType,\n} from '@/types';\nimport { Asset, AssetDetails, AssetFile } from 'contentful';\nimport { getOptimizedBackgroundImageAsset } from './getOptimizedBackgroundImageAsset';\nimport { getOptimizedImageAsset } from './getOptimizedImageAsset';\nimport { getBoundValue } from '../getBoundValue';\nimport { debug } from '@/utils/debugLogger';\nimport { getTargetValueInPixels, parseCSSValue } from '@/utils/utils';\nimport { isDeepPath, lastPathNamedSegmentEq } from '@/utils/pathSchema';\nimport { ValidFormats } from './mediaUtils';\n\nexport const transformMedia = (\n asset: Asset,\n variables: ComponentTreeNode['variables'],\n resolveDesignValue: ResolveDesignValueType,\n variableName: string,\n path: string,\n) => {\n let value: BoundComponentPropertyTypes;\n // If it is not a deep path and not pointing to the file of the asset,\n // it is just pointing to a normal field and therefore we just resolve the value as normal field\n if (!isDeepPath(path) && !lastPathNamedSegmentEq(path, 'file')) {\n return getBoundValue(asset, path);\n }\n\n //TODO: this will be better served by injectable type transformers instead of if statement\n if (variableName === 'cfImageAsset') {\n const optionsVariableName = 'cfImageOptions';\n const options = resolveDesignValue(\n variables[optionsVariableName]?.type === 'DesignValue'\n ? variables[optionsVariableName].valuesByBreakpoint\n : {},\n ) as ImageOptions | undefined;\n if (!options) {\n debug.error(\n `[experiences-core::transformMedia] Error transforming image asset: Required variable [${optionsVariableName}] missing from component definition`,\n );\n return;\n }\n try {\n value = getOptimizedImageAsset({\n file: asset.fields.file as AssetFile,\n loading: options.loading,\n sizes: options.targetSize as string,\n quality: options.quality,\n format: options.format as ValidFormats,\n });\n return value;\n } catch (error) {\n debug.error('[experiences-core::transformMedia] Error transforming image asset', error);\n }\n return;\n }\n\n if (variableName === 'cfBackgroundImageUrl') {\n let width =\n resolveDesignValue(\n variables['cfWidth']?.type === 'DesignValue' ? variables['cfWidth'].valuesByBreakpoint : {},\n 'cfWidth',\n ) || '100%';\n const optionsVariableName = 'cfBackgroundImageOptions';\n const options = resolveDesignValue(\n variables[optionsVariableName]?.type === 'DesignValue'\n ? variables[optionsVariableName].valuesByBreakpoint\n : {},\n ) as BackgroundImageOptions | undefined;\n if (!options) {\n debug.error(\n `[experiences-core::transformMedia] Error transforming image asset: Required variable [${optionsVariableName}] missing from component definition`,\n );\n return;\n }\n try {\n // Target width (px/rem/em) will be applied to the css url if it's lower than the original image width (in px)\n const assetDetails = asset.fields.file?.details as AssetDetails;\n\n const assetWidth = assetDetails?.image?.width || 0; // This is always in px\n const targetWidthObject = parseCSSValue(options.targetSize); // Contains value and unit (px/rem/em) so convert and then compare to assetWidth\n const targetValue = targetWidthObject\n ? getTargetValueInPixels(targetWidthObject)\n : assetWidth;\n\n if (targetValue < assetWidth) width = `${targetValue}px`;\n value = getOptimizedBackgroundImageAsset(\n asset.fields.file as AssetFile,\n width as string,\n options.quality,\n options.format as (typeof SUPPORTED_IMAGE_FORMATS)[number],\n );\n return value;\n } catch (error) {\n debug.error('[experiences-core::transformMedia] Error transforming image asset', error);\n }\n return;\n }\n\n return asset.fields.file?.url;\n};\n","import type { ExperienceEntry } from '@/types';\nimport type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { isLink } from './isLink';\n\nexport const isExperienceEntry = (entry: ExperienceEntry | Entry): entry is ExperienceEntry => {\n return (\n entry?.sys?.type === 'Entry' &&\n !!entry.fields?.title &&\n !!entry.fields?.slug &&\n !!entry.fields?.componentTree &&\n Array.isArray((entry as ExperienceEntry).fields.componentTree.breakpoints) &&\n Array.isArray((entry as ExperienceEntry).fields.componentTree.children) &&\n typeof (entry as ExperienceEntry).fields.componentTree.schemaVersion === 'string'\n );\n};\n\nexport const isPatternEntry = (entry: Entry | ExperienceEntry): entry is ExperienceEntry => {\n return isExperienceEntry(entry) && !!entry.fields?.componentSettings; // signals that this is pattern (not experience) entry\n};\n\nexport const isEntry = (value: unknown): value is Entry => {\n return (\n null !== value &&\n typeof value === 'object' &&\n 'sys' in value &&\n (value as Entry).sys?.type === 'Entry'\n );\n};\n\nexport const isAsset = (value: unknown): value is Asset => {\n return (\n null !== value &&\n typeof value === 'object' &&\n 'sys' in value &&\n (value as Asset).sys?.type === 'Asset'\n );\n};\n\n/**\n * Checks if the values is an array of links.\n * Note: we use convention where empty arrays are considered valid \"arrays of links\"\n * as they don't contradict the type definition.\n */\nexport const isArrayOfLinks = (\n value: unknown,\n): value is Array<UnresolvedLink<'Asset'> | UnresolvedLink<'Entry'>> => {\n return Array.isArray(value) && value.every((item) => isLink(item));\n};\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { get } from '../get';\nimport { EntityStoreBase } from '@/entity';\nimport { isAsset, isEntry } from '../typeguards';\nimport { debug } from '../debugLogger';\n\nexport function getResolvedEntryFromLink(\n entryOrAsset: Entry | Asset,\n path: string,\n entityStore: EntityStoreBase,\n) {\n if (isAsset(entryOrAsset)) {\n return entryOrAsset;\n } else if (!isEntry(entryOrAsset)) {\n throw new Error(`Expected an Entry or Asset, but got: ${JSON.stringify(entryOrAsset)}`);\n }\n\n const fieldName = path.split('/').slice(2, -1);\n const value = get<UnresolvedLink<'Entry'> | Entry | Asset>(entryOrAsset, fieldName);\n\n let resolvedEntity: Entry | Asset | undefined;\n\n if (isAsset(value) || isEntry(value)) {\n // In some cases, reference fields are already resolved\n resolvedEntity = value;\n } else if (value?.sys.type === 'Link') {\n // Look up the reference in the entity store\n resolvedEntity = entityStore.getEntityFromLink(value);\n } else {\n debug.warn(\n `[experiences-core::getResolvedEntryFromLink] When attempting to follow link in field '${fieldName}' of entity, the value is expected to be a link, but got: ${JSON.stringify(value)}`,\n { entity: entryOrAsset },\n );\n return;\n }\n\n // no need to make structuredClone(entityStore.getEntityFromLink(value)) because\n // we provide component with the original Object.frozen object of the entity.\n // As we don't resolve L3 and don't mutate the entity before returning anymore,\n // we don't need to make a copy of the entity. And even provide better referential integrity\n // for the component for the same entity.\n if (!resolvedEntity) {\n return;\n }\n\n return resolvedEntity;\n}\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { get } from '../get';\nimport { EntityStoreBase } from '@/entity';\nimport { debug } from '../debugLogger';\n\nconst excludeUndefined = <T>(value: T | undefined): value is T => {\n return value !== undefined;\n};\n\nexport function getArrayValue(\n entryOrAsset: Entry | Asset,\n path: string,\n entityStore: EntityStoreBase,\n) {\n // NOTE: Not sure if we need this if-statement,\n // as it is NOT possible to bind to Array variable an Asset\n // (as Assets don't have multi-reference fields) unless it's a degenerate case.\n if (entryOrAsset.sys.type === 'Asset') {\n return entryOrAsset;\n }\n\n const fieldName = path.split('/').slice(2, -1);\n const arrayValue = get<Array<string | UnresolvedLink<'Entry' | 'Asset'>>>(\n entryOrAsset,\n fieldName,\n );\n\n if (!Array.isArray(arrayValue)) {\n debug.warn(\n `[experiences-core::getArrayValue] A field '${fieldName}' of an entity was bound to an Array variable. Expected value of that field to be an array, but got: ${JSON.stringify(arrayValue)}`,\n { entity: entryOrAsset },\n );\n return;\n }\n\n const result = arrayValue\n .map((value) => {\n if (typeof value === 'string') {\n return value; // handles case where Text array is bound (in [Content Model] tab of the platform, select Text and make it a list)\n } else if (value?.sys?.type === 'Link') {\n const resolvedEntity = entityStore.getEntityFromLink(value);\n if (!resolvedEntity) {\n // We return undefined, which means that entity wasn't availble in the Entity Store due to:\n // - because it's archived entity (and they normally wouldn't be sent to the Entity Store)\n // - bug where some entity wasn't added to the Entity Store\n // BTW, deleted entities shouldn't even be possible here as they require CT deletion first and that shouldn't allow us to load them at all)\n return;\n }\n return resolvedEntity;\n } else {\n debug.warn(\n `[experiences-core::getArrayValue] Expected value to be a string or Link, but got: ${JSON.stringify(value)}`,\n );\n return undefined;\n }\n })\n .filter(excludeUndefined);\n\n // eg. imagine you have multi-referene field with 3 links to archived entries,\n // all of them will be undefined on previous step and will be filtered out\n // of resultWithoutUndefined. Instead of passing to component an empty array,\n // we pass undefined. This means that develloper making custom component\n // does not have to handle empty array case. But only undefiened, which signals:\n // user didn't bind anything; user bound to reference field which is unset; all references are archived\n return result.length > 0 ? result : undefined;\n}\n","import {\n ComponentDefinitionVariableType,\n ComponentTreeNode,\n ResolveDesignValueType,\n BoundComponentPropertyTypes,\n} from '@/types';\nimport { transformRichText } from './transformRichText';\nimport { transformMedia } from './media/transformMedia';\nimport { EntityStoreBase } from '@/entity';\nimport { Asset, UnresolvedLink } from 'contentful';\nimport { getBoundValue } from './getBoundValue';\nimport { getResolvedEntryFromLink } from './getResolvedEntryFromLink';\nimport { getArrayValue } from './getArrayValue';\n\nexport const transformBoundContentValue = (\n variables: ComponentTreeNode['variables'],\n entityStore: EntityStoreBase,\n binding: UnresolvedLink<'Entry' | 'Asset'>,\n resolveDesignValue: ResolveDesignValueType,\n variableName: string,\n variableType: ComponentDefinitionVariableType,\n path: string,\n): BoundComponentPropertyTypes => {\n const entityOrAsset = entityStore.getEntryOrAsset(binding, path);\n if (!entityOrAsset) return;\n\n switch (variableType) {\n case 'Media':\n // If we bound a normal entry field to the media variable we just return the bound value\n if (entityOrAsset.sys.type === 'Entry') {\n return getBoundValue(entityOrAsset, path);\n }\n return transformMedia(\n entityOrAsset as Asset,\n variables,\n resolveDesignValue,\n variableName,\n path,\n );\n case 'RichText':\n return transformRichText(entityOrAsset, entityStore, path);\n case 'Array':\n return getArrayValue(entityOrAsset, path, entityStore);\n case 'Link':\n return getResolvedEntryFromLink(entityOrAsset, path, entityStore);\n default:\n return getBoundValue(entityOrAsset, path);\n }\n};\n","type NodeWithChildren<T> = {\n children: T[];\n};\n\nexport function treeVisit<T extends NodeWithChildren<T>>(\n initialNode: T,\n onNode: (node: T, index: number, depth: number) => void,\n) {\n // returns last used index\n const _treeVisit = (currentNode: T, currentIndex: number, currentDepth: number): number => {\n // Copy children in case of onNode removing it as we pass the node by reference\n const children = [...currentNode.children];\n onNode(currentNode, currentIndex, currentDepth);\n let nextAvailableIndex = currentIndex + 1;\n const lastUsedIndex = currentIndex;\n for (const child of children) {\n const lastUsedIndex = _treeVisit(child, nextAvailableIndex, currentDepth + 1);\n nextAvailableIndex = lastUsedIndex + 1;\n }\n return lastUsedIndex;\n };\n _treeVisit(initialNode, 0, 0);\n}\n\n/**\n * Traverses all nodes of a tree and maps all of them.\n * Intuitively works similarly to Array.map().\n * When returning mapped object from the mapper function\n * you _do not_ need to return about `.children[]` field.\n * This field is automatically managed by the treeMap() function.\n *\n * You can map each node to whatever you want, but shouldn't\n * modify the structure of the tree from the mapping function.\n */\nexport function treeMap<T extends NodeWithChildren<T>, U>(\n node: T,\n onNode: (node: T) => Omit<U, 'children'>,\n): U {\n // Copy children in case of onNode removing it as we pass the node by reference\n const children = [...node.children];\n const newNode = {\n ...onNode(node),\n children: children.map((child) => treeMap(child, onNode)),\n } as U;\n\n return newNode;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IncomingMessage } from '@/types';\nimport { INCOMING_EVENTS, StudioCanvasMode, PostMessageMethods } from '@/constants';\n\nclass ParseError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nconst isValidJsonObject = (s: string) => {\n try {\n const result = JSON.parse(s);\n if ('object' !== typeof result) {\n return false;\n }\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const doesMismatchMessageSchema = (event: MessageEvent): false | string => {\n try {\n tryParseMessage(event);\n return false;\n } catch (e) {\n if (e instanceof ParseError) {\n return e.message;\n }\n throw e;\n }\n};\n\nexport const tryParseMessage = (event: MessageEvent): IncomingMessage => {\n if (!event.data) {\n throw new ParseError('Field event.data is missing');\n }\n if ('string' !== typeof event.data) {\n throw new ParseError(`Field event.data must be a string, instead of '${typeof event.data}'`);\n }\n\n if (!isValidJsonObject(event.data)) {\n throw new ParseError('Field event.data must be a valid JSON object serialized as string');\n }\n\n const eventData = JSON.parse(event.data);\n\n if (!eventData.source) {\n throw new ParseError(`Field eventData.source must be equal to 'composability-app'`);\n }\n\n if ('composability-app' !== eventData.source) {\n throw new ParseError(\n `Field eventData.source must be equal to 'composability-app', instead of '${eventData.source}'`,\n );\n }\n\n // check eventData.eventType\n const supportedEventTypes = Object.values(INCOMING_EVENTS);\n if (!supportedEventTypes.includes(eventData.eventType)) {\n // Expected message: This message is handled in the EntityStore to store fetched entities\n if (eventData.eventType !== PostMessageMethods.REQUESTED_ENTITIES) {\n throw new ParseError(\n `Field eventData.eventType must be one of the supported values: [${supportedEventTypes.join(\n ', ',\n )}]`,\n );\n }\n }\n\n return eventData as IncomingMessage;\n};\n\nexport const validateExperienceBuilderConfig = ({\n locale,\n mode,\n}: {\n locale: string;\n mode: StudioCanvasMode;\n}) => {\n if (mode === StudioCanvasMode.EDITOR || mode === StudioCanvasMode.READ_ONLY) {\n return;\n }\n\n if (!locale) {\n throw new Error(\n 'Parameter \"locale\" is required for experience builder initialization outside of editor mode',\n );\n }\n};\n","import type { Entry, UnresolvedLink } from 'contentful';\n\ntype Link<T extends 'Asset' | 'Entry' = 'Asset' | 'Entry'> = UnresolvedLink<T>;\n\nexport type FnShouldFollowReferencesOfEntryField = (fieldName: string, entry: Entry) => boolean;\n\nexport const uniqueById = <T extends { sys: { id: string } }>(arr: Array<T>): T[] => {\n const map = new Map<string, T>();\n arr.forEach((item) => map.set(item.sys.id, item));\n return [...map.values()];\n};\n\nconst isObject = (value: unknown) => {\n return typeof value === 'object' && value !== null;\n};\n\n/**\n * Extracts all references from an entry.\n * Handles both: reference and multi-reference fields.\n * Returns unique array of references (even if they repeat within the entry).\n */\nexport const referencesOf = (\n entry: Entry,\n fnShouldFollowReferencesOfEntryField?: FnShouldFollowReferencesOfEntryField,\n): UnresolvedLink<'Asset' | 'Entry'>[] => {\n const references: Link<'Asset' | 'Entry'>[] = [];\n\n const handleArray = (fieldValue: Array<unknown>, _fieldName: string) => {\n for (const item of fieldValue) {\n if (isObject(item) && (item as Link).sys?.type === 'Link') {\n references.push(item as Link<'Asset' | 'Entry'>);\n }\n }\n };\n\n const handleLink = (fieldValue: Link<'Asset' | 'Entry'>, _fieldName: string) => {\n references.push(fieldValue);\n };\n\n for (const [fieldName, fieldValue] of Object.entries(\n entry.fields as Record<string, Record<string, unknown>>,\n )) {\n if (\n fnShouldFollowReferencesOfEntryField &&\n !fnShouldFollowReferencesOfEntryField(fieldName, entry)\n ) {\n continue;\n }\n if (fieldValue === undefined) {\n continue; // edge case when field is present on object, but is set to undefined explicitly e.g. during test mocking { myField: undefined }\n }\n\n if (Array.isArray(fieldValue)) {\n handleArray(fieldValue, fieldName);\n } else if (\n fieldValue !== null &&\n isObject(fieldValue) &&\n (fieldValue as Link).sys?.type === 'Link'\n ) {\n handleLink(fieldValue as Link<'Asset' | 'Entry'>, fieldName);\n }\n }\n return uniqueById(references);\n};\n\n// -- REFERENCE EXTRACTION UTILITIES --\n\nexport function extractReferencesFromEntriesAsIds(\n entries: Array<Entry>,\n): [string[], string[], string[]] {\n const [uniqueEntries, uniqueAssets, uniqueReferences] = extractReferencesFromEntries(entries);\n\n const entryIds = uniqueEntries.map((link) => link.sys.id);\n const assetIds = uniqueAssets.map((link) => link.sys.id);\n const referenceIds = uniqueReferences.map((link) => link.sys.id);\n\n return [entryIds, assetIds, referenceIds] as const;\n}\n\nexport function extractReferencesFromEntries(\n entries: Array<Entry>,\n): [UnresolvedLink<'Entry'>[], UnresolvedLink<'Asset'>[], UnresolvedLink<'Entry' | 'Asset'>[]] {\n const allReferences = entries.flatMap((entry) => referencesOf(entry));\n\n const uniqueReferences = uniqueById(allReferences);\n\n const uniqueAssets = uniqueReferences.filter(\n (link) => link.sys.linkType === 'Asset',\n ) as UnresolvedLink<'Asset'>[];\n\n const uniqueEntries = uniqueReferences.filter(\n (link) => link.sys.linkType === 'Entry',\n ) as UnresolvedLink<'Entry'>[];\n\n return [uniqueEntries, uniqueAssets, uniqueReferences] as const;\n}\n","import type { Experience, Link } from '@/types';\nimport type { Entry, Asset } from 'contentful';\nimport { referencesOf, uniqueById } from './references';\nimport { debug } from '@/utils/debugLogger';\nimport { isLinkToAsset } from '@/utils/isLinkToAsset';\nimport { isLinkToEntry } from '@/utils/isLinkToEntry';\nimport { isAsset, isPatternEntry } from '@/utils/typeguards';\n\nconst excludeAssets = (entity: Entry | Asset): entity is Entry => !isAsset(entity);\nconst excludePatternEntries = (entry: Entry): entry is Entry => !isPatternEntry(entry);\n\n/**\n * Parses experience and extracts all leaf links that are referenced from the experience.\n * PRECONDITION: Relies on the fact that entityStore is preloaded with all dataSource\n * entries using include=2 (meaning that up to L3 entries are already preloaded into EntitStore).\n *\n * The function iterates over all entries in the entityStore (assuming they can be L1, L2, L3) and\n * over all of their references. Any references that are NOT available in the entityStore are considered\n * \"leaf references\" aka \"leaf links\" and are returned.\n *\n * The EntityStore happens to contain also entities representing patterns, which we do NOT consider\n * as entries that point to leaf links. So we don't iterate over patterns only over entries which\n * can be used for binding.\n */\nexport const extractLeafLinksReferencedFromExperience = (experience: Experience) => {\n const assetLinks: Link<'Asset'>[] = [];\n const entryLinks: Link<'Entry'>[] = [];\n\n if (!experience.entityStore) {\n throw new Error(\n 'Parameter `experience` should have valid `experience.entityStore` object. Without it, we cannot extract leaf links. Most likely you passed `experience` instance that was not fully fetched. Check your experience fetching logic.',\n );\n }\n\n // We want only leaf links which can be used for binding. We use two filters:\n // excludeAssets: because assets do not have references, so we don't need to traverse them\n // excludePatternEntries: because EntityStore happens to also store pattern-entries.\n // Those point to other patterns, and we don't want to consider them as\n // parents of leaf links pointing to actual data carrying entries used for binding.\n const entries: Entry[] = experience.entityStore.entities\n .filter(excludeAssets)\n .filter(excludePatternEntries);\n\n // We assume that ALL of the entries in the experience\n for (const entry of entries) {\n const references = referencesOf(entry);\n for (const ref of references) {\n if (isLinkToAsset(ref)) {\n if (!experience.entityStore.getEntityFromLink(ref)) {\n assetLinks.push(ref);\n }\n } else if (isLinkToEntry(ref)) {\n if (!experience.entityStore.getEntityFromLink(ref)) {\n entryLinks.push(ref);\n }\n } else {\n debug.warn(\n `[experiences-core::experienceSchema] Unexpected reference type found in entry \"${entry.sys.id}\": ${JSON.stringify(ref)}`,\n );\n }\n }\n }\n\n const dedupedAssetLinks = uniqueById(assetLinks);\n const dedupedEntryLinks = uniqueById(entryLinks);\n\n return {\n assetLinks: dedupedAssetLinks,\n entryLinks: dedupedEntryLinks,\n assetIds: dedupedAssetLinks.map((link) => link.sys.id),\n entryIds: dedupedEntryLinks.map((link) => link.sys.id),\n };\n};\n","import { ComponentRegistration, ComponentTreeNode, ExperienceTreeNode } from '@/types';\n\nexport const splitDirectAndSlotChildren = <T extends ExperienceTreeNode | ComponentTreeNode>(\n allChildNodes: T[],\n componentDefinition: ComponentRegistration['definition'],\n) => {\n // Bridge difference between editor and delivery mode\n const getSlotId = (child: T) => {\n if ('data' in child) return child.data.slotId;\n return child.slotId;\n };\n const slotNodesMap: Record<string, T[] | null> = {};\n for (const slotId in componentDefinition.slots) {\n // We only allow one component per slot (container). This is just safer to not render components twice or not at all\n const nodes = allChildNodes.filter((child) => getSlotId(child) === slotId);\n slotNodesMap[slotId] = nodes.length ? nodes : null;\n }\n const directChildNodes = allChildNodes.filter((child) => getSlotId(child) === undefined);\n if (!componentDefinition.children || !directChildNodes.length) {\n // If there are no children allowed in the component or no children added, render as undefined\n return { slotNodesMap, directChildNodes: undefined };\n }\n return { slotNodesMap, directChildNodes };\n};\n","import {\n ComponentTreeNode,\n ExperienceComponentSettings,\n ExperienceDataSource,\n ExperienceEntry,\n Parameter,\n ParameterDefinition,\n VariableMapping,\n} from '@/types';\nimport { treeVisit } from './treeTraversal';\nimport { isLink } from './isLink';\n\nexport type PrebindingData = {\n prebindingDefinitionId: string;\n parameterIds: Array<string>;\n nativeParameterId?: string;\n parameterDefinitions: Record<string, ParameterDefinition>;\n variableMappings?: Record<string, VariableMapping>;\n};\n\nexport const flattenNestedPatterns = (fetchedPatterns: Array<ExperienceEntry>) => {\n const patternsById: Record<string, ExperienceEntry> = {};\n\n const queue = [...fetchedPatterns];\n\n while (queue.length) {\n const pattern = queue.shift();\n\n if (!pattern) {\n continue;\n }\n\n if (patternsById[pattern.sys.id]) {\n continue;\n }\n\n patternsById[pattern.sys.id] = pattern;\n\n if (!Array.isArray(pattern.fields.usedComponents) || !pattern.fields.usedComponents.length) {\n continue;\n }\n\n for (const nestedPattern of pattern.fields.usedComponents) {\n if (!isLink(nestedPattern)) {\n queue.push(nestedPattern);\n }\n }\n }\n return Object.values(patternsById);\n};\n\n/**\n * Given a list of patterns, extract the prebinding data into a more digestable format indexed by the pattern entry id\n * @param patterns a list of pattern entries\n * @returns a map of pattern entry ids to their prebinding data\n */\nexport const extractPrebindingDataByPatternId = (patterns: Array<ExperienceEntry>) => {\n const prebindingDataByPatternId: Record<string, PrebindingData> = {};\n\n for (const pattern of patterns) {\n const patternId = pattern.sys.id;\n const [prebindingDefinition] = pattern.fields.componentSettings?.prebindingDefinitions ?? [];\n if (!prebindingDefinition) continue;\n\n const [nativeParameterId] =\n Object.entries(prebindingDefinition.parameterDefinitions ?? {}).find(\n ([, value]) => !value.passToNodes?.length,\n ) ?? [];\n\n const prebindingData: PrebindingData = {\n prebindingDefinitionId: prebindingDefinition.id,\n parameterIds: Object.keys(prebindingDefinition.parameterDefinitions),\n nativeParameterId,\n parameterDefinitions: prebindingDefinition.parameterDefinitions,\n variableMappings: prebindingDefinition.variableMappings,\n };\n\n prebindingDataByPatternId[patternId] = prebindingData;\n }\n\n return prebindingDataByPatternId;\n};\n\nexport const generateDefaultDataSourceForPrebindingDefinition = (\n prebindingDefinitions: ExperienceComponentSettings['prebindingDefinitions'] = [],\n) => {\n if (\n !prebindingDefinitions ||\n !Array.isArray(prebindingDefinitions) ||\n !prebindingDefinitions.length\n ) {\n return { dataSource: {}, parameters: {} };\n }\n\n const prebindingDefinition = prebindingDefinitions[0];\n\n const dataSource: ExperienceDataSource = {};\n const parameters: Record<string, Parameter> = {};\n\n for (const [parameterId, parameterDefinition] of Object.entries(\n prebindingDefinition.parameterDefinitions ?? {},\n )) {\n if (parameterDefinition.defaultSource && isLink(parameterDefinition.defaultSource.link)) {\n const dataSourceKey = parameterDefinition.defaultSource.link.sys.id;\n dataSource[dataSourceKey] = parameterDefinition.defaultSource.link;\n parameters[parameterId] = {\n type: 'BoundValue',\n path: `/${dataSourceKey}`,\n };\n }\n }\n return {\n dataSource,\n parameters,\n };\n};\n\nexport function getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId,\n parameterId,\n}: {\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n patternNodeDefinitionId: string;\n parameterId: string;\n}) {\n const patternPrebindingData = prebindingDataByPatternId[patternNodeDefinitionId];\n\n if (!patternPrebindingData) return undefined;\n if (patternPrebindingData.parameterIds.includes(parameterId)) {\n if (patternPrebindingData.nativeParameterId === parameterId) {\n if (!patternPrebindingData.variableMappings) return undefined;\n return Object.fromEntries(\n Object.entries(patternPrebindingData.variableMappings).filter(\n ([, mapping]) => mapping.parameterId === parameterId,\n ),\n );\n } else {\n const parameterDefinition = patternPrebindingData.parameterDefinitions[parameterId];\n if (!parameterDefinition || !parameterDefinition.passToNodes?.length) return undefined;\n\n const patternEntry = fetchedPatterns.find(\n (entry) => entry.sys.id === patternNodeDefinitionId,\n );\n if (!patternEntry) return undefined;\n\n let nestedPatternNode: ComponentTreeNode | undefined;\n\n treeVisit(\n {\n definitionId: 'root',\n parameters: {},\n children: patternEntry.fields.componentTree.children,\n } as ComponentTreeNode,\n (node) => {\n if (node.id === parameterDefinition.passToNodes?.[0]?.nodeId) {\n nestedPatternNode = node;\n }\n\n return undefined;\n },\n );\n\n if (!nestedPatternNode) {\n return undefined;\n }\n\n return getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: nestedPatternNode.definitionId,\n parameterId: parameterDefinition.passToNodes?.[0]?.parameterId,\n });\n }\n }\n}\n","import { SendMessageParams, OutgoingMessage } from '@/types';\nimport { debug } from '@/utils';\n\nexport const sendMessage: SendMessageParams = (eventType, data) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n debug.debug(`[experiences-sdk-react::sendMessage] Sending message [${eventType}]`, {\n source: 'customer-app',\n eventType,\n payload: data,\n });\n\n window.parent?.postMessage(\n {\n source: 'customer-app',\n eventType,\n payload: data,\n } as OutgoingMessage,\n '*',\n );\n};\n","export function deepFreeze<T>(obj: T): Readonly<T> {\n const propNames = Object.getOwnPropertyNames(obj);\n\n for (const name of propNames) {\n const value = obj[name];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n\n return Object.freeze(obj);\n}\n","import type { Asset, ChainModifiers, Entry, UnresolvedLink } from 'contentful';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { get } from '../utils/get';\nimport { isLink } from '../utils/isLink';\nimport { isDeepPath, parseDataSourcePathIntoFieldset } from '@/utils/pathSchema';\nimport { isAsset, isEntry } from '@/utils/typeguards';\nimport { deepFreeze } from '@/utils/freeze';\nimport { debug } from '@/utils';\n\nexport interface EntityFromLink {\n getEntityFromLink(link: UnresolvedLink<'Entry' | 'Asset'>): Asset | Entry | undefined;\n}\n\n/**\n * Base Store for entities\n * Can be extended for the different loading behaviours (editor, production, ..)\n */\nexport abstract class EntityStoreBase implements EntityFromLink {\n /* serialized */ public locale: string;\n /* serialized */ protected entryMap = new Map<string, Entry>();\n /* serialized */ protected assetMap = new Map<string, Asset>();\n\n constructor({ entities, locale }: { entities: Array<Entry | Asset>; locale: string }) {\n this.locale = locale;\n\n for (const entity of entities) {\n this.addEntity(entity);\n }\n }\n\n public get entities() {\n return [...this.entryMap.values(), ...this.assetMap.values()];\n }\n\n public updateEntity(entity: Entry | Asset) {\n this.addEntity(entity);\n }\n\n public getEntryOrAsset(\n linkOrEntryOrAsset: UnresolvedLink<'Entry' | 'Asset'> | Asset | Entry,\n path: string,\n ): Entry | Asset | undefined {\n if (isDeepPath(path)) {\n return this.getDeepEntry(linkOrEntryOrAsset, path);\n }\n let entity: Entry | Asset;\n\n if (isLink(linkOrEntryOrAsset)) {\n const resolvedEntity =\n linkOrEntryOrAsset.sys.linkType === 'Entry'\n ? this.entryMap.get(linkOrEntryOrAsset.sys.id)\n : this.assetMap.get(linkOrEntryOrAsset.sys.id);\n if (!resolvedEntity || resolvedEntity.sys.type !== linkOrEntryOrAsset.sys.linkType) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Experience references unresolved entity: ${JSON.stringify(linkOrEntryOrAsset)}`,\n );\n return;\n }\n entity = resolvedEntity;\n } else if (isAsset(linkOrEntryOrAsset) || isEntry(linkOrEntryOrAsset)) {\n // We already have the complete entity in preview & delivery (resolved by the CMA client)\n entity = linkOrEntryOrAsset;\n } else {\n throw new Error(\n `[experiences-core::EntityStoreBase] Unexpected object when resolving entity: ${JSON.stringify(linkOrEntryOrAsset)}`,\n );\n }\n return entity;\n }\n\n /**\n * @deprecated in the base class this should be simply an abstract method\n * @param entityLink\n * @param path\n * @returns\n */\n public getValue(\n entityLink: UnresolvedLink<'Entry' | 'Asset'>,\n path: string[],\n ): string | undefined {\n const entity = this.getEntity(entityLink.sys.linkType, entityLink.sys.id);\n\n if (!entity) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(\n `Unresolved entity reference: ${entityLink.sys.linkType} with ID ${entityLink.sys.id}`,\n );\n return;\n }\n\n return get<string>(entity, path);\n }\n\n public getEntityFromLink(link: UnresolvedLink<'Entry' | 'Asset'>): Asset | Entry | undefined {\n const resolvedEntity =\n link.sys.linkType === 'Entry'\n ? this.entryMap.get(link.sys.id)\n : this.assetMap.get(link.sys.id);\n\n if (!resolvedEntity || resolvedEntity.sys.type !== link.sys.linkType) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Experience references unresolved entity: ${JSON.stringify(link)}`,\n );\n return;\n }\n return resolvedEntity;\n }\n\n public getAssetById(assetId: string): Asset | undefined {\n const asset = this.assetMap.get(assetId);\n if (!asset) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Asset with ID \"${assetId}\" is not found in the store`,\n );\n return;\n }\n return asset;\n }\n\n public getEntryById(entryId: string): Entry | undefined {\n const entry = this.entryMap.get(entryId);\n if (!entry) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Entry with ID \"${entryId}\" is not found in the store`,\n );\n return;\n }\n return entry;\n }\n\n protected getEntitiesFromMap(type: 'Entry' | 'Asset', ids: string[]) {\n const resolved: Array<Entry | Asset<ChainModifiers, string>> = [];\n const missing: string[] = [];\n\n for (const id of ids) {\n const entity = this.getEntity(type, id);\n if (entity) {\n resolved.push(entity);\n } else {\n missing.push(id);\n }\n }\n\n return {\n resolved,\n missing,\n };\n }\n\n protected addEntity(entity: Entry | Asset): void {\n if (isAsset(entity)) {\n // cloned and frozen\n this.assetMap.set(entity.sys.id, deepFreeze(cloneDeep(entity)));\n } else if (isEntry(entity)) {\n // cloned and frozen\n this.entryMap.set(entity.sys.id, deepFreeze(cloneDeep(entity)));\n } else {\n throw new Error(\n `Attempted to add an entity to the store that is neither Asset nor Entry: '${JSON.stringify(entity)}'`,\n );\n }\n }\n\n public async fetchAsset(id: string): Promise<Asset | undefined> {\n const { resolved, missing } = this.getEntitiesFromMap('Asset', [id]);\n if (missing.length) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(`[experiences-core::EntityStoreBase] Asset \"${id}\" is not in the store`);\n return;\n }\n\n return resolved[0] as Asset;\n }\n public async fetchAssets(ids: string[]): Promise<Asset[]> {\n const { resolved, missing } = this.getEntitiesFromMap('Asset', ids);\n if (missing.length) {\n throw new Error(`Missing assets in the store (${missing.join(',')})`);\n }\n return resolved as Asset[];\n }\n\n public async fetchEntry(id: string): Promise<Entry | undefined> {\n const { resolved, missing } = this.getEntitiesFromMap('Entry', [id]);\n if (missing.length) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(`[experiences-core::EntityStoreBase] Entry \"${id}\" is not in the store`);\n return;\n }\n\n return resolved[0] as Entry;\n }\n\n public async fetchEntries(ids: string[]): Promise<Entry[]> {\n const { resolved, missing } = this.getEntitiesFromMap('Entry', ids);\n if (missing.length) {\n throw new Error(`Missing assets in the store (${missing.join(',')})`);\n }\n return resolved as Entry[];\n }\n\n private getDeepEntry(\n linkOrEntryOrAsset: UnresolvedLink<'Entry' | 'Asset'> | Asset | Entry,\n path: string,\n ): Entry | Asset | undefined {\n const resolveFieldset = (\n unresolvedFieldset: Array<[null, string, string?]>,\n headEntry: Entry | Asset,\n ): {\n resolvedFieldset: Array<[Entry | Asset, string, string?]>;\n isFullyResolved: boolean;\n reason?: string;\n } => {\n const resolvedFieldset: Array<[Entry | Asset, string, string?]> = [];\n let entityToResolveFieldsFrom: Entry | Asset = headEntry;\n for (let i = 0; i < unresolvedFieldset.length; i++) {\n const isLeaf = i === unresolvedFieldset.length - 1; // with last row, we are not expecting a link, but a value\n const row = unresolvedFieldset[i];\n const [, field, _localeQualifier] = row;\n if (!entityToResolveFieldsFrom) {\n throw new Error(\n `Logic Error: Cannot resolve field ${field} of a fieldset as there is no entity to resolve it from.`,\n );\n }\n if (isLeaf) {\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n break;\n }\n\n const fieldValue = get<string | UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset>(\n entityToResolveFieldsFrom,\n ['fields', field],\n );\n\n if (undefined === fieldValue) {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Cannot resolve field Link<${entityToResolveFieldsFrom.sys.type}>(sys.id=${entityToResolveFieldsFrom.sys.id}).fields[${field}] as field value is not defined`,\n };\n } else if (isLink(fieldValue)) {\n const entity = this.getEntityFromLink(fieldValue);\n if (entity === undefined) {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Field reference Link (sys.id=${fieldValue.sys.id}) not found in the EntityStore, waiting...`,\n };\n }\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n entityToResolveFieldsFrom = entity; // we move up\n } else if (isAsset(fieldValue) || isEntry(fieldValue)) {\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n entityToResolveFieldsFrom = fieldValue; // we move up\n } else {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Deep path points to an invalid field value of type '${typeof fieldValue}' (value=${fieldValue})`,\n };\n }\n }\n return {\n resolvedFieldset,\n isFullyResolved: true,\n };\n };\n\n const headEntity = isLink(linkOrEntryOrAsset)\n ? this.getEntityFromLink(linkOrEntryOrAsset)\n : (linkOrEntryOrAsset as Entry | Asset);\n\n if (undefined === headEntity) {\n return;\n }\n const unresolvedFieldset = parseDataSourcePathIntoFieldset(path);\n\n // The purpose here is to take this intermediate representation of the deep-path\n // and to follow the links to the leaf-entity and field\n // in case we can't follow till the end, we should signal that there was null-reference in the path\n const { resolvedFieldset, isFullyResolved, reason } = resolveFieldset(\n unresolvedFieldset,\n headEntity,\n );\n\n if (!isFullyResolved) {\n if (reason) {\n debug.log(\n `[experiences-core::EntityStoreBase] Deep path wasn't resolved till leaf node, falling back to undefined, because: ${reason}`,\n );\n }\n return;\n }\n const [leafEntity] = resolvedFieldset[resolvedFieldset.length - 1];\n return leafEntity;\n }\n\n private getEntity(type: 'Asset' | 'Entry', id: string) {\n if (type === 'Asset') {\n return this.assetMap.get(id);\n }\n\n return this.entryMap.get(id);\n }\n\n public toJSON() {\n return {\n entryMap: Object.fromEntries(this.entryMap),\n assetMap: Object.fromEntries(this.assetMap),\n locale: this.locale,\n };\n }\n}\n","import type { Asset, Entry } from 'contentful';\nimport { EntityStoreBase } from './EntityStoreBase';\nimport { PostMessageMethods } from '../constants';\nimport { RequestEntitiesMessage, RequestedEntitiesMessage } from '../types';\nimport { debug } from '@/utils';\n\ntype SendMessage = (\n method: PostMessageMethods.REQUEST_ENTITIES,\n params: RequestEntitiesMessage,\n) => void;\ntype Subscribe = (\n method: PostMessageMethods.REQUESTED_ENTITIES,\n cb: (message: RequestedEntitiesMessage) => void,\n) => VoidFunction;\n\n/**\n * EntityStore which resolves entries and assets from the editor\n * over the sendMessage and subscribe functions.\n */\nexport abstract class EditorEntityStore extends EntityStoreBase {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private requestCache = new Map<string, Promise<any>>();\n private sendMessage: SendMessage;\n private subscribe: Subscribe;\n private timeoutDuration: number;\n\n constructor({\n entities,\n locale,\n sendMessage,\n subscribe,\n timeoutDuration = 3000,\n }: {\n entities: Array<Entry | Asset>;\n locale: string;\n sendMessage: SendMessage;\n subscribe: Subscribe;\n timeoutDuration?: number;\n }) {\n super({ entities, locale });\n this.sendMessage = sendMessage;\n this.subscribe = subscribe;\n this.timeoutDuration = timeoutDuration;\n }\n\n private cleanupPromise(referenceId: string) {\n setTimeout(() => {\n this.requestCache.delete(referenceId);\n }, 300);\n }\n\n private cacheIdSeperator = ',';\n\n private getCacheId(id: string[]): string {\n return id.length === 1 ? id[0] : id.join(this.cacheIdSeperator);\n }\n\n private async fetchEntity(\n type: 'Asset',\n ids: string[],\n skipCache: boolean,\n ): Promise<Array<Asset>>;\n private async fetchEntity(\n type: 'Entry',\n ids: string[],\n skipCache: boolean,\n ): Promise<Array<Entry>>;\n private async fetchEntity(\n type: 'Asset' | 'Entry',\n ids: string[],\n skipCache: boolean = false,\n ): Promise<Array<Entry> | Array<Asset>> {\n let missing: string[];\n if (!skipCache) {\n const { missing: missingFromCache, resolved } = this.getEntitiesFromMap(type, ids);\n if (missingFromCache.length === 0) {\n // everything is already in cache\n return resolved as Array<Entry> | Array<Asset>;\n }\n\n missing = missingFromCache;\n } else {\n missing = [...ids];\n }\n\n const cacheId = this.getCacheId(missing);\n const openRequest = this.requestCache.get(cacheId);\n\n if (openRequest) {\n return openRequest;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const newPromise = new Promise((resolve, reject) => {\n const unsubscribe = this.subscribe(\n PostMessageMethods.REQUESTED_ENTITIES,\n (message: RequestedEntitiesMessage) => {\n const messageIds = [\n ...message.entities.map((entity) => entity.sys.id),\n ...(message.missingEntityIds ?? []),\n ];\n if (missing.every((id) => messageIds.includes(id))) {\n clearTimeout(timeout);\n resolve(message.entities);\n\n this.cleanupPromise(cacheId);\n ids.forEach((id) => this.cleanupPromise(id));\n\n unsubscribe();\n } else {\n debug.warn(\n '[experiences-core::EditorEntityStore] Unexpected entities received in REQUESTED_ENTITIES. Ignoring this response.',\n );\n }\n },\n );\n\n const timeout = setTimeout(() => {\n reject(\n new Error(`Request for entities timed out ${this.timeoutDuration}ms for ${cacheId}`),\n );\n\n this.cleanupPromise(cacheId);\n ids.forEach((id) => this.cleanupPromise(id));\n\n unsubscribe();\n }, this.timeoutDuration);\n\n this.sendMessage(PostMessageMethods.REQUEST_ENTITIES, {\n entityIds: missing,\n entityType: type,\n locale: this.locale,\n });\n });\n\n this.requestCache.set(cacheId, newPromise);\n ids.forEach((cid) => {\n this.requestCache.set(cid, newPromise);\n });\n\n const result = (await newPromise) as Array<Entry> | Array<Asset>;\n\n result.forEach((value) => {\n this.addEntity(value);\n });\n\n return this.getEntitiesFromMap(type, ids).resolved as Array<Entry> | Array<Asset>;\n }\n\n public async fetchAsset(id: string, skipCache: boolean = false): Promise<Asset | undefined> {\n try {\n return (await this.fetchAssets([id], skipCache))[0];\n } catch (err) {\n // TODO: move to debug utils once it is extracted\n debug.warn(`[experiences-core::EditorEntityStore] Failed to request asset ${id}`);\n return undefined;\n }\n }\n\n public fetchAssets(ids: string[], skipCache: boolean = false): Promise<Asset[]> {\n return this.fetchEntity('Asset', ids, skipCache);\n }\n\n public async fetchEntry(id: string, skipCache: boolean = false): Promise<Entry | undefined> {\n try {\n return (await this.fetchEntries([id], skipCache))[0];\n } catch (err) {\n // TODO: move to debug utils once it is extracted\n debug.warn(`[experiences-core::EditorEntityStore] Failed to request entry ${id}`, err);\n return undefined;\n }\n }\n\n public fetchEntries(ids: string[], skipCache: boolean = false): Promise<Entry[]> {\n return this.fetchEntity('Entry', ids, skipCache);\n }\n}\n","import { AssetFile } from 'contentful';\n\nexport function transformAssetFileToUrl(\n fieldValue: string | AssetFile | undefined,\n): string | undefined {\n return fieldValue && typeof fieldValue == 'object' && (fieldValue as AssetFile).url\n ? (fieldValue as AssetFile).url\n : (fieldValue as string | undefined);\n}\n","import type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { sendMessage } from '../communication/sendMessage';\nimport { EditorEntityStore } from './EditorEntityStore';\nimport { RequestedEntitiesMessage } from '../types';\nimport { get } from '@/utils/get';\nimport { transformAssetFileToUrl } from './value-transformers';\nimport { debug } from '@/utils';\n\n// The default of 3s in the EditorEntityStore is sometimes timing out and\n// leads to not rendering bound content and assemblies.\nconst REQUEST_TIMEOUT = 10000;\n\nexport class EditorModeEntityStore extends EditorEntityStore {\n constructor({ entities, locale }: { entities: Array<Asset | Entry>; locale: string }) {\n debug.debug(\n `[experiences-core::EditorModeEntityStore] Initializing editor entity store with ${entities.length} entities for locale ${locale}.`,\n { entities },\n );\n\n const subscribe = (method: unknown, cb: (payload: RequestedEntitiesMessage) => void) => {\n const handleMessage = (event: MessageEvent) => {\n const data: {\n source: 'composability-app';\n eventType: string;\n payload: RequestedEntitiesMessage;\n } = JSON.parse(event.data);\n\n if (typeof data !== 'object' || !data) return;\n\n if (data.source !== 'composability-app') return;\n if (data.eventType === method) {\n cb(data.payload);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('message', handleMessage);\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('message', handleMessage);\n }\n };\n };\n\n super({ entities, sendMessage, subscribe, locale, timeoutDuration: REQUEST_TIMEOUT });\n }\n /**\n * This function collects and returns the list of requested entries and assets. Additionally, it checks\n * upfront whether any async fetching logic is actually happening. If not, it returns a plain `false` value, so we\n * can detect this early and avoid unnecessary re-renders.\n * @param entityLinks\n * @returns false if no async fetching is happening, otherwise a promise that resolves when all entities are fetched\n */\n async fetchEntities({\n missingEntryIds,\n missingAssetIds,\n skipCache = false,\n }: {\n missingEntryIds: string[];\n missingAssetIds: string[];\n skipCache?: boolean;\n }) {\n // Entries and assets will be stored in entryMap and assetMap\n await Promise.all([\n super.fetchEntries(missingEntryIds, skipCache),\n super.fetchAssets(missingAssetIds, skipCache),\n ]);\n }\n\n getMissingEntityIds(entityLinks: UnresolvedLink<'Entry' | 'Asset'>[]) {\n const entryLinks = entityLinks.filter((link) => link.sys?.linkType === 'Entry');\n const assetLinks = entityLinks.filter((link) => link.sys?.linkType === 'Asset');\n\n const uniqueEntryIds = [...new Set(entryLinks.map((link) => link.sys.id))];\n const uniqueAssetIds = [...new Set(assetLinks.map((link) => link.sys.id))];\n\n const { missing: missingEntryIds } = this.getEntitiesFromMap('Entry', uniqueEntryIds);\n const { missing: missingAssetIds } = this.getEntitiesFromMap('Asset', uniqueAssetIds);\n\n return { missingEntryIds, missingAssetIds };\n }\n\n public getValue(\n entityLinkOrEntity: UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset,\n path: string[],\n ): string | undefined {\n const entity = this.getEntryOrAsset(entityLinkOrEntity, path.join('/'));\n\n if (!entity) {\n return;\n }\n\n const fieldValue = get<string>(entity, path);\n return transformAssetFileToUrl(fieldValue);\n }\n}\n","import { ExperienceEntry, ExperienceFields } from '@/types';\nexport const resolveDeepUsedComponents = ({\n experienceEntryFields,\n parentComponents,\n}: {\n experienceEntryFields?: ExperienceFields;\n parentComponents: Set<string>;\n}): ExperienceEntry[] => {\n const totalUsedComponents: ExperienceEntry[] = [];\n const usedComponents = experienceEntryFields?.usedComponents as ExperienceEntry[];\n if (!usedComponents || usedComponents.length === 0) {\n return [];\n }\n for (const component of usedComponents) {\n if ('fields' in component) {\n totalUsedComponents.push(component);\n if (parentComponents.has(component.sys.id)) {\n continue;\n }\n\n totalUsedComponents.push(\n ...resolveDeepUsedComponents({\n experienceEntryFields: component.fields,\n parentComponents: new Set([...parentComponents, component.sys.id]),\n }),\n );\n }\n }\n return totalUsedComponents;\n};\n","import type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { checkIsAssemblyEntry, isExperienceEntry } from '@/utils';\nimport type {\n ExperienceFields,\n ExperienceUnboundValues,\n ExperienceEntry,\n VariableMapping,\n ParameterDefinition,\n} from '@/types';\nimport { EntityStoreBase } from './EntityStoreBase';\nimport { get } from '@/utils/get';\nimport { transformAssetFileToUrl } from './value-transformers';\nimport { isLink } from '@/utils/isLink';\nimport { resolveDeepUsedComponents } from '@/entity/utils/resolveDeepUsedComponents';\ntype EntityStoreArgs = {\n experienceEntry: ExperienceEntry | Entry;\n entities: Array<Entry | Asset>;\n locale: string;\n};\n\ntype ParameterDefinitions = NonNullable<Record<string, ParameterDefinition>>;\ntype VariableMappings = NonNullable<Record<string, VariableMapping>>;\n\nexport class EntityStore extends EntityStoreBase {\n private _isExperienceAPatternEntry: boolean;\n /* serialized */ private _experienceEntryFields: ExperienceFields | undefined;\n /* serialized */ private _experienceEntryId: string | undefined;\n /* serialized */ private _unboundValues: ExperienceUnboundValues | undefined;\n /* derived */ private _usedComponentsWithDeepReferences: ExperienceEntry[];\n /* derived */ private _hoistedParameterDefinitions: ParameterDefinitions; // Hoisted, because they contain parameter definitions also from child patterns\n /* derived */ private _hoistedVariableMappings: VariableMappings; // Hoisted, because they contain variable mappings also from child patterns\n\n constructor(json: string);\n constructor({ experienceEntry, entities, locale }: EntityStoreArgs);\n\n constructor(options: string | EntityStoreArgs) {\n if (typeof options === 'string') {\n // For SSR/SSG, the entity store is created server-side and passed to the client as a serialised JSON.\n // So the properties in data.entityStore are equal to the attributes of this class (see `toJSON()`)\n const serializedAttributes = JSON.parse(options).entityStore;\n super({\n entities: [\n ...(Object.values(serializedAttributes.entryMap) as Entry[]),\n ...(Object.values(serializedAttributes.assetMap) as Asset[]),\n ],\n locale: serializedAttributes.locale,\n });\n this._hoistedParameterDefinitions = {};\n this._hoistedVariableMappings = {};\n this._experienceEntryFields = serializedAttributes._experienceEntryFields as ExperienceFields; // non-broken deserialization always should result in valid ExperienceFields\n this._experienceEntryId = serializedAttributes._experienceEntryId as string; // // non-broken deserialization always should result in valid experienceEntryId\n this._unboundValues = serializedAttributes._unboundValues as ExperienceUnboundValues; // non-broken deserialization always should result in valid unboundValues\n } else {\n const { experienceEntry, entities, locale } = options;\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error('Provided entry is not an experience entry');\n }\n\n super({ entities, locale });\n this._hoistedParameterDefinitions = {};\n this._hoistedVariableMappings = {};\n this._experienceEntryFields = experienceEntry.fields;\n this._experienceEntryId = experienceEntry.sys.id;\n this._unboundValues = experienceEntry.fields.unboundValues;\n }\n\n this._isExperienceAPatternEntry = checkIsAssemblyEntry({\n fields: this._experienceEntryFields,\n } as unknown as Entry);\n\n // DERIVE ENTITY STORE INSTANCE VARIBLES\n // Register prebindings\n {\n const usedComponentLinks = this._experienceEntryFields.usedComponents ?? [];\n const usedComponents: ExperienceEntry[] = usedComponentLinks\n .map((component) => (isLink(component) ? this.getEntityFromLink(component) : component))\n .filter((component): component is ExperienceEntry => component !== undefined);\n\n this._hoistedParameterDefinitions = EntityStore.calculateHoistedParameterDefinitions(\n this._experienceEntryFields,\n usedComponents,\n );\n this._hoistedVariableMappings = EntityStore.calculateHoistedVariableMappings(\n this._experienceEntryFields,\n usedComponents,\n );\n }\n\n // Register deep references\n this._usedComponentsWithDeepReferences = resolveDeepUsedComponents({\n experienceEntryFields: this._experienceEntryFields,\n parentComponents: new Set([this._experienceEntryId!]),\n });\n }\n\n private static calculateHoistedParameterDefinitions(\n parentEntryFields: ExperienceFields,\n usedComponents: ExperienceEntry[],\n ): ParameterDefinitions {\n let hoistedDefinitions: ParameterDefinitions = {};\n\n // --------------------\n // Hoist prebinding for the L1 parent pattern aka `pA`\n // --------------------\n hoistedDefinitions = Object.assign(\n hoistedDefinitions,\n parentEntryFields.componentSettings?.prebindingDefinitions?.[0].parameterDefinitions || {},\n );\n\n // --------------------\n // Hoist prebinding for the L2 nested patterns, patterns aka`pB`\n // --------------------\n usedComponents.forEach((patternEntryLevel2) => {\n hoistedDefinitions = {\n ...hoistedDefinitions,\n ...patternEntryLevel2.fields.componentSettings?.prebindingDefinitions?.[0]\n .parameterDefinitions,\n };\n });\n\n // --------------------\n // Hoist prebinding for L3 nested patterns, patterns aka `pC`\n // --------------------\n const usedComponentsLevel3 = usedComponents.flatMap((patternEntryLevel2) => {\n const usedComponents = patternEntryLevel2.fields.usedComponents || [];\n const filteredUsedComponents = usedComponents.filter(\n (component): component is ExperienceEntry =>\n component !== undefined && isExperienceEntry(component as Entry), // here we assume that due to fetchReferencedEntities() loading with include=2 we already have those resolved to entries\n );\n return filteredUsedComponents;\n });\n\n usedComponentsLevel3.forEach((patternEntryLevel3) => {\n hoistedDefinitions = {\n ...hoistedDefinitions,\n ...patternEntryLevel3.fields.componentSettings?.prebindingDefinitions?.[0]\n .parameterDefinitions,\n };\n });\n\n return hoistedDefinitions;\n }\n\n private static calculateHoistedVariableMappings(\n parentEntryFields: ExperienceFields,\n usedComponents: ExperienceEntry[],\n ): VariableMappings {\n let hoistedMappings: VariableMappings = {};\n\n // --------------------\n // Hoist prebinding for the L1 parent pattern aka `pA`\n // --------------------\n hoistedMappings = Object.assign(\n hoistedMappings,\n parentEntryFields.componentSettings?.prebindingDefinitions?.[0].variableMappings || {},\n );\n\n // --------------------\n // Hoist prebinding for the L2 nested patterns, patterns aka`pB`\n // --------------------\n usedComponents.forEach((patternEntryLevel2) => {\n hoistedMappings = {\n ...hoistedMappings,\n ...patternEntryLevel2.fields.componentSettings?.prebindingDefinitions?.[0].variableMappings,\n };\n });\n\n // --------------------\n // Hoist prebinding for L3 nested patterns, patterns aka `pC`\n // --------------------\n const usedComponentsLevel3 = usedComponents.flatMap((patternEntryLevel2) => {\n const usedComponents = patternEntryLevel2.fields.usedComponents || [];\n const filteredUsedComponents = usedComponents.filter(\n (component): component is ExperienceEntry =>\n component !== undefined && isExperienceEntry(component as Entry), // here we assume that due to fetchReferencedEntities() loading with include=2 we already have those resolved to entries\n );\n return filteredUsedComponents;\n });\n\n usedComponentsLevel3.forEach((patternEntryLevel3) => {\n hoistedMappings = {\n ...hoistedMappings,\n ...patternEntryLevel3.fields.componentSettings?.prebindingDefinitions?.[0].variableMappings,\n };\n });\n\n return hoistedMappings;\n }\n\n public getCurrentLocale() {\n return this.locale;\n }\n\n public get isExperienceAPatternEntry() {\n return this._isExperienceAPatternEntry;\n }\n\n public get hoistedVariableMappings() {\n return this._hoistedVariableMappings;\n }\n\n public get hoistedParameterDefinitions() {\n return this._hoistedParameterDefinitions;\n }\n\n public get experienceEntryFields() {\n return this._experienceEntryFields;\n }\n\n public get experienceEntryId() {\n return this._experienceEntryId;\n }\n\n public get schemaVersion() {\n return this._experienceEntryFields?.componentTree.schemaVersion;\n }\n\n public get breakpoints() {\n return this._experienceEntryFields?.componentTree.breakpoints ?? [];\n }\n\n public get dataSource() {\n return this._experienceEntryFields?.dataSource ?? {};\n }\n\n public get unboundValues() {\n return this._unboundValues ?? {};\n }\n\n public get usedComponents() {\n return this._usedComponentsWithDeepReferences ?? [];\n }\n\n /**\n * Extend the existing set of unbound values with the ones from the assembly definition.\n * When creating a new assembly out of a container, the unbound value keys are copied and\n * thus the existing and the added ones have colliding keys. In the case of overlapping value\n * keys, the ones from the experience overrule the ones from the assembly definition as\n * the latter one is certainly just a default value while the other one is from the actual instance.\n * @param unboundValues set of unbound values defined in the assembly definition\n */\n public addAssemblyUnboundValues(unboundValues: ExperienceUnboundValues) {\n this._unboundValues = { ...unboundValues, ...(this._unboundValues ?? {}) };\n }\n\n public getValue(\n entityLinkOrEntity: UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset,\n path: string[],\n ): string | undefined {\n const entity = isLink(entityLinkOrEntity)\n ? this.getEntityFromLink(entityLinkOrEntity)\n : (entityLinkOrEntity as Entry | Asset);\n if (entity === undefined) {\n return;\n }\n const fieldValue = get<string>(entity, path);\n return transformAssetFileToUrl(fieldValue);\n }\n\n public toJSON() {\n return {\n _experienceEntryFields: this._experienceEntryFields,\n _experienceEntryId: this._experienceEntryId,\n _unboundValues: this._unboundValues,\n ...super.toJSON(),\n };\n }\n}\n","import { EntityStoreBase } from './EntityStoreBase';\n\nexport class UninitializedEntityStore extends EntityStoreBase {\n constructor() {\n super({ entities: [], locale: 'uninitialized-locale-in-uninitialized-entity-store' });\n }\n}\n","import { create } from 'zustand';\nimport type { EntityStoreBase } from './EntityStoreBase';\nimport type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { UninitializedEntityStore } from './UninitializedEntityStore';\n\nexport interface InMemoryEntitiesState {\n entityStore: EntityStoreBase;\n // Set to true when entities were fetched from the parent app.\n // Reset to false when we receive a tree update and need to validate\n // again whether all necessary entities are fetched.\n areEntitiesFetched: boolean;\n // updaters\n setEntitiesFetched: (fetched: boolean) => void;\n resolveEntity: <T extends 'Entry' | 'Asset'>(\n link?: UnresolvedLink<T>,\n ) => Entry | Asset | undefined;\n resolveAssetById: (assetId?: string) => Asset | undefined;\n resolveEntryById: (entryId?: string) => Entry | undefined;\n resetEntityStore: (entityStore: EntityStoreBase) => void;\n}\n\nexport const inMemoryEntitiesStore = create<InMemoryEntitiesState>((set, get) => ({\n // The UninitializedEntityStore is a placeholder instance and is here to highlight the\n // // fact that it's not used by anything until during loading lifecycle it'sreplaced by real entity store:\n // - in Preview+Delivery mode: right after we fetch Expereince and it entities\n // - in EDITOR (VisualEditor) mode: right after the VisualEditor is async imported and initialize event happens\n entityStore: new UninitializedEntityStore(),\n areEntitiesFetched: false,\n\n setEntitiesFetched(fetched) {\n set({ areEntitiesFetched: fetched });\n },\n resolveAssetById(assetId?: string) {\n if (!assetId) return undefined;\n const { entityStore } = get();\n return entityStore.getAssetById(assetId);\n },\n resolveEntryById(entryId?: string) {\n if (!entryId) return undefined;\n const { entityStore } = get();\n return entityStore.getEntryById(entryId);\n },\n resolveEntity<T extends 'Entry' | 'Asset'>(link?: UnresolvedLink<T>) {\n if (!link) return undefined;\n const { entityStore } = get();\n return entityStore.getEntityFromLink(link);\n },\n resetEntityStore(entityStore) {\n set({\n entityStore,\n areEntitiesFetched: false,\n });\n },\n}));\n\nexport type InMemoryEntitiesStore = typeof inMemoryEntitiesStore;\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { isLink } from '../utils/isLink';\nimport { inMemoryEntitiesStore } from './InMemoryEntitiesStore';\nimport { debug } from '@/utils';\n\n/**\n * Resolves a link to its corresponding entry or asset if available.\n *\n * @note When using this function please ensure to explicitly handle `undefined` values in\n * your component to protect against scenarios where the property was not yet bound to an\n * entity inside the editor UI. The SDK will set the property to `undefined` in those cases.\n * You can use the SDK helper functions `isLink`, `isLinkToEntry`, `isLinkToAsset`, or\n * `isArrayOfLinks` for this purpose.\n */\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Entry'>): Entry | undefined;\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Asset'>): Asset | undefined;\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Asset' | 'Entry'>): Asset | Entry | undefined;\nfunction maybeResolveLink(maybeLink: NonNullable<unknown>): Entry | Asset | undefined;\nfunction maybeResolveLink(maybeLink: NonNullable<unknown>): Entry | Asset | undefined {\n if (!isLink(maybeLink)) {\n debug.warn(\n '[experiences-core::InMemoryEntitiesStore] maybeResolveLink function must receive Link shape. Provided argument does not match the Link shape: ',\n maybeLink,\n );\n return undefined;\n }\n return inMemoryEntitiesStore.getState().resolveEntity(maybeLink);\n}\n\nfunction maybeResolveByAssetId(assetId: string): Asset | undefined {\n return inMemoryEntitiesStore.getState().resolveAssetById(assetId);\n}\n\nfunction maybeResolveByEntryId(entryId: string): Entry | undefined {\n return inMemoryEntitiesStore.getState().resolveEntryById(entryId);\n}\n\nfunction hasEntry(entryId: string): boolean {\n return Boolean(maybeResolveByEntryId(entryId));\n}\n\nfunction hasAsset(assetId: string): boolean {\n return Boolean(maybeResolveByAssetId(assetId));\n}\n\nfunction addEntities(entities: Array<Entry>): void;\nfunction addEntities(entities: Array<Asset>): void;\nfunction addEntities(entities: Array<Entry | Asset>): void;\nfunction addEntities(entities: Array<Entry> | Array<Asset> | Array<Entry | Asset>): void {\n if (!Array.isArray(entities) || entities.length === 0) {\n return;\n }\n\n const { entityStore } = inMemoryEntitiesStore.getState();\n const definedEntities = entities.filter(Boolean);\n\n for (const entity of definedEntities) {\n entityStore.updateEntity(entity);\n }\n}\n\nconst inMemoryEntities = {\n maybeResolveLink,\n maybeResolveByAssetId,\n maybeResolveByEntryId,\n hasEntry,\n hasAsset,\n addEntities,\n};\n\nexport type InMemoryEntitiesPublicApi = typeof inMemoryEntities;\n\nconst useInMemoryEntities = () => {\n return inMemoryEntities;\n};\n\nexport { inMemoryEntities, useInMemoryEntities };\n","export enum VisualEditorMode {\n LazyLoad = 'lazyLoad',\n InjectScript = 'injectScript',\n}\n","import type { Asset, Entry } from 'contentful';\nimport { isExperienceEntry } from '@/utils';\nimport type { Experience } from '@/types';\nimport { EntityStore } from '@/entity/EntityStore';\nimport { inMemoryEntitiesStore } from '@/entity/InMemoryEntitiesStore';\n\ntype CreateExperienceParams = {\n experienceEntry: Entry;\n referencedEntries: Array<Entry>;\n referencedAssets: Array<Asset>;\n // TODO: Remove as it is not used by createExperience nor by the EntityStore nor EntityStoreBase\n locale: string;\n};\n\n/**\n * Create an experience instance using a serialized version of the entity store for SSR purposes.\n * @param {string} json - JSON representation of the experience\n */\nexport function createExperience(json: string): Experience<EntityStore>;\n/**\n * Create an experience instance using the already fetched entries and assets.\n * @param options.experienceEntry - Localized experience entry which will be rendered\n * @param options.referencedEntries - Array of localized entries which are referenced by the experience entry in its dataSource\n * @param options.referencedAssets - Array of localized assets which are referenced by the experience entry in its dataSource\n * @param options.locale - (Soon to be removed unused parameter)\n */\nexport function createExperience(options: CreateExperienceParams): Experience<EntityStore>;\n\nexport function createExperience(\n options: string | CreateExperienceParams,\n): Experience<EntityStore> {\n let entityStore: EntityStore;\n\n if (typeof options === 'string') {\n entityStore = new EntityStore(options);\n } else {\n const { experienceEntry, referencedAssets, referencedEntries, locale } = options;\n if ([experienceEntry, ...referencedAssets, ...referencedEntries].some(isNotLocalized)) {\n throw new Error(\n 'Some of the provided content is not localized. Please localize every entity before passing it to this function. Note that this is solely determined by `sys.locale` being set respectively.',\n );\n }\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error('Provided entry is not an experience entry');\n }\n\n entityStore = new EntityStore({\n experienceEntry,\n entities: [...referencedEntries, ...referencedAssets],\n locale,\n });\n }\n\n inMemoryEntitiesStore.getState().resetEntityStore(entityStore);\n return {\n entityStore,\n };\n}\n\n// Following the API shape, we check the `sys.locale` property as we can't rely on the shape of\n// fields to determine whether it's localized or not.\n// See CDA documentation mentioning it here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/introduction/common-resource-attributes\nconst isNotLocalized = (entity: Entry | Asset) => {\n return !entity.sys.locale;\n};\n","import { ContentfulClientApi, Entry } from 'contentful';\n\ntype ClientAndLocaleParams =\n | {\n client: ContentfulClientApi<undefined>;\n locale?: string;\n }\n | {\n client: ContentfulClientApi<'WITH_ALL_LOCALES'>;\n /** When fetching all locales, this may not be defined */\n locale?: undefined;\n };\n\ntype FetchExperienceEntryParams = {\n experienceTypeId: string;\n identifier: { slug: string } | { id: string };\n} & ClientAndLocaleParams;\n\n/**\n * Fetches an experience entry by its slug or id. Throws an error if there are multiple\n * entries with the same slug. Additionally, it resolves all nested pattern entries inside `fields.usedComponents`.\n * @param options.client - Instantiated client from the Contentful SDK. If this is using the `withAllLocales` modifier, you may not provide a specific locale.\n * @param options.locale - Provide a locale if your experience contains custom localized fields. Otherwise, it will fallback to the default locale.\n * @param options.experienceTypeId - id of the content type associated with the experience\n * @param options.identifier - identifying condition to find the correct experience entry\n *\n */\nexport const fetchExperienceEntry = async ({\n client,\n experienceTypeId,\n locale,\n identifier,\n}: FetchExperienceEntryParams) => {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!experienceTypeId) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"experienceTypeId\" parameter was not provided',\n );\n }\n\n if (!('slug' in identifier) && !('id' in identifier)) {\n throw new Error(\n `Failed to fetch experience entities. At least one identifier must be provided. Received: ${JSON.stringify(\n identifier,\n )}`,\n );\n }\n\n const filter =\n 'slug' in identifier ? { 'fields.slug': identifier.slug } : { 'sys.id': identifier.id };\n\n const entries = await client.getEntries({\n content_type: experienceTypeId,\n locale,\n include: 3, // fetching max 3 level deep references due to nested patterns\n ...filter,\n });\n\n if (entries.items.length > 1) {\n throw new Error(\n `More than one experience with identifier: ${JSON.stringify(identifier)} was found`,\n );\n }\n\n return entries.items[0] as Entry | undefined;\n};\n","import {\n ExperienceTreeNode,\n ExperienceDataSource,\n DataSourceEntryValueType,\n ExperienceEntry,\n ComponentTreeNode,\n Link,\n} from '@/types';\nimport {\n getPrebindingPathBySourceEntry,\n isDeepPath,\n isDeepPrebinding,\n isPreboundProp,\n parseDataSourcePathWithL1DeepBindings,\n} from '@/utils/pathSchema';\nimport { treeVisit } from '@/utils/treeTraversal';\nimport { isLink } from '@/utils/isLink';\nimport type { EntityFromLink, EntityStoreBase } from '@/entity';\nimport { Entry } from 'contentful';\nimport {\n generateDefaultDataSourceForPrebindingDefinition,\n getTargetPatternMappingsForParameter,\n PrebindingData,\n} from '@/utils';\n\ntype DeepReferenceOpts = {\n path: string;\n dataSource: ExperienceDataSource;\n};\n\nexport class DeepReference {\n public entityId: string;\n public entityLink: DataSourceEntryValueType;\n public field: string;\n public referentField: string;\n public originalPath: string;\n\n constructor({ path, dataSource }: DeepReferenceOpts) {\n const { key, field, referentField } = parseDataSourcePathWithL1DeepBindings(path);\n\n this.originalPath = path;\n this.entityId = dataSource[key].sys.id;\n this.entityLink = dataSource[key];\n this.field = field;\n this.referentField = referentField;\n }\n\n get headEntityId() {\n return this.entityId;\n }\n\n /**\n * Extracts referent from the path, using EntityStore as source of\n * entities during the resolution path.\n */\n extractReferent(entityStore: EntityFromLink): Link<'Asset' | 'Entry'> | undefined {\n const headEntity = entityStore.getEntityFromLink(this.entityLink);\n\n const maybeReferentLink = headEntity?.fields[this.field] as\n | Link<'Entry'>\n | Link<'Asset'>\n | undefined\n | unknown;\n\n if (undefined === maybeReferentLink) {\n // field references nothing (or even field doesn't exist)\n return undefined;\n }\n\n if (!isLink(maybeReferentLink)) {\n // Scenario of \"impostor referent\", where one of the deepPath's segments is not a Link but some other type\n // Under normal circumstance we expect field to be a Link, but it could be an \"impostor\"\n // eg. `Text` or `Number` or anything like that; could be due to CT changes or manual path creation via CMA\n return undefined;\n }\n\n return maybeReferentLink;\n }\n\n static from(opt: DeepReferenceOpts) {\n return new DeepReference(opt);\n }\n}\n\nexport function gatherDeepReferencesFromExperienceEntry(\n experienceEntry: ExperienceEntry,\n): DeepReference[] {\n const deepReferences: Array<DeepReference> = [];\n const dataSource = experienceEntry.fields.dataSource;\n const { children } = experienceEntry.fields.componentTree;\n\n treeVisit(\n {\n definitionId: 'root',\n variables: {},\n children,\n } as ComponentTreeNode,\n (node) => {\n if (!node.variables) return;\n\n for (const variableMapping of Object.values(node.variables)) {\n if (variableMapping.type !== 'BoundValue') continue;\n if (!isDeepPath(variableMapping.path)) continue;\n\n deepReferences.push(\n DeepReference.from({\n path: variableMapping.path,\n dataSource,\n }),\n );\n }\n },\n );\n\n return deepReferences;\n}\n\nexport function gatherDeepPrebindingReferencesFromExperienceEntry({\n experienceEntry,\n fetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries,\n}: {\n experienceEntry: ExperienceEntry;\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n fetchedLevel1Entries: Array<Entry>;\n}) {\n const deepPrebindingReferences: Array<DeepReference> = [];\n const dataSource = experienceEntry.fields.dataSource;\n const { children } = experienceEntry.fields.componentTree;\n\n treeVisit(\n {\n definitionId: 'root',\n parameters: {},\n children,\n } as ComponentTreeNode,\n (node) => {\n if (!node.parameters) return;\n\n for (const [parameterId, parameterValue] of Object.entries(node.parameters)) {\n const dataSourceKey = parameterValue.path.split('/')[1];\n const headEntryLink = dataSource[dataSourceKey];\n if (!headEntryLink) continue;\n if (headEntryLink.sys.linkType !== 'Entry') continue;\n const headEntry = fetchedLevel1Entries.find(\n (entry) => entry.sys.id === headEntryLink.sys.id,\n );\n if (!headEntry) continue;\n\n const headEntryContentTypeId = headEntry.sys.contentType.sys.id;\n\n // if experience, we don't have any hoisted data on the given experienceEntry\n // and we have to lookup the pattern instead\n const variableMappings = getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: node.definitionId,\n parameterId,\n });\n\n if (!variableMappings) continue;\n\n for (const mappingData of Object.values(variableMappings)) {\n const targetMapping = mappingData.pathsByContentType[headEntryContentTypeId];\n if (!targetMapping) continue;\n // mapping doesn't start with /uuid, but instead starts with /fields\n // so we add /uuid to make it match the binding path format\n const path = `/${dataSourceKey}${targetMapping.path}`;\n if (!isDeepPath(path)) continue;\n\n deepPrebindingReferences.push(\n DeepReference.from({\n path,\n dataSource,\n }),\n );\n }\n }\n },\n );\n\n return deepPrebindingReferences;\n}\n\nexport function gatherDeepPrebindingReferencesFromPatternEntry({\n patternEntry,\n fetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries,\n}: {\n patternEntry: ExperienceEntry;\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n fetchedLevel1Entries: Array<Entry>;\n}) {\n const deepPrebindingReferences: Array<DeepReference> = [];\n // patterns can't have parameters in their CDA/CMA JSON, so we can generate random ids here\n const { dataSource, parameters } = generateDefaultDataSourceForPrebindingDefinition(\n patternEntry.fields.componentSettings?.prebindingDefinitions,\n );\n\n for (const [parameterId, parameterValue] of Object.entries(parameters)) {\n const dataSourceKey = parameterValue.path.split('/')[1];\n const headEntryLink = dataSource[dataSourceKey];\n if (!headEntryLink) continue;\n if (headEntryLink.sys.linkType !== 'Entry') continue;\n\n const headEntry = fetchedLevel1Entries.find((entry) => entry.sys.id === headEntryLink.sys.id);\n if (!headEntry) continue;\n\n const headEntryContentTypeId = headEntry.sys.contentType.sys.id;\n\n const variableMappings = getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: patternEntry.sys.id,\n parameterId,\n });\n\n if (!variableMappings) continue;\n\n for (const mappingData of Object.values(variableMappings)) {\n const targetMapping = mappingData.pathsByContentType[headEntryContentTypeId];\n if (!targetMapping) continue;\n // mapping doesn't start with /uuid, but instead starts with /fields\n // so we add /uuid to make it match the binding path format\n const path = `/${dataSourceKey}${targetMapping.path}`;\n if (!isDeepPath(path)) continue;\n\n deepPrebindingReferences.push(\n DeepReference.from({\n path,\n dataSource,\n }),\n );\n }\n }\n return deepPrebindingReferences;\n}\n\n/**\n * used in editor mode. for delivery mode see `gatherDeepReferencesFromExperienceEntry`\n */\nexport function gatherDeepReferencesFromTree(\n startingNode: ExperienceTreeNode,\n dataSource: ExperienceDataSource,\n getEntityFromLink: EntityStoreBase['getEntityFromLink'],\n): DeepReference[] {\n const deepReferences: Array<DeepReference> = [];\n\n treeVisit(startingNode, (node) => {\n if (!node.data.props) return;\n\n for (const [, variableMapping] of Object.entries(node.data.props)) {\n if (variableMapping.type !== 'BoundValue') continue;\n\n if (isDeepPath(variableMapping.path)) {\n deepReferences.push(\n DeepReference.from({\n path: variableMapping.path,\n dataSource,\n }),\n );\n } else if (isPreboundProp(variableMapping) && isDeepPrebinding(variableMapping)) {\n const getEntityByDataSourceKey = (dataSourceKey: string) => {\n const entityLink = dataSource[dataSourceKey];\n if (!entityLink) return undefined;\n return getEntityFromLink(entityLink);\n };\n\n const deepPrebindingPath = getPrebindingPathBySourceEntry(\n variableMapping,\n getEntityByDataSourceKey,\n );\n if (!deepPrebindingPath) continue;\n deepReferences.push(\n DeepReference.from({\n path: deepPrebindingPath,\n dataSource,\n }),\n );\n }\n }\n });\n\n return deepReferences;\n}\n","import { Entry, Asset, UnresolvedLink } from 'contentful';\nimport type { DeepReference } from '@/deep-binding/DeepReference';\nimport { isLink } from '@/utils/isLink';\nimport { debug } from '@/utils';\n\nexport type MinimalEntryCollection = {\n items: Entry[];\n includes: {\n Entry: Entry[];\n Asset: Asset[];\n };\n};\n\n/**\n * Traverses deep-references and extracts referents from valid deep-paths.\n * The referents are received from the CDA/CPA response `.includes` field.\n *\n * In case deep-paths not resolving till the end, eg.:\n * - non-link referents: are ignored\n * - unset references: are ignored\n *\n * Errors are thrown in case of deep-paths being correct,\n * but referents not found. Because if we don't throw now, the EntityStore will\n * be missing entities and upon rendering will not be able to render bindings.\n */\nexport function gatherAutoFetchedReferentsFromIncludes(\n deepReferences: DeepReference[],\n entriesResponse: MinimalEntryCollection,\n): {\n autoFetchedReferentEntries: Entry[];\n autoFetchedReferentAssets: Asset[];\n} {\n const autoFetchedReferentEntries: Entry[] = [];\n const autoFetchedReferentAssets: Asset[] = [];\n\n for (const reference of deepReferences) {\n const headEntry = entriesResponse.items.find(\n (entry) => entry.sys.id === reference.headEntityId,\n );\n if (!headEntry) {\n debug.debug(\n `[experiences-sdk-core::fetchers] When resolving deep-references could not find headEntry with id '${reference.entityId}'`,\n );\n continue;\n }\n\n const linkToReferent = headEntry.fields[reference.field] as UnresolvedLink<'Asset' | 'Entry'>;\n\n if (undefined === linkToReferent) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Empty reference in headEntity. Probably reference is simply not set.`,\n );\n continue;\n }\n\n if (!isLink(linkToReferent)) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Non-link value in headEntity. Probably broken path '${reference.originalPath}'`,\n );\n continue;\n }\n\n const linkType = linkToReferent.sys.linkType;\n\n if (!['Entry', 'Asset'].includes(linkType)) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Unhandled linkType :${JSON.stringify(linkToReferent)}`,\n );\n continue;\n }\n\n const referentEntity = entriesResponse.includes?.[linkType]?.find(\n (entity) => entity.sys.id === linkToReferent.sys.id,\n );\n if (!referentEntity) {\n debug.debug(\n `[experiences-sdk-core::fetchers] L2-referent ${linkType} was not found within .includes (${JSON.stringify(\n {\n linkToReferent,\n },\n )})`,\n );\n continue;\n }\n\n linkType === 'Entry'\n ? autoFetchedReferentEntries.push(referentEntity as Entry)\n : autoFetchedReferentAssets.push(referentEntity as Asset);\n } // for (reference of deepReferences)\n\n return { autoFetchedReferentAssets, autoFetchedReferentEntries };\n}\n","import { Asset, ContentfulClientApi, Entry } from 'contentful';\nimport { MinimalEntryCollection } from './gatherAutoFetchedReferentsFromIncludes';\nimport { uniqueById } from '@/utils';\n\nconst MIN_FETCH_LIMIT = 1;\nexport const fetchAllEntries = async ({\n client,\n ids,\n locale,\n skip = 0,\n limit = 100,\n responseItems = [],\n responseIncludes = { Entry: [], Asset: [] },\n}: {\n client: ContentfulClientApi<undefined> | ContentfulClientApi<'WITH_ALL_LOCALES'>;\n ids: string[];\n locale?: string;\n skip?: number;\n limit?: number;\n responseItems?: Entry[];\n responseIncludes?: MinimalEntryCollection['includes'];\n}): Promise<{\n items: Entry[];\n includes: {\n Entry: Entry[];\n Asset: Asset[];\n };\n}> => {\n try {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!ids.length) {\n return {\n items: [],\n includes: {\n Entry: [],\n Asset: [],\n },\n };\n }\n\n const query = { 'sys.id[in]': ids, locale, limit, skip, include: 2 as 2 | undefined };\n\n const {\n items,\n includes,\n total: responseTotal,\n } = await client.withoutLinkResolution.getEntries({ ...query });\n\n responseItems.push(...(items as Entry[]));\n responseIncludes?.Entry?.push(...(includes?.Entry || []));\n responseIncludes?.Asset?.push(...(includes?.Asset || []));\n\n // E.g Total entries = 99\n // First fetch => { skip: 0, limit: 50, total: 99 } => 50 Entries fetched in Page 0\n // Total Entries fetched = 50, 49 remaining\n\n // 0(skip) + 50(limit) < 99(total) => Fetch again\n // Second fetch => { skip: 50, limit: 50, total: 99 } => 49 Entries fetched in Page 1\n // Total Entries fetched = 50(Page 0) + 49(Page 1) = 99, 0 remaining\n\n // 50(skip) + 50(limit) > 99(total) => Stop fetching\n if (skip + limit < responseTotal) {\n return await fetchAllEntries({\n client,\n ids,\n locale,\n skip: skip + limit,\n limit,\n responseItems,\n responseIncludes,\n });\n }\n\n const dedupedEntries = uniqueById(responseIncludes?.Entry);\n const dedupedAssets = uniqueById(responseIncludes?.Asset);\n\n return {\n items: responseItems,\n includes: {\n Entry: dedupedEntries,\n Asset: dedupedAssets,\n },\n };\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('size too big') &&\n limit > MIN_FETCH_LIMIT\n ) {\n const newLimit = Math.max(MIN_FETCH_LIMIT, Math.floor(limit / 2));\n return fetchAllEntries({\n client,\n ids,\n locale,\n skip,\n limit: newLimit,\n responseItems,\n });\n }\n\n throw error;\n }\n};\n\nexport const fetchAllAssets = async ({\n client,\n ids,\n locale,\n skip = 0,\n limit = 100,\n responseItems = [],\n}: {\n client: ContentfulClientApi<undefined> | ContentfulClientApi<'WITH_ALL_LOCALES'>;\n ids: string[];\n locale?: string;\n skip?: number;\n limit?: number;\n responseItems?: Asset[];\n}): Promise<{ items: Asset[] }> => {\n try {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!ids.length) {\n return { items: [] };\n }\n\n const query = { 'sys.id[in]': ids, locale, limit, skip };\n\n const { items, total: responseTotal } = await client.getAssets({ ...query });\n\n responseItems.push(...(items as Asset[]));\n\n if (skip + limit < responseTotal) {\n return await fetchAllAssets({\n client,\n ids,\n locale,\n skip: skip + limit,\n limit,\n responseItems,\n });\n }\n\n return {\n items: responseItems,\n };\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('size too big') &&\n limit > MIN_FETCH_LIMIT\n ) {\n const newLimit = Math.max(MIN_FETCH_LIMIT, Math.floor(limit / 2));\n return fetchAllAssets({\n client,\n ids,\n locale,\n skip,\n limit: newLimit,\n responseItems,\n });\n }\n\n throw error;\n }\n};\n","import { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry, Asset } from 'contentful';\nimport {\n extractPrebindingDataByPatternId,\n flattenNestedPatterns,\n generateDefaultDataSourceForPrebindingDefinition,\n isExperienceEntry,\n} from '@/utils';\nimport {\n DeepReference,\n gatherDeepPrebindingReferencesFromExperienceEntry,\n gatherDeepPrebindingReferencesFromPatternEntry,\n gatherDeepReferencesFromExperienceEntry,\n} from '@/deep-binding';\nimport { gatherAutoFetchedReferentsFromIncludes } from './gatherAutoFetchedReferentsFromIncludes';\nimport { fetchAllEntries, fetchAllAssets } from './fetchAllEntities';\n\ntype ClientAndLocaleParams =\n | {\n client: ContentfulClientApi<undefined>;\n locale?: string;\n }\n | {\n client: ContentfulClientApi<'WITH_ALL_LOCALES'>;\n /** When fetching all locales, this may not be defined */\n locale?: undefined;\n };\n\ntype FetchReferencedEntitiesArgs = {\n experienceEntry: Entry | ExperienceEntry;\n} & ClientAndLocaleParams;\n\n/**\n * Fetches all entries and assets from the `dataSource` of the given experience entry. This will\n * also consider deep references that are not listed explicitly but linked through deep binding paths.\n * @param options.client - Instantiated client from the Contentful SDK. If this is using the `withAllLocales` modifier, you may not provide a specific locale.\n * @param options.experienceEntry - Localized experience entry. To localize a multi locale entry, use the `localizeEntity` function.\n * @param options.locale - Retrieve a specific localized version of the referenced entities. Otherwise, it will fallback to the default locale.\n * @returns object with a list of `entries` and a list of `assets`\n */\nexport const fetchReferencedEntities = async ({\n client,\n experienceEntry,\n locale,\n}: FetchReferencedEntitiesArgs) => {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error(\n 'Failed to fetch experience entities. Provided \"experienceEntry\" does not match experience entry schema',\n );\n }\n\n const entryIds = new Set<string>();\n const assetIds = new Set<string>();\n\n for (const dataBinding of Object.values((experienceEntry as ExperienceEntry).fields.dataSource)) {\n if (!('sys' in dataBinding)) {\n continue;\n }\n if (dataBinding.sys.linkType === 'Entry') {\n entryIds.add(dataBinding.sys.id);\n }\n if (dataBinding.sys.linkType === 'Asset') {\n assetIds.add(dataBinding.sys.id);\n }\n }\n\n const [entriesResponse, assetsResponse] = await Promise.all([\n fetchAllEntries({ client, ids: [...entryIds], locale }),\n fetchAllAssets({ client, ids: [...assetIds], locale }),\n ]);\n\n const usedPatterns = experienceEntry.fields.usedComponents ?? [];\n const isRenderingExperience = Boolean(!experienceEntry.fields.componentSettings);\n\n const deepReferences: Array<DeepReference> = gatherDeepReferencesFromExperienceEntry(\n experienceEntry as ExperienceEntry,\n );\n\n // If we are previewing a pattern, we want to include the entry itself as well\n const fetchedPatterns = (\n isRenderingExperience ? usedPatterns : [...usedPatterns, experienceEntry]\n ) as Array<ExperienceEntry>;\n const allFetchedPatterns = flattenNestedPatterns(fetchedPatterns);\n const prebindingDataByPatternId = extractPrebindingDataByPatternId(allFetchedPatterns);\n\n // Patterns do not have dataSource stored in their dataSource field, so head entities won't be there and we need to fetch them\n if (!isRenderingExperience) {\n const { dataSource } = generateDefaultDataSourceForPrebindingDefinition(\n experienceEntry.fields.componentSettings?.prebindingDefinitions,\n );\n\n if (Object.keys(dataSource).length) {\n const prebindingEntriesResponse = await fetchAllEntries({\n client,\n ids: Object.values(dataSource).map((link) => link.sys.id),\n locale,\n });\n\n entriesResponse.items.push(...prebindingEntriesResponse.items);\n entriesResponse.includes.Asset.push(...(prebindingEntriesResponse.includes?.Asset ?? []));\n entriesResponse.includes.Entry.push(...(prebindingEntriesResponse.includes?.Entry ?? []));\n }\n }\n\n // normally, for experience entry, there should be no need to call this method, as `includes=2` will have them resolved\n // because the entries used for pre-binding are stored in both - the layout of the experience, as well as the dataSource field\n const deepPrebindingReferences = isRenderingExperience\n ? gatherDeepPrebindingReferencesFromExperienceEntry({\n experienceEntry: experienceEntry as ExperienceEntry,\n fetchedPatterns: allFetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries: entriesResponse.items,\n })\n : // however, for patterns, we have to do it by hand, because a pattern entry doesn't save the pre-binding data neither in the\n // layout nor in the dataSource field.\n // for consistency, as well as to be future safe from the change to \"includes=2\", I added methods for both\n gatherDeepPrebindingReferencesFromPatternEntry({\n patternEntry: experienceEntry as ExperienceEntry,\n fetchedPatterns: allFetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries: entriesResponse.items,\n });\n\n const allDeepReferences = [...deepReferences, ...deepPrebindingReferences];\n\n const { autoFetchedReferentAssets, autoFetchedReferentEntries } =\n gatherAutoFetchedReferentsFromIncludes(allDeepReferences, entriesResponse);\n\n // Using client getEntries resolves all linked entry references, so we do not need to resolve entries in usedComponents\n const allResolvedEntries = [\n ...((entriesResponse?.items ?? []) as Entry[]),\n ...((entriesResponse.includes?.Entry ?? []) as Entry[]),\n ...((usedPatterns as ExperienceEntry[]) || []),\n ...autoFetchedReferentEntries,\n ];\n\n const allResolvedAssets = [\n ...((assetsResponse.items ?? []) as Asset[]),\n ...((entriesResponse?.includes?.Asset ?? []) as Asset[]),\n ...autoFetchedReferentAssets,\n ];\n\n return {\n // we have to drop duplicates, becasue of the merge of deepReferences and deepPrebindingReferences above\n // If not, the same entity might appear in this array more than once\n entries: [\n ...new Map(allResolvedEntries.map((entry) => [entry.sys.id, entry])).values(),\n ] as Entry[],\n assets: [\n ...new Map(allResolvedAssets.map((asset) => [asset.sys.id, asset])).values(),\n ] as Asset[],\n };\n};\n","import { ExperienceEntry, Link } from '@/types';\n\n/**\n * The CMA client will automatically replace links with entry references.\n * As we're including all referenced pattern entries in usedComponents, this can lead\n * to a circular reference. This function replaces those with plain links inplace (!).\n *\n * @see https://github.com/contentful/contentful.js/issues/377\n */\nexport const removeCircularPatternReferences = (\n experienceEntry: ExperienceEntry,\n _parentIds?: Set<string>,\n) => {\n const parentIds = _parentIds ?? new Set<string>([experienceEntry.sys.id]);\n const usedComponents = experienceEntry.fields.usedComponents;\n const newUsedComponents = usedComponents?.reduce(\n (acc, linkOrEntry: Link<'Entry'> | ExperienceEntry) => {\n if (!('fields' in linkOrEntry)) {\n // It is a link, we're good\n return [...acc, linkOrEntry];\n }\n const entry = linkOrEntry;\n if (parentIds.has(entry.sys.id)) {\n // It is an entry that already occurred -> turn it into a link to remove the circularity\n const link = {\n sys: {\n id: entry.sys.id,\n linkType: 'Entry',\n type: 'Link',\n },\n } as const;\n return [...acc, link];\n }\n // Remove circularity for its usedComponents as well (inplace)\n removeCircularPatternReferences(entry, new Set([...parentIds, entry.sys.id]));\n return [...acc, entry];\n },\n [] as Array<Link<'Entry'> | ExperienceEntry>,\n );\n // @ts-expect-error - type of usedComponents doesn't yet allow a mixed list of both links and entries\n experienceEntry.fields.usedComponents = newUsedComponents;\n};\n\n/**\n * The CMA client will automatically replace links with entry references if they are available.\n * While we're not fetching the data sources, a self reference would be replaced as the entry is\n * fetched. Any circuar reference in the object breaks SSR where we have to stringify the JSON.\n * This would fail if the object contains circular references.\n */\nexport const removeSelfReferencingDataSource = (experienceEntry: ExperienceEntry) => {\n const dataSources = experienceEntry.fields.dataSource;\n const newDataSource = Object.entries(dataSources).reduce(\n (acc, [key, linkOrEntry]) => {\n if ('fields' in linkOrEntry && linkOrEntry.sys.id === experienceEntry.sys.id) {\n const entry = linkOrEntry as unknown as ExperienceEntry;\n acc[key] = {\n sys: {\n id: entry.sys.id,\n linkType: 'Entry',\n type: 'Link',\n },\n };\n } else {\n const link = linkOrEntry;\n acc[key] = link;\n }\n return acc;\n },\n {} as ExperienceEntry['fields']['dataSource'],\n );\n experienceEntry.fields.dataSource = newDataSource;\n};\n","import { ExperienceEntry } from '@/types';\nimport {\n removeCircularPatternReferences,\n removeSelfReferencingDataSource,\n} from './circularityCheckers';\n\n/**\n * Run additional checks on the references used in the experience entry and\n * process data required for prebinding. This must be used after fetching an\n * experience entry.\n *\n * The changes made to the passed experience entry are done inplace.\n **/\nexport const prepareExperienceEntry = (experienceEntry: ExperienceEntry) => {\n removeCircularPatternReferences(experienceEntry);\n removeSelfReferencingDataSource(experienceEntry);\n};\n","import { createExperience } from './createExperience';\nimport { fetchExperienceEntry } from './fetchExperienceEntry';\nimport { fetchReferencedEntities } from './fetchReferencedEntities';\nimport { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry } from 'contentful';\nimport { prepareExperienceEntry } from './shared/prepareExperienceEntry';\n\nconst errorMessagesWhileFetching = {\n experience: 'Failed to fetch experience',\n experienceReferences: 'Failed to fetch entities, referenced in experience',\n};\n\nconst handleError = (generalMessage: string, error: unknown) => {\n const message = error instanceof Error ? error.message : `Unknown error: ${error}`;\n throw Error(message);\n};\n\ntype FetchBySlugParams = {\n /** instantiated client from the Contentful SDK */\n client: ContentfulClientApi<undefined>;\n /** id of the content type associated with the experience */\n experienceTypeId: string;\n /** slug of the experience (defined in entry settings) */\n slug: string;\n /** locale code to fetch the experience */\n localeCode: string;\n /** if the experience is being loaded in the Contentful Studio editor or not. If true, this function is a noop. */\n isEditorMode?: boolean;\n};\n\n/**\n * Fetches an experience entry by its slug and additionally fetches all its references to return\n * an initilized experience instance.\n * @param {FetchBySlugParams} options - options to fetch the experience\n */\nexport async function fetchBySlug({\n client,\n experienceTypeId,\n slug,\n localeCode,\n isEditorMode,\n}: FetchBySlugParams) {\n // Be a no-op if in editor mode\n if (isEditorMode) return;\n let experienceEntry: Entry | ExperienceEntry | undefined = undefined;\n\n if (!localeCode) {\n throw new Error('Failed to fetch by slug. Required \"localeCode\" parameter was not provided');\n }\n\n try {\n experienceEntry = await fetchExperienceEntry({\n client,\n experienceTypeId,\n locale: localeCode,\n identifier: {\n slug,\n },\n });\n\n if (!experienceEntry) {\n throw new Error(`No experience entry with slug: ${slug} exists`);\n }\n\n prepareExperienceEntry(experienceEntry as ExperienceEntry);\n\n try {\n const { entries, assets } = await fetchReferencedEntities({\n client,\n experienceEntry,\n locale: localeCode,\n });\n\n const experience = createExperience({\n experienceEntry,\n referencedAssets: assets,\n referencedEntries: entries,\n locale: localeCode,\n });\n\n return experience;\n } catch (error) {\n handleError(errorMessagesWhileFetching.experienceReferences, error);\n }\n } catch (error) {\n handleError(errorMessagesWhileFetching.experience, error);\n }\n}\n","import { createExperience } from './createExperience';\nimport { fetchExperienceEntry } from './fetchExperienceEntry';\nimport { fetchReferencedEntities } from './fetchReferencedEntities';\nimport { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry } from 'contentful';\nimport { prepareExperienceEntry } from './shared/prepareExperienceEntry';\n\nconst errorMessagesWhileFetching = {\n experience: 'Failed to fetch experience',\n experienceReferences: 'Failed to fetch entities, referenced in experience',\n};\n\nconst handleError = (generalMessage: string, error: unknown) => {\n const message = error instanceof Error ? error.message : `Unknown error: ${error}`;\n throw Error(message);\n};\n\ntype FetchByIdParams = {\n /** instantiated client from the Contentful SDK */\n client: ContentfulClientApi<undefined>;\n /** id of the content type associated with the experience */\n experienceTypeId: string;\n /** id of the experience (defined in entry settings) */\n id: string;\n /** locale code to fetch the experience */\n localeCode: string;\n /** if the experience is being loaded in the Contentful Studio editor or not. If true, this function is a noop. */\n isEditorMode?: boolean;\n};\n\n/**\n * Fetches an experience entry by its id and additionally fetches all its references to return\n * an initilized experience instance.\n * @param {FetchByIdParams} options - options to fetch the experience\n */\nexport async function fetchById({\n client,\n experienceTypeId,\n id,\n localeCode,\n isEditorMode,\n}: FetchByIdParams) {\n //Be a no-op if in editor mode\n if (isEditorMode) return;\n let experienceEntry: Entry | ExperienceEntry | undefined = undefined;\n\n if (!localeCode) {\n throw new Error('Failed to fetch by id. Required \"localeCode\" parameter was not provided');\n }\n\n try {\n experienceEntry = await fetchExperienceEntry({\n client,\n experienceTypeId,\n locale: localeCode,\n identifier: {\n id,\n },\n });\n\n if (!experienceEntry) {\n throw new Error(`No experience entry with id: ${id} exists`);\n }\n\n prepareExperienceEntry(experienceEntry as ExperienceEntry);\n\n try {\n const { entries, assets } = await fetchReferencedEntities({\n client,\n experienceEntry,\n locale: localeCode,\n });\n\n const experience = createExperience({\n experienceEntry,\n referencedAssets: assets,\n referencedEntries: entries,\n locale: localeCode,\n });\n\n return experience;\n } catch (error) {\n handleError(errorMessagesWhileFetching.experienceReferences, error);\n }\n } catch (error) {\n handleError(errorMessagesWhileFetching.experience, error);\n }\n}\n"],"names":["treeVisit","MAX_WIDTH_ALLOWED","transformMedia","errorMessagesWhileFetching","handleError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/utils/components.ts","../../src/definitions/styles.ts","../../src/registries/designTokenRegistry.ts","../../../validators/dist/index.js","../../src/registries/breakpointsRegistry.ts","../../src/registries/sdkOptionsRegistry.ts","../../src/utils/breakpoints.ts","../../src/utils/debugLogger.ts","../../src/utils/domValues.ts","../../src/utils/isLinkToAsset.ts","../../src/utils/isLinkToEntry.ts","../../src/utils/isLink.ts","../../src/utils/localizeEntity.ts","../../src/utils/pathSchema.ts","../../src/utils/resolveHyperlinkPattern.ts","../../src/utils/sanitizeNodeProps.ts","../../src/utils/styleUtils/styleTransformers.ts","../../src/utils/styleUtils/stylesUtils.ts","../../src/utils/utils.ts","../../src/utils/styleUtils/toMediaQuery.ts","../../src/utils/transformers/media/getOptimizedImageUrl.ts","../../src/utils/transformers/media/mediaUtils.ts","../../src/utils/transformers/media/getOptimizedBackgroundImageAsset.ts","../../src/utils/styleUtils/ssrStyles.ts","../../src/utils/get.ts","../../src/utils/transformers/getBoundValue.ts","../../src/utils/transformers/transformRichText.ts","../../src/utils/transformers/media/getOptimizedImageAsset.ts","../../src/utils/transformers/media/transformMedia.ts","../../src/utils/typeguards.ts","../../src/utils/transformers/getResolvedEntryFromLink.ts","../../src/utils/transformers/getArrayValue.ts","../../src/utils/transformers/transformBoundContentValue.ts","../../src/utils/treeTraversal.ts","../../src/utils/validations.ts","../../src/utils/schema/references.ts","../../src/utils/schema/experienceSchema.ts","../../src/utils/splitDirectAndSlotChildren.ts","../../src/utils/extractPrebindingData.ts","../../src/communication/sendMessage.ts","../../src/utils/freeze.ts","../../src/entity/EntityStoreBase.ts","../../src/entity/EditorEntityStore.ts","../../src/entity/value-transformers/TransformAssetFile.ts","../../src/entity/EditorModeEntityStore.ts","../../src/entity/utils/resolveDeepUsedComponents.ts","../../src/entity/EntityStore.ts","../../src/entity/UninitializedEntityStore.ts","../../src/entity/InMemoryEntitiesStore.ts","../../src/entity/InMemoryEntitiesPublicApi.ts","../../src/enums.ts","../../src/fetchers/createExperience.ts","../../src/fetchers/fetchExperienceEntry.ts","../../src/deep-binding/DeepReference.ts","../../src/fetchers/gatherAutoFetchedReferentsFromIncludes.ts","../../src/fetchers/fetchAllEntities.ts","../../src/fetchers/fetchReferencedEntities.ts","../../src/fetchers/shared/circularityCheckers.ts","../../src/fetchers/shared/prepareExperienceEntry.ts","../../src/fetchers/fetchBySlug.ts","../../src/fetchers/fetchById.ts"],"sourcesContent":["/** @deprecated will be removed when dropping backward compatibility for old DND */\nexport const SCROLL_STATES = {\n Start: 'scrollStart',\n IsScrolling: 'isScrolling',\n End: 'scrollEnd',\n} as const;\n\nexport const OUTGOING_EVENTS = {\n Connected: 'connected',\n DesignTokens: 'registerDesignTokens',\n RegisteredBreakpoints: 'registeredBreakpoints',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n MouseMove: 'mouseMove',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentSelected: 'componentSelected',\n RegisteredComponents: 'registeredComponents',\n RequestComponentTreeUpdate: 'requestComponentTreeUpdate',\n CanvasReload: 'canvasReload',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n UpdateSelectedComponentCoordinates: 'updateSelectedComponentCoordinates',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n CanvasScroll: 'canvasScrolling',\n CanvasError: 'canvasError',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n OutsideCanvasClick: 'outsideCanvasClick',\n SDKFeatures: 'sdkFeatures',\n RequestEntities: 'REQUEST_ENTITIES',\n CanvasGeometryUpdated: 'canvasGeometryUpdated',\n CanvasPan: 'canvasPan',\n} as const;\n\nexport const INCOMING_EVENTS = {\n RequestEditorMode: 'requestEditorMode',\n RequestReadOnlyMode: 'requestReadOnlyMode',\n ExperienceUpdated: 'componentTreeUpdated',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDraggingChanged: 'componentDraggingChanged',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragCanceled: 'componentDragCanceled',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragStarted: 'componentDragStarted',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentDragEnded: 'componentDragEnded',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n ComponentMoveEnded: 'componentMoveEnded',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n CanvasResized: 'canvasResized',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n SelectComponent: 'selectComponent',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n HoverComponent: 'hoverComponent',\n UpdatedEntity: 'updatedEntity',\n /** @deprecated not needed after `patternResolution` was introduced. Will be removed in the next major version. */\n AssembliesAdded: 'assembliesAdded',\n /** @deprecated not needed after `patternResolution` was introduced. Will be removed in the next major version. */\n AssembliesRegistered: 'assembliesRegistered',\n /** @deprecated will be removed when dropping backward compatibility for old DND */\n MouseMove: 'mouseMove',\n RequestedEntities: 'REQUESTED_ENTITIES',\n} as const;\n\nexport const INTERNAL_EVENTS = {\n ComponentsRegistered: 'cfComponentsRegistered',\n VisualEditorInitialize: 'cfVisualEditorInitialize',\n} as const;\n\nexport const VISUAL_EDITOR_EVENTS = {\n Ready: 'cfVisualEditorReady',\n};\n\n/**\n * These modes are ONLY intended to be internally used within the context of\n * editing an experience inside of Contentful Studio. i.e. these modes\n * intentionally do not include preview/delivery modes.\n */\nexport enum StudioCanvasMode {\n READ_ONLY = 'readOnlyMode',\n EDITOR = 'editorMode',\n NONE = 'none',\n}\n\nexport const VISUAL_EDITOR_CONTAINER_ID = 'cf-visual-editor';\nexport const CONTENTFUL_COMPONENT_CATEGORY = 'contentful-component';\nexport const CONTENTFUL_DEFAULT_CATEGORY = 'Contentful';\n\nexport const CONTENTFUL_COMPONENTS = {\n section: {\n id: 'contentful-section',\n name: 'Section',\n },\n container: {\n id: 'contentful-container',\n name: 'Container',\n },\n columns: {\n id: 'contentful-columns',\n name: 'Columns',\n },\n singleColumn: {\n id: 'contentful-single-column',\n name: 'Column',\n },\n button: {\n id: 'contentful-button',\n name: 'Button',\n },\n heading: {\n id: 'contentful-heading',\n name: 'Heading',\n },\n image: {\n id: 'contentful-image',\n name: 'Image',\n },\n richText: {\n id: 'contentful-richText',\n name: 'Rich Text',\n },\n text: {\n id: 'contentful-text',\n name: 'Text',\n },\n divider: {\n id: 'contentful-divider',\n name: 'Divider',\n },\n carousel: {\n id: 'contentful-carousel',\n name: 'Carousel',\n },\n} as const;\n\nexport const ASSEMBLY_NODE_TYPE = 'assembly';\nexport const ASSEMBLY_DEFAULT_CATEGORY = 'Assemblies';\nexport const ASSEMBLY_BLOCK_NODE_TYPE = 'assemblyBlock';\nexport const ASSEMBLY_NODE_TYPES = [ASSEMBLY_NODE_TYPE, ASSEMBLY_BLOCK_NODE_TYPE];\nexport const LATEST_SCHEMA_VERSION = '2023-09-28';\nexport const CF_STYLE_ATTRIBUTES = [\n 'cfVisibility',\n 'cfHorizontalAlignment',\n 'cfVerticalAlignment',\n 'cfMargin',\n 'cfPadding',\n 'cfBackgroundColor',\n 'cfWidth',\n 'cfMaxWidth',\n 'cfHeight',\n 'cfImageAsset',\n 'cfImageOptions',\n 'cfBackgroundImageUrl',\n 'cfBackgroundImageOptions',\n 'cfFlexDirection',\n 'cfFlexWrap',\n 'cfFlexReverse',\n 'cfBorder',\n 'cfBorderRadius',\n 'cfGap',\n 'cfColumnSpan',\n 'cfColumnSpanLock',\n 'cfColumns',\n 'cfFontSize',\n 'cfFontWeight',\n 'cfLineHeight',\n 'cfLetterSpacing',\n 'cfTextColor',\n 'cfTextAlign',\n 'cfTextTransform',\n 'cfTextBold',\n 'cfTextItalic',\n 'cfTextUnderline',\n];\n\nexport const EMPTY_CONTAINER_SIZE = '80px';\n\nexport const HYPERLINK_DEFAULT_PATTERN = `/{locale}/{entry.fields.slug}/`;\n\nexport enum PostMessageMethods {\n REQUEST_ENTITIES = 'REQUEST_ENTITIES',\n REQUESTED_ENTITIES = 'REQUESTED_ENTITIES',\n}\n\nexport const SUPPORTED_IMAGE_FORMATS = ['jpg', 'png', 'webp', 'gif', 'avif'] as const;\n","import {\n ASSEMBLY_BLOCK_NODE_TYPE,\n ASSEMBLY_DEFAULT_CATEGORY,\n ASSEMBLY_NODE_TYPE,\n CONTENTFUL_COMPONENTS,\n} from '../constants';\n\nconst structureComponentIds = new Set([\n CONTENTFUL_COMPONENTS.section.id,\n CONTENTFUL_COMPONENTS.columns.id,\n CONTENTFUL_COMPONENTS.container.id,\n CONTENTFUL_COMPONENTS.singleColumn.id,\n]);\n\nconst patternTypes = new Set([ASSEMBLY_NODE_TYPE, ASSEMBLY_BLOCK_NODE_TYPE]);\n\ntype ComponentAllowOnRoot = {\n type?: string;\n category?: string;\n componentId?: string;\n};\n\nconst allContentfulComponentIds = new Set(\n Object.values(CONTENTFUL_COMPONENTS).map((component) => component.id),\n);\n\ntype SetElement<ElementType> = ElementType extends Set<infer E> ? E : never;\ntype StructureComponentId = SetElement<typeof structureComponentIds>;\ntype AllContentfulComponentId = SetElement<typeof allContentfulComponentIds>;\n\nexport const isPatternComponent = (type?: string) => patternTypes.has(type ?? '');\n\nexport const isContentfulStructureComponent = (\n componentId?: string,\n): componentId is StructureComponentId =>\n structureComponentIds.has((componentId ?? '') as StructureComponentId);\n\nexport const isContentfulComponent = (\n componentId?: string,\n): componentId is AllContentfulComponentId =>\n allContentfulComponentIds.has((componentId ?? '') as AllContentfulComponentId);\n\nexport const isComponentAllowedOnRoot = ({ type, category, componentId }: ComponentAllowOnRoot) =>\n isPatternComponent(type) ||\n category === ASSEMBLY_DEFAULT_CATEGORY ||\n isContentfulStructureComponent(componentId) ||\n componentId === CONTENTFUL_COMPONENTS.divider.id;\n\nexport const isStructureWithRelativeHeight = (\n componentId?: string,\n height?: string | number,\n): componentId is StructureComponentId => {\n return isContentfulStructureComponent(componentId) && !height?.toString().endsWith('px');\n};\n","import { DesignVariableMap } from '../types';\n\n// These styles get added to every component, user custom or contentful provided\nexport const builtInStyles: Partial<DesignVariableMap> = {\n cfVerticalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align left',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align right',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Vertical alignment',\n },\n cfHorizontalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align top',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align bottom',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Horizontal alignment',\n },\n cfVisibility: {\n displayName: 'Visibility toggle',\n type: 'Boolean',\n group: 'style',\n defaultValue: true,\n },\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 0)',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfHeight: {\n displayName: 'Height',\n type: 'Text',\n group: 'style',\n defaultValue: 'fit-content',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfFlexDirection: {\n displayName: 'Direction',\n type: 'Text',\n group: 'style',\n defaultValue: 'column',\n },\n cfFlexReverse: {\n displayName: 'Reverse Direction',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfFlexWrap: {\n displayName: 'Wrap objects',\n type: 'Text',\n group: 'style',\n defaultValue: 'nowrap',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfHyperlink: {\n displayName: 'URL',\n type: 'Hyperlink',\n defaultValue: '',\n validations: {\n format: 'URL',\n bindingSourceType: ['entry', 'experience', 'manual'],\n },\n },\n cfOpenInNewTab: {\n displayName: 'URL behaviour',\n type: 'Boolean',\n defaultValue: false,\n description: 'Open in new tab',\n },\n};\n\nexport const optionalBuiltInStyles: Partial<DesignVariableMap> = {\n cfFontSize: {\n displayName: 'Font Size',\n type: 'Text',\n group: 'style',\n defaultValue: '16px',\n },\n cfFontWeight: {\n validations: {\n in: [\n {\n value: '400',\n displayName: 'Normal',\n },\n {\n value: '500',\n displayName: 'Medium',\n },\n {\n value: '600',\n displayName: 'Semi Bold',\n },\n ],\n },\n displayName: 'Font Weight',\n type: 'Text',\n group: 'style',\n defaultValue: '400',\n },\n cfImageAsset: {\n displayName: 'Image',\n type: 'Media',\n validations: {\n bindingSourceType: ['asset', 'entry', 'manual'],\n },\n },\n cfImageOptions: {\n displayName: 'Image options',\n type: 'Object',\n group: 'style',\n defaultValue: {\n width: '100%',\n height: '100%',\n targetSize: 'unset',\n },\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 0)',\n },\n cfBackgroundImageUrl: {\n displayName: 'Background image',\n type: 'Media',\n validations: {\n bindingSourceType: ['asset', 'entry', 'manual'],\n },\n },\n cfBackgroundImageOptions: {\n displayName: 'Background image options',\n type: 'Object',\n group: 'style',\n defaultValue: {\n scaling: 'fill',\n alignment: 'left top',\n targetSize: '2000px',\n },\n },\n cfBorderRadius: {\n displayName: 'Border Radius',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfLineHeight: {\n displayName: 'Line Height',\n type: 'Text',\n group: 'style',\n defaultValue: '20px',\n },\n cfLetterSpacing: {\n displayName: 'Letter Spacing',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfTextColor: {\n displayName: 'Text Color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(0, 0, 0, 1)',\n },\n cfTextAlign: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align start',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align end',\n },\n ],\n },\n displayName: 'Text Align',\n type: 'Text',\n group: 'style',\n defaultValue: 'start',\n },\n cfTextTransform: {\n validations: {\n in: [\n {\n value: 'none',\n displayName: 'Normal',\n },\n {\n value: 'capitalize',\n displayName: 'Capitalize',\n },\n {\n value: 'uppercase',\n displayName: 'Uppercase',\n },\n {\n value: 'lowercase',\n displayName: 'Lowercase',\n },\n ],\n },\n displayName: 'Text Transform',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfTextBold: {\n displayName: 'Bold',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfTextItalic: {\n displayName: 'Italic',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n cfTextUnderline: {\n displayName: 'Underline',\n type: 'Boolean',\n group: 'style',\n defaultValue: false,\n },\n};\n\nexport const sectionBuiltInStyles: Partial<DesignVariableMap> = {\n ...builtInStyles,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n};\n\nexport const containerBuiltInStyles: Partial<DesignVariableMap> = {\n ...builtInStyles,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n // Note: The UI overwrites '0 Auto 0 Auto' as the default value for top-level containers\n defaultValue: '0 0 0 0',\n },\n cfMaxWidth: {\n displayName: 'Max Width',\n type: 'Text',\n group: 'style',\n defaultValue: '1192px',\n },\n};\n\nexport const dividerBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n defaultValue: '20px 0px 20px 0px',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfHeight: {\n displayName: 'Height',\n type: 'Text',\n group: 'style',\n defaultValue: '1px',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: 'none',\n },\n cfBackgroundColor: {\n displayName: 'Background color',\n type: 'Text',\n group: 'style',\n defaultValue: 'rgba(204, 204, 204, 1)',\n },\n};\n\nexport const singleColumnBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundColor: optionalBuiltInStyles.cfBackgroundColor,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfVerticalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align left',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align right',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Vertical alignment',\n },\n cfHorizontalAlignment: {\n validations: {\n in: [\n {\n value: 'start',\n displayName: 'Align top',\n },\n {\n value: 'center',\n displayName: 'Align center',\n },\n {\n value: 'end',\n displayName: 'Align bottom',\n },\n {\n value: 'stretch',\n displayName: 'Stretch',\n },\n ],\n },\n type: 'Text',\n group: 'style',\n defaultValue: 'center',\n displayName: 'Horizontal alignment',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '0 0 0 0',\n },\n cfFlexDirection: {\n displayName: 'Direction',\n type: 'Text',\n group: 'style',\n defaultValue: 'column',\n },\n cfFlexWrap: {\n displayName: 'Wrap objects',\n type: 'Text',\n group: 'style',\n defaultValue: 'nowrap',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '0px',\n },\n cfColumnSpan: {\n type: 'Text',\n defaultValue: '6',\n group: 'style',\n },\n cfColumnSpanLock: {\n type: 'Boolean',\n defaultValue: false,\n group: 'style',\n },\n};\n\nexport const columnsBuiltInStyles: Partial<DesignVariableMap> = {\n cfVisibility: builtInStyles.cfVisibility,\n cfBorderRadius: optionalBuiltInStyles.cfBorderRadius,\n cfBackgroundColor: optionalBuiltInStyles.cfBackgroundColor,\n cfBackgroundImageUrl: optionalBuiltInStyles.cfBackgroundImageUrl,\n cfBackgroundImageOptions: optionalBuiltInStyles.cfBackgroundImageOptions,\n cfMargin: {\n displayName: 'Margin',\n type: 'Text',\n group: 'style',\n // Note: The UI overwrites '0 Auto 0 Auto' as the default value for top-level columns\n defaultValue: '0 0 0 0',\n },\n cfWidth: {\n displayName: 'Width',\n type: 'Text',\n group: 'style',\n defaultValue: '100%',\n },\n cfMaxWidth: {\n displayName: 'Max width',\n type: 'Text',\n group: 'style',\n defaultValue: '1192px',\n },\n cfPadding: {\n displayName: 'Padding',\n type: 'Text',\n group: 'style',\n defaultValue: '10px 10px 10px 10px',\n },\n cfBorder: {\n displayName: 'Border',\n type: 'Text',\n group: 'style',\n defaultValue: '0px solid rgba(0, 0, 0, 0)',\n },\n cfGap: {\n displayName: 'Gap',\n type: 'Text',\n group: 'style',\n defaultValue: '10px 10px',\n },\n cfColumns: {\n type: 'Text',\n defaultValue: '[6,6]',\n group: 'style',\n },\n cfWrapColumns: {\n type: 'Boolean',\n defaultValue: false,\n group: 'style',\n },\n cfWrapColumnsCount: {\n type: 'Text',\n defaultValue: '2',\n group: 'style',\n },\n};\n","import { builtInStyles, optionalBuiltInStyles } from '@/definitions';\nimport { DesignTokensDefinition } from '@/types';\n\nexport let designTokensRegistry: DesignTokensDefinition = {};\n\n// This function is used to ensure that the composite values are valid since composite values are optional.\n// Therefore only border and in the future text related design tokens are/will be checked in this funciton.\n// Ensuring values for simple key-value design tokens are not neccessary since they are required via typescript.\nconst ensureValidCompositeValues = (designTokenDefinition: DesignTokensDefinition) => {\n // Text token validation\n if (designTokenDefinition.text) {\n for (const textKey in designTokenDefinition.text) {\n const textValue = designTokenDefinition.text[textKey];\n designTokenDefinition.text[textKey] = {\n emphasis: textValue.emphasis || 'none',\n fontSize: textValue.fontSize || '16px',\n case: textValue.case || 'normal',\n fontWeight: textValue.fontWeight || '400',\n lineHeight: textValue.lineHeight || '20px',\n letterSpacing: textValue.letterSpacing || '0px',\n color: textValue.color || '#000000',\n };\n }\n }\n\n // Border validation\n if (designTokenDefinition.border) {\n for (const borderKey in designTokenDefinition.border) {\n const borderValue = designTokenDefinition.border[borderKey];\n designTokenDefinition.border[borderKey] = {\n width: borderValue.width || '1px',\n style: borderValue.style || 'solid',\n color: borderValue.color || '#000000',\n };\n }\n }\n return designTokenDefinition;\n};\n\n/**\n * Register design tokens styling\n * @param designTokenDefinition - {[key:string]: Record<string, string>}\n * @returns void\n */\nexport const defineDesignTokens = (designTokenDefinition: DesignTokensDefinition) => {\n Object.assign(designTokensRegistry, ensureValidCompositeValues(designTokenDefinition));\n};\n\nconst templateStringRegex = /\\${(\\w.+?)}/g;\n\nexport const getDesignTokenRegistration = (breakpointValue: string, variableName: string) => {\n if (!breakpointValue) return breakpointValue;\n\n let resolvedValue = '';\n\n // Match all parts of the string, including design tokens and other parts\n const parts = breakpointValue.match(/(\\${.+?}|\\S+)/g);\n\n if (parts) {\n for (const part of parts) {\n const isDesignToken = templateStringRegex.test(part);\n const tokenValue = isDesignToken ? resolveSimpleDesignToken(part, variableName) : part;\n resolvedValue += `${tokenValue} `;\n }\n }\n\n // Not trimming would end up with a trailing space that breaks the check in `calculateNodeDefaultHeight`\n return resolvedValue.trim();\n};\n\nconst resolveSimpleDesignToken = (templateString: string, variableName: string) => {\n const nonTemplateValue = templateString.replace(templateStringRegex, '$1');\n const [tokenCategory, tokenName] = nonTemplateValue.split('.');\n const tokenValues = designTokensRegistry[tokenCategory];\n\n if (tokenValues && tokenValues[tokenName]) {\n if (variableName === 'cfBorder') {\n const { width, style, color } = tokenValues[tokenName];\n return `${width} ${style} ${color}`;\n }\n\n return tokenValues[tokenName];\n }\n\n if (builtInStyles[variableName]) {\n return builtInStyles[variableName].defaultValue;\n }\n if (optionalBuiltInStyles[variableName]) {\n return optionalBuiltInStyles[variableName].defaultValue;\n }\n return '0px';\n};\n\n// Used in unit tests to reset the design token registry\nexport const resetDesignTokenRegistry = () => {\n designTokensRegistry = {};\n};\n","import { z, ZodIssueCode } from 'zod';\n\n// If more than one version is supported, use z.union\nconst SchemaVersions = z.literal('2023-09-28');\n// Keep deprecated versions here just for reference\nz.union([\n z.literal('2023-08-23'),\n z.literal('2023-07-26'),\n z.literal('2023-06-27'),\n]);\n\nconst DefinitionPropertyTypeSchema = z.enum([\n 'Text',\n 'RichText',\n 'Number',\n 'Date',\n 'Boolean',\n 'Location',\n 'Media',\n 'Object',\n 'Hyperlink',\n 'Array',\n 'Link',\n]);\nconst DefinitionPropertyKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,32}$/, { message: 'Property needs to match: /^[a-zA-Z0-9-_]{1,32}$/' });\nconst PrimitiveValueSchema = z.union([\n z.string(),\n z.boolean(),\n z.number(),\n z.record(z.any(), z.any()),\n z.undefined(),\n]);\nconst UsedComponentsSchema = z.array(z.object({\n sys: z.object({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.literal('Entry'),\n }),\n}));\nconst uuidKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,21}$/, { message: 'Does not match /^[a-zA-Z0-9-_]{1,21}$/' });\nconst DataSourceSchema = z.record(uuidKeySchema, z.object({\n sys: z.object({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.enum(['Entry', 'Asset']),\n }),\n}));\nconst UnboundValuesSchema = z.record(uuidKeySchema, z.object({\n value: PrimitiveValueSchema,\n}));\n/**\n * Property keys for imported components have a limit of 32 characters (to be implemented) while\n * property keys for patterns have a limit of 54 characters (<32-char-variable-name>_<21-char-nanoid-id>).\n * Because we cannot distinguish between the two in the componentTree, we will use the larger limit for both.\n */\nconst propertyKeySchema = z\n .string()\n .regex(/^[a-zA-Z0-9-_]{1,54}$/, { message: 'Does not match /^[a-zA-Z0-9-_]{1,54}$/' });\nconst ComponentTreeNodeIdSchema = z\n .string()\n .regex(/^[a-zA-Z0-9]{1,8}$/, { message: 'Does not match /^[a-zA-Z0-9]{1,8}$/' });\nconst breakpointsRefinement = (value, ctx) => {\n if (!value.length || value[0].query !== '*') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The first breakpoint should include the following attributes: { \"query\": \"*\" }`,\n });\n return;\n }\n // Return early if there's only one generic breakpoint\n const hasNoBreakpointsStrategy = value.length === 1;\n if (hasNoBreakpointsStrategy) {\n return;\n }\n // Check if any breakpoint id occurs twice\n const ids = value.map((breakpoint) => breakpoint.id);\n const hasDuplicateIds = new Set(ids).size !== ids.length;\n if (hasDuplicateIds) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint IDs must be unique`,\n });\n return;\n }\n // Skip the first one which is guaranteed to be a wildcard query\n const nonBaseBreakpoints = value.slice(1);\n const isMobileFirstStrategy = nonBaseBreakpoints[0].query.startsWith('>');\n const isDesktopFirstStrategy = nonBaseBreakpoints[0].query.startsWith('<');\n if (isMobileFirstStrategy) {\n const areOperatorsEqual = nonBaseBreakpoints.every(({ query }) => query.startsWith('>'));\n if (!areOperatorsEqual) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint queries must be in the format \">[size]px\" for mobile-first strategy`,\n });\n }\n // Extract the queries boundary by removing the special characters around it\n const queries = nonBaseBreakpoints.map((bp) => parseInt(bp.query.replace(/px|<|>/, '')));\n // Starting with the third breakpoint, check that every query is higher than the one above\n const isIncreasing = queries.every((value, index, array) => index === 0 || value > array[index - 1]);\n if (!isIncreasing) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `When using a mobile-first strategy, all breakpoints must have strictly increasing pixel values`,\n });\n }\n }\n else if (isDesktopFirstStrategy) {\n const areOperatorsEqual = nonBaseBreakpoints.every(({ query }) => query.startsWith('<'));\n if (!areOperatorsEqual) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Breakpoint queries must be in the format \"<[size]px\" for desktop-first strategy`,\n });\n }\n // Extract the queries boundary by removing the special characters around it\n const queries = nonBaseBreakpoints.map((bp) => parseInt(bp.query.replace(/px|<|>/, '')));\n // Starting with the third breakpoint, check that every query is lower than the one above\n const isDecreasing = queries.every((value, index, array) => index === 0 || value < array[index - 1]);\n if (!isDecreasing) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `When using a desktop-first strategy, all breakpoints must have strictly decreasing pixel values`,\n });\n }\n }\n else if (!isMobileFirstStrategy && !isDesktopFirstStrategy) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `You may only use a mobile-first or desktop-first strategy for breakpoints using '<' or '>' queries`,\n });\n }\n};\nconst ValuesByBreakpointSchema = z.record(z.lazy(() => PrimitiveValueSchema));\nconst BindingSourceTypeEnumSchema = z\n .array(z.enum(['entry', 'asset', 'manual', 'experience']))\n .nonempty();\nconst DesignValueSchema = z\n .object({\n type: z.literal('DesignValue'),\n valuesByBreakpoint: ValuesByBreakpointSchema,\n})\n .strict();\nconst BoundValueSchema = z\n .object({\n type: z.literal('BoundValue'),\n path: z.string(),\n})\n .strict();\nconst HyperlinkValueSchema = z\n .object({\n type: z.literal('HyperlinkValue'),\n linkTargetKey: z.string(),\n /** Allows to override parts of the URL, e.g. the locale */\n overrides: z.object({}).optional(),\n})\n .strict();\nconst UnboundValueSchema = z\n .object({\n type: z.literal('UnboundValue'),\n key: z.string(),\n})\n .strict();\nconst ComponentValueSchema = z\n .object({\n type: z.literal('ComponentValue'),\n key: z.string(),\n})\n .strict();\nconst NoValueSchema = z.object({ type: z.literal('NoValue') }).strict();\nconst ComponentPropertyValueSchema = z.discriminatedUnion('type', [\n DesignValueSchema,\n BoundValueSchema,\n UnboundValueSchema,\n HyperlinkValueSchema,\n ComponentValueSchema,\n NoValueSchema,\n]);\n// TODO: finalize schema structure before release\n// https://contentful.atlassian.net/browse/LUMOS-523\nconst ParameterSchema = z.object({\n type: z.literal('BoundValue'),\n path: z.string(),\n});\nconst ParametersSchema = z.record(propertyKeySchema, ParameterSchema);\nconst BREAKPOINT_QUERY_REGEX = /^\\*$|^[<>][0-9]+px$/;\nconst BreakpointSchema = z\n .object({\n id: propertyKeySchema,\n // Can be replaced with z.templateLiteral when upgrading to zod v4\n query: z.string().refine((s) => BREAKPOINT_QUERY_REGEX.test(s)),\n previewSize: z.string().optional(),\n displayName: z.string(),\n displayIcon: z.enum(['desktop', 'tablet', 'mobile']).optional(),\n})\n .strict();\n// Use helper schema to define a recursive schema with its type correctly below\nconst BaseComponentTreeNodeSchema = z.object({\n id: ComponentTreeNodeIdSchema.optional(),\n definitionId: DefinitionPropertyKeySchema,\n prebindingId: z.string().optional(),\n displayName: z.string().optional(),\n slotId: z.string().optional(),\n variables: z.record(propertyKeySchema, ComponentPropertyValueSchema),\n parameters: ParametersSchema.optional(),\n});\nconst ComponentVariableSchema = z.object({\n displayName: z.string().optional(),\n type: DefinitionPropertyTypeSchema,\n description: z.string().optional(),\n group: z.string().optional(),\n defaultValue: PrimitiveValueSchema.or(ComponentPropertyValueSchema).optional(),\n validations: z\n .object({\n bindingSourceType: BindingSourceTypeEnumSchema.optional(),\n required: z.boolean().optional(),\n format: z.literal('URL').optional(),\n in: z\n .array(z.object({\n value: z.union([z.string(), z.number()]),\n displayName: z.string().optional(),\n }))\n .optional(),\n })\n .optional(),\n});\nconst ComponentTreeNodeSchema = BaseComponentTreeNodeSchema.extend({\n children: z.lazy(() => ComponentTreeNodeSchema.array()),\n}).superRefine(({ id, prebindingId, parameters }, ctx) => {\n // We don't fail if parameters are present but prebindingId is not because\n // older experiences (updated before 21-09-2025) always included parameters\n // and they will start failing if we do.\n if (prebindingId && !parameters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Found \"prebindingId\" but no \"parameters\" for node with id: \"${id}\"`,\n });\n }\n});\nconst ComponentTreeSchema = z\n .object({\n breakpoints: z.array(BreakpointSchema).superRefine(breakpointsRefinement),\n children: z.array(ComponentTreeNodeSchema),\n schemaVersion: SchemaVersions,\n})\n .strict();\nconst localeWrapper = (fieldSchema) => z.record(z.string(), fieldSchema);\n\nconst ExperienceFieldsCMAShapeSchema = z.object({\n componentTree: localeWrapper(ComponentTreeSchema),\n dataSource: localeWrapper(DataSourceSchema),\n unboundValues: localeWrapper(UnboundValuesSchema),\n usedComponents: localeWrapper(UsedComponentsSchema).optional(),\n});\n\nfunction treeVisit(initialNode, onNode) {\n const _treeVisit = (currentNode) => {\n const children = [...currentNode.children];\n onNode(currentNode);\n for (const child of children) {\n _treeVisit(child);\n }\n };\n if (Array.isArray(initialNode)) {\n for (const node of initialNode) {\n _treeVisit(node);\n }\n }\n else {\n _treeVisit(initialNode);\n }\n}\n\nconst MAX_ALLOWED_PATHS = 200;\nconst THUMBNAIL_IDS = [\n 'columns',\n 'columnsPlusRight',\n 'imagesSquare',\n 'subtitles',\n 'rowsPlusBottom',\n 'userRectangle',\n 'textbox',\n 'monitorPlay',\n 'article',\n 'table',\n 'star',\n 'heartStraight',\n 'frameCorners',\n 'rows',\n 'dotsThreeOutline',\n 'listDashes',\n 'checkerBoard',\n 'gridFour',\n 'slideshow',\n 'diamondsFour',\n 'cards',\n 'textColumns',\n 'duplex',\n];\n// TODO: finalize schema structure before release\n// https://contentful.atlassian.net/browse/LUMOS-523\nconst VariableMappingSchema = z.object({\n parameterId: propertyKeySchema,\n type: z.literal('ContentTypeMapping'),\n pathsByContentType: z\n .record(z.string(), z.object({ path: z.string() }))\n .superRefine((paths, ctx) => {\n const variableId = ctx.path[ctx.path.length - 2];\n if (Object.keys(paths).length > MAX_ALLOWED_PATHS) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Too many paths defined for variable mapping with id \"${variableId}\", maximum allowed is ${MAX_ALLOWED_PATHS}`,\n });\n }\n }),\n});\nconst PassToNodeSchema = z\n .object({\n nodeId: propertyKeySchema,\n parameterId: propertyKeySchema,\n prebindingId: propertyKeySchema,\n})\n .strict();\nconst ParameterDefinitionSchema = z.object({\n defaultSource: z\n .strictObject({\n type: z.enum(['Entry']),\n contentTypeId: z.string(),\n link: z.strictObject({\n sys: z.strictObject({\n type: z.literal('Link'),\n id: z.string(),\n linkType: z.enum(['Entry']),\n }),\n }),\n })\n .optional(),\n contentTypes: z.array(z.string()).min(1),\n passToNodes: z\n .array(PassToNodeSchema)\n .max(1, 'At most one \"passToNodes\" element is allowed per parameter definition.'),\n});\nconst ParameterDefinitionsSchema = z.record(propertyKeySchema, ParameterDefinitionSchema);\nconst VariableMappingsSchema = z.record(propertyKeySchema, VariableMappingSchema);\nconst ComponentVariablesSchema = z.record(z.string().regex(/^[a-zA-Z0-9-_]{1,54}$/), // Here the key is <variableName>_<nanoidId> so we need to allow for a longer length\nComponentVariableSchema);\nconst PrebindingDefinitionSchema = z\n .object({\n id: propertyKeySchema,\n parameterDefinitions: ParameterDefinitionsSchema,\n variableMappings: VariableMappingsSchema.optional(),\n allowedVariableOverrides: z.array(z.string()).optional(),\n})\n .strict();\nconst ComponentSettingsSchema = z\n .object({\n variableDefinitions: ComponentVariablesSchema,\n thumbnailId: z.enum(THUMBNAIL_IDS).optional(),\n category: z.string().max(50, 'Category must contain at most 50 characters').optional(),\n prebindingDefinitions: z.array(PrebindingDefinitionSchema).length(1).optional(),\n})\n .strict()\n .superRefine((componentSettings, ctx) => {\n const { variableDefinitions, prebindingDefinitions } = componentSettings;\n if (!prebindingDefinitions || prebindingDefinitions.length === 0) {\n return;\n }\n const { parameterDefinitions, variableMappings, allowedVariableOverrides } = prebindingDefinitions[0];\n validateAtMostOneNativeParameterDefinition(parameterDefinitions, ctx);\n validateNoOverlapBetweenMappingAndOverrides(variableMappings, allowedVariableOverrides, ctx);\n validateMappingsAgainstVariableDefinitions(variableMappings, allowedVariableOverrides, variableDefinitions, ctx);\n validateMappingsAgainstParameterDefinitions(variableMappings, parameterDefinitions, ctx);\n});\nconst PatternFieldsCMAShapeSchema = z\n .object({\n componentTree: localeWrapper(ComponentTreeSchema),\n dataSource: localeWrapper(DataSourceSchema),\n unboundValues: localeWrapper(UnboundValuesSchema),\n usedComponents: localeWrapper(UsedComponentsSchema).optional(),\n componentSettings: localeWrapper(ComponentSettingsSchema),\n})\n .superRefine((patternFields, ctx) => {\n const { componentTree, componentSettings } = patternFields;\n // values at this point are wrapped under locale code\n const nonLocalisedComponentTree = Object.values(componentTree)[0];\n const nonLocalisedComponentSettings = Object.values(componentSettings)[0];\n if (!nonLocalisedComponentSettings || !nonLocalisedComponentTree) {\n return;\n }\n validatePassToNodes(nonLocalisedComponentTree.children || [], nonLocalisedComponentSettings || {}, ctx);\n});\nconst validateAtMostOneNativeParameterDefinition = (parameterDefinitions, ctx) => {\n const nativeParamDefinitions = Object.values(parameterDefinitions).filter((paramDefinition) => !(paramDefinition.passToNodes && paramDefinition.passToNodes.length > 0));\n if (nativeParamDefinitions.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Only one native parameter definition (parameter definition without passToNodes) is allowed per prebinding definition.`,\n });\n }\n};\nconst validateNoOverlapBetweenMappingAndOverrides = (variableMappings, allowedVariableOverrides, ctx) => {\n const variableMappingKeys = Object.keys(variableMappings || {});\n const overridesSet = new Set(allowedVariableOverrides || []);\n const overlap = variableMappingKeys.filter((key) => overridesSet.has(key));\n if (overlap.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Found both variable mapping and allowed override for the following keys: ${overlap.map((key) => `\"${key}\"`).join(', ')}.`,\n });\n }\n};\nconst validateMappingsAgainstVariableDefinitions = (variableMappings, allowedVariableOverrides, variableDefinitions, ctx) => {\n const nonDesignVariableDefinitionKeys = Object.entries(variableDefinitions)\n .filter(([_, def]) => def.group !== 'style')\n .map(([key]) => key);\n const variableMappingKeys = Object.keys(variableMappings || {});\n const allKeys = [...variableMappingKeys, ...(allowedVariableOverrides || [])];\n const invalidMappings = allKeys.filter((key) => !nonDesignVariableDefinitionKeys.includes(key));\n if (invalidMappings.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The following variable mappings or overrides are missing from the variable definitions: ${invalidMappings.map((key) => `\"${key}\"`).join(', ')}.`,\n });\n }\n};\nconst validateMappingsAgainstParameterDefinitions = (variableMappings, parameterDefinitions, ctx) => {\n const parameterDefinitionKeys = Object.keys(parameterDefinitions || {});\n for (const [mappingKey, mappingValue] of Object.entries(variableMappings || {})) {\n if (!parameterDefinitionKeys.includes(mappingValue.parameterId)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The variable mapping with id \"${mappingKey}\" references a non-existing parameterId \"${mappingValue.parameterId}\".`,\n });\n }\n }\n};\nconst validatePassToNodes = (rootChildren, componentSettings, ctx) => {\n if (!componentSettings.prebindingDefinitions ||\n componentSettings.prebindingDefinitions.length === 0) {\n return;\n }\n const { parameterDefinitions } = componentSettings.prebindingDefinitions[0];\n const nodeIds = new Set();\n for (const paramDef of Object.values(parameterDefinitions || {})) {\n paramDef.passToNodes?.forEach((n) => nodeIds.add(n.nodeId));\n }\n treeVisit(rootChildren, (node) => {\n if (!node.id)\n return;\n if (nodeIds.has(node.id)) {\n nodeIds.delete(node.id);\n }\n });\n if (nodeIds.size > 0) {\n const stringifiedNodeIds = Array.from(nodeIds)\n .map((id) => `\"${id}\"`)\n .join(', ');\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The following node IDs referenced in passToNodes are not present in the component tree: ${stringifiedNodeIds}.`,\n });\n }\n};\n\nconst ComponentDefinitionSchema = z\n .object({\n id: DefinitionPropertyKeySchema,\n name: z.string(),\n category: z.string().optional(),\n thumbnailUrl: z.string().optional(),\n thumbnailId: z.string().optional(),\n hyperlinkPattern: z.string().optional(),\n children: z.boolean().optional(),\n slots: z\n .record(DefinitionPropertyKeySchema, z.object({ displayName: z.string().optional() }))\n .optional(),\n builtInStyles: z.array(z.string()).optional(),\n tooltip: z.object({ imageUrl: z.string().optional(), description: z.string() }).optional(),\n variables: z.record(DefinitionPropertyKeySchema, ComponentVariableSchema.extend({\n defaultValue: PrimitiveValueSchema.optional(),\n }).superRefine((val, ctx) => {\n switch (val.type) {\n case 'Array':\n if (typeof val.defaultValue !== 'undefined') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue is not supported for \"Array\" type for ${ctx.path.join('.')}`,\n fatal: false,\n });\n }\n break;\n case 'Boolean':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'boolean') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a boolean when type is \"Boolean\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Date':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Date\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Hyperlink':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Hyperlink\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Link':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue is not supported for \"Link\" type for ${ctx.path.join('.')}`,\n fatal: false,\n });\n }\n break;\n case 'Location':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"Location\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Media':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Media\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Number':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'number') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a number when type is \"Number\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Object':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"Object\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'RichText':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'object') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be an object when type is \"RichText\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n case 'Text':\n if (typeof val.defaultValue !== 'undefined' && typeof val.defaultValue !== 'string') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `defaultValue must be a string when type is \"Text\" for ${ctx.path.join('.')}, got ${typeof val.defaultValue} instead`,\n fatal: false,\n });\n }\n break;\n }\n })),\n})\n .superRefine((val, ctx) => {\n if (val.children === true && (!!val.variables.children || !!val.slots?.children)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Cannot activate 'children: true' and name a variable or slot 'children' at the same time`,\n fatal: false,\n });\n }\n // Ensure that slots and variables don't use the same names\n if (val.variables && val.slots) {\n Object.keys(val.variables).forEach((name) => {\n if (val.slots[name]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Variable and slot cannot have the same name: ${name}`,\n fatal: false,\n });\n }\n });\n }\n});\n\nvar CodeNames;\n(function (CodeNames) {\n CodeNames[\"Type\"] = \"type\";\n CodeNames[\"Required\"] = \"required\";\n CodeNames[\"Unexpected\"] = \"unexpected\";\n CodeNames[\"Regex\"] = \"regex\";\n CodeNames[\"In\"] = \"in\";\n CodeNames[\"Size\"] = \"size\";\n CodeNames[\"Custom\"] = \"custom\";\n})(CodeNames || (CodeNames = {}));\nconst convertInvalidType = (issue) => {\n const name = issue.received === 'undefined' ? CodeNames.Required : CodeNames.Type;\n const details = issue.received === 'undefined'\n ? `The property \"${issue.path.slice(-1)}\" is required here`\n : `The type of \"${issue.path.slice(-1)}\" is incorrect, expected type: ${issue.expected}`;\n return {\n details: details,\n name: name,\n path: issue.path,\n value: issue.received.toString(),\n };\n};\nconst convertUnrecognizedKeys = (issue) => {\n const missingProperties = issue.keys.map((k) => `\"${k}\"`).join(', ');\n return {\n details: issue.keys.length > 1\n ? `The properties ${missingProperties} are not expected`\n : `The property ${missingProperties} is not expected`,\n name: CodeNames.Unexpected,\n path: issue.path,\n };\n};\nconst convertInvalidString = (issue) => {\n return {\n details: issue.message || 'Invalid string',\n name: issue.validation === 'regex' ? CodeNames.Regex : CodeNames.Unexpected,\n path: issue.path,\n };\n};\nconst convertInvalidEnumValue = (issue) => {\n return {\n details: issue.message || 'Value must be one of expected values',\n name: CodeNames.In,\n path: issue.path,\n value: issue.received.toString(),\n expected: issue.options,\n };\n};\nconst convertInvalidLiteral = (issue) => {\n return {\n details: issue.message || 'Value must be one of expected values',\n name: CodeNames.In,\n path: issue.path,\n value: issue.received,\n expected: [issue.expected],\n };\n};\nconst convertTooBig = (issue) => {\n return {\n details: issue.message || `Size should be at most ${issue.maximum}`,\n name: CodeNames.Size,\n path: issue.path,\n max: issue.maximum,\n };\n};\nconst convertTooSmall = (issue) => {\n return {\n details: issue.message || `Size should be at least ${issue.minimum}`,\n name: CodeNames.Size,\n path: issue.path,\n min: issue.minimum,\n };\n};\nconst defaultConversion = (issue) => {\n return {\n details: issue.message || 'An unexpected error occurred',\n name: CodeNames.Custom,\n path: issue.path.map(String),\n };\n};\nconst zodToContentfulError = (issue) => {\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n return convertInvalidType(issue);\n case ZodIssueCode.unrecognized_keys:\n return convertUnrecognizedKeys(issue);\n case ZodIssueCode.invalid_enum_value:\n return convertInvalidEnumValue(issue);\n case ZodIssueCode.invalid_string:\n return convertInvalidString(issue);\n case ZodIssueCode.too_small:\n return convertTooSmall(issue);\n case ZodIssueCode.too_big:\n return convertTooBig(issue);\n case ZodIssueCode.invalid_literal:\n return convertInvalidLiteral(issue);\n default:\n return defaultConversion(issue);\n }\n};\n\nconst validateBreakpointsDefinition = (breakpoints) => {\n const result = z\n .array(BreakpointSchema)\n .superRefine(breakpointsRefinement)\n .safeParse(breakpoints);\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst validateComponentDefinition = (definition) => {\n const result = ComponentDefinitionSchema.safeParse(definition);\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst VERSION_SCHEMAS$1 = {\n '2023-09-28': PatternFieldsCMAShapeSchema,\n};\n/**\n *\n * @param pattern The pattern entry to validate\n * @param schemaVersionOverride Optional override for the schema version to validate against.\n * By default, the schema version is read from the pattern entry\n * @returns object with success property and optional errors array\n */\nconst validatePatternFields = (\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches KeyValueMap in EntryProps['fields']\npattern, schemaVersionOverride) => {\n let schemaVersion;\n if (schemaVersionOverride) {\n schemaVersion = schemaVersionOverride;\n }\n else if (pattern.fields.componentTree) {\n const locale = Object.keys(pattern.fields.componentTree)[0];\n schemaVersion = pattern.fields.componentTree[locale].schemaVersion;\n }\n const schema = schemaVersion && VERSION_SCHEMAS$1[schemaVersion];\n if (!schema) {\n return {\n success: false,\n errors: [\n {\n name: schemaVersion ? CodeNames.In : CodeNames.Required,\n expected: Object.keys(VERSION_SCHEMAS$1),\n value: schemaVersion,\n path: ['fields', 'componentTree', 'schemaVersion'],\n details: schemaVersion\n ? 'Unsupported schema version'\n : 'The property \"schemaVersion\" is required here',\n },\n ],\n };\n }\n const fieldsToValidate = {\n componentTree: pattern.fields.componentTree,\n dataSource: pattern.fields.dataSource,\n unboundValues: pattern.fields.unboundValues,\n usedComponents: pattern.fields.usedComponents,\n componentSettings: pattern.fields.componentSettings,\n };\n const result = schema.safeParse(fieldsToValidate);\n if (!result.success) {\n return {\n success: result.success,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nconst VERSION_SCHEMAS = {\n '2023-09-28': ExperienceFieldsCMAShapeSchema,\n};\n// TODO: fix typing when the Entry type is exposed\nfunction isPattern(experience) {\n return experience.fields.componentSettings !== undefined;\n}\n/**\n *\n * @param experience The experience entry to validate\n * @param schemaVersionOverride Optional override for the schema version to validate against.\n * By default, the schema version is read from the experience entry\n * @returns object with success property and optional errors array\n */\nconst validateExperienceFields = (\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches KeyValueMap in EntryProps['fields']\nexperience, schemaVersionOverride) => {\n // If this is a pattern, use the pattern validator\n if (isPattern(experience)) {\n return validatePatternFields(experience, schemaVersionOverride);\n }\n let schemaVersion;\n if (schemaVersionOverride) {\n schemaVersion = schemaVersionOverride;\n }\n else if (experience.fields.componentTree) {\n const locale = Object.keys(experience.fields.componentTree)[0];\n schemaVersion = experience.fields.componentTree[locale].schemaVersion;\n }\n const schema = schemaVersion && VERSION_SCHEMAS[schemaVersion];\n if (!schema) {\n return {\n success: false,\n errors: [\n {\n name: schemaVersion ? CodeNames.In : CodeNames.Required,\n expected: ['2023-09-28'],\n value: schemaVersion,\n path: ['fields', 'componentTree', 'schemaVersion'],\n details: schemaVersion\n ? 'Unsupported schema version'\n : 'The property \"schemaVersion\" is required here',\n },\n ],\n };\n }\n const fieldsToValidate = {\n componentTree: experience.fields.componentTree,\n dataSource: experience.fields.dataSource,\n unboundValues: experience.fields.unboundValues,\n usedComponents: experience.fields.usedComponents,\n };\n const result = schema.safeParse(fieldsToValidate);\n if (!result.success) {\n return {\n success: result.success,\n errors: result.error.issues.map(zodToContentfulError),\n };\n }\n return { success: true };\n};\n\nexport { ComponentDefinitionSchema, ExperienceFieldsCMAShapeSchema as ExperienceSchema_2023_09_28, PatternFieldsCMAShapeSchema as PatternSchema_2023_09_28, validateBreakpointsDefinition, validateComponentDefinition, validateExperienceFields };\n//# sourceMappingURL=index.js.map\n","import { Breakpoint, validateBreakpointsDefinition } from '@contentful/experiences-validators';\n\nexport const breakpointsRegistry: Breakpoint[] = [];\n\n/**\n * Define custom breakpoints that should be used for all your experiences.\n * A breakpoint consists of:\n * - id: a unique identifier for this breakpoint\n * - query: a media query string that defines when this breakpoint is active\n * - previewSize: an optional fixed preview size to be used in the Studio editor when selecting this breakpoint\n * - displayName: the name to be displayed in the Studio editor for this breakpoint\n * - displayIcon: an optional icon to be displayed in the Studio editor for this breakpoint\n *\n * The first breakpoint must use a wildcard query (`*`) to match all sizes.\n *\n * Every subsequent breakpoint inherits the designs of the previous ones by default.\n *\n * The order of breakpoints must be either:\n * - desktop first: from largest to smallest, using `<` operators\n * - mobile first: from smallest to largest, using `>` operators\n *\n * @note changing breakpoints after you have created experiences may break those experiences\n * @example\n * defineBreakpoints([{\n * id: 'desktop',\n * query: '*',\n * displayName: 'Desktop',\n * displayIcon: 'desktop',\n * }, {\n * id: 'tablet',\n * query: '<992px',\n * displayName: 'Tablet',\n * displayIcon: 'tablet',\n * }, {\n * id: 'mobile',\n * query: '<576px',\n * displayName: 'Mobile',\n * displayIcon: 'mobile',\n * }]);\n */\nexport const defineBreakpoints = (breakpoints: Breakpoint[]) => {\n Object.assign(breakpointsRegistry, breakpoints);\n};\n\nexport const runBreakpointsValidation = () => {\n if (!breakpointsRegistry.length) return;\n\n const validation = validateBreakpointsDefinition(breakpointsRegistry);\n if (!validation.success) {\n throw new Error(\n `Invalid breakpoints definition. Failed with errors: \\n${JSON.stringify(validation.errors, null, 2)}`,\n );\n }\n};\n","import { SdkOptions } from '@/types';\n\nexport const sdkOptionsRegistry: SdkOptions = {};\n\n/**\n * Used inside defineComponents to forward registry arguments to this registry\n * of SDK options.\n */\nexport const defineSdkOptions = (options: typeof sdkOptionsRegistry) => {\n Object.assign(sdkOptionsRegistry, options);\n};\n\nexport const getSdkOptions = (): Readonly<typeof sdkOptionsRegistry> => {\n return { ...sdkOptionsRegistry };\n};\n","import { getDesignTokenRegistration } from '@/registries';\nimport { Breakpoint, PrimitiveValue, ValuesByBreakpoint, DesignValue } from '@/types';\n\nexport const MEDIA_QUERY_REGEXP = /(<|>)(\\d{1,})(px|cm|mm|in|pt|pc)$/;\n\nconst toCSSMediaQuery = ({ query }: Breakpoint): string | undefined => {\n if (query === '*') return undefined;\n const match = query.match(MEDIA_QUERY_REGEXP);\n if (!match) return undefined;\n const [, operator, value, unit] = match;\n if (operator === '<') {\n const maxScreenWidth = Number(value) - 1;\n return `(max-width: ${maxScreenWidth}${unit})`;\n } else if (operator === '>') {\n const minScreenWidth = Number(value) + 1;\n return `(min-width: ${minScreenWidth}${unit})`;\n }\n return undefined;\n};\n\n// Remove this helper when upgrading to TypeScript 5.0 - https://github.com/microsoft/TypeScript/issues/48829\nconst findLast = <T>(\n array: Array<T>,\n predicate: Parameters<Array<T>['find']>[0],\n): T | undefined => {\n return [...array].reverse().find(predicate);\n};\n\n// Initialise media query matchers. This won't include the always matching fallback breakpoint.\nexport const mediaQueryMatcher = (breakpoints: Breakpoint[]) => {\n const mediaQueryMatches: Record<string, boolean> = {};\n\n const mediaQueryMatchers = breakpoints\n .map((breakpoint) => {\n const cssMediaQuery = toCSSMediaQuery(breakpoint);\n if (!cssMediaQuery) return undefined;\n if (typeof window === 'undefined') return undefined;\n const mediaQueryMatcher = window.matchMedia(cssMediaQuery);\n\n mediaQueryMatches[breakpoint.id] = mediaQueryMatcher.matches;\n return { id: breakpoint.id, signal: mediaQueryMatcher };\n })\n .filter((matcher): matcher is { id: string; signal: MediaQueryList } => !!matcher);\n\n return [mediaQueryMatchers, mediaQueryMatches] as [\n typeof mediaQueryMatchers,\n typeof mediaQueryMatches,\n ];\n};\n\nexport const getActiveBreakpointIndex = (\n breakpoints: Breakpoint[],\n mediaQueryMatches: Record<string, boolean>,\n fallbackBreakpointIndex: number,\n) => {\n // The breakpoints are ordered (desktop-first: descending by screen width, mobile-first: ascending by screen width).\n const breakpointsWithMatches = breakpoints.map(({ id }, index) => ({\n id,\n index,\n // The fallback breakpoint with wildcard query will always match\n isMatch: mediaQueryMatches[id] ?? index === fallbackBreakpointIndex,\n }));\n\n // Find the last breakpoint in the list that matches (desktop-first: the narrowest one, mobile-first: the widest one)\n const mostSpecificIndex = findLast(breakpointsWithMatches, ({ isMatch }) => isMatch)?.index;\n return mostSpecificIndex ?? fallbackBreakpointIndex;\n};\n\nexport const getFallbackBreakpointIndex = (breakpoints: Breakpoint[]) => {\n // The validation ensures that there will be exactly one breakpoint using the wildcard query.\n // If there is none, we just take the first one in the list.\n return Math.max(\n breakpoints.findIndex(({ query }) => query === '*'),\n 0,\n );\n};\n\nconst builtInStylesWithDesignTokens = [\n 'cfMargin',\n 'cfPadding',\n 'cfGap',\n 'cfWidth',\n 'cfHeight',\n 'cfBackgroundColor',\n 'cfBorder',\n 'cfBorderRadius',\n 'cfFontSize',\n 'cfLineHeight',\n 'cfLetterSpacing',\n 'cfTextColor',\n 'cfMaxWidth',\n];\n\nexport const isValidBreakpointValue = (\n value: PrimitiveValue,\n): value is Exclude<PrimitiveValue, undefined> => {\n return value !== undefined && value !== null && value !== '';\n};\n\nexport const getValueForBreakpoint = (\n valuesByBreakpoint: ValuesByBreakpoint | undefined,\n breakpoints: Breakpoint[],\n activeBreakpointIndex: number,\n fallbackBreakpointIndex: number,\n /** Provide the name for built-in styles to replace design tokens. Supported properties are:\n * cfMargin, cfPadding, cfGap, cfWidth, cfHeight, cfBackgroundColor,\n * cfBorder, cfBorderRadius, cfFontSize, cfLineHeight, cfLetterSpacing,\n * cfTextColor, cfMaxWidth\n */\n propertyName?: string,\n resolveDesignTokens = true,\n) => {\n const eventuallyResolveDesignTokens = (value: PrimitiveValue) => {\n // This is used externally in the web app to determine the original persisted value\n if (!resolveDesignTokens) {\n return value;\n }\n // For some built-in design properties, we support design tokens\n if (propertyName && builtInStylesWithDesignTokens.includes(propertyName)) {\n return getDesignTokenRegistration(value as string, propertyName);\n }\n // For all other properties, we just return the breakpoint-specific value\n return value;\n };\n\n if (valuesByBreakpoint instanceof Object) {\n // Assume that the values are sorted by media query to apply the cascading CSS logic\n for (let index = activeBreakpointIndex; index >= 0; index--) {\n const breakpointId = breakpoints[index]?.id;\n if (isValidBreakpointValue(valuesByBreakpoint[breakpointId])) {\n // If the value is defined, we use it and stop the breakpoints cascade\n return eventuallyResolveDesignTokens(valuesByBreakpoint[breakpointId]);\n }\n }\n\n const fallbackBreakpointId = breakpoints[fallbackBreakpointIndex]?.id;\n if (isValidBreakpointValue(valuesByBreakpoint[fallbackBreakpointId])) {\n return eventuallyResolveDesignTokens(valuesByBreakpoint[fallbackBreakpointId]);\n }\n } else {\n // Old design properties did not support breakpoints, keep for backward compatibility\n return valuesByBreakpoint;\n }\n};\n\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue,\n overwriteValue: DesignValue | undefined,\n): DesignValue;\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue,\n): DesignValue;\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue | undefined,\n): DesignValue | undefined;\n/** Overwrites the default value breakpoint by breakpoint. If a breakpoint\n * is not overwritten, it will fall back to the default. */\nexport function mergeDesignValuesByBreakpoint(\n defaultValue: DesignValue | undefined,\n overwriteValue: DesignValue | undefined,\n): DesignValue | undefined {\n if (!defaultValue || !overwriteValue) {\n return defaultValue ?? overwriteValue;\n }\n\n const mergedValuesByBreakpoint = { ...defaultValue.valuesByBreakpoint };\n\n for (const [breakpointId, value] of Object.entries(overwriteValue.valuesByBreakpoint)) {\n if (!isValidBreakpointValue(value)) {\n continue;\n }\n mergedValuesByBreakpoint[breakpointId] = value;\n }\n\n return {\n type: 'DesignValue',\n valuesByBreakpoint: mergedValuesByBreakpoint,\n };\n}\n\nexport const BREAKPOINTS_STRATEGY_DESKTOP_FIRST = 'desktop-first';\nexport const BREAKPOINTS_STRATEGY_MOBILE_FIRST = 'mobile-first';\nexport type BreakpointsStrategy =\n | typeof BREAKPOINTS_STRATEGY_DESKTOP_FIRST\n | typeof BREAKPOINTS_STRATEGY_MOBILE_FIRST\n | undefined;\n\n/**\n * Detects the breakpoint strategy based on the provided breakpoints.\n *\n * @param breakpoints The array of breakpoints to analyze.\n * @returns The detected breakpoint strategy or undefined if not determinable.\n */\nexport const detectBreakpointsStrategy = (breakpoints: Breakpoint[]): BreakpointsStrategy => {\n if (breakpoints.length < 2) {\n return undefined;\n }\n\n const hasMobileFirst = breakpoints.slice(1).every((bp) => bp.query.startsWith('>'));\n if (hasMobileFirst) {\n return BREAKPOINTS_STRATEGY_MOBILE_FIRST;\n }\n\n const hasDesktopFirst = breakpoints.slice(1).every((bp) => bp.query.startsWith('<'));\n if (hasDesktopFirst) {\n return BREAKPOINTS_STRATEGY_DESKTOP_FIRST;\n }\n\n return undefined;\n};\n","const CF_DEBUG_KEY = 'cf_debug';\n\n/**\n * To ensure that the localStorage API can be used safely, we check\n * for availability (e.g. undefined in Node.js). Additionally, we\n * check if the localStorage can be used as some browsers throw a\n * SecurityError (e.g. Brave or Chromium with specific settings).\n */\nconst checkLocalStorageAvailability = () => {\n try {\n // Even the typeof check can throw an error in an agressive browser like Brave (requires using the deprecated flag #block-all-cookies-toggle)\n if (typeof localStorage === 'undefined' || localStorage === null) {\n return false;\n }\n // Attempt to set and remove an item to check if localStorage is enabled\n const TEST_KEY = 'cf_test_local_storage';\n localStorage.setItem(TEST_KEY, 'yes');\n if (localStorage.getItem(TEST_KEY) === 'yes') {\n localStorage.removeItem(TEST_KEY);\n return true;\n } else {\n return false;\n }\n } catch (_error) {\n return false;\n }\n};\n\nconst DEBUG_LEVELS_HIERARCHY = ['error', 'warn', 'log', 'debug'] as const;\ntype DEBUG_LEVEL = (typeof DEBUG_LEVELS_HIERARCHY)[number];\n\nexport class DebugLogger {\n private static instance: DebugLogger | null = null;\n private activeLevel: DEBUG_LEVEL = 'warn';\n\n constructor() {\n if (!checkLocalStorageAvailability()) {\n return;\n }\n\n // Default to checking localStorage for the debug mode on initialization if in browser\n if (localStorage.getItem(CF_DEBUG_KEY) === 'true') {\n this.activeLevel = 'debug';\n }\n }\n\n public static getInstance(): DebugLogger {\n if (this.instance === null) {\n this.instance = new DebugLogger();\n }\n return this.instance;\n }\n\n public getActiveLevel() {\n return this.activeLevel;\n }\n\n public setActiveLevel(level: DEBUG_LEVEL) {\n this.activeLevel = level;\n\n if (!checkLocalStorageAvailability()) {\n return;\n }\n if (this.activeLevel === 'debug' || this.activeLevel === 'log') {\n localStorage.setItem(CF_DEBUG_KEY, 'true');\n } else {\n localStorage.removeItem(CF_DEBUG_KEY);\n }\n }\n\n // Log method for different levels (error, warn, log)\n private logger(level: DEBUG_LEVEL): typeof console.log {\n return (...args: unknown[]) => {\n const levelPriority = DEBUG_LEVELS_HIERARCHY.indexOf(level);\n const activeLevelPriority = DEBUG_LEVELS_HIERARCHY.indexOf(this.activeLevel);\n const enabled = levelPriority <= activeLevelPriority;\n if (enabled) {\n console[level](...args);\n }\n };\n }\n\n // Public methods for logging\n public error = this.logger('error');\n public warn = this.logger('warn');\n public log = this.logger('log');\n public debug = this.logger('debug');\n}\n\nexport const debug = DebugLogger.getInstance();\n\n/** Set the logging level to `debug` */\nexport const enableDebug = () => {\n debug.setActiveLevel('debug');\n console.log('Debug mode enabled');\n};\n\n/** Set the debug level to `warn` */\nexport const disableDebug = () => {\n debug.setActiveLevel('warn');\n console.log('Debug mode disabled');\n};\n\n/** Set the debug level to the provided level */\nexport const setDebugLevel = (level: DEBUG_LEVEL) => {\n debug.setActiveLevel(level);\n console.log(`Debug mode set to ${level}`);\n};\n","type Rect = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nexport const findOutermostCoordinates = (first: Rect, second: Rect) => {\n return {\n top: Math.min(first.top, second.top),\n right: Math.max(first.right, second.right),\n bottom: Math.max(first.bottom, second.bottom),\n left: Math.min(first.left, second.left),\n };\n};\n\nexport const isElementHidden = (rect: DOMRect): boolean => {\n /** if the rect has no size and position, its element is not rendered in the DOM */\n return rect.width === 0 && rect.height === 0 && rect.x === 0 && rect.y === 0;\n};\n\nexport const getElementCoordinates = (element: Element): DOMRect => {\n const rect = element.getBoundingClientRect();\n\n /**\n * If element does not have children, or element has it's own width or height,\n * return the element's coordinates.\n */\n if (element.children.length === 0 || rect.width !== 0 || rect.height !== 0) {\n return rect;\n }\n\n const rects: Rect[] = [];\n\n /**\n * If element has children, or element does not have it's own width and height,\n * we find the cordinates of the children, and assume the outermost coordinates of the children\n * as the coordinate of the element.\n *\n * E.g child1 => {top: 2, bottom: 3, left: 4, right: 6} & child2 => {top: 1, bottom: 8, left: 12, right: 24}\n * The final assumed coordinates of the element would be => { top: 1, right: 24, bottom: 8, left: 4 }\n */\n for (const child of element.children) {\n const childRect = getElementCoordinates(child);\n if (childRect.width !== 0 || childRect.height !== 0) {\n const { top, right, bottom, left } = childRect;\n rects.push({ top, right, bottom, left });\n }\n }\n\n if (rects.length === 0) {\n return rect;\n }\n\n const { top, right, bottom, left } = rects.reduce(findOutermostCoordinates);\n\n return DOMRect.fromRect({\n x: left,\n y: top,\n height: bottom - top,\n width: right - left,\n });\n};\n","import type { Link } from '@/types';\n\nexport const isLinkToAsset = (variable: unknown): variable is Link<'Asset'> => {\n if (variable === null || typeof variable !== 'object') return false;\n\n // The `'prop' in` pattern is informing TypeScript of the object shape, no need to cast `as`.\n if (!('sys' in variable)) return false;\n if (variable.sys === null || typeof variable.sys !== 'object') return false;\n\n if (!('linkType' in variable.sys)) return false;\n if (!('id' in variable.sys)) return false;\n if (!('type' in variable.sys)) return false;\n\n return (\n variable.sys?.linkType === 'Asset' &&\n typeof variable.sys?.id === 'string' &&\n !!variable.sys?.id &&\n variable.sys?.type === 'Link'\n );\n};\n","import type { Link } from '@/types';\n\nexport const isLinkToEntry = (variable: unknown): variable is Link<'Entry'> => {\n if (variable === null || typeof variable !== 'object') return false;\n\n // The `'prop' in` pattern is informing TypeScript of the object shape, no need to cast `as`.\n if (!('sys' in variable)) return false;\n if (variable.sys === null || typeof variable.sys !== 'object') return false;\n\n if (!('linkType' in variable.sys)) return false;\n if (!('id' in variable.sys)) return false;\n if (!('type' in variable.sys)) return false;\n\n return (\n variable.sys?.linkType === 'Entry' &&\n typeof variable.sys?.id === 'string' &&\n !!variable.sys?.id &&\n variable.sys?.type === 'Link'\n );\n};\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\n\nexport function isLink(\n maybeLink: UnresolvedLink<'Entry'> | Entry | undefined,\n): maybeLink is UnresolvedLink<'Entry'>;\nexport function isLink(\n maybeLink: UnresolvedLink<'Asset'> | Asset | undefined,\n): maybeLink is UnresolvedLink<'Asset'>;\nexport function isLink(maybeLink: unknown): maybeLink is UnresolvedLink<'Entry' | 'Asset'>;\nexport function isLink(maybeLink: unknown): maybeLink is UnresolvedLink<'Entry' | 'Asset'> {\n if (maybeLink === null) return false;\n if (typeof maybeLink !== 'object') return false;\n\n const link = maybeLink as {\n sys?: {\n id?: string;\n type?: string;\n linkType?: string;\n };\n };\n\n return Boolean(link.sys?.id) && link.sys?.type === 'Link' && Boolean(link.sys?.linkType);\n}\n","import { Asset, Entry } from 'contentful';\nimport cloneDeep from 'lodash.clonedeep';\n\n/**\n * Localizes the provided entry or asset to match the regular format of CDA/CPA entities.\n * Note that this function does not apply a fallback to the default locale nor does it check\n * the content type for the localization setting of each field.\n * It will simply resolve each field to the requested locale. As using single and multiple\n * reference fields is still considered an experimental feature, this function does not handle\n * recursive localization of deeper referenced entities.\n *\n * If the entity is already localized, it will return the entity as is.\n *\n * Note that localization is later on determined by the existence of the `sys.locale` property (matching the API shape).\n *\n * @example\n * ```\n * const multiLocaleEntry = { fields: { title: { 'en-US': 'Hello' } } };\n * const localizedEntry = localizeEntity(multiLocaleEntry, 'en-US');\n * console.log(localizedEntry.fields.title); // 'Hello'\n * ```\n */\nexport function localizeEntity<T extends Asset | Entry>(entity: T, locale: string): T {\n if (!entity || !entity.fields) {\n throw new Error('Invalid entity provided');\n }\n if (entity.sys.locale) {\n return entity;\n }\n const cloned = cloneDeep(entity);\n // Set the requested locale as entry locale to follow the API shape:\n // https://www.contentful.com/developers/docs/references/content-delivery-api/#/introduction/common-resource-attributes\n cloned.sys.locale = locale;\n\n for (const key in cloned.fields) {\n cloned.fields[key] = cloned.fields[key][locale];\n }\n\n return cloned;\n}\n","/**\n * This module encapsulates format of the path to a deep reference.\n */\n\nimport { BoundValue, ComponentPropertyValue } from '@contentful/experiences-validators';\nimport { Asset, Entry } from 'contentful';\nimport { debug } from './debugLogger';\n\nexport type PreboundVariable = {\n type: 'BoundValue';\n path: string;\n isPrebound: boolean;\n pathsByContentType: Record<string, { path: string }>;\n};\n\nexport const isPreboundProp = (variable: ComponentPropertyValue): variable is PreboundVariable => {\n return (\n variable.type === 'BoundValue' &&\n typeof (variable as PreboundVariable).isPrebound === 'boolean' &&\n !!(variable as PreboundVariable).pathsByContentType\n );\n};\n\nexport type UnresolvedFieldset = Array<[null, string, string?]>;\nexport type Fieldset = Array<[Entry | Asset, string, string?]>;\n\nexport const parseDataSourcePathIntoFieldset = (path: string): UnresolvedFieldset => {\n const parsedPath = parseDeepPath(path);\n\n if (null === parsedPath) {\n throw new Error(`Cannot parse path '${path}' as deep path`);\n }\n\n return parsedPath.fields.map((field) => [null, field, '~locale']);\n};\n\n/**\n * Parse path into components, supports L1 references (one reference follow) atm.\n * @param path from data source. eg. `/uuid123/fields/image/~locale/fields/file/~locale`\n * eg. `/uuid123/fields/file/~locale/fields/title/~locale`\n * @returns\n */\nexport const parseDataSourcePathWithL1DeepBindings = (\n path: string,\n): {\n key: string;\n field: string;\n referentField: string;\n} => {\n const parsedPath = parseDeepPath(path);\n\n if (null === parsedPath) {\n throw new Error(`Cannot parse path '${path}' as deep path`);\n }\n\n return {\n key: parsedPath.key,\n field: parsedPath.fields[0],\n referentField: parsedPath.fields[1],\n };\n};\n\n/**\n * Detects if paths is valid deep-path, like:\n * - /gV6yKXp61hfYrR7rEyKxY/fields/mainStory/~locale/fields/cover/~locale/fields/title/~locale\n * or regular, like:\n * - /6J8eA60yXwdm5eyUh9fX6/fields/mainStory/~locale\n * @returns\n */\nexport const isDeepPath = (deepPathCandidate: string): boolean => {\n const deepPathParsed = parseDeepPath(deepPathCandidate);\n if (!deepPathParsed) {\n return false;\n }\n return deepPathParsed.fields.length > 1;\n};\n\nexport const isDeepPrebinding = (boundValueProperty: BoundValue): boolean => {\n if (!boundValueProperty?.path || boundValueProperty.type !== 'BoundValue') {\n return false;\n }\n\n if (!isPreboundProp(boundValueProperty)) {\n return false;\n }\n\n if (isDeepPath(boundValueProperty.path)) {\n return true;\n }\n\n const hasDeepPathByContentType = Object.values(boundValueProperty.pathsByContentType || {}).some(\n (val) => isDeepPath(val.path),\n );\n\n return hasDeepPathByContentType;\n};\n\nexport const getPrebindingPathBySourceEntry = (\n preboundValueProperty: PreboundVariable,\n getHeadEntityByDataSourceKey: (id: string) => Entry | Asset | undefined,\n): string | undefined => {\n if (!isPreboundProp(preboundValueProperty)) {\n return undefined;\n }\n\n // incomplete path due to several content types and not known default source\n const [, dataSourceKey] = preboundValueProperty.path.split('/');\n if (!dataSourceKey) {\n return undefined;\n }\n\n const headEntity = getHeadEntityByDataSourceKey(dataSourceKey);\n if (headEntity?.sys.type !== 'Entry') {\n return undefined;\n }\n\n const contentTypeId = headEntity.sys.contentType.sys.id;\n if (!preboundValueProperty.pathsByContentType?.[contentTypeId]) {\n return undefined;\n }\n\n return preboundValueProperty.pathsByContentType?.[contentTypeId]?.path;\n};\n\ntype DeepPathParsed = {\n key: string;\n fields: string[]; // without locale (as it's not used in SDK atm)\n};\n\nconst parseDeepPath = (deepPathCandidate: string): DeepPathParsed | null => {\n // ALGORITHM:\n // We start with deep path in form:\n // /uuid123/fields/mainStory/~locale/fields/cover/~locale/fields/title/~locale\n // First turn string into array of segments\n // ['', 'uuid123', 'fields', 'mainStory', '~locale', 'fields', 'cover', '~locale', 'fields', 'title', '~locale']\n // Then group segments into intermediate represenatation - chunks, where each non-initial chunk starts with 'fields'\n // [\n // [ \"\", \"uuid123\" ],\n // [ \"fields\", \"mainStory\", \"~locale\" ],\n // [ \"fields\", \"cover\", \"~locale\" ],\n // [ \"fields\", \"title\", \"~locale\" ]\n // ]\n // Then check \"initial\" chunk for corretness\n // Then check all \"field-leading\" chunks for correctness\n\n const isValidInitialChunk = (initialChunk: string[]) => {\n // must have start with '' and have at least 2 segments, second non-empty\n // eg. /-_432uuid123123\n return /^\\/([^/^~]+)$/.test(initialChunk.join('/'));\n };\n\n const isValidFieldChunk = (fieldChunk: string[]) => {\n // must start with 'fields' and have at least 3 segments, second non-empty and last segment must be '~locale'\n // eg. fields/-32234mainStory/~locale\n return /^fields\\/[^/^~]+\\/~locale$/.test(fieldChunk.join('/'));\n };\n\n const deepPathSegments = deepPathCandidate.split('/');\n const chunks = chunkSegments(deepPathSegments, { startNextChunkOnElementEqualTo: 'fields' });\n if (chunks.length <= 1) {\n return null; // malformed path, even regular paths have at least 2 chunks\n } else if (chunks.length === 2) {\n return null; // deep paths have at least 3 chunks\n }\n\n // With 3+ chunks we can now check for deep path correctness\n const [initialChunk, ...fieldChunks] = chunks;\n\n if (!isValidInitialChunk(initialChunk)) {\n return null;\n }\n\n if (!fieldChunks.every(isValidFieldChunk)) {\n return null;\n }\n\n return {\n key: initialChunk[1], // pick uuid from initial chunk ['','uuid123'],\n fields: fieldChunks.map((fieldChunk) => fieldChunk[1]), // pick only fieldName eg. from ['fields','mainStory', '~locale'] we pick `mainStory`\n };\n};\n\nconst chunkSegments = (\n segments: string[],\n { startNextChunkOnElementEqualTo }: { startNextChunkOnElementEqualTo: string },\n): Array<string[]> => {\n const chunks: Array<string[]> = [];\n let currentChunk: string[] = [];\n\n const isSegmentBeginningOfChunk = (segment: string) => segment === startNextChunkOnElementEqualTo;\n const excludeEmptyChunks = (chunk: string[]) => chunk.length > 0;\n\n for (let i = 0; i < segments.length; i++) {\n const isInitialElement = i === 0;\n const segment = segments[i];\n if (isInitialElement) {\n currentChunk = [segment];\n } else if (isSegmentBeginningOfChunk(segment)) {\n chunks.push(currentChunk);\n currentChunk = [segment];\n } else {\n currentChunk.push(segment);\n }\n }\n chunks.push(currentChunk);\n\n return chunks.filter(excludeEmptyChunks);\n};\n\nexport const lastPathNamedSegmentEq = (path: string, expectedName: string) => {\n // `/key123/fields/featureImage/~locale/fields/file/~locale`\n // ['', 'key123', 'fields', 'featureImage', '~locale', 'fields', 'file', '~locale']\n const segments = path.split('/');\n\n if (segments.length < 2) {\n debug.warn(\n `[experiences-core::pathSchema] Attempting to check whether last named segment of the path (${path}) equals to '${expectedName}', but the path doesn't have enough segments.`,\n );\n return false;\n }\n const secondLast = segments[segments.length - 2]; // skipping trailing '~locale'\n return secondLast === expectedName;\n};\n","import { Entry } from 'contentful';\n\nexport const resolveHyperlinkPattern = (\n pattern: string,\n entry: Entry | null,\n locale: string | null,\n) => {\n if (!entry || !locale) return null;\n const variables = {\n entry,\n locale,\n };\n\n return buildTemplate({ template: pattern, context: variables });\n};\n\nfunction getValue(obj, path) {\n return path\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.')\n .reduce((o, k) => (o || {})[k], obj);\n}\n\nexport function addLocale(str: string, locale: string): string {\n const fieldsIndicator = 'fields';\n const fieldsIndex = str.indexOf(fieldsIndicator);\n if (fieldsIndex !== -1) {\n const dotIndex = str.indexOf('.', fieldsIndex + fieldsIndicator.length + 1); // +1 for '.'\n if (dotIndex !== -1) {\n return str.slice(0, dotIndex + 1) + locale + '.' + str.slice(dotIndex + 1);\n }\n }\n\n return str;\n}\n\nexport function getTemplateValue(\n ctx: { entry: Entry; locale: string },\n path: string,\n): string | (() => string) {\n const pathWithLocale = addLocale(path, ctx.locale);\n const retrievedValue = getValue(ctx, pathWithLocale) as string | Record<string, string>;\n\n return typeof retrievedValue === 'object' && retrievedValue !== null\n ? retrievedValue[ctx.locale]!\n : retrievedValue;\n}\n\nexport function buildTemplate({\n template,\n context,\n}: {\n template: string;\n context: { entry: Entry; locale: string };\n}): string {\n const localeVariable = /{\\s*locale\\s*}/g;\n // e.g. \"{ page.sys.id }\"\n const variables = /{\\s*([\\S]+?)\\s*}/g;\n\n return (\n template\n // first replace the locale pattern\n .replace(localeVariable, context.locale)\n // then resolve the remaining variables\n .replace(variables, (_, path: string) => {\n const fallback = path + '_NOT_FOUND';\n const value = getTemplateValue(context, path) ?? fallback;\n\n // using _.result didn't gave proper results so we run our own version of it\n return String(typeof value === 'function' ? value() : value);\n })\n );\n}\n","import { CF_STYLE_ATTRIBUTES } from '../constants';\nimport type { PrimitiveValue } from '../types';\n\nconst stylesToKeep = ['cfImageAsset'];\nconst stylesToRemove = CF_STYLE_ATTRIBUTES.filter((style) => !stylesToKeep.includes(style));\n// cfWrapColumns & cfWrapColumnsCount are no real style attributes as they are handled on the editor side\nconst propsToRemove = ['cfSsrClassName', 'cfWrapColumns', 'cfWrapColumnsCount'];\n\nexport const sanitizeNodeProps = (nodeProps: Record<PropertyKey, PrimitiveValue>) => {\n const keysToRemove = [...stylesToRemove, ...propsToRemove];\n const sanitizedProps = Object.fromEntries(\n Object.entries(nodeProps).filter(([key]) => !keysToRemove.includes(key)),\n );\n return sanitizedProps;\n};\n","import { getSdkOptions } from '@/registries/sdkOptionsRegistry';\nimport {\n StyleProps,\n CSSProperties,\n OptimizedBackgroundImageAsset,\n BackgroundImageScalingOption,\n BackgroundImageAlignmentOption,\n} from '@/types';\n\n/** Turn the visibility value into a style object that can be used for inline styles in React */\nexport const transformVisibility = (value?: boolean): CSSProperties => {\n if (value === false) {\n return {\n display: 'none !important',\n };\n }\n // Don't explicitly set anything when visible to not overwrite values like `grid` or `flex`.\n return {};\n};\n\nexport const transformGridColumn = (span?: string): CSSProperties => {\n if (!span) {\n return {};\n }\n\n return {\n gridColumn: `span ${span}`,\n };\n};\n\nexport const transformBorderStyle = (value?: string): CSSProperties => {\n if (!value) return {};\n const parts = value.split(' ');\n // Just accept the passed value\n if (parts.length < 3) return { border: value };\n const [borderSize, borderStyle, ...borderColorParts] = parts;\n const borderColor = borderColorParts.join(' ');\n return {\n border: `${borderSize} ${borderStyle} ${borderColor}`,\n };\n};\n\nexport const transformAlignment = (\n cfHorizontalAlignment?: string,\n cfVerticalAlignment?: string,\n cfFlexDirection = 'column',\n): CSSProperties =>\n cfFlexDirection === 'row'\n ? {\n alignItems: cfHorizontalAlignment,\n justifyContent:\n cfVerticalAlignment === 'center' ? `safe ${cfVerticalAlignment}` : cfVerticalAlignment,\n }\n : {\n alignItems: cfVerticalAlignment,\n justifyContent:\n cfHorizontalAlignment === 'center'\n ? `safe ${cfHorizontalAlignment}`\n : cfHorizontalAlignment,\n };\n\ninterface CSSPropertiesForBackground extends CSSProperties {\n backgroundImage: string;\n backgroundImage2?: string;\n backgroundRepeat: 'repeat' | 'no-repeat';\n backgroundSize?: 'cover' | 'contain';\n\n backgroundPosition?:\n | 'left top'\n | 'left center'\n | 'left bottom'\n | 'right top'\n | 'right center'\n | 'right bottom'\n | 'center top'\n | 'center center'\n | 'center bottom';\n}\n\nexport const transformBackgroundImage = (\n cfBackgroundImageUrl: string | OptimizedBackgroundImageAsset | null | undefined,\n cfBackgroundImageOptions?: StyleProps['cfBackgroundImageOptions'],\n): CSSPropertiesForBackground | undefined => {\n const matchBackgroundSize = (scaling?: BackgroundImageScalingOption) => {\n if ('fill' === scaling) return 'cover';\n if ('fit' === scaling) return 'contain';\n };\n\n const matchBackgroundPosition = (\n alignment?: BackgroundImageAlignmentOption,\n ): CSSPropertiesForBackground['backgroundPosition'] | undefined => {\n if (!alignment || 'string' !== typeof alignment) {\n return;\n }\n let [horizontalAlignment, verticalAlignment] = alignment.trim().split(/\\s+/, 2);\n\n const isHorizontalValid = ['left', 'right', 'center'].includes(horizontalAlignment);\n const isVerticalValid = ['top', 'bottom', 'center'].includes(verticalAlignment);\n\n horizontalAlignment = isHorizontalValid ? horizontalAlignment : 'left';\n verticalAlignment = isVerticalValid ? verticalAlignment : 'top';\n\n return `${horizontalAlignment} ${verticalAlignment}` as CSSPropertiesForBackground['backgroundPosition'];\n };\n\n if (!cfBackgroundImageUrl) {\n return;\n }\n\n let backgroundImage: string;\n let backgroundImageSet: string | undefined;\n\n if (typeof cfBackgroundImageUrl === 'string') {\n backgroundImage = `url(${cfBackgroundImageUrl})`;\n } else {\n const imgSet = cfBackgroundImageUrl.srcSet?.join(',');\n backgroundImage = `url(${cfBackgroundImageUrl.url})`;\n backgroundImageSet = `image-set(${imgSet})`;\n }\n\n return {\n backgroundImage,\n backgroundImage2: backgroundImageSet,\n backgroundRepeat: cfBackgroundImageOptions?.scaling === 'tile' ? 'repeat' : 'no-repeat',\n backgroundPosition: matchBackgroundPosition(cfBackgroundImageOptions?.alignment),\n backgroundSize: matchBackgroundSize(cfBackgroundImageOptions?.scaling),\n };\n};\n\nexport const transformTextAlign = (\n value?: CSSProperties['textAlign'],\n): undefined | CSSProperties['textAlign'] => {\n if (!value) return undefined;\n const sdkOptions = getSdkOptions();\n // New behavior: translate left/right to start/end\n // Customer can opt out by activating this global option toggle\n if (!sdkOptions.__disableTextAlignmentTransform) {\n if (value === 'left') return 'start';\n if (value === 'right') return 'end';\n }\n return value;\n};\n","import md5 from 'md5';\nimport {\n transformAlignment,\n transformBackgroundImage,\n transformBorderStyle,\n transformGridColumn,\n transformTextAlign,\n} from './styleTransformers';\nimport { isContentfulStructureComponent, isStructureWithRelativeHeight } from '../components';\nimport { EMPTY_CONTAINER_SIZE } from '../../constants';\nimport {\n CSSProperties,\n StyleProps,\n PrimitiveValue,\n ExperienceTreeNode,\n ComponentTreeNode,\n} from '@/types';\n\nexport const toCSSAttribute = (key: string) => {\n let val = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\n // Remove the number from the end of the key to allow for overrides on style properties\n val = val.replace(/\\d+$/, '');\n\n return val;\n};\n\n/**\n * Turns a list of CSSProperties into a joined CSS string that can be\n * used for <style> tags. Per default it creates a minimized version.\n * For editor mode, use the `useWhitespaces` flag to create a more readable version.\n *\n * @param cssProperties list of CSS properties\n * @param useWhitespaces adds whitespaces and newlines between each rule\n * @returns a string of CSS rules\n */\nexport const stringifyCssProperties = (\n cssProperties: CSSProperties,\n useWhitespaces: boolean = false,\n) => {\n const rules = Object.entries(cssProperties)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) =>\n useWhitespaces ? `${toCSSAttribute(key)}: ${value};` : `${toCSSAttribute(key)}:${value};`,\n );\n return rules.join(useWhitespaces ? '\\n' : '');\n};\n\nexport const buildStyleTag = ({ styles, nodeId }: { styles: CSSProperties; nodeId?: string }) => {\n const generatedStyles = stringifyCssProperties(styles, true);\n const className = `cfstyles-${nodeId ? nodeId : md5(generatedStyles)}`;\n const styleRule = `.${className}{ ${generatedStyles} }`;\n\n return [className, styleRule];\n};\n\n/**\n * Takes plain design values and transforms them into CSS properties. Undefined values will\n * be filtered out.\n *\n * **Example Input**\n * ```\n * values = {\n * cfVisibility: 'visible',\n * cfMargin: '10px',\n * cfFlexReverse: true,\n * cfImageOptions: { objectFit: 'cover' },\n * // ...\n * }\n * ```\n * **Example Output**\n * ```\n * cssProperties = {\n * margin: '10px',\n * flexDirection: 'row-reverse',\n * objectFit: 'cover',\n * // ...\n * }\n * ```\n */\nexport const buildCfStyles = (values: Partial<StyleProps>): CSSProperties => {\n const cssProperties = {\n margin: values.cfMargin,\n padding: values.cfPadding,\n backgroundColor: values.cfBackgroundColor,\n width: values.cfWidth || values.cfImageOptions?.width,\n height: values.cfHeight || values.cfImageOptions?.height,\n maxWidth: values.cfMaxWidth,\n ...transformGridColumn(values.cfColumnSpan),\n ...transformBorderStyle(values.cfBorder),\n borderRadius: values.cfBorderRadius,\n gap: values.cfGap,\n ...transformAlignment(\n values.cfHorizontalAlignment,\n values.cfVerticalAlignment,\n values.cfFlexDirection,\n ),\n flexDirection:\n values.cfFlexReverse && values.cfFlexDirection\n ? `${values.cfFlexDirection}-reverse`\n : values.cfFlexDirection,\n flexWrap: values.cfFlexWrap,\n ...transformBackgroundImage(values.cfBackgroundImageUrl, values.cfBackgroundImageOptions),\n fontSize: values.cfFontSize,\n fontWeight: values.cfTextBold ? 'bold' : values.cfFontWeight,\n fontStyle: values.cfTextItalic ? 'italic' : undefined,\n textDecoration: values.cfTextUnderline ? 'underline' : undefined,\n lineHeight: values.cfLineHeight,\n letterSpacing: values.cfLetterSpacing,\n color: values.cfTextColor,\n textAlign: transformTextAlign(values.cfTextAlign),\n textTransform: values.cfTextTransform,\n objectFit: values.cfImageOptions?.objectFit,\n objectPosition: values.cfImageOptions?.objectPosition,\n };\n const cssPropertiesWithoutUndefined = Object.fromEntries(\n Object.entries(cssProperties).filter(([, value]) => value !== undefined),\n );\n return cssPropertiesWithoutUndefined;\n};\n\n/**\n * **Only meant to be used in editor mode!**\n *\n * If the node is an empty structure component with a relative height (e.g. '100%'),\n * it might render with a zero height. In this case, add a min height of 80px to ensure\n * that child nodes can be added via drag & drop.\n */\nexport const addMinHeightForEmptyStructures = (\n cssProperties: CSSProperties,\n node: ComponentTreeNode,\n) => {\n if (\n !node.children.length &&\n isStructureWithRelativeHeight(node.definitionId, cssProperties.height)\n ) {\n return {\n ...cssProperties,\n minHeight: EMPTY_CONTAINER_SIZE,\n };\n }\n return cssProperties;\n};\n\n/**\n * Container/section default behavior:\n * Default height => height: EMPTY_CONTAINER_SIZE\n * If a container component has children => height: 'fit-content'\n */\nexport const calculateNodeDefaultHeight = ({\n blockId,\n children,\n value,\n}: {\n blockId?: string;\n children: ExperienceTreeNode['children'];\n value: PrimitiveValue;\n}) => {\n if (!blockId || !isContentfulStructureComponent(blockId) || value !== 'auto') {\n return value;\n }\n\n if (children.length) {\n return '100%';\n }\n\n return EMPTY_CONTAINER_SIZE;\n};\n","import {\n ExperienceTree,\n ExperienceDataSource,\n ExperienceUnboundValues,\n ExperienceEntry,\n ComponentDefinition,\n} from '@/types';\nimport { Entry } from 'contentful';\nimport { ASSEMBLY_DEFAULT_CATEGORY } from '@/constants';\n\nexport const getDataFromTree = (\n tree: ExperienceTree,\n): {\n dataSource: ExperienceDataSource;\n unboundValues: ExperienceUnboundValues;\n} => {\n let dataSource: ExperienceDataSource = {};\n let unboundValues: ExperienceUnboundValues = {};\n const queue = [...tree.root.children];\n\n while (queue.length) {\n const node = queue.shift();\n if (!node) {\n continue;\n }\n\n dataSource = { ...dataSource, ...node.data.dataSource };\n unboundValues = { ...unboundValues, ...node.data.unboundValues };\n\n if (node.children.length) {\n queue.push(...node.children);\n }\n }\n\n return {\n dataSource,\n unboundValues,\n };\n};\n\nexport const generateRandomId = (letterCount: number): string => {\n const LETTERS = 'abcdefghijklmnopqvwxyzABCDEFGHIJKLMNOPQVWXYZ';\n const NUMS = '0123456789';\n const ALNUM = NUMS + LETTERS;\n\n const times = (n: number, callback: () => string) => Array.from({ length: n }, callback);\n const random = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min;\n\n return times(letterCount, () => ALNUM[random(0, ALNUM.length - 1)]).join('');\n};\n\nexport const checkIsAssemblyNode = ({\n componentId,\n usedComponents,\n}: {\n componentId: string;\n usedComponents: ExperienceEntry['fields']['usedComponents'];\n}) => {\n if (!usedComponents?.length) return false;\n\n return usedComponents.some((usedComponent) => usedComponent.sys.id === componentId);\n};\n\n/**\n * This check assumes that the entry is already ensured to be an experience, i.e. the\n * content type of the entry is an experience type with the necessary annotations.\n **/\nexport const checkIsAssemblyEntry = (entry: Entry): boolean => {\n return Boolean(entry.fields?.componentSettings);\n};\n\nexport const checkIsAssemblyDefinition = (component?: ComponentDefinition) =>\n component?.category === ASSEMBLY_DEFAULT_CATEGORY;\n\ninterface ParsedValue {\n value: number;\n unit: 'px' | 'em' | 'rem';\n}\n\nexport function parseCSSValue(input: string): ParsedValue | null {\n const regex = /^(\\d+(\\.\\d+)?)(px|em|rem)$/;\n const match = input.match(regex);\n\n if (match) {\n return {\n value: parseFloat(match[1]),\n unit: match[3] as 'px' | 'em' | 'rem',\n };\n }\n\n return null;\n}\n\nexport function getTargetValueInPixels(targetWidthObject: ParsedValue) {\n switch (targetWidthObject.unit) {\n case 'px':\n return targetWidthObject.value;\n case 'em':\n return targetWidthObject.value * 16;\n case 'rem':\n return targetWidthObject.value * 16;\n default:\n return targetWidthObject.value;\n }\n}\n\n/**\n * Creates a component definition for an assembly. As all assemblies use the same definition in the SDK,\n * all should be registered via this function.\n */\nexport const createAssemblyDefinition = (definitionId: string): ComponentDefinition => {\n return {\n id: definitionId,\n name: 'Component',\n variables: {},\n children: true,\n category: ASSEMBLY_DEFAULT_CATEGORY,\n };\n};\n","/**\n * Turns a condition like `<768px` or `>1024px` into a media query rule.\n * For example, `<768px` becomes `max-width:768px` and `>1024px` becomes `min-width:1024px`.\n */\nconst toMediaQueryRule = (condition: string) => {\n const [evaluation, pixelValue] = [condition[0], condition.substring(1)];\n const mediaQueryRule = evaluation === '<' ? 'max-width' : 'min-width';\n return `(${mediaQueryRule}:${pixelValue})`;\n};\n\n/**\n * Converts a map of class names to CSS strings into a single CSS string.\n *\n * @param cssByClassName map of class names to CSS strings containing all rules for each class\n * @returns joined string of all CSS class definitions\n */\nconst toCompoundCss = (cssByClassName: Record<string, string>): string => {\n return Object.entries(cssByClassName).reduce<string>((acc, [className, css]) => {\n if (css === '') return acc;\n return `${acc}.${className}{${css}}`;\n }, ``);\n};\n\n/**\n * Create a single CSS string containing all class definitions for a given media query.\n *\n * @param cssByClassName map of class names to CSS strings containing all rules for each class\n * @param condition e.g. \"*\", \"<520px\", \">520px\"\n * @param nextCondition optional next condition to create a disjunct media query that doesn't affect the next breakpoint\n * @returns joined string of all CSS class definitions wrapped into media queries\n */\nexport const toMediaQuery = ({\n cssByClassName,\n condition,\n nextCondition,\n}: {\n cssByClassName: Record<string, string>;\n condition: string;\n nextCondition?: string;\n}) => {\n const compoundCss = toCompoundCss(cssByClassName);\n if (compoundCss === '') {\n return '';\n }\n\n const queryRule = toMediaQueryRule(condition);\n if (!nextCondition) {\n if (condition === '*') {\n return compoundCss;\n }\n return `@media${queryRule}{${compoundCss}}`;\n }\n\n const nextRule = toMediaQueryRule(nextCondition);\n if (condition === '*') {\n return `@media not ${nextRule}{${compoundCss}}`;\n }\n return `@media${queryRule} and (not ${nextRule}){${compoundCss}}`;\n};\n","export function getOptimizedImageUrl(\n url: string,\n width?: number,\n quality?: number,\n format?: string,\n) {\n if (url.startsWith('//')) {\n url = 'https:' + url;\n }\n\n const params = new URLSearchParams();\n if (width) {\n params.append('w', width.toString());\n }\n if (quality && quality > 0 && quality < 100) {\n params.append('q', quality.toString());\n }\n if (format) {\n params.append('fm', format);\n }\n\n const queryString = params.toString();\n return `${url}${queryString ? '?' + queryString : ''}`;\n}\n","import { SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport { AssetFile } from 'contentful';\n\nexport type ValidFormats = (typeof SUPPORTED_IMAGE_FORMATS)[number];\n\nexport interface AssetFileWithRequiredImage extends AssetFile {\n details: Required<AssetFile['details']>;\n}\n\nexport function validateParams(\n file: AssetFile,\n quality: number,\n format?: ValidFormats,\n): file is AssetFileWithRequiredImage {\n if (!file.details.image) {\n throw Error('No image in file asset to transform');\n }\n if (quality < 0 || quality > 100) {\n throw Error('Quality must be between 0 and 100');\n }\n if (format && !SUPPORTED_IMAGE_FORMATS.includes(format)) {\n throw Error(`Format must be one of ${SUPPORTED_IMAGE_FORMATS.join(', ')}`);\n }\n return true;\n}\n","import { OptimizedBackgroundImageAsset } from '@/types';\nimport { getOptimizedImageUrl } from './getOptimizedImageUrl';\nimport { AssetFile } from 'contentful';\nimport { ValidFormats, validateParams, AssetFileWithRequiredImage } from './mediaUtils';\n\nconst MAX_WIDTH_ALLOWED = 2000;\n\nexport const getOptimizedBackgroundImageAsset = (\n file: AssetFile,\n widthStyle: string,\n quality: string = '100%',\n format?: ValidFormats,\n): OptimizedBackgroundImageAsset => {\n const qualityNumber = Number(quality.replace('%', ''));\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n const url = file.url;\n\n const { width1x, width2x } = getWidths(widthStyle, file);\n\n const imageUrl1x = getOptimizedImageUrl(url, width1x, qualityNumber, format);\n const imageUrl2x = getOptimizedImageUrl(url, width2x, qualityNumber, format);\n\n const srcSet = [`url(${imageUrl1x}) 1x`, `url(${imageUrl2x}) 2x`];\n\n const returnedUrl = getOptimizedImageUrl(url, width2x, qualityNumber, format);\n\n const optimizedBackgroundImageAsset: OptimizedBackgroundImageAsset = {\n url: returnedUrl,\n srcSet,\n file,\n };\n\n return optimizedBackgroundImageAsset;\n\n function getWidths(widthStyle: string, file: AssetFileWithRequiredImage) {\n let width1x = 0;\n let width2x = 0;\n const intrinsicImageWidth = file.details.image.width;\n if (widthStyle.endsWith('px')) {\n width1x = Math.min(Number(widthStyle.replace('px', '')), intrinsicImageWidth);\n } else {\n width1x = Math.min(MAX_WIDTH_ALLOWED, intrinsicImageWidth);\n }\n width2x = Math.min(width1x * 2, intrinsicImageWidth);\n return { width1x, width2x };\n }\n};\n","import md5 from 'md5';\nimport { Asset, Entry, UnresolvedLink } from 'contentful/dist/types/types';\nimport {\n ComponentPropertyValue,\n DesignValue,\n ExperienceComponentSettings,\n ExperienceComponentTree,\n ExperienceDataSource,\n ExperienceUnboundValues,\n PrimitiveValue,\n} from '@contentful/experiences-validators';\nimport { buildCfStyles, stringifyCssProperties } from './stylesUtils';\n// import {\nimport { checkIsAssemblyNode, getTargetValueInPixels, parseCSSValue } from '@/utils/utils';\nimport { isValidBreakpointValue, mergeDesignValuesByBreakpoint } from '../breakpoints';\nimport { toMediaQuery } from './toMediaQuery';\nimport { transformVisibility } from './styleTransformers';\nimport { debug } from '@/utils/debugLogger';\nimport { builtInStyles, optionalBuiltInStyles } from '@/definitions';\nimport { designTokensRegistry } from '@/registries';\nimport {\n BackgroundImageOptions,\n ComponentTreeNode,\n DesignTokensDefinition,\n Experience,\n StyleProps,\n} from '@/types';\nimport { CF_STYLE_ATTRIBUTES, SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport { getOptimizedBackgroundImageAsset } from '@/utils/transformers/media/getOptimizedBackgroundImageAsset';\nimport { AssetDetails, AssetFile } from 'contentful';\n\ntype FlattenedDesignTokens = Record<\n string,\n string | { width?: string; style?: string; color?: string }\n>;\n\nexport const detachExperienceStyles = (experience: Experience): string | undefined => {\n const experienceTreeRoot = experience.entityStore?.experienceEntryFields\n ?.componentTree as ExperienceComponentTree;\n\n if (!experienceTreeRoot) {\n return;\n }\n\n const isRenderingAPatternEntry = experience.entityStore?.isExperienceAPatternEntry;\n\n const mapOfDesignVariableKeys = flattenDesignTokenRegistry(designTokensRegistry);\n\n // getting breakpoints from the entry componentTree field\n const { breakpoints } = experienceTreeRoot;\n\n // creating the structure which I thought would work best for aggregation\n const mediaQueryDataByBreakpoint = breakpoints.reduce(\n (mediaQueryTemplate, breakpoint) => ({\n ...mediaQueryTemplate,\n [breakpoint.id]: {\n condition: breakpoint.query,\n cssByClassName: {},\n visibilityCssByClassName: {},\n },\n }),\n {} as Record<\n string,\n {\n condition: string;\n cssByClassName: Record<string, string>;\n visibilityCssByClassName: Record<string, string>;\n }\n >,\n );\n\n // getting the breakpoint ids\n const breakpointIds = Object.keys(mediaQueryDataByBreakpoint);\n\n const iterateOverTreeAndExtractStyles = ({\n componentTree,\n dataSource,\n unboundValues,\n componentSettings,\n componentVariablesOverwrites,\n patternWrapper,\n wrappingPatternIds,\n wrappingPatternNodeIds = isRenderingAPatternEntry ? ['root'] : [],\n }: {\n componentTree: ExperienceComponentTree;\n dataSource: ExperienceDataSource;\n unboundValues: ExperienceUnboundValues;\n componentSettings?: ExperienceComponentSettings;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n patternWrapper?: ComponentTreeNode;\n wrappingPatternIds: Set<string>;\n wrappingPatternNodeIds?: string[];\n }) => {\n // traversing the tree\n const queue: ComponentTreeNode[] = [];\n\n queue.push(...componentTree.children);\n\n // for each tree node\n while (queue.length) {\n const currentNode = queue.shift();\n if (!currentNode) {\n break;\n }\n\n const usedComponents = experience.entityStore?.usedComponents ?? [];\n\n const isPatternNode = checkIsAssemblyNode({\n componentId: currentNode.definitionId,\n usedComponents,\n });\n\n if (isPatternNode) {\n // When detecting a circular dependency among patterns, stop to avoid an infinite loop\n if (wrappingPatternIds.has(currentNode.definitionId)) {\n continue;\n }\n\n const patternEntry = usedComponents.find(\n (component) => component.sys.id === currentNode!.definitionId,\n );\n\n if (!patternEntry || !('fields' in patternEntry)) {\n continue;\n }\n\n const nextComponentVariablesOverwrites = resolveComponentVariablesOverwrites({\n patternNode: currentNode,\n wrapperComponentVariablesOverwrites: componentVariablesOverwrites,\n wrapperComponentSettings: componentSettings,\n });\n\n // the node of a used pattern contains only the definitionId (id of the patter entry)\n // as well as the variables overwrites\n // the layout of a pattern is stored in it's entry\n iterateOverTreeAndExtractStyles({\n // that is why we pass it here to iterate of the pattern tree\n componentTree: patternEntry.fields.componentTree,\n // but we pass the data source of the experience entry cause that's where the binding is stored\n dataSource,\n // unbound values of a pattern store the default values of pattern variables\n unboundValues: patternEntry.fields.unboundValues,\n // this is where we can map the pattern variable to it's default value\n componentSettings: patternEntry.fields.componentSettings,\n // and this is where the over-writes for the default values are stored\n // yes, I know, it's a bit confusing\n componentVariablesOverwrites: nextComponentVariablesOverwrites,\n // pass top-level pattern node to store instance-specific child styles for rendering\n patternWrapper: currentNode,\n wrappingPatternIds: new Set([...wrappingPatternIds, currentNode.definitionId]),\n wrappingPatternNodeIds: [...wrappingPatternNodeIds, currentNode.id || ''],\n });\n continue;\n }\n\n /* [Data format] `currentNode.variables` uses the following serialized shape:\n * {\n * cfMargin: { type: 'DesignValue', valuesByBreakpoint: { desktop: '1px', tablet: '2px' } },\n * cfPadding: { type: 'DesignValue', valuesByBreakpoint: { desktop: '3px' } }\n * cfBackgroundImageUrl: { type: 'BoundValue', path: '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale' }\n * asdf1234: { type: 'ComponentValue', key: 'qwer567' }\n * // ...\n * }\n */\n\n // so first, I convert it into a map to help me make it easier to access the values\n const propsByBreakpoint = indexByBreakpoint({\n variables: currentNode.variables,\n breakpointIds,\n unboundValues: unboundValues,\n dataSource: dataSource,\n componentSettings,\n componentVariablesOverwrites,\n getBoundEntityById: (id: string) => {\n return experience.entityStore?.entities.find(\n (entity: Entry | Asset) => entity.sys.id === id,\n );\n },\n });\n\n // When the node is hidden for any breakpoint, we need to handle this separately with a disjunct media query.\n const isAnyVisibilityValueHidden = Object.values(propsByBreakpoint).some(\n (designProperties) => designProperties.cfVisibility === false,\n );\n // We always need an explicit value when using disjunct media queries\n // Example: desktop uses \"false\" and tablet is undefined -> we need to set `display: none` for tablet as well.\n let previousVisibilityValue: boolean | undefined = undefined;\n\n /* [Data format] `propsByBreakpoint` is a map of \"breakpointId > propertyName > plainValue\":\n * {\n * desktop: {\n * cfMargin: '1px',\n * cfWidth: '100%',\n * cfBackgroundImageUrl: 'https://example.com/image.jpg'\n * //...\n * }\n * }\n */\n\n const currentNodeClassNames: string[] = [];\n // Chain IDs to avoid overwriting styles across multiple instances of the same pattern\n // e.g. `{outerPatternNodeId}{innerPatternNodeId}-{currentNodeId}`\n // (!) Notice that the chain of patterns (before the dash) follows the format of prebinding/ parameters\n const currentNodeIdsChain = [...wrappingPatternNodeIds, currentNode.id].join('-');\n\n // For each breakpoint, resolve design tokens, create the CSS and generate a unique className.\n for (const breakpointId of breakpointIds) {\n const propsByBreakpointWithResolvedDesignTokens = Object.entries(\n propsByBreakpoint[breakpointId],\n ).reduce((acc, [variableName, variableValue]) => {\n return {\n ...acc,\n [variableName]: maybePopulateDesignTokenValue(\n variableName,\n variableValue,\n mapOfDesignVariableKeys,\n ),\n };\n }, {} as Partial<StyleProps>);\n\n // Convert CF-specific property names to CSS variables, e.g. `cfMargin` -> `margin`\n const cfStyles = buildCfStyles(propsByBreakpointWithResolvedDesignTokens);\n\n /* [Data format] `cfStyles` is a list of CSSProperties (React format):\n * {\n * margin: '1px',\n * width: '100%',\n * backgroundImage: 'url(https://example.com/image.jpg)'\n * //...\n * }\n */\n const generatedCss = stringifyCssProperties(cfStyles);\n\n if (!generatedCss && !isAnyVisibilityValueHidden) {\n // If there are no styles to apply, skip this breakpoint completely including the class name\n continue;\n }\n\n /* [Data format] `generatedCss` is the minimized CSS string that will be added to the DOM:\n * generatedCss = \"margin: 1px;width: 100%;...\"\n */\n\n // - Adding breakpointId to ensure not using the same IDs between breakpoints as this leads to\n // conflicts between different breakpoint values from multiple nodes where the hash would be equal\n // - Adding wrapping pattern nodes IDs to avoid conflicts between similar nested patterns as those\n // could override each others CSS for some breakpoints just through the order of `<style>` tags in the DOM.\n // - We're only considering the regular CSS (not the visibility-specific one) but that doesn't cause an issue\n // since we already use the breakpointId (which is not used in CSR, see createStylesheetsForBuiltInStyles).\n // Theoretically, we could drop `generatedCss` from the hash generation and still be safe from conflicts (unless\n // the node IDs are similar but visibility is different?)\n const styleHash = md5(currentNodeIdsChain + breakpointId + generatedCss);\n\n // and prefix the className to make sure the value can be processed\n const className = `cf-${styleHash}`;\n\n // I save the generated hashes into an array to later save it in the tree node\n // as cfSsrClassName prop\n // making sure to avoid the duplicates in case styles for > 1 breakpoints are the same\n if (!currentNodeClassNames.includes(className)) {\n currentNodeClassNames.push(className);\n }\n\n // Only if the hash was not used yet, save the CSS to the stylesheet\n if (!mediaQueryDataByBreakpoint[breakpointId].cssByClassName[className]) {\n mediaQueryDataByBreakpoint[breakpointId].cssByClassName[className] = generatedCss;\n }\n\n // Special case for visibility to override any custom `display` values but only for a specific breakpoint.\n if (isAnyVisibilityValueHidden) {\n const visibilityValue =\n propsByBreakpointWithResolvedDesignTokens.cfVisibility ?? previousVisibilityValue;\n previousVisibilityValue = visibilityValue;\n const visibilityStyles = transformVisibility(visibilityValue);\n const visibilityCss = stringifyCssProperties(visibilityStyles);\n if (!mediaQueryDataByBreakpoint[breakpointId].visibilityCssByClassName[className]) {\n mediaQueryDataByBreakpoint[breakpointId].visibilityCssByClassName[className] =\n visibilityCss;\n }\n }\n }\n\n // all generated classNames are saved in the tree node\n // to be handled by the sdk later\n // each node will get N classNames, where N is the number of breakpoints\n // browsers process classNames in the order they are defined\n // meaning that in case of className1 className2 className3\n // className3 will win over className2 and className1\n // making sure that we respect the order of breakpoints from\n // we can achieve \"desktop first\" or \"mobile first\" approach to style over-writes\n if (patternWrapper) {\n // @ts-expect-error -- valueByBreakpoint is not explicitly defined, but it's already defined in the patternWrapper styles\n patternWrapper.variables.cfSsrClassName = {\n ...(patternWrapper.variables.cfSsrClassName ?? {}),\n type: 'DesignValue',\n [currentNodeIdsChain]: {\n valuesByBreakpoint: {\n [breakpointIds[0]]: currentNodeClassNames.join(' '),\n },\n },\n };\n } else {\n currentNode.variables.cfSsrClassName = {\n type: 'DesignValue',\n valuesByBreakpoint: {\n [breakpointIds[0]]: currentNodeClassNames.join(' '),\n },\n };\n }\n\n queue.push(...currentNode.children);\n }\n };\n\n iterateOverTreeAndExtractStyles({\n componentTree: experienceTreeRoot,\n dataSource: experience.entityStore?.dataSource ?? {},\n unboundValues: experience.entityStore?.unboundValues ?? {},\n componentSettings: experience.entityStore?.experienceEntryFields?.componentSettings,\n wrappingPatternIds: new Set(\n experience.entityStore?.experienceEntryId ? [experience.entityStore.experienceEntryId] : [],\n ),\n });\n\n // once the whole tree was traversed, for each breakpoint, I aggregate the styles\n // for each generated className into one css string\n return Object.values(mediaQueryDataByBreakpoint).reduce(\n (acc, { condition, cssByClassName, visibilityCssByClassName }, index) => {\n const mediaQueryCss = toMediaQuery({ cssByClassName, condition });\n\n // Handle visibility separately to use disjunct media queries (\"if desktop but not tablet ...\")\n // Enables to hide on one breakpoint but render any unknown custom `display` value on another breakpoint.\n const visibilityMediaQueryCss = toMediaQuery({\n cssByClassName: visibilityCssByClassName,\n condition,\n // Breakpoint validation ensures that it starts with the '*' breakpoint\n nextCondition: Object.values(mediaQueryDataByBreakpoint)[index + 1]?.condition,\n });\n\n return `${acc}${mediaQueryCss}${visibilityMediaQueryCss}`;\n },\n '',\n );\n};\n\n/**\n * Rendering pattern nodes inside pattern entry by injecting default values from the top:\n * When there is a ComponentValue but the recursive logic is not wrapped by a pattern node (no `componentVariablesOverwrites`),\n * a pattern entry is rendered directly. In this case, we replace each ComponentValue with the default value from componentSettings.\n */\nconst injectDefaultValuesForComponentValues = ({\n patternNode,\n wrapperComponentSettings,\n}: {\n patternNode: ComponentTreeNode;\n wrapperComponentSettings?: ExperienceComponentSettings;\n}): Record<string, ComponentPropertyValue> => {\n const propertyDefinitions = wrapperComponentSettings?.variableDefinitions;\n return Object.entries(patternNode.variables).reduce(\n (resolvedProperties, [propertyName, propertyValue]) => {\n if (propertyValue.type === 'ComponentValue') {\n const componentValueKey = propertyValue.key;\n const componentDefaultValue = propertyDefinitions?.[componentValueKey].defaultValue;\n // We're only considering design properties for styles generation\n if ((componentDefaultValue as DesignValue)?.type === 'DesignValue') {\n resolvedProperties[propertyName] = componentDefaultValue;\n }\n } else {\n // Do nothing when it's not a ComponentValue & just keep the defined value\n resolvedProperties[propertyName] = propertyValue;\n }\n return resolvedProperties;\n },\n {},\n );\n};\n\n/**\n * In case of nested patterns, we need to resolve the ComponentValue properties and overwrite them with the value\n * stored in the parent component.\n *\n *\n * @param patternNode - pattern node which contains the variables\n * @param componentVariablesOverwrites - object which contains the variables of the parent component\n */\nconst resolveComponentVariablesOverwrites = ({\n patternNode,\n wrapperComponentVariablesOverwrites,\n wrapperComponentSettings,\n}: {\n patternNode: ComponentTreeNode;\n wrapperComponentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n wrapperComponentSettings?: ExperienceComponentSettings;\n}): Record<string, ComponentPropertyValue> => {\n // In case of rendering a pattern entry, there are no custom ComponentValues.\n // So we pass down the default values from this pattern node down to each deeper pattern level.\n if (!wrapperComponentVariablesOverwrites) {\n return injectDefaultValuesForComponentValues({\n patternNode,\n wrapperComponentSettings,\n });\n }\n\n // Rendering (nested) pattern node inside another pattern node (for both experience & pattern entry):\n // The `wrapperComponentVariablesOverwrites` from the top-most pattern node is passed through to each child\n // node (and nested pattern nodes). It replaces each ComponentValue in the subtree with either the overwrite\n // or the default value.\n return Object.entries(patternNode?.variables).reduce(\n (resolvedValues, [propertyName, propertyValue]) => {\n if (propertyValue.type === 'ComponentValue') {\n // Copying the values from the parent node\n const overwritingValue = wrapperComponentVariablesOverwrites?.[propertyValue.key];\n // Property definition from the parent pattern\n const propertyDefinition =\n wrapperComponentSettings?.variableDefinitions?.[propertyValue.key];\n const defaultValue = propertyDefinition?.defaultValue as ComponentPropertyValue | undefined;\n // The overwriting value is either a custom value from the experience or default value from a\n // wrapping pattern node that got trickled down to this nesting level.\n resolvedValues[propertyName] = mergeDefaultAndOverwriteValues(\n defaultValue,\n overwritingValue,\n );\n } else {\n // Keep raw values\n resolvedValues[propertyName] = propertyValue;\n }\n return resolvedValues;\n },\n {},\n );\n};\n\nexport const isCfStyleAttribute = (variableName: string): variableName is keyof StyleProps => {\n return CF_STYLE_ATTRIBUTES.includes(variableName);\n};\n\nexport const maybePopulateDesignTokenValue = (\n variableName: string,\n variableValue: unknown,\n mapOfDesignVariableKeys: FlattenedDesignTokens,\n) => {\n // TODO: refactor to reuse fn from core package\n if (typeof variableValue !== 'string') {\n return variableValue;\n }\n\n if (!isCfStyleAttribute(variableName)) {\n return variableValue;\n }\n\n // matches ${...} and captures the content between ${ and }\n // ${color.Blue}, ${spacing.Sizes.Large} or ${border.Text Heading.Small}\n const templateStringRegex = /\\$\\{(\\w[^}]*)}/g;\n\n const result = variableValue\n .replace(templateStringRegex, (_: string, rawKey: string): string => {\n const value = mapOfDesignVariableKeys[rawKey];\n\n if (!value) {\n if (builtInStyles[variableName]?.defaultValue) {\n return String(builtInStyles[variableName]!.defaultValue);\n }\n if (optionalBuiltInStyles[variableName]?.defaultValue) {\n return String(optionalBuiltInStyles[variableName]!.defaultValue);\n }\n\n return '0px';\n }\n if (variableName === 'cfBorder' || variableName.startsWith('cfBorder_')) {\n if (typeof value === 'object') {\n const { width, style, color } = value;\n return `${width} ${style} ${color}`;\n }\n }\n return String(value);\n })\n // Replace all multiple spaces with a single space\n .replace(/ +/g, ' ');\n return result;\n};\n\nconst transformMedia = (boundAsset: Asset, width?: string, options?: BackgroundImageOptions) => {\n try {\n const asset = boundAsset as Asset;\n // Target width (px/rem/em) will be applied to the css url if it's lower than the original image width (in px)\n const assetDetails = asset.fields.file?.details as AssetDetails;\n\n const assetWidth = assetDetails?.image?.width || 0; // This is always in px\n if (!options) {\n return asset.fields.file?.url as string;\n }\n const targetWidthObject = parseCSSValue(options.targetSize); // Contains value and unit (px/rem/em) so convert and then compare to assetWidth\n const targetValue = targetWidthObject ? getTargetValueInPixels(targetWidthObject) : assetWidth;\n\n if (targetValue < assetWidth) width = `${targetValue}px`;\n return getOptimizedBackgroundImageAsset(\n asset.fields.file as AssetFile,\n width as string,\n options.quality,\n options.format as (typeof SUPPORTED_IMAGE_FORMATS)[number],\n );\n } catch (error) {\n debug.error('[experiences-core::ssrStyles] Error transforming image asset', error);\n }\n return boundAsset.fields.file?.url as string;\n};\n\nexport const resolveBackgroundImageBinding = ({\n variableData,\n getBoundEntityById,\n dataSource = {},\n unboundValues = {},\n componentVariablesOverwrites,\n componentSettings = { variableDefinitions: {} },\n options,\n width,\n}: {\n variableData: ComponentPropertyValue;\n getBoundEntityById: (id: string) => Entry | Asset | undefined;\n unboundValues?: ExperienceUnboundValues;\n dataSource?: ExperienceDataSource;\n componentSettings?: ExperienceComponentSettings;\n // patternNode.variables - a place which contains bindings scoped to the pattern\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n options?: BackgroundImageOptions;\n width?: string;\n}) => {\n if (variableData.type === 'UnboundValue') {\n const uuid = variableData.key;\n return unboundValues[uuid]?.value as string;\n }\n\n if (variableData.type === 'ComponentValue') {\n const variableDefinitionKey = variableData.key;\n const variableDefinition = componentSettings.variableDefinitions[variableDefinitionKey];\n\n // @ts-expect-error TODO: Types coming from validations erroneously assume that `defaultValue` can be a primitive value (e.g. string or number)\n const defaultValueKey = variableDefinition.defaultValue?.key;\n const defaultValue = unboundValues[defaultValueKey].value;\n\n const overwriteValue = componentVariablesOverwrites?.[variableDefinitionKey];\n\n // overwriteValue is a ComponentValue we can safely return the default value\n if (!overwriteValue || overwriteValue.type === 'ComponentValue') {\n return defaultValue as string | undefined;\n }\n\n // at this point overwriteValue will either be type of 'DesignValue' or 'BoundValue'\n // so we recursively run resolution again to resolve it\n const resolvedValue = resolveBackgroundImageBinding({\n variableData: overwriteValue,\n getBoundEntityById,\n dataSource,\n unboundValues,\n componentVariablesOverwrites,\n componentSettings,\n options,\n width,\n });\n\n return resolvedValue || (defaultValue as string | undefined);\n }\n\n if (variableData.type === 'BoundValue') {\n // '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale'\n const [, uuid] = variableData.path.split('/');\n const binding = dataSource[uuid] as UnresolvedLink<'Entry' | 'Asset'> | undefined;\n // Safeguard against edge cases - we should not have bound style values that do not have a data source entry.\n // However, just in case, we handle it here as empty and allow the user to replace without errors.\n if (!binding) {\n return;\n }\n\n const boundEntity = getBoundEntityById(binding.sys.id);\n if (!boundEntity) {\n return;\n }\n\n if (boundEntity.sys.type === 'Asset') {\n return transformMedia(boundEntity as Asset, width, options);\n } else {\n // '/lUERH7tX7nJTaPX6f0udB/fields/assetReference/~locale/fields/file/~locale'\n // becomes\n // '/fields/assetReference/~locale/fields/file/~locale'\n const pathWithoutUUID = variableData.path.split(uuid)[1];\n // '/fields/assetReference/~locale/fields/file/~locale'\n // becomes\n // '/fields/assetReference/'\n const pathToReferencedAsset: string = pathWithoutUUID.split('~locale')[0];\n // '/fields/assetReference/'\n // becomes\n // '[fields, assetReference]'\n const [, fieldName] = pathToReferencedAsset.substring(1).split('/') ?? undefined;\n\n const referenceToAsset = (boundEntity as Entry).fields[fieldName] as\n | UnresolvedLink<'Asset'>\n | undefined;\n\n if (!referenceToAsset) {\n return;\n }\n\n if (referenceToAsset.sys?.linkType === 'Asset') {\n const referencedAsset = getBoundEntityById(referenceToAsset.sys.id) as Asset | undefined;\n if (!referencedAsset) {\n return;\n }\n\n return transformMedia(referencedAsset as Asset, width, options);\n }\n }\n }\n};\n\nconst resolveVariable = ({\n variableData,\n defaultBreakpoint,\n componentSettings = { variableDefinitions: {} },\n componentVariablesOverwrites,\n}: {\n variableData: ComponentPropertyValue;\n defaultBreakpoint: string;\n componentSettings?: ExperienceComponentSettings;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n}) => {\n if (variableData?.type === 'DesignValue') {\n return variableData.valuesByBreakpoint[defaultBreakpoint] || {};\n } else if (variableData?.type === 'ComponentValue') {\n const variableDefinitionKey = variableData.key;\n const variableDefinition = componentSettings.variableDefinitions[variableDefinitionKey];\n const defaultValue = variableDefinition.defaultValue;\n const userSetValue = componentVariablesOverwrites?.[variableDefinitionKey];\n if (!userSetValue || userSetValue.type === 'ComponentValue') {\n return (defaultValue as DesignValue)?.valuesByBreakpoint[defaultBreakpoint] || '';\n }\n return resolveVariable({\n variableData: userSetValue,\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n });\n }\n};\n\n/**\n * Takes the initial set of properties, filters only design properties that will be mapped to CSS and\n * re-organizes them to be indexed by breakpoint ID (\"breakpoint > variable > value\"). It will\n * also resolve the design/ component values to plain values.\n *\n * **Example Input**\n * ```\n * variables = {\n * cfMargin: { type: 'DesignValue', valuesByBreakpoint: { desktop: '1px', tablet: '2px' } },\n * cfPadding: { type: 'DesignValue', valuesByBreakpoint: { desktop: '3px', mobile: '4px' } }\n * }\n * ```\n *\n * **Example Output**\n * ```\n * variableValuesByBreakpoints = {\n * desktop: {\n * cfMargin: '1px',\n * cfPadding: '3px'\n * },\n * tablet: {\n * cfMargin: '2px'\n * },\n * mobile: {\n * cfPadding: '4px'\n * }\n * }\n * ```\n *\n * **Note**\n * - The property cfBackgroundImageUrl is the only content property that gets mapped to CSS as well.\n * It will be solely stored on the default breakpoint.\n * - For ComponentValues, it will either take the override from the pattern instance or fallback to\n * the defaultValue defined in variableDefinitions.\n */\nexport const indexByBreakpoint = ({\n variables,\n breakpointIds,\n getBoundEntityById,\n unboundValues = {},\n dataSource = {},\n componentVariablesOverwrites,\n componentSettings = { variableDefinitions: {} },\n}: {\n variables: Record<string, ComponentPropertyValue>;\n breakpointIds: string[];\n getBoundEntityById: (id: string) => Entry | Asset | undefined;\n unboundValues?: ExperienceUnboundValues;\n dataSource?: ExperienceDataSource;\n componentVariablesOverwrites?: Record<string, ComponentPropertyValue>;\n componentSettings?: ExperienceComponentSettings;\n}) => {\n const variableValuesByBreakpoints = breakpointIds.reduce<\n Record<string, Record<string, Exclude<PrimitiveValue, undefined>>>\n >((acc, breakpointId) => {\n return {\n ...acc,\n [breakpointId]: {},\n };\n }, {});\n\n const defaultBreakpoint = breakpointIds[0];\n\n for (const [variableName, variableData] of Object.entries(variables)) {\n // handling the special case - cfBackgroundImageUrl variable, which can be bound or unbound\n // so, we need to resolve it here and pass it down as a css property to be converted into the CSS\n\n // I used .startsWith() cause it can be part of a pattern node\n if (\n variableName === 'cfBackgroundImageUrl' ||\n // TODO: Test this for nested patterns as the name might be just a random hash without the actual name (needs to be validated).\n variableName.startsWith('cfBackgroundImageUrl_')\n ) {\n const width = resolveVariable({\n variableData: variables['cfWidth'],\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n }) as string;\n\n const options = resolveVariable({\n variableData: variables['cfBackgroundImageOptions'],\n defaultBreakpoint,\n componentSettings,\n componentVariablesOverwrites,\n }) as BackgroundImageOptions;\n\n if (!options) {\n debug.error(\n '[experiences-core::ssrStyles] Error transforming image asset: Required variable [cfBackgroundImageOptions] missing from component definition',\n );\n continue;\n }\n\n const imageUrl = resolveBackgroundImageBinding({\n variableData,\n getBoundEntityById,\n unboundValues,\n dataSource,\n componentSettings,\n componentVariablesOverwrites,\n width,\n options,\n });\n\n if (imageUrl) {\n variableValuesByBreakpoints[defaultBreakpoint][variableName] = imageUrl;\n }\n\n continue;\n }\n\n let resolvedVariableData = variableData;\n\n if (variableData.type === 'ComponentValue') {\n const variableDefinition = componentSettings?.variableDefinitions[variableData.key];\n const defaultValue = variableDefinition.defaultValue as ComponentPropertyValue;\n if (variableDefinition.group === 'style' && defaultValue !== undefined) {\n const overwriteVariableData = componentVariablesOverwrites?.[variableData.key];\n resolvedVariableData = mergeDefaultAndOverwriteValues(defaultValue, overwriteVariableData);\n }\n }\n\n if (resolvedVariableData.type !== 'DesignValue') {\n continue;\n }\n\n for (const [breakpointId, variableValue] of Object.entries(\n resolvedVariableData.valuesByBreakpoint,\n )) {\n if (!isValidBreakpointValue(variableValue)) {\n continue;\n }\n\n variableValuesByBreakpoints[breakpointId] = {\n ...variableValuesByBreakpoints[breakpointId],\n [variableName]: variableValue,\n };\n }\n }\n\n return variableValuesByBreakpoints;\n};\n\n/**\n * Flattens the object from\n * `{ color: { [key]: [value] } }`\n * to\n * `{ 'color.key': [value] }`\n */\nexport const flattenDesignTokenRegistry = (\n designTokenRegistry: DesignTokensDefinition,\n): FlattenedDesignTokens => {\n const flattenObject = (obj: object, prefix = ''): FlattenedDesignTokens => {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n // handle border types\n !(typeof value === 'object' && ('width' in value || 'style' in value || 'color' in value))\n ) {\n // Recursively flatten nested objects, but skip objects that look like border definitions\n return {\n ...acc,\n ...flattenObject(value, newKey),\n };\n } else {\n // This is a leaf value (string, number, or border object)\n return {\n ...acc,\n [newKey]: value,\n };\n }\n }, {});\n };\n\n return flattenObject(designTokenRegistry);\n};\n\nfunction mergeDefaultAndOverwriteValues(\n defaultValue: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue;\nfunction mergeDefaultAndOverwriteValues(\n defaultValue?: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue | undefined;\nfunction mergeDefaultAndOverwriteValues(\n defaultValue?: ComponentPropertyValue,\n overwriteValue?: ComponentPropertyValue,\n): ComponentPropertyValue | undefined {\n if (defaultValue?.type === 'DesignValue' && overwriteValue?.type === 'DesignValue') {\n return mergeDesignValuesByBreakpoint(defaultValue, overwriteValue);\n }\n return overwriteValue ?? defaultValue;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function get<T>(obj: Record<string, any>, path: string[]): T | undefined {\n if (!path.length) {\n return obj as T;\n }\n\n try {\n const [currentPath, ...nextPath] = path;\n return get(obj[currentPath], nextPath);\n } catch (err) {\n return undefined;\n }\n}\n","import { PrimitiveValue } from '@/types';\nimport { Asset, AssetFile, Entry } from 'contentful';\nimport { get } from '../get';\n\nexport const getBoundValue = (entryOrAsset: Entry | Asset, path: string): PrimitiveValue => {\n const value = get<string>(entryOrAsset, path.split('/').slice(2, -1));\n return value && typeof value == 'object' && (value as AssetFile).url\n ? (value as AssetFile).url\n : (value as string | undefined);\n};\n","import {\n BLOCKS,\n Document as RichTextDocument,\n Block,\n Inline,\n Text,\n} from '@contentful/rich-text-types';\nimport { getBoundValue } from './getBoundValue';\nimport { Asset, Entry } from 'contentful';\nimport { EntityStoreBase } from '@/entity';\nimport cloneDeep from 'lodash.clonedeep';\n\nexport const transformRichText = (\n entryOrAsset: Entry | Asset,\n entityStore: EntityStoreBase,\n path,\n): RichTextDocument | undefined => {\n const value = getBoundValue(entryOrAsset, path);\n if (typeof value === 'string') {\n return {\n data: {},\n content: [\n {\n nodeType: BLOCKS.PARAGRAPH,\n data: {},\n content: [\n {\n data: {},\n nodeType: 'text',\n value: value,\n marks: [],\n },\n ],\n },\n ],\n nodeType: BLOCKS.DOCUMENT,\n };\n }\n if (typeof value === 'object' && value.nodeType === BLOCKS.DOCUMENT) {\n // resolve any links to assets/entries/hyperlinks\n // we need to clone, as we want to keep the original Entity in the EntityStore intact,\n // and resolveLinks() is mutating the node object.\n const richTextDocument = cloneDeep(value) as RichTextDocument;\n resolveLinks(richTextDocument, entityStore);\n return richTextDocument;\n }\n return undefined;\n};\n\ntype Node = Block | Inline | Text;\n\nconst isLinkTarget = (node: Node): boolean => {\n return node?.data?.target?.sys?.type === 'Link';\n};\n\nconst resolveLinks = (node: Node, entityStore: EntityStoreBase): void => {\n if (!node) return;\n\n // Resolve link if current node has one\n if (isLinkTarget(node)) {\n const entity = entityStore.getEntityFromLink(node.data.target);\n if (entity) {\n node.data.target = entity;\n }\n }\n\n // Process content array if it exists\n if ('content' in node && Array.isArray(node.content)) {\n node.content.forEach((childNode) => resolveLinks(childNode, entityStore));\n }\n};\n","import { ImageLoadingOption, OptimizedImageAsset } from '@/types';\nimport { AssetFile } from 'contentful';\nimport { getOptimizedImageUrl } from './getOptimizedImageUrl';\nimport { ValidFormats, validateParams } from './mediaUtils';\n\nconst MAX_WIDTH_ALLOWED = 4000;\n\ntype GetOptimizedImageAssetProps = {\n file: AssetFile;\n sizes?: string;\n loading?: ImageLoadingOption;\n quality?: string;\n format?: ValidFormats;\n};\n\nexport const getOptimizedImageAsset = ({\n file,\n sizes,\n loading,\n quality = '100%',\n format,\n}: GetOptimizedImageAssetProps): OptimizedImageAsset => {\n const qualityNumber = Number(quality.replace('%', ''));\n if (!validateParams(file, qualityNumber, format)) {\n throw Error('Invalid parameters');\n }\n const url = file.url;\n const maxWidth = Math.min(file.details.image.width, MAX_WIDTH_ALLOWED);\n const numOfParts = Math.max(2, Math.ceil(maxWidth / 500));\n const widthParts = Array.from({ length: numOfParts }, (_, index) =>\n Math.ceil((index + 1) * (maxWidth / numOfParts)),\n );\n const srcSet = sizes\n ? widthParts.map(\n (width) => `${getOptimizedImageUrl(url, width, qualityNumber, format)} ${width}w`,\n )\n : [];\n\n const intrinsicImageWidth = file.details.image.width;\n\n if (intrinsicImageWidth > MAX_WIDTH_ALLOWED) {\n srcSet.push(\n `${getOptimizedImageUrl(url, undefined, qualityNumber, format)} ${intrinsicImageWidth}w`,\n );\n }\n\n const returnedUrl = getOptimizedImageUrl(\n url,\n file.details.image.width > 2000 ? 2000 : undefined,\n qualityNumber,\n format,\n );\n\n const optimizedImageAsset: OptimizedImageAsset = {\n url: returnedUrl,\n srcSet,\n sizes,\n file,\n loading,\n };\n\n return optimizedImageAsset;\n};\n","import { SUPPORTED_IMAGE_FORMATS } from '@/constants';\nimport {\n BackgroundImageOptions,\n BoundComponentPropertyTypes,\n ComponentTreeNode,\n ImageOptions,\n ResolveDesignValueType,\n} from '@/types';\nimport { Asset, AssetDetails, AssetFile } from 'contentful';\nimport { getOptimizedBackgroundImageAsset } from './getOptimizedBackgroundImageAsset';\nimport { getOptimizedImageAsset } from './getOptimizedImageAsset';\nimport { getBoundValue } from '../getBoundValue';\nimport { debug } from '@/utils/debugLogger';\nimport { getTargetValueInPixels, parseCSSValue } from '@/utils/utils';\nimport { isDeepPath, lastPathNamedSegmentEq } from '@/utils/pathSchema';\nimport { ValidFormats } from './mediaUtils';\n\nexport const transformMedia = (\n asset: Asset,\n variables: ComponentTreeNode['variables'],\n resolveDesignValue: ResolveDesignValueType,\n variableName: string,\n path: string,\n) => {\n let value: BoundComponentPropertyTypes;\n // If it is not a deep path and not pointing to the file of the asset,\n // it is just pointing to a normal field and therefore we just resolve the value as normal field\n if (!isDeepPath(path) && !lastPathNamedSegmentEq(path, 'file')) {\n return getBoundValue(asset, path);\n }\n\n //TODO: this will be better served by injectable type transformers instead of if statement\n if (variableName === 'cfImageAsset') {\n const optionsVariableName = 'cfImageOptions';\n const options = resolveDesignValue(\n variables[optionsVariableName]?.type === 'DesignValue'\n ? variables[optionsVariableName].valuesByBreakpoint\n : {},\n ) as ImageOptions | undefined;\n if (!options) {\n debug.error(\n `[experiences-core::transformMedia] Error transforming image asset: Required variable [${optionsVariableName}] missing from component definition`,\n );\n return;\n }\n try {\n value = getOptimizedImageAsset({\n file: asset.fields.file as AssetFile,\n loading: options.loading,\n sizes: options.targetSize as string,\n quality: options.quality,\n format: options.format as ValidFormats,\n });\n return value;\n } catch (error) {\n debug.error('[experiences-core::transformMedia] Error transforming image asset', error);\n }\n return;\n }\n\n if (variableName === 'cfBackgroundImageUrl') {\n let width =\n resolveDesignValue(\n variables['cfWidth']?.type === 'DesignValue' ? variables['cfWidth'].valuesByBreakpoint : {},\n 'cfWidth',\n ) || '100%';\n const optionsVariableName = 'cfBackgroundImageOptions';\n const options = resolveDesignValue(\n variables[optionsVariableName]?.type === 'DesignValue'\n ? variables[optionsVariableName].valuesByBreakpoint\n : {},\n ) as BackgroundImageOptions | undefined;\n if (!options) {\n debug.error(\n `[experiences-core::transformMedia] Error transforming image asset: Required variable [${optionsVariableName}] missing from component definition`,\n );\n return;\n }\n try {\n // Target width (px/rem/em) will be applied to the css url if it's lower than the original image width (in px)\n const assetDetails = asset.fields.file?.details as AssetDetails;\n\n const assetWidth = assetDetails?.image?.width || 0; // This is always in px\n const targetWidthObject = parseCSSValue(options.targetSize); // Contains value and unit (px/rem/em) so convert and then compare to assetWidth\n const targetValue = targetWidthObject\n ? getTargetValueInPixels(targetWidthObject)\n : assetWidth;\n\n if (targetValue < assetWidth) width = `${targetValue}px`;\n value = getOptimizedBackgroundImageAsset(\n asset.fields.file as AssetFile,\n width as string,\n options.quality,\n options.format as (typeof SUPPORTED_IMAGE_FORMATS)[number],\n );\n return value;\n } catch (error) {\n debug.error('[experiences-core::transformMedia] Error transforming image asset', error);\n }\n return;\n }\n\n return asset.fields.file?.url;\n};\n","import type { ExperienceEntry } from '@/types';\nimport type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { isLink } from './isLink';\n\nexport const isExperienceEntry = (entry: ExperienceEntry | Entry): entry is ExperienceEntry => {\n return (\n entry?.sys?.type === 'Entry' &&\n !!entry.fields?.title &&\n !!entry.fields?.slug &&\n !!entry.fields?.componentTree &&\n Array.isArray((entry as ExperienceEntry).fields.componentTree.breakpoints) &&\n Array.isArray((entry as ExperienceEntry).fields.componentTree.children) &&\n typeof (entry as ExperienceEntry).fields.componentTree.schemaVersion === 'string'\n );\n};\n\nexport const isPatternEntry = (entry: Entry | ExperienceEntry): entry is ExperienceEntry => {\n return isExperienceEntry(entry) && !!entry.fields?.componentSettings; // signals that this is pattern (not experience) entry\n};\n\nexport const isEntry = (value: unknown): value is Entry => {\n return (\n null !== value &&\n typeof value === 'object' &&\n 'sys' in value &&\n (value as Entry).sys?.type === 'Entry'\n );\n};\n\nexport const isAsset = (value: unknown): value is Asset => {\n return (\n null !== value &&\n typeof value === 'object' &&\n 'sys' in value &&\n (value as Asset).sys?.type === 'Asset'\n );\n};\n\n/**\n * Checks if the values is an array of links.\n * Note: we use convention where empty arrays are considered valid \"arrays of links\"\n * as they don't contradict the type definition.\n */\nexport const isArrayOfLinks = (\n value: unknown,\n): value is Array<UnresolvedLink<'Asset'> | UnresolvedLink<'Entry'>> => {\n return Array.isArray(value) && value.every((item) => isLink(item));\n};\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { get } from '../get';\nimport { EntityStoreBase } from '@/entity';\nimport { isAsset, isEntry } from '../typeguards';\nimport { debug } from '../debugLogger';\n\nexport function getResolvedEntryFromLink(\n entryOrAsset: Entry | Asset,\n path: string,\n entityStore: EntityStoreBase,\n) {\n if (isAsset(entryOrAsset)) {\n return entryOrAsset;\n } else if (!isEntry(entryOrAsset)) {\n throw new Error(`Expected an Entry or Asset, but got: ${JSON.stringify(entryOrAsset)}`);\n }\n\n const fieldName = path.split('/').slice(2, -1);\n const value = get<UnresolvedLink<'Entry'> | Entry | Asset>(entryOrAsset, fieldName);\n\n let resolvedEntity: Entry | Asset | undefined;\n\n if (isAsset(value) || isEntry(value)) {\n // In some cases, reference fields are already resolved\n resolvedEntity = value;\n } else if (value?.sys.type === 'Link') {\n // Look up the reference in the entity store\n resolvedEntity = entityStore.getEntityFromLink(value);\n } else {\n debug.warn(\n `[experiences-core::getResolvedEntryFromLink] When attempting to follow link in field '${fieldName}' of entity, the value is expected to be a link, but got: ${JSON.stringify(value)}`,\n { entity: entryOrAsset },\n );\n return;\n }\n\n // no need to make structuredClone(entityStore.getEntityFromLink(value)) because\n // we provide component with the original Object.frozen object of the entity.\n // As we don't resolve L3 and don't mutate the entity before returning anymore,\n // we don't need to make a copy of the entity. And even provide better referential integrity\n // for the component for the same entity.\n if (!resolvedEntity) {\n return;\n }\n\n return resolvedEntity;\n}\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { get } from '../get';\nimport { EntityStoreBase } from '@/entity';\nimport { debug } from '../debugLogger';\n\nconst excludeUndefined = <T>(value: T | undefined): value is T => {\n return value !== undefined;\n};\n\nexport function getArrayValue(\n entryOrAsset: Entry | Asset,\n path: string,\n entityStore: EntityStoreBase,\n) {\n // NOTE: Not sure if we need this if-statement,\n // as it is NOT possible to bind to Array variable an Asset\n // (as Assets don't have multi-reference fields) unless it's a degenerate case.\n if (entryOrAsset.sys.type === 'Asset') {\n return entryOrAsset;\n }\n\n const fieldName = path.split('/').slice(2, -1);\n const arrayValue = get<Array<string | UnresolvedLink<'Entry' | 'Asset'>>>(\n entryOrAsset,\n fieldName,\n );\n\n if (!Array.isArray(arrayValue)) {\n debug.warn(\n `[experiences-core::getArrayValue] A field '${fieldName}' of an entity was bound to an Array variable. Expected value of that field to be an array, but got: ${JSON.stringify(arrayValue)}`,\n { entity: entryOrAsset },\n );\n return;\n }\n\n const result = arrayValue\n .map((value) => {\n if (typeof value === 'string') {\n return value; // handles case where Text array is bound (in [Content Model] tab of the platform, select Text and make it a list)\n } else if (value?.sys?.type === 'Link') {\n const resolvedEntity = entityStore.getEntityFromLink(value);\n if (!resolvedEntity) {\n // We return undefined, which means that entity wasn't availble in the Entity Store due to:\n // - because it's archived entity (and they normally wouldn't be sent to the Entity Store)\n // - bug where some entity wasn't added to the Entity Store\n // BTW, deleted entities shouldn't even be possible here as they require CT deletion first and that shouldn't allow us to load them at all)\n return;\n }\n return resolvedEntity;\n } else {\n debug.warn(\n `[experiences-core::getArrayValue] Expected value to be a string or Link, but got: ${JSON.stringify(value)}`,\n );\n return undefined;\n }\n })\n .filter(excludeUndefined);\n\n // eg. imagine you have multi-referene field with 3 links to archived entries,\n // all of them will be undefined on previous step and will be filtered out\n // of resultWithoutUndefined. Instead of passing to component an empty array,\n // we pass undefined. This means that develloper making custom component\n // does not have to handle empty array case. But only undefiened, which signals:\n // user didn't bind anything; user bound to reference field which is unset; all references are archived\n return result.length > 0 ? result : undefined;\n}\n","import {\n ComponentDefinitionVariableType,\n ComponentTreeNode,\n ResolveDesignValueType,\n BoundComponentPropertyTypes,\n} from '@/types';\nimport { transformRichText } from './transformRichText';\nimport { transformMedia } from './media/transformMedia';\nimport { EntityStoreBase } from '@/entity';\nimport { Asset, UnresolvedLink } from 'contentful';\nimport { getBoundValue } from './getBoundValue';\nimport { getResolvedEntryFromLink } from './getResolvedEntryFromLink';\nimport { getArrayValue } from './getArrayValue';\n\nexport const transformBoundContentValue = (\n variables: ComponentTreeNode['variables'],\n entityStore: EntityStoreBase,\n binding: UnresolvedLink<'Entry' | 'Asset'>,\n resolveDesignValue: ResolveDesignValueType,\n variableName: string,\n variableType: ComponentDefinitionVariableType,\n path: string,\n): BoundComponentPropertyTypes => {\n const entityOrAsset = entityStore.getEntryOrAsset(binding, path);\n if (!entityOrAsset) return;\n\n switch (variableType) {\n case 'Media':\n // If we bound a normal entry field to the media variable we just return the bound value\n if (entityOrAsset.sys.type === 'Entry') {\n return getBoundValue(entityOrAsset, path);\n }\n return transformMedia(\n entityOrAsset as Asset,\n variables,\n resolveDesignValue,\n variableName,\n path,\n );\n case 'RichText':\n return transformRichText(entityOrAsset, entityStore, path);\n case 'Array':\n return getArrayValue(entityOrAsset, path, entityStore);\n case 'Link':\n return getResolvedEntryFromLink(entityOrAsset, path, entityStore);\n default:\n return getBoundValue(entityOrAsset, path);\n }\n};\n","type NodeWithChildren<T> = {\n children: T[];\n};\n\nexport function treeVisit<T extends NodeWithChildren<T>>(\n initialNode: T,\n onNode: (node: T, index: number, depth: number) => void,\n) {\n // returns last used index\n const _treeVisit = (currentNode: T, currentIndex: number, currentDepth: number): number => {\n // Copy children in case of onNode removing it as we pass the node by reference\n const children = [...currentNode.children];\n onNode(currentNode, currentIndex, currentDepth);\n let nextAvailableIndex = currentIndex + 1;\n const lastUsedIndex = currentIndex;\n for (const child of children) {\n const lastUsedIndex = _treeVisit(child, nextAvailableIndex, currentDepth + 1);\n nextAvailableIndex = lastUsedIndex + 1;\n }\n return lastUsedIndex;\n };\n _treeVisit(initialNode, 0, 0);\n}\n\n/**\n * Traverses all nodes of a tree and maps all of them.\n * Intuitively works similarly to Array.map().\n * When returning mapped object from the mapper function\n * you _do not_ need to return about `.children[]` field.\n * This field is automatically managed by the treeMap() function.\n *\n * You can map each node to whatever you want, but shouldn't\n * modify the structure of the tree from the mapping function.\n */\nexport function treeMap<T extends NodeWithChildren<T>, U>(\n node: T,\n onNode: (node: T) => Omit<U, 'children'>,\n): U {\n // Copy children in case of onNode removing it as we pass the node by reference\n const children = [...node.children];\n const newNode = {\n ...onNode(node),\n children: children.map((child) => treeMap(child, onNode)),\n } as U;\n\n return newNode;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IncomingMessage } from '@/types';\nimport { INCOMING_EVENTS, StudioCanvasMode, PostMessageMethods } from '@/constants';\n\nclass ParseError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nconst isValidJsonObject = (s: string) => {\n try {\n const result = JSON.parse(s);\n if ('object' !== typeof result) {\n return false;\n }\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const doesMismatchMessageSchema = (event: MessageEvent): false | string => {\n try {\n tryParseMessage(event);\n return false;\n } catch (e) {\n if (e instanceof ParseError) {\n return e.message;\n }\n throw e;\n }\n};\n\nexport const tryParseMessage = (event: MessageEvent): IncomingMessage => {\n if (!event.data) {\n throw new ParseError('Field event.data is missing');\n }\n if ('string' !== typeof event.data) {\n throw new ParseError(`Field event.data must be a string, instead of '${typeof event.data}'`);\n }\n\n if (!isValidJsonObject(event.data)) {\n throw new ParseError('Field event.data must be a valid JSON object serialized as string');\n }\n\n const eventData = JSON.parse(event.data);\n\n if (!eventData.source) {\n throw new ParseError(`Field eventData.source must be equal to 'composability-app'`);\n }\n\n if ('composability-app' !== eventData.source) {\n throw new ParseError(\n `Field eventData.source must be equal to 'composability-app', instead of '${eventData.source}'`,\n );\n }\n\n // check eventData.eventType\n const supportedEventTypes = Object.values(INCOMING_EVENTS);\n if (!supportedEventTypes.includes(eventData.eventType)) {\n // Expected message: This message is handled in the EntityStore to store fetched entities\n if (eventData.eventType !== PostMessageMethods.REQUESTED_ENTITIES) {\n throw new ParseError(\n `Field eventData.eventType must be one of the supported values: [${supportedEventTypes.join(\n ', ',\n )}]`,\n );\n }\n }\n\n return eventData as IncomingMessage;\n};\n\nexport const validateExperienceBuilderConfig = ({\n locale,\n mode,\n}: {\n locale: string;\n mode: StudioCanvasMode;\n}) => {\n if (mode === StudioCanvasMode.EDITOR || mode === StudioCanvasMode.READ_ONLY) {\n return;\n }\n\n if (!locale) {\n throw new Error(\n 'Parameter \"locale\" is required for experience builder initialization outside of editor mode',\n );\n }\n};\n","import type { Entry, UnresolvedLink } from 'contentful';\n\ntype Link<T extends 'Asset' | 'Entry' = 'Asset' | 'Entry'> = UnresolvedLink<T>;\n\nexport type FnShouldFollowReferencesOfEntryField = (fieldName: string, entry: Entry) => boolean;\n\nexport const uniqueById = <T extends { sys: { id: string } }>(arr: Array<T>): T[] => {\n const map = new Map<string, T>();\n arr.forEach((item) => map.set(item.sys.id, item));\n return [...map.values()];\n};\n\nconst isObject = (value: unknown) => {\n return typeof value === 'object' && value !== null;\n};\n\n/**\n * Extracts all references from an entry.\n * Handles both: reference and multi-reference fields.\n * Returns unique array of references (even if they repeat within the entry).\n */\nexport const referencesOf = (\n entry: Entry,\n fnShouldFollowReferencesOfEntryField?: FnShouldFollowReferencesOfEntryField,\n): UnresolvedLink<'Asset' | 'Entry'>[] => {\n const references: Link<'Asset' | 'Entry'>[] = [];\n\n const handleArray = (fieldValue: Array<unknown>, _fieldName: string) => {\n for (const item of fieldValue) {\n if (isObject(item) && (item as Link).sys?.type === 'Link') {\n references.push(item as Link<'Asset' | 'Entry'>);\n }\n }\n };\n\n const handleLink = (fieldValue: Link<'Asset' | 'Entry'>, _fieldName: string) => {\n references.push(fieldValue);\n };\n\n for (const [fieldName, fieldValue] of Object.entries(\n entry.fields as Record<string, Record<string, unknown>>,\n )) {\n if (\n fnShouldFollowReferencesOfEntryField &&\n !fnShouldFollowReferencesOfEntryField(fieldName, entry)\n ) {\n continue;\n }\n if (fieldValue === undefined) {\n continue; // edge case when field is present on object, but is set to undefined explicitly e.g. during test mocking { myField: undefined }\n }\n\n if (Array.isArray(fieldValue)) {\n handleArray(fieldValue, fieldName);\n } else if (\n fieldValue !== null &&\n isObject(fieldValue) &&\n (fieldValue as Link).sys?.type === 'Link'\n ) {\n handleLink(fieldValue as Link<'Asset' | 'Entry'>, fieldName);\n }\n }\n return uniqueById(references);\n};\n\n// -- REFERENCE EXTRACTION UTILITIES --\n\nexport function extractReferencesFromEntriesAsIds(\n entries: Array<Entry>,\n): [string[], string[], string[]] {\n const [uniqueEntries, uniqueAssets, uniqueReferences] = extractReferencesFromEntries(entries);\n\n const entryIds = uniqueEntries.map((link) => link.sys.id);\n const assetIds = uniqueAssets.map((link) => link.sys.id);\n const referenceIds = uniqueReferences.map((link) => link.sys.id);\n\n return [entryIds, assetIds, referenceIds] as const;\n}\n\nexport function extractReferencesFromEntries(\n entries: Array<Entry>,\n): [UnresolvedLink<'Entry'>[], UnresolvedLink<'Asset'>[], UnresolvedLink<'Entry' | 'Asset'>[]] {\n const allReferences = entries.flatMap((entry) => referencesOf(entry));\n\n const uniqueReferences = uniqueById(allReferences);\n\n const uniqueAssets = uniqueReferences.filter(\n (link) => link.sys.linkType === 'Asset',\n ) as UnresolvedLink<'Asset'>[];\n\n const uniqueEntries = uniqueReferences.filter(\n (link) => link.sys.linkType === 'Entry',\n ) as UnresolvedLink<'Entry'>[];\n\n return [uniqueEntries, uniqueAssets, uniqueReferences] as const;\n}\n","import type { Experience, Link } from '@/types';\nimport type { Entry, Asset } from 'contentful';\nimport { referencesOf, uniqueById } from './references';\nimport { debug } from '@/utils/debugLogger';\nimport { isLinkToAsset } from '@/utils/isLinkToAsset';\nimport { isLinkToEntry } from '@/utils/isLinkToEntry';\nimport { isAsset, isPatternEntry } from '@/utils/typeguards';\n\nconst excludeAssets = (entity: Entry | Asset): entity is Entry => !isAsset(entity);\nconst excludePatternEntries = (entry: Entry): entry is Entry => !isPatternEntry(entry);\n\n/**\n * Parses experience and extracts all leaf links that are referenced from the experience.\n * PRECONDITION: Relies on the fact that entityStore is preloaded with all dataSource\n * entries using include=2 (meaning that up to L3 entries are already preloaded into EntitStore).\n *\n * The function iterates over all entries in the entityStore (assuming they can be L1, L2, L3) and\n * over all of their references. Any references that are NOT available in the entityStore are considered\n * \"leaf references\" aka \"leaf links\" and are returned.\n *\n * The EntityStore happens to contain also entities representing patterns, which we do NOT consider\n * as entries that point to leaf links. So we don't iterate over patterns only over entries which\n * can be used for binding.\n */\nexport const extractLeafLinksReferencedFromExperience = (experience: Experience) => {\n const assetLinks: Link<'Asset'>[] = [];\n const entryLinks: Link<'Entry'>[] = [];\n\n if (!experience.entityStore) {\n throw new Error(\n 'Parameter `experience` should have valid `experience.entityStore` object. Without it, we cannot extract leaf links. Most likely you passed `experience` instance that was not fully fetched. Check your experience fetching logic.',\n );\n }\n\n // We want only leaf links which can be used for binding. We use two filters:\n // excludeAssets: because assets do not have references, so we don't need to traverse them\n // excludePatternEntries: because EntityStore happens to also store pattern-entries.\n // Those point to other patterns, and we don't want to consider them as\n // parents of leaf links pointing to actual data carrying entries used for binding.\n const entries: Entry[] = experience.entityStore.entities\n .filter(excludeAssets)\n .filter(excludePatternEntries);\n\n // We assume that ALL of the entries in the experience\n for (const entry of entries) {\n const references = referencesOf(entry);\n for (const ref of references) {\n if (isLinkToAsset(ref)) {\n if (!experience.entityStore.getEntityFromLink(ref)) {\n assetLinks.push(ref);\n }\n } else if (isLinkToEntry(ref)) {\n if (!experience.entityStore.getEntityFromLink(ref)) {\n entryLinks.push(ref);\n }\n } else {\n debug.warn(\n `[experiences-core::experienceSchema] Unexpected reference type found in entry \"${entry.sys.id}\": ${JSON.stringify(ref)}`,\n );\n }\n }\n }\n\n const dedupedAssetLinks = uniqueById(assetLinks);\n const dedupedEntryLinks = uniqueById(entryLinks);\n\n return {\n assetLinks: dedupedAssetLinks,\n entryLinks: dedupedEntryLinks,\n assetIds: dedupedAssetLinks.map((link) => link.sys.id),\n entryIds: dedupedEntryLinks.map((link) => link.sys.id),\n };\n};\n","import { ComponentRegistration, ComponentTreeNode, ExperienceTreeNode } from '@/types';\n\nexport const splitDirectAndSlotChildren = <T extends ExperienceTreeNode | ComponentTreeNode>(\n allChildNodes: T[],\n componentDefinition: ComponentRegistration['definition'],\n) => {\n // Bridge difference between editor and delivery mode\n const getSlotId = (child: T) => {\n if ('data' in child) return child.data.slotId;\n return child.slotId;\n };\n const slotNodesMap: Record<string, T[] | null> = {};\n for (const slotId in componentDefinition.slots) {\n // We only allow one component per slot (container). This is just safer to not render components twice or not at all\n const nodes = allChildNodes.filter((child) => getSlotId(child) === slotId);\n slotNodesMap[slotId] = nodes.length ? nodes : null;\n }\n const directChildNodes = allChildNodes.filter((child) => getSlotId(child) === undefined);\n if (!componentDefinition.children || !directChildNodes.length) {\n // If there are no children allowed in the component or no children added, render as undefined\n return { slotNodesMap, directChildNodes: undefined };\n }\n return { slotNodesMap, directChildNodes };\n};\n","import {\n ComponentTreeNode,\n ExperienceComponentSettings,\n ExperienceDataSource,\n ExperienceEntry,\n Parameter,\n ParameterDefinition,\n VariableMapping,\n} from '@/types';\nimport { treeVisit } from './treeTraversal';\nimport { isLink } from './isLink';\n\nexport type PrebindingData = {\n prebindingDefinitionId: string;\n parameterIds: Array<string>;\n nativeParameterId?: string;\n parameterDefinitions: Record<string, ParameterDefinition>;\n variableMappings?: Record<string, VariableMapping>;\n};\n\nexport const flattenNestedPatterns = (fetchedPatterns: Array<ExperienceEntry>) => {\n const patternsById: Record<string, ExperienceEntry> = {};\n\n const queue = [...fetchedPatterns];\n\n while (queue.length) {\n const pattern = queue.shift();\n\n if (!pattern) {\n continue;\n }\n\n if (patternsById[pattern.sys.id]) {\n continue;\n }\n\n patternsById[pattern.sys.id] = pattern;\n\n if (!Array.isArray(pattern.fields.usedComponents) || !pattern.fields.usedComponents.length) {\n continue;\n }\n\n for (const nestedPattern of pattern.fields.usedComponents) {\n if (!isLink(nestedPattern)) {\n queue.push(nestedPattern);\n }\n }\n }\n return Object.values(patternsById);\n};\n\n/**\n * Given a list of patterns, extract the prebinding data into a more digestable format indexed by the pattern entry id\n * @param patterns a list of pattern entries\n * @returns a map of pattern entry ids to their prebinding data\n */\nexport const extractPrebindingDataByPatternId = (patterns: Array<ExperienceEntry>) => {\n const prebindingDataByPatternId: Record<string, PrebindingData> = {};\n\n for (const pattern of patterns) {\n const patternId = pattern.sys.id;\n const [prebindingDefinition] = pattern.fields.componentSettings?.prebindingDefinitions ?? [];\n if (!prebindingDefinition) continue;\n\n const [nativeParameterId] =\n Object.entries(prebindingDefinition.parameterDefinitions ?? {}).find(\n ([, value]) => !value.passToNodes?.length,\n ) ?? [];\n\n const prebindingData: PrebindingData = {\n prebindingDefinitionId: prebindingDefinition.id,\n parameterIds: Object.keys(prebindingDefinition.parameterDefinitions),\n nativeParameterId,\n parameterDefinitions: prebindingDefinition.parameterDefinitions,\n variableMappings: prebindingDefinition.variableMappings,\n };\n\n prebindingDataByPatternId[patternId] = prebindingData;\n }\n\n return prebindingDataByPatternId;\n};\n\nexport const generateDefaultDataSourceForPrebindingDefinition = (\n prebindingDefinitions: ExperienceComponentSettings['prebindingDefinitions'] = [],\n) => {\n if (\n !prebindingDefinitions ||\n !Array.isArray(prebindingDefinitions) ||\n !prebindingDefinitions.length\n ) {\n return { dataSource: {}, parameters: {} };\n }\n\n const prebindingDefinition = prebindingDefinitions[0];\n\n const dataSource: ExperienceDataSource = {};\n const parameters: Record<string, Parameter> = {};\n\n for (const [parameterId, parameterDefinition] of Object.entries(\n prebindingDefinition.parameterDefinitions ?? {},\n )) {\n if (parameterDefinition.defaultSource && isLink(parameterDefinition.defaultSource.link)) {\n const dataSourceKey = parameterDefinition.defaultSource.link.sys.id;\n dataSource[dataSourceKey] = parameterDefinition.defaultSource.link;\n parameters[parameterId] = {\n type: 'BoundValue',\n path: `/${dataSourceKey}`,\n };\n }\n }\n return {\n dataSource,\n parameters,\n };\n};\n\nexport function getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId,\n parameterId,\n}: {\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n patternNodeDefinitionId: string;\n parameterId: string;\n}) {\n const patternPrebindingData = prebindingDataByPatternId[patternNodeDefinitionId];\n\n if (!patternPrebindingData) return undefined;\n if (patternPrebindingData.parameterIds.includes(parameterId)) {\n if (patternPrebindingData.nativeParameterId === parameterId) {\n if (!patternPrebindingData.variableMappings) return undefined;\n return Object.fromEntries(\n Object.entries(patternPrebindingData.variableMappings).filter(\n ([, mapping]) => mapping.parameterId === parameterId,\n ),\n );\n } else {\n const parameterDefinition = patternPrebindingData.parameterDefinitions[parameterId];\n if (!parameterDefinition || !parameterDefinition.passToNodes?.length) return undefined;\n\n const patternEntry = fetchedPatterns.find(\n (entry) => entry.sys.id === patternNodeDefinitionId,\n );\n if (!patternEntry) return undefined;\n\n let nestedPatternNode: ComponentTreeNode | undefined;\n\n treeVisit(\n {\n definitionId: 'root',\n parameters: {},\n children: patternEntry.fields.componentTree.children,\n } as ComponentTreeNode,\n (node) => {\n if (node.id === parameterDefinition.passToNodes?.[0]?.nodeId) {\n nestedPatternNode = node;\n }\n\n return undefined;\n },\n );\n\n if (!nestedPatternNode) {\n return undefined;\n }\n\n return getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: nestedPatternNode.definitionId,\n parameterId: parameterDefinition.passToNodes?.[0]?.parameterId,\n });\n }\n }\n}\n","import { SendMessageParams, OutgoingMessage } from '@/types';\nimport { debug } from '@/utils';\n\nexport const sendMessage: SendMessageParams = (eventType, data) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n debug.debug(`[experiences-sdk-react::sendMessage] Sending message [${eventType}]`, {\n source: 'customer-app',\n eventType,\n payload: data,\n });\n\n window.parent?.postMessage(\n {\n source: 'customer-app',\n eventType,\n payload: data,\n } as OutgoingMessage,\n '*',\n );\n};\n","export function deepFreeze<T>(obj: T): Readonly<T> {\n const propNames = Object.getOwnPropertyNames(obj);\n\n for (const name of propNames) {\n const value = obj[name];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n\n return Object.freeze(obj);\n}\n","import type { Asset, ChainModifiers, Entry, UnresolvedLink } from 'contentful';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { get } from '../utils/get';\nimport { isLink } from '../utils/isLink';\nimport { isDeepPath, parseDataSourcePathIntoFieldset } from '@/utils/pathSchema';\nimport { isAsset, isEntry } from '@/utils/typeguards';\nimport { deepFreeze } from '@/utils/freeze';\nimport { debug } from '@/utils';\n\nexport interface EntityFromLink {\n getEntityFromLink(link: UnresolvedLink<'Entry' | 'Asset'>): Asset | Entry | undefined;\n}\n\n/**\n * Base Store for entities\n * Can be extended for the different loading behaviours (editor, production, ..)\n */\nexport abstract class EntityStoreBase implements EntityFromLink {\n /* serialized */ public locale: string;\n /* serialized */ protected entryMap = new Map<string, Entry>();\n /* serialized */ protected assetMap = new Map<string, Asset>();\n\n constructor({ entities, locale }: { entities: Array<Entry | Asset>; locale: string }) {\n this.locale = locale;\n\n for (const entity of entities) {\n this.addEntity(entity);\n }\n }\n\n public get entities() {\n return [...this.entryMap.values(), ...this.assetMap.values()];\n }\n\n public updateEntity(entity: Entry | Asset) {\n this.addEntity(entity);\n }\n\n public getEntryOrAsset(\n linkOrEntryOrAsset: UnresolvedLink<'Entry' | 'Asset'> | Asset | Entry,\n path: string,\n ): Entry | Asset | undefined {\n if (isDeepPath(path)) {\n return this.getDeepEntry(linkOrEntryOrAsset, path);\n }\n let entity: Entry | Asset;\n\n if (isLink(linkOrEntryOrAsset)) {\n const resolvedEntity =\n linkOrEntryOrAsset.sys.linkType === 'Entry'\n ? this.entryMap.get(linkOrEntryOrAsset.sys.id)\n : this.assetMap.get(linkOrEntryOrAsset.sys.id);\n if (!resolvedEntity || resolvedEntity.sys.type !== linkOrEntryOrAsset.sys.linkType) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Experience references unresolved entity: ${JSON.stringify(linkOrEntryOrAsset)}`,\n );\n return;\n }\n entity = resolvedEntity;\n } else if (isAsset(linkOrEntryOrAsset) || isEntry(linkOrEntryOrAsset)) {\n // We already have the complete entity in preview & delivery (resolved by the CMA client)\n entity = linkOrEntryOrAsset;\n } else {\n throw new Error(\n `[experiences-core::EntityStoreBase] Unexpected object when resolving entity: ${JSON.stringify(linkOrEntryOrAsset)}`,\n );\n }\n return entity;\n }\n\n /**\n * @deprecated in the base class this should be simply an abstract method\n * @param entityLink\n * @param path\n * @returns\n */\n public getValue(\n entityLink: UnresolvedLink<'Entry' | 'Asset'>,\n path: string[],\n ): string | undefined {\n const entity = this.getEntity(entityLink.sys.linkType, entityLink.sys.id);\n\n if (!entity) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(\n `Unresolved entity reference: ${entityLink.sys.linkType} with ID ${entityLink.sys.id}`,\n );\n return;\n }\n\n return get<string>(entity, path);\n }\n\n public getEntityFromLink(link: UnresolvedLink<'Entry' | 'Asset'>): Asset | Entry | undefined {\n const resolvedEntity =\n link.sys.linkType === 'Entry'\n ? this.entryMap.get(link.sys.id)\n : this.assetMap.get(link.sys.id);\n\n if (!resolvedEntity || resolvedEntity.sys.type !== link.sys.linkType) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Experience references unresolved entity: ${JSON.stringify(link)}`,\n );\n return;\n }\n return resolvedEntity;\n }\n\n public getAssetById(assetId: string): Asset | undefined {\n const asset = this.assetMap.get(assetId);\n if (!asset) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Asset with ID \"${assetId}\" is not found in the store`,\n );\n return;\n }\n return asset;\n }\n\n public getEntryById(entryId: string): Entry | undefined {\n const entry = this.entryMap.get(entryId);\n if (!entry) {\n debug.warn(\n `[experiences-core::EntityStoreBase] Entry with ID \"${entryId}\" is not found in the store`,\n );\n return;\n }\n return entry;\n }\n\n protected getEntitiesFromMap(type: 'Entry' | 'Asset', ids: string[]) {\n const resolved: Array<Entry | Asset<ChainModifiers, string>> = [];\n const missing: string[] = [];\n\n for (const id of ids) {\n const entity = this.getEntity(type, id);\n if (entity) {\n resolved.push(entity);\n } else {\n missing.push(id);\n }\n }\n\n return {\n resolved,\n missing,\n };\n }\n\n protected addEntity(entity: Entry | Asset): void {\n if (isAsset(entity)) {\n // cloned and frozen\n this.assetMap.set(entity.sys.id, deepFreeze(cloneDeep(entity)));\n } else if (isEntry(entity)) {\n // cloned and frozen\n this.entryMap.set(entity.sys.id, deepFreeze(cloneDeep(entity)));\n } else {\n throw new Error(\n `Attempted to add an entity to the store that is neither Asset nor Entry: '${JSON.stringify(entity)}'`,\n );\n }\n }\n\n public async fetchAsset(id: string): Promise<Asset | undefined> {\n const { resolved, missing } = this.getEntitiesFromMap('Asset', [id]);\n if (missing.length) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(`[experiences-core::EntityStoreBase] Asset \"${id}\" is not in the store`);\n return;\n }\n\n return resolved[0] as Asset;\n }\n public async fetchAssets(ids: string[]): Promise<Asset[]> {\n const { resolved, missing } = this.getEntitiesFromMap('Asset', ids);\n if (missing.length) {\n throw new Error(`Missing assets in the store (${missing.join(',')})`);\n }\n return resolved as Asset[];\n }\n\n public async fetchEntry(id: string): Promise<Entry | undefined> {\n const { resolved, missing } = this.getEntitiesFromMap('Entry', [id]);\n if (missing.length) {\n // TODO: move to `debug` utils once it is extracted\n debug.warn(`[experiences-core::EntityStoreBase] Entry \"${id}\" is not in the store`);\n return;\n }\n\n return resolved[0] as Entry;\n }\n\n public async fetchEntries(ids: string[]): Promise<Entry[]> {\n const { resolved, missing } = this.getEntitiesFromMap('Entry', ids);\n if (missing.length) {\n throw new Error(`Missing assets in the store (${missing.join(',')})`);\n }\n return resolved as Entry[];\n }\n\n private getDeepEntry(\n linkOrEntryOrAsset: UnresolvedLink<'Entry' | 'Asset'> | Asset | Entry,\n path: string,\n ): Entry | Asset | undefined {\n const resolveFieldset = (\n unresolvedFieldset: Array<[null, string, string?]>,\n headEntry: Entry | Asset,\n ): {\n resolvedFieldset: Array<[Entry | Asset, string, string?]>;\n isFullyResolved: boolean;\n reason?: string;\n } => {\n const resolvedFieldset: Array<[Entry | Asset, string, string?]> = [];\n let entityToResolveFieldsFrom: Entry | Asset = headEntry;\n for (let i = 0; i < unresolvedFieldset.length; i++) {\n const isLeaf = i === unresolvedFieldset.length - 1; // with last row, we are not expecting a link, but a value\n const row = unresolvedFieldset[i];\n const [, field, _localeQualifier] = row;\n if (!entityToResolveFieldsFrom) {\n throw new Error(\n `Logic Error: Cannot resolve field ${field} of a fieldset as there is no entity to resolve it from.`,\n );\n }\n if (isLeaf) {\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n break;\n }\n\n const fieldValue = get<string | UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset>(\n entityToResolveFieldsFrom,\n ['fields', field],\n );\n\n if (undefined === fieldValue) {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Cannot resolve field Link<${entityToResolveFieldsFrom.sys.type}>(sys.id=${entityToResolveFieldsFrom.sys.id}).fields[${field}] as field value is not defined`,\n };\n } else if (isLink(fieldValue)) {\n const entity = this.getEntityFromLink(fieldValue);\n if (entity === undefined) {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Field reference Link (sys.id=${fieldValue.sys.id}) not found in the EntityStore, waiting...`,\n };\n }\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n entityToResolveFieldsFrom = entity; // we move up\n } else if (isAsset(fieldValue) || isEntry(fieldValue)) {\n resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);\n entityToResolveFieldsFrom = fieldValue; // we move up\n } else {\n return {\n resolvedFieldset,\n isFullyResolved: false,\n reason: `Deep path points to an invalid field value of type '${typeof fieldValue}' (value=${fieldValue})`,\n };\n }\n }\n return {\n resolvedFieldset,\n isFullyResolved: true,\n };\n };\n\n const headEntity = isLink(linkOrEntryOrAsset)\n ? this.getEntityFromLink(linkOrEntryOrAsset)\n : (linkOrEntryOrAsset as Entry | Asset);\n\n if (undefined === headEntity) {\n return;\n }\n const unresolvedFieldset = parseDataSourcePathIntoFieldset(path);\n\n // The purpose here is to take this intermediate representation of the deep-path\n // and to follow the links to the leaf-entity and field\n // in case we can't follow till the end, we should signal that there was null-reference in the path\n const { resolvedFieldset, isFullyResolved, reason } = resolveFieldset(\n unresolvedFieldset,\n headEntity,\n );\n\n if (!isFullyResolved) {\n if (reason) {\n debug.log(\n `[experiences-core::EntityStoreBase] Deep path wasn't resolved till leaf node, falling back to undefined, because: ${reason}`,\n );\n }\n return;\n }\n const [leafEntity] = resolvedFieldset[resolvedFieldset.length - 1];\n return leafEntity;\n }\n\n private getEntity(type: 'Asset' | 'Entry', id: string) {\n if (type === 'Asset') {\n return this.assetMap.get(id);\n }\n\n return this.entryMap.get(id);\n }\n\n public toJSON() {\n return {\n entryMap: Object.fromEntries(this.entryMap),\n assetMap: Object.fromEntries(this.assetMap),\n locale: this.locale,\n };\n }\n}\n","import type { Asset, Entry } from 'contentful';\nimport { EntityStoreBase } from './EntityStoreBase';\nimport { PostMessageMethods } from '../constants';\nimport { RequestEntitiesMessage, RequestedEntitiesMessage } from '../types';\nimport { debug } from '@/utils';\n\ntype SendMessage = (\n method: PostMessageMethods.REQUEST_ENTITIES,\n params: RequestEntitiesMessage,\n) => void;\ntype Subscribe = (\n method: PostMessageMethods.REQUESTED_ENTITIES,\n cb: (message: RequestedEntitiesMessage) => void,\n) => VoidFunction;\n\n/**\n * EntityStore which resolves entries and assets from the editor\n * over the sendMessage and subscribe functions.\n */\nexport abstract class EditorEntityStore extends EntityStoreBase {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private requestCache = new Map<string, Promise<any>>();\n private sendMessage: SendMessage;\n private subscribe: Subscribe;\n private timeoutDuration: number;\n\n constructor({\n entities,\n locale,\n sendMessage,\n subscribe,\n timeoutDuration = 3000,\n }: {\n entities: Array<Entry | Asset>;\n locale: string;\n sendMessage: SendMessage;\n subscribe: Subscribe;\n timeoutDuration?: number;\n }) {\n super({ entities, locale });\n this.sendMessage = sendMessage;\n this.subscribe = subscribe;\n this.timeoutDuration = timeoutDuration;\n }\n\n private cleanupPromise(referenceId: string) {\n setTimeout(() => {\n this.requestCache.delete(referenceId);\n }, 300);\n }\n\n private cacheIdSeperator = ',';\n\n private getCacheId(id: string[]): string {\n return id.length === 1 ? id[0] : id.join(this.cacheIdSeperator);\n }\n\n private async fetchEntity(\n type: 'Asset',\n ids: string[],\n skipCache: boolean,\n ): Promise<Array<Asset>>;\n private async fetchEntity(\n type: 'Entry',\n ids: string[],\n skipCache: boolean,\n ): Promise<Array<Entry>>;\n private async fetchEntity(\n type: 'Asset' | 'Entry',\n ids: string[],\n skipCache: boolean = false,\n ): Promise<Array<Entry> | Array<Asset>> {\n let missing: string[];\n if (!skipCache) {\n const { missing: missingFromCache, resolved } = this.getEntitiesFromMap(type, ids);\n if (missingFromCache.length === 0) {\n // everything is already in cache\n return resolved as Array<Entry> | Array<Asset>;\n }\n\n missing = missingFromCache;\n } else {\n missing = [...ids];\n }\n\n const cacheId = this.getCacheId(missing);\n const openRequest = this.requestCache.get(cacheId);\n\n if (openRequest) {\n return openRequest;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const newPromise = new Promise((resolve, reject) => {\n const unsubscribe = this.subscribe(\n PostMessageMethods.REQUESTED_ENTITIES,\n (message: RequestedEntitiesMessage) => {\n const messageIds = [\n ...message.entities.map((entity) => entity.sys.id),\n ...(message.missingEntityIds ?? []),\n ];\n if (missing.every((id) => messageIds.includes(id))) {\n clearTimeout(timeout);\n resolve(message.entities);\n\n this.cleanupPromise(cacheId);\n ids.forEach((id) => this.cleanupPromise(id));\n\n unsubscribe();\n } else {\n debug.warn(\n '[experiences-core::EditorEntityStore] Unexpected entities received in REQUESTED_ENTITIES. Ignoring this response.',\n );\n }\n },\n );\n\n const timeout = setTimeout(() => {\n reject(\n new Error(`Request for entities timed out ${this.timeoutDuration}ms for ${cacheId}`),\n );\n\n this.cleanupPromise(cacheId);\n ids.forEach((id) => this.cleanupPromise(id));\n\n unsubscribe();\n }, this.timeoutDuration);\n\n this.sendMessage(PostMessageMethods.REQUEST_ENTITIES, {\n entityIds: missing,\n entityType: type,\n locale: this.locale,\n });\n });\n\n this.requestCache.set(cacheId, newPromise);\n ids.forEach((cid) => {\n this.requestCache.set(cid, newPromise);\n });\n\n const result = (await newPromise) as Array<Entry> | Array<Asset>;\n\n result.forEach((value) => {\n this.addEntity(value);\n });\n\n return this.getEntitiesFromMap(type, ids).resolved as Array<Entry> | Array<Asset>;\n }\n\n public async fetchAsset(id: string, skipCache: boolean = false): Promise<Asset | undefined> {\n try {\n return (await this.fetchAssets([id], skipCache))[0];\n } catch (err) {\n // TODO: move to debug utils once it is extracted\n debug.warn(`[experiences-core::EditorEntityStore] Failed to request asset ${id}`);\n return undefined;\n }\n }\n\n public fetchAssets(ids: string[], skipCache: boolean = false): Promise<Asset[]> {\n return this.fetchEntity('Asset', ids, skipCache);\n }\n\n public async fetchEntry(id: string, skipCache: boolean = false): Promise<Entry | undefined> {\n try {\n return (await this.fetchEntries([id], skipCache))[0];\n } catch (err) {\n // TODO: move to debug utils once it is extracted\n debug.warn(`[experiences-core::EditorEntityStore] Failed to request entry ${id}`, err);\n return undefined;\n }\n }\n\n public fetchEntries(ids: string[], skipCache: boolean = false): Promise<Entry[]> {\n return this.fetchEntity('Entry', ids, skipCache);\n }\n}\n","import { AssetFile } from 'contentful';\n\nexport function transformAssetFileToUrl(\n fieldValue: string | AssetFile | undefined,\n): string | undefined {\n return fieldValue && typeof fieldValue == 'object' && (fieldValue as AssetFile).url\n ? (fieldValue as AssetFile).url\n : (fieldValue as string | undefined);\n}\n","import type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { sendMessage } from '../communication/sendMessage';\nimport { EditorEntityStore } from './EditorEntityStore';\nimport { RequestedEntitiesMessage } from '../types';\nimport { get } from '@/utils/get';\nimport { transformAssetFileToUrl } from './value-transformers';\nimport { debug } from '@/utils';\n\n// The default of 3s in the EditorEntityStore is sometimes timing out and\n// leads to not rendering bound content and assemblies.\nconst REQUEST_TIMEOUT = 10000;\n\nexport class EditorModeEntityStore extends EditorEntityStore {\n constructor({ entities, locale }: { entities: Array<Asset | Entry>; locale: string }) {\n debug.debug(\n `[experiences-core::EditorModeEntityStore] Initializing editor entity store with ${entities.length} entities for locale ${locale}.`,\n { entities },\n );\n\n const subscribe = (method: unknown, cb: (payload: RequestedEntitiesMessage) => void) => {\n const handleMessage = (event: MessageEvent) => {\n const data: {\n source: 'composability-app';\n eventType: string;\n payload: RequestedEntitiesMessage;\n } = JSON.parse(event.data);\n\n if (typeof data !== 'object' || !data) return;\n\n if (data.source !== 'composability-app') return;\n if (data.eventType === method) {\n cb(data.payload);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('message', handleMessage);\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('message', handleMessage);\n }\n };\n };\n\n super({ entities, sendMessage, subscribe, locale, timeoutDuration: REQUEST_TIMEOUT });\n }\n /**\n * This function collects and returns the list of requested entries and assets. Additionally, it checks\n * upfront whether any async fetching logic is actually happening. If not, it returns a plain `false` value, so we\n * can detect this early and avoid unnecessary re-renders.\n * @param entityLinks\n * @returns false if no async fetching is happening, otherwise a promise that resolves when all entities are fetched\n */\n async fetchEntities({\n missingEntryIds,\n missingAssetIds,\n skipCache = false,\n }: {\n missingEntryIds: string[];\n missingAssetIds: string[];\n skipCache?: boolean;\n }) {\n // Entries and assets will be stored in entryMap and assetMap\n await Promise.all([\n super.fetchEntries(missingEntryIds, skipCache),\n super.fetchAssets(missingAssetIds, skipCache),\n ]);\n }\n\n getMissingEntityIds(entityLinks: UnresolvedLink<'Entry' | 'Asset'>[]) {\n const entryLinks = entityLinks.filter((link) => link.sys?.linkType === 'Entry');\n const assetLinks = entityLinks.filter((link) => link.sys?.linkType === 'Asset');\n\n const uniqueEntryIds = [...new Set(entryLinks.map((link) => link.sys.id))];\n const uniqueAssetIds = [...new Set(assetLinks.map((link) => link.sys.id))];\n\n const { missing: missingEntryIds } = this.getEntitiesFromMap('Entry', uniqueEntryIds);\n const { missing: missingAssetIds } = this.getEntitiesFromMap('Asset', uniqueAssetIds);\n\n return { missingEntryIds, missingAssetIds };\n }\n\n public getValue(\n entityLinkOrEntity: UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset,\n path: string[],\n ): string | undefined {\n const entity = this.getEntryOrAsset(entityLinkOrEntity, path.join('/'));\n\n if (!entity) {\n return;\n }\n\n const fieldValue = get<string>(entity, path);\n return transformAssetFileToUrl(fieldValue);\n }\n}\n","import { ExperienceEntry, ExperienceFields } from '@/types';\nexport const resolveDeepUsedComponents = ({\n experienceEntryFields,\n parentComponents,\n}: {\n experienceEntryFields?: ExperienceFields;\n parentComponents: Set<string>;\n}): ExperienceEntry[] => {\n const totalUsedComponents: ExperienceEntry[] = [];\n const usedComponents = experienceEntryFields?.usedComponents as ExperienceEntry[];\n if (!usedComponents || usedComponents.length === 0) {\n return [];\n }\n for (const component of usedComponents) {\n if ('fields' in component) {\n totalUsedComponents.push(component);\n if (parentComponents.has(component.sys.id)) {\n continue;\n }\n\n totalUsedComponents.push(\n ...resolveDeepUsedComponents({\n experienceEntryFields: component.fields,\n parentComponents: new Set([...parentComponents, component.sys.id]),\n }),\n );\n }\n }\n return totalUsedComponents;\n};\n","import type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { checkIsAssemblyEntry, isExperienceEntry } from '@/utils';\nimport type {\n ExperienceFields,\n ExperienceUnboundValues,\n ExperienceEntry,\n VariableMapping,\n ParameterDefinition,\n} from '@/types';\nimport { EntityStoreBase } from './EntityStoreBase';\nimport { get } from '@/utils/get';\nimport { transformAssetFileToUrl } from './value-transformers';\nimport { isLink } from '@/utils/isLink';\nimport { resolveDeepUsedComponents } from '@/entity/utils/resolveDeepUsedComponents';\ntype EntityStoreArgs = {\n experienceEntry: ExperienceEntry | Entry;\n entities: Array<Entry | Asset>;\n locale: string;\n};\n\ntype ParameterDefinitions = NonNullable<Record<string, ParameterDefinition>>;\ntype VariableMappings = NonNullable<Record<string, VariableMapping>>;\n\nexport class EntityStore extends EntityStoreBase {\n private _isExperienceAPatternEntry: boolean;\n /* serialized */ private _experienceEntryFields: ExperienceFields | undefined;\n /* serialized */ private _experienceEntryId: string | undefined;\n /* serialized */ private _unboundValues: ExperienceUnboundValues | undefined;\n /* derived */ private _usedComponentsWithDeepReferences: ExperienceEntry[];\n /* derived */ private _hoistedParameterDefinitions: ParameterDefinitions; // Hoisted, because they contain parameter definitions also from child patterns\n /* derived */ private _hoistedVariableMappings: VariableMappings; // Hoisted, because they contain variable mappings also from child patterns\n\n constructor(json: string);\n constructor({ experienceEntry, entities, locale }: EntityStoreArgs);\n\n constructor(options: string | EntityStoreArgs) {\n if (typeof options === 'string') {\n // For SSR/SSG, the entity store is created server-side and passed to the client as a serialised JSON.\n // So the properties in data.entityStore are equal to the attributes of this class (see `toJSON()`)\n const serializedAttributes = JSON.parse(options).entityStore;\n super({\n entities: [\n ...(Object.values(serializedAttributes.entryMap) as Entry[]),\n ...(Object.values(serializedAttributes.assetMap) as Asset[]),\n ],\n locale: serializedAttributes.locale,\n });\n this._hoistedParameterDefinitions = {};\n this._hoistedVariableMappings = {};\n this._experienceEntryFields = serializedAttributes._experienceEntryFields as ExperienceFields; // non-broken deserialization always should result in valid ExperienceFields\n this._experienceEntryId = serializedAttributes._experienceEntryId as string; // // non-broken deserialization always should result in valid experienceEntryId\n this._unboundValues = serializedAttributes._unboundValues as ExperienceUnboundValues; // non-broken deserialization always should result in valid unboundValues\n } else {\n const { experienceEntry, entities, locale } = options;\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error('Provided entry is not an experience entry');\n }\n\n super({ entities, locale });\n this._hoistedParameterDefinitions = {};\n this._hoistedVariableMappings = {};\n this._experienceEntryFields = experienceEntry.fields;\n this._experienceEntryId = experienceEntry.sys.id;\n this._unboundValues = experienceEntry.fields.unboundValues;\n }\n\n this._isExperienceAPatternEntry = checkIsAssemblyEntry({\n fields: this._experienceEntryFields,\n } as unknown as Entry);\n\n // DERIVE ENTITY STORE INSTANCE VARIBLES\n // Register prebindings\n {\n const usedComponentLinks = this._experienceEntryFields.usedComponents ?? [];\n const usedComponents: ExperienceEntry[] = usedComponentLinks\n .map((component) => (isLink(component) ? this.getEntityFromLink(component) : component))\n .filter((component): component is ExperienceEntry => component !== undefined);\n\n this._hoistedParameterDefinitions = EntityStore.calculateHoistedParameterDefinitions(\n this._experienceEntryFields,\n usedComponents,\n );\n this._hoistedVariableMappings = EntityStore.calculateHoistedVariableMappings(\n this._experienceEntryFields,\n usedComponents,\n );\n }\n\n // Register deep references\n this._usedComponentsWithDeepReferences = resolveDeepUsedComponents({\n experienceEntryFields: this._experienceEntryFields,\n parentComponents: new Set([this._experienceEntryId!]),\n });\n }\n\n private static calculateHoistedParameterDefinitions(\n parentEntryFields: ExperienceFields,\n usedComponents: ExperienceEntry[],\n ): ParameterDefinitions {\n let hoistedDefinitions: ParameterDefinitions = {};\n\n // --------------------\n // Hoist prebinding for the L1 parent pattern aka `pA`\n // --------------------\n hoistedDefinitions = Object.assign(\n hoistedDefinitions,\n parentEntryFields.componentSettings?.prebindingDefinitions?.[0].parameterDefinitions || {},\n );\n\n // --------------------\n // Hoist prebinding for the L2 nested patterns, patterns aka`pB`\n // --------------------\n usedComponents.forEach((patternEntryLevel2) => {\n hoistedDefinitions = {\n ...hoistedDefinitions,\n ...patternEntryLevel2.fields.componentSettings?.prebindingDefinitions?.[0]\n .parameterDefinitions,\n };\n });\n\n // --------------------\n // Hoist prebinding for L3 nested patterns, patterns aka `pC`\n // --------------------\n const usedComponentsLevel3 = usedComponents.flatMap((patternEntryLevel2) => {\n const usedComponents = patternEntryLevel2.fields.usedComponents || [];\n const filteredUsedComponents = usedComponents.filter(\n (component): component is ExperienceEntry =>\n component !== undefined && isExperienceEntry(component as Entry), // here we assume that due to fetchReferencedEntities() loading with include=2 we already have those resolved to entries\n );\n return filteredUsedComponents;\n });\n\n usedComponentsLevel3.forEach((patternEntryLevel3) => {\n hoistedDefinitions = {\n ...hoistedDefinitions,\n ...patternEntryLevel3.fields.componentSettings?.prebindingDefinitions?.[0]\n .parameterDefinitions,\n };\n });\n\n return hoistedDefinitions;\n }\n\n private static calculateHoistedVariableMappings(\n parentEntryFields: ExperienceFields,\n usedComponents: ExperienceEntry[],\n ): VariableMappings {\n let hoistedMappings: VariableMappings = {};\n\n // --------------------\n // Hoist prebinding for the L1 parent pattern aka `pA`\n // --------------------\n hoistedMappings = Object.assign(\n hoistedMappings,\n parentEntryFields.componentSettings?.prebindingDefinitions?.[0].variableMappings || {},\n );\n\n // --------------------\n // Hoist prebinding for the L2 nested patterns, patterns aka`pB`\n // --------------------\n usedComponents.forEach((patternEntryLevel2) => {\n hoistedMappings = {\n ...hoistedMappings,\n ...patternEntryLevel2.fields.componentSettings?.prebindingDefinitions?.[0].variableMappings,\n };\n });\n\n // --------------------\n // Hoist prebinding for L3 nested patterns, patterns aka `pC`\n // --------------------\n const usedComponentsLevel3 = usedComponents.flatMap((patternEntryLevel2) => {\n const usedComponents = patternEntryLevel2.fields.usedComponents || [];\n const filteredUsedComponents = usedComponents.filter(\n (component): component is ExperienceEntry =>\n component !== undefined && isExperienceEntry(component as Entry), // here we assume that due to fetchReferencedEntities() loading with include=2 we already have those resolved to entries\n );\n return filteredUsedComponents;\n });\n\n usedComponentsLevel3.forEach((patternEntryLevel3) => {\n hoistedMappings = {\n ...hoistedMappings,\n ...patternEntryLevel3.fields.componentSettings?.prebindingDefinitions?.[0].variableMappings,\n };\n });\n\n return hoistedMappings;\n }\n\n public getCurrentLocale() {\n return this.locale;\n }\n\n public get isExperienceAPatternEntry() {\n return this._isExperienceAPatternEntry;\n }\n\n public get hoistedVariableMappings() {\n return this._hoistedVariableMappings;\n }\n\n public get hoistedParameterDefinitions() {\n return this._hoistedParameterDefinitions;\n }\n\n public get experienceEntryFields() {\n return this._experienceEntryFields;\n }\n\n public get experienceEntryId() {\n return this._experienceEntryId;\n }\n\n public get schemaVersion() {\n return this._experienceEntryFields?.componentTree.schemaVersion;\n }\n\n public get breakpoints() {\n return this._experienceEntryFields?.componentTree.breakpoints ?? [];\n }\n\n public get dataSource() {\n return this._experienceEntryFields?.dataSource ?? {};\n }\n\n public get unboundValues() {\n return this._unboundValues ?? {};\n }\n\n public get usedComponents() {\n return this._usedComponentsWithDeepReferences ?? [];\n }\n\n /**\n * Extend the existing set of unbound values with the ones from the assembly definition.\n * When creating a new assembly out of a container, the unbound value keys are copied and\n * thus the existing and the added ones have colliding keys. In the case of overlapping value\n * keys, the ones from the experience overrule the ones from the assembly definition as\n * the latter one is certainly just a default value while the other one is from the actual instance.\n * @param unboundValues set of unbound values defined in the assembly definition\n */\n public addAssemblyUnboundValues(unboundValues: ExperienceUnboundValues) {\n this._unboundValues = { ...unboundValues, ...(this._unboundValues ?? {}) };\n }\n\n public getValue(\n entityLinkOrEntity: UnresolvedLink<'Entry' | 'Asset'> | Entry | Asset,\n path: string[],\n ): string | undefined {\n const entity = isLink(entityLinkOrEntity)\n ? this.getEntityFromLink(entityLinkOrEntity)\n : (entityLinkOrEntity as Entry | Asset);\n if (entity === undefined) {\n return;\n }\n const fieldValue = get<string>(entity, path);\n return transformAssetFileToUrl(fieldValue);\n }\n\n public toJSON() {\n return {\n _experienceEntryFields: this._experienceEntryFields,\n _experienceEntryId: this._experienceEntryId,\n _unboundValues: this._unboundValues,\n ...super.toJSON(),\n };\n }\n}\n","import { EntityStoreBase } from './EntityStoreBase';\n\nexport class UninitializedEntityStore extends EntityStoreBase {\n constructor() {\n super({ entities: [], locale: 'uninitialized-locale-in-uninitialized-entity-store' });\n }\n}\n","import { create } from 'zustand';\nimport type { EntityStoreBase } from './EntityStoreBase';\nimport type { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { UninitializedEntityStore } from './UninitializedEntityStore';\n\nexport interface InMemoryEntitiesState {\n entityStore: EntityStoreBase;\n // Set to true when entities were fetched from the parent app.\n // Reset to false when we receive a tree update and need to validate\n // again whether all necessary entities are fetched.\n areEntitiesFetched: boolean;\n // updaters\n setEntitiesFetched: (fetched: boolean) => void;\n resolveEntity: <T extends 'Entry' | 'Asset'>(\n link?: UnresolvedLink<T>,\n ) => Entry | Asset | undefined;\n resolveAssetById: (assetId?: string) => Asset | undefined;\n resolveEntryById: (entryId?: string) => Entry | undefined;\n resetEntityStore: (entityStore: EntityStoreBase) => void;\n}\n\nexport const inMemoryEntitiesStore = create<InMemoryEntitiesState>((set, get) => ({\n // The UninitializedEntityStore is a placeholder instance and is here to highlight the\n // // fact that it's not used by anything until during loading lifecycle it'sreplaced by real entity store:\n // - in Preview+Delivery mode: right after we fetch Expereince and it entities\n // - in EDITOR (VisualEditor) mode: right after the VisualEditor is async imported and initialize event happens\n entityStore: new UninitializedEntityStore(),\n areEntitiesFetched: false,\n\n setEntitiesFetched(fetched) {\n set({ areEntitiesFetched: fetched });\n },\n resolveAssetById(assetId?: string) {\n if (!assetId) return undefined;\n const { entityStore } = get();\n return entityStore.getAssetById(assetId);\n },\n resolveEntryById(entryId?: string) {\n if (!entryId) return undefined;\n const { entityStore } = get();\n return entityStore.getEntryById(entryId);\n },\n resolveEntity<T extends 'Entry' | 'Asset'>(link?: UnresolvedLink<T>) {\n if (!link) return undefined;\n const { entityStore } = get();\n return entityStore.getEntityFromLink(link);\n },\n resetEntityStore(entityStore) {\n set({\n entityStore,\n areEntitiesFetched: false,\n });\n },\n}));\n\nexport type InMemoryEntitiesStore = typeof inMemoryEntitiesStore;\n","import { Asset, Entry, UnresolvedLink } from 'contentful';\nimport { isLink } from '../utils/isLink';\nimport { inMemoryEntitiesStore } from './InMemoryEntitiesStore';\nimport { debug } from '@/utils';\n\n/**\n * Resolves a link to its corresponding entry or asset if available.\n *\n * @note When using this function please ensure to explicitly handle `undefined` values in\n * your component to protect against scenarios where the property was not yet bound to an\n * entity inside the editor UI. The SDK will set the property to `undefined` in those cases.\n * You can use the SDK helper functions `isLink`, `isLinkToEntry`, `isLinkToAsset`, or\n * `isArrayOfLinks` for this purpose.\n */\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Entry'>): Entry | undefined;\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Asset'>): Asset | undefined;\nfunction maybeResolveLink(maybeLink: UnresolvedLink<'Asset' | 'Entry'>): Asset | Entry | undefined;\nfunction maybeResolveLink(maybeLink: NonNullable<unknown>): Entry | Asset | undefined;\nfunction maybeResolveLink(maybeLink: NonNullable<unknown>): Entry | Asset | undefined {\n if (!isLink(maybeLink)) {\n debug.warn(\n '[experiences-core::InMemoryEntitiesStore] maybeResolveLink function must receive Link shape. Provided argument does not match the Link shape: ',\n maybeLink,\n );\n return undefined;\n }\n return inMemoryEntitiesStore.getState().resolveEntity(maybeLink);\n}\n\nfunction maybeResolveByAssetId(assetId: string): Asset | undefined {\n return inMemoryEntitiesStore.getState().resolveAssetById(assetId);\n}\n\nfunction maybeResolveByEntryId(entryId: string): Entry | undefined {\n return inMemoryEntitiesStore.getState().resolveEntryById(entryId);\n}\n\nfunction hasEntry(entryId: string): boolean {\n return Boolean(maybeResolveByEntryId(entryId));\n}\n\nfunction hasAsset(assetId: string): boolean {\n return Boolean(maybeResolveByAssetId(assetId));\n}\n\nfunction addEntities(entities: Array<Entry>): void;\nfunction addEntities(entities: Array<Asset>): void;\nfunction addEntities(entities: Array<Entry | Asset>): void;\nfunction addEntities(entities: Array<Entry> | Array<Asset> | Array<Entry | Asset>): void {\n if (!Array.isArray(entities) || entities.length === 0) {\n return;\n }\n\n const { entityStore } = inMemoryEntitiesStore.getState();\n const definedEntities = entities.filter(Boolean);\n\n for (const entity of definedEntities) {\n entityStore.updateEntity(entity);\n }\n}\n\nconst inMemoryEntities = {\n maybeResolveLink,\n maybeResolveByAssetId,\n maybeResolveByEntryId,\n hasEntry,\n hasAsset,\n addEntities,\n};\n\nexport type InMemoryEntitiesPublicApi = typeof inMemoryEntities;\n\nconst useInMemoryEntities = () => {\n return inMemoryEntities;\n};\n\nexport { inMemoryEntities, useInMemoryEntities };\n","export enum VisualEditorMode {\n LazyLoad = 'lazyLoad',\n InjectScript = 'injectScript',\n}\n","import type { Asset, Entry } from 'contentful';\nimport { isExperienceEntry } from '@/utils';\nimport type { Experience } from '@/types';\nimport { EntityStore } from '@/entity/EntityStore';\nimport { inMemoryEntitiesStore } from '@/entity/InMemoryEntitiesStore';\n\ntype CreateExperienceParams = {\n experienceEntry: Entry;\n referencedEntries: Array<Entry>;\n referencedAssets: Array<Asset>;\n // TODO: Remove as it is not used by createExperience nor by the EntityStore nor EntityStoreBase\n locale: string;\n};\n\n/**\n * Create an experience instance using a serialized version of the entity store for SSR purposes.\n * @param {string} json - JSON representation of the experience\n */\nexport function createExperience(json: string): Experience<EntityStore>;\n/**\n * Create an experience instance using the already fetched entries and assets.\n * @param options.experienceEntry - Localized experience entry which will be rendered\n * @param options.referencedEntries - Array of localized entries which are referenced by the experience entry in its dataSource\n * @param options.referencedAssets - Array of localized assets which are referenced by the experience entry in its dataSource\n * @param options.locale - (Soon to be removed unused parameter)\n */\nexport function createExperience(options: CreateExperienceParams): Experience<EntityStore>;\n\nexport function createExperience(\n options: string | CreateExperienceParams,\n): Experience<EntityStore> {\n let entityStore: EntityStore;\n\n if (typeof options === 'string') {\n entityStore = new EntityStore(options);\n } else {\n const { experienceEntry, referencedAssets, referencedEntries, locale } = options;\n if ([experienceEntry, ...referencedAssets, ...referencedEntries].some(isNotLocalized)) {\n throw new Error(\n 'Some of the provided content is not localized. Please localize every entity before passing it to this function. Note that this is solely determined by `sys.locale` being set respectively.',\n );\n }\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error('Provided entry is not an experience entry');\n }\n\n entityStore = new EntityStore({\n experienceEntry,\n entities: [...referencedEntries, ...referencedAssets],\n locale,\n });\n }\n\n inMemoryEntitiesStore.getState().resetEntityStore(entityStore);\n return {\n entityStore,\n };\n}\n\n// Following the API shape, we check the `sys.locale` property as we can't rely on the shape of\n// fields to determine whether it's localized or not.\n// See CDA documentation mentioning it here: https://www.contentful.com/developers/docs/references/content-delivery-api/#/introduction/common-resource-attributes\nconst isNotLocalized = (entity: Entry | Asset) => {\n return !entity.sys.locale;\n};\n","import { ContentfulClientApi, Entry } from 'contentful';\n\ntype ClientAndLocaleParams =\n | {\n client: ContentfulClientApi<undefined>;\n locale?: string;\n }\n | {\n client: ContentfulClientApi<'WITH_ALL_LOCALES'>;\n /** When fetching all locales, this may not be defined */\n locale?: undefined;\n };\n\ntype FetchExperienceEntryParams = {\n experienceTypeId: string;\n identifier: { slug: string } | { id: string };\n} & ClientAndLocaleParams;\n\n/**\n * Fetches an experience entry by its slug or id. Throws an error if there are multiple\n * entries with the same slug. Additionally, it resolves all nested pattern entries inside `fields.usedComponents`.\n * @param options.client - Instantiated client from the Contentful SDK. If this is using the `withAllLocales` modifier, you may not provide a specific locale.\n * @param options.locale - Provide a locale if your experience contains custom localized fields. Otherwise, it will fallback to the default locale.\n * @param options.experienceTypeId - id of the content type associated with the experience\n * @param options.identifier - identifying condition to find the correct experience entry\n *\n */\nexport const fetchExperienceEntry = async ({\n client,\n experienceTypeId,\n locale,\n identifier,\n}: FetchExperienceEntryParams) => {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!experienceTypeId) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"experienceTypeId\" parameter was not provided',\n );\n }\n\n if (!('slug' in identifier) && !('id' in identifier)) {\n throw new Error(\n `Failed to fetch experience entities. At least one identifier must be provided. Received: ${JSON.stringify(\n identifier,\n )}`,\n );\n }\n\n const filter =\n 'slug' in identifier ? { 'fields.slug': identifier.slug } : { 'sys.id': identifier.id };\n\n const entries = await client.getEntries({\n content_type: experienceTypeId,\n locale,\n include: 3, // fetching max 3 level deep references due to nested patterns\n ...filter,\n });\n\n if (entries.items.length > 1) {\n throw new Error(\n `More than one experience with identifier: ${JSON.stringify(identifier)} was found`,\n );\n }\n\n return entries.items[0] as Entry | undefined;\n};\n","import {\n ExperienceTreeNode,\n ExperienceDataSource,\n DataSourceEntryValueType,\n ExperienceEntry,\n ComponentTreeNode,\n Link,\n} from '@/types';\nimport {\n getPrebindingPathBySourceEntry,\n isDeepPath,\n isDeepPrebinding,\n isPreboundProp,\n parseDataSourcePathWithL1DeepBindings,\n} from '@/utils/pathSchema';\nimport { treeVisit } from '@/utils/treeTraversal';\nimport { isLink } from '@/utils/isLink';\nimport type { EntityFromLink, EntityStoreBase } from '@/entity';\nimport { Entry } from 'contentful';\nimport {\n generateDefaultDataSourceForPrebindingDefinition,\n getTargetPatternMappingsForParameter,\n PrebindingData,\n} from '@/utils';\n\ntype DeepReferenceOpts = {\n path: string;\n dataSource: ExperienceDataSource;\n};\n\nexport class DeepReference {\n public entityId: string;\n public entityLink: DataSourceEntryValueType;\n public field: string;\n public referentField: string;\n public originalPath: string;\n\n constructor({ path, dataSource }: DeepReferenceOpts) {\n const { key, field, referentField } = parseDataSourcePathWithL1DeepBindings(path);\n\n this.originalPath = path;\n this.entityId = dataSource[key].sys.id;\n this.entityLink = dataSource[key];\n this.field = field;\n this.referentField = referentField;\n }\n\n get headEntityId() {\n return this.entityId;\n }\n\n /**\n * Extracts referent from the path, using EntityStore as source of\n * entities during the resolution path.\n */\n extractReferent(entityStore: EntityFromLink): Link<'Asset' | 'Entry'> | undefined {\n const headEntity = entityStore.getEntityFromLink(this.entityLink);\n\n const maybeReferentLink = headEntity?.fields[this.field] as\n | Link<'Entry'>\n | Link<'Asset'>\n | undefined\n | unknown;\n\n if (undefined === maybeReferentLink) {\n // field references nothing (or even field doesn't exist)\n return undefined;\n }\n\n if (!isLink(maybeReferentLink)) {\n // Scenario of \"impostor referent\", where one of the deepPath's segments is not a Link but some other type\n // Under normal circumstance we expect field to be a Link, but it could be an \"impostor\"\n // eg. `Text` or `Number` or anything like that; could be due to CT changes or manual path creation via CMA\n return undefined;\n }\n\n return maybeReferentLink;\n }\n\n static from(opt: DeepReferenceOpts) {\n return new DeepReference(opt);\n }\n}\n\nexport function gatherDeepReferencesFromExperienceEntry(\n experienceEntry: ExperienceEntry,\n): DeepReference[] {\n const deepReferences: Array<DeepReference> = [];\n const dataSource = experienceEntry.fields.dataSource;\n const { children } = experienceEntry.fields.componentTree;\n\n treeVisit(\n {\n definitionId: 'root',\n variables: {},\n children,\n } as ComponentTreeNode,\n (node) => {\n if (!node.variables) return;\n\n for (const variableMapping of Object.values(node.variables)) {\n if (variableMapping.type !== 'BoundValue') continue;\n if (!isDeepPath(variableMapping.path)) continue;\n\n deepReferences.push(\n DeepReference.from({\n path: variableMapping.path,\n dataSource,\n }),\n );\n }\n },\n );\n\n return deepReferences;\n}\n\nexport function gatherDeepPrebindingReferencesFromExperienceEntry({\n experienceEntry,\n fetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries,\n}: {\n experienceEntry: ExperienceEntry;\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n fetchedLevel1Entries: Array<Entry>;\n}) {\n const deepPrebindingReferences: Array<DeepReference> = [];\n const dataSource = experienceEntry.fields.dataSource;\n const { children } = experienceEntry.fields.componentTree;\n\n treeVisit(\n {\n definitionId: 'root',\n parameters: {},\n children,\n } as ComponentTreeNode,\n (node) => {\n if (!node.parameters) return;\n\n for (const [parameterId, parameterValue] of Object.entries(node.parameters)) {\n const dataSourceKey = parameterValue.path.split('/')[1];\n const headEntryLink = dataSource[dataSourceKey];\n if (!headEntryLink) continue;\n if (headEntryLink.sys.linkType !== 'Entry') continue;\n const headEntry = fetchedLevel1Entries.find(\n (entry) => entry.sys.id === headEntryLink.sys.id,\n );\n if (!headEntry) continue;\n\n const headEntryContentTypeId = headEntry.sys.contentType.sys.id;\n\n // if experience, we don't have any hoisted data on the given experienceEntry\n // and we have to lookup the pattern instead\n const variableMappings = getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: node.definitionId,\n parameterId,\n });\n\n if (!variableMappings) continue;\n\n for (const mappingData of Object.values(variableMappings)) {\n const targetMapping = mappingData.pathsByContentType[headEntryContentTypeId];\n if (!targetMapping) continue;\n // mapping doesn't start with /uuid, but instead starts with /fields\n // so we add /uuid to make it match the binding path format\n const path = `/${dataSourceKey}${targetMapping.path}`;\n if (!isDeepPath(path)) continue;\n\n deepPrebindingReferences.push(\n DeepReference.from({\n path,\n dataSource,\n }),\n );\n }\n }\n },\n );\n\n return deepPrebindingReferences;\n}\n\nexport function gatherDeepPrebindingReferencesFromPatternEntry({\n patternEntry,\n fetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries,\n}: {\n patternEntry: ExperienceEntry;\n fetchedPatterns: Array<ExperienceEntry>;\n prebindingDataByPatternId: Record<string, PrebindingData>;\n fetchedLevel1Entries: Array<Entry>;\n}) {\n const deepPrebindingReferences: Array<DeepReference> = [];\n // patterns can't have parameters in their CDA/CMA JSON, so we can generate random ids here\n const { dataSource, parameters } = generateDefaultDataSourceForPrebindingDefinition(\n patternEntry.fields.componentSettings?.prebindingDefinitions,\n );\n\n for (const [parameterId, parameterValue] of Object.entries(parameters)) {\n const dataSourceKey = parameterValue.path.split('/')[1];\n const headEntryLink = dataSource[dataSourceKey];\n if (!headEntryLink) continue;\n if (headEntryLink.sys.linkType !== 'Entry') continue;\n\n const headEntry = fetchedLevel1Entries.find((entry) => entry.sys.id === headEntryLink.sys.id);\n if (!headEntry) continue;\n\n const headEntryContentTypeId = headEntry.sys.contentType.sys.id;\n\n const variableMappings = getTargetPatternMappingsForParameter({\n fetchedPatterns,\n prebindingDataByPatternId,\n patternNodeDefinitionId: patternEntry.sys.id,\n parameterId,\n });\n\n if (!variableMappings) continue;\n\n for (const mappingData of Object.values(variableMappings)) {\n const targetMapping = mappingData.pathsByContentType[headEntryContentTypeId];\n if (!targetMapping) continue;\n // mapping doesn't start with /uuid, but instead starts with /fields\n // so we add /uuid to make it match the binding path format\n const path = `/${dataSourceKey}${targetMapping.path}`;\n if (!isDeepPath(path)) continue;\n\n deepPrebindingReferences.push(\n DeepReference.from({\n path,\n dataSource,\n }),\n );\n }\n }\n return deepPrebindingReferences;\n}\n\n/**\n * used in editor mode. for delivery mode see `gatherDeepReferencesFromExperienceEntry`\n */\nexport function gatherDeepReferencesFromTree(\n startingNode: ExperienceTreeNode,\n dataSource: ExperienceDataSource,\n getEntityFromLink: EntityStoreBase['getEntityFromLink'],\n): DeepReference[] {\n const deepReferences: Array<DeepReference> = [];\n\n treeVisit(startingNode, (node) => {\n if (!node.data.props) return;\n\n for (const [, variableMapping] of Object.entries(node.data.props)) {\n if (variableMapping.type !== 'BoundValue') continue;\n\n if (isDeepPath(variableMapping.path)) {\n deepReferences.push(\n DeepReference.from({\n path: variableMapping.path,\n dataSource,\n }),\n );\n } else if (isPreboundProp(variableMapping) && isDeepPrebinding(variableMapping)) {\n const getEntityByDataSourceKey = (dataSourceKey: string) => {\n const entityLink = dataSource[dataSourceKey];\n if (!entityLink) return undefined;\n return getEntityFromLink(entityLink);\n };\n\n const deepPrebindingPath = getPrebindingPathBySourceEntry(\n variableMapping,\n getEntityByDataSourceKey,\n );\n if (!deepPrebindingPath) continue;\n deepReferences.push(\n DeepReference.from({\n path: deepPrebindingPath,\n dataSource,\n }),\n );\n }\n }\n });\n\n return deepReferences;\n}\n","import { Entry, Asset, UnresolvedLink } from 'contentful';\nimport type { DeepReference } from '@/deep-binding/DeepReference';\nimport { isLink } from '@/utils/isLink';\nimport { debug } from '@/utils';\n\nexport type MinimalEntryCollection = {\n items: Entry[];\n includes: {\n Entry: Entry[];\n Asset: Asset[];\n };\n};\n\n/**\n * Traverses deep-references and extracts referents from valid deep-paths.\n * The referents are received from the CDA/CPA response `.includes` field.\n *\n * In case deep-paths not resolving till the end, eg.:\n * - non-link referents: are ignored\n * - unset references: are ignored\n *\n * Errors are thrown in case of deep-paths being correct,\n * but referents not found. Because if we don't throw now, the EntityStore will\n * be missing entities and upon rendering will not be able to render bindings.\n */\nexport function gatherAutoFetchedReferentsFromIncludes(\n deepReferences: DeepReference[],\n entriesResponse: MinimalEntryCollection,\n): {\n autoFetchedReferentEntries: Entry[];\n autoFetchedReferentAssets: Asset[];\n} {\n const autoFetchedReferentEntries: Entry[] = [];\n const autoFetchedReferentAssets: Asset[] = [];\n\n for (const reference of deepReferences) {\n const headEntry = entriesResponse.items.find(\n (entry) => entry.sys.id === reference.headEntityId,\n );\n if (!headEntry) {\n debug.debug(\n `[experiences-sdk-core::fetchers] When resolving deep-references could not find headEntry with id '${reference.entityId}'`,\n );\n continue;\n }\n\n const linkToReferent = headEntry.fields[reference.field] as UnresolvedLink<'Asset' | 'Entry'>;\n\n if (undefined === linkToReferent) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Empty reference in headEntity. Probably reference is simply not set.`,\n );\n continue;\n }\n\n if (!isLink(linkToReferent)) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Non-link value in headEntity. Probably broken path '${reference.originalPath}'`,\n );\n continue;\n }\n\n const linkType = linkToReferent.sys.linkType;\n\n if (!['Entry', 'Asset'].includes(linkType)) {\n debug.debug(\n `[experiences-sdk-core::fetchers] Unhandled linkType :${JSON.stringify(linkToReferent)}`,\n );\n continue;\n }\n\n const referentEntity = entriesResponse.includes?.[linkType]?.find(\n (entity) => entity.sys.id === linkToReferent.sys.id,\n );\n if (!referentEntity) {\n debug.debug(\n `[experiences-sdk-core::fetchers] L2-referent ${linkType} was not found within .includes (${JSON.stringify(\n {\n linkToReferent,\n },\n )})`,\n );\n continue;\n }\n\n linkType === 'Entry'\n ? autoFetchedReferentEntries.push(referentEntity as Entry)\n : autoFetchedReferentAssets.push(referentEntity as Asset);\n } // for (reference of deepReferences)\n\n return { autoFetchedReferentAssets, autoFetchedReferentEntries };\n}\n","import { Asset, ContentfulClientApi, Entry } from 'contentful';\nimport { MinimalEntryCollection } from './gatherAutoFetchedReferentsFromIncludes';\nimport { uniqueById } from '@/utils';\n\nconst MIN_FETCH_LIMIT = 1;\nexport const fetchAllEntries = async ({\n client,\n ids,\n locale,\n skip = 0,\n limit = 100,\n responseItems = [],\n responseIncludes = { Entry: [], Asset: [] },\n}: {\n client: ContentfulClientApi<undefined> | ContentfulClientApi<'WITH_ALL_LOCALES'>;\n ids: string[];\n locale?: string;\n skip?: number;\n limit?: number;\n responseItems?: Entry[];\n responseIncludes?: MinimalEntryCollection['includes'];\n}): Promise<{\n items: Entry[];\n includes: {\n Entry: Entry[];\n Asset: Asset[];\n };\n}> => {\n try {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!ids.length) {\n return {\n items: [],\n includes: {\n Entry: [],\n Asset: [],\n },\n };\n }\n\n const query = { 'sys.id[in]': ids, locale, limit, skip, include: 2 as 2 | undefined };\n\n const {\n items,\n includes,\n total: responseTotal,\n } = await client.withoutLinkResolution.getEntries({ ...query });\n\n responseItems.push(...(items as Entry[]));\n responseIncludes?.Entry?.push(...(includes?.Entry || []));\n responseIncludes?.Asset?.push(...(includes?.Asset || []));\n\n // E.g Total entries = 99\n // First fetch => { skip: 0, limit: 50, total: 99 } => 50 Entries fetched in Page 0\n // Total Entries fetched = 50, 49 remaining\n\n // 0(skip) + 50(limit) < 99(total) => Fetch again\n // Second fetch => { skip: 50, limit: 50, total: 99 } => 49 Entries fetched in Page 1\n // Total Entries fetched = 50(Page 0) + 49(Page 1) = 99, 0 remaining\n\n // 50(skip) + 50(limit) > 99(total) => Stop fetching\n if (skip + limit < responseTotal) {\n return await fetchAllEntries({\n client,\n ids,\n locale,\n skip: skip + limit,\n limit,\n responseItems,\n responseIncludes,\n });\n }\n\n const dedupedEntries = uniqueById(responseIncludes?.Entry);\n const dedupedAssets = uniqueById(responseIncludes?.Asset);\n\n return {\n items: responseItems,\n includes: {\n Entry: dedupedEntries,\n Asset: dedupedAssets,\n },\n };\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('size too big') &&\n limit > MIN_FETCH_LIMIT\n ) {\n const newLimit = Math.max(MIN_FETCH_LIMIT, Math.floor(limit / 2));\n return fetchAllEntries({\n client,\n ids,\n locale,\n skip,\n limit: newLimit,\n responseItems,\n });\n }\n\n throw error;\n }\n};\n\nexport const fetchAllAssets = async ({\n client,\n ids,\n locale,\n skip = 0,\n limit = 100,\n responseItems = [],\n}: {\n client: ContentfulClientApi<undefined> | ContentfulClientApi<'WITH_ALL_LOCALES'>;\n ids: string[];\n locale?: string;\n skip?: number;\n limit?: number;\n responseItems?: Asset[];\n}): Promise<{ items: Asset[] }> => {\n try {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!ids.length) {\n return { items: [] };\n }\n\n const query = { 'sys.id[in]': ids, locale, limit, skip };\n\n const { items, total: responseTotal } = await client.getAssets({ ...query });\n\n responseItems.push(...(items as Asset[]));\n\n if (skip + limit < responseTotal) {\n return await fetchAllAssets({\n client,\n ids,\n locale,\n skip: skip + limit,\n limit,\n responseItems,\n });\n }\n\n return {\n items: responseItems,\n };\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('size too big') &&\n limit > MIN_FETCH_LIMIT\n ) {\n const newLimit = Math.max(MIN_FETCH_LIMIT, Math.floor(limit / 2));\n return fetchAllAssets({\n client,\n ids,\n locale,\n skip,\n limit: newLimit,\n responseItems,\n });\n }\n\n throw error;\n }\n};\n","import { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry, Asset } from 'contentful';\nimport {\n extractPrebindingDataByPatternId,\n flattenNestedPatterns,\n generateDefaultDataSourceForPrebindingDefinition,\n isExperienceEntry,\n} from '@/utils';\nimport {\n DeepReference,\n gatherDeepPrebindingReferencesFromExperienceEntry,\n gatherDeepPrebindingReferencesFromPatternEntry,\n gatherDeepReferencesFromExperienceEntry,\n} from '@/deep-binding';\nimport { gatherAutoFetchedReferentsFromIncludes } from './gatherAutoFetchedReferentsFromIncludes';\nimport { fetchAllEntries, fetchAllAssets } from './fetchAllEntities';\n\ntype ClientAndLocaleParams =\n | {\n client: ContentfulClientApi<undefined>;\n locale?: string;\n }\n | {\n client: ContentfulClientApi<'WITH_ALL_LOCALES'>;\n /** When fetching all locales, this may not be defined */\n locale?: undefined;\n };\n\ntype FetchReferencedEntitiesArgs = {\n experienceEntry: Entry | ExperienceEntry;\n} & ClientAndLocaleParams;\n\n/**\n * Fetches all entries and assets from the `dataSource` of the given experience entry. This will\n * also consider deep references that are not listed explicitly but linked through deep binding paths.\n * @param options.client - Instantiated client from the Contentful SDK. If this is using the `withAllLocales` modifier, you may not provide a specific locale.\n * @param options.experienceEntry - Localized experience entry. To localize a multi locale entry, use the `localizeEntity` function.\n * @param options.locale - Retrieve a specific localized version of the referenced entities. Otherwise, it will fallback to the default locale.\n * @returns object with a list of `entries` and a list of `assets`\n */\nexport const fetchReferencedEntities = async ({\n client,\n experienceEntry,\n locale,\n}: FetchReferencedEntitiesArgs) => {\n if (!client) {\n throw new Error(\n 'Failed to fetch experience entities. Required \"client\" parameter was not provided',\n );\n }\n\n if (!isExperienceEntry(experienceEntry)) {\n throw new Error(\n 'Failed to fetch experience entities. Provided \"experienceEntry\" does not match experience entry schema',\n );\n }\n\n const entryIds = new Set<string>();\n const assetIds = new Set<string>();\n\n for (const dataBinding of Object.values((experienceEntry as ExperienceEntry).fields.dataSource)) {\n if (!('sys' in dataBinding)) {\n continue;\n }\n if (dataBinding.sys.linkType === 'Entry') {\n entryIds.add(dataBinding.sys.id);\n }\n if (dataBinding.sys.linkType === 'Asset') {\n assetIds.add(dataBinding.sys.id);\n }\n }\n\n const [entriesResponse, assetsResponse] = await Promise.all([\n fetchAllEntries({ client, ids: [...entryIds], locale }),\n fetchAllAssets({ client, ids: [...assetIds], locale }),\n ]);\n\n const usedPatterns = experienceEntry.fields.usedComponents ?? [];\n const isRenderingExperience = Boolean(!experienceEntry.fields.componentSettings);\n\n const deepReferences: Array<DeepReference> = gatherDeepReferencesFromExperienceEntry(\n experienceEntry as ExperienceEntry,\n );\n\n // If we are previewing a pattern, we want to include the entry itself as well\n const fetchedPatterns = (\n isRenderingExperience ? usedPatterns : [...usedPatterns, experienceEntry]\n ) as Array<ExperienceEntry>;\n const allFetchedPatterns = flattenNestedPatterns(fetchedPatterns);\n const prebindingDataByPatternId = extractPrebindingDataByPatternId(allFetchedPatterns);\n\n // Patterns do not have dataSource stored in their dataSource field, so head entities won't be there and we need to fetch them\n if (!isRenderingExperience) {\n const { dataSource } = generateDefaultDataSourceForPrebindingDefinition(\n experienceEntry.fields.componentSettings?.prebindingDefinitions,\n );\n\n if (Object.keys(dataSource).length) {\n const prebindingEntriesResponse = await fetchAllEntries({\n client,\n ids: Object.values(dataSource).map((link) => link.sys.id),\n locale,\n });\n\n entriesResponse.items.push(...prebindingEntriesResponse.items);\n entriesResponse.includes.Asset.push(...(prebindingEntriesResponse.includes?.Asset ?? []));\n entriesResponse.includes.Entry.push(...(prebindingEntriesResponse.includes?.Entry ?? []));\n }\n }\n\n // normally, for experience entry, there should be no need to call this method, as `includes=2` will have them resolved\n // because the entries used for pre-binding are stored in both - the layout of the experience, as well as the dataSource field\n const deepPrebindingReferences = isRenderingExperience\n ? gatherDeepPrebindingReferencesFromExperienceEntry({\n experienceEntry: experienceEntry as ExperienceEntry,\n fetchedPatterns: allFetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries: entriesResponse.items,\n })\n : // however, for patterns, we have to do it by hand, because a pattern entry doesn't save the pre-binding data neither in the\n // layout nor in the dataSource field.\n // for consistency, as well as to be future safe from the change to \"includes=2\", I added methods for both\n gatherDeepPrebindingReferencesFromPatternEntry({\n patternEntry: experienceEntry as ExperienceEntry,\n fetchedPatterns: allFetchedPatterns,\n prebindingDataByPatternId,\n fetchedLevel1Entries: entriesResponse.items,\n });\n\n const allDeepReferences = [...deepReferences, ...deepPrebindingReferences];\n\n const { autoFetchedReferentAssets, autoFetchedReferentEntries } =\n gatherAutoFetchedReferentsFromIncludes(allDeepReferences, entriesResponse);\n\n // Using client getEntries resolves all linked entry references, so we do not need to resolve entries in usedComponents\n const allResolvedEntries = [\n ...((entriesResponse?.items ?? []) as Entry[]),\n ...((entriesResponse.includes?.Entry ?? []) as Entry[]),\n ...((usedPatterns as ExperienceEntry[]) || []),\n ...autoFetchedReferentEntries,\n ];\n\n const allResolvedAssets = [\n ...((assetsResponse.items ?? []) as Asset[]),\n ...((entriesResponse?.includes?.Asset ?? []) as Asset[]),\n ...autoFetchedReferentAssets,\n ];\n\n return {\n // we have to drop duplicates, becasue of the merge of deepReferences and deepPrebindingReferences above\n // If not, the same entity might appear in this array more than once\n entries: [\n ...new Map(allResolvedEntries.map((entry) => [entry.sys.id, entry])).values(),\n ] as Entry[],\n assets: [\n ...new Map(allResolvedAssets.map((asset) => [asset.sys.id, asset])).values(),\n ] as Asset[],\n };\n};\n","import { ExperienceEntry, Link } from '@/types';\n\n/**\n * The CMA client will automatically replace links with entry references.\n * As we're including all referenced pattern entries in usedComponents, this can lead\n * to a circular reference. This function replaces those with plain links inplace (!).\n *\n * @see https://github.com/contentful/contentful.js/issues/377\n */\nexport const removeCircularPatternReferences = (\n experienceEntry: ExperienceEntry,\n _parentIds?: Set<string>,\n) => {\n const parentIds = _parentIds ?? new Set<string>([experienceEntry.sys.id]);\n const usedComponents = experienceEntry.fields.usedComponents;\n const newUsedComponents = usedComponents?.reduce(\n (acc, linkOrEntry: Link<'Entry'> | ExperienceEntry) => {\n if (!('fields' in linkOrEntry)) {\n // It is a link, we're good\n return [...acc, linkOrEntry];\n }\n const entry = linkOrEntry;\n if (parentIds.has(entry.sys.id)) {\n // It is an entry that already occurred -> turn it into a link to remove the circularity\n const link = {\n sys: {\n id: entry.sys.id,\n linkType: 'Entry',\n type: 'Link',\n },\n } as const;\n return [...acc, link];\n }\n // Remove circularity for its usedComponents as well (inplace)\n removeCircularPatternReferences(entry, new Set([...parentIds, entry.sys.id]));\n return [...acc, entry];\n },\n [] as Array<Link<'Entry'> | ExperienceEntry>,\n );\n // @ts-expect-error - type of usedComponents doesn't yet allow a mixed list of both links and entries\n experienceEntry.fields.usedComponents = newUsedComponents;\n};\n\n/**\n * The CMA client will automatically replace links with entry references if they are available.\n * While we're not fetching the data sources, a self reference would be replaced as the entry is\n * fetched. Any circuar reference in the object breaks SSR where we have to stringify the JSON.\n * This would fail if the object contains circular references.\n */\nexport const removeSelfReferencingDataSource = (experienceEntry: ExperienceEntry) => {\n const dataSources = experienceEntry.fields.dataSource;\n const newDataSource = Object.entries(dataSources).reduce(\n (acc, [key, linkOrEntry]) => {\n if ('fields' in linkOrEntry && linkOrEntry.sys.id === experienceEntry.sys.id) {\n const entry = linkOrEntry as unknown as ExperienceEntry;\n acc[key] = {\n sys: {\n id: entry.sys.id,\n linkType: 'Entry',\n type: 'Link',\n },\n };\n } else {\n const link = linkOrEntry;\n acc[key] = link;\n }\n return acc;\n },\n {} as ExperienceEntry['fields']['dataSource'],\n );\n experienceEntry.fields.dataSource = newDataSource;\n};\n","import { ExperienceEntry } from '@/types';\nimport {\n removeCircularPatternReferences,\n removeSelfReferencingDataSource,\n} from './circularityCheckers';\n\n/**\n * Run additional checks on the references used in the experience entry and\n * process data required for prebinding. This must be used after fetching an\n * experience entry.\n *\n * The changes made to the passed experience entry are done inplace.\n **/\nexport const prepareExperienceEntry = (experienceEntry: ExperienceEntry) => {\n removeCircularPatternReferences(experienceEntry);\n removeSelfReferencingDataSource(experienceEntry);\n};\n","import { createExperience } from './createExperience';\nimport { fetchExperienceEntry } from './fetchExperienceEntry';\nimport { fetchReferencedEntities } from './fetchReferencedEntities';\nimport { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry } from 'contentful';\nimport { prepareExperienceEntry } from './shared/prepareExperienceEntry';\n\nconst errorMessagesWhileFetching = {\n experience: 'Failed to fetch experience',\n experienceReferences: 'Failed to fetch entities, referenced in experience',\n};\n\nconst handleError = (generalMessage: string, error: unknown) => {\n const message = error instanceof Error ? error.message : `Unknown error: ${error}`;\n throw Error(message);\n};\n\ntype FetchBySlugParams = {\n /** instantiated client from the Contentful SDK */\n client: ContentfulClientApi<undefined>;\n /** id of the content type associated with the experience */\n experienceTypeId: string;\n /** slug of the experience (defined in entry settings) */\n slug: string;\n /** locale code to fetch the experience */\n localeCode: string;\n /** if the experience is being loaded in the Contentful Studio editor or not. If true, this function is a noop. */\n isEditorMode?: boolean;\n};\n\n/**\n * Fetches an experience entry by its slug and additionally fetches all its references to return\n * an initilized experience instance.\n * @param {FetchBySlugParams} options - options to fetch the experience\n */\nexport async function fetchBySlug({\n client,\n experienceTypeId,\n slug,\n localeCode,\n isEditorMode,\n}: FetchBySlugParams) {\n // Be a no-op if in editor mode\n if (isEditorMode) return;\n let experienceEntry: Entry | ExperienceEntry | undefined = undefined;\n\n if (!localeCode) {\n throw new Error('Failed to fetch by slug. Required \"localeCode\" parameter was not provided');\n }\n\n try {\n experienceEntry = await fetchExperienceEntry({\n client,\n experienceTypeId,\n locale: localeCode,\n identifier: {\n slug,\n },\n });\n\n if (!experienceEntry) {\n throw new Error(`No experience entry with slug: ${slug} exists`);\n }\n\n prepareExperienceEntry(experienceEntry as ExperienceEntry);\n\n try {\n const { entries, assets } = await fetchReferencedEntities({\n client,\n experienceEntry,\n locale: localeCode,\n });\n\n const experience = createExperience({\n experienceEntry,\n referencedAssets: assets,\n referencedEntries: entries,\n locale: localeCode,\n });\n\n return experience;\n } catch (error) {\n handleError(errorMessagesWhileFetching.experienceReferences, error);\n }\n } catch (error) {\n handleError(errorMessagesWhileFetching.experience, error);\n }\n}\n","import { createExperience } from './createExperience';\nimport { fetchExperienceEntry } from './fetchExperienceEntry';\nimport { fetchReferencedEntities } from './fetchReferencedEntities';\nimport { ExperienceEntry } from '@/types';\nimport { ContentfulClientApi, Entry } from 'contentful';\nimport { prepareExperienceEntry } from './shared/prepareExperienceEntry';\n\nconst errorMessagesWhileFetching = {\n experience: 'Failed to fetch experience',\n experienceReferences: 'Failed to fetch entities, referenced in experience',\n};\n\nconst handleError = (generalMessage: string, error: unknown) => {\n const message = error instanceof Error ? error.message : `Unknown error: ${error}`;\n throw Error(message);\n};\n\ntype FetchByIdParams = {\n /** instantiated client from the Contentful SDK */\n client: ContentfulClientApi<undefined>;\n /** id of the content type associated with the experience */\n experienceTypeId: string;\n /** id of the experience (defined in entry settings) */\n id: string;\n /** locale code to fetch the experience */\n localeCode: string;\n /** if the experience is being loaded in the Contentful Studio editor or not. If true, this function is a noop. */\n isEditorMode?: boolean;\n};\n\n/**\n * Fetches an experience entry by its id and additionally fetches all its references to return\n * an initilized experience instance.\n * @param {FetchByIdParams} options - options to fetch the experience\n */\nexport async function fetchById({\n client,\n experienceTypeId,\n id,\n localeCode,\n isEditorMode,\n}: FetchByIdParams) {\n //Be a no-op if in editor mode\n if (isEditorMode) return;\n let experienceEntry: Entry | ExperienceEntry | undefined = undefined;\n\n if (!localeCode) {\n throw new Error('Failed to fetch by id. Required \"localeCode\" parameter was not provided');\n }\n\n try {\n experienceEntry = await fetchExperienceEntry({\n client,\n experienceTypeId,\n locale: localeCode,\n identifier: {\n id,\n },\n });\n\n if (!experienceEntry) {\n throw new Error(`No experience entry with id: ${id} exists`);\n }\n\n prepareExperienceEntry(experienceEntry as ExperienceEntry);\n\n try {\n const { entries, assets } = await fetchReferencedEntities({\n client,\n experienceEntry,\n locale: localeCode,\n });\n\n const experience = createExperience({\n experienceEntry,\n referencedAssets: assets,\n referencedEntries: entries,\n locale: localeCode,\n });\n\n return experience;\n } catch (error) {\n handleError(errorMessagesWhileFetching.experienceReferences, error);\n }\n } catch (error) {\n handleError(errorMessagesWhileFetching.experience, error);\n }\n}\n"],"names":["treeVisit","MAX_WIDTH_ALLOWED","transformMedia","errorMessagesWhileFetching","handleError"],"mappings":"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"}
|