project/lib/graph/providers/DependencyTree.js

/**
 * Tree node
 *
 * @public
 * @class
 * @typedef {object} @ui5/project/graph/providers/DependencyTree~TreeNode
 * @property {string} node.id Unique ID for the project
 * @property {string} node.version Version of the project
 * @property {string} node.path File System path to access the projects resources
 * @property {object|object[]} [node.configuration]
 *	Configuration object or array of objects to use instead of reading from a configuration file
 * @property {string} [node.configPath] Configuration file to use instead the default ui5.yaml
 * @property {@ui5/project/graph/providers/DependencyTree~TreeNode[]} dependencies
 */

/**
 * Helper module to create a [@ui5/project/graph/ProjectGraph]{@link @ui5/project/graph/ProjectGraph}
 * from a dependency tree as returned by translators.
 *
 * @public
 * @class
 * @alias @ui5/project/graph/providers/DependencyTree
 */
class DependencyTree {
	/**
	 * @param {object} options
	 * @param {@ui5/project/graph/providers/DependencyTree~TreeNode} options.dependencyTree
 	 * 		Dependency tree as returned by a translator
	 * @param {object} [options.rootConfiguration]
	 *		Configuration object to use for the root module instead of reading from a configuration file
	 * @param {string} [options.rootConfigPath]
	 *		Configuration file to use for the root module instead the default ui5.yaml
	 */
	constructor({dependencyTree, rootConfiguration, rootConfigPath}) {
		if (!dependencyTree) {
			throw new Error(`Failed to instantiate DependencyTree provider: Missing parameter 'dependencyTree'`);
		}
		this._tree = dependencyTree;
		if (rootConfiguration) {
			this._tree.configuration = rootConfiguration;
		}
		if (rootConfigPath) {
			this._tree.configPath = rootConfigPath;
		}
	}

	async getRootNode() {
		return this._tree;
	}

	async getDependencies(node) {
		if (node.deduped || !node.dependencies) {
			return [];
		}
		return node.dependencies;
	}
}

export default DependencyTree;