export async function extract7z()

in tool.ts [381:431]


export async function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string> {
    if (process.platform != 'win32') {
        throw new Error('extract7z() not supported on current OS');
    }

    if (!file) {
        throw new Error("parameter 'file' is required");
    }

    console.log(tl.loc('TOOL_LIB_ExtractingArchive'));
    dest = _createExtractFolder(dest);

    let originalCwd = process.cwd();
    try {
        process.chdir(dest);

        if (_7zPath) {
            // extract
            let _7z: trm.ToolRunner = tl.tool(_7zPath)
                .arg('x')         // eXtract files with full paths
                .arg('-bb1')      // -bb[0-3] : set output log level
                .arg('-bd')       // disable progress indicator
                .arg('-sccUTF-8') // set charset for for console input/output
                .arg(file);
            await _7z.exec();
        }
        else {
            // extract
            let escapedScript = path.join(__dirname, 'Invoke-7zdec.ps1').replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
            let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
            let escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
            let command: string = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`
            let powershellPath = tl.which('powershell', true);
            let powershell: trm.ToolRunner = tl.tool(powershellPath)
                .line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command')
                .arg(command);
            powershell.on('stdout', (buffer: Buffer) => {
                process.stdout.write(buffer);
            });
            powershell.on('stderr', (buffer: Buffer) => {
                process.stderr.write(buffer);
            });
            await powershell.exec(<trm.IExecOptions>{ silent: true });
        }
    }
    finally {
        process.chdir(originalCwd);
    }

    return dest;
}