@contentful/experiences-core 1.9.1-dev-20240708T2121-56f0f54.0 → 1.10.0-dev-20240711T1608-55292da.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.
@@ -0,0 +1,30 @@
1
+ import { ContentfulClientApi, Entry, Asset } from 'contentful';
2
+ import { MinimalEntryCollection } from './gatherAutoFetchedReferentsFromIncludes.js';
3
+
4
+ declare const fetchAllEntries: ({ client, ids, locale, skip, limit, responseItems, responseIncludes, }: {
5
+ client: ContentfulClientApi<undefined>;
6
+ ids: string[];
7
+ locale?: string;
8
+ skip?: number;
9
+ limit?: number;
10
+ responseItems?: Entry[];
11
+ responseIncludes?: MinimalEntryCollection["includes"];
12
+ }) => Promise<{
13
+ items: Entry[];
14
+ includes: {
15
+ Entry: Entry[];
16
+ Asset: Asset[];
17
+ };
18
+ }>;
19
+ declare const fetchAllAssets: ({ client, ids, locale, skip, limit, responseItems, }: {
20
+ client: ContentfulClientApi<undefined>;
21
+ ids: string[];
22
+ locale?: string;
23
+ skip?: number;
24
+ limit?: number;
25
+ responseItems?: Asset[];
26
+ }) => Promise<{
27
+ items: Asset[];
28
+ }>;
29
+
30
+ export { fetchAllAssets, fetchAllEntries };
@@ -0,0 +1,11 @@
1
+ import { Entry, Asset } from 'contentful';
2
+
3
+ type MinimalEntryCollection = {
4
+ items: Entry[];
5
+ includes: {
6
+ Entry: Entry[];
7
+ Asset: Asset[];
8
+ };
9
+ };
10
+
11
+ export type { MinimalEntryCollection };
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ export { sendMessage } from './communication/sendMessage.js';
21
21
  export { VisualEditorMode } from './enums.js';
22
22
  export { fetchBySlug } from './fetchers/fetchBySlug.js';
23
23
  export { fetchById } from './fetchers/fetchById.js';
24
+ export { fetchAllAssets, fetchAllEntries } from './fetchers/fetchAllEntities.js';
24
25
  export { createExperience } from './fetchers/createExperience.js';
25
26
  export { defineDesignTokens, designTokensRegistry, getDesignTokenRegistration, resetDesignTokenRegistry } from './registries/designTokenRegistry.js';
26
27
  export { breakpointsRegistry, defineBreakpoints, getBreakpointRegistration, resetBreakpointsRegistry, runBreakpointsValidation } from './registries/breakpointsRegistry.js';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import md5 from 'md5';
2
2
  import { z, ZodIssueCode } from 'zod';
3
3
  import { BLOCKS } from '@contentful/rich-text-types';
4
- import { uniqBy } from 'lodash-es';
4
+ import { isArray, uniqBy } from 'lodash-es';
5
5
 
