@qodalis/cli-todo 0.0.1 → 0.0.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.
@@ -9,6 +9,9 @@ export class CliTodoCommandProcessor {
9
9
  this.author = DefaultLibraryAuthor;
10
10
  this.version = LIBRARY_VERSION;
11
11
  this.processors = [];
12
+ this.metadata = {
13
+ icon: '📝',
14
+ };
12
15
  this.todos = [];
13
16
  this.nextId = 1;
14
17
  this.storageKey = 'todo-items';
@@ -19,22 +22,22 @@ export class CliTodoCommandProcessor {
19
22
  }
20
23
  writeDescription(context) {
21
24
  context.writer.writeln(this.description);
22
- context.writer.writeln('');
25
+ context.writer.writeln();
23
26
  context.writer.writeln('Usage:');
24
27
  context.writer.writeln(' todo <command> [options]');
25
- context.writer.writeln('');
28
+ context.writer.writeln();
26
29
  context.writer.writeln('Commands:');
27
30
  context.writer.writeln(' ls List all TODO items');
28
31
  context.writer.writeln(' add <text> Add a new TODO item with the given text');
29
32
  context.writer.writeln(' rm <id> Remove a TODO item by its ID');
30
33
  context.writer.writeln(' complete <id> Mark a TODO item as completed by its ID');
31
- context.writer.writeln('');
34
+ context.writer.writeln();
32
35
  context.writer.writeln('Examples:');
33
36
  context.writer.writeln(' todo add Buy milk');
34
37
  context.writer.writeln(' todo ls');
35
38
  context.writer.writeln(' todo complete 1');
36
39
  context.writer.writeln(' todo rm 2');
37
- context.writer.writeln('');
40
+ context.writer.writeln();
38
41
  }
39
42
  async initialize(context) {
40
43
  this.todos = this.loadFromStorage();
@@ -58,11 +61,13 @@ export class CliTodoCommandProcessor {
58
61
  if (this.todos.length === 0) {
59
62
  context.writer.writeWarning('No TODO items found.');
60
63
  context.writer.writeln('Use "todo add <text>" to add a new TODO item.');
64
+ context.process.output(JSON.stringify(this.todos));
61
65
  return;
62
66
  }
63
67
  this.todos.forEach((todo) => {
64
- context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.completed ? this.lineThroughText(todo.text) : todo.text}`);
68
+ context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`);
65
69
  });
70
+ context.process.output(JSON.stringify(this.todos));
66
71
  },
67
72
  },
68
73
  {
@@ -76,13 +81,15 @@ export class CliTodoCommandProcessor {
76
81
  context.writer.writeError('Please provide a TODO description.');
77
82
  return;
78
83
  }
79
- this.todos.push({
84
+ const newItem = {
80
85
  id: this.nextId++,
81
86
  text,
82
87
  completed: false,
83
- });
88
+ };
89
+ this.todos.push(newItem);
84
90
  this.saveToStorage();
85
91
  context.writer.writeSuccess(`Added TODO: "${text}"`);
92
+ context.process.output(newItem.id.toString());
86
93
  },
87
94
  },
