cypress 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/exec/spawn.js CHANGED
@@ -1,23 +1,32 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  var _ = require('lodash');
4
+
4
5
  var os = require('os');
6
+
5
7
  var cp = require('child_process');
8
+
6
9
  var path = require('path');
10
+
7
11
  var Promise = require('bluebird');
12
+
8
13
  var debug = require('debug')('cypress:cli');
14
+
9
15
  var debugElectron = require('debug')('cypress:electron');
10
16
 
11
17
  var util = require('../util');
18
+
12
19
  var state = require('../tasks/state');
20
+
13
21
  var xvfb = require('./xvfb');
22
+
14
23
  var verify = require('../tasks/verify');
24
+
15
25
  var errors = require('../errors');
16
26
 
17
27
  var isXlibOrLibudevRe = /^(?:Xlib|libudev)/;
18
28
  var isHighSierraWarningRe = /\*\*\* WARNING/;
19
29
  var isRenderWorkerRe = /\.RenderWorker-/;
20
-
21
30
  var GARBAGE_WARNINGS = [isXlibOrLibudevRe, isHighSierraWarningRe, isRenderWorkerRe];
22
31
 
23
32
  var isGarbageLineWarning = function isGarbageLineWarning(str) {
@@ -41,11 +50,11 @@ function needsEverythingPipedDirectly() {
41
50
  function getStdio(needsXvfb) {
42
51
  if (needsEverythingPipedDirectly()) {
43
52
  return 'pipe';
44
- }
45
-
46
- // https://github.com/cypress-io/cypress/issues/921
53
+ } // https://github.com/cypress-io/cypress/issues/921
47
54
  // https://github.com/cypress-io/cypress/issues/1143
48
55
  // https://github.com/cypress-io/cypress/issues/1745
56
+
57
+
49
58
  if (needsStderrPiped(needsXvfb)) {
50
59
  // returning pipe here so we can massage stderr
51
60
  // and remove garbage from Xlib and libuv
@@ -58,10 +67,8 @@ function getStdio(needsXvfb) {
58
67
 
59
68
  module.exports = {
60
69
  isGarbageLineWarning: isGarbageLineWarning,
61
-
62
70
  start: function start(args) {
63
71
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
64
-
65
72
  var needsXvfb = xvfb.isNeeded();
66
73
  var executable = state.getPathToExecutable(state.getBinaryDir());
67
74
 
@@ -69,16 +76,14 @@ module.exports = {
69
76
  executable = path.resolve(util.getEnv('CYPRESS_RUN_BINARY'));
70
77
  }
71
78
 
72
- debug('needs to start own Xvfb?', needsXvfb);
73
-
74
- // 1. Start arguments with "--" so Electron knows these are OUR
79
+ debug('needs to start own Xvfb?', needsXvfb); // 1. Start arguments with "--" so Electron knows these are OUR
75
80
  // arguments and does not try to sanitize them. Otherwise on Windows
76
81
  // an url in one of the arguments crashes it :(
77
82
  // https://github.com/cypress-io/cypress/issues/5466
78
-
79
83
  // 2. Always push cwd into the args
80
84
  // which additionally acts as a signal to the
81
85
  // binary that it was invoked through the NPM module
86
+
82
87
  args = ['--'].concat(args, '--cwd', process.cwd());
83
88
 
84
89
  _.defaults(options, {
@@ -90,7 +95,6 @@ module.exports = {
90
95
 
91
96
  var spawn = function spawn() {
92
97
  var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
93
-
94
98
  return new Promise(function (resolve, reject) {
95
99
  _.defaults(overrides, {
96
100
  onStderrData: false,
@@ -102,33 +106,35 @@ module.exports = {
102
106
  // the launch cmd to be 'npm run dev'
103
107
  executable = 'node';
104
108
  args.unshift(path.resolve(__dirname, '..', '..', '..', 'scripts', 'start.js'));
105
-
106
109
  debug('in dev mode the args became %o', args);
107
110
  }
108
111
 
109
112
  var onStderrData = overrides.onStderrData,
110
113
  electronLogging = overrides.electronLogging;
111
-
112
114
  var envOverrides = util.getEnvOverrides(options);
115
+
113
116
  var electronArgs = _.clone(args);
117
+
114
118
  var node11WindowsFix = isPlatform('win32');
115
119
 
116
120
  if (!options.dev && verify.needsSandbox()) {
117
121
  // this is one of the Electron's command line switches
118
122
  // thus it needs to be before "--" separator
119
123
  electronArgs.unshift('--no-sandbox');
120
- }
124
+ } // strip dev out of child process options
121
125
 
122
- // strip dev out of child process options
123
- var stdioOptions = _.pick(options, 'env', 'detached', 'stdio');
124
126
 
125
- // figure out if we're going to be force enabling or disabling colors.
127
+ var stdioOptions = _.pick(options, 'env', 'detached', 'stdio'); // figure out if we're going to be force enabling or disabling colors.
126
128
  // also figure out whether we should force stdout and stderr into thinking
127
129
  // it is a tty as opposed to a pipe.
130
+
131
+
128
132
  stdioOptions.env = _.extend({}, stdioOptions.env, envOverrides);
129
133
 
130
134
  if (node11WindowsFix) {
131
- stdioOptions = _.extend({}, stdioOptions, { windowsHide: false });
135
+ stdioOptions = _.extend({}, stdioOptions, {
136
+ windowsHide: false
137
+ });
132
138
  }
133
139
 
134
140
  if (electronLogging) {
@@ -143,16 +149,18 @@ module.exports = {
143
149
 
144
150
  debug('spawning Cypress with executable: %s', executable);
145
151
  debug('spawn args %o %o', electronArgs, _.omit(stdioOptions, 'env'));
146
-
147
152
  var child = cp.spawn(executable, electronArgs, stdioOptions);
148
153
 
149
154
  function resolveOn(event) {
150
155
  return function (code, signal) {
151
- debug('child event fired %o', { event: event, code: code, signal: signal });
156
+ debug('child event fired %o', {
157
+ event: event,
158
+ code: code,
159
+ signal: signal
160
+ });
152
161
 
153
162
  if (code === null) {
154
163
  var errorObject = errors.errors.childProcessKilled(event, signal);
155
-
156
164
  return errors.getError(errorObject).then(reject);
157
165
  }
158
166
 
@@ -162,13 +170,12 @@ module.exports = {
162
170
 
163
171
  child.on('close', resolveOn('close'));
164
172
  child.on('exit', resolveOn('exit'));
165
- child.on('error', reject);
166
-
167
- // if stdio options is set to 'pipe', then
173
+ child.on('error', reject); // if stdio options is set to 'pipe', then
168
174
  // we should set up pipes:
169
175
  // process STDIN (read stream) => child STDIN (writeable)
170
176
  // child STDOUT => process STDOUT
171
177
  // child STDERR => process STDERR with additional filtering
178
+
172
179
  if (child.stdin) {
173
180
  debug('piping process STDIN into child STDIN');
174
181
  process.stdin.pipe(child.stdin);
@@ -177,38 +184,37 @@ module.exports = {
177
184
  if (child.stdout) {
178
185
  debug('piping child STDOUT to process STDOUT');
179
186
  child.stdout.pipe(process.stdout);
180
- }
181
-
182
- // if this is defined then we are manually piping for linux
187
+ } // if this is defined then we are manually piping for linux
183
188
  // to filter out the garbage
189
+
190
+
184
191
  if (child.stderr) {
185
192
  debug('piping child STDERR to process STDERR');
186
193
  child.stderr.on('data', function (data) {
187
- var str = data.toString();
194
+ var str = data.toString(); // bail if this is warning line garbage
188
195
 
189
- // bail if this is warning line garbage
190
196
  if (isGarbageLineWarning(str)) {
191
197
  return;
192
- }
193
-
194
- // if we have a callback and this explictly returns
198
+ } // if we have a callback and this explictly returns
195
199
  // false then bail
200
+
201
+
196
202
  if (onStderrData && onStderrData(str) === false) {
197
203
  return;
198
- }
204
+ } // else pass it along!
205
+
199
206
 
200
- // else pass it along!
201
207
  process.stderr.write(data);
202
208
  });
203
- }
204
-
205
- // https://github.com/cypress-io/cypress/issues/1841
209
+ } // https://github.com/cypress-io/cypress/issues/1841
206
210
  // https://github.com/cypress-io/cypress/issues/5241
207
211
  // In some versions of node, it will throw on windows
208
212
  // when you close the parent process after piping
209
213
  // into the child process. unpiping does not seem
210
214
  // to have any effect. so we're just catching the
211
215
  // error here and not doing anything.
216
+
217
+
212
218
  process.stdin.on('error', function (err) {
213
219
  if (['EPIPE', 'ENOTCONN'].includes(err.code)) {
214
220
  return;
@@ -224,14 +230,12 @@ module.exports = {
224
230
  };
225
231
 
226
232
  var spawnInXvfb = function spawnInXvfb() {
227
- return xvfb.start().then(userFriendlySpawn).finally(xvfb.stop);
233
+ return xvfb.start().then(userFriendlySpawn)["finally"](xvfb.stop);
228
234
  };
229
235
 
230
236
  var userFriendlySpawn = function userFriendlySpawn(linuxWithDisplayEnv) {
231
237
  debug('spawning, should retry on display problem?', Boolean(linuxWithDisplayEnv));
232
-
233
- var brokenGtkDisplay = void 0;
234
-
238
+ var brokenGtkDisplay;
235
239
  var overrides = {};
236
240
 
237
241
  if (linuxWithDisplayEnv) {
@@ -242,11 +246,11 @@ module.exports = {
242
246
  // then we know that's why cypress exited early
243
247
  if (util.isBrokenGtkDisplay(str)) {
244
248
  brokenGtkDisplay = true;
245
- }
246
-
247
- // we should attempt to always slurp up
249
+ } // we should attempt to always slurp up
248
250
  // the stderr logs unless we've explicitly
249
251
  // enabled the electron debug logging
252
+
253
+
250
254
  if (!debugElectron.enabled) {
251
255
  return false;
252
256
  }
@@ -257,26 +261,25 @@ module.exports = {
257
261
  return spawn(overrides).then(function (code) {
258
262
  if (code !== 0 && brokenGtkDisplay) {
259
263
  util.logBrokenGtkDisplayWarning();
260
-
261
264
  return spawnInXvfb();
262
265
  }
263
266
 
264
267
  return code;
265
- })
266
- // we can format and handle an error message from the code above
268
+ }) // we can format and handle an error message from the code above
267
269
  // prevent wrapping error again by using "known: undefined" filter
268
- .catch({ known: undefined }, errors.throwFormErrorText(errors.errors.unexpected));
270
+ ["catch"]({
271
+ known: undefined
272
+ }, errors.throwFormErrorText(errors.errors.unexpected));
269
273
  };
270
274
 
271
275
  if (needsXvfb) {
272
276
  return spawnInXvfb();
273
- }
274
-
275
- // if we are on linux and there's already a DISPLAY
277
+ } // if we are on linux and there's already a DISPLAY
276
278
  // set, then we may need to rerun cypress after
277
279
  // spawning our own Xvfb server
278
- var linuxWithDisplayEnv = util.isPossibleLinuxWithIncorrectDisplay();
279
280
 
281
+
282
+ var linuxWithDisplayEnv = util.isPossibleLinuxWithIncorrectDisplay();
280
283
  return userFriendlySpawn(linuxWithDisplayEnv);
281
284
  }
282
285
  };
@@ -1,10 +1,13 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  var Promise = require('bluebird');
4
+
4
5
  var debug = require('debug')('cypress:cli');
6
+
5
7
  var path = require('path');
6
8
 
7
9
  var util = require('../util');
10
+
8
11
  var state = require('../tasks/state');
9
12
 
10
13
  var _require = require('../errors'),
@@ -12,19 +15,19 @@ var _require = require('../errors'),
12
15
  errors = _require.errors;
13
16
 
14
17
  var getVersions = function getVersions() {
15
- return Promise.try(function () {
18
+ return Promise["try"](function () {
16
19
  if (util.getEnv('CYPRESS_RUN_BINARY')) {
17
20
  var envBinaryPath = path.resolve(util.getEnv('CYPRESS_RUN_BINARY'));
18
-
19
21
  return state.parseRealPlatformBinaryFolderAsync(envBinaryPath).then(function (envBinaryDir) {
20
22
  if (!envBinaryDir) {
21
23
  return throwFormErrorText(errors.CYPRESS_RUN_BINARY.notValid(envBinaryPath))();
22
24
  }
23
25
 
24
26
  debug('CYPRESS_RUN_BINARY has binaryDir:', envBinaryDir);
25
-
26
27
  return envBinaryDir;
27
- }).catch({ code: 'ENOENT' }, function (err) {
28
+ })["catch"]({
29
+ code: 'ENOENT'
30
+ }, function (err) {
28
31
  return throwFormErrorText(errors.CYPRESS_RUN_BINARY.notValid(envBinaryPath))(err.message);
29
32
  });
30
33
  }
@@ -32,7 +35,7 @@ var getVersions = function getVersions() {
32
35
  return state.getBinaryDir();
33
36
  }).then(state.getBinaryPkgVersionAsync).then(function (binaryVersion) {
34
37
  return {
35
- package: util.pkgVersion(),
38
+ "package": util.pkgVersion(),
36
39
  binary: binaryVersion || 'not installed'
37
40
  };
38
41
  });
package/lib/exec/xvfb.js CHANGED
@@ -1,17 +1,28 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- var _templateObject = _taggedTemplateLiteral(['\n DISPLAY environment variable is set to ', ' on Linux\n Assuming this DISPLAY points at working X11 server,\n Cypress will not spawn own Xvfb\n\n NOTE: if the X11 server is NOT working, Cypress will exit without explanation,\n see ', '\n Solution: Unset the DISPLAY variable and try again:\n DISPLAY= npx cypress run ...\n '], ['\n DISPLAY environment variable is set to ', ' on Linux\n Assuming this DISPLAY points at working X11 server,\n Cypress will not spawn own Xvfb\n\n NOTE: if the X11 server is NOT working, Cypress will exit without explanation,\n see ', '\n Solution: Unset the DISPLAY variable and try again:\n DISPLAY= npx cypress run ...\n ']);
3
+ function _templateObject() {
4
+ var data = _taggedTemplateLiteral(["\n DISPLAY environment variable is set to ", " on Linux\n Assuming this DISPLAY points at working X11 server,\n Cypress will not spawn own Xvfb\n\n NOTE: if the X11 server is NOT working, Cypress will exit without explanation,\n see ", "\n Solution: Unset the DISPLAY variable and try again:\n DISPLAY= npx cypress run ...\n "]);
4
5
 
5
- function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
6
+ _templateObject = function _templateObject() {
7
+ return data;
8
+ };
9
+
10
+ return data;
11
+ }
12
+
13
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
6
14
 
7
15
  var os = require('os');
16
+
8
17
  var Promise = require('bluebird');
18
+
9
19
  var Xvfb = require('@cypress/xvfb');
10
20
 
11
21
  var _require = require('common-tags'),
12
22
  stripIndent = _require.stripIndent;
13
23
 
14
24
  var debug = require('debug')('cypress:cli');
25
+
15
26
  var debugXvfb = require('debug')('cypress:xvfb');
16
27
 
17
28
  var _require2 = require('../errors'),
@@ -21,7 +32,8 @@ var _require2 = require('../errors'),
21
32
  var util = require('../util');
22
33
 
23
34
  var xvfbOptions = {
24
- timeout: 30000, // milliseconds
35
+ timeout: 30000,
36
+ // milliseconds
25
37
  // need to explicitly define screen otherwise electron will crash
26
38
  // https://github.com/cypress-io/cypress/issues/6184
27
39
  xvfb_args: ['-screen', '0', '1280x1024x24'],
@@ -31,20 +43,19 @@ var xvfbOptions = {
31
43
  }
32
44
  }
33
45
  };
34
-
35
46
  var xvfb = Promise.promisifyAll(new Xvfb(xvfbOptions));
36
-
37
47
  module.exports = {
38
- _debugXvfb: debugXvfb, // expose for testing
39
-
40
- _xvfb: xvfb, // expose for testing
41
-
42
- _xvfbOptions: xvfbOptions, // expose for testing
43
-
48
+ _debugXvfb: debugXvfb,
49
+ // expose for testing
50
+ _xvfb: xvfb,
51
+ // expose for testing
52
+ _xvfbOptions: xvfbOptions,
53
+ // expose for testing
44
54
  start: function start() {
45
55
  debug('Starting Xvfb');
46
-
47
- return xvfb.startAsync().return(null).catch({ nonZeroExitCode: true }, throwFormErrorText(errors.nonZeroExitCodeXvfb)).catch(function (err) {
56
+ return xvfb.startAsync()["return"](null)["catch"]({
57
+ nonZeroExitCode: true
58
+ }, throwFormErrorText(errors.nonZeroExitCodeXvfb))["catch"](function (err) {
48
59
  if (err.known) {
49
60
  throw err;
50
61
  }
@@ -54,9 +65,7 @@ module.exports = {
54
65
  },
55
66
  stop: function stop() {
56
67
  debug('Stopping Xvfb');
57
-
58
- return xvfb.stopAsync().return(null).catch(function () {
59
- // noop
68
+ return xvfb.stopAsync()["return"](null)["catch"](function () {// noop
60
69
  });
61
70
  },
62
71
  isNeeded: function isNeeded() {
@@ -66,27 +75,20 @@ module.exports = {
66
75
 
67
76
  if (process.env.DISPLAY) {
68
77
  var issueUrl = util.getGitHubIssueUrl(4034);
69
-
70
- var message = stripIndent(_templateObject, process.env.DISPLAY, issueUrl);
71
-
78
+ var message = stripIndent(_templateObject(), process.env.DISPLAY, issueUrl);
72
79
  debug(message);
73
-
74
80
  return false;
75
81
  }
76
82
 
77
83
  debug('undefined DISPLAY environment variable');
78
84
  debug('Cypress will spawn its own Xvfb');
79
-
80
85
  return true;
81
86
  },
82
-
83
-
84
87
  // async method, resolved with Boolean
85
88
  verify: function verify() {
86
- return xvfb.startAsync().return(true).catch(function (err) {
89
+ return xvfb.startAsync()["return"](true)["catch"](function (err) {
87
90
  debug('Could not verify xvfb: %s', err.message);
88
-
89
91
  return false;
90
- }).finally(xvfb.stopAsync);
92
+ })["finally"](xvfb.stopAsync);
91
93
  }
92
94
  };
package/lib/fs.js CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  var Promise = require('bluebird');
4
4
 
package/lib/logger.js CHANGED
@@ -1,6 +1,7 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  var R = require('ramda');
4
+
4
5
  var chalk = require('chalk');
5
6
 
6
7
  var logs = [];
@@ -10,7 +11,7 @@ var logLevel = function logLevel() {
10
11
  };
11
12
 
12
13
  var error = function error() {
13
- for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {
14
+ for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {
14
15
  messages[_key] = arguments[_key];
15
16
  }
16
17
 
@@ -19,12 +20,12 @@ var error = function error() {
19
20
  };
20
21
 
21
22
  var warn = function warn() {
22
- for (var _len2 = arguments.length, messages = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
23
+ if (logLevel() === 'silent') return;
24
+
25
+ for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
23
26
  messages[_key2] = arguments[_key2];
24
27
  }
25
28
 
26
- if (logLevel() === 'silent') return;
27
-
28
29
  logs.push(messages.join(' '));
29
30
  console.log(chalk.yellow.apply(chalk, messages)); // eslint-disable-line no-console
30
31
  };
@@ -32,32 +33,35 @@ var warn = function warn() {
32
33
  var log = function log() {
33
34
  var _console;
34
35
 
35
- for (var _len3 = arguments.length, messages = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
36
+ if (logLevel() === 'silent' || logLevel() === 'warn') return;
37
+
38
+ for (var _len3 = arguments.length, messages = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
36
39
  messages[_key3] = arguments[_key3];
37
40
  }
38
41
 
39
- if (logLevel() === 'silent' || logLevel() === 'warn') return;
40
-
41
42
  logs.push(messages.join(' '));
43
+
42
44
  (_console = console).log.apply(_console, messages); // eslint-disable-line no-console
45
+
43
46
  };
44
47
 
45
48
  var always = function always() {
46
49
  var _console2;
47
50
 
48
- for (var _len4 = arguments.length, messages = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
51
+ for (var _len4 = arguments.length, messages = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
49
52
  messages[_key4] = arguments[_key4];
50
53
  }
51
54
 
52
55
  logs.push(messages.join(' '));
56
+
53
57
  (_console2 = console).log.apply(_console2, messages); // eslint-disable-line no-console
54
- };
55
58
 
56
- // splits long text into lines and calls log()
59
+ }; // splits long text into lines and calls log()
57
60
  // on each one to allow easy unit testing for specific message
61
+
62
+
58
63
  var logLines = function logLines(text) {
59
64
  var lines = text.split('\n');
60
-
61
65
  R.forEach(log, lines);
62
66
  };
63
67
 
@@ -1,19 +1,25 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  var state = require('./state');
4
+
4
5
  var logger = require('../logger');
6
+
5
7
  var fs = require('../fs');
8
+
6
9
  var util = require('../util');
7
10
 
8
11
  var _require = require('path'),
9
12
  join = _require.join;
10
13
 
11
14
  var Table = require('cli-table3');
15
+
12
16
  var moment = require('moment');
17
+
13
18
  var chalk = require('chalk');
14
- var _ = require('lodash');
15
19
 
16
- // output colors for the table
20
+ var _ = require('lodash'); // output colors for the table
21
+
22
+
17
23
  var colors = {
18
24
  titles: chalk.white,
19
25
  dates: chalk.cyan,
@@ -22,38 +28,34 @@ var colors = {
22
28
 
23
29
  var logCachePath = function logCachePath() {
24
30
  logger.always(state.getCacheDir());
25
-
26
31
  return undefined;
27
32
  };
28
33
 
29
34
  var clear = function clear() {
30
35
  return fs.removeAsync(state.getCacheDir());
31
36
  };
32
-
33
37
  /**
34
38
  * Collects all cached versions, finds when each was used
35
39
  * and prints a table with results to the terminal
36
40
  */
41
+
42
+
37
43
  var list = function list() {
38
44
  return getCachedVersions().then(function (binaries) {
39
45
  var table = new Table({
40
46
  head: [colors.titles('version'), colors.titles('last used')]
41
47
  });
42
-
43
48
  binaries.forEach(function (binary) {
44
49
  var versionString = colors.values(binary.version);
45
50
  var lastUsed = binary.accessed ? colors.dates(binary.accessed) : 'unknown';
46
-
47
51
  return table.push([versionString, lastUsed]);
48
52
  });
49
-
50
53
  logger.always(table.toString());
51
54
  });
52
55
  };
53
56
 
54
57
  var getCachedVersions = function getCachedVersions() {
55
58
  var cacheDir = state.getCacheDir();
56
-
57
59
  return fs.readdirAsync(cacheDir).filter(util.isSemver).map(function (version) {
58
60
  return {
59
61
  version: version,
@@ -64,7 +66,6 @@ var getCachedVersions = function getCachedVersions() {
64
66
  // on the Cypress binary
65
67
  var binaryDir = state.getBinaryDir(binary.version);
66
68
  var executable = state.getPathToExecutable(binaryDir);
67
-
68
69
  return fs.statAsync(executable).then(function (stat) {
69
70
  var lastAccessedTime = _.get(stat, 'atime');
70
71
 
@@ -75,9 +76,7 @@ var getCachedVersions = function getCachedVersions() {
75
76
  }
76
77
 
77
78
  var accessed = moment(lastAccessedTime).fromNow();
78
-
79
79
  binary.accessed = accessed;
80
-
81
80
  return binary;
82
81
  }, function (e) {
83
82
  // could not find the binary or gets its stats