6
6
  const INCOMING_EVENTS = {
7
7
  RequestEditorMode: 'requestEditorMode',
@@ -1051,6 +1051,8 @@ const DefinitionPropertyTypeSchema = z.enum([
1051
1051
  'Media',
1052
1052
  'Object',
1053
1053
  'Hyperlink',
1054
+ 'Array',
1055
+ 'Link',
1054
1056
  ]);
1055
1057
  const DefinitionPropertyKeySchema = z
1056
1058
  .string()
@@ -2028,19 +2030,61 @@ const transformMedia = (asset, variables, resolveDesignValue, variableName, path
2028
2030
  return asset.fields.file?.url;
2029
2031
  };
2030
2032
 
2033
+ function getResolvedEntryFromLink(entryOrAsset, path, entityStore) {
2034
+ if (entryOrAsset.sys.type === 'Asset') {
2035
+ return entryOrAsset;
2036
+ }
2037
+ const value = get(entryOrAsset, path.split('/').slice(2, -1));
2038
+ if (value?.sys.type !== 'Link') {
2039
+ console.warn(`Expected a link to a reference, but got: ${JSON.stringify(value)}`);
2040
+ return;
2041
+ }
2042
+ //Look up the reference in the entity store
2043
+ const resolvedEntity = entityStore.getEntityFromLink(value);
2044
+ return resolvedEntity;
2045
+ }
2046
+
2047
+ function getArrayValue(entryOrAsset, path, entityStore) {
2048
+ if (entryOrAsset.sys.type === 'Asset') {
2049
+ return entryOrAsset;
2050
+ }
2051
+ const arrayValue = get(entryOrAsset, path.split('/').slice(2, -1));
2052
+ if (!isArray(arrayValue)) {
2053
+ console.warn(`Expected a value to be an array, but got: ${JSON.stringify(arrayValue)}`);
2054
+ return;
2055
+ }
2056
+ const result = arrayValue.map((value) => {
2057
+ if (typeof value === 'string') {
2058
+ return value;
2059
+ }
2060
+ else if (value?.sys?.type === 'Link') {
2061
+ return entityStore.getEntityFromLink(value);
2062
+ }
2063
+ else {
2064
+ console.warn(`Expected value to be a string or Link, but got: ${JSON.stringify(value)}`);
2065
+ return undefined;
2066
+ }
2067
+ });
2068
+ return result;
2069
+ }
2070
+
2031
2071
  const transformBoundContentValue = (variables, entityStore, binding, resolveDesignValue, variableName, variableDefinition, path) => {
2032
2072
  const entityOrAsset = entityStore.getEntryOrAsset(binding, path);
2033
2073
  if (!entityOrAsset)
2034
2074
  return;
2035
2075
  switch (variableDefinition.type) {
2036
2076
  case 'Media':
2037
- // If we bound a normal entry field to the media veriable we just return the bound value
2077
+ // If we bound a normal entry field to the media variable we just return the bound value
2038
2078
  if (entityOrAsset.sys.type === 'Entry') {
2039
2079
  return getBoundValue(entityOrAsset, path);
2040
2080
  }
2041
2081
  return transformMedia(entityOrAsset, variables, resolveDesignValue, variableName, path);
2042
2082
  case 'RichText':
2043
2083
  return transformRichText(entityOrAsset, path);
2084
+ case 'Array':
2085
+ return getArrayValue(entityOrAsset, path, entityStore);
2086
+ case 'Link':
2087
+ return getResolvedEntryFromLink(entityOrAsset, path, entityStore);
2044
2088
  default:
2045
2089
  return getBoundValue(entityOrAsset, path);
2046
2090
  }
@@ -2808,8 +2852,8 @@ class EditorModeEntityStore extends EditorEntityStore {
2808
2852
  async fetchEntities({ missingEntryIds, missingAssetIds, skipCache = false, }) {
2809
2853
  // Entries and assets will be stored in entryMap and assetMap
2810
2854
  await Promise.all([
2811
- this.fetchEntries(missingEntryIds, skipCache),
2812
- this.fetchAssets(missingAssetIds, skipCache),
2855
+ super.fetchEntries(missingEntryIds, skipCache),
2856
+ super.fetchAssets(missingAssetIds, skipCache),
2813
2857
  ]);
2814
2858
  }
2815
2859
  getMissingEntityIds(entityLinks) {
@@ -3250,11 +3294,13 @@ const fetchReferencedEntities = async ({ client, experienceEntry, locale, }) =>
3250
3294
  // Using client getEntries resolves all linked entry references, so we do not need to resolve entries in usedComponents
3251
3295
  const allResolvedEntries = [
3252
3296
  ...(entriesResponse?.items ?? []),
3297
+ ...(entriesResponse.includes?.Entry ?? []),
3253
3298
  ...(experienceEntry.fields.usedComponents || []),
3254
3299
  ...autoFetchedReferentEntries,
3255
3300
  ];
3256
3301
  const allResolvedAssets = [
3257
3302
  ...(assetsResponse.items ?? []),
3303
+ ...(entriesResponse?.includes?.Asset ?? []),
3258
3304
  ...autoFetchedReferentAssets,
3259
3305
  ];
3260
3306
  return {
@@ -3366,5 +3412,5 @@ async function fetchById({ client, experienceTypeId, id, localeCode, }) {
3366
3412
  }
3367
3413
  }
3368
3414
 
3369
- export { DeepReference, EditorModeEntityStore, EntityStore, EntityStoreBase, MEDIA_QUERY_REGEXP, VisualEditorMode, addLocale, breakpointsRegistry, buildCfStyles, buildStyleTag, buildTemplate, builtInStyles, calculateNodeDefaultHeight, checkIsAssembly, checkIsAssemblyDefinition, checkIsAssemblyEntry, checkIsAssemblyNode, columnsBuiltInStyles, columnsDefinition, containerBuiltInStyles, containerDefinition, createExperience, defineBreakpoints, defineDesignTokens, designTokensRegistry, detachExperienceStyles, dividerBuiltInStyles, dividerDefinition, doesMismatchMessageSchema, fetchById, fetchBySlug, findOutermostCoordinates, flattenDesignTokenRegistry, gatherDeepReferencesFromExperienceEntry, gatherDeepReferencesFromTree, generateRandomId, getActiveBreakpointIndex, getBreakpointRegistration, getDataFromTree, getDesignTokenRegistration, getElementCoordinates, getFallbackBreakpointIndex, getInsertionData, getTemplateValue, getValueForBreakpoint, indexByBreakpoint, isCfStyleAttribute, isComponentAllowedOnRoot, isContentfulStructureComponent, isDeepPath, isExperienceEntry, isLink, isLinkToAsset, isStructureWithRelativeHeight, lastPathNamedSegmentEq, maybePopulateDesignTokenValue, mediaQueryMatcher, optionalBuiltInStyles, parseDataSourcePathIntoFieldset, parseDataSourcePathWithL1DeepBindings, resetBreakpointsRegistry, resetDesignTokenRegistry, resolveBackgroundImageBinding, resolveHyperlinkPattern, runBreakpointsValidation, sectionBuiltInStyles, sectionDefinition, sendMessage, singleColumnBuiltInStyles, singleColumnDefinition, supportedModes, toCSSAttribute, toCSSString, toMediaQuery, transformBoundContentValue, tryParseMessage, validateExperienceBuilderConfig };
3415
+ export { DeepReference, EditorModeEntityStore, EntityStore, EntityStoreBase, MEDIA_QUERY_REGEXP, VisualEditorMode, addLocale, breakpointsRegistry, buildCfStyles, buildStyleTag, buildTemplate, builtInStyles, calculateNodeDefaultHeight, checkIsAssembly, checkIsAssemblyDefinition, checkIsAssemblyEntry, checkIsAssemblyNode, columnsBuiltInStyles, columnsDefinition, containerBuiltInStyles, containerDefinition, createExperience, defineBreakpoints, defineDesignTokens, designTokensRegistry, detachExperienceStyles, dividerBuiltInStyles, dividerDefinition, doesMismatchMessageSchema, fetchAllAssets, fetchAllEntries, fetchById, fetchBySlug, findOutermostCoordinates, flattenDesignTokenRegistry, gatherDeepReferencesFromExperienceEntry, gatherDeepReferencesFromTree, generateRandomId, getActiveBreakpointIndex, getBreakpointRegistration, getDataFromTree, getDesignTokenRegistration, getElementCoordinates, getFallbackBreakpointIndex, getInsertionData, getTemplateValue, getValueForBreakpoint, indexByBreakpoint, isCfStyleAttribute, isComponentAllowedOnRoot, isContentfulStructureComponent, isDeepPath, isExperienceEntry, isLink, isLinkToAsset, isStructureWithRelativeHeight, lastPathNamedSegmentEq, maybePopulateDesignTokenValue, mediaQueryMatcher, optionalBuiltInStyles, parseDataSourcePathIntoFieldset, parseDataSourcePathWithL1DeepBindings, resetBreakpointsRegistry, resetDesignTokenRegistry, resolveBackgroundImageBinding, resolveHyperlinkPattern, runBreakpointsValidation, sectionBuiltInStyles, sectionDefinition, sendMessage, singleColumnBuiltInStyles, singleColumnDefinition, supportedModes, toCSSAttribute, toCSSString, toMediaQuery, transformBoundContentValue, tryParseMessage, validateExperienceBuilderConfig };
3370
3416
  //# sourceMappingURL=index.js.map