UNPKG

1.42 kBJavaScriptView Raw
1var readline = require('readline');
2
3var when = require('when');
4
5var solution = require('./solution');
6var attempt = require('./attempt');
7
8var successMessage = '{blue}{bold}Challenge Completed{/bold}{/blue}';
9var failureMessage = '{red}{bold}Try Again{/bold}{/red}';
10
11function question(text, expectedCmd, success){
12 var rl = readline.createInterface({
13 input: process.stdin,
14 output: process.stdout
15 });
16
17 rl.on('SIGINT', function() {
18 rl.question('Are you sure you want to exit (y/N)? ', function(answer) {
19 if(answer.match(/^y(es)?$/i)){
20 rl.close();
21 } else {
22 console.log(text);
23 rl.prompt();
24 }
25 });
26 });
27
28 var defer = when.defer();
29
30 var expected = when.resolve();
31 if(typeof expectedCmd === 'string'){
32 expected = solution(expectedCmd);
33 } else {
34 success = expectedCmd;
35 }
36
37 success = success || function(data){
38 return data[0] === data[1];
39 };
40
41 console.log(text);
42 rl.prompt();
43 rl.once('line', function(cmd){
44 rl.close();
45 when.join(attempt(cmd), expected)
46 .then(success)
47 .then(function(passed){
48 if(passed){
49 console.log(successMessage);
50 defer.resolve();
51 } else {
52 console.log(failureMessage);
53 when(question(text, expectedCmd, success), defer.resolve);
54 }
55 }, console.error.bind(console));
56 });
57
58 return defer.promise;
59}
60
61module.exports = question;