| 
									
										
										
										
											2019-06-01 00:56:07 +09: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 {patchEventTarget} from '../common/events'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Zone.__load_patch('EventEmitter', (global: any) => { | 
					
						
							|  |  |  |   // For EventEmitter
 | 
					
						
							|  |  |  |   const EE_ADD_LISTENER = 'addListener'; | 
					
						
							|  |  |  |   const EE_PREPEND_LISTENER = 'prependListener'; | 
					
						
							|  |  |  |   const EE_REMOVE_LISTENER = 'removeListener'; | 
					
						
							|  |  |  |   const EE_REMOVE_ALL_LISTENER = 'removeAllListeners'; | 
					
						
							|  |  |  |   const EE_LISTENERS = 'listeners'; | 
					
						
							|  |  |  |   const EE_ON = 'on'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const compareTaskCallbackVsDelegate = function(task: any, delegate: any) { | 
					
						
							|  |  |  |     // same callback, same capture, same event name, just return
 | 
					
						
							|  |  |  |     return task.callback === delegate || task.callback.listener === delegate; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const eventNameToString = function(eventName: string|Symbol) { | 
					
						
							|  |  |  |     if (typeof eventName === 'string') { | 
					
						
							| 
									
										
										
										
											2019-10-09 17:17:52 +02:00
										 |  |  |       return eventName; | 
					
						
							| 
									
										
										
										
											2019-06-01 00:56:07 +09:00
										 |  |  |     } | 
					
						
							|  |  |  |     if (!eventName) { | 
					
						
							|  |  |  |       return ''; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return eventName.toString().replace('(', '_').replace(')', '_'); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function patchEventEmitterMethods(obj: any) { | 
					
						
							|  |  |  |     const result = patchEventTarget(global, [obj], { | 
					
						
							|  |  |  |       useG: false, | 
					
						
							|  |  |  |       add: EE_ADD_LISTENER, | 
					
						
							|  |  |  |       rm: EE_REMOVE_LISTENER, | 
					
						
							|  |  |  |       prepend: EE_PREPEND_LISTENER, | 
					
						
							|  |  |  |       rmAll: EE_REMOVE_ALL_LISTENER, | 
					
						
							|  |  |  |       listeners: EE_LISTENERS, | 
					
						
							|  |  |  |       chkDup: false, | 
					
						
							|  |  |  |       rt: true, | 
					
						
							|  |  |  |       diff: compareTaskCallbackVsDelegate, | 
					
						
							|  |  |  |       eventNameToString: eventNameToString | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     if (result && result[0]) { | 
					
						
							|  |  |  |       obj[EE_ON] = obj[EE_ADD_LISTENER]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // EventEmitter
 | 
					
						
							|  |  |  |   let events; | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     events = require('events'); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (events && events.EventEmitter) { | 
					
						
							|  |  |  |     patchEventEmitterMethods(events.EventEmitter.prototype); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }); |