Introduces a new migration schematic that follows the given migration plan: https://hackmd.io/@alx/S1XKqMZeS. First case: The schematic detects decorated directives which inherit a constructor. The migration ensures that all base classes until the class with the explicit constructor are properly decorated with "@Directive()" or "@Component". In case one of these classes is not decorated, the schematic adds the abstract "@Directive()" decorator automatically. Second case: The schematic detects undecorated declarations and copies the inherited "@Directive()", "@Component" or "@Pipe" decorator to the undecorated derived class. This involves non-trivial import rewriting, identifier aliasing and AOT metadata serializing (as decorators are not always part of source files) PR Close #31650
		
			
				
	
	
		
			29 lines
		
	
	
		
			941 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			941 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. 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
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Template string function that can be used to dedent the resulting
 | |
|  * string literal. The smallest common indentation will be omitted.
 | |
|  */
 | |
| export function dedent(strings: TemplateStringsArray, ...values: any[]) {
 | |
|   let joinedString = '';
 | |
|   for (let i = 0; i < values.length; i++) {
 | |
|     joinedString += `${strings[i]}${values[i]}`;
 | |
|   }
 | |
|   joinedString += strings[strings.length - 1];
 | |
| 
 | |
|   const matches = joinedString.match(/^[ \t]*(?=\S)/gm);
 | |
|   if (matches === null) {
 | |
|     return joinedString;
 | |
|   }
 | |
| 
 | |
|   const minLineIndent = Math.min(...matches.map(el => el.length));
 | |
|   const omitMinIndentRegex = new RegExp(`^[ \\t]{${minLineIndent}}`, 'gm');
 | |
|   return minLineIndent > 0 ? joinedString.replace(omitMinIndentRegex, '') : joinedString;
 | |
| }
 |