dceky 1.1.6 → 1.1.8
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/README.md +2 -2
- package/lib/start/constants/AVAILABLE_BROWSERS.js +2 -2
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.d.ts +9 -0
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.js +47 -0
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.js.map +1 -0
- package/lib/start/index.js +10 -9
- package/lib/start/index.js.map +1 -1
- package/package.json +1 -1
- package/start/constants/AVAILABLE_BROWSERS.ts +2 -2
- package/start/helpers/getCypressDetectedBrowsersForChooser.ts +45 -0
- package/start/index.ts +10 -11
package/README.md
CHANGED
|
@@ -42,13 +42,13 @@ You'll be automatically guided through a launch process where you'll choose whet
|
|
|
42
42
|
|
|
43
43
|
```ts
|
|
44
44
|
// Arguments:
|
|
45
|
-
npm run ky:start --headless --browser=
|
|
45
|
+
npm run ky:start --headless --browser=chrome,webkit --profile=Stage
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
```ts
|
|
49
49
|
// Example environment:
|
|
50
50
|
HEADLESS=true
|
|
51
|
-
BROWSER=
|
|
51
|
+
BROWSER=chrome,webkit
|
|
52
52
|
PROFILE=Stage
|
|
53
53
|
```
|
|
54
54
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import AVAILABLE_BROWSERS from '../constants/AVAILABLE_BROWSERS';
|
|
2
|
+
/**
|
|
3
|
+
* Subset of {@link AVAILABLE_BROWSERS} to show in the chooser: the browsers
|
|
4
|
+
* `npx cypress info` reports (`- Name:` lines), plus Webkit (always shown
|
|
5
|
+
* because `cypress info` omits WebKit; https://github.com/cypress-io/cypress/issues/27304).
|
|
6
|
+
* @author Yuen Ler Chow
|
|
7
|
+
*/
|
|
8
|
+
declare const getCypressDetectedBrowsersForChooser: () => typeof AVAILABLE_BROWSERS;
|
|
9
|
+
export default getCypressDetectedBrowsersForChooser;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint-disable no-console */
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
// Import helpers
|
|
9
|
+
const getRootPath_1 = __importDefault(require("./getRootPath"));
|
|
10
|
+
// Import constants
|
|
11
|
+
const AVAILABLE_BROWSERS_1 = __importDefault(require("../constants/AVAILABLE_BROWSERS"));
|
|
12
|
+
/**
|
|
13
|
+
* Subset of {@link AVAILABLE_BROWSERS} to show in the chooser: the browsers
|
|
14
|
+
* `npx cypress info` reports (`- Name:` lines), plus Webkit (always shown
|
|
15
|
+
* because `cypress info` omits WebKit; https://github.com/cypress-io/cypress/issues/27304).
|
|
16
|
+
* @author Yuen Ler Chow
|
|
17
|
+
*/
|
|
18
|
+
const getCypressDetectedBrowsersForChooser = () => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const root = (0, getRootPath_1.default)();
|
|
21
|
+
const result = (0, child_process_1.spawnSync)('npx', ['cypress', 'info'], {
|
|
22
|
+
cwd: root,
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
shell: true,
|
|
25
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
26
|
+
});
|
|
27
|
+
const detected = new Set();
|
|
28
|
+
if (!result.error && result.status === 0) {
|
|
29
|
+
const text = `${(_a = result.stdout) !== null && _a !== void 0 ? _a : ''}\n${(_b = result.stderr) !== null && _b !== void 0 ? _b : ''}`;
|
|
30
|
+
text.split('\n').forEach((line) => {
|
|
31
|
+
const m = line.match(/^\s*-\s*Name:\s*(\S+)/);
|
|
32
|
+
if (m) {
|
|
33
|
+
const [, name] = m;
|
|
34
|
+
detected.add(name.toLowerCase());
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.warn('Could not detect installed browsers (cypress info failed).');
|
|
40
|
+
}
|
|
41
|
+
return AVAILABLE_BROWSERS_1.default.filter((b) => {
|
|
42
|
+
// Always include Webkit in the chooser because "npx cypress info" omits WebKit
|
|
43
|
+
return b.name === 'webkit' || detected.has(b.name);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
exports.default = getCypressDetectedBrowsersForChooser;
|
|
47
|
+
//# sourceMappingURL=getCypressDetectedBrowsersForChooser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCypressDetectedBrowsersForChooser.js","sourceRoot":"","sources":["../../../start/helpers/getCypressDetectedBrowsersForChooser.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,iDAA0C;AAE1C,iBAAiB;AACjB,gEAAwC;AAExC,mBAAmB;AACnB,yFAAiE;AAEjE;;;;;GAKG;AACH,MAAM,oCAAoC,GAAG,GAA8B,EAAE;;IAC3E,MAAM,IAAI,GAAG,IAAA,qBAAW,GAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;QACnD,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,KAAK,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC;gBACN,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,4BAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,+EAA+E;QAC/E,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kBAAe,oCAAoC,CAAC"}
|
package/lib/start/index.js
CHANGED
|
@@ -21,8 +21,8 @@ const validateBrowsers_1 = __importDefault(require("./helpers/validateBrowsers")
|
|
|
21
21
|
const extractArgValue_1 = __importDefault(require("./helpers/extractArgValue"));
|
|
22
22
|
const getRootPath_1 = __importDefault(require("./helpers/getRootPath"));
|
|
23
23
|
const executeCypress_1 = __importDefault(require("./helpers/executeCypress"));
|
|
24
|
+
const getCypressDetectedBrowsersForChooser_1 = __importDefault(require("./helpers/getCypressDetectedBrowsersForChooser"));
|
|
24
25
|
// Import constants
|
|
25
|
-
const AVAILABLE_BROWSERS_1 = __importDefault(require("./constants/AVAILABLE_BROWSERS"));
|
|
26
26
|
const DEFAULT_THREADS_PER_COMBO_1 = __importDefault(require("./constants/DEFAULT_THREADS_PER_COMBO"));
|
|
27
27
|
// Get the project directory
|
|
28
28
|
const pwd = (0, getRootPath_1.default)();
|
|
@@ -104,7 +104,12 @@ if (!envHeadlessRaw && !hasHeadlessFlag) {
|
|
|
104
104
|
}
|
|
105
105
|
// If running headless and no browsers were selected, ask the user to choose
|
|
106
106
|
if (isHeadless && selectedBrowsers.length === 0) {
|
|
107
|
-
const
|
|
107
|
+
const choosableBrowsers = (0, getCypressDetectedBrowsersForChooser_1.default)();
|
|
108
|
+
if (choosableBrowsers.length === 0) {
|
|
109
|
+
console.error('No browsers detected. Run `npx cypress info`, install a supported browser, and try again.');
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
const options = choosableBrowsers.map(({ tag, name }) => {
|
|
108
113
|
return {
|
|
109
114
|
tag,
|
|
110
115
|
description: name,
|
|
@@ -116,13 +121,9 @@ if (isHeadless && selectedBrowsers.length === 0) {
|
|
|
116
121
|
title: 'Select browser(s)',
|
|
117
122
|
allowMulti: true,
|
|
118
123
|
});
|
|
119
|
-
selectedBrowsers = (
|
|
120
|
-
.
|
|
121
|
-
|
|
122
|
-
})
|
|
123
|
-
.map(({ name }) => {
|
|
124
|
-
return name;
|
|
125
|
-
}));
|
|
124
|
+
selectedBrowsers = choices.map((choice) => {
|
|
125
|
+
return choosableBrowsers[choice.index].name;
|
|
126
|
+
});
|
|
126
127
|
}
|
|
127
128
|
// If no profiles were selected, ask the user to choose
|
|
128
129
|
// - In headless mode, allow selecting multiple profiles
|
package/lib/start/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../start/index.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B;;;;;GAKG;;;;;AAEH,cAAc;AACd,4CAAoB;AACpB,gDAAwB;AAExB,iBAAiB;AACjB,wEAAgD;AAChD,wFAAgE;AAChE,wFAAgE;AAChE,kFAA0D;AAC1D,gFAAwD;AACxD,wEAAgD;AAChD,8EAAsD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../start/index.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B;;;;;GAKG;;;;;AAEH,cAAc;AACd,4CAAoB;AACpB,gDAAwB;AAExB,iBAAiB;AACjB,wEAAgD;AAChD,wFAAgE;AAChE,wFAAgE;AAChE,kFAA0D;AAC1D,gFAAwD;AACxD,wEAAgD;AAChD,8EAAsD;AACtD,0HAAkG;AAElG,mBAAmB;AACnB,sGAA8E;AAE9E,4BAA4B;AAC5B,MAAM,GAAG,GAAG,IAAA,qBAAW,GAAE,CAAC;AAE1B,kDAAkD;AAClD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,4CAA4C,WAAW,GAAG,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gEAAgE;AAChE,MAAM,YAAY,GAAG,CACnB,YAAE;KACC,WAAW,CAAC,WAAW,CAAC;KACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;IACZ,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC,CAAC,CACL,CAAC;AAEF,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,4BAA4B;AAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,GAAG,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,sBAAsB;AACtB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,6DAA6D;AAC7D,IAAI,gBAAgB,GAA4C,EAAE,CAAC;AACnE,IAAI,gBAAgB,GAAa,EAAE,CAAC;AACpC,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,yCAAyC;AACzC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1C,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,aAAa,IAAI,aAAa,CAAC;AAElD,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,YAAY,GAAG,IAAA,6BAAmB,EAAC,UAAU,CAAC,CAAC;IACrD,gBAAgB,GAAG,IAAA,6BAAmB,EAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,yCAAyC;AACzC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1C,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,aAAa,IAAI,aAAa,CAAC;AAElD,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,YAAY,GAAG,IAAA,6BAAmB,EAAC,UAAU,CAAC,CAAC;IACrD,gBAAgB,GAAG,IAAA,0BAAgB,EAAC,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,2CAA2C;AAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5C,MAAM,iBAAiB,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9D,MAAM,eAAe,GAAG,iBAAiB,KAAK,SAAS,CAAC;AACxD,UAAU,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,eAAe,CAAC;AAE/F,mDAAmD;AACnD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACpD,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACjE,MAAM,UAAU,GAAG,aAAa,IAAI,aAAa,CAAC;AAClD,IAAI,eAAmC,CAAC;AACxC,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,eAAe,GAAG,MAAM,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,UAAU,qBAAqB,mCAAyB,IAAI,CAAC,CAAC;IACrH,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC;QAC1B,QAAQ,EAAE,uBAAuB;QACjC,OAAO,EAAE;YACP,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAC3C,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE;SAC9C;QACD,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACtC,CAAC;AAED,4EAA4E;AAC5E,IAAI,UAAU,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAChD,MAAM,iBAAiB,GAAG,IAAA,8CAAoC,GAAE,CAAC;IACjE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;QACtD,OAAO;YACL,GAAG;YACH,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC;QAC1B,QAAQ,EAAE,8CAA8C;QACxD,OAAO;QACP,KAAK,EAAE,mBAAmB;QAC1B,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACxC,OAAO,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,wDAAwD;AACxD,2DAA2D;AAC3D,qHAAqH;AACrH,IACE,gBAAgB,CAAC,MAAM,KAAK,CAAC;OAC1B,CAAC,CAAC,UAAU,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/C,CAAC;IACD,wDAAwD;IACxD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC/C,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC;QAC1B,QAAQ,EAAE,CACR,UAAU;YACR,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,iBAAiB,CACtB;QACD,OAAO;QACP,KAAK,EAAE,iBAAiB,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/C,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IAEH,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,8CAA8C;AAC9C,IAAA,wBAAc,EAAC;IACb,gBAAgB;IAChB,gBAAgB;IAChB,UAAU;IACV,eAAe;CAChB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { spawnSync } from 'child_process';
|
|
3
|
+
|
|
4
|
+
// Import helpers
|
|
5
|
+
import getRootPath from './getRootPath';
|
|
6
|
+
|
|
7
|
+
// Import constants
|
|
8
|
+
import AVAILABLE_BROWSERS from '../constants/AVAILABLE_BROWSERS';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Subset of {@link AVAILABLE_BROWSERS} to show in the chooser: the browsers
|
|
12
|
+
* `npx cypress info` reports (`- Name:` lines), plus Webkit (always shown
|
|
13
|
+
* because `cypress info` omits WebKit; https://github.com/cypress-io/cypress/issues/27304).
|
|
14
|
+
* @author Yuen Ler Chow
|
|
15
|
+
*/
|
|
16
|
+
const getCypressDetectedBrowsersForChooser = (): typeof AVAILABLE_BROWSERS => {
|
|
17
|
+
const root = getRootPath();
|
|
18
|
+
const result = spawnSync('npx', ['cypress', 'info'], {
|
|
19
|
+
cwd: root,
|
|
20
|
+
encoding: 'utf8',
|
|
21
|
+
shell: true,
|
|
22
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const detected = new Set<string>();
|
|
26
|
+
if (!result.error && result.status === 0) {
|
|
27
|
+
const text = `${result.stdout ?? ''}\n${result.stderr ?? ''}`;
|
|
28
|
+
text.split('\n').forEach((line) => {
|
|
29
|
+
const m = line.match(/^\s*-\s*Name:\s*(\S+)/);
|
|
30
|
+
if (m) {
|
|
31
|
+
const [, name] = m;
|
|
32
|
+
detected.add(name.toLowerCase());
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
} else {
|
|
36
|
+
console.warn('Could not detect installed browsers (cypress info failed).');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return AVAILABLE_BROWSERS.filter((b) => {
|
|
40
|
+
// Always include Webkit in the chooser because "npx cypress info" omits WebKit
|
|
41
|
+
return b.name === 'webkit' || detected.has(b.name);
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default getCypressDetectedBrowsersForChooser;
|
package/start/index.ts
CHANGED
|
@@ -18,9 +18,9 @@ import validateBrowsers from './helpers/validateBrowsers';
|
|
|
18
18
|
import extractArgValue from './helpers/extractArgValue';
|
|
19
19
|
import getRootPath from './helpers/getRootPath';
|
|
20
20
|
import executeCypress from './helpers/executeCypress';
|
|
21
|
+
import getCypressDetectedBrowsersForChooser from './helpers/getCypressDetectedBrowsersForChooser';
|
|
21
22
|
|
|
22
23
|
// Import constants
|
|
23
|
-
import AVAILABLE_BROWSERS from './constants/AVAILABLE_BROWSERS';
|
|
24
24
|
import DEFAULT_THREADS_PER_COMBO from './constants/DEFAULT_THREADS_PER_COMBO';
|
|
25
25
|
|
|
26
26
|
// Get the project directory
|
|
@@ -119,7 +119,12 @@ if (!envHeadlessRaw && !hasHeadlessFlag) {
|
|
|
119
119
|
|
|
120
120
|
// If running headless and no browsers were selected, ask the user to choose
|
|
121
121
|
if (isHeadless && selectedBrowsers.length === 0) {
|
|
122
|
-
const
|
|
122
|
+
const choosableBrowsers = getCypressDetectedBrowsersForChooser();
|
|
123
|
+
if (choosableBrowsers.length === 0) {
|
|
124
|
+
console.error('No browsers detected. Run `npx cypress info`, install a supported browser, and try again.');
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
const options = choosableBrowsers.map(({ tag, name }) => {
|
|
123
128
|
return {
|
|
124
129
|
tag,
|
|
125
130
|
description: name,
|
|
@@ -133,15 +138,9 @@ if (isHeadless && selectedBrowsers.length === 0) {
|
|
|
133
138
|
allowMulti: true,
|
|
134
139
|
});
|
|
135
140
|
|
|
136
|
-
selectedBrowsers = (
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return AVAILABLE_BROWSERS[choice.index];
|
|
140
|
-
})
|
|
141
|
-
.map(({ name }) => {
|
|
142
|
-
return name;
|
|
143
|
-
})
|
|
144
|
-
);
|
|
141
|
+
selectedBrowsers = choices.map((choice) => {
|
|
142
|
+
return choosableBrowsers[choice.index].name;
|
|
143
|
+
});
|
|
145
144
|
}
|
|
146
145
|
|
|
147
146
|
// If no profiles were selected, ask the user to choose
|