2018-04-04 21:21:12 -07:00
/**
* @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 (
2018-11-21 21:14:06 -08:00
creationMode : boolean , oldValue : any , currValue : any ) : never | void {
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 ?` ;
2018-04-04 21:21:12 -07:00
}
2018-11-21 21:14:06 -08:00
// TODO: include debug context
throw new Error ( msg );
2018-04-04 21:21:12 -07:00
}