cypress 8.7.0 → 9.0.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/cli.js +12 -7
- package/lib/errors.js +9 -6
- package/lib/exec/info.js +12 -7
- package/lib/exec/spawn.js +1 -1
- package/lib/logger.js +4 -3
- package/lib/tasks/download.js +1 -15
- package/lib/tasks/install.js +13 -1
- package/lib/tasks/state.js +6 -5
- package/lib/util.js +19 -9
- package/package.json +2 -3
- package/types/cypress.d.ts +5 -5
package/lib/cli.js
CHANGED
@@ -3,8 +3,6 @@
|
|
3
3
|
// @ts-check
|
4
4
|
const _ = require('lodash');
|
5
5
|
|
6
|
-
const R = require('ramda');
|
7
|
-
|
8
6
|
const commander = require('commander');
|
9
7
|
|
10
8
|
const {
|
@@ -238,11 +236,18 @@ const castCypressRunOptions = opts => {
|
|
238
236
|
// only properties that have type "string | false" in our TS definition
|
239
237
|
// require special handling, because CLI parsing takes care of purely
|
240
238
|
// boolean arguments
|
241
|
-
const
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
239
|
+
const castOpts = { ...opts
|
240
|
+
};
|
241
|
+
|
242
|
+
if (_.has(opts, 'port')) {
|
243
|
+
castOpts.port = coerceAnyStringToInt(opts.port);
|
244
|
+
}
|
245
|
+
|
246
|
+
if (_.has(opts, 'configFile')) {
|
247
|
+
castOpts.configFile = coerceFalseOrString(opts.configFile);
|
248
|
+
}
|
249
|
+
|
250
|
+
return castOpts;
|
246
251
|
};
|
247
252
|
|
248
253
|
module.exports = {
|
package/lib/errors.js
CHANGED
@@ -7,10 +7,6 @@ const {
|
|
7
7
|
stripIndents
|
8
8
|
} = require('common-tags');
|
9
9
|
|
10
|
-
const {
|
11
|
-
merge
|
12
|
-
} = require('ramda');
|
13
|
-
|
14
10
|
const la = require('lazy-ass');
|
15
11
|
|
16
12
|
const is = require('check-more-types');
|
@@ -45,6 +41,12 @@ const invalidRunProjectPath = {
|
|
45
41
|
${chalk.blue(runDocumentationUrl)}
|
46
42
|
`
|
47
43
|
};
|
44
|
+
const invalidOS = {
|
45
|
+
description: 'The Cypress App could not be installed. Your machine does not meet the operating system requirements.',
|
46
|
+
solution: stripIndent`
|
47
|
+
|
48
|
+
${chalk.blue('https://on.cypress.io/guides/getting-started/installing-cypress#system-requirements')}`
|
49
|
+
};
|
48
50
|
const failedDownload = {
|
49
51
|
description: 'The Cypress App could not be downloaded.',
|
50
52
|
solution: stripIndent`
|
@@ -233,9 +235,9 @@ const CYPRESS_RUN_BINARY = {
|
|
233
235
|
|
234
236
|
function addPlatformInformation(info) {
|
235
237
|
return util.getPlatformInfo().then(platform => {
|
236
|
-
return
|
238
|
+
return { ...info,
|
237
239
|
platform
|
238
|
-
}
|
240
|
+
};
|
239
241
|
});
|
240
242
|
}
|
241
243
|
/**
|
@@ -374,6 +376,7 @@ module.exports = {
|
|
374
376
|
missingApp,
|
375
377
|
notInstalledCI,
|
376
378
|
missingDependency,
|
379
|
+
invalidOS,
|
377
380
|
invalidSmokeTestDisplayError,
|
378
381
|
versionMismatch,
|
379
382
|
binaryNotExecutable,
|
package/lib/exec/info.js
CHANGED
@@ -13,9 +13,7 @@ const chalk = require('chalk');
|
|
13
13
|
|
14
14
|
const prettyBytes = require('pretty-bytes');
|
15
15
|
|
16
|
-
const _ = require('lodash');
|
17
|
-
|
18
|
-
const R = require('ramda'); // color for numbers and show values
|
16
|
+
const _ = require('lodash'); // color for numbers and show values
|
19
17
|
|
20
18
|
|
21
19
|
const g = chalk.green; // color for paths
|
@@ -30,14 +28,21 @@ methods.findProxyEnvironmentVariables = () => {
|
|
30
28
|
return _.pick(process.env, ['HTTP_PROXY', 'HTTPS_PROXY', 'NO_PROXY']);
|
31
29
|
};
|
32
30
|
|
33
|
-
const maskSensitiveVariables =
|
34
|
-
|
35
|
-
}
|
31
|
+
const maskSensitiveVariables = obj => {
|
32
|
+
const masked = { ...obj
|
33
|
+
};
|
34
|
+
|
35
|
+
if (masked.CYPRESS_RECORD_KEY) {
|
36
|
+
masked.CYPRESS_RECORD_KEY = '<redacted>';
|
37
|
+
}
|
38
|
+
|
39
|
+
return masked;
|
40
|
+
};
|
36
41
|
|
37
42
|
methods.findCypressEnvironmentVariables = () => {
|
38
43
|
const isCyVariable = (val, key) => key.startsWith('CYPRESS_');
|
39
44
|
|
40
|
-
return
|
45
|
+
return _.pickBy(process.env, isCyVariable);
|
41
46
|
};
|
42
47
|
|
43
48
|
const formatCypressVariables = () => {
|
package/lib/exec/spawn.js
CHANGED
package/lib/logger.js
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
const R = require('ramda');
|
4
|
-
|
5
3
|
const chalk = require('chalk');
|
6
4
|
|
7
5
|
let logs = [];
|
@@ -36,7 +34,10 @@ const always = (...messages) => {
|
|
36
34
|
|
37
35
|
const logLines = text => {
|
38
36
|
const lines = text.split('\n');
|
39
|
-
|
37
|
+
|
38
|
+
for (const line of lines) {
|
39
|
+
log(line);
|
40
|
+
}
|
40
41
|
};
|
41
42
|
|
42
43
|
const print = () => {
|
package/lib/tasks/download.js
CHANGED
@@ -41,19 +41,6 @@ const getProxyForUrlWithNpmConfig = url => {
|
|
41
41
|
return getProxyForUrl(url) || process.env.npm_config_https_proxy || process.env.npm_config_proxy || null;
|
42
42
|
};
|
43
43
|
|
44
|
-
const getRealOsArch = () => {
|
45
|
-
// os.arch() returns the arch for which this node was compiled
|
46
|
-
// we want the operating system's arch instead: x64 or x86
|
47
|
-
const osArch = arch();
|
48
|
-
|
49
|
-
if (osArch === 'x86') {
|
50
|
-
// match process.platform output
|
51
|
-
return 'ia32';
|
52
|
-
}
|
53
|
-
|
54
|
-
return osArch;
|
55
|
-
};
|
56
|
-
|
57
44
|
const getBaseUrl = () => {
|
58
45
|
if (util.getEnv('CYPRESS_DOWNLOAD_MIRROR')) {
|
59
46
|
let baseUrl = util.getEnv('CYPRESS_DOWNLOAD_MIRROR');
|
@@ -91,8 +78,7 @@ const getCA = () => {
|
|
91
78
|
const prepend = urlPath => {
|
92
79
|
const endpoint = url.resolve(getBaseUrl(), urlPath);
|
93
80
|
const platform = os.platform();
|
94
|
-
|
95
|
-
return `${endpoint}?platform=${platform}&arch=${arch}`;
|
81
|
+
return `${endpoint}?platform=${platform}&arch=${arch()}`;
|
96
82
|
};
|
97
83
|
|
98
84
|
const getUrl = version => {
|
package/lib/tasks/install.js
CHANGED
@@ -226,6 +226,12 @@ const downloadAndUnzip = ({
|
|
226
226
|
return Promise.resolve(tasks.run());
|
227
227
|
};
|
228
228
|
|
229
|
+
const validateOS = () => {
|
230
|
+
return util.getPlatformInfo().then(platformInfo => {
|
231
|
+
return platformInfo.match(/(darwin|linux|win32)-x64/);
|
232
|
+
});
|
233
|
+
};
|
234
|
+
|
229
235
|
const start = (options = {}) => {
|
230
236
|
debug('installing with options %j', options);
|
231
237
|
|
@@ -269,7 +275,13 @@ const start = (options = {}) => {
|
|
269
275
|
const installDir = state.getVersionDir(pkgVersion);
|
270
276
|
const cacheDir = state.getCacheDir();
|
271
277
|
const binaryDir = state.getBinaryDir(pkgVersion);
|
272
|
-
return
|
278
|
+
return validateOS().then(isValid => {
|
279
|
+
if (!isValid) {
|
280
|
+
return throwFormErrorText(errors.invalidOS)();
|
281
|
+
}
|
282
|
+
}).then(() => {
|
283
|
+
return fs.ensureDirAsync(cacheDir);
|
284
|
+
}).catch({
|
273
285
|
code: 'EACCES'
|
274
286
|
}, err => {
|
275
287
|
return throwFormErrorText(errors.invalidCacheDirectory)(stripIndent`
|
package/lib/tasks/state.js
CHANGED
@@ -8,8 +8,6 @@ const path = require('path');
|
|
8
8
|
|
9
9
|
const untildify = require('untildify');
|
10
10
|
|
11
|
-
const R = require('ramda');
|
12
|
-
|
13
11
|
const debug = require('debug')('cypress:cli');
|
14
12
|
|
15
13
|
const fs = require('../fs');
|
@@ -203,9 +201,12 @@ const getBinaryPkgAsync = binaryDir => {
|
|
203
201
|
});
|
204
202
|
};
|
205
203
|
|
206
|
-
const getBinaryPkgVersion =
|
207
|
-
|
208
|
-
const
|
204
|
+
const getBinaryPkgVersion = o => _.get(o, 'version', null);
|
205
|
+
|
206
|
+
const getBinaryElectronVersion = o => _.get(o, 'electronVersion', null);
|
207
|
+
|
208
|
+
const getBinaryElectronNodeVersion = o => _.get(o, 'electronNodeVersion', null);
|
209
|
+
|
209
210
|
module.exports = {
|
210
211
|
getPathToExecutable,
|
211
212
|
getPlatformExecutable,
|
package/lib/util.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
const _ = require('lodash');
|
4
4
|
|
5
|
-
const
|
5
|
+
const arch = require('arch');
|
6
6
|
|
7
7
|
const os = require('os');
|
8
8
|
|
@@ -133,9 +133,8 @@ const logBrokenGtkDisplayWarning = () => {
|
|
133
133
|
};
|
134
134
|
|
135
135
|
function stdoutLineMatches(expectedLine, stdout) {
|
136
|
-
const lines = stdout.split('\n').map(
|
137
|
-
|
138
|
-
return lines.some(lineMatches);
|
136
|
+
const lines = stdout.split('\n').map(val => val.trim());
|
137
|
+
return lines.some(line => line === expectedLine);
|
139
138
|
}
|
140
139
|
/**
|
141
140
|
* Confirms if given value is a valid CYPRESS_INTERNAL_ENV value. Undefined values
|
@@ -220,11 +219,16 @@ const parseOpts = opts => {
|
|
220
219
|
// remove double quotes from certain options
|
221
220
|
|
222
221
|
|
223
|
-
const
|
224
|
-
group: dequote,
|
225
|
-
ciBuildId: dequote
|
222
|
+
const cleanOpts = { ...opts
|
226
223
|
};
|
227
|
-
const
|
224
|
+
const toDequote = ['group', 'ciBuildId'];
|
225
|
+
|
226
|
+
for (const prop of toDequote) {
|
227
|
+
if (_.has(opts, prop)) {
|
228
|
+
cleanOpts[prop] = dequote(opts[prop]);
|
229
|
+
}
|
230
|
+
}
|
231
|
+
|
228
232
|
debug('parsed cli options %o', cleanOpts);
|
229
233
|
return cleanOpts;
|
230
234
|
};
|
@@ -404,8 +408,14 @@ const util = {
|
|
404
408
|
|
405
409
|
getPlatformInfo() {
|
406
410
|
return util.getOsVersionAsync().then(version => {
|
411
|
+
let osArch = arch();
|
412
|
+
|
413
|
+
if (osArch === 'x86') {
|
414
|
+
osArch = 'ia32';
|
415
|
+
}
|
416
|
+
|
407
417
|
return stripIndent`
|
408
|
-
Platform: ${os.platform()} (${version})
|
418
|
+
Platform: ${os.platform()}-${osArch} (${version})
|
409
419
|
Cypress Version: ${util.pkgVersion()}
|
410
420
|
`;
|
411
421
|
});
|
package/package.json
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"name": "cypress",
|
3
|
-
"version": "
|
3
|
+
"version": "9.0.0",
|
4
4
|
"main": "index.js",
|
5
5
|
"scripts": {
|
6
6
|
"postinstall": "node index.js --exec install",
|
7
7
|
"size": "t=\"$(npm pack .)\"; wc -c \"${t}\"; tar tvf \"${t}\"; rm \"${t}\";"
|
8
8
|
},
|
9
9
|
"dependencies": {
|
10
|
-
"@cypress/request": "^2.88.
|
10
|
+
"@cypress/request": "^2.88.7",
|
11
11
|
"@cypress/xvfb": "^1.2.4",
|
12
12
|
"@types/node": "^14.14.31",
|
13
13
|
"@types/sinonjs__fake-timers": "^6.0.2",
|
@@ -42,7 +42,6 @@
|
|
42
42
|
"ospath": "^1.2.2",
|
43
43
|
"pretty-bytes": "^5.6.0",
|
44
44
|
"proxy-from-env": "1.0.0",
|
45
|
-
"ramda": "~0.27.1",
|
46
45
|
"request-progress": "^3.0.0",
|
47
46
|
"supports-color": "^8.1.1",
|
48
47
|
"tmp": "~0.2.1",
|
package/types/cypress.d.ts
CHANGED
@@ -280,7 +280,7 @@ declare namespace Cypress {
|
|
280
280
|
* Currently executing test runnable instance.
|
281
281
|
*/
|
282
282
|
currentTest: {
|
283
|
-
title: string
|
283
|
+
title: string
|
284
284
|
titlePath: string[]
|
285
285
|
}
|
286
286
|
|
@@ -420,9 +420,9 @@ declare namespace Cypress {
|
|
420
420
|
* @see https://on.cypress.io/api/commands
|
421
421
|
*/
|
422
422
|
Commands: {
|
423
|
-
add(name:
|
424
|
-
add(name:
|
425
|
-
overwrite(name:
|
423
|
+
add<T extends keyof Chainable>(name: T, fn: Chainable[T]): void
|
424
|
+
add<T extends keyof Chainable>(name: T, options: CommandOptions, fn: Chainable[T]): void
|
425
|
+
overwrite<T extends keyof Chainable>(name: T, fn: Chainable[T]): void
|
426
426
|
}
|
427
427
|
|
428
428
|
/**
|
@@ -5677,7 +5677,7 @@ declare namespace Cypress {
|
|
5677
5677
|
xhr: XMLHttpRequest
|
5678
5678
|
}
|
5679
5679
|
|
5680
|
-
type Encodings = 'ascii' | 'base64' | 'binary' | 'hex' | 'latin1' | 'utf8' | 'utf-8' | 'ucs2' | 'ucs-2' | 'utf16le' | 'utf-16le'
|
5680
|
+
type Encodings = 'ascii' | 'base64' | 'binary' | 'hex' | 'latin1' | 'utf8' | 'utf-8' | 'ucs2' | 'ucs-2' | 'utf16le' | 'utf-16le' | null
|
5681
5681
|
type PositionType = 'topLeft' | 'top' | 'topRight' | 'left' | 'center' | 'right' | 'bottomLeft' | 'bottom' | 'bottomRight'
|
5682
5682
|
type ViewportPreset = 'macbook-16' | 'macbook-15' | 'macbook-13' | 'macbook-11' | 'ipad-2' | 'ipad-mini' | 'iphone-xr' | 'iphone-x' | 'iphone-6+' | 'iphone-se2' | 'iphone-8' | 'iphone-7' | 'iphone-6' | 'iphone-5' | 'iphone-4' | 'iphone-3' | 'samsung-s10' | 'samsung-note9'
|
5683
5683
|
interface Offset {
|