| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const forEachBail = require("./forEachBail");function loadDescriptionFile(	resolver,	directory,	filenames,	resolveContext,	callback) {	(function findDescriptionFile() {		forEachBail(			filenames,			(filename, callback) => {				const descriptionFilePath = resolver.join(directory, filename);				if (resolver.fileSystem.readJson) {					resolver.fileSystem.readJson(descriptionFilePath, (err, content) => {						if (err) {							if (typeof err.code !== "undefined") return callback();							return onJson(err);						}						onJson(null, content);					});				} else {					resolver.fileSystem.readFile(descriptionFilePath, (err, content) => {						if (err) return callback();						let json;						try {							json = JSON.parse(content);						} catch (e) {							onJson(e);						}						onJson(null, json);					});				}				function onJson(err, content) {					if (err) {						if (resolveContext.log)							resolveContext.log(								descriptionFilePath + " (directory description file): " + err							);						else							err.message =								descriptionFilePath + " (directory description file): " + err;						return callback(err);					}					callback(null, {						content: content,						directory: directory,						path: descriptionFilePath					});				}			},			(err, result) => {				if (err) return callback(err);				if (result) {					return callback(null, result);				} else {					directory = cdUp(directory);					if (!directory) {						return callback();					} else {						return findDescriptionFile();					}				}			}		);	})();}function getField(content, field) {	if (!content) return undefined;	if (Array.isArray(field)) {		let current = content;		for (let j = 0; j < field.length; j++) {			if (current === null || typeof current !== "object") {				current = null;				break;			}			current = current[field[j]];		}		if (typeof current === "object") {			return current;		}	} else {		if (typeof content[field] === "object") {			return content[field];		}	}}function cdUp(directory) {	if (directory === "/") return null;	const i = directory.lastIndexOf("/"),		j = directory.lastIndexOf("\\");	const p = i < 0 ? j : j < 0 ? i : i < j ? j : i;	if (p < 0) return null;	return directory.substr(0, p || 1);}exports.loadDescriptionFile = loadDescriptionFile;exports.getField = getField;exports.cdUp = cdUp;
 |