All files / src/custom-element/helpers/managers getAllChildren.ts

4.55% Statements 1/22
0% Branches 0/6
0% Functions 0/4
4.55% Lines 1/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57                                                                                            1x                    
function getChildren(node: Node): Node[] {
 
    const children: Node[] = [];
 
    if (node instanceof HTMLSlotElement) {
 
        const childNodes = node.assignedNodes({ flatten: true });
 
        children.push(...childNodes);
    }
    else if (node instanceof HTMLElement) {
 
        // Add the nodes of the slots if any
        let slots = (node as any).querySelectorAll('slot');
 
        slots.forEach(slot => {
 
            const childNodes = slot.assignedNodes({ flatten: true });
 
            children.push(...childNodes);
        });
 
        // Add the child nodes that are not in a slot
        let childNodes = Array.from(node.childNodes);
 
        children.push(...childNodes);
 
        if (node.shadowRoot === null) {
 
            return children;
        }
 
        // Do the same for the shadow root
        node = node.shadowRoot;
 
        // It seems that the slots from the shadowRoot and host are the same so we don't need to repeat the operation for the shadowRoot
 
        // Add the child nodes that are not in a slot
        childNodes = Array.from(node.childNodes);
 
        children.push(...childNodes);
    }
 
    return children;
}
 
export default function getAllChildren(node: Node): Node[] {
 
    const children: Node[] = [node];
 
    getChildren(node).forEach((child: Node) => {
 
        children.push(...getAllChildren(child));
    });
 
    return children;
}