fix(docs-infra): ignore ng*Def members in API docs (#31378)
				
					
				
			`ng*Def` properties (such as `ngInjectorDef`) are not considered part of the public API and should not appear in the API docs. This commit adds a filter to remove these properties from the docs metadata. PR Close #31378
This commit is contained in:
		
							parent
							
								
									efbce7501b
								
							
						
					
					
						commit
						9364a14d36
					
				| @ -29,6 +29,7 @@ module.exports = | |||||||
|         .processor(require('./processors/processClassLikeMembers')) |         .processor(require('./processors/processClassLikeMembers')) | ||||||
|         .processor(require('./processors/markBarredODocsAsPrivate')) |         .processor(require('./processors/markBarredODocsAsPrivate')) | ||||||
|         .processor(require('./processors/filterPrivateDocs')) |         .processor(require('./processors/filterPrivateDocs')) | ||||||
|  |         .processor(require('./processors/filterMembers')) | ||||||
|         .processor(require('./processors/computeSearchTitle')) |         .processor(require('./processors/computeSearchTitle')) | ||||||
|         .processor(require('./processors/simplifyMemberAnchors')) |         .processor(require('./processors/simplifyMemberAnchors')) | ||||||
|         .processor(require('./processors/computeStability')) |         .processor(require('./processors/computeStability')) | ||||||
| @ -176,6 +177,12 @@ module.exports = | |||||||
|           filterContainedDocs.docTypes = API_CONTAINED_DOC_TYPES; |           filterContainedDocs.docTypes = API_CONTAINED_DOC_TYPES; | ||||||
|         }) |         }) | ||||||
| 
 | 
 | ||||||
