| |
| |
| |
| |
| |
| "use strict"; |
|
|
| const forEachBail = require("./forEachBail"); |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| function cdUp(directory) { |
| if (directory === "/") return null; |
| const i = directory.lastIndexOf("/"); |
| const j = directory.lastIndexOf("\\"); |
| const path = i < 0 ? j : j < 0 ? i : i < j ? j : i; |
| if (path < 0) return null; |
| return directory.slice(0, path || 1); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| function loadDescriptionFile( |
| resolver, |
| directory, |
| filenames, |
| oldInfo, |
| resolveContext, |
| callback, |
| ) { |
| (function findDescriptionFile() { |
| if (oldInfo && oldInfo.directory === directory) { |
| |
| return callback(null, oldInfo); |
| } |
| forEachBail( |
| filenames, |
| |
| |
| |
| |
| |
| (filename, callback) => { |
| const descriptionFilePath = resolver.join(directory, filename); |
|
|
| |
| |
| |
| |
| |
| function onJson(err, resolvedContent) { |
| 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: (resolvedContent), |
| directory, |
| path: descriptionFilePath, |
| }); |
| } |
|
|
| if (resolver.fileSystem.readJson) { |
| resolver.fileSystem.readJson(descriptionFilePath, (err, content) => { |
| if (err) { |
| if ( |
| typeof ( (err).code) !== |
| "undefined" |
| ) { |
| if (resolveContext.missingDependencies) { |
| resolveContext.missingDependencies.add(descriptionFilePath); |
| } |
| return callback(); |
| } |
| if (resolveContext.fileDependencies) { |
| resolveContext.fileDependencies.add(descriptionFilePath); |
| } |
| return onJson(err); |
| } |
| if (resolveContext.fileDependencies) { |
| resolveContext.fileDependencies.add(descriptionFilePath); |
| } |
| onJson(null, content); |
| }); |
| } else { |
| resolver.fileSystem.readFile(descriptionFilePath, (err, content) => { |
| if (err) { |
| if (resolveContext.missingDependencies) { |
| resolveContext.missingDependencies.add(descriptionFilePath); |
| } |
| return callback(); |
| } |
| if (resolveContext.fileDependencies) { |
| resolveContext.fileDependencies.add(descriptionFilePath); |
| } |
|
|
| |
| let json; |
|
|
| if (content) { |
| try { |
| json = JSON.parse(content.toString()); |
| } catch ( err_) { |
| return onJson( (err_)); |
| } |
| } else { |
| return onJson(new Error("No content in file")); |
| } |
|
|
| onJson(null, json); |
| }); |
| } |
| }, |
| |
| |
| |
| |
| |
| (err, result) => { |
| if (err) return callback(err); |
| if (result) return callback(null, result); |
| const dir = cdUp(directory); |
| if (!dir) { |
| return callback(); |
| } |
| directory = dir; |
| 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]] |
| ); |
| } |
| return current; |
| } |
| return content[field]; |
| } |
|
|
| module.exports.cdUp = cdUp; |
| module.exports.getField = getField; |
| module.exports.loadDescriptionFile = loadDescriptionFile; |
|
|