cypress 5.4.0 → 5.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/index.js +6 -6
- package/lib/cli.js +103 -107
- package/lib/cypress.js +21 -21
- package/lib/errors.js +233 -276
- package/lib/exec/info.js +29 -32
- package/lib/exec/open.js +7 -8
- package/lib/exec/run.js +20 -20
- package/lib/exec/spawn.js +53 -49
- package/lib/exec/versions.js +18 -17
- package/lib/exec/xvfb.js +43 -37
- package/lib/fs.js +1 -1
- package/lib/logger.js +24 -50
- package/lib/tasks/cache.js +62 -67
- package/lib/tasks/download.js +113 -133
- package/lib/tasks/get-folder-size.js +19 -85
- package/lib/tasks/install.js +165 -249
- package/lib/tasks/state.js +54 -56
- package/lib/tasks/unzip.js +72 -69
- package/lib/tasks/verify.js +112 -147
- package/lib/util.js +164 -167
- package/package.json +3 -3
- package/types/cypress.d.ts +2 -2
- package/types/net-stubbing.ts +74 -6
package/lib/fs.js
CHANGED
package/lib/logger.js
CHANGED
@@ -1,85 +1,59 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
|
3
|
+
const R = require('ramda');
|
4
4
|
|
5
|
-
|
5
|
+
const chalk = require('chalk');
|
6
6
|
|
7
|
-
|
7
|
+
let logs = [];
|
8
8
|
|
9
|
-
|
9
|
+
const logLevel = () => {
|
10
10
|
return process.env.npm_config_loglevel || 'notice';
|
11
11
|
};
|
12
12
|
|
13
|
-
|
14
|
-
for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {
|
15
|
-
messages[_key] = arguments[_key];
|
16
|
-
}
|
17
|
-
|
13
|
+
const error = (...messages) => {
|
18
14
|
logs.push(messages.join(' '));
|
19
|
-
console.log(chalk.red
|
15
|
+
console.log(chalk.red(...messages)); // eslint-disable-line no-console
|
20
16
|
};
|
21
17
|
|
22
|
-
|
18
|
+
const warn = (...messages) => {
|
23
19
|
if (logLevel() === 'silent') return;
|
24
|
-
|
25
|
-
for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
26
|
-
messages[_key2] = arguments[_key2];
|
27
|
-
}
|
28
|
-
|
29
20
|
logs.push(messages.join(' '));
|
30
|
-
console.log(chalk.yellow
|
21
|
+
console.log(chalk.yellow(...messages)); // eslint-disable-line no-console
|
31
22
|
};
|
32
23
|
|
33
|
-
|
34
|
-
var _console;
|
35
|
-
|
24
|
+
const log = (...messages) => {
|
36
25
|
if (logLevel() === 'silent' || logLevel() === 'warn') return;
|
37
|
-
|
38
|
-
for (var _len3 = arguments.length, messages = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
39
|
-
messages[_key3] = arguments[_key3];
|
40
|
-
}
|
41
|
-
|
42
26
|
logs.push(messages.join(' '));
|
43
|
-
|
44
|
-
(_console = console).log.apply(_console, messages); // eslint-disable-line no-console
|
45
|
-
|
27
|
+
console.log(...messages); // eslint-disable-line no-console
|
46
28
|
};
|
47
29
|
|
48
|
-
|
49
|
-
var _console2;
|
50
|
-
|
51
|
-
for (var _len4 = arguments.length, messages = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
52
|
-
messages[_key4] = arguments[_key4];
|
53
|
-
}
|
54
|
-
|
30
|
+
const always = (...messages) => {
|
55
31
|
logs.push(messages.join(' '));
|
56
|
-
|
57
|
-
(_console2 = console).log.apply(_console2, messages); // eslint-disable-line no-console
|
58
|
-
|
32
|
+
console.log(...messages); // eslint-disable-line no-console
|
59
33
|
}; // splits long text into lines and calls log()
|
60
34
|
// on each one to allow easy unit testing for specific message
|
61
35
|
|
62
36
|
|
63
|
-
|
64
|
-
|
37
|
+
const logLines = text => {
|
38
|
+
const lines = text.split('\n');
|
65
39
|
R.forEach(log, lines);
|
66
40
|
};
|
67
41
|
|
68
|
-
|
42
|
+
const print = () => {
|
69
43
|
return logs.join('\n');
|
70
44
|
};
|
71
45
|
|
72
|
-
|
46
|
+
const reset = () => {
|
73
47
|
logs = [];
|
74
48
|
};
|
75
49
|
|
76
50
|
module.exports = {
|
77
|
-
log
|
78
|
-
warn
|
79
|
-
error
|
80
|
-
always
|
81
|
-
logLines
|
82
|
-
print
|
83
|
-
reset
|
84
|
-
logLevel
|
51
|
+
log,
|
52
|
+
warn,
|
53
|
+
error,
|
54
|
+
always,
|
55
|
+
logLines,
|
56
|
+
print,
|
57
|
+
reset,
|
58
|
+
logLevel
|
85
59
|
};
|
package/lib/tasks/cache.js
CHANGED
@@ -1,78 +1,73 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
|
3
|
+
const state = require('./state');
|
4
4
|
|
5
|
-
|
5
|
+
const logger = require('../logger');
|
6
6
|
|
7
|
-
|
7
|
+
const fs = require('../fs');
|
8
8
|
|
9
|
-
|
9
|
+
const util = require('../util');
|
10
10
|
|
11
|
-
|
11
|
+
const {
|
12
|
+
join
|
13
|
+
} = require('path');
|
12
14
|
|
13
|
-
|
15
|
+
const Table = require('cli-table3');
|
14
16
|
|
15
|
-
|
17
|
+
const moment = require('moment');
|
16
18
|
|
17
|
-
|
18
|
-
join = _require.join;
|
19
|
+
const chalk = require('chalk');
|
19
20
|
|
20
|
-
|
21
|
+
const _ = require('lodash');
|
21
22
|
|
22
|
-
|
23
|
+
const getFolderSize = require('./get-folder-size');
|
23
24
|
|
24
|
-
|
25
|
+
const Bluebird = require('bluebird'); // output colors for the table
|
25
26
|
|
26
|
-
var _ = require('lodash');
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
var Bluebird = require('bluebird'); // output colors for the table
|
31
|
-
|
32
|
-
|
33
|
-
var colors = {
|
28
|
+
const colors = {
|
34
29
|
titles: chalk.white,
|
35
30
|
dates: chalk.cyan,
|
36
31
|
values: chalk.green,
|
37
32
|
size: chalk.gray
|
38
33
|
};
|
39
34
|
|
40
|
-
|
35
|
+
const logCachePath = () => {
|
41
36
|
logger.always(state.getCacheDir());
|
42
37
|
return undefined;
|
43
38
|
};
|
44
39
|
|
45
|
-
|
40
|
+
const clear = () => {
|
46
41
|
return fs.removeAsync(state.getCacheDir());
|
47
42
|
};
|
48
43
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return fs.readdirAsync(cacheDir).then(
|
54
|
-
return Bluebird.all(versions.map(
|
44
|
+
const prune = () => {
|
45
|
+
const cacheDir = state.getCacheDir();
|
46
|
+
const currentVersion = util.pkgVersion();
|
47
|
+
let deletedBinary = false;
|
48
|
+
return fs.readdirAsync(cacheDir).then(versions => {
|
49
|
+
return Bluebird.all(versions.map(version => {
|
55
50
|
if (version !== currentVersion) {
|
56
51
|
deletedBinary = true;
|
57
|
-
|
52
|
+
const versionDir = join(cacheDir, version);
|
58
53
|
return fs.removeAsync(versionDir);
|
59
54
|
}
|
60
55
|
}));
|
61
|
-
}).then(
|
56
|
+
}).then(() => {
|
62
57
|
if (deletedBinary) {
|
63
|
-
logger.always(
|
58
|
+
logger.always(`Deleted all binary caches except for the ${currentVersion} binary cache.`);
|
64
59
|
} else {
|
65
|
-
logger.always(
|
60
|
+
logger.always(`No binary caches found to prune.`);
|
66
61
|
}
|
67
|
-
})
|
62
|
+
}).catch({
|
68
63
|
code: 'ENOENT'
|
69
|
-
},
|
70
|
-
logger.always(
|
64
|
+
}, () => {
|
65
|
+
logger.always(`No Cypress cache was found at ${cacheDir}. Nothing to prune.`);
|
71
66
|
});
|
72
67
|
};
|
73
68
|
|
74
|
-
|
75
|
-
return
|
69
|
+
const fileSizeInMB = size => {
|
70
|
+
return `${(size / 1024 / 1024).toFixed(1)}MB`;
|
76
71
|
};
|
77
72
|
/**
|
78
73
|
* Collects all cached versions, finds when each was used
|
@@ -80,24 +75,24 @@ var fileSizeInMB = function fileSizeInMB(size) {
|
|
80
75
|
*/
|
81
76
|
|
82
77
|
|
83
|
-
|
84
|
-
return getCachedVersions(showSize).then(
|
85
|
-
|
78
|
+
const list = showSize => {
|
79
|
+
return getCachedVersions(showSize).then(binaries => {
|
80
|
+
const head = [colors.titles('version'), colors.titles('last used')];
|
86
81
|
|
87
82
|
if (showSize) {
|
88
83
|
head.push(colors.titles('size'));
|
89
84
|
}
|
90
85
|
|
91
|
-
|
92
|
-
head
|
86
|
+
const table = new Table({
|
87
|
+
head
|
93
88
|
});
|
94
|
-
binaries.forEach(
|
95
|
-
|
96
|
-
|
97
|
-
|
89
|
+
binaries.forEach(binary => {
|
90
|
+
const versionString = colors.values(binary.version);
|
91
|
+
const lastUsed = binary.accessed ? colors.dates(binary.accessed) : 'unknown';
|
92
|
+
const row = [versionString, lastUsed];
|
98
93
|
|
99
94
|
if (showSize) {
|
100
|
-
|
95
|
+
const size = colors.size(fileSizeInMB(binary.size));
|
101
96
|
row.push(size);
|
102
97
|
}
|
103
98
|
|
@@ -107,20 +102,20 @@ var list = function list(showSize) {
|
|
107
102
|
});
|
108
103
|
};
|
109
104
|
|
110
|
-
|
111
|
-
|
112
|
-
return fs.readdirAsync(cacheDir).filter(util.isSemver).map(
|
105
|
+
const getCachedVersions = showSize => {
|
106
|
+
const cacheDir = state.getCacheDir();
|
107
|
+
return fs.readdirAsync(cacheDir).filter(util.isSemver).map(version => {
|
113
108
|
return {
|
114
|
-
version
|
109
|
+
version,
|
115
110
|
folderPath: join(cacheDir, version)
|
116
111
|
};
|
117
|
-
}).mapSeries(
|
112
|
+
}).mapSeries(binary => {
|
118
113
|
// last access time on the folder is different from last access time
|
119
114
|
// on the Cypress binary
|
120
|
-
|
121
|
-
|
122
|
-
return fs.statAsync(executable).then(
|
123
|
-
|
115
|
+
const binaryDir = state.getBinaryDir(binary.version);
|
116
|
+
const executable = state.getPathToExecutable(binaryDir);
|
117
|
+
return fs.statAsync(executable).then(stat => {
|
118
|
+
const lastAccessedTime = _.get(stat, 'atime');
|
124
119
|
|
125
120
|
if (!lastAccessedTime) {
|
126
121
|
// the test runner has never been opened
|
@@ -128,20 +123,20 @@ var getCachedVersions = function getCachedVersions(showSize) {
|
|
128
123
|
return binary;
|
129
124
|
}
|
130
125
|
|
131
|
-
|
126
|
+
const accessed = moment(lastAccessedTime).fromNow();
|
132
127
|
binary.accessed = accessed;
|
133
128
|
return binary;
|
134
|
-
},
|
129
|
+
}, e => {
|
135
130
|
// could not find the binary or gets its stats
|
136
131
|
return binary;
|
137
132
|
});
|
138
|
-
}).mapSeries(
|
133
|
+
}).mapSeries(binary => {
|
139
134
|
if (showSize) {
|
140
|
-
|
141
|
-
return getFolderSize(binaryDir).then(
|
142
|
-
return
|
143
|
-
size
|
144
|
-
}
|
135
|
+
const binaryDir = state.getBinaryDir(binary.version);
|
136
|
+
return getFolderSize(binaryDir).then(size => {
|
137
|
+
return { ...binary,
|
138
|
+
size
|
139
|
+
};
|
145
140
|
});
|
146
141
|
}
|
147
142
|
|
@@ -151,8 +146,8 @@ var getCachedVersions = function getCachedVersions(showSize) {
|
|
151
146
|
|
152
147
|
module.exports = {
|
153
148
|
path: logCachePath,
|
154
|
-
clear
|
155
|
-
prune
|
156
|
-
list
|
157
|
-
getCachedVersions
|
149
|
+
clear,
|
150
|
+
prune,
|
151
|
+
list,
|
152
|
+
getCachedVersions
|
158
153
|
};
|