UNPKG

@prismicio/client

Version:

The official JavaScript + TypeScript client library for Prismic

53 lines (51 loc) 1.38 kB
//#region src/helpers/mapSliceZone.ts /** * Transforms a Slice Zone using a set of mapping functions, one for each type * of Slice. Mapping functions can be async. * * Whenever possible, use this function on the server to minimize client-side * processing. * * @example * * ```typescript * const mappedSliceZone = await mapSliceZone(page.data.slices, { * code_block: ({ slice }) => ({ * codeHTML: await highlight(slice.primary.code), * }), * }); * ``` */ function mapSliceZone(sliceZone, mappers, context) { return Promise.all(sliceZone.map(async (slice, index, slices) => { const isRestSliceType = "slice_type" in slice; const sliceType = isRestSliceType ? slice.slice_type : slice.type; const mapper = mappers[sliceType]; if (!mapper) return slice; const mapperArgs = { slice, slices, index, context }; let result = await mapper(mapperArgs); if (mapper.length < 1 && (typeof result === "function" || typeof result === "object" && "default" in result)) { result = "default" in result ? result.default : result; result = await result(mapperArgs); } if (isRestSliceType) return { __mapped: true, id: slice.id, slice_type: sliceType, ...result }; else return { __mapped: true, type: sliceType, ...result }; })); } //#endregion exports.mapSliceZone = mapSliceZone; //# sourceMappingURL=mapSliceZone.cjs.map