return Promised(when(getRoot(path), function(root) { return when(fs.read(fs.join(root, DESCRIPTOR_FILE)), JSON.parse) }))
'use strict' var fs = require('promised-fs') , packageUtils = require('./common/utils/package') , Trait = require('light-traits').Trait , CONST = require('./strings') , Q = require('q'), when = Q.when, reject = Q.reject , pu = require('promised-utils'), Promised = pu.Promised, all = pu.all , PackageModules = require('./module').PackageModules , DESCRIPTOR_PATH = fs.join(CONST.VERSION, CONST.PREFIX) , DESCRIPTOR_FILE = CONST.DESCRIPTOR_FILE , JSON_PARSE_ERROR = 'Failed to parse package descriptor: ' , ERR_NOT_IN_PACKAGE = CONST.ERR_NOT_IN_PACKAGE , DEPENDENCIES_DIR = 'support' /** * Finds the root of the project package. Optionally takes `path` in the * under the project directory (if not provided `pwd` is used). * @param {String} path * @returns {Promise(String)} */ var getRoot = Promised.sync(function getRoot(path) { path = path ? fs.Path(String(path)) : fs.workingDirectoryPath() return when(path.list(), function(entries) { if (0 <= entries.indexOf(DESCRIPTOR_FILE)) return String(path) var directory = path.directory() if (String(path) == String(directory)) return reject(ERR_NOT_IN_PACKAGE) return getRoot(directory) })
return when(getRoot(path), function onPath(path) { return fs.join(path, DEPENDENCIES_DIR) })
, Module = require('./module').Module , Package = require('./package').Package , EXTENSION = CONST.EXTENSION , SEPARATOR = CONST.SEPARATOR , VERSION_MARK = CONST.VERSION_MARK , VERSION = CONST.VERSION , PREFIX = CONST.PREFIX , LIB = CONST.LIB , TRANSPORT_WRAPPER = CONST.TRANSPORT_WRAPPER , MODULE_NOT_FOUND_ERROR = CONST.MODULE_NOT_FOUND_ERROR , PACKAGE_NOT_FOUND_ERROR = CONST.PACKAGE_NOT_FOUND_ERROR , COMMENTS_MATCH = CONST.COMMENTS_MATCH , REQUIRE_MATCH = CONST.REQUIRE_MATCH , root = CONST.NPM_DIR , DESCRIPTOR_PATH = fs.join(VERSION, PREFIX, CONST.DESCRIPTOR_FILE) var PromisedJSON = Promised(JSON) var RegistryTrait = Trait( { packages: Trait.required , root: root , toJSON: function toJSON() { var json, packages, descriptors if (!this._json) { json = {} packages = this.packages descriptors = Object.keys(packages).map(function (key) { return when ( packages[key].invoke('toJSON') , function (descriptor) { json[key] = descriptor }