88
95
  {
@@ -157,4 +164,4 @@ export class CliTodoCommandProcessor {
157
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor, decorators: [{
158
165
  type: Injectable
159
166
  }], ctorParameters: function () { return []; } });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRvZG8tY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2RvL3NyYy9saWIvcHJvY2Vzc29ycy9jbGktdG9kby1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsT0FBTyxFQUVQLG9CQUFvQixHQUd2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRzdDLE1BQU0sT0FBTyx1QkFBdUI7SUFrQmhDO1FBakJBLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFakIsZ0JBQVcsR0FDUCwySEFBMkgsQ0FBQztRQUVoSSxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFFOUIsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUUxQixlQUFVLEdBQXdDLEVBQUUsQ0FBQztRQUU3QyxVQUFLLEdBQXVELEVBQUUsQ0FBQztRQUUvRCxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsZUFBVSxHQUFHLFlBQVksQ0FBQztRQUc5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FDaEIsT0FBMEIsRUFDMUIsT0FBNkI7UUFFN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUE2QjtRQUMxQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBWSxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQiw0REFBNEQsQ0FDL0QsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQixpREFBaUQsQ0FDcEQsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQiw0REFBNEQsQ0FDL0QsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUE2QjtRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTTtZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFZO1FBQ2hDLE9BQU8sSUFBSTthQUNOLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7YUFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkO2dCQUNJLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQzt3QkFDcEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLCtDQUErQyxDQUNsRCxDQUFDO3dCQUNGLE9BQU87cUJBQ1Y7b0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FDdEwsQ0FBQztvQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2FBQ0o7WUFDRDtnQkFDSSxPQUFPLEVBQUUsS0FBSztnQkFDZCxXQUFXLEVBQUUscUJBQXFCO2dCQUNsQyxxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ1AsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3JCLG9DQUFvQyxDQUN2QyxDQUFDO3dCQUNGLE9BQU87cUJBQ1Y7b0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ2pCLElBQUk7d0JBQ0osU0FBUyxFQUFFLEtBQUs7cUJBQ25CLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBRXJCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2FBQ0o7WUFDRDtnQkFDSSxPQUFPLEVBQUUsSUFBSTtnQkFDYixXQUFXLEVBQUUsMEJBQTBCO2dCQUN2QyxxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1I7d0JBQ0ksSUFBSSxFQUFFLEtBQUs7d0JBQ1gsV0FBVyxFQUFFLHVCQUF1Qjt3QkFDcEMsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsWUFBWSxFQUFFLEtBQUs7d0JBQ25CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQzt3QkFDZCxRQUFRLEVBQUUsS0FBSztxQkFDbEI7aUJBQ0o7Z0JBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUN2RCxPQUFPO3FCQUNWO29CQUVELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDWCxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDckIsaUNBQWlDLENBQ3BDLENBQUM7d0JBQ0YsT0FBTztxQkFDVjtvQkFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDOUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUMzQixDQUFDO29CQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUNwQixxQkFBcUIsRUFBRSxhQUFhLENBQ3ZDLENBQUM7d0JBQ0YsT0FBTztxQkFDVjtvQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3ZCLDZCQUE2QixFQUFFLEdBQUcsQ0FDckMsQ0FBQztnQkFDTixDQUFDO2FBQ0o7WUFDRDtnQkFDSSxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsV0FBVyxFQUFFLHFDQUFxQztnQkFDbEQscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUN2QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzdDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNYLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQixpQ0FBaUMsQ0FDcEMsQ0FBQzt3QkFDRixPQUFPO3FCQUNWO29CQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN2RCxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNQLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNyQixxQkFBcUIsRUFBRSxhQUFhLENBQ3ZDLENBQUM7d0JBQ0YsT0FBTztxQkFDVjtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDdkIsNEJBQTRCLEVBQUUsZ0JBQWdCLENBQ2pELENBQUM7Z0JBQ04sQ0FBQzthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlO1FBS25CLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGFBQWE7UUFDakIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQzsrR0F4TVEsdUJBQXVCO21IQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENsaUZvcmVncm91bmRDb2xvcixcbiAgICBDbGlJY29uLFxuICAgIENsaVByb2Nlc3NDb21tYW5kLFxuICAgIERlZmF1bHRMaWJyYXJ5QXV0aG9yLFxuICAgIElDbGlDb21tYW5kUHJvY2Vzc29yLFxuICAgIElDbGlFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgeyBMSUJSQVJZX1ZFUlNJT04gfSBmcm9tICcuLi92ZXJzaW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENsaVRvZG9Db21tYW5kUHJvY2Vzc29yIGltcGxlbWVudHMgSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIGNvbW1hbmQgPSAndG9kbyc7XG5cbiAgICBkZXNjcmlwdGlvbiA9XG4gICAgICAgICdBIGNvbW1hbmQtbGluZSB0b29sIGZvciBtYW5hZ2luZyB5b3VyIHRhc2tzIGVmZmljaWVudGx5LiBBZGQsIGxpc3QsIGNvbXBsZXRlLCBhbmQgcmVtb3ZlIFRPRE8gaXRlbXMgd2l0aCBzaW1wbGUgY29tbWFuZHMuJztcblxuICAgIGF1dGhvciA9IERlZmF1bHRMaWJyYXJ5QXV0aG9yO1xuXG4gICAgdmVyc2lvbiA9IExJQlJBUllfVkVSU0lPTjtcblxuICAgIHByb2Nlc3NvcnM/OiBJQ2xpQ29tbWFuZFByb2Nlc3NvcltdIHwgdW5kZWZpbmVkID0gW107XG5cbiAgICBwcml2YXRlIHRvZG9zOiB7IGlkOiBudW1iZXI7IHRleHQ6IHN0cmluZzsgY29tcGxldGVkOiBib29sZWFuIH1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBuZXh0SWQgPSAxO1xuXG4gICAgcHJpdmF0ZSBzdG9yYWdlS2V5ID0gJ3RvZG8taXRlbXMnO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJQcm9jZXNzb3JzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0NvbW1hbmQoXG4gICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29udGV4dC5leGVjdXRvci5zaG93SGVscChjb21tYW5kLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICB3cml0ZURlc2NyaXB0aW9uKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4odGhpcy5kZXNjcmlwdGlvbiEpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCcnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignVXNhZ2U6Jyk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJyAgdG9kbyA8Y29tbWFuZD4gW29wdGlvbnNdJyk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJycpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdDb21tYW5kczonKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICBscyAgICAgICAgICAgICAgIExpc3QgYWxsIFRPRE8gaXRlbXMnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICcgIGFkZCA8dGV4dD4gICAgICAgQWRkIGEgbmV3IFRPRE8gaXRlbSB3aXRoIHRoZSBnaXZlbiB0ZXh0JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICcgIHJtIDxpZD4gICAgICAgICAgUmVtb3ZlIGEgVE9ETyBpdGVtIGJ5IGl0cyBJRCcsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAnICBjb21wbGV0ZSA8aWQ+ICAgIE1hcmsgYSBUT0RPIGl0ZW0gYXMgY29tcGxldGVkIGJ5IGl0cyBJRCcsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJycpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdFeGFtcGxlczonKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIGFkZCBCdXkgbWlsaycpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCcgIHRvZG8gbHMnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIGNvbXBsZXRlIDEnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIHJtIDInKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZShjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnRvZG9zID0gdGhpcy5sb2FkRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5uZXh0SWQgPVxuICAgICAgICAgICAgdGhpcy50b2Rvcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBNYXRoLm1heCguLi50aGlzLnRvZG9zLm1hcCgodCkgPT4gdC5pZCkpICsgMVxuICAgICAgICAgICAgICAgIDogMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpbmVUaHJvdWdoVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGV4dFxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLm1hcCgoY2hhcikgPT4gY2hhciArICdcXHUwMzM2JylcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU3ViUHJvY2Vzc29ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzb3JzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdscycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdMaXN0IGFsbCBUT0RPIGl0ZW1zJyxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKF8sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9kb3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVdhcm5pbmcoJ05vIFRPRE8gaXRlbXMgZm91bmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2UgXCJ0b2RvIGFkZCA8dGV4dD5cIiB0byBhZGQgYSBuZXcgVE9ETyBpdGVtLicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3MuZm9yRWFjaCgodG9kbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7dG9kby5jb21wbGV0ZWQgPyBjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcihDbGlJY29uLkNoZWNrSWNvbiwgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKSA6ICcgJ31dICMke3RvZG8uaWR9IC0gJHt0b2RvLmNvbXBsZXRlZCA/IHRoaXMubGluZVRocm91Z2hUZXh0KHRvZG8udGV4dCkgOiB0b2RvLnRleHR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdhZGQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkIGEgbmV3IFRPRE8gaXRlbScsXG4gICAgICAgICAgICAgICAgYWxsb3dVbmxpc3RlZENvbW1hbmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjb21tYW5kLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEgVE9ETyBkZXNjcmlwdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZG9zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMubmV4dElkKyssXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlVG9TdG9yYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKGBBZGRlZCBUT0RPOiBcIiR7dGV4dH1cImApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdybScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYSBUT0RPIGl0ZW0gYnkgSUQnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYWxsIFRPRE8gaXRlbXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnYSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLmFyZ3NbJ2FsbCddIHx8IGNvbW1hbmQuYXJnc1snYSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZG9zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVUb1N0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcygnUmVtb3ZlZCBhbGwgVE9ETyBpdGVtcy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQoY29tbWFuZC52YWx1ZSEsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBUT0RPIElELicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2Rvcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAodG9kbykgPT4gdG9kby5pZCA9PT0gaWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gbm90IGZvdW5kLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSZW1vdmVkIFRPRE8gaXRlbSB3aXRoIElEICR7aWR9LmAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01hcmsgYSBUT0RPIGl0ZW0gYXMgY29tcGxldGVkIGJ5IElEJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKGNvbW1hbmQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJzZUludChjb21tYW5kLnZhbHVlIHx8ICcnLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgVE9ETyBJRC4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2RvID0gdGhpcy50b2Rvcy5maW5kKCh0b2RvKSA9PiB0b2RvLmlkID09PSBpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9kbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gbm90IGZvdW5kLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGBNYXJrZWQgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gYXMgY29tcGxldGVkLmAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVN0b3JhZ2UoKToge1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICB9W10ge1xuICAgICAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlVG9TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHRoaXMudG9kb3MpKTtcbiAgICB9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRvZG8tY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2RvL3NyYy9saWIvcHJvY2Vzc29ycy9jbGktdG9kby1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsT0FBTyxFQUdQLG9CQUFvQixHQUd2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRzdDLE1BQU0sT0FBTyx1QkFBdUI7SUFzQmhDO1FBckJBLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFakIsZ0JBQVcsR0FDUCwySEFBMkgsQ0FBQztRQUVoSSxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFFOUIsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUUxQixlQUFVLEdBQXdDLEVBQUUsQ0FBQztRQUVyRCxhQUFRLEdBQXNDO1lBQzFDLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQztRQUVNLFVBQUssR0FBdUQsRUFBRSxDQUFDO1FBRS9ELFdBQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxlQUFVLEdBQUcsWUFBWSxDQUFDO1FBRzlCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUNoQixPQUEwQixFQUMxQixPQUE2QjtRQUU3QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQTZCO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFZLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8s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LENBQUM7SUFDTixDQUFDO0lBRU8sZUFBZTtRQUtuQixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxhQUFhO1FBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7K0dBcE5RLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDbGlGb3JlZ3JvdW5kQ29sb3IsXG4gICAgQ2xpSWNvbixcbiAgICBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICBDbGlQcm9jZXNzb3JNZXRhZGF0YSxcbiAgICBEZWZhdWx0TGlicmFyeUF1dGhvcixcbiAgICBJQ2xpQ29tbWFuZFByb2Nlc3NvcixcbiAgICBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnQHFvZGFsaXMvY2xpLWNvcmUnO1xuaW1wb3J0IHsgTElCUkFSWV9WRVJTSU9OIH0gZnJvbSAnLi4vdmVyc2lvbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDbGlUb2RvQ29tbWFuZFByb2Nlc3NvciBpbXBsZW1lbnRzIElDbGlDb21tYW5kUHJvY2Vzc29yIHtcbiAgICBjb21tYW5kID0gJ3RvZG8nO1xuXG4gICAgZGVzY3JpcHRpb24gPVxuICAgICAgICAnQSBjb21tYW5kLWxpbmUgdG9vbCBmb3IgbWFuYWdpbmcgeW91ciB0YXNrcyBlZmZpY2llbnRseS4gQWRkLCBsaXN0LCBjb21wbGV0ZSwgYW5kIHJlbW92ZSBUT0RPIGl0ZW1zIHdpdGggc2ltcGxlIGNvbW1hbmRzLic7XG5cbiAgICBhdXRob3IgPSBEZWZhdWx0TGlicmFyeUF1dGhvcjtcblxuICAgIHZlcnNpb24gPSBMSUJSQVJZX1ZFUlNJT047XG5cbiAgICBwcm9jZXNzb3JzPzogSUNsaUNvbW1hbmRQcm9jZXNzb3JbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXG4gICAgbWV0YWRhdGE/OiBDbGlQcm9jZXNzb3JNZXRhZGF0YSB8IHVuZGVmaW5lZCA9IHtcbiAgICAgICAgaWNvbjogJ/Cfk50nLFxuICAgIH07XG5cbiAgICBwcml2YXRlIHRvZG9zOiB7IGlkOiBudW1iZXI7IHRleHQ6IHN0cmluZzsgY29tcGxldGVkOiBib29sZWFuIH1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBuZXh0SWQgPSAxO1xuXG4gICAgcHJpdmF0ZSBzdG9yYWdlS2V5ID0gJ3RvZG8taXRlbXMnO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJQcm9jZXNzb3JzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0NvbW1hbmQoXG4gICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29udGV4dC5leGVjdXRvci5zaG93SGVscChjb21tYW5kLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICB3cml0ZURlc2NyaXB0aW9uKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4odGhpcy5kZXNjcmlwdGlvbiEpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJ1VzYWdlOicpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCcgIHRvZG8gPGNvbW1hbmQ+IFtvcHRpb25zXScpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJ0NvbW1hbmRzOicpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCcgIGxzICAgICAgICAgICAgICAgTGlzdCBhbGwgVE9ETyBpdGVtcycpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgJyAgYWRkIDx0ZXh0PiAgICAgICBBZGQgYSBuZXcgVE9ETyBpdGVtIHdpdGggdGhlIGdpdmVuIHRleHQnLFxuICAgICAgICApO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgJyAgcm0gPGlkPiAgICAgICAgICBSZW1vdmUgYSBUT0RPIGl0ZW0gYnkgaXRzIElEJyxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICcgIGNvbXBsZXRlIDxpZD4gICAgTWFyayBhIFRPRE8gaXRlbSBhcyBjb21wbGV0ZWQgYnkgaXRzIElEJyxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbigpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdFeGFtcGxlczonKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIGFkZCBCdXkgbWlsaycpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCcgIHRvZG8gbHMnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIGNvbXBsZXRlIDEnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICB0b2RvIHJtIDInKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbigpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemUoY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMubG9hZEZyb21TdG9yYWdlKCk7XG4gICAgICAgIHRoaXMubmV4dElkID1cbiAgICAgICAgICAgIHRoaXMudG9kb3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gTWF0aC5tYXgoLi4udGhpcy50b2Rvcy5tYXAoKHQpID0+IHQuaWQpKSArIDFcbiAgICAgICAgICAgICAgICA6IDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaW5lVGhyb3VnaFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5tYXAoKGNoYXIpID0+IGNoYXIgKyAnXFx1MDMzNicpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclN1YlByb2Nlc3NvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvY2Vzc29ycyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAnbHMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBhbGwgVE9ETyBpdGVtcycsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChfLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvZG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVXYXJuaW5nKCdObyBUT0RPIGl0ZW1zIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlIFwidG9kbyBhZGQgPHRleHQ+XCIgdG8gYWRkIGEgbmV3IFRPRE8gaXRlbS4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQoSlNPTi5zdHJpbmdpZnkodGhpcy50b2RvcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3MuZm9yRWFjaCgodG9kbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7dG9kby5jb21wbGV0ZWQgPyBjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcihDbGlJY29uLkNoZWNrSWNvbiwgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKSA6ICcgJ31dICMke3RvZG8uaWR9IC0gJHt0b2RvLnRleHR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQoSlNPTi5zdHJpbmdpZnkodGhpcy50b2RvcykpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdhZGQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkIGEgbmV3IFRPRE8gaXRlbScsXG4gICAgICAgICAgICAgICAgYWxsb3dVbmxpc3RlZENvbW1hbmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjb21tYW5kLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEgVE9ETyBkZXNjcmlwdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5uZXh0SWQrKyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3MucHVzaChuZXdJdGVtKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVUb1N0b3JhZ2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVN1Y2Nlc3MoYEFkZGVkIFRPRE86IFwiJHt0ZXh0fVwiYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wcm9jZXNzLm91dHB1dChuZXdJdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdybScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYSBUT0RPIGl0ZW0gYnkgSUQnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYWxsIFRPRE8gaXRlbXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnYSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLmFyZ3NbJ2FsbCddIHx8IGNvbW1hbmQuYXJnc1snYSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZG9zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVUb1N0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcygnUmVtb3ZlZCBhbGwgVE9ETyBpdGVtcy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQoY29tbWFuZC52YWx1ZSEsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBUT0RPIElELicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2Rvcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAodG9kbykgPT4gdG9kby5pZCA9PT0gaWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gbm90IGZvdW5kLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSZW1vdmVkIFRPRE8gaXRlbSB3aXRoIElEICR7aWR9LmAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01hcmsgYSBUT0RPIGl0ZW0gYXMgY29tcGxldGVkIGJ5IElEJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKGNvbW1hbmQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJzZUludChjb21tYW5kLnZhbHVlIHx8ICcnLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgVE9ETyBJRC4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2RvID0gdGhpcy50b2Rvcy5maW5kKCh0b2RvKSA9PiB0b2RvLmlkID09PSBpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9kbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gbm90IGZvdW5kLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGBNYXJrZWQgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gYXMgY29tcGxldGVkLmAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVN0b3JhZ2UoKToge1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICB9W10ge1xuICAgICAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlVG9TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHRoaXMudG9kb3MpKTtcbiAgICB9XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  // Automatically generated during build
