@prismicio/types-internal
Version:
Prismic types for Custom Types and Prismic Data
56 lines (55 loc) • 2.15 kB
JavaScript
;
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;
},
};