73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
module.exports = function processNgModuleDocs(getDocFromAlias, createDocMessage, log) {
 | 
						|
  return {
 | 
						|
    $runAfter: ['extractDecoratedClassesProcessor', 'computeIdsProcessor'],
 | 
						|
    $runBefore: ['createSitemap'],
 | 
						|
    exportDocTypes: ['directive', 'pipe'],
 | 
						|
    $process(docs) {
 | 
						|
      // Match all the directives/pipes to their module
 | 
						|
      const errors = [];
 | 
						|
      docs.forEach(doc => {
 | 
						|
        if (this.exportDocTypes.indexOf(doc.docType) !== -1) {
 | 
						|
          if (!doc.ngModules || doc.ngModules.length === 0) {
 | 
						|
            errors.push(createDocMessage(`"${doc.id}" has no @ngModule tag. Docs of type "${doc.docType}" must have this tag.`, doc));
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          doc.ngModules.forEach((ngModule, index) => {
 | 
						|
 | 
						|
            const ngModuleDocs = getDocFromAlias(ngModule, doc);
 | 
						|
 | 
						|
            if (ngModuleDocs.length === 0) {
 | 
						|
              errors.push(createDocMessage(`"@ngModule ${ngModule}" does not match a public NgModule`, doc));
 | 
						|
              return;
 | 
						|
            }
 | 
						|
 | 
						|
            if (ngModuleDocs.length > 1) {
 | 
						|
              errors.push(createDocMessage(`"@ngModule ${ngModule}" is ambiguous. Matches: ${ngModuleDocs.map(d => d.id).join(', ')}`, doc));
 | 
						|
              return;
 | 
						|
            }
 | 
						|
 | 
						|
            const ngModuleDoc = ngModuleDocs[0];
 | 
						|
            const containerName = getContainerName(doc.docType);
 | 
						|
            const container = ngModuleDoc[containerName] = ngModuleDoc[containerName] || [];
 | 
						|
            container.push(doc);
 | 
						|
 | 
						|
            doc.ngModules[index] = ngModuleDoc;
 | 
						|
          });
 | 
						|
        }
 | 
						|
      });
 | 
						|
 | 
						|
      if (errors.length) {
 | 
						|
        errors.forEach(error => log.error(error));
 | 
						|
        throw new Error('Failed to process NgModule relationships.');
 | 
						|
      }
 | 
						|
 | 
						|
      docs.forEach(doc => {
 | 
						|
        if (doc.docType === 'ngmodule') {
 | 
						|
          Object.keys(doc.ngmoduleOptions).forEach(key => {
 | 
						|
            const value = doc.ngmoduleOptions[key];
 | 
						|
            if (value && !Array.isArray(value)) {
 | 
						|
              doc.ngmoduleOptions[key] = [value];
 | 
						|
            }
 | 
						|
          });
 | 
						|
          this.exportDocTypes.forEach(type => {
 | 
						|
            const containerName = getContainerName(type);
 | 
						|
            const container = doc[containerName];
 | 
						|
            if (container) {
 | 
						|
              container.sort(byId);
 | 
						|
            }
 | 
						|
          });
 | 
						|
        }
 | 
						|
      });
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
function getContainerName(docType) {
 | 
						|
  return docType + 's';
 | 
						|
}
 | 
						|
 | 
						|
function byId(a, b) {
 | 
						|
  return a.id > b.id ? 1 : -1;
 | 
						|
}
 |