constructor(path, config) {
		this.skipped = [];

		if (!path) {
			throw new Error('path argument not provided');
		}

		this.config = Object.assign({}, defaultConfig, config);
		if (typeof this.config.tsConfig === 'string') {
			const ts = require('typescript');
			const tsParsedConfig = ts.readJsonConfigFile(this.config.tsConfig, ts.sys.readFile);
			const obj = ts.parseJsonSourceFileConfigFileContent(tsParsedConfig, ts.sys, path_.dirname(config.tsConfig));
			this.config.tsConfig = {
				...obj.raw,
				compilerOptions: obj.options
			};
			log('using tsconfig %o', this.config.tsConfig);
		}

		if (typeof path === 'object' && !Array.isArray(path)) {
			this.tree = path;
			log('using predefined tree %o', path);
			return Promise.resolve(this);
		}

		if (typeof path === 'string') {
			path = [path];
		}

		return tree(path, this.config).then((res) => {
			this.tree = res.tree;
			this.skipped = res.skipped;
			return this;
		});
	}
Class constructor.
@constructor
@api public
@param {String|Array|Object} path
@param {Object} config
@return {Promise}