| 
									
										
										
										
											2017-12-01 14:23:03 -08: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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  | * Must use this method for CD (instead of === ) since NaN !== NaN | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | export function isDifferent(a: any, b: any): boolean { | 
					
						
							|  |  |  |   // NaN is the only value that is not equal to itself so the first
 | 
					
						
							|  |  |  |   // test checks if both a and b are not NaN
 | 
					
						
							|  |  |  |   return !(a !== a && b !== b) && a !== b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function stringify(value: any): string { | 
					
						
							|  |  |  |   if (typeof value == 'function') return value.name || value; | 
					
						
							|  |  |  |   if (typeof value == 'string') return value; | 
					
						
							|  |  |  |   if (value == null) return ''; | 
					
						
							|  |  |  |   return '' + value; | 
					
						
							| 
									
										
										
										
											2017-12-13 14:28:36 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  *  Function that throws a "not implemented" error so it's clear certain | 
					
						
							|  |  |  |  *  behaviors/methods aren't yet ready. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @returns Not implemented error | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export function notImplemented(): Error { | 
					
						
							|  |  |  |   return new Error('NotImplemented'); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-01-17 17:55:55 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Flattens an array in non-recursive way. Input arrays are not modified. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export function flatten(list: any[]): any[] { | 
					
						
							|  |  |  |   const result: any[] = []; | 
					
						
							|  |  |  |   let i = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   while (i < list.length) { | 
					
						
							|  |  |  |     const item = list[i]; | 
					
						
							|  |  |  |     if (Array.isArray(item)) { | 
					
						
							|  |  |  |       if (item.length > 0) { | 
					
						
							|  |  |  |         list = item.concat(list.slice(i + 1)); | 
					
						
							|  |  |  |         i = 0; | 
					
						
							|  |  |  |       } else { | 
					
						
							|  |  |  |         i++; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       result.push(item); | 
					
						
							|  |  |  |       i++; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							|  |  |  | } |