|  |         .config(function(filterMembers) { | ||||||
|  |           filterMembers.notAllowedPatterns.push( | ||||||
|  |             /^ng[A-Z].*Def$/ | ||||||
|  |           ); | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         .config(function(computePathsProcessor, EXPORT_DOC_TYPES, generateApiListDoc) { |         .config(function(computePathsProcessor, EXPORT_DOC_TYPES, generateApiListDoc) { | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								aio/tools/transforms/angular-api-package/processors/filterMembers.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								aio/tools/transforms/angular-api-package/processors/filterMembers.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | /** | ||||||
|  |  * Filter out members (i.e. static and instance properties and methods) that match specific | ||||||
|  |  * patterns. Patterns can be added (as `RegExp`s) to the `notAllowedPatterns` array. | ||||||
|  |  * | ||||||
|  |  * (By default, no members are excluded.) | ||||||
|  |  */ | ||||||
|  | module.exports = function filterMembers() { | ||||||
|  |   return { | ||||||
|  |     $runAfter: ['processing-docs'], | ||||||
|  |     $runBefore: ['docs-processed'], | ||||||
|  |     notAllowedPatterns: [], | ||||||
|  |     $process(docs) { | ||||||
|  |       const isAllowed = ({name}) => !this.notAllowedPatterns.some(re => re.test(name)); | ||||||
|  | 
 | ||||||
|  |       docs.forEach(doc => { | ||||||
|  |         if (doc.statics) doc.statics = doc.statics.filter(isAllowed); | ||||||
|  |         if (doc.members) doc.members = doc.members.filter(isAllowed); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |   }; | ||||||
|  | }; | ||||||
| @ -0,0 +1,102 @@ | |||||||
|  | const processorFactory = require('./filterMembers'); | ||||||
|  | const testPackage = require('../../helpers/test-package'); | ||||||
|  | const Dgeni = require('dgeni'); | ||||||
|  | 
 | ||||||
|  | describe('filterMembers processor', () => { | ||||||
|  | 
 | ||||||
|  |   it('should be available on the injector', () => { | ||||||
|  |     const dgeni = new Dgeni([testPackage('angular-api-package')]); | ||||||
|  |     const injector = dgeni.configureInjector(); | ||||||
|  |     const processor = injector.get('filterMembers'); | ||||||
|  |     expect(processor.$process).toBeDefined(); | ||||||
|  |     expect(processor.$runAfter).toEqual(['processing-docs']); | ||||||
|  |     expect(processor.$runBefore).toEqual(['docs-processed']); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should remove members that match one of the not allowed patterns', () => { | ||||||
|  |     const processor = processorFactory(); | ||||||
|  |     processor.notAllowedPatterns = [/^foo/, /bar$/]; | ||||||
|  |     const docs = [ | ||||||
|  |       // Doc without members.
 | ||||||
|  |       { }, | ||||||
|  | 
 | ||||||
|  |       // Doc with static members only.
 | ||||||
|  |       { | ||||||
|  |         statics: [ | ||||||
|  |           { name: 'fooStatic' },  // Will be removed.
 | ||||||
|  |           { name: 'FOOStatic' }, | ||||||
|  |           { name: 'barStatic' }, | ||||||
|  |           { name: 'statiCbar' },  // Will be removed.
 | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  | 
 | ||||||
|  |       // Doc with instance members only.
 | ||||||
|  |       { | ||||||
|  |         members: [ | ||||||
|  |           { name: 'fooInstance' },  // Will be removed.
 | ||||||
|  |           { name: 'FOOInstance' }, | ||||||
|  |           { name: 'barInstance' }, | ||||||
|  |           { name: 'instancEbar' },  // Will be removed.
 | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  | 
 | ||||||
|  |       // Doc with both static and instance members.
 | ||||||
|  |       { | ||||||
|  |         statics: [ | ||||||
|  |           { name: 'fooStatic' },  // Will be removed.
 | ||||||
|  |           { name: 'FOOStatic' }, | ||||||
|  |           { name: 'barStatic' }, | ||||||
|  |           { name: 'statiCbar' },  // Will be removed.
 | ||||||
|  |         ], | ||||||
|  |         members: [ | ||||||
|  |           { name: 'fooInstance' },  // Will be removed.
 | ||||||
|  |           { name: 'FOOInstance' }, | ||||||
|  |           { name: 'barInstance' }, | ||||||
|  |           { name: 'instancEbar' },  // Will be removed.
 | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     processor.$process(docs); | ||||||
|  | 
 | ||||||
|  |     expect(docs).toEqual([ | ||||||
|  |       { }, | ||||||
|  |       { | ||||||
|  |         statics: [ { name: 'FOOStatic' }, { name: 'barStatic' } ], | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         members: [ { name: 'FOOInstance' }, { name: 'barInstance' } ], | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         statics: [ { name: 'FOOStatic' }, { name: 'barStatic' } ], | ||||||
|  |         members: [ { name: 'FOOInstance' }, { name: 'barInstance' } ], | ||||||
|  |       }, | ||||||
|  |     ]); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should remove no members by default', () => { | ||||||
|  |     const processor = processorFactory(); | ||||||
|  |     const expectedDocs = [ | ||||||
|  |       { | ||||||
|  |         statics: [ | ||||||
|  |           { name: '' }, | ||||||
|  |           { name: 'foo' }, | ||||||
|  |           { name: '__bar' }, | ||||||
|  |           { name: 'ngBazDef' }, | ||||||
|  |         ], | ||||||
|  |         members: [ | ||||||
|  |           { name: '' }, | ||||||
|  |           { name: 'foo' }, | ||||||
|  |           { name: '__bar' }, | ||||||
|  |           { name: 'ngBazDef' }, | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  |     ]; | ||||||
|  |     const actualDocs = JSON.parse(JSON.stringify(expectedDocs)); | ||||||
|  | 
 | ||||||
|  |     processor.$process(actualDocs); | ||||||
|  | 
 | ||||||
|  |     expect(processor.notAllowedPatterns).toEqual([]); | ||||||
|  |     expect(actualDocs).toEqual(expectedDocs); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user