$process: function()

in tools/api-builder/angular.io-package/processors/addJadeDataDocsProcessor.js [85:202]


    $process: function(docs) {
      var extraDocs = [];
      var modules = [];
      var data = {};

      var appDataDoc = {
        id: 'api-list-data',
        aliases: ['api-list-data'],
        docType: 'api-list-data',
        data: data
      };
      extraDocs.push(appDataDoc);

      // create additional doc for auditing
      var appDataAuditDoc = {
        id: 'api-list-audit',
        aliases: ['api-list-audit'],
        docType: 'api-list-audit',
        data: data
      };
      extraDocs.push(appDataAuditDoc);


      /*
      * Create Data for Modules
      *
      * Modules must be public and have content
      */

      _.forEach(docs, function(doc) {
        if (doc.docType === 'module' && !doc.internal && doc.exports.length) {
          modules.push(doc);

          // GET DATA FOR INDEX PAGE OF MODULE SECTION
          var indexPageInfo = [{
            name: 'index',
            title: _.map(path.basename(doc.fileInfo.baseName).split('_'), function(part) {
              return titleCase(part);
            }).join(' '),
            intro: doc.description.replace('"', '\"').replace(/\s*(\r?\n|\r)\s*/g," "),
            docType: 'module'
          }];

          var decorators = {};

          // GET DATA FOR EACH PAGE (CLASS, VARS, FUNCTIONS)
          var modulePageInfo  = _(doc.exports)
          .map(function(exportDoc) {
            // if it ends with "Decorator", we store it in the map
            // to later merge with the token
            if (exportDoc.name.endsWith("Decorator") && exportDoc.callMember) {
              var p = processExportDoc(exportDoc.callMember);
              decorators[exportDoc.name] = {
                stability : p.stability,
                howToUse : p.howToUse,
                whatItDoes : p.whatItDoes,
                security : p.security,
                description : exportDoc.callMember.description,
                docType: 'decorator'
              };
              return null;

            } else {
              var p = processExportDoc(exportDoc);

              // Data inserted into jade-data.template.html
              var dataDoc = {
                name: exportDoc.name + '-' + exportDoc.docType,
                title: exportDoc.name,
                docType: exportDoc.docType,
                exportDoc: exportDoc,
                stability: p.stability,
                howToUse: p.howToUse,
                whatItDoes: p.whatItDoes,
                security: p.security
              };

              if (exportDoc.symbolTypeName) dataDoc.varType = titleCase(exportDoc.symbolTypeName);
              if (exportDoc.originalModule) dataDoc.originalModule = exportDoc.originalModule;

              return dataDoc;
            }
          })
          .filter(function(s) { return !!s; }) // filter out all null values
          .sortBy('name')
          .value();

          // find a matching symbol for every decorator item
          // and merge the data
          _.forEach(Object.keys(decorators), function(name) {
            var varToken = name.split("Decorator")[0];
            var c = modulePageInfo.filter(function(n) { return n.exportDoc.name === varToken; });

            c[0].docType = decorators[name].docType;
            Object.assign(c[0].exportDoc, decorators[name]);
          });

          doc.childPages = modulePageInfo;

          // ADD TO APP DATA DOC
          data[doc.id] = modulePageInfo;

          // COMBINE WITH INDEX PAGE DATA
          var allPageData = indexPageInfo.concat(modulePageInfo);

          // PUSH JADE DATA DOC TO EXTRA DOCS ARRAY
          extraDocs.push({
            id: doc.id + "-data",
            aliases: [doc.id + "-data"],
            docType: 'jade-data',
            originalDoc: doc,
            data: allPageData
          });
        }
      });

      return docs.concat(extraDocs);
    }