UNPKG

1.4 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7const logger_1 = require("./logger");
8
9exports.Logger = logger_1.default;
10exports.Verbosity = logger_1.Verbosity;
11
12class Runner {
13 constructor(logger = new logger_1.default()) {
14 this.logger = logger;
15 this.performed = new Map();
16 process.on('unhandledRejection', error => {
17 this.logger.error(error);
18 this.fail();
19 });
20 process.on('uncaughtException', error => {
21 this.logger.error(error);
22 this.fail();
23 });
24 }
25
26 fail() {
27 process.stdout.write('\n');
28 return process.exit(1);
29 }
30
31 end() {
32 process.stdout.write('\n');
33 return process.exit(0);
34 }
35
36 hasPerformed(task, workspace) {
37 const valueForTask = this.performed.get(task);
38
39 if (valueForTask == null) {
40 return false;
41 }
42
43 if (valueForTask === true) {
44 return true;
45 }
46
47 return workspace == null || valueForTask.includes(workspace);
48 }
49
50 perform(task, workspace) {
51 if (this.hasPerformed(task, workspace)) {
52 throw new Error(`You have already performed task ${task}`);
53 }
54
55 const valueForTask = this.performed.get(task) || [];
56
57 if (valueForTask === true) {
58 return;
59 }
60
61 if (workspace == null) {
62 this.performed.set(task, true);
63 return;
64 }
65
66 this.performed.set(task, [...valueForTask, workspace]);
67 }
68
69}
70
71exports.default = Runner;
\No newline at end of file