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 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=Chrome,Safari --profile=Stage
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=Chrome,Safari
51
+ BROWSER=chrome,webkit
52
52
  PROFILE=Stage
53
53
  ```
54
54
 
@@ -18,8 +18,8 @@ const AVAILABLE_BROWSERS = [
18
18
  tag: 'E',
19
19
  },
20
20
  {
21
- name: 'safari',
22
- tag: 'S',
21
+ name: 'webkit',
22
+ tag: 'W',
23
23
  },
24
24
  ];
25
25
  // Export only the browser names in lowercase
@@ -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"}
@@ -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 options = AVAILABLE_BROWSERS_1.default.map(({ tag, name }) => {
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 = (choices
120
- .map((choice) => {
121
- return AVAILABLE_BROWSERS_1.default[choice.index];
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../start/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../start/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dceky",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "Cypress toolkit for Harvard DCE",
5
5
  "main": "./lib/src/index.js",
6
6
  "types": "./lib/src/index.d.ts",
@@ -19,8 +19,8 @@ const AVAILABLE_BROWSERS: {
19
19
  tag: 'E',
20
20
  },
21
21
  {
22
- name: 'safari',
23
- tag: 'S',
22
+ name: 'webkit',
23
+ tag: 'W',
24
24
  },
25
25
  ];
26
26
 
@@ -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 options = AVAILABLE_BROWSERS.map(({ tag, name }) => {
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
- choices
138
- .map((choice) => {
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