aboutsummaryrefslogtreecommitdiff
path: root/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/enhanced-resolve/lib/DescriptionFileUtils.js')
-rw-r--r--node_modules/enhanced-resolve/lib/DescriptionFileUtils.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js b/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js
new file mode 100644
index 000000000..084d29ec9
--- /dev/null
+++ b/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js
@@ -0,0 +1,93 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+var forEachBail = require("./forEachBail");
+
+function loadDescriptionFile(resolver, directory, filenames, callback) {
+ (function findDescriptionFile() {
+ forEachBail(filenames, function(filename, callback) {
+ var descriptionFilePath = resolver.join(directory, filename);
+ if(resolver.fileSystem.readJson) {
+ resolver.fileSystem.readJson(descriptionFilePath, function(err, content) {
+ if(err) {
+ if(typeof err.code !== "undefined") return callback();
+ return onJson(err);
+ }
+ onJson(null, content);
+ });
+ } else {
+ resolver.fileSystem.readFile(descriptionFilePath, function(err, content) {
+ if(err) return callback();
+ try {
+ var json = JSON.parse(content);
+ } catch(e) {
+ onJson(e);
+ }
+ onJson(null, json);
+ });
+ }
+
+ function onJson(err, content) {
+ if(err) {
+ if(callback.log)
+ callback.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
+ });
+ }
+ }, function(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)) {
+ var current = content;
+ for(var 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;
+ var i = directory.lastIndexOf("/"),
+ j = directory.lastIndexOf("\\");
+ var 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;