39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var _ = require('lodash');
 | 
						|
 | 
						|
module.exports = function cloneExportedFromDocs(modules, EXPORT_DOC_TYPES) {
 | 
						|
  return {
 | 
						|
    $runAfter: ['tags-parsed', 'attachModuleDocs'],
 | 
						|
    $runBefore: ['computing-ids'],
 | 
						|
    $process: function(docs) {
 | 
						|
 | 
						|
      var extraPublicDocs = [];
 | 
						|
 | 
						|
      _.forEach(docs, function(doc) {
 | 
						|
 | 
						|
        if (EXPORT_DOC_TYPES.indexOf(doc.docType) === -1 || !doc.exportedAs) return;
 | 
						|
 | 
						|
        _.forEach(doc.exportedAs, function(exportedAs) {
 | 
						|
          var exportedAsModule = modules[exportedAs];
 | 
						|
 | 
						|
          if (!exportedAsModule) {
 | 
						|
            throw new Error('Missing module definition: "' + doc.exportedAs + '"\n' +
 | 
						|
                            'Referenced in "@exportedAs" tag on class: "' + doc.moduleDoc.id + '/' + doc.name + '"');
 | 
						|
          } else {
 | 
						|
 | 
						|
            if(exportedAsModule !== doc.moduleDoc) {
 | 
						|
              // Add a clone of export to its "exportedAs" module
 | 
						|
              var clonedDoc = _.clone(doc);
 | 
						|
              clonedDoc.moduleDoc = exportedAsModule;
 | 
						|
              exportedAsModule.exports.push(clonedDoc);
 | 
						|
              extraPublicDocs.push(clonedDoc);
 | 
						|
            }
 | 
						|
          }
 | 
						|
        });
 | 
						|
      });
 | 
						|
 | 
						|
      docs = docs.concat(extraPublicDocs);
 | 
						|
 | 
						|
      return docs;
 | 
						|
    }
 | 
						|
  };
 | 
						|
}; |