var _ = require('lodash'); var log = require('winston'); var path = require('canonical-path'); module.exports = { name: 'error-docs', description: 'Compute the various fields for docs in the Error area', runAfter: ['tags-extracted'], init: function(config, injectables) { injectables.value('errorNamespaces', {}); var minerrInfoPath = config.get('processing.errors.minerrInfoPath'); if ( !minerrInfoPath ) { throw new Error('Error in configuration: Please provide a path to the minerr info file (errors.json) ' + 'in the `config.processing.errors.minerrInfoPath` property'); } injectables.value('minerrInfo', require(minerrInfoPath)); }, process: function(docs, partialNames, errorNamespaces, minerrInfo) { // Create error namespace docs and attach error docs to each _.forEach(docs, function(doc) { if ( doc.docType === 'error' ) { // Parse out the error info from the id parts = doc.name.split(':'); doc.namespace = parts[0]; doc.name = parts[1]; var namespaceDoc = errorNamespaces[doc.namespace]; if ( !namespaceDoc ) { // First time we came across this namespace, so create a new one namespaceDoc = errorNamespaces[doc.namespace] = { area: doc.area, name: doc.namespace, errors: [], path: path.dirname(doc.path), outputPath: path.dirname(doc.outputPath) + '.html', docType: 'errorNamespace' }; } // Add this error to the namespace namespaceDoc.errors.push(doc); doc.namespace = namespaceDoc; doc.formattedErrorMessage = minerrInfo.errors[doc.namespace.name][doc.name]; } }); return docs.concat(_.values(errorNamespaces)); } };