pkginfo.js |
|
---|---|
/*
* pkginfo.js: Top-level include for the pkginfo module
*
* (C) 2011, Charlie Robbins
*
*/
var fs = require('fs'),
path = require('path');
|
|
function pkginfo ([options, 'property', 'property' ..])@pmodule {Module} Parent module to read from.@options {Object|Array|string} Optional Options used when exposing properties.@arguments {string...} Optional Specified properties to expose.Exposes properties from the package.json file for the parent module on it's exports. Valid usage:
|
var pkginfo = module.exports = function (pmodule, options) {
var args = [].slice.call(arguments, 2).filter(function (arg) {
return typeof arg === 'string';
});
|
Parse variable arguments |
if (Array.isArray(options)) {
|
If the options passed in is an Array assume that it is the Array of properties to expose from the on the package.json file on the parent module. |
options = { include: options };
}
else if (typeof options === 'string') {
|
Otherwise if the first argument is a string, then assume that it is the first property to expose from the package.json file on the parent module. |
options = { include: [options] };
}
|
Setup default options |
options = options || { include: [] };
if (args.length > 0) {
|
If additional string arguments have been passed in then add them to the properties to expose on the parent module. |
options.include = options.include.concat(args);
}
var pkg = pkginfo.read(pmodule, options.dir).package;
Object.keys(pkg).forEach(function (key) {
if (options.include.length > 0 && !~options.include.indexOf(key)) {
return;
}
if (!pmodule.exports[key]) {
pmodule.exports[key] = pkg[key];
}
});
return pkginfo;
};
|
function find (dir)@pmodule {Module} Parent module to read from.@dir {string} Optional Directory to start search from.Searches up the directory tree from |
pkginfo.find = function (pmodule, dir) {
dir = dir || pmodule.filename;
dir = path.dirname(dir);
var files = fs.readdirSync(dir);
if (~files.indexOf('package.json')) {
return path.join(dir, 'package.json');
}
if (dir === '/') {
throw new Error('Could not find package.json up from: ' + dir);
}
return pkginfo.find(dir);
};
|
function read (pmodule, dir)@pmodule {Module} Parent module to read from.@dir {string} Optional Directory to start search from.Searches up the directory tree from |
pkginfo.read = function (pmodule, dir) {
dir = pkginfo.find(pmodule, dir);
var data = fs.readFileSync(dir).toString();
return {
dir: dir,
package: JSON.parse(data)
};
};
|
Call |
pkginfo(module, {
dir: __dirname,
include: ['version'],
target: pkginfo
});
|