dceky 1.0.0-beta.6 → 1.0.2
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/.eslintrc.js +93 -0
- package/README.md +41 -0
- package/cypress/e2e/profile-test.cy.ts +10 -0
- package/cypress/fixtures/example.json +5 -0
- package/cypress/support/commands.ts +37 -0
- package/cypress/support/e2e.ts +17 -0
- package/cypress.config.ts +9 -0
- package/docs/GlobalsAndProfiles.md +23 -0
- package/lib/setup/addToGitIgnore.d.ts +6 -0
- package/lib/setup/addToGitIgnore.js +46 -0
- package/lib/setup/addToGitIgnore.js.map +1 -0
- package/lib/setup/checkRequiredFiles.d.ts +6 -0
- package/lib/setup/checkRequiredFiles.js +58 -0
- package/lib/setup/checkRequiredFiles.js.map +1 -0
- package/lib/setup/genCommandImportFile.d.ts +7 -0
- package/lib/setup/genCommandImportFile.js +66 -0
- package/lib/setup/genCommandImportFile.js.map +1 -0
- package/lib/setup/genConfiguration/helpers/resolveDependents.d.ts +13 -0
- package/lib/setup/genConfiguration/helpers/resolveDependents.js +50 -0
- package/lib/setup/genConfiguration/helpers/resolveDependents.js.map +1 -0
- package/lib/setup/genConfiguration/helpers/splitEnv.d.ts +10 -0
- package/lib/setup/genConfiguration/helpers/splitEnv.js +27 -0
- package/lib/setup/genConfiguration/helpers/splitEnv.js.map +1 -0
- package/lib/setup/genConfiguration/index.d.ts +15 -0
- package/lib/setup/genConfiguration/index.js +86 -0
- package/lib/setup/genConfiguration/index.js.map +1 -0
- package/lib/setup/genConfiguration/types/DependentValue.d.ts +11 -0
- package/lib/setup/genConfiguration/types/DependentValue.js +3 -0
- package/lib/setup/genConfiguration/types/DependentValue.js.map +1 -0
- package/lib/setup/genConfiguration/types/GlobalsOrProfile.d.ts +9 -0
- package/lib/setup/genConfiguration/types/GlobalsOrProfile.js +3 -0
- package/lib/setup/genConfiguration/types/GlobalsOrProfile.js.map +1 -0
- package/lib/setup/genConfiguration/types/SplitEnv.d.ts +13 -0
- package/lib/setup/genConfiguration/types/SplitEnv.js +3 -0
- package/lib/setup/genConfiguration/types/SplitEnv.js.map +1 -0
- package/lib/setup/genConfigurationFile.d.ts +2 -0
- package/lib/setup/genConfigurationFile.js +63 -0
- package/lib/setup/genConfigurationFile.js.map +1 -0
- package/lib/setup/genDynamicConfigFile.d.ts +5 -0
- package/lib/setup/genDynamicConfigFile.js +28 -0
- package/lib/setup/genDynamicConfigFile.js.map +1 -0
- package/lib/setup/index.d.ts +1 -0
- package/lib/setup/index.js +16 -0
- package/lib/setup/index.js.map +1 -0
- package/lib/setup/setupCypressDependencies.d.ts +6 -0
- package/lib/setup/setupCypressDependencies.js +40 -0
- package/lib/setup/setupCypressDependencies.js.map +1 -0
- package/lib/src/commands/assertDoesNotHaveClass.d.ts +20 -0
- package/lib/src/commands/assertDoesNotHaveClass.js +17 -0
- package/lib/src/commands/assertDoesNotHaveClass.js.map +1 -0
- package/lib/src/commands/assertHasClass.d.ts +20 -0
- package/lib/src/commands/assertHasClass.js +17 -0
- package/lib/src/commands/assertHasClass.js.map +1 -0
- package/lib/src/commands/assertNumElements.d.ts +19 -0
- package/lib/src/commands/assertNumElements.js +17 -0
- package/lib/src/commands/assertNumElements.js.map +1 -0
- package/lib/src/commands/extractDataFromClass.d.ts +18 -0
- package/lib/src/commands/extractDataFromClass.js +25 -0
- package/lib/src/commands/extractDataFromClass.js.map +1 -0
- package/lib/src/commands/extractDataFromClassByContents.d.ts +19 -0
- package/lib/src/commands/extractDataFromClassByContents.js +26 -0
- package/lib/src/commands/extractDataFromClassByContents.js.map +1 -0
- package/lib/src/commands/getJSON.d.ts +16 -0
- package/lib/src/commands/getJSON.js +21 -0
- package/lib/src/commands/getJSON.js.map +1 -0
- package/lib/src/commands/getNumElements.d.ts +15 -0
- package/lib/src/commands/getNumElements.js +19 -0
- package/lib/src/commands/getNumElements.js.map +1 -0
- package/lib/src/commands/handleHarvardKey.d.ts +15 -0
- package/lib/src/commands/handleHarvardKey.js +53 -0
- package/lib/src/commands/handleHarvardKey.js.map +1 -0
- package/lib/src/commands/launchAs.d.ts +25 -0
- package/lib/src/commands/launchAs.js +66 -0
- package/lib/src/commands/launchAs.js.map +1 -0
- package/lib/src/commands/launchLTIUsingToken.d.ts +21 -0
- package/lib/src/commands/launchLTIUsingToken.js +68 -0
- package/lib/src/commands/launchLTIUsingToken.js.map +1 -0
- package/lib/src/commands/navigateToHref.d.ts +15 -0
- package/lib/src/commands/navigateToHref.js +35 -0
- package/lib/src/commands/navigateToHref.js.map +1 -0
- package/lib/src/commands/runScript.d.ts +15 -0
- package/lib/src/commands/runScript.js +20 -0
- package/lib/src/commands/runScript.js.map +1 -0
- package/lib/src/commands/typeInto.d.ts +24 -0
- package/lib/src/commands/typeInto.js +41 -0
- package/lib/src/commands/typeInto.js.map +1 -0
- package/lib/src/commands/visitCanvasGETEndpoint.d.ts +20 -0
- package/lib/src/commands/visitCanvasGETEndpoint.js +26 -0
- package/lib/src/commands/visitCanvasGETEndpoint.js.map +1 -0
- package/lib/src/commands/waitForElementVisible.d.ts +16 -0
- package/lib/src/commands/waitForElementVisible.js +19 -0
- package/lib/src/commands/waitForElementVisible.js.map +1 -0
- package/lib/src/genConfiguration/helpers/resolveDependents.d.ts +13 -0
- package/lib/src/genConfiguration/helpers/resolveDependents.js +50 -0
- package/lib/src/genConfiguration/helpers/resolveDependents.js.map +1 -0
- package/lib/src/genConfiguration/helpers/splitEnv.d.ts +10 -0
- package/lib/src/genConfiguration/helpers/splitEnv.js +27 -0
- package/lib/src/genConfiguration/helpers/splitEnv.js.map +1 -0
- package/{src/genConfiguration.ts → lib/src/genConfiguration/index.d.ts} +3 -6
- package/lib/src/genConfiguration/index.js +88 -0
- package/lib/src/genConfiguration/index.js.map +1 -0
- package/lib/src/genConfiguration/types/DependentValue.d.ts +11 -0
- package/lib/src/genConfiguration/types/DependentValue.js +3 -0
- package/lib/src/genConfiguration/types/DependentValue.js.map +1 -0
- package/lib/src/genConfiguration/types/GlobalsOrProfile.d.ts +9 -0
- package/lib/src/genConfiguration/types/GlobalsOrProfile.js +3 -0
- package/lib/src/genConfiguration/types/GlobalsOrProfile.js.map +1 -0
- package/lib/src/genConfiguration/types/SplitEnv.d.ts +13 -0
- package/lib/src/genConfiguration/types/SplitEnv.js +3 -0
- package/lib/src/genConfiguration/types/SplitEnv.js.map +1 -0
- package/lib/{index.d.ts → src/index.d.ts} +1 -1
- package/lib/{index.js → src/index.js} +6 -3
- package/lib/src/index.js.map +1 -0
- package/lib/src/init.d.ts +6 -0
- package/lib/src/init.js +45 -0
- package/lib/src/init.js.map +1 -0
- package/lib/start/constants/AVAILABLE_BROWSERS.d.ts +9 -0
- package/lib/start/constants/AVAILABLE_BROWSERS.js +27 -0
- package/lib/start/constants/AVAILABLE_BROWSERS.js.map +1 -0
- package/lib/start/helpers/exec.d.ts +8 -0
- package/lib/start/helpers/exec.js +18 -0
- package/lib/start/helpers/exec.js.map +1 -0
- package/lib/start/helpers/extractArgValue.d.ts +10 -0
- package/lib/start/helpers/extractArgValue.js +39 -0
- package/lib/start/helpers/extractArgValue.js.map +1 -0
- package/lib/start/helpers/findProfilesByNames.d.ts +16 -0
- package/lib/start/helpers/findProfilesByNames.js +35 -0
- package/lib/start/helpers/findProfilesByNames.js.map +1 -0
- package/lib/start/helpers/parseCommaSeparated.d.ts +8 -0
- package/lib/start/helpers/parseCommaSeparated.js +23 -0
- package/lib/start/helpers/parseCommaSeparated.js.map +1 -0
- package/lib/start/helpers/print.d.ts +38 -0
- package/lib/start/helpers/print.js +145 -0
- package/lib/start/helpers/print.js.map +1 -0
- package/lib/start/helpers/prompt.d.ts +8 -0
- package/lib/start/helpers/prompt.js +25 -0
- package/lib/start/helpers/prompt.js.map +1 -0
- package/lib/start/helpers/showChooser.d.ts +21 -0
- package/lib/start/helpers/showChooser.js +116 -0
- package/lib/start/helpers/showChooser.js.map +1 -0
- package/lib/start/helpers/validateBrowsers.d.ts +8 -0
- package/lib/start/helpers/validateBrowsers.js +36 -0
- package/lib/start/helpers/validateBrowsers.js.map +1 -0
- package/lib/start/index.d.ts +7 -0
- package/lib/start/index.js +139 -0
- package/lib/start/index.js.map +1 -0
- package/lib/start/types/ChooserOption.d.ts +10 -0
- package/lib/start/types/ChooserOption.js +3 -0
- package/lib/start/types/ChooserOption.js.map +1 -0
- package/package.json +28 -8
- package/setup/addToGitIgnore.ts +47 -0
- package/setup/checkRequiredFiles.ts +62 -0
- package/setup/genCommandImportFile.ts +75 -0
- package/setup/genDynamicConfigFile.ts +28 -0
- package/setup/index.ts +11 -0
- package/setup/setupCypressDependencies.ts +38 -0
- package/src/commands/assertDoesNotHaveClass.ts +51 -0
- package/src/commands/assertHasClass.ts +51 -0
- package/src/commands/assertNumElements.ts +50 -0
- package/src/commands/extractDataFromClass.ts +52 -0
- package/src/commands/extractDataFromClassByContents.ts +55 -0
- package/src/commands/getJSON.ts +45 -0
- package/src/commands/getNumElements.ts +45 -0
- package/src/commands/handleHarvardKey.ts +91 -0
- package/src/commands/launchAs.ts +120 -0
- package/src/commands/launchLTIUsingToken.ts +115 -0
- package/src/commands/navigateToHref.ts +60 -0
- package/src/commands/runScript.ts +44 -0
- package/src/commands/typeInto.ts +88 -0
- package/src/commands/visitCanvasGETEndpoint.ts +61 -0
- package/src/commands/waitForElementVisible.ts +49 -0
- package/src/genConfiguration/helpers/resolveDependents.ts +47 -0
- package/src/genConfiguration/helpers/splitEnv.ts +30 -0
- package/src/genConfiguration/index.ts +94 -0
- package/src/genConfiguration/types/DependentValue.ts +14 -0
- package/src/genConfiguration/types/GlobalsOrProfile.ts +12 -0
- package/src/genConfiguration/types/SplitEnv.ts +18 -0
- package/src/index.ts +7 -4
- package/src/init.ts +36 -17
- package/start/constants/AVAILABLE_BROWSERS.ts +28 -0
- package/start/helpers/exec.ts +17 -0
- package/start/helpers/extractArgValue.ts +42 -0
- package/start/helpers/findProfilesByNames.ts +39 -0
- package/start/helpers/parseCommaSeparated.ts +23 -0
- package/start/helpers/print.ts +155 -0
- package/start/helpers/prompt.ts +23 -0
- package/start/helpers/showChooser.ts +140 -0
- package/start/helpers/validateBrowsers.ts +35 -0
- package/start/index.ts +163 -0
- package/start/types/ChooserOption.ts +11 -0
- package/tsconfig.json +3 -4
- package/.eslintrc.json +0 -58
- package/lib/genConfiguration.d.ts +0 -8
- package/lib/genConfiguration.js +0 -13
- package/lib/genConfiguration.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/init.d.ts +0 -13
- package/lib/init.js +0 -10
- package/lib/init.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
/**
|
|
5
|
+
* Get the left buffer for a centered message
|
|
6
|
+
* @author Gabe Abrams
|
|
7
|
+
* @param message message to print
|
|
8
|
+
* @param padding amount of padding to add
|
|
9
|
+
* @returns number of chars in the buffer
|
|
10
|
+
*/
|
|
11
|
+
var leftBuffer = function (message, padding) {
|
|
12
|
+
return (Math.floor(process.stdout.columns / 2) - padding - Math.ceil(message.length / 2));
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get the right buffer for a centered message
|
|
16
|
+
* @author Gabe Abrams
|
|
17
|
+
* @param message message to print
|
|
18
|
+
* @param padding amount of padding to add
|
|
19
|
+
* @returns number of chars in the buffer
|
|
20
|
+
*/
|
|
21
|
+
var rightBuffer = function (message, padding) {
|
|
22
|
+
return (Math.ceil(process.stdout.columns / 2) - padding - Math.floor(message.length / 2));
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Surround text with a border and spaces
|
|
26
|
+
* @author Gabe Abrams
|
|
27
|
+
* @param str text to print
|
|
28
|
+
* @param border single character to use as a border
|
|
29
|
+
* @returns text to print
|
|
30
|
+
*/
|
|
31
|
+
var surroundWithBuffer = function (str, border) {
|
|
32
|
+
return (border
|
|
33
|
+
+ ' '.repeat(leftBuffer(str, border.length))
|
|
34
|
+
+ str
|
|
35
|
+
+ ' '.repeat(rightBuffer(str, border.length))
|
|
36
|
+
+ border);
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Surround text with a character as the buffer
|
|
40
|
+
* @author Gabe Abrams
|
|
41
|
+
* @param str text to print
|
|
42
|
+
* @param char character to place as the buffer
|
|
43
|
+
* @returns text to print
|
|
44
|
+
*/
|
|
45
|
+
var surroundWithChars = function (str, char) {
|
|
46
|
+
if (str.length > process.stdout.columns) {
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
if (str.length === process.stdout.columns - 1) {
|
|
50
|
+
return char + str;
|
|
51
|
+
}
|
|
52
|
+
if (str.length === process.stdout.columns - 2) {
|
|
53
|
+
return char + str + char;
|
|
54
|
+
}
|
|
55
|
+
return (char.repeat(leftBuffer(str, 1))
|
|
56
|
+
+ ' '
|
|
57
|
+
+ str
|
|
58
|
+
+ ' '
|
|
59
|
+
+ char.repeat(rightBuffer(str, 1)));
|
|
60
|
+
};
|
|
61
|
+
// Prompt instance
|
|
62
|
+
var cachedPrompt;
|
|
63
|
+
var print = {
|
|
64
|
+
/**
|
|
65
|
+
* Print a title
|
|
66
|
+
* @author Gabe Abrams
|
|
67
|
+
* @param str text to print
|
|
68
|
+
*/
|
|
69
|
+
title: function (str) {
|
|
70
|
+
if (str.length > process.stdout.columns) {
|
|
71
|
+
return console.log(str);
|
|
72
|
+
}
|
|
73
|
+
console.log('\u2554' + '\u2550'.repeat(process.stdout.columns - 2) + '\u2557');
|
|
74
|
+
console.log(surroundWithBuffer(str, '\u2551'));
|
|
75
|
+
console.log('\u255A' + '\u2550'.repeat(process.stdout.columns - 2) + '\u255D');
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* Print a sub title (subheading)
|
|
79
|
+
* @author Gabe Abrams
|
|
80
|
+
* @param str text to print
|
|
81
|
+
*/
|
|
82
|
+
subtitle: function (str) {
|
|
83
|
+
if (str.length > process.stdout.columns) {
|
|
84
|
+
return console.log(str);
|
|
85
|
+
}
|
|
86
|
+
console.log(surroundWithChars(str, '\u257C'));
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Print centered text
|
|
90
|
+
* @author Gabe Abrams
|
|
91
|
+
* @param str text to print
|
|
92
|
+
*/
|
|
93
|
+
centered: function (str) {
|
|
94
|
+
var lines = [];
|
|
95
|
+
var index = 0;
|
|
96
|
+
while (index < str.length) {
|
|
97
|
+
lines.push(str.substring(index, Math.min(index + process.stdout.columns, str.length)));
|
|
98
|
+
index += process.stdout.columns;
|
|
99
|
+
}
|
|
100
|
+
lines.forEach(function (line, lineIndex) {
|
|
101
|
+
if (lineIndex !== lines.length - 1) {
|
|
102
|
+
// No need to center: fills whole line
|
|
103
|
+
console.log(line);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// This line needs to be centered
|
|
107
|
+
console.log(surroundWithChars(line, ' '));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* Print a fatal error message
|
|
113
|
+
* @author Gabe Abrams
|
|
114
|
+
* @param err error message
|
|
115
|
+
*/
|
|
116
|
+
fatalError: function (err) {
|
|
117
|
+
console.log('\n');
|
|
118
|
+
var errLine1 = err.substring(0, process.stdout.columns - 6);
|
|
119
|
+
var errLine2 = err.substring(process.stdout.columns - 6);
|
|
120
|
+
console.log('\u2554' + '\u2550'.repeat(3) + '\u2557 ');
|
|
121
|
+
console.log("\u2551 ! \u2551 ".concat(errLine1));
|
|
122
|
+
console.log('\u255A' + '\u2550'.repeat(3) + '\u255D ' + errLine2);
|
|
123
|
+
process.exit(0);
|
|
124
|
+
},
|
|
125
|
+
/**
|
|
126
|
+
* Save a copy of the prompt instance
|
|
127
|
+
* @author Gabe Abrams
|
|
128
|
+
* @param promptInstance instance of prompt-sync
|
|
129
|
+
*/
|
|
130
|
+
savePrompt: function (promptInstance) {
|
|
131
|
+
cachedPrompt = promptInstance;
|
|
132
|
+
},
|
|
133
|
+
/**
|
|
134
|
+
* Ask the user to press enter before continuing
|
|
135
|
+
* @author Gabe Abrams
|
|
136
|
+
*/
|
|
137
|
+
enterToContinue: function () {
|
|
138
|
+
var res = cachedPrompt(surroundWithChars('enter to continue, ctrl+c to quit', '\u257C'), true);
|
|
139
|
+
if (res === null) {
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
exports.default = print;
|
|
145
|
+
//# sourceMappingURL=print.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print.js","sourceRoot":"","sources":["../../../start/helpers/print.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
var prompt_sync_1 = __importDefault(require("prompt-sync"));
|
|
7
|
+
var print_1 = __importDefault(require("./print"));
|
|
8
|
+
var promptSync = (0, prompt_sync_1.default)();
|
|
9
|
+
/**
|
|
10
|
+
* Ask the user a question
|
|
11
|
+
* @param title title of the question
|
|
12
|
+
* @param notRequired true if question is not required
|
|
13
|
+
* @returns response
|
|
14
|
+
*/
|
|
15
|
+
var prompt = function (title, notRequired) {
|
|
16
|
+
var val = promptSync(title);
|
|
17
|
+
if (val === null || (!notRequired && !val)) {
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
return val;
|
|
21
|
+
};
|
|
22
|
+
// Save the prompt for use later
|
|
23
|
+
print_1.default.savePrompt(prompt);
|
|
24
|
+
exports.default = prompt;
|
|
25
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../start/helpers/prompt.ts"],"names":[],"mappings":";;;;;AAAA,4DAAqC;AACrC,kDAA4B;AAE5B,IAAM,UAAU,GAAG,IAAA,qBAAU,GAAE,CAAC;AAEhC;;;;;GAKG;AACH,IAAM,MAAM,GAAG,UAAC,KAAa,EAAE,WAAqB;IAClD,IAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,gCAAgC;AAChC,eAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAEzB,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import ChooserOption from '../types/ChooserOption';
|
|
2
|
+
/**
|
|
3
|
+
* Show a chooser between many options
|
|
4
|
+
* @author Gabe Abrams
|
|
5
|
+
* @author Yuen Ler Chow
|
|
6
|
+
* @param opts object of arguments
|
|
7
|
+
* @param opts.question the question to ask
|
|
8
|
+
* @param opts.options list of options to choose from
|
|
9
|
+
* @param opts.title main title to show above the choices
|
|
10
|
+
* @param opts.dontClear if true, don't clear the console before
|
|
11
|
+
* @param opts.allowMulti if true, allow multiple selections (comma-separated)
|
|
12
|
+
* @returns array of chosen option(s)
|
|
13
|
+
*/
|
|
14
|
+
declare const showChooser: (opts: {
|
|
15
|
+
question: string;
|
|
16
|
+
options: ChooserOption[];
|
|
17
|
+
title?: string;
|
|
18
|
+
dontClear?: boolean;
|
|
19
|
+
allowMulti?: boolean;
|
|
20
|
+
}) => ChooserOption[];
|
|
21
|
+
export default showChooser;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
/* eslint-disable no-console */
|
|
18
|
+
var clear_1 = __importDefault(require("clear"));
|
|
19
|
+
// Import shared helpers
|
|
20
|
+
var print_1 = __importDefault(require("./print"));
|
|
21
|
+
var prompt_1 = __importDefault(require("./prompt"));
|
|
22
|
+
var parseCommaSeparated_1 = __importDefault(require("./parseCommaSeparated"));
|
|
23
|
+
/**
|
|
24
|
+
* Show a chooser between many options
|
|
25
|
+
* @author Gabe Abrams
|
|
26
|
+
* @author Yuen Ler Chow
|
|
27
|
+
* @param opts object of arguments
|
|
28
|
+
* @param opts.question the question to ask
|
|
29
|
+
* @param opts.options list of options to choose from
|
|
30
|
+
* @param opts.title main title to show above the choices
|
|
31
|
+
* @param opts.dontClear if true, don't clear the console before
|
|
32
|
+
* @param opts.allowMulti if true, allow multiple selections (comma-separated)
|
|
33
|
+
* @returns array of chosen option(s)
|
|
34
|
+
*/
|
|
35
|
+
var showChooser = function (opts) {
|
|
36
|
+
var question = opts.question, options = opts.options, title = opts.title, dontClear = opts.dontClear, _a = opts.allowMulti, allowMulti = _a === void 0 ? false : _a;
|
|
37
|
+
// Helper to re-display the chooser after an invalid selection
|
|
38
|
+
var retryWithMessage = function (message) {
|
|
39
|
+
(0, clear_1.default)();
|
|
40
|
+
print_1.default.title('Invalid Choice');
|
|
41
|
+
console.log(message);
|
|
42
|
+
console.log('');
|
|
43
|
+
print_1.default.enterToContinue();
|
|
44
|
+
return showChooser({
|
|
45
|
+
question: question,
|
|
46
|
+
options: options,
|
|
47
|
+
title: title,
|
|
48
|
+
dontClear: dontClear,
|
|
49
|
+
allowMulti: allowMulti,
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
// Print the header
|
|
53
|
+
if (!dontClear) {
|
|
54
|
+
(0, clear_1.default)();
|
|
55
|
+
}
|
|
56
|
+
if (title) {
|
|
57
|
+
print_1.default.title(title);
|
|
58
|
+
console.log('');
|
|
59
|
+
}
|
|
60
|
+
print_1.default.subtitle(question);
|
|
61
|
+
// Make sure all options have tags
|
|
62
|
+
var nextNumber = 1;
|
|
63
|
+
var optionsWithTags = options.map(function (option) {
|
|
64
|
+
// Get/generate a tag
|
|
65
|
+
var tag = option.tag;
|
|
66
|
+
if (!tag) {
|
|
67
|
+
tag = String(nextNumber);
|
|
68
|
+
nextNumber += 1;
|
|
69
|
+
}
|
|
70
|
+
// Return complete option
|
|
71
|
+
return __assign(__assign({}, option), { tag: tag });
|
|
72
|
+
});
|
|
73
|
+
// Print options
|
|
74
|
+
optionsWithTags.forEach(function (option) {
|
|
75
|
+
console.log("".concat(option.tag, " - ").concat(option.description));
|
|
76
|
+
});
|
|
77
|
+
// Ask user to choose
|
|
78
|
+
var response = (0, prompt_1.default)('> ').trim();
|
|
79
|
+
// Always parse as comma-separated (treat all inputs with multi-select logic)
|
|
80
|
+
var selectedTags = (0, parseCommaSeparated_1.default)(response);
|
|
81
|
+
// Fail fast if multi-select is not allowed but multiple selections were made
|
|
82
|
+
if (!allowMulti && selectedTags.length > 1) {
|
|
83
|
+
return retryWithMessage('Multiple selections are not allowed. Please select only one option.');
|
|
84
|
+
}
|
|
85
|
+
// Find matching options
|
|
86
|
+
var selected = [];
|
|
87
|
+
var invalidTags = [];
|
|
88
|
+
selectedTags.forEach(function (tag) {
|
|
89
|
+
var lowerTag = tag.toLowerCase();
|
|
90
|
+
var found = false;
|
|
91
|
+
optionsWithTags.forEach(function (opt, idx) {
|
|
92
|
+
if (opt.tag.toLowerCase() === lowerTag) {
|
|
93
|
+
selected.push({
|
|
94
|
+
description: opt.description,
|
|
95
|
+
tag: opt.tag,
|
|
96
|
+
index: idx,
|
|
97
|
+
});
|
|
98
|
+
found = true;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
if (!found) {
|
|
102
|
+
invalidTags.push(tag);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// Handle invalid tags
|
|
106
|
+
if (invalidTags.length > 0) {
|
|
107
|
+
return retryWithMessage("The following selections are not valid: ".concat(invalidTags.join(', ')));
|
|
108
|
+
}
|
|
109
|
+
// Handle no selections
|
|
110
|
+
if (selected.length === 0) {
|
|
111
|
+
return retryWithMessage('No valid selections made.');
|
|
112
|
+
}
|
|
113
|
+
return selected;
|
|
114
|
+
};
|
|
115
|
+
exports.default = showChooser;
|
|
116
|
+
//# sourceMappingURL=showChooser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"showChooser.js","sourceRoot":"","sources":["../../../start/helpers/showChooser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate browsers (supports multiple)
|
|
3
|
+
* @author Yuen Ler Chow
|
|
4
|
+
* @param browserNames array of browser names to validate
|
|
5
|
+
* @returns array of valid browser names (lowercased)
|
|
6
|
+
*/
|
|
7
|
+
declare const validateBrowsers: (browserNames: string[]) => string[];
|
|
8
|
+
export default validateBrowsers;
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
var AVAILABLE_BROWSERS_1 = __importDefault(require("../constants/AVAILABLE_BROWSERS"));
|
|
8
|
+
/**
|
|
9
|
+
* Validate browsers (supports multiple)
|
|
10
|
+
* @author Yuen Ler Chow
|
|
11
|
+
* @param browserNames array of browser names to validate
|
|
12
|
+
* @returns array of valid browser names (lowercased)
|
|
13
|
+
*/
|
|
14
|
+
var validateBrowsers = function (browserNames) {
|
|
15
|
+
var valid = [];
|
|
16
|
+
var invalid = [];
|
|
17
|
+
// Convert all browser names to lowercase for comparison
|
|
18
|
+
var lowercaseBrowserNames = browserNames.map(function (browser) { return browser.toLowerCase(); });
|
|
19
|
+
// Validate each browser
|
|
20
|
+
lowercaseBrowserNames.forEach(function (browser) {
|
|
21
|
+
if (AVAILABLE_BROWSERS_1.default.some(function (b) { return b.name.toLowerCase() === browser.toLowerCase(); })) {
|
|
22
|
+
valid.push(browser);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
invalid.push(browser);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// If there are invalid browsers, log error and exit
|
|
29
|
+
if (invalid.length > 0) {
|
|
30
|
+
console.error("Browser(s) invalid: ".concat(invalid.join(', '), ". Available browsers: ").concat(AVAILABLE_BROWSERS_1.default.join(', ')));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
return valid;
|
|
34
|
+
};
|
|
35
|
+
exports.default = validateBrowsers;
|
|
36
|
+
//# sourceMappingURL=validateBrowsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateBrowsers.js","sourceRoot":"","sources":["../../../start/helpers/validateBrowsers.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,uFAAiE;AAEjE;;;;;GAKG;AACH,IAAM,gBAAgB,GAAG,UAAC,YAAsB;IAC9C,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,wDAAwD;IACxD,IAAM,qBAAqB,GAAG,YAAY,CAAC,GAAG,CAAC,UAAC,OAAO,IAAO,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/F,wBAAwB;IACxB,qBAAqB,CAAC,OAAO,CAAC,UAAC,OAAO;QACpC,IAAI,4BAAkB,CAAC,IAAI,CAAC,UAAC,CAAC,IAAO,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,8BAAuB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAyB,4BAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
/**
|
|
4
|
+
* Checks arguments and environment variables (for PROFILE, BROWSER, and HEADLESS),
|
|
5
|
+
* asks user for missing selections, and launches Cypress
|
|
6
|
+
* @author Gardenia Liu
|
|
7
|
+
* @author Yuen Ler Chow
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
// Import libs
|
|
14
|
+
var fs_1 = __importDefault(require("fs"));
|
|
15
|
+
var path_1 = __importDefault(require("path"));
|
|
16
|
+
// Import helpers
|
|
17
|
+
var showChooser_1 = __importDefault(require("./helpers/showChooser"));
|
|
18
|
+
var parseCommaSeparated_1 = __importDefault(require("./helpers/parseCommaSeparated"));
|
|
19
|
+
var findProfilesByNames_1 = __importDefault(require("./helpers/findProfilesByNames"));
|
|
20
|
+
var validateBrowsers_1 = __importDefault(require("./helpers/validateBrowsers"));
|
|
21
|
+
var extractArgValue_1 = __importDefault(require("./helpers/extractArgValue"));
|
|
22
|
+
// Import constants
|
|
23
|
+
var AVAILABLE_BROWSERS_1 = __importDefault(require("./constants/AVAILABLE_BROWSERS"));
|
|
24
|
+
// Get the project directory
|
|
25
|
+
var pwd = path_1.default.join(__dirname, '../..');
|
|
26
|
+
// Find available profiles under /cypress/profiles
|
|
27
|
+
var profilesDir = path_1.default.join(pwd, 'cypress/profiles');
|
|
28
|
+
if (!fs_1.default.existsSync(profilesDir)) {
|
|
29
|
+
console.warn("[cypress.config] Could not load profile '".concat(profilesDir, "'"));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// Find all files matching the pattern: {ProfileName}.Profile.ts
|
|
33
|
+
var profileFiles = (fs_1.default
|
|
34
|
+
.readdirSync(profilesDir)
|
|
35
|
+
.filter(function (f) {
|
|
36
|
+
return f.endsWith('.Profile.ts');
|
|
37
|
+
}));
|
|
38
|
+
// Get profile names by removing '.Profile.ts'
|
|
39
|
+
var profiles = profileFiles.map(function (file) {
|
|
40
|
+
var profileName = file.replace('.Profile.ts', '');
|
|
41
|
+
return { file: file, profileName: profileName };
|
|
42
|
+
});
|
|
43
|
+
// Exit if no profiles found
|
|
44
|
+
if (profiles.length === 0) {
|
|
45
|
+
console.error("No profiles found in '".concat(profilesDir, "'"));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// Parse CLI arguments
|
|
49
|
+
var args = process.argv.slice(2);
|
|
50
|
+
// Get selections from environment variables or CLI arguments
|
|
51
|
+
var selectedProfiles = [];
|
|
52
|
+
var selectedBrowsers = [];
|
|
53
|
+
var isHeadless = false;
|
|
54
|
+
// Check for PROFILE (env var or CLI arg)
|
|
55
|
+
var envProfileRaw = process.env.PROFILE;
|
|
56
|
+
var argProfileRaw = (0, extractArgValue_1.default)(args, '--profile');
|
|
57
|
+
var profileRaw = envProfileRaw || argProfileRaw;
|
|
58
|
+
if (profileRaw) {
|
|
59
|
+
var profileNames = (0, parseCommaSeparated_1.default)(profileRaw);
|
|
60
|
+
selectedProfiles = (0, findProfilesByNames_1.default)(profileNames, profiles);
|
|
61
|
+
}
|
|
62
|
+
// Check for BROWSER (env var or CLI arg)
|
|
63
|
+
var envBrowserRaw = process.env.BROWSER;
|
|
64
|
+
var argBrowserRaw = (0, extractArgValue_1.default)(args, '--browser');
|
|
65
|
+
var browserRaw = envBrowserRaw || argBrowserRaw;
|
|
66
|
+
if (browserRaw) {
|
|
67
|
+
var browserNames = (0, parseCommaSeparated_1.default)(browserRaw);
|
|
68
|
+
selectedBrowsers = (0, validateBrowsers_1.default)(browserNames);
|
|
69
|
+
}
|
|
70
|
+
// Check for HEADLESS (env var or CLI flag)
|
|
71
|
+
var envHeadlessRaw = process.env.HEADLESS;
|
|
72
|
+
var headlessFlagValue = (0, extractArgValue_1.default)(args, '--headless');
|
|
73
|
+
var hasHeadlessFlag = headlessFlagValue !== undefined;
|
|
74
|
+
isHeadless = !!(envHeadlessRaw && envHeadlessRaw.toLowerCase() !== 'false') || hasHeadlessFlag;
|
|
75
|
+
// If headless wasn't specified, ask the user to choose
|
|
76
|
+
if (!envHeadlessRaw && !hasHeadlessFlag) {
|
|
77
|
+
var choices = (0, showChooser_1.default)({
|
|
78
|
+
question: 'Run in headless mode?',
|
|
79
|
+
options: [
|
|
80
|
+
{ tag: '1', description: 'Yes (headless)' },
|
|
81
|
+
{ tag: '2', description: 'No (interactive)' },
|
|
82
|
+
],
|
|
83
|
+
title: 'Select mode',
|
|
84
|
+
allowMulti: false,
|
|
85
|
+
});
|
|
86
|
+
isHeadless = choices[0].tag === '1';
|
|
87
|
+
}
|
|
88
|
+
// If running headless and no browsers were selected, ask the user to choose
|
|
89
|
+
if (isHeadless && selectedBrowsers.length === 0) {
|
|
90
|
+
var options = AVAILABLE_BROWSERS_1.default.map(function (_a) {
|
|
91
|
+
var tag = _a.tag, name = _a.name;
|
|
92
|
+
return {
|
|
93
|
+
tag: tag,
|
|
94
|
+
description: name,
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
var choices = (0, showChooser_1.default)({
|
|
98
|
+
question: 'Choose browser(s) (commas for multiple: C,F)',
|
|
99
|
+
options: options,
|
|
100
|
+
title: 'Select browser(s)',
|
|
101
|
+
allowMulti: true,
|
|
102
|
+
});
|
|
103
|
+
selectedBrowsers = (choices
|
|
104
|
+
.map(function (choice) {
|
|
105
|
+
return AVAILABLE_BROWSERS_1.default[choice.index];
|
|
106
|
+
})
|
|
107
|
+
.map(function (_a) {
|
|
108
|
+
var name = _a.name;
|
|
109
|
+
return name;
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
// If no profiles were selected, ask the user to choose
|
|
113
|
+
// - In headless mode, allow selecting multiple profiles
|
|
114
|
+
// - In visible mode, only allow selecting a single profile
|
|
115
|
+
// In the case where their environment selected more than one profile, but they are not headless, make them re-choose
|
|
116
|
+
if (selectedProfiles.length === 0
|
|
117
|
+
|| (!isHeadless && selectedProfiles.length > 1)) {
|
|
118
|
+
var options = profiles.map(function (p, idx) {
|
|
119
|
+
return {
|
|
120
|
+
tag: String(idx + 1),
|
|
121
|
+
description: p.profileName,
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
var choices = (0, showChooser_1.default)({
|
|
125
|
+
question: (isHeadless
|
|
126
|
+
? 'Choose profile(s) (commas for multiple: 1,2):'
|
|
127
|
+
: 'Choose profile:'),
|
|
128
|
+
options: options,
|
|
129
|
+
title: "Choose profile".concat(isHeadless ? 's' : ''),
|
|
130
|
+
allowMulti: isHeadless,
|
|
131
|
+
});
|
|
132
|
+
selectedProfiles = choices.map(function (choice) { return profiles[choice.index]; });
|
|
133
|
+
}
|
|
134
|
+
// Execute commands for each combination of profile and browser (not yet implemented)
|
|
135
|
+
console.log('Starting Cypress with the following configuration:');
|
|
136
|
+
console.log("Profiles: ".concat(selectedProfiles.map(function (p) { return p.profileName; }).join(', ')));
|
|
137
|
+
console.log("Browsers: ".concat(selectedBrowsers.join(', ')));
|
|
138
|
+
console.log("Headless: ".concat(isHeadless));
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../start/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChooserOption.js","sourceRoot":"","sources":["../../../start/types/ChooserOption.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dceky",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Cypress toolkit for Harvard DCE",
|
|
5
|
-
"main": "./lib/index.js",
|
|
6
|
-
"types": "./lib/index.d.ts",
|
|
5
|
+
"main": "./lib/src/index.js",
|
|
6
|
+
"types": "./lib/src/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "tsc --project ./tsconfig.json"
|
|
8
|
+
"build": "tsc --project ./tsconfig.json",
|
|
9
|
+
"ky:start": "npx tsx ./start/index.ts",
|
|
10
|
+
"ky:setup": "npx tsx ./setup/index.ts",
|
|
11
|
+
"ky:dev": "npm run ky:setup && npm run ky:start"
|
|
9
12
|
},
|
|
10
13
|
"repository": {
|
|
11
14
|
"type": "git",
|
|
@@ -22,11 +25,28 @@
|
|
|
22
25
|
"url": "https://github.com/harvard-edtech/dceky/issues"
|
|
23
26
|
},
|
|
24
27
|
"homepage": "https://github.com/harvard-edtech/dceky#readme",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"child_process": "^1.0.2",
|
|
30
|
+
"clear": "^0.1.0",
|
|
31
|
+
"deepmerge": "4.3.1",
|
|
32
|
+
"prompt-sync": "^4.2.0",
|
|
33
|
+
"@types/prompt-sync": "^4.2.3",
|
|
34
|
+
"@types/clear": "^0.1.4",
|
|
35
|
+
"@types/node": "^22.7.0"
|
|
27
36
|
},
|
|
28
37
|
"devDependencies": {
|
|
29
|
-
"
|
|
30
|
-
"
|
|
38
|
+
"typescript": "^5.9.3",
|
|
39
|
+
"@types/deepmerge": "2.1.0",
|
|
40
|
+
"@types/node": "^24.6.1",
|
|
41
|
+
"cross-env": "^10.1.0",
|
|
42
|
+
"eslint": "^8.42.0",
|
|
43
|
+
"eslint-config-airbnb": "^19.0.4",
|
|
44
|
+
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
45
|
+
"eslint-plugin-import": "^2.32.0",
|
|
46
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
47
|
+
"eslint-plugin-react": "^7.37.5"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"cypress": "^x.x.x"
|
|
31
51
|
}
|
|
32
52
|
}
|