2
- export const LIBRARY_VERSION = '0.0.1';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvZG8vc3JjL2xpYi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNFLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4gIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyBidWlsZFxuICBleHBvcnQgY29uc3QgTElCUkFSWV9WRVJTSU9OID0gJzAuMC4xJztcbiAgIl19
2
+ export const LIBRARY_VERSION = '0.0.3';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvZG8vc3JjL2xpYi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgYnVpbGRcbmV4cG9ydCBjb25zdCBMSUJSQVJZX1ZFUlNJT04gPSAnMC4wLjMnO1xuICAiXX0=
@@ -4,7 +4,7 @@ import { resolveCommandProcessorProvider } from '@qodalis/angular-cli';
4
4
  import { DefaultLibraryAuthor, CliIcon, CliForegroundColor } from '@qodalis/cli-core';
5
5
 
6
6
  // Automatically generated during build
7
- const LIBRARY_VERSION = '0.0.1';
7
+ const LIBRARY_VERSION = '0.0.3';
8
8
 
9
9
  class CliTodoCommandProcessor {
10
10
  constructor() {
@@ -13,6 +13,9 @@ class CliTodoCommandProcessor {
13
13
  this.author = DefaultLibraryAuthor;
14
14
  this.version = LIBRARY_VERSION;
15
15
  this.processors = [];
16
+ this.metadata = {
17
+ icon: '📝',
18
+ };
16
19
  this.todos = [];
17
20
  this.nextId = 1;
18
21
  this.storageKey = 'todo-items';
@@ -23,22 +26,22 @@ class CliTodoCommandProcessor {
23
26
  }
24
27
  writeDescription(context) {
25
28
  context.writer.writeln(this.description);
26
- context.writer.writeln('');
29
+ context.writer.writeln();
27
30
  context.writer.writeln('Usage:');
28
31
  context.writer.writeln(' todo <command> [options]');
29
- context.writer.writeln('');
32
+ context.writer.writeln();
30
33
  context.writer.writeln('Commands:');
31
34
  context.writer.writeln(' ls List all TODO items');
32
35
  context.writer.writeln(' add <text> Add a new TODO item with the given text');
33
36
  context.writer.writeln(' rm <id> Remove a TODO item by its ID');
34
37
  context.writer.writeln(' complete <id> Mark a TODO item as completed by its ID');
35
- context.writer.writeln('');
38
+ context.writer.writeln();
36
39
  context.writer.writeln('Examples:');
37
40
  context.writer.writeln(' todo add Buy milk');
38
41
  context.writer.writeln(' todo ls');
39
42
  context.writer.writeln(' todo complete 1');
40
43
  context.writer.writeln(' todo rm 2');
41
- context.writer.writeln('');
44
+ context.writer.writeln();
42
45
  }
43
46
  async initialize(context) {
44
47
  this.todos = this.loadFromStorage();
@@ -62,11 +65,13 @@ class CliTodoCommandProcessor {
62
65
  if (this.todos.length === 0) {
63
66
  context.writer.writeWarning('No TODO items found.');
64
67
  context.writer.writeln('Use "todo add <text>" to add a new TODO item.');
68
+ context.process.output(JSON.stringify(this.todos));
65
69
  return;
66
70
  }
67
71
  this.todos.forEach((todo) => {
68
- context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.completed ? this.lineThroughText(todo.text) : todo.text}`);
72
+ context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`);
69
73
  });
74
+ context.process.output(JSON.stringify(this.todos));
70
75
  },
71
76
  },
72
77
  {
@@ -80,13 +85,15 @@ class CliTodoCommandProcessor {
80
85
  context.writer.writeError('Please provide a TODO description.');
81
86
  return;
82
87
  }
83
- this.todos.push({
88
+ const newItem = {
84
89
  id: this.nextId++,
85
90
  text,
86
91
  completed: false,
87
- });
92
+ };
93
+ this.todos.push(newItem);
88
94
  this.saveToStorage();
89
95
  context.writer.writeSuccess(`Added TODO: "${text}"`);
96
+ context.process.output(newItem.id.toString());
90
97
  },
91
98
  },
