30 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google LLC All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Use of this source code is governed by an MIT-style license that can be
							 | 
						||
| 
								 | 
							
								 * found in the LICENSE file at https://angular.io/license
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Verify that all functions in the output have a unique name.
							 | 
						||
| 
								 | 
							
								 * @param output Compiler output.
							 | 
						||
| 
								 | 
							
								 * @param functionNamePattern Only match function whose names match this pattern.
							 | 
						||
| 
								 | 
							
								 *    Will be converted into a regular expression.
							 | 
						||
| 
								 | 
							
								 * @param expectedCount Expected number of functions.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								export function verifyUniqueFunctions(
							 | 
						||
| 
								 | 
							
								    output: string, functionNamePattern?: string, expectedCount?: number): boolean {
							 | 
						||
| 
								 | 
							
								  const pattern = functionNamePattern ? new RegExp(functionNamePattern) : null;
							 | 
						||
| 
								 | 
							
								  const allTemplateFunctionsNames = (output.match(/function ([^\s(]+)/g) || [])
							 | 
						||
| 
								 | 
							
								                                        .map(match => match.slice(9))
							 | 
						||
| 
								 | 
							
								                                        .filter(name => !pattern || pattern.test(name));
							 | 
						||
| 
								 | 
							
								  const uniqueTemplateFunctionNames = new Set(allTemplateFunctionsNames);
							 | 
						||
| 
								 | 
							
								  const lengthMatches = allTemplateFunctionsNames.length === uniqueTemplateFunctionNames.size;
							 | 
						||
| 
								 | 
							
								  const expectedCountMatches =
							 | 
						||
| 
								 | 
							
								      (expectedCount == null ? allTemplateFunctionsNames.length > 0 :
							 | 
						||
| 
								 | 
							
								                               allTemplateFunctionsNames.length === expectedCount);
							 | 
						||
| 
								 | 
							
								  return lengthMatches && expectedCountMatches &&
							 | 
						||
| 
								 | 
							
								      allTemplateFunctionsNames.every(name => uniqueTemplateFunctionNames.has(name));
							 | 
						||
| 
								 | 
							
								}
							 |