36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			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
 | |
|  */
 | |
| import {TNode} from './interfaces/node';
 | |
| 
 | |
| /** Called when directives inject each other (creating a circular dependency) */
 | |
| export function throwCyclicDependencyError(token: any): never {
 | |
|   throw new Error(`Cannot instantiate cyclic dependency! ${token}`);
 | |
| }
 | |
| 
 | |
| /** Called when there are multiple component selectors that match a given node */
 | |
| export function throwMultipleComponentError(tNode: TNode): never {
 | |
|   throw new Error(`Multiple components match node with tagname ${tNode.tagName}`);
 | |
| }
 | |
| 
 | |
| /** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */
 | |
| export function throwErrorIfNoChangesMode(
 | |
|     creationMode: boolean, checkNoChangesMode: boolean, oldValue: any, currValue: any): never|void {
 | |
|   if (checkNoChangesMode) {
 | |
|     let msg =
 | |
|         `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '${oldValue}'. Current value: '${currValue}'.`;
 | |
|     if (creationMode) {
 | |
|       msg +=
 | |
|           ` It seems like the view has been created after its parent and its children have been dirty checked.` +
 | |
|           ` Has it been created in a change detection hook ?`;
 | |
|     }
 | |
|     // TODO: include debug context
 | |
|     throw new Error(msg);
 | |
|   }
 | |
| }
 |