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.js96
1 files changed, 96 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 00000000..8cca5dbf
--- /dev/null
+++ b/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js
@@ -0,0 +1,96 @@
+/*
+ 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;