92
99
  {
@@ -1 +1 @@
1
- {"version":3,"file":"qodalis-cli-todo.mjs","sources":["../../../projects/todo/src/lib/version.ts","../../../projects/todo/src/lib/processors/cli-todo-command-processor.ts","../../../projects/todo/src/lib/cli-todo.module.ts","../../../projects/todo/src/public-api.ts","../../../projects/todo/src/qodalis-cli-todo.ts"],"sourcesContent":["\n // Automatically generated during build\n export const LIBRARY_VERSION = '0.0.1';\n ","import { Injectable } from '@angular/core';\nimport {\n CliForegroundColor,\n CliIcon,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\n@Injectable()\nexport class CliTodoCommandProcessor implements ICliCommandProcessor {\n command = 'todo';\n\n description =\n 'A command-line tool for managing your tasks efficiently. Add, list, complete, and remove TODO items with simple commands.';\n\n author = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n private todos: { id: number; text: string; completed: boolean }[] = [];\n\n private nextId = 1;\n\n private storageKey = 'todo-items';\n\n constructor() {\n this.registerSubProcessors();\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n context.writer.writeln(this.description!);\n context.writer.writeln('');\n context.writer.writeln('Usage:');\n context.writer.writeln(' todo <command> [options]');\n context.writer.writeln('');\n context.writer.writeln('Commands:');\n context.writer.writeln(' ls List all TODO items');\n context.writer.writeln(\n ' add <text> Add a new TODO item with the given text',\n );\n context.writer.writeln(\n ' rm <id> Remove a TODO item by its ID',\n );\n context.writer.writeln(\n ' complete <id> Mark a TODO item as completed by its ID',\n );\n context.writer.writeln('');\n context.writer.writeln('Examples:');\n context.writer.writeln(' todo add Buy milk');\n context.writer.writeln(' todo ls');\n context.writer.writeln(' todo complete 1');\n context.writer.writeln(' todo rm 2');\n context.writer.writeln('');\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n this.todos = this.loadFromStorage();\n this.nextId =\n this.todos.length > 0\n ? Math.max(...this.todos.map((t) => t.id)) + 1\n : 1;\n }\n\n private lineThroughText(text: string): string {\n return text\n .split('')\n .map((char) => char + '\\u0336')\n .join('');\n }\n\n private registerSubProcessors(): void {\n this.processors = [\n {\n command: 'ls',\n description: 'List all TODO items',\n processCommand: async (_, context) => {\n if (this.todos.length === 0) {\n context.writer.writeWarning('No TODO items found.');\n context.writer.writeln(\n 'Use \"todo add <text>\" to add a new TODO item.',\n );\n return;\n }\n this.todos.forEach((todo) => {\n context.writer.writeln(\n `[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.completed ? this.lineThroughText(todo.text) : todo.text}`,\n );\n });\n },\n },\n {\n command: 'add',\n description: 'Add a new TODO item',\n allowUnlistedCommands: true,\n valueRequired: true,\n processCommand: async (command, context) => {\n const text = command.value;\n if (!text) {\n context.writer.writeError(\n 'Please provide a TODO description.',\n );\n return;\n }\n this.todos.push({\n id: this.nextId++,\n text,\n completed: false,\n });\n\n this.saveToStorage();\n\n context.writer.writeSuccess(`Added TODO: \"${text}\"`);\n },\n },\n {\n command: 'rm',\n description: 'Remove a TODO item by ID',\n allowUnlistedCommands: true,\n parameters: [\n {\n name: 'all',\n description: 'Remove all TODO items',\n type: 'boolean',\n defaultValue: false,\n aliases: ['a'],\n required: false,\n },\n ],\n processCommand: async (command, context) => {\n if (command.args['all'] || command.args['a']) {\n this.todos = [];\n this.saveToStorage();\n context.writer.writeSuccess('Removed all TODO items.');\n return;\n }\n\n const id = parseInt(command.value!, 10);\n if (isNaN(id)) {\n context.writer.writeError(\n 'Please provide a valid TODO ID.',\n );\n return;\n }\n const index = this.todos.findIndex(\n (todo) => todo.id === id,\n );\n if (index === -1) {\n context.writer.writeInfo(\n `TODO item with ID ${id} not found.`,\n );\n return;\n }\n this.todos.splice(index, 1);\n this.saveToStorage();\n context.writer.writeSuccess(\n `Removed TODO item with ID ${id}.`,\n );\n },\n },\n {\n command: 'complete',\n description: 'Mark a TODO item as completed by ID',\n allowUnlistedCommands: true,\n valueRequired: true,\n processCommand: async (command, context) => {\n const id = parseInt(command.value || '', 10);\n if (isNaN(id)) {\n context.writer.writeln(\n 'Please provide a valid TODO ID.',\n );\n return;\n }\n const todo = this.todos.find((todo) => todo.id === id);\n if (!todo) {\n context.writer.writeError(\n `TODO item with ID ${id} not found.`,\n );\n return;\n }\n todo.completed = true;\n this.saveToStorage();\n context.writer.writeSuccess(\n `Marked TODO item with ID ${id} as completed.`,\n );\n },\n },\n ];\n }\n\n private loadFromStorage(): {\n id: number;\n text: string;\n completed: boolean;\n }[] {\n const data = localStorage.getItem(this.storageKey);\n return data ? JSON.parse(data) : [];\n }\n\n private saveToStorage(): void {\n localStorage.setItem(this.storageKey, JSON.stringify(this.todos));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { resolveCommandProcessorProvider } from '@qodalis/angular-cli';\nimport { CliTodoCommandProcessor } from './processors/cli-todo-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)],\n})\nexport class CliTodoModule {}\n","/*\n * Public API Surface of string\n */\n\nexport * from './lib/cli-todo.module';\n\nexport * from './lib/processors/cli-todo-command-processor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AACE;AACO,MAAM,eAAe,GAAG,OAAO;;MCU3B,uBAAuB,CAAA;AAkBhC,IAAA,WAAA,GAAA;QAjBA,IAAO,CAAA,OAAA,GAAG,MAAM,CAAC;QAEjB,IAAW,CAAA,WAAA,GACP,2HAA2H,CAAC;QAEhI,IAAM,CAAA,MAAA,GAAG,oBAAoB,CAAC;QAE9B,IAAO,CAAA,OAAA,GAAG,eAAe,CAAC;QAE1B,IAAU,CAAA,UAAA,GAAwC,EAAE,CAAC;QAE7C,IAAK,CAAA,KAAA,GAAuD,EAAE,CAAC;QAE/D,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QAEX,IAAU,CAAA,UAAA,GAAG,YAAY,CAAC;QAG9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;AAED,IAAA,MAAM,cAAc,CAChB,OAA0B,EAC1B,OAA6B,EAAA;QAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAC/C;AAED,IAAA,gBAAgB,CAAC,OAA6B,EAAA;QAC1C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC;AAC1C,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACrD,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;AACjE,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,4DAA4D,CAC/D,CAAC;AACF,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,iDAAiD,CACpD,CAAC;AACF,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,4DAA4D,CAC/D,CAAC;AACF,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC9C,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC5C,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACtC,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KAC9B;IAED,MAAM,UAAU,CAAC,OAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM;AACP,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;kBACf,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;kBAC5C,CAAC,CAAC;KACf;AAEO,IAAA,eAAe,CAAC,IAAY,EAAA;AAChC,QAAA,OAAO,IAAI;aACN,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,QAAQ,CAAC;aAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;KACjB;IAEO,qBAAqB,GAAA;QACzB,IAAI,CAAC,UAAU,GAAG;AACd,YAAA;AACI,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,KAAI;AACjC,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,wBAAA,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;AACpD,wBAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,+CAA+C,CAClD,CAAC;wBACF,OAAO;AACV,qBAAA;oBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,CAAI,CAAA,EAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,EAAE,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAE,CAAA,CACtL,CAAC;AACN,qBAAC,CAAC,CAAC;iBACN;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,qBAAqB,EAAE,IAAI;AAC3B,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,cAAc,EAAE,OAAO,OAAO,EAAE,OAAO,KAAI;AACvC,oBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC3B,IAAI,CAAC,IAAI,EAAE;AACP,wBAAA,OAAO,CAAC,MAAM,CAAC,UAAU,CACrB,oCAAoC,CACvC,CAAC;wBACF,OAAO;AACV,qBAAA;AACD,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACZ,wBAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;wBACjB,IAAI;AACJ,wBAAA,SAAS,EAAE,KAAK;AACnB,qBAAA,CAAC,CAAC;oBAEH,IAAI,CAAC,aAAa,EAAE,CAAC;oBAErB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAgB,aAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;iBACxD;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,WAAW,EAAE,0BAA0B;AACvC,gBAAA,qBAAqB,EAAE,IAAI;AAC3B,gBAAA,UAAU,EAAE;AACR,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,YAAY,EAAE,KAAK;wBACnB,OAAO,EAAE,CAAC,GAAG,CAAC;AACd,wBAAA,QAAQ,EAAE,KAAK;AAClB,qBAAA;AACJ,iBAAA;AACD,gBAAA,cAAc,EAAE,OAAO,OAAO,EAAE,OAAO,KAAI;AACvC,oBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC1C,wBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;wBAChB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,wBAAA,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;wBACvD,OAAO;AACV,qBAAA;oBAED,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAM,EAAE,EAAE,CAAC,CAAC;AACxC,oBAAA,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;AACX,wBAAA,OAAO,CAAC,MAAM,CAAC,UAAU,CACrB,iCAAiC,CACpC,CAAC;wBACF,OAAO;AACV,qBAAA;AACD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAC9B,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAC3B,CAAC;AACF,oBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wBACd,OAAO,CAAC,MAAM,CAAC,SAAS,CACpB,CAAqB,kBAAA,EAAA,EAAE,CAAa,WAAA,CAAA,CACvC,CAAC;wBACF,OAAO;AACV,qBAAA;oBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,YAAY,CACvB,CAA6B,0BAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CACrC,CAAC;iBACL;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,WAAW,EAAE,qCAAqC;AAClD,gBAAA,qBAAqB,EAAE,IAAI;AAC3B,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,cAAc,EAAE,OAAO,OAAO,EAAE,OAAO,KAAI;AACvC,oBAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7C,oBAAA,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;AACX,wBAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAClB,iCAAiC,CACpC,CAAC;wBACF,OAAO;AACV,qBAAA;AACD,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACvD,IAAI,CAAC,IAAI,EAAE;wBACP,OAAO,CAAC,MAAM,CAAC,UAAU,CACrB,CAAqB,kBAAA,EAAA,EAAE,CAAa,WAAA,CAAA,CACvC,CAAC;wBACF,OAAO;AACV,qBAAA;AACD,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,YAAY,CACvB,CAA4B,yBAAA,EAAA,EAAE,CAAgB,cAAA,CAAA,CACjD,CAAC;iBACL;AACJ,aAAA;SACJ,CAAC;KACL;IAEO,eAAe,GAAA;QAKnB,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;KACvC;IAEO,aAAa,GAAA;AACjB,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACrE;+GAxMQ,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;;MCDE,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAb,aAAa,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,aAFX,CAAC,+BAA+B,CAAC,uBAAuB,CAAC,CAAC,EAAA,CAAA,CAAA,EAAA;;4FAE5D,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE,CAAC,+BAA+B,CAAC,uBAAuB,CAAC,CAAC;AACxE,iBAAA,CAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"qodalis-cli-todo.mjs","sources":["../../../projects/todo/src/lib/version.ts","../../../projects/todo/src/lib/processors/cli-todo-command-processor.ts","../../../projects/todo/src/lib/cli-todo.module.ts","../../../projects/todo/src/public-api.ts","../../../projects/todo/src/qodalis-cli-todo.ts"],"sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '0.0.3';\n ","import { Injectable } from '@angular/core';\nimport {\n CliForegroundColor,\n CliIcon,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\n@Injectable()\nexport class CliTodoCommandProcessor implements ICliCommandProcessor {\n command = 'todo';\n\n description =\n 'A command-line tool for managing your tasks efficiently. Add, list, complete, and remove TODO items with simple commands.';\n\n author = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '📝',\n };\n\n private todos: { id: number; text: string; completed: boolean }[] = [];\n\n private nextId = 1;\n\n private storageKey = 'todo-items';\n\n constructor() {\n this.registerSubProcessors();\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n context.writer.writeln(this.description!);\n context.writer.writeln();\n context.writer.writeln('Usage:');\n context.writer.writeln(' todo <command> [options]');\n context.writer.writeln();\n context.writer.writeln('Commands:');\n context.writer.writeln(' ls List all TODO items');\n context.writer.writeln(\n ' add <text> Add a new TODO item with the given text',\n );\n context.writer.writeln(\n ' rm <id> Remove a TODO item by its ID',\n );\n context.writer.writeln(\n ' complete <id> Mark a TODO item as completed by its ID',\n );\n context.writer.writeln();\n context.writer.writeln('Examples:');\n context.writer.writeln(' todo add Buy milk');\n context.writer.writeln(' todo ls');\n context.writer.writeln(' todo complete 1');\n context.writer.writeln(' todo rm 2');\n context.writer.writeln();\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n this.todos = this.loadFromStorage();\n this.nextId =\n this.todos.length > 0\n ? Math.max(...this.todos.map((t) => t.id)) + 1\n : 1;\n }\n\n private lineThroughText(text: string): string {\n return text\n .split('')\n .map((char) => char + '\\u0336')\n .join('');\n }\n\n private registerSubProcessors(): void {\n this.processors = [\n {\n command: 'ls',\n description: 'List all TODO items',\n processCommand: async (_, context) => {\n if (this.todos.length === 0) {\n context.writer.writeWarning('No TODO items found.');\n context.writer.writeln(\n 'Use \"todo add <text>\" to add a new TODO item.',\n );\n context.process.output(JSON.stringify(this.todos));\n return;\n }\n this.todos.forEach((todo) => {\n context.writer.writeln(\n `[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`,\n );\n });\n\n context.process.output(JSON.stringify(this.todos));\n },\n },\n {\n command: 'add',\n description: 'Add a new TODO item',\n allowUnlistedCommands: true,\n valueRequired: true,\n processCommand: async (command, context) => {\n const text = command.value;\n if (!text) {\n context.writer.writeError(\n 'Please provide a TODO description.',\n );\n return;\n }\n\n const newItem = {\n id: this.nextId++,\n text,\n completed: false,\n };\n\n this.todos.push(newItem);\n\n this.saveToStorage();\n\n context.writer.writeSuccess(`Added TODO: \"${text}\"`);\n\n context.process.output(newItem.id.toString());\n },\n },\n {\n command: 'rm',\n description: 'Remove a TODO item by ID',\n allowUnlistedCommands: true,\n parameters: [\n {\n name: 'all',\n description: 'Remove all TODO items',\n type: 'boolean',\n defaultValue: false,\n aliases: ['a'],\n required: false,\n },\n ],\n processCommand: async (command, context) => {\n if (command.args['all'] || command.args['a']) {\n this.todos = [];\n this.saveToStorage();\n context.writer.writeSuccess('Removed all TODO items.');\n return;\n }\n\n const id = parseInt(command.value!, 10);\n if (isNaN(id)) {\n context.writer.writeError(\n 'Please provide a valid TODO ID.',\n );\n return;\n }\n const index = this.todos.findIndex(\n (todo) => todo.id === id,\n );\n if (index === -1) {\n context.writer.writeInfo(\n `TODO item with ID ${id} not found.`,\n );\n return;\n }\n this.todos.splice(index, 1);\n this.saveToStorage();\n context.writer.writeSuccess(\n `Removed TODO item with ID ${id}.`,\n );\n },\n },\n {\n command: 'complete',\n description: 'Mark a TODO item as completed by ID',\n allowUnlistedCommands: true,\n valueRequired: true,\n processCommand: async (command, context) => {\n const id = parseInt(command.value || '', 10);\n if (isNaN(id)) {\n context.writer.writeln(\n 'Please provide a valid TODO ID.',\n );\n return;\n }\n const todo = this.todos.find((todo) => todo.id === id);\n if (!todo) {\n context.writer.writeError(\n `TODO item with ID ${id} not found.`,\n );\n return;\n }\n todo.completed = true;\n this.saveToStorage();\n context.writer.writeSuccess(\n `Marked TODO item with ID ${id} as completed.`,\n );\n },\n },\n ];\n }\n\n private loadFromStorage(): {\n id: number;\n text: string;\n completed: boolean;\n }[] {\n const data = localStorage.getItem(this.storageKey);\n return data ? JSON.parse(data) : [];\n }\n\n private saveToStorage(): void {\n localStorage.setItem(this.storageKey, JSON.stringify(this.todos));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { resolveCommandProcessorProvider } from '@qodalis/angular-cli';\nimport { CliTodoCommandProcessor } from './processors/cli-todo-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)],\n})\nexport class CliTodoModule {}\n","/*\n * Public API Surface of string\n */\n\nexport * from './lib/cli-todo.module';\n\nexport * from './lib/processors/cli-todo-command-processor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CliProcessCommand, ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';
1
+ import { CliProcessCommand, CliProcessorMetadata, ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class CliTodoCommandProcessor implements ICliCommandProcessor {
4
4
  command: string;
@@ -6,6 +6,7 @@ export declare class CliTodoCommandProcessor implements ICliCommandProcessor {
6
6
  author: import("@qodalis/cli-core").ICliCommandAuthor;
7
7
  version: string;
8
8
  processors?: ICliCommandProcessor[] | undefined;
9
+ metadata?: CliProcessorMetadata | undefined;
9
10
  private todos;
10
11
  private nextId;
11
12
  private storageKey;
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const LIBRARY_VERSION = "0.0.1";
1
+ export declare const LIBRARY_VERSION = "0.0.3";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qodalis/cli-todo",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A command-line tool for managing your tasks efficiently. Add, list, complete, and remove TODO items with simple commands.",
5
5
  "author": "Nicolae Lupei, Qodalis Solutions",
6
6
  "license": "MIT",
package/umd/index.js CHANGED
@@ -34,7 +34,7 @@
34
34
  };
35
35
 
36
36
  // Automatically generated during build
37
- const LIBRARY_VERSION = '0.0.1';
37
+ const LIBRARY_VERSION = '0.0.3';
38
38
 
39
39
  let CliTodoCommandProcessor = class CliTodoCommandProcessor {
40
40
  constructor() {
@@ -43,6 +43,9 @@
43
43
  this.author = cliCore.DefaultLibraryAuthor;
44
44
  this.version = LIBRARY_VERSION;
45
45
  this.processors = [];
46
+ this.metadata = {
47
+ icon: '📝',
48
+ };
46
49
  this.todos = [];
47
50
  this.nextId = 1;
48
51
  this.storageKey = 'todo-items';
@@ -53,22 +56,22 @@
53
56
  }
54
57
  writeDescription(context) {
55
58
  context.writer.writeln(this.description);
56
- context.writer.writeln('');
59
+ context.writer.writeln();
57
60
  context.writer.writeln('Usage:');
58
61
  context.writer.writeln(' todo <command> [options]');
59
- context.writer.writeln('');
62
+ context.writer.writeln();
60
63
  context.writer.writeln('Commands:');
61
64
  context.writer.writeln(' ls List all TODO items');
62
65
  context.writer.writeln(' add <text> Add a new TODO item with the given text');
63
66
  context.writer.writeln(' rm <id> Remove a TODO item by its ID');
64
67
  context.writer.writeln(' complete <id> Mark a TODO item as completed by its ID');
65
- context.writer.writeln('');
68
+ context.writer.writeln();
66
69
  context.writer.writeln('Examples:');
67
70
  context.writer.writeln(' todo add Buy milk');
68
71
  context.writer.writeln(' todo ls');
69
72
  context.writer.writeln(' todo complete 1');
70
73
  context.writer.writeln(' todo rm 2');
71
- context.writer.writeln('');
74
+ context.writer.writeln();
72
75
  }
73
76
  async initialize(context) {
74
77
  this.todos = this.loadFromStorage();
@@ -92,11 +95,13 @@
92
95
  if (this.todos.length === 0) {
93
96
  context.writer.writeWarning('No TODO items found.');
94
97
  context.writer.writeln('Use "todo add <text>" to add a new TODO item.');
98
+ context.process.output(JSON.stringify(this.todos));
95
99
  return;
96
100
  }
97
101
  this.todos.forEach((todo) => {
98
- context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(cliCore.CliIcon.CheckIcon, cliCore.CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.completed ? this.lineThroughText(todo.text) : todo.text}`);
102
+ context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(cliCore.CliIcon.CheckIcon, cliCore.CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`);
99
103
  });
104
+ context.process.output(JSON.stringify(this.todos));
100
105
  },
101
106
  },
102
107
  {
@@ -110,13 +115,15 @@
110
115
  context.writer.writeError('Please provide a TODO description.');
111
116
  return;
112
117
  }
113
- this.todos.push({
118
+ const newItem = {
114
119
  id: this.nextId++,
115
120
  text,
116
121
  completed: false,
117
- });
122
+ };
123
+ this.todos.push(newItem);
118
124
  this.saveToStorage();
119
125
  context.writer.writeSuccess(`Added TODO: "${text}"`);
126
+ context.process.output(newItem.id.toString());
120
127
  },
121
128
  },
122
129
  {