UNPKG

bit-docs

Version:

The sophisticated JavaScript documentation engine.

84 lines (76 loc) 2.33 kB
var checkDependencies = require("./check-dependencies"); var installPackages = require("./install-packages"); var addPackageConfiguration = require("./add-package-configuration"); var _ = require("lodash"); var path = require("path"); module.exports = function(pathToPackageJSON, siteConfig){ // find package.json .. make site-config var pkg = require(pathToPackageJSON); var siteConfig = _.defaultsDeep(siteConfig || {}, pkg["bit-docs"], { cwd: path.dirname(pathToPackageJSON), dest: "./doc" }); if( ! path.isAbsolute(siteConfig.dest) ) { siteConfig.dest = path.join( path.dirname(pathToPackageJSON), siteConfig.dest ); } var bitDocs = makeBitDocs(siteConfig); var installedPackages; if(!siteConfig.forceBuild || siteConfig.skipInstall) { installedPackages = checkDependencies(siteConfig).then(function(){ }, function(){ return installPackages(siteConfig); }); } else { installedPackages = installPackages(siteConfig); } // go to each dependency's bit-docs.js and call return installedPackages.then(function(){ return addPackageConfiguration(siteConfig, bitDocs); }).then(function(){ return siteConfig; }); }; var makeBitDocs = function(siteConfig){ return { handlers: { finder: function(siteConfig, finder){ siteConfig.finder = finder; }, processor: function(siteConfig, processor){ if(!siteConfig.processors) { siteConfig.processors = []; } siteConfig.processors.push(processor); }, generator: function(siteConfig, generator){ if(!siteConfig.generators) { siteConfig.generators = []; } siteConfig.generators.push(generator); }, tags: function(siteConfig, tags){ siteConfig.tags = _.assign(siteConfig.tags || {}, tags); } }, register: function(name){ if(this.handlers[name]) { return this.handlers[name].apply(this, [siteConfig].concat(Array.from(arguments).slice(1)) ) } else { if(!this.unhandled[name]) { this.unhandled[name] = []; } this.unhandled[name].push(arguments); } }, handle: function(name, callback) { this.handlers[name] = callback; var self = this; if(this.unhandled[name]) { this.unhandled[name].forEach(function(args){ self.handlers[name].apply(self, [siteConfig].concat(Array.from(args)) ) }); } }, unhandled: {} } };