mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | /** | ||
|  |  * Copyright (c) Microsoft Corporation. | ||
|  |  * | ||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  |  * you may not use this file except in compliance with the License. | ||
|  |  * You may obtain a copy of the License at | ||
|  |  * | ||
|  |  * http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  * Unless required by applicable law or agreed to in writing, software | ||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  * See the License for the specific language governing permissions and | ||
|  |  * limitations under the License. | ||
|  |  */ | ||
|  | import type { SpawnOptions } from 'child_process'; | ||
|  | import { spawn } from 'child_process'; | ||
|  | import debugLogger from 'debug'; | ||
|  | 
 | ||
|  | const debugExec = debugLogger('itest:exec'); | ||
|  | const debugExecStdout = debugLogger('itest:exec:stdout'); | ||
|  | const debugExecStderr = debugLogger('itest:exec:stderr'); | ||
|  | 
 | ||
|  | export function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<{stdout: string, stderr: string, code: number | null, error?: Error}> { | ||
|  |   // debugExec(`CWD: ${options.cwd || process.cwd()}`);
 | ||
|  |   // debugExec(`ENV: ${Object.entries(options.env || {}).map(([key, value]) => `${key}=${value}`).join(' ')}`);
 | ||
|  |   debugExec([cmd, ...args].join(' ')); | ||
|  |   const p = spawn(cmd, args, Object.assign({ windowsHide: true }, options)); | ||
|  | 
 | ||
|  |   return new Promise(resolve => { | ||
|  |     let stdout = ''; | ||
|  |     let stderr = ''; | ||
|  |     if (p.stdout) { | ||
|  |       p.stdout.on('data', data => { | ||
|  |         debugExecStdout(data.toString()); | ||
|  |         stdout += data; | ||
|  |       }); | ||
|  |     } | ||
|  |     if (p.stderr) { | ||
|  |       p.stderr.on('data', data => { | ||
|  |         debugExecStderr(data.toString()); | ||
|  |         stderr += data; | ||
|  |       }); | ||
|  |     } | ||
|  |     p.on('close', code => resolve({ stdout, stderr, code })); | ||
|  |     p.on('error', error => resolve({ stdout, stderr, code: 0, error })); | ||
|  |   }); | ||
|  | } |