in packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts [214:233]
function areNodesValid(root: Node, nodeBefore: Node, nodeAfter: Node, skipTags: string[]) {
if (!root) {
return false;
} else {
const firstNodeOfRegion = nodeBefore && getNextLeafSibling(root, nodeBefore, skipTags);
const lastNodeOfRegion = nodeAfter && getPreviousLeafSibling(root, nodeAfter, skipTags);
const firstNodeValid =
!nodeBefore || (contains(root, nodeBefore) && contains(root, firstNodeOfRegion));
const lastNodeValid =
!nodeAfter || (contains(root, nodeAfter) && contains(root, lastNodeOfRegion));
const bothValid =
!nodeBefore ||
!nodeAfter ||
(!contains(nodeBefore, nodeAfter, true /*treatSameAsContain*/) &&
!contains(nodeBefore, lastNodeOfRegion, true /*treatSameAsContain*/) &&
!contains(nodeAfter, nodeBefore, true /*treatSameAsContain*/) &&
!contains(nodeAfter, firstNodeOfRegion, true /*treatSameAsContain*/));
return firstNodeValid && lastNodeValid && bothValid;
}
}