| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  | import * as util from 'util' | 
					
						
							| 
									
										
										
										
											2018-09-23 00:28:50 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-29 16:57:32 +02:00
										 |  |  | import { electronBindingSetup } from '@electron/internal/common/electron-binding-setup' | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 10:18:29 -07:00
										 |  |  | const timers = require('timers') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-18 12:37:06 -07:00
										 |  |  | process.electronBinding = electronBindingSetup(process._linkedBinding, process.type) | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | type AnyFn = (...args: any[]) => any | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-14 10:44:21 -08:00
										 |  |  | // setImmediate and process.nextTick makes use of uv_check and uv_prepare to
 | 
					
						
							|  |  |  | // run the callbacks, however since we only run uv loop on requests, the
 | 
					
						
							|  |  |  | // callbacks wouldn't be called until something else activated the uv loop,
 | 
					
						
							|  |  |  | // which would delay the callbacks for arbitrary long time. So we should
 | 
					
						
							|  |  |  | // initiatively activate the uv loop once setImmediate and process.nextTick is
 | 
					
						
							|  |  |  | // called.
 | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  | const wrapWithActivateUvLoop = function <T extends AnyFn> (func: T): T { | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  |   return wrap(func, function (func) { | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  |     return function (this: any, ...args: any[]) { | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  |       process.activateUvLoop() | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  |       return func.apply(this, args) | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  |   }) as T | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Casts to any below for func are due to Typescript not supporting symbols | 
					
						
							|  |  |  |  * in index signatures | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Refs: https://github.com/Microsoft/TypeScript/issues/1863
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function wrap <T extends AnyFn> (func: T, wrapper: (fn: AnyFn) => T) { | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  |   const wrapped = wrapper(func) | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  |   if ((func as any)[util.promisify.custom]) { | 
					
						
							|  |  |  |     (wrapped as any)[util.promisify.custom] = wrapper((func as any)[util.promisify.custom]) | 
					
						
							| 
									
										
										
										
											2016-03-25 12:57:17 -07:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-07-30 03:14:04 +02:00
										 |  |  |   return wrapped | 
					
						
							| 
									
										
										
										
											2016-03-25 12:57:17 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-25 12:57:17 -07:00
										 |  |  | process.nextTick = wrapWithActivateUvLoop(process.nextTick) | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 10:18:29 -07:00
										 |  |  | global.setImmediate = timers.setImmediate = wrapWithActivateUvLoop(timers.setImmediate) | 
					
						
							| 
									
										
										
										
											2016-03-25 12:57:17 -07:00
										 |  |  | global.clearImmediate = timers.clearImmediate | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 10:18:29 -07:00
										 |  |  | // setTimeout needs to update the polling timeout of the event loop, when
 | 
					
						
							|  |  |  | // called under Chromium's event loop the node's event loop won't get a chance
 | 
					
						
							|  |  |  | // to update the timeout, so we have to force the node's event loop to
 | 
					
						
							|  |  |  | // recalculate the timeout in browser process.
 | 
					
						
							|  |  |  | timers.setTimeout = wrapWithActivateUvLoop(timers.setTimeout) | 
					
						
							|  |  |  | timers.setInterval = wrapWithActivateUvLoop(timers.setInterval) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Only override the global setTimeout/setInterval impls in the browser process
 | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | if (process.type === 'browser') { | 
					
						
							| 
									
										
										
										
											2019-06-24 10:18:29 -07:00
										 |  |  |   global.setTimeout = timers.setTimeout | 
					
						
							|  |  |  |   global.setInterval = timers.setInterval | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-04-20 23:55:56 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 14:45:56 -07:00
										 |  |  | if (process.platform === 'win32') { | 
					
						
							|  |  |  |   // Always returns EOF for stdin stream.
 | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |   const { Readable } = require('stream') | 
					
						
							| 
									
										
										
										
											2016-09-07 14:45:56 -07:00
										 |  |  |   const stdin = new Readable() | 
					
						
							|  |  |  |   stdin.push(null) | 
					
						
							| 
									
										
										
										
											2019-02-12 06:22:33 -08:00
										 |  |  |   Object.defineProperty(process, 'stdin', { | 
					
						
							|  |  |  |     configurable: false, | 
					
						
							|  |  |  |     enumerable: true, | 
					
						
							|  |  |  |     get () { | 
					
						
							|  |  |  |       return stdin | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-09-07 14:45:56 -07:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2016-04-20 23:55:56 -07:00
										 |  |  | } |