@contentful/experiences-core 1.41.0-dev-20250612T0852-ddef0ff.0 → 1.41.0-dev-20250612T1337-f66b32d.0

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.
@@ -33,8 +33,6 @@ declare abstract class EntityStoreBase {
33
33
  fetchEntry(id: string): Promise<Entry | undefined>;
34
34
  fetchEntries(ids: string[]): Promise<Entry[]>;
35
35
  private getDeepEntry;
36
- private isAsset;
37
- private isEntry;
38
36
  private getEntity;
39
37
  toJSON(): {
40
38
  entryMap: {
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export { treeMap, treeVisit } from './utils/treeTraversal.js';
17
17
  export { isExperienceEntry } from './utils/typeguards.js';
18
18
  export { checkIsAssembly, checkIsAssemblyDefinition, checkIsAssemblyEntry, checkIsAssemblyNode, generateRandomId, getDataFromTree, getInsertionData, getTargetValueInPixels, parseCSSValue } from './utils/utils.js';
19
19
  export { doesMismatchMessageSchema, tryParseMessage, validateExperienceBuilderConfig } from './utils/validations.js';
20
+ export { isAsset, isEntry } from './utils/entityTypeChecks.js';
20
21
  export { builtInStyles, columnsBuiltInStyles, containerBuiltInStyles, dividerBuiltInStyles, optionalBuiltInStyles, sectionBuiltInStyles, singleColumnBuiltInStyles } from './definitions/styles.js';
21
22
  export { EditorModeEntityStore } from './entity/EditorModeEntityStore.js';
22
23
  export { EntityStore } from './entity/EntityStore.js';
package/dist/index.js CHANGED
@@ -2872,18 +2872,41 @@ const transformMedia = (asset, variables, resolveDesignValue, variableName, path
2872
2872
  return asset.fields.file?.url;
2873
2873
  };
2874
2874
 
2875
+ const isAsset = (value) => {
2876
+ return (null !== value &&
2877
+ typeof value === 'object' &&
2878
+ 'sys' in value &&
2879
+ value.sys?.type === 'Asset');
2880
+ };
2881
+ const isEntry = (value) => {
2882
+ return (null !== value &&
2883
+ typeof value === 'object' &&
2884
+ 'sys' in value &&
2885
+ value.sys?.type === 'Entry');
2886
+ };
2887
+
2875
2888
  function getResolvedEntryFromLink(entryOrAsset, path, entityStore) {
2876
- if (entryOrAsset.sys.type === 'Asset') {
2889
+ if (isAsset(entryOrAsset)) {
2877
2890
  return entryOrAsset;
2878
2891
  }
2892
+ else if (!isEntry(entryOrAsset)) {
2893
+ throw new Error(`Expected an Entry or Asset, but got: ${JSON.stringify(entryOrAsset)}`);
2894
+ }
2879
2895
  const value = get(entryOrAsset, path.split('/').slice(2, -1));
2880
- if (value?.sys.type !== 'Link') {
2881
- console.warn(`Expected a link to a reference, but got: ${JSON.stringify(value)}`);
2882
- return;
2896
+ let resolvedEntity;
2897
+ if (isAsset(value) || isEntry(value)) {
2898
+ // In some cases, reference fields are already resolved
2899
+ resolvedEntity = value;
2900
+ }
2901
+ else if (value?.sys.type === 'Link') {
2902
+ // Look up the reference in the entity store
2903
+ resolvedEntity = entityStore.getEntityFromLink(value);
2904
+ if (!resolvedEntity) {
2905
+ return;
2906
+ }
2883
2907
  }
2884
- //Look up the reference in the entity store
2885
- const resolvedEntity = entityStore.getEntityFromLink(value);
2886
- if (!resolvedEntity) {
2908
+ else {
2909
+ console.warn(`Expected a link to a reference, but got: ${JSON.stringify(value)}`);
2887
2910
  return;
2888
2911
  }
2889
2912
  //resolve any embedded links - we currently only support 2 levels deep
@@ -3239,10 +3262,13 @@ class EntityStoreBase {
3239
3262
  }
3240
3263
  entity = resolvedEntity;
3241
3264
  }
3242
- else {
3265
+ else if (isAsset(linkOrEntryOrAsset) || isEntry(linkOrEntryOrAsset)) {
3243
3266
  // We already have the complete entity in preview & delivery (resolved by the CMA client)
3244
3267
  entity = linkOrEntryOrAsset;
3245
3268
  }
3269
+ else {
3270
+ throw new Error(`Unexpected object when resolving entity: ${JSON.stringify(linkOrEntryOrAsset)}`);
3271
+ }
3246
3272
  return entity;
3247
3273
  }
3248
3274
  /**
@@ -3288,14 +3314,14 @@ class EntityStoreBase {
3288
3314
  };
3289
3315
  }
3290
3316
  addEntity(entity) {
3291
- if (this.isAsset(entity)) {
3317
+ if (isAsset(entity)) {
3292
3318
  this.assetMap.set(entity.sys.id, entity);
3293
3319
  }
3294
- else if (this.isEntry(entity)) {
3320
+ else if (isEntry(entity)) {
3295
3321
  this.entryMap.set(entity.sys.id, entity);
3296
3322
  }
3297
3323
  else {
3298
- console.warn('Attempted to add an entity that is neither Asset nor Entry:', entity);
3324
+ throw new Error(`Attempted to add an entity to the store that is neither Asset nor Entry: '${JSON.stringify(entity)}'`);
3299
3325
  }
3300
3326
  }
3301
3327
  async fetchAsset(id) {
@@ -3365,7 +3391,7 @@ class EntityStoreBase {
3365
3391
  resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);
3366
3392
  entityToResolveFieldsFrom = entity; // we move up
3367
3393
  }
3368
- else if (this.isAsset(fieldValue) || this.isEntry(fieldValue)) {
3394
+ else if (isAsset(fieldValue) || isEntry(fieldValue)) {
3369
3395
  resolvedFieldset.push([entityToResolveFieldsFrom, field, _localeQualifier]);
3370
3396
  entityToResolveFieldsFrom = fieldValue; // we move up
3371
3397
  }
@@ -3401,18 +3427,6 @@ class EntityStoreBase {
3401
3427
  const [leafEntity] = resolvedFieldset[resolvedFieldset.length - 1];
3402
3428
  return leafEntity;
3403
3429
  }
3404
- isAsset(value) {
3405
- return (null !== value &&
3406
- typeof value === 'object' &&
3407
- 'sys' in value &&
3408
- value.sys?.type === 'Asset');
3409
- }
3410
- isEntry(value) {
3411
- return (null !== value &&
3412
- typeof value === 'object' &&
3413
- 'sys' in value &&
3414
- value.sys?.type === 'Entry');
3415
- }
3416
3430
  getEntity(type, id) {
3417
3431
  if (type === 'Asset') {
3418
3432
  return this.assetMap.get(id);
@@ -4247,5 +4261,5 @@ async function fetchById({ client, experienceTypeId, id, localeCode, isEditorMod
4247
4261
  }
4248
4262
  }
4249
4263
 
4250
- export { DebugLogger, DeepReference, EditorModeEntityStore, EntityStore, EntityStoreBase, MEDIA_QUERY_REGEXP, VisualEditorMode, addLocale, addMinHeightForEmptyStructures, breakpointsRegistry, buildCfStyles, buildStyleTag, buildTemplate, builtInStyles, calculateNodeDefaultHeight, checkIsAssembly, checkIsAssemblyDefinition, checkIsAssemblyEntry, checkIsAssemblyNode, columnsBuiltInStyles, containerBuiltInStyles, createExperience, debug, defineBreakpoints, defineDesignTokens, designTokensRegistry, detachExperienceStyles, disableDebug, dividerBuiltInStyles, doesMismatchMessageSchema, enableDebug, fetchAllAssets, fetchAllEntries, fetchById, fetchBySlug, fetchExperienceEntry, fetchReferencedEntities, findOutermostCoordinates, flattenDesignTokenRegistry, gatherDeepReferencesFromExperienceEntry, gatherDeepReferencesFromTree, generateRandomId, getActiveBreakpointIndex, getBreakpointRegistration, getDataFromTree, getDesignTokenRegistration, getElementCoordinates, getFallbackBreakpointIndex, getInsertionData, getTargetValueInPixels, getTemplateValue, getValueForBreakpoint, indexByBreakpoint, isCfStyleAttribute, isComponentAllowedOnRoot, isContentfulComponent, isContentfulStructureComponent, isDeepPath, isExperienceEntry, isLink, isLinkToAsset, isPatternComponent, isStructureWithRelativeHeight, isValidBreakpointValue, lastPathNamedSegmentEq, localizeEntity, maybePopulateDesignTokenValue, mediaQueryMatcher, optionalBuiltInStyles, parseCSSValue, parseDataSourcePathIntoFieldset, parseDataSourcePathWithL1DeepBindings, resetBreakpointsRegistry, resetDesignTokenRegistry, resolveBackgroundImageBinding, resolveHyperlinkPattern, runBreakpointsValidation, sanitizeNodeProps, sectionBuiltInStyles, sendMessage, singleColumnBuiltInStyles, stringifyCssProperties, toCSSAttribute, toMediaQuery, transformBoundContentValue, transformVisibility, treeMap, treeVisit, tryParseMessage, validateExperienceBuilderConfig };
4264
+ export { DebugLogger, DeepReference, EditorModeEntityStore, EntityStore, EntityStoreBase, MEDIA_QUERY_REGEXP, VisualEditorMode, addLocale, addMinHeightForEmptyStructures, breakpointsRegistry, buildCfStyles, buildStyleTag, buildTemplate, builtInStyles, calculateNodeDefaultHeight, checkIsAssembly, checkIsAssemblyDefinition, checkIsAssemblyEntry, checkIsAssemblyNode, columnsBuiltInStyles, containerBuiltInStyles, createExperience, debug, defineBreakpoints, defineDesignTokens, designTokensRegistry, detachExperienceStyles, disableDebug, dividerBuiltInStyles, doesMismatchMessageSchema, enableDebug, fetchAllAssets, fetchAllEntries, fetchById, fetchBySlug, fetchExperienceEntry, fetchReferencedEntities, findOutermostCoordinates, flattenDesignTokenRegistry, gatherDeepReferencesFromExperienceEntry, gatherDeepReferencesFromTree, generateRandomId, getActiveBreakpointIndex, getBreakpointRegistration, getDataFromTree, getDesignTokenRegistration, getElementCoordinates, getFallbackBreakpointIndex, getInsertionData, getTargetValueInPixels, getTemplateValue, getValueForBreakpoint, indexByBreakpoint, isAsset, isCfStyleAttribute, isComponentAllowedOnRoot, isContentfulComponent, isContentfulStructureComponent, isDeepPath, isEntry, isExperienceEntry, isLink, isLinkToAsset, isPatternComponent, isStructureWithRelativeHeight, isValidBreakpointValue, lastPathNamedSegmentEq, localizeEntity, maybePopulateDesignTokenValue, mediaQueryMatcher, optionalBuiltInStyles, parseCSSValue, parseDataSourcePathIntoFieldset, parseDataSourcePathWithL1DeepBindings, resetBreakpointsRegistry, resetDesignTokenRegistry, resolveBackgroundImageBinding, resolveHyperlinkPattern, runBreakpointsValidation, sanitizeNodeProps, sectionBuiltInStyles, sendMessage, singleColumnBuiltInStyles, stringifyCssProperties, toCSSAttribute, toMediaQuery, transformBoundContentValue, transformVisibility, treeMap, treeVisit, tryParseMessage, validateExperienceBuilderConfig };
4251
4265
  //# sourceMappingURL=index.js.map