Home Reference Source

src/DependencyTree.js

/**
 * @file DependencyNode 依赖树
 * @author exodia(d_xinxin@163.com)
 */

/**
 * @private
 */
export default class DependencyNode {
    data = [];
    children = [];
    parent = null;
    
    appendChild(node) {
        node.parent = this;
        this.children.push(node);
        return node;
    }

    checkForCircular(id) {
        let node = this.parent;
        if (node !== null) {
            let data = node.data;
            for (let i = data.length - 1; i > -1; --i) {
                if (node.data[i].id && node.data[i].id === id) {
                    return node.data[i];
                }

                return node.checkForCircular(id);
            }
        }
        
        return null;
    }

    addData(data, checkForCircular) {
        if (checkForCircular && this.checkForCircular(data.id)) {
            return false;
        }

        this.data.push(data);
        return true;
    }
}