microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
3a0bfdb2c230b6319fe09bfd70e3bae29d0fe088

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/common/node/childProcess.ts

102lines · modeblame

a31b007cunknown10 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
3fb37ad5unknown10 years ago4import * as child_process from "child_process";
5import Q = require("q");
898cb3c6Meena Kunnathur Balakrishnan10 years ago6import {ErrorHelper} from "../error/errorHelper";
7import {InternalErrorCode} from "../error/internalErrorCode";
3fb37ad5unknown10 years ago8
9export interface IExecResult {
10process: child_process.ChildProcess;
11outcome: Q.Promise<Buffer>;
12}
13
45944d15Meena Kunnathur Balakrishnan10 years ago14export interface ISpawnResult {
15spawnedProcess: child_process.ChildProcess;
5b0582f3digeff10 years ago16stdin: NodeJS.WritableStream;
17stdout: NodeJS.ReadableStream;
18stderr: NodeJS.ReadableStream;
3d69a9b4digeff10 years ago19outcome: Q.Promise<void>;
45944d15Meena Kunnathur Balakrishnan10 years ago20}
21
3fb37ad5unknown10 years ago22interface IExecOptions {
23cwd?: string;
24stdio?: any;
25env?: any;
26encoding?: string;
27timeout?: number;
28maxBuffer?: number;
29killSignal?: string;
30}
31
32interface ISpawnOptions {
33cwd?: string;
34stdio?: any;
35env?: any;
36detached?: boolean;
37}
38
39export class ChildProcess {
88246fe9Meena Kunnathur Balakrishnan10 years ago40public static ERROR_TIMEOUT_MILLISECONDS = 300;
3fb37ad5unknown10 years ago41public exec(command: string, options: IExecOptions = {}): IExecResult {
42let outcome = Q.defer<Buffer>();
43
44let execProcess = child_process.exec(command, options, (error: Error, stdout: Buffer, stderr: Buffer) => {
45if (error) {
898cb3c6Meena Kunnathur Balakrishnan10 years ago46outcome.reject(ErrorHelper.getNestedError(error, InternalErrorCode.CommandFailed, command));
3fb37ad5unknown10 years ago47} else {
48outcome.resolve(stdout);
49}
50});
51
52return { process: execProcess, outcome: outcome.promise };
53}
54
55public execToString(command: string, options: IExecOptions = {}): Q.Promise<string> {
2f567aafdlebu10 years ago56return this.exec(command, options).outcome.then(stdout => stdout.toString());
3fb37ad5unknown10 years ago57}
58
88246fe9Meena Kunnathur Balakrishnan10 years ago59public spawnWaitUntilStarted(command: string, args: string[] = [], options: ISpawnOptions = {}): ISpawnResult {
3d69a9b4digeff10 years ago60let outcome = Q.defer<void>();
88246fe9Meena Kunnathur Balakrishnan10 years ago61let spawnedProcess = child_process.spawn(command, args, options);
62spawnedProcess.once("error", (error: any) => {
63outcome.reject(error);
64});
65
66Q.delay(ChildProcess.ERROR_TIMEOUT_MILLISECONDS).done(() => outcome.resolve(void 0));
67
68return {
69spawnedProcess: spawnedProcess,
70stdin: spawnedProcess.stdin,
71stdout: spawnedProcess.stdout,
72stderr: spawnedProcess.stderr,
73outcome: outcome.promise
74};
75}
76
77public spawnWaitUntilFinished(command: string, args: string[] = [], options: ISpawnOptions = {}): ISpawnResult {
78let outcome = Q.defer<void>();
79let commandWithArgs = command + " " + args.join(" ");
3fb37ad5unknown10 years ago80
88246fe9Meena Kunnathur Balakrishnan10 years ago81let spawnedProcess = child_process.spawn(command, args, options);
3fb37ad5unknown10 years ago82spawnedProcess.once("error", (error: any) => {
10873e11digeff10 years ago83outcome.reject(error);
3fb37ad5unknown10 years ago84});
85
88246fe9Meena Kunnathur Balakrishnan10 years ago86spawnedProcess.once("exit", (code: number) => {
87if (code === 0) {
88outcome.resolve(void 0);
89} else {
90outcome.reject(ErrorHelper.getInternalError(InternalErrorCode.CommandFailed, commandWithArgs, code));
91}
92});
c3a987a7Meena Kunnathur Balakrishnan10 years ago93
94return {
95spawnedProcess: spawnedProcess,
96stdin: spawnedProcess.stdin,
97stdout: spawnedProcess.stdout,
98stderr: spawnedProcess.stderr,
88246fe9Meena Kunnathur Balakrishnan10 years ago99outcome: outcome.promise
100};
c3a987a7Meena Kunnathur Balakrishnan10 years ago101}
3fb37ad5unknown10 years ago102}