Skip to content

Commit 27a177c

Browse files
committed
warn for page schema conflicts
1 parent d6b7d38 commit 27a177c

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

modules/@apostrophecms/page/index.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,37 @@ module.exports = {
920920
}
921921
}
922922
},
923+
detectSchemaConflicts() {
924+
for (const left of self.typeChoices) {
925+
for (const right of self.typeChoices) {
926+
const diff = compareSchema(left, right);
927+
if (diff.size) {
928+
self.apos.util.warnDev(`The page type "${left.name}" has a conflict with "${right.name}" (${formatDiff(diff)})`);
929+
}
930+
}
931+
}
932+
function compareSchema(left, right) {
933+
const conflicts = new Map();
934+
if (left.name === right.name) {
935+
return conflicts;
936+
}
937+
938+
const leftSchema = self.apos.modules[left.name].schema;
939+
const rightSchema = self.apos.modules[right.name].schema;
940+
for (const leftField of leftSchema) {
941+
const rightField = rightSchema.find(field => field.name === leftField.name);
942+
if (rightField && leftField.type !== rightField.type) {
943+
conflicts.set(leftField.name, [ leftField.type, rightField.type ]);
944+
}
945+
}
946+
947+
return conflicts;
948+
}
949+
function formatDiff(diff) {
950+
return Array.from(diff.entries())
951+
.map(([ entry, [ left, right ] ]) => `${entry}:${left} vs ${entry}:${right}`);
952+
}
953+
},
923954
async manageOrphans() {
924955
const managed = self.apos.doc.getManaged();
925956

0 commit comments

Comments
 (0)