81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const assert = require('assert-plus');
 | 
						|
const path = require('canonical-path');
 | 
						|
const fs = require('fs-extra');
 | 
						|
 | 
						|
module.exports = function preprocessDartDocData(log, dartPkgConfigInfo) {
 | 
						|
 | 
						|
  const _self = {
 | 
						|
 | 
						|
    entryMap: null,
 | 
						|
 | 
						|
    preprocess: function (dartDocData) {
 | 
						|
      // List of API entities
 | 
						|
      let entryMap = _self.entryMap = new Map(); // used to remove duplicates
 | 
						|
      let numDuplicates = 0;
 | 
						|
 | 
						|
      dartDocData
 | 
						|
        .forEach((e) => {
 | 
						|
          if (entryMap.has(e.href)) {
 | 
						|
            log.debug('Dartdoc preprocessor: duplicate entry for', e.href);
 | 
						|
            numDuplicates++;
 | 
						|
            return true;
 | 
						|
          }
 | 
						|
          // Sample entry (note that enclosedBy is optional):
 | 
						|
          // {
 | 
						|
          //   "name": "Pipe",
 | 
						|
          //   "qualifiedName": "angular2.core.Pipe",
 | 
						|
          //   "href": "angular2.core/Pipe-class.html",
 | 
						|
          //   "type": "class",
 | 
						|
          //   "enclosedBy": {
 | 
						|
          //       "name": "angular2.core",
 | 
						|
          //       "type": "library"
 | 
						|
          //   }
 | 
						|
          // }
 | 
						|
 | 
						|
          // Save original type property since it will be overridden.
 | 
						|
          e.origDartDocType = e.type;
 | 
						|
          const name = e.name;
 | 
						|
          const qualifiedName = e.qualifiedName;
 | 
						|
          const matches = e.href.match(/-([a-z]+)\.html/);
 | 
						|
          let type = matches ? (e.typeFromHref = matches[1]) : e.type;
 | 
						|
          // Conform to TS type names for now.
 | 
						|
          if (type === 'constant') type = 'let';
 | 
						|
 | 
						|
          let libName;
 | 
						|
          e.enclosedByQualifiedName = path.dirname(e.href);
 | 
						|
          if (e.enclosedBy && e.enclosedBy.type === 'library') {
 | 
						|
            e.kind = 'entry-dart-api';
 | 
						|
            libName = e.enclosedBy.name;
 | 
						|
            assert.equal(libName, e.enclosedByQualifiedName, e.kind);
 | 
						|
          } else if (e.origDartDocType === 'library') {
 | 
						|
            e.kind = 'library-dart-api';
 | 
						|
            libName = e.name;
 | 
						|
            e.enclosedByQualifiedName = ''; // Dart libraries can only be at the top level.
 | 
						|
          } else {
 | 
						|
            e.kind = 'subentry-dart-api';
 | 
						|
            libName = e.enclosedByQualifiedName.split('/')[0];
 | 
						|
            assert.equal(path.join(libName, e.enclosedBy.name), e.enclosedByQualifiedName, e);
 | 
						|
          }
 | 
						|
          e.docType = type;
 | 
						|
          e.libName = libName;
 | 
						|
          e.path = e.href;
 | 
						|
          e.title = name;
 | 
						|
          e.layout = false; // To prevent public/docs/_layout.jade from be applied to Dart API pages
 | 
						|
          // Also set above:
 | 
						|
          //   e.kind: one of {library,entry,subentry}-dart-api
 | 
						|
          //   e.enclosedByQualifiedName
 | 
						|
          //   e.origDartDocType
 | 
						|
          //   e.typeFromHref
 | 
						|
          Object.freeze(e);
 | 
						|
          entryMap.set(e.path, e);
 | 
						|
          log.silly('Preproc API entity =', JSON.stringify(e, null, 2));
 | 
						|
        });
 | 
						|
      // There shouldn't be duplicates (hence the warning), but there are:
 | 
						|
      // https://github.com/dart-lang/dartdoc/issues/1197
 | 
						|
      if (numDuplicates) log.warn('Number of duplicate dartdoc entries', numDuplicates);
 | 
						|
    },
 | 
						|
  };
 | 
						|
  return _self;
 | 
						|
}; |