40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Copies over the properties from a doc's alias if it is marked with `@alias`.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								module.exports = function processAliasDocs(getDocFromAlias, log, createDocMessage) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    $runAfter: ['tags-extracted', 'ids-computed'],
							 | 
						||
| 
								 | 
							
								    $runBefore: ['filterPrivateDocs'],
							 | 
						||
| 
								 | 
							
								    propertiesToKeep: [
							 | 
						||
| 
								 | 
							
								      'name', 'id', 'aliases', 'fileInfo', 'startingLine', 'endingLine',
							 | 
						||
| 
								 | 
							
								      'path', 'originalModule', 'outputPath', 'privateExport', 'moduleDoc'
							 | 
						||
| 
								 | 
							
								    ],
							 | 
						||
| 
								 | 
							
								    $process(docs) {
							 | 
						||
| 
								 | 
							
								      docs.forEach(doc => {
							 | 
						||
| 
								 | 
							
								        if (doc.aliasDocId) {
							 | 
						||
| 
								 | 
							
								          const aliasDocs = getDocFromAlias(doc.aliasDocId, doc);
							 | 
						||
| 
								 | 
							
								          if (aliasDocs.length === 1) {
							 | 
						||
| 
								 | 
							
								            const aliasDoc = aliasDocs[0];
							 | 
						||
| 
								 | 
							
								            log.debug('processing alias', doc.id, doc.aliasDocId, aliasDoc.id);
							 | 
						||
| 
								 | 
							
								            // Clean out the unwanted properties from the doc
							 | 
						||
| 
								 | 
							
								            Object.keys(doc).forEach(key => {
							 | 
						||
| 
								 | 
							
								              if (!this.propertiesToKeep.includes(key)) {
							 | 
						||
| 
								 | 
							
								                delete doc[key];
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								            // Copy over all the properties of the alias doc.
							 | 
						||
| 
								 | 
							
								            Object.keys(aliasDoc).forEach(key => {
							 | 
						||
| 
								 | 
							
								              if (!this.propertiesToKeep.includes(key)) {
							 | 
						||
| 
								 | 
							
								                doc[key] = aliasDoc[key];
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								          } else if (aliasDocs.length === 0) {
							 | 
						||
| 
								 | 
							
								            throw new Error(createDocMessage(`There is no doc that matches "@alias ${doc.aliasDocId}"`, doc));
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            throw new Error(createDocMessage(`There is more than one doc that matches "@alias ${doc.aliasDocId}": ${aliasDocs.map(d => d.id).join(', ')}.`, doc));
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 |