HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/bomacon.komma.pro/node_modules/cypress/lib/tasks/unzip.js
'use strict';

var la = require('lazy-ass');
var is = require('check-more-types');
var cp = require('child_process');
var os = require('os');
var yauzl = require('yauzl');
var debug = require('debug')('cypress:cli');
var extract = require('extract-zip');
var Promise = require('bluebird');
var readline = require('readline');

var _require = require('../errors'),
    throwFormErrorText = _require.throwFormErrorText,
    errors = _require.errors;

var fs = require('../fs');
var util = require('../util');

// expose this function for simple testing
var unzip = function unzip(_ref) {
  var zipFilePath = _ref.zipFilePath,
      installDir = _ref.installDir,
      progress = _ref.progress;

  debug('unzipping from %s', zipFilePath);
  debug('into', installDir);

  if (!zipFilePath) {
    throw new Error('Missing zip filename');
  }

  return fs.ensureDirAsync(installDir).then(function () {
    return new Promise(function (resolve, reject) {
      return yauzl.open(zipFilePath, function (err, zipFile) {
        if (err) return reject(err);

        // debug('zipfile.paths:', zipFile)
        // zipFile.on('entry', debug)
        // debug(zipFile.readEntry())
        var total = zipFile.entryCount;

        debug('zipFile entries count', total);

        var started = new Date();

        var percent = 0;
        var count = 0;

        var notify = function notify(percent) {
          var elapsed = +new Date() - +started;

          var eta = util.calculateEta(percent, elapsed);

          progress.onProgress(percent, util.secsRemaining(eta));
        };

        var tick = function tick() {
          count += 1;

          percent = count / total * 100;
          var displayPercent = percent.toFixed(0);

          return notify(displayPercent);
        };

        var unzipWithNode = function unzipWithNode() {
          var endFn = function endFn(err) {
            if (err) {
              return reject(err);
            }

            return resolve();
          };

          var opts = {
            dir: installDir,
            onEntry: tick
          };

          return extract(zipFilePath, opts, endFn);
        };

        //# we attempt to first unzip with the native osx
        //# ditto because its less likely to have problems
        //# with corruption, symlinks, or icons causing failures
        //# and can handle resource forks
        //# http://automatica.com.au/2011/02/unzip-mac-os-x-zip-in-terminal/
        var unzipWithOsx = function unzipWithOsx() {
          var copyingFileRe = /^copying file/;

          var sp = cp.spawn('ditto', ['-xkV', zipFilePath, installDir]);

          // f-it just unzip with node
          sp.on('error', unzipWithNode);

          sp.on('close', function (code) {
            if (code === 0) {
              // make sure we get to 100% on the progress bar
              // because reading in lines is not really accurate
              percent = 100;
              notify(percent);

              return resolve();
            }

            return unzipWithNode();
          });

          return readline.createInterface({
            input: sp.stderr
          }).on('line', function (line) {
            if (copyingFileRe.test(line)) {
              return tick();
            }
          });
        };

        switch (os.platform()) {
          case 'darwin':
            return unzipWithOsx();
          case 'linux':
          case 'win32':
            return unzipWithNode();
          default:
            return;
        }
      });
    });
  });
};

var start = function start(_ref2) {
  var zipFilePath = _ref2.zipFilePath,
      installDir = _ref2.installDir,
      progress = _ref2.progress;

  la(is.unemptyString(installDir), 'missing installDir');
  if (!progress) {
    progress = { onProgress: function onProgress() {
        return {};
      } };
  }

  return fs.pathExists(installDir).then(function (exists) {
    if (exists) {
      debug('removing existing unzipped binary', installDir);

      return fs.removeAsync(installDir);
    }
  }).then(function () {
    return unzip({ zipFilePath: zipFilePath, installDir: installDir, progress: progress });
  }).catch(throwFormErrorText(errors.failedUnzip));
};

module.exports = {
  start: start
};