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)); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  | }; |