UNPKG

@prismicio/types-internal

Version:
56 lines (55 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SliceComparator = void 0; const utils_1 = require("../../utils"); const Changes_1 = require("./Changes"); const Variation_1 = require("./Variation"); function compareSliceMeta(sliceA, sliceB) { const zippedSlices = utils_1.Objects.zipObjects(sliceA, sliceB); return Object.entries(zippedSlices).reduce((acc, [key, value]) => { if (key === `variations`) return acc; if ((value === null || value === void 0 ? void 0 : value.left) === (value === null || value === void 0 ? void 0 : value.right)) return acc; return { ...acc, [key]: value === null || value === void 0 ? void 0 : value.right }; }, {}); } exports.SliceComparator = { compare(sliceA, sliceB) { if (!sliceA && sliceB) return { op: Changes_1.DiffOperation.Added, value: sliceB, }; if (sliceA && !sliceB) return { op: Changes_1.DiffOperation.Removed, }; const diffMeta = compareSliceMeta(sliceA, sliceB); const zippedSlices = utils_1.Objects.zipObjects(sliceA && utils_1.Arrays.toRecord(sliceA.variations, (v) => v.id), sliceB && utils_1.Arrays.toRecord(sliceB.variations, (v) => v.id)); const diffVariations = Object.entries(zippedSlices).reduce((acc, [variationId, value]) => { if (!value) return acc; const vDiff = Variation_1.VariationComparator.compare(value.left, value.right); if (!vDiff) return acc; return { ...acc, [variationId]: vDiff, }; }, {}); const diffSlice = { ...diffMeta, ...(utils_1.Objects.isNotEmpty(diffVariations) ? { variations: diffVariations } : {}), }; if (utils_1.Objects.isNotEmpty(diffSlice)) { return { op: Changes_1.DiffOperation.Updated, value: diffSlice, }; } return undefined; }, };