dceky 1.2.1 → 1.2.3
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 +23 -17
- package/lib/src/genConfiguration/index.js +0 -9
- package/lib/src/genConfiguration/index.js.map +1 -1
- package/lib/start/constants/DEFAULT_THREADS_PER_COMBO.d.ts +1 -1
- package/lib/start/constants/DEFAULT_THREADS_PER_COMBO.js +1 -1
- package/lib/start/helpers/embedScreenshotsInReportData.d.ts +14 -0
- package/lib/start/helpers/embedScreenshotsInReportData.js +139 -0
- package/lib/start/helpers/embedScreenshotsInReportData.js.map +1 -0
- package/lib/start/helpers/executeCypress.js +1 -1
- package/lib/start/helpers/executeCypress.js.map +1 -1
- package/lib/start/helpers/generateHtmlReport.js +7 -0
- package/lib/start/helpers/generateHtmlReport.js.map +1 -1
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.d.ts +2 -1
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.js +34 -22
- package/lib/start/helpers/getCypressDetectedBrowsersForChooser.js.map +1 -1
- package/lib/start/helpers/mergeAllReportsAndGenerateHtml.js +52 -0
- package/lib/start/helpers/mergeAllReportsAndGenerateHtml.js.map +1 -1
- package/lib/start/helpers/reportHomepage.ejs +18 -7
- package/lib/start/index.d.ts +2 -2
- package/lib/start/index.js +214 -175
- package/lib/start/index.js.map +1 -1
- package/package.json +2 -1
- package/src/genConfiguration/index.ts +0 -13
- package/start/constants/DEFAULT_THREADS_PER_COMBO.ts +1 -1
- package/start/helpers/embedScreenshotsInReportData.ts +171 -0
- package/start/helpers/executeCypress.ts +1 -1
- package/start/helpers/generateHtmlReport.ts +12 -0
- package/start/helpers/getCypressDetectedBrowsersForChooser.ts +41 -23
- package/start/helpers/mergeAllReportsAndGenerateHtml.ts +60 -0
- package/start/helpers/reportHomepage.ejs +18 -7
- package/start/index.ts +218 -181
- package/start/helpers/extractArgValue.ts +0 -42
package/lib/start/index.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable no-console */
|
|
3
3
|
/**
|
|
4
|
-
* Checks
|
|
5
|
-
* asks user for missing selections, and launches Cypress
|
|
4
|
+
* Checks environment variables (for PROFILE, BROWSER, and HEADLESS),
|
|
5
|
+
* asks the user for missing selections, and launches Cypress
|
|
6
6
|
* @author Gardenia Liu
|
|
7
7
|
* @author Yuen Ler Chow
|
|
8
8
|
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
9
18
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
19
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
20
|
};
|
|
@@ -13,13 +22,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
22
|
// Import libs
|
|
14
23
|
const fs_1 = __importDefault(require("fs"));
|
|
15
24
|
const path_1 = __importDefault(require("path"));
|
|
25
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
26
|
+
const clear_1 = __importDefault(require("clear"));
|
|
16
27
|
// Import helpers
|
|
17
28
|
const showChooser_1 = __importDefault(require("./helpers/showChooser"));
|
|
18
29
|
const parseCommaSeparated_1 = __importDefault(require("./helpers/parseCommaSeparated"));
|
|
19
30
|
const findProfilesByNames_1 = __importDefault(require("./helpers/findProfilesByNames"));
|
|
20
31
|
const validateBrowsers_1 = __importDefault(require("./helpers/validateBrowsers"));
|
|
21
|
-
const extractArgValue_1 = __importDefault(require("./helpers/extractArgValue"));
|
|
22
32
|
const getRootPath_1 = __importDefault(require("./helpers/getRootPath"));
|
|
33
|
+
const prompt_1 = __importDefault(require("./helpers/prompt"));
|
|
34
|
+
const print_1 = __importDefault(require("./helpers/print"));
|
|
23
35
|
const executeCypress_1 = __importDefault(require("./helpers/executeCypress"));
|
|
24
36
|
const getCypressDetectedBrowsersForChooser_1 = __importDefault(require("./helpers/getCypressDetectedBrowsersForChooser"));
|
|
25
37
|
const getE2ETestFoldersForChooser_1 = __importDefault(require("./helpers/getE2ETestFoldersForChooser"));
|
|
@@ -30,6 +42,8 @@ const ALL_E2E_TESTS_LABEL_1 = __importDefault(require("./constants/ALL_E2E_TESTS
|
|
|
30
42
|
const ALL_E2E_TESTS_SPEC_PATTERN_1 = __importDefault(require("./constants/ALL_E2E_TESTS_SPEC_PATTERN"));
|
|
31
43
|
// Get the project directory
|
|
32
44
|
const pwd = (0, getRootPath_1.default)();
|
|
45
|
+
// Load .env vars before reading startup configuration
|
|
46
|
+
dotenv_1.default.config({ path: path_1.default.join(pwd, '.env') });
|
|
33
47
|
// Find available profiles under /cypress/profiles
|
|
34
48
|
const profilesDir = path_1.default.join(pwd, 'cypress/profiles');
|
|
35
49
|
if (!fs_1.default.existsSync(profilesDir)) {
|
|
@@ -52,208 +66,233 @@ if (profiles.length === 0) {
|
|
|
52
66
|
console.error(`No profiles found in '${profilesDir}'`);
|
|
53
67
|
process.exit(1);
|
|
54
68
|
}
|
|
55
|
-
//
|
|
56
|
-
const args = process.argv.slice(2);
|
|
57
|
-
// Get selections from environment variables or CLI arguments
|
|
69
|
+
// Get selections from environment variables
|
|
58
70
|
let selectedProfiles = [];
|
|
59
71
|
let selectedBrowsers = [];
|
|
60
72
|
let isHeadless = false;
|
|
61
73
|
let selectedE2ETestFolder = ALL_E2E_TESTS_LABEL_1.default;
|
|
62
74
|
let selectedE2ESpecPattern = ALL_E2E_TESTS_SPEC_PATTERN_1.default;
|
|
63
|
-
// Check for PROFILE
|
|
64
|
-
const
|
|
65
|
-
const argProfileRaw = (0, extractArgValue_1.default)(args, '--profile');
|
|
66
|
-
const profileRaw = envProfileRaw || argProfileRaw;
|
|
75
|
+
// Check for PROFILE
|
|
76
|
+
const profileRaw = process.env.PROFILE;
|
|
67
77
|
if (profileRaw) {
|
|
68
78
|
const profileNames = (0, parseCommaSeparated_1.default)(profileRaw);
|
|
69
79
|
selectedProfiles = (0, findProfilesByNames_1.default)(profileNames, profiles);
|
|
70
80
|
}
|
|
71
|
-
// Check for BROWSER
|
|
72
|
-
const
|
|
73
|
-
const argBrowserRaw = (0, extractArgValue_1.default)(args, '--browser');
|
|
74
|
-
const browserRaw = envBrowserRaw || argBrowserRaw;
|
|
81
|
+
// Check for BROWSER
|
|
82
|
+
const browserRaw = process.env.BROWSER;
|
|
75
83
|
if (browserRaw) {
|
|
76
84
|
const browserNames = (0, parseCommaSeparated_1.default)(browserRaw);
|
|
77
85
|
selectedBrowsers = (0, validateBrowsers_1.default)(browserNames);
|
|
78
86
|
}
|
|
79
|
-
// Check for E2E_TEST_FOLDER
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
const e2eTestFolderRaw = envE2ETestFolderRaw || argE2ETestFolderRaw;
|
|
83
|
-
// Check for HEADLESS (env var or CLI flag)
|
|
87
|
+
// Check for E2E_TEST_FOLDER
|
|
88
|
+
const e2eTestFolderRaw = process.env.E2E_TEST_FOLDER;
|
|
89
|
+
// Check for HEADLESS
|
|
84
90
|
const envHeadlessRaw = process.env.HEADLESS;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// Check for THREADS_PER_COMBO (env var or CLI arg)
|
|
89
|
-
const envThreadsRaw = process.env.THREADS_PER_COMBO;
|
|
90
|
-
const argThreadsRaw = (0, extractArgValue_1.default)(args, '--threadsPerCombo');
|
|
91
|
-
const threadsRaw = envThreadsRaw || argThreadsRaw;
|
|
91
|
+
isHeadless = !!(envHeadlessRaw && envHeadlessRaw.toLowerCase() !== 'false');
|
|
92
|
+
// Check for THREADS_PER_COMBO
|
|
93
|
+
const threadsRaw = process.env.THREADS_PER_COMBO;
|
|
92
94
|
let threadsPerCombo = DEFAULT_THREADS_PER_COMBO_1.default;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (!
|
|
96
|
-
threadsPerCombo = parsed;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
console.warn(`⚠️ Invalid THREADS_PER_COMBO value: "${threadsRaw}". Using default (${DEFAULT_THREADS_PER_COMBO_1.default}).`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// If headless wasn't specified, ask the user to choose
|
|
103
|
-
if (!envHeadlessRaw && !hasHeadlessFlag) {
|
|
104
|
-
const choices = (0, showChooser_1.default)({
|
|
105
|
-
question: 'Run in headless mode?',
|
|
106
|
-
options: [
|
|
107
|
-
{ tag: 'Y', description: 'Yes (headless)' },
|
|
108
|
-
{ tag: 'N', description: 'No (interactive)' },
|
|
109
|
-
],
|
|
110
|
-
title: 'Select mode',
|
|
111
|
-
allowMulti: false,
|
|
112
|
-
});
|
|
113
|
-
isHeadless = choices[0].tag === 'Y';
|
|
114
|
-
}
|
|
115
|
-
// If running headless, optionally narrow tests to one e2e folder
|
|
116
|
-
if (isHeadless) {
|
|
117
|
-
const choosableE2ETestFolders = (0, getE2ETestFoldersForChooser_1.default)();
|
|
118
|
-
if (e2eTestFolderRaw) {
|
|
119
|
-
const e2eSelection = (0, findE2ETestFolderByName_1.default)(e2eTestFolderRaw, choosableE2ETestFolders);
|
|
120
|
-
selectedE2ETestFolder = e2eSelection.description;
|
|
121
|
-
selectedE2ESpecPattern = e2eSelection.specPattern;
|
|
122
|
-
}
|
|
123
|
-
else if (choosableE2ETestFolders.length > 0) {
|
|
95
|
+
const start = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
+
// If headless wasn't specified, ask the user to choose
|
|
97
|
+
if (!envHeadlessRaw) {
|
|
124
98
|
const choices = (0, showChooser_1.default)({
|
|
125
|
-
question: '
|
|
99
|
+
question: 'Run in headless mode?',
|
|
126
100
|
options: [
|
|
127
|
-
{
|
|
128
|
-
|
|
129
|
-
description: ALL_E2E_TESTS_LABEL_1.default,
|
|
130
|
-
},
|
|
131
|
-
...choosableE2ETestFolders,
|
|
101
|
+
{ tag: 'Y', description: 'Yes (headless)' },
|
|
102
|
+
{ tag: 'N', description: 'No (interactive)' },
|
|
132
103
|
],
|
|
133
|
-
title: 'Select
|
|
104
|
+
title: 'Select mode',
|
|
134
105
|
allowMulti: false,
|
|
135
106
|
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
107
|
+
isHeadless = choices[0].tag === 'Y';
|
|
108
|
+
}
|
|
109
|
+
// This takes 5+ seconds to run, so start it now while we wait for the user to answer other questions
|
|
110
|
+
const cypressDetectedBrowsersPromise = (isHeadless && selectedBrowsers.length === 0
|
|
111
|
+
? (0, getCypressDetectedBrowsersForChooser_1.default)()
|
|
112
|
+
: null);
|
|
113
|
+
if (isHeadless) {
|
|
114
|
+
if (threadsRaw) {
|
|
115
|
+
const trimmedThreads = threadsRaw.trim();
|
|
116
|
+
const parsed = Number.parseInt(trimmedThreads, 10);
|
|
117
|
+
if (/^\d+$/.test(trimmedThreads) && parsed > 0) {
|
|
118
|
+
threadsPerCombo = parsed;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.warn(`⚠️ Invalid THREADS_PER_COMBO value: "${threadsRaw}". `
|
|
122
|
+
+ 'Use a positive whole number. '
|
|
123
|
+
+ `Using default (${DEFAULT_THREADS_PER_COMBO_1.default}).`);
|
|
146
124
|
}
|
|
147
125
|
}
|
|
126
|
+
else {
|
|
127
|
+
let parsedThreads = null;
|
|
128
|
+
(0, clear_1.default)();
|
|
129
|
+
print_1.default.title('Num Test Files in Parallel Per Combo');
|
|
130
|
+
console.log('');
|
|
131
|
+
print_1.default.subtitle('How many test files should run in parallel per profile/browser combo? (Press Enter for 1)');
|
|
132
|
+
while (parsedThreads === null) {
|
|
133
|
+
const response = (0, prompt_1.default)('> ', true).trim();
|
|
134
|
+
if (!response) {
|
|
135
|
+
parsedThreads = DEFAULT_THREADS_PER_COMBO_1.default;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const parsed = Number.parseInt(response, 10);
|
|
139
|
+
parsedThreads = /^\d+$/.test(response) && parsed > 0 ? parsed : null;
|
|
140
|
+
}
|
|
141
|
+
if (parsedThreads === null) {
|
|
142
|
+
console.log('Please enter a positive whole number, or press Enter for 1.');
|
|
143
|
+
console.log('');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
threadsPerCombo = parsedThreads;
|
|
147
|
+
}
|
|
148
148
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
// If running headless, optionally narrow tests to one e2e folder
|
|
150
|
+
if (isHeadless) {
|
|
151
|
+
const choosableE2ETestFolders = (0, getE2ETestFoldersForChooser_1.default)();
|
|
152
|
+
if (e2eTestFolderRaw) {
|
|
153
|
+
const e2eSelection = (0, findE2ETestFolderByName_1.default)(e2eTestFolderRaw, choosableE2ETestFolders);
|
|
154
|
+
selectedE2ETestFolder = e2eSelection.description;
|
|
155
|
+
selectedE2ESpecPattern = e2eSelection.specPattern;
|
|
156
|
+
}
|
|
157
|
+
else if (choosableE2ETestFolders.length > 0) {
|
|
158
|
+
const choices = (0, showChooser_1.default)({
|
|
159
|
+
question: 'Choose e2e test folder:',
|
|
160
|
+
options: [
|
|
161
|
+
{
|
|
162
|
+
tag: 'A',
|
|
163
|
+
description: ALL_E2E_TESTS_LABEL_1.default,
|
|
164
|
+
},
|
|
165
|
+
...choosableE2ETestFolders,
|
|
166
|
+
],
|
|
167
|
+
title: 'Select E2E Tests',
|
|
168
|
+
allowMulti: false,
|
|
169
|
+
});
|
|
170
|
+
const allTestsChosen = choices.some((choice) => {
|
|
171
|
+
return choice.tag === 'A';
|
|
172
|
+
});
|
|
173
|
+
if (!allTestsChosen) {
|
|
174
|
+
const selectedFolder = choosableE2ETestFolders.find((folder) => {
|
|
175
|
+
return folder.tag === choices[0].tag;
|
|
176
|
+
});
|
|
177
|
+
if (selectedFolder) {
|
|
178
|
+
selectedE2ETestFolder = selectedFolder.relativePath;
|
|
179
|
+
selectedE2ESpecPattern = selectedFolder.specPattern;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
156
183
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
184
|
+
// If running headless and no browsers were selected, ask the user to choose
|
|
185
|
+
if (isHeadless && selectedBrowsers.length === 0) {
|
|
186
|
+
const choosableBrowsers = yield cypressDetectedBrowsersPromise;
|
|
187
|
+
if (choosableBrowsers.length === 0) {
|
|
188
|
+
console.error('No browsers detected. Run `npx cypress info`, install a supported browser, and try again.');
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
const options = choosableBrowsers.map(({ tag, name }) => {
|
|
192
|
+
return {
|
|
193
|
+
tag,
|
|
194
|
+
description: name,
|
|
195
|
+
};
|
|
168
196
|
});
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
return b.name;
|
|
197
|
+
// Add "All" option if there are multiple browsers
|
|
198
|
+
if (choosableBrowsers.length > 1) {
|
|
199
|
+
options.unshift({
|
|
200
|
+
tag: 'A',
|
|
201
|
+
description: 'All browsers',
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
const choices = (0, showChooser_1.default)({
|
|
205
|
+
question: 'Choose browser(s) (commas for multiple: C,F)',
|
|
206
|
+
options,
|
|
207
|
+
title: 'Select Browser(s)',
|
|
208
|
+
allowMulti: true,
|
|
182
209
|
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
return browser.tag.toLowerCase() === choice.tag.toLowerCase();
|
|
210
|
+
const allBrowsersChosen = choices.some((choice) => {
|
|
211
|
+
return choice.tag === 'A';
|
|
212
|
+
});
|
|
213
|
+
if (allBrowsersChosen) {
|
|
214
|
+
selectedBrowsers = choosableBrowsers.map((b) => {
|
|
215
|
+
return b.name;
|
|
190
216
|
});
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
selectedBrowsers = (choices
|
|
220
|
+
.map((choice) => {
|
|
221
|
+
var _a;
|
|
222
|
+
const selectedBrowser = choosableBrowsers.find((browser) => {
|
|
223
|
+
return browser.tag.toLowerCase() === choice.tag.toLowerCase();
|
|
224
|
+
});
|
|
225
|
+
return (_a = selectedBrowser === null || selectedBrowser === void 0 ? void 0 : selectedBrowser.name) !== null && _a !== void 0 ? _a : null;
|
|
226
|
+
})
|
|
227
|
+
.filter((name) => {
|
|
228
|
+
return name !== null;
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
196
231
|
}
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
// - In
|
|
200
|
-
//
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
232
|
+
// If no profiles were selected, ask the user to choose
|
|
233
|
+
// - In headless mode, allow selecting multiple profiles
|
|
234
|
+
// - In visible mode, only allow selecting a single profile
|
|
235
|
+
// In the case where their environment selected more than one profile, but they are not headless, make them re-choose
|
|
236
|
+
if (selectedProfiles.length === 0
|
|
237
|
+
|| (!isHeadless && selectedProfiles.length > 1)) {
|
|
238
|
+
// Filter out "Default" profile from the chooser options
|
|
239
|
+
const choosableProfiles = profiles.filter((p) => {
|
|
240
|
+
return p.profileName.toLowerCase() !== 'default';
|
|
241
|
+
});
|
|
242
|
+
const options = choosableProfiles.map((p, idx) => {
|
|
243
|
+
return {
|
|
244
|
+
tag: String(idx + 1),
|
|
245
|
+
description: p.profileName,
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
// If there are multiple profiles, add an "All" option for headless mode
|
|
249
|
+
if (isHeadless && choosableProfiles.length > 1) {
|
|
250
|
+
options.unshift({
|
|
251
|
+
tag: 'A',
|
|
252
|
+
description: 'All profiles',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
const choices = (0, showChooser_1.default)({
|
|
256
|
+
question: (isHeadless
|
|
257
|
+
? 'Choose profile(s) (commas for multiple: 1,2):'
|
|
258
|
+
: 'Choose profile:'),
|
|
259
|
+
options,
|
|
260
|
+
title: `Choose profile${isHeadless ? 's' : ''}`,
|
|
261
|
+
allowMulti: isHeadless,
|
|
262
|
+
});
|
|
263
|
+
const allProfilesChosen = choices.some((choice) => {
|
|
264
|
+
return choice.tag === 'A';
|
|
219
265
|
});
|
|
266
|
+
if (allProfilesChosen) {
|
|
267
|
+
selectedProfiles = choosableProfiles;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
selectedProfiles = (choices
|
|
271
|
+
.map((choice) => {
|
|
272
|
+
var _a;
|
|
273
|
+
const profileIndex = Number.parseInt(choice.tag, 10) - 1;
|
|
274
|
+
if (Number.isNaN(profileIndex)) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
return (_a = choosableProfiles[profileIndex]) !== null && _a !== void 0 ? _a : null;
|
|
278
|
+
})
|
|
279
|
+
.filter((profile) => {
|
|
280
|
+
return profile !== null;
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
220
283
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
const allProfilesChosen = choices.some((choice) => {
|
|
230
|
-
return choice.tag === 'A';
|
|
284
|
+
// Execute Cypress with selected configuration
|
|
285
|
+
yield (0, executeCypress_1.default)({
|
|
286
|
+
selectedProfiles,
|
|
287
|
+
selectedBrowsers,
|
|
288
|
+
isHeadless,
|
|
289
|
+
threadsPerCombo,
|
|
290
|
+
e2eTestFolder: selectedE2ETestFolder,
|
|
291
|
+
e2eSpecPattern: selectedE2ESpecPattern,
|
|
231
292
|
});
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
selectedProfiles = (choices
|
|
237
|
-
.map((choice) => {
|
|
238
|
-
var _a;
|
|
239
|
-
const profileIndex = Number.parseInt(choice.tag, 10) - 1;
|
|
240
|
-
if (Number.isNaN(profileIndex)) {
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
243
|
-
return (_a = choosableProfiles[profileIndex]) !== null && _a !== void 0 ? _a : null;
|
|
244
|
-
})
|
|
245
|
-
.filter((profile) => {
|
|
246
|
-
return profile !== null;
|
|
247
|
-
}));
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// Execute Cypress with selected configuration
|
|
251
|
-
(0, executeCypress_1.default)({
|
|
252
|
-
selectedProfiles,
|
|
253
|
-
selectedBrowsers,
|
|
254
|
-
isHeadless,
|
|
255
|
-
threadsPerCombo,
|
|
256
|
-
e2eTestFolder: selectedE2ETestFolder,
|
|
257
|
-
e2eSpecPattern: selectedE2ESpecPattern,
|
|
293
|
+
});
|
|
294
|
+
start().catch((error) => {
|
|
295
|
+
console.error(error);
|
|
296
|
+
process.exit(1);
|
|
258
297
|
});
|
|
259
298
|
//# sourceMappingURL=index.js.map
|
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
|
|
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.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "Cypress toolkit for Harvard DCE",
|
|
5
5
|
"main": "./lib/src/index.js",
|
|
6
6
|
"types": "./lib/src/index.d.ts",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"clear": "^0.1.0",
|
|
37
37
|
"cypress-iframe": "^1.0.1",
|
|
38
38
|
"deepmerge": "4.3.1",
|
|
39
|
+
"dotenv": "^17.4.2",
|
|
39
40
|
"ejs": "^3.1.10",
|
|
40
41
|
"prompt-sync": "^4.2.0",
|
|
41
42
|
"set-cookie-parser": "^3.1.0"
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
/* eslint-disable global-require */
|
|
3
3
|
/* eslint-disable import/no-dynamic-require */
|
|
4
4
|
import path from 'path';
|
|
5
|
-
import fs from 'fs';
|
|
6
5
|
|
|
7
6
|
// Import cypress
|
|
8
7
|
import { defineConfig } from 'cypress';
|
|
@@ -112,23 +111,11 @@ const genConfiguration = () => {
|
|
|
112
111
|
baseUrl = `https://${baseUrl}`;
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
// Look for a /cypress/support/setupNodeEvents.ts file and add it to the config if it exists
|
|
116
|
-
const setupNodeEventsPath = path.join(CWD, '/cypress/support/setupNodeEvents.ts');
|
|
117
|
-
const setupNodeEventsExists = fs.existsSync(setupNodeEventsPath);
|
|
118
|
-
let setupNodeEvents: (
|
|
119
|
-
((on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => Cypress.PluginConfigOptions | void)
|
|
120
|
-
| undefined
|
|
121
|
-
);
|
|
122
|
-
if (setupNodeEventsExists) {
|
|
123
|
-
setupNodeEvents = require(setupNodeEventsPath).default;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
114
|
// Return the configuration object
|
|
127
115
|
return defineConfig({
|
|
128
116
|
e2e: {
|
|
129
117
|
experimentalWebKitSupport: true,
|
|
130
118
|
experimentalOriginDependencies: true,
|
|
131
|
-
setupNodeEvents,
|
|
132
119
|
baseUrl,
|
|
133
120
|
expose: exposed,
|
|
134
121
|
env: securedEnv,
|