UNPKG

3.28 kBJavaScriptView Raw
1const taskList = require("./taskList");
2const separator = " ~ ";
3const Conf = require("conf");
4const config = new Conf();
5const moment = require("moment");
6const chalk = require("chalk");
7const parseScriptFile = require("./parseScriptsMd.js");
8const parsePackageFile = require("./parseScriptsPackage.js");
9const runCLICommand = require("./runCLICommand");
10const { prompt } = require("enquirer");
11
12const taskListAutoComplete = async tasks => {
13 try {
14 let { answer } = await prompt({
15 type: "autocomplete",
16 message: `${chalk.green.bold.underline("Choose task to run")}`,
17 choices: tasks,
18 name: `answer`
19 });
20 return answer.split(separator)[0].trim();
21 } catch (e) {
22 return false;
23 }
24};
25
26const startScripts = async (categories = true) => {
27 console.clear();
28 const FcScripts = await parseScriptFile();
29 if (FcScripts === false) {
30 return false;
31 }
32 let recentTasks = config.get("recentTasks", {});
33 let recentTaskArr = Object.keys(recentTasks)
34 .map(taskName => {
35 let task = recentTasks[taskName];
36 return { name: taskName, lastExecuted: task.lastExecuted };
37 })
38 .sort((a, b) =>
39 a.lastExecuted > b.lastExecuted ? 1 : b.lastExecuted > a.lastExecuted ? -1 : 0
40 )
41 .reverse()
42 .slice(0, 3);
43 let recentTaskOptions = recentTaskArr.map(task => {
44 return task.name + separator + moment(task.lastExecuted).calendar();
45 });
46 let taskToRun;
47 if (categories) {
48 taskToRun = await taskList(FcScripts, recentTaskOptions);
49 } else {
50 let tasks = FcScripts.allTasks;
51
52 taskToRun = await taskListAutoComplete(
53 tasks.map(task => {
54 return `${task.name}${separator}${task.description}`;
55 })
56 );
57 }
58 if (recentTasks[taskToRun] === undefined) {
59 recentTasks[taskToRun] = { lastExecuted: Date.now() };
60 } else {
61 recentTasks[taskToRun].lastExecuted = Date.now();
62 }
63 config.set("recentTasks", recentTasks);
64 let taskIndex = FcScripts.allTasks.findIndex(t => t.name === taskToRun);
65 let script = FcScripts.allTasks[taskIndex].script;
66 let params = script.split(" ");
67 let type = params.shift();
68 await runCLICommand({
69 task: { name: taskToRun },
70 script: {
71 type: type,
72 rest: params
73 }
74 });
75};
76
77const startPackageScripts = async () => {
78 console.clear();
79 const packageScripts = await parsePackageFile();
80 let tasks = Object.keys(packageScripts).map(e => {
81 return { name: e, script: packageScripts[e] };
82 });
83
84 let taskToRun = await taskListAutoComplete(
85 tasks.map(task => {
86 return `${task.name}${separator}${task.script}`;
87 })
88 );
89 if (taskToRun === false) {
90 console.log(chalk.green.bold("See you soon!"));
91 return false;
92 }
93 await runCLICommand({
94 task: { name: taskToRun },
95 script: {
96 type: "yarn",
97 rest: [taskToRun]
98 }
99 });
100};
101
102const clearRecent = async () => {
103 config.set("recentTasks", {});
104};
105module.exports = {
106 startScripts,
107 taskListAutoComplete,
108 clearRecent,
109 startPackageScripts
110};