export function cordovaRunCommand()

in src/debugger/extension.ts [41:94]


export function cordovaRunCommand(command: string, args: string[], env, cordovaRootPath: string, outputLogger?: DebugConsoleLogger): Promise<string[]> {
    return new Promise<string[]>((resolve, reject) => {
        let isIonicProject = CordovaProjectHelper.isIonicAngularProject(cordovaRootPath);
        let output = "";
        let stderr = "";
        let cordovaProcess = cordovaStartCommand(command, args, env, cordovaRootPath);

        // Prevent these lines to be shown more than once
        // to prevent debug console pollution
        let isShown = {
            "Running command": false,
            "cordova prepare": false,
            "cordova platform add": false,
        };

        cordovaProcess.stderr.on("data", data => {
            stderr += data.toString();
            for (let i = 0; i < errorsToSuppress.length; i++) {
                if (data.toString().indexOf(errorsToSuppress[i]) >= 0) {
                    return;
                }
            }
            outputLogger && outputLogger(data.toString(), "stderr");
        });
        cordovaProcess.stdout.on("data", (data: Buffer) => {
            let str = data.toString().replace(/\u001b/g, "").replace(/\[2K\[G/g, ""); // Erasing `[2K[G` artifacts from DEBUG CONSOLE output
            output += str;
            for (let message in isShown) {
                if (str.indexOf(message) > -1) {
                    if (!isShown[message]) {
                        isShown[message] = true;
                        outputLogger && outputLogger(str, "stdout");
                    }
                    return;
                }
            }
            outputLogger && outputLogger(str, "stdout");

            if (isIonicProject && str.indexOf("LAUNCH SUCCESS") >= 0) {
                resolve([output, stderr]);
            }
        });
        cordovaProcess.on("exit", exitCode => {
            if (exitCode) {
                reject(new Error(localize("CommandFailedWithExitCode", "{0} {1} failed with exit code {2}", command, args.join(" "), exitCode)));
            } else {
                resolve([output, stderr]);
            }
        });
        cordovaProcess.on("error", error => {
            reject(error);
        });
    });
}