79 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const { dirname } = require('canonical-path');
 | 
						|
 | 
						|
module.exports = function processPackages() {
 | 
						|
  return {
 | 
						|
    $runAfter: ['extractDecoratedClassesProcessor', 'computeStability'],
 | 
						|
    $runBefore: ['computing-ids', 'generateKeywordsProcessor'],
 | 
						|
    $process(docs) {
 | 
						|
      const packageContentFiles = {};
 | 
						|
      const packageMap = {};
 | 
						|
 | 
						|
      docs = docs.filter(doc => {
 | 
						|
        if (doc.docType === 'package-content') {
 | 
						|
          packageContentFiles[dirname(doc.fileInfo.filePath)] = doc;
 | 
						|
          return false;
 | 
						|
        } else {
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      });
 | 
						|
 | 
						|
      docs.forEach(doc => {
 | 
						|
        if (doc.docType === 'module') {
 | 
						|
          // Convert the doc type from "module" to "package"
 | 
						|
          doc.docType = 'package';
 | 
						|
          // The name is actually the full id
 | 
						|
          doc.name = `@angular/${doc.id}`;
 | 
						|
 | 
						|
          // Partition the exports into groups by type
 | 
						|
          if (doc.exports) {
 | 
						|
            doc.ngmodules = doc.exports.filter(doc => doc.docType === 'ngmodule').sort(byId);
 | 
						|
            doc.classes = doc.exports.filter(doc => doc.docType === 'class').sort(byId);
 | 
						|
            doc.decorators = doc.exports.filter(doc => doc.docType === 'decorator').sort(byId);
 | 
						|
            doc.functions = doc.exports.filter(doc => doc.docType === 'function').sort(byId);
 | 
						|
            doc.structures = doc.exports.filter(doc => doc.docType === 'enum' || doc.docType === 'interface').sort(byId);
 | 
						|
            doc.directives = doc.exports.filter(doc => doc.docType === 'directive').sort(byId);
 | 
						|
            doc.pipes = doc.exports.filter(doc => doc.docType === 'pipe').sort(byId);
 | 
						|
            doc.types = doc.exports.filter(doc => doc.docType === 'type-alias' || doc.docType === 'const').sort(byId);
 | 
						|
            if (doc.exports.every(doc => !!doc.deprecated)) {
 | 
						|
              doc.deprecated = 'all exports of this entry point are deprecated.';
 | 
						|
            }
 | 
						|
          }
 | 
						|
 | 
						|
          // Copy over docs from the PACKAGE.md file that is used to document packages
 | 
						|
          const readmeDoc = packageContentFiles[dirname(doc.fileInfo.filePath)];
 | 
						|
          if (readmeDoc) {
 | 
						|
            doc.shortDescription = readmeDoc.shortDescription;
 | 
						|
            doc.description = readmeDoc.description;
 | 
						|
            doc.see = readmeDoc.see;
 | 
						|
            doc.fileInfo = readmeDoc.fileInfo;
 | 
						|
          }
 | 
						|
 | 
						|
          // Compute the primary/secondary entry point relationships
 | 
						|
          const packageParts = doc.id.split('/');
 | 
						|
          const primaryPackageName = packageParts[0];
 | 
						|
          doc.isPrimaryPackage = packageParts.length === 1;
 | 
						|
          doc.packageInfo = packageMap[primaryPackageName] = packageMap[primaryPackageName] || { primary: undefined, secondary: [] };
 | 
						|
          if (doc.isPrimaryPackage) {
 | 
						|
            doc.packageInfo.primary = doc;
 | 
						|
          } else {
 | 
						|
            doc.packageInfo.secondary.push(doc);
 | 
						|
          }
 | 
						|
        }
 | 
						|
      });
 | 
						|
 | 
						|
      // Update package deprecation status (compared to entry point status)
 | 
						|
      Object.keys(packageMap).forEach(key => {
 | 
						|
        const pkg = packageMap[key];
 | 
						|
        pkg.primary.packageDeprecated = pkg.primary.deprecated !== undefined && pkg.secondary.every(entryPoint => entryPoint.deprecated !== undefined);
 | 
						|
      });
 | 
						|
 | 
						|
      return docs;
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
function byId(a, b) {
 | 
						|
  return a.id > b.id ? 1 : -1;
 | 
						|
}
 |