verb
Version:
A project without documentation is like a project that doesn't exist. Verb solves this by making it dead simple to generate docs, using simple markdown templates, with zero configuration required.
61 lines (51 loc) • 1.81 kB
JavaScript
/**
* Verb <https://github.com/assemble/verb>
* Generate markdown documentation for GitHub projects.
*
* Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors.
* Licensed under the MIT license.
*/
const file = require('fs-utils');
const relative = require('relative');
const _ = require('lodash');
module.exports = function (verb, patterns) {
var obj = {};
var message = function(msg, filepath) {
filepath = relative(process.cwd(), filepath);
verb.verbose.register('loading', verb.extensionType, '>', filepath);
};
// If patterns is defined as an object,
// extend the context with it directly
if (_.isPlainObject(patterns)) {
obj = _.extend(obj, patterns || {});
}
// Else, if patterns is defined as a string,
// assume it's a filepath or glob patterns and
// and try to expand it
if (_.isString(patterns) || _.isArray(patterns)) {
patterns = !Array.isArray(patterns) ? [patterns] : patterns;
patterns.forEach(function(pattern) {
// Don't try to expand if it isn't a glob pattern
var globlike = /[*.?[,{\\\/]/.test(pattern);
if (!globlike) {
// Try to require if it looks like it could be a npm module
try {
_.extend(obj, require(String(pattern)))(verb);
message('foo', pattern);
} catch(e) {}
} else if (globlike) {
file.expand(pattern).map(function (filepath) {
filepath = verb.cwd(filepath);
// Try to require any actual files
try {
_.extend(obj, require(filepath)(verb));
message('loading', filepath);
} catch (e) {
verb.verbose.warn('[verb]: `'+ filepath +'` should export a function with `verb` as the only argument.', e);
}
});
}
});
}
return obj;
};