@qodalis/cli-todo 0.0.6 → 2.0.0-beta.1
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/package.json +14 -22
- package/public-api.d.mts +48 -0
- package/public-api.d.ts +48 -2
- package/public-api.js +521 -0
- package/public-api.js.map +1 -0
- package/public-api.mjs +512 -0
- package/public-api.mjs.map +1 -0
- package/umd/cli-entrypoint.global.js +3308 -0
- package/README.md +0 -34
- package/esm2022/lib/cli-todo.module.mjs +0 -19
- package/esm2022/lib/processors/cli-todo-command-processor.mjs +0 -181
- package/esm2022/lib/version.mjs +0 -3
- package/esm2022/public-api.mjs +0 -6
- package/esm2022/qodalis-cli-todo.mjs +0 -5
- package/fesm2022/qodalis-cli-todo.mjs +0 -210
- package/fesm2022/qodalis-cli-todo.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/cli-todo.module.d.ts +0 -6
- package/lib/processors/cli-todo-command-processor.d.ts +0 -23
- package/lib/version.d.ts +0 -1
- package/umd/index.js +0 -220
package/README.md
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Cli extension
|
|
2
|
-
|
|
3
|
-
The `@qodalis/cli-todo` package is a powerful CLI extension designed to help you manage your tasks efficiently. With a simple and intuitive command structure, you can add, list, complete, and remove TODO items directly from your command line.
|
|
4
|
-
|
|
5
|
-
# Features
|
|
6
|
-
|
|
7
|
-
Add tasks with a single command.
|
|
8
|
-
View all your TODO items in a clear, organized list.
|
|
9
|
-
Mark tasks as complete to keep track of your progress.
|
|
10
|
-
Remove tasks when they are no longer needed.
|
|
11
|
-
Persistent storage for your tasks across CLI sessions.
|
|
12
|
-
|
|
13
|
-
# Installation
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
packages add @qodalis/cli-todo
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
This command downloads and registers the extension for use within the CLI environment.
|
|
20
|
-
|
|
21
|
-
# Usage
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
todo ls
|
|
25
|
-
todo add <task description>
|
|
26
|
-
todo add Buy groceries
|
|
27
|
-
todo add Finish the project report
|
|
28
|
-
todo complete <task ID>
|
|
29
|
-
todo complete 1
|
|
30
|
-
todo rm <task ID>
|
|
31
|
-
|
|
32
|
-
todo ls
|
|
33
|
-
[ ] #2 - Finish the project report
|
|
34
|
-
```
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { resolveCommandProcessorProvider } from '@qodalis/angular-cli';
|
|
3
|
-
import { CliTodoCommandProcessor } from './processors/cli-todo-command-processor';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class CliTodoModule {
|
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule }); }
|
|
8
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)] }); }
|
|
9
|
-
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, decorators: [{
|
|
11
|
-
type: NgModule,
|
|
12
|
-
args: [{
|
|
13
|
-
declarations: [],
|
|
14
|
-
imports: [],
|
|
15
|
-
exports: [],
|
|
16
|
-
providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)],
|
|
17
|
-
}]
|
|
18
|
-
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRvZG8ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9kby9zcmMvbGliL2NsaS10b2RvLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQVFsRixNQUFNLE9BQU8sYUFBYTsrR0FBYixhQUFhO2dIQUFiLGFBQWE7Z0hBQWIsYUFBYSxhQUZYLENBQUMsK0JBQStCLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7NEZBRTVELGFBQWE7a0JBTnpCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDLHVCQUF1QixDQUFDLENBQUM7aUJBQ3hFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlc29sdmVDb21tYW5kUHJvY2Vzc29yUHJvdmlkZXIgfSBmcm9tICdAcW9kYWxpcy9hbmd1bGFyLWNsaSc7XG5pbXBvcnQgeyBDbGlUb2RvQ29tbWFuZFByb2Nlc3NvciB9IGZyb20gJy4vcHJvY2Vzc29ycy9jbGktdG9kby1jb21tYW5kLXByb2Nlc3Nvcic7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBpbXBvcnRzOiBbXSxcbiAgICBleHBvcnRzOiBbXSxcbiAgICBwcm92aWRlcnM6IFtyZXNvbHZlQ29tbWFuZFByb2Nlc3NvclByb3ZpZGVyKENsaVRvZG9Db21tYW5kUHJvY2Vzc29yKV0sXG59KVxuZXhwb3J0IGNsYXNzIENsaVRvZG9Nb2R1bGUge31cbiJdfQ==
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { CliForegroundColor, CliIcon, DefaultLibraryAuthor, } from '@qodalis/cli-core';
|
|
3
|
-
import { LIBRARY_VERSION } from '../version';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class CliTodoCommandProcessor {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.command = 'todo';
|
|
8
|
-
this.description = 'A command-line tool for managing your tasks efficiently. Add, list, complete, and remove TODO items with simple commands.';
|
|
9
|
-
this.author = DefaultLibraryAuthor;
|
|
10
|
-
this.version = LIBRARY_VERSION;
|
|
11
|
-
this.processors = [];
|
|
12
|
-
this.metadata = {
|
|
13
|
-
icon: '📝',
|
|
14
|
-
requiredCoreVersion: '0.0.16',
|
|
15
|
-
requiredCliVersion: '1.0.37',
|
|
16
|
-
};
|
|
17
|
-
this.stateConfiguration = {
|
|
18
|
-
initialState: {
|
|
19
|
-
todos: this.loadFromOldStorage() ?? [],
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
this.todos = [];
|
|
23
|
-
this.nextId = 1;
|
|
24
|
-
this.registerSubProcessors();
|
|
25
|
-
}
|
|
26
|
-
async processCommand(command, context) {
|
|
27
|
-
context.executor.showHelp(command, context);
|
|
28
|
-
}
|
|
29
|
-
writeDescription(context) {
|
|
30
|
-
const { writer } = context;
|
|
31
|
-
writer.writeln(this.description);
|
|
32
|
-
writer.writeln();
|
|
33
|
-
writer.writeln('📋 Commands:');
|
|
34
|
-
writer.writeln(` ${writer.wrapInColor('todo ls', CliForegroundColor.Cyan)} 📃 List all TODO items`);
|
|
35
|
-
writer.writeln(` ${writer.wrapInColor('todo add <text>', CliForegroundColor.Cyan)} ➕ Add a new TODO item`);
|
|
36
|
-
writer.writeln(` ${writer.wrapInColor('todo rm <id>', CliForegroundColor.Cyan)} 🗑 Remove a TODO item by ID`);
|
|
37
|
-
writer.writeln(` ${writer.wrapInColor('todo rm --all', CliForegroundColor.Cyan)} 🗑 Remove all TODO items`);
|
|
38
|
-
writer.writeln(` ${writer.wrapInColor('todo complete <id>', CliForegroundColor.Cyan)} ✔ Mark a TODO as completed`);
|
|
39
|
-
writer.writeln();
|
|
40
|
-
writer.writeln('📝 Examples:');
|
|
41
|
-
writer.writeln(` todo add Buy milk ${writer.wrapInColor('# Add a new task', CliForegroundColor.Green)}`);
|
|
42
|
-
writer.writeln(` todo ls ${writer.wrapInColor('# View all tasks', CliForegroundColor.Green)}`);
|
|
43
|
-
writer.writeln(` todo complete 1 ${writer.wrapInColor('# Mark task #1 done', CliForegroundColor.Green)}`);
|
|
44
|
-
writer.writeln(` todo rm 2 ${writer.wrapInColor('# Delete task #2', CliForegroundColor.Green)}`);
|
|
45
|
-
}
|
|
46
|
-
async initialize(context) {
|
|
47
|
-
context.state
|
|
48
|
-
.select((x) => x['todos'])
|
|
49
|
-
.subscribe((todos) => {
|
|
50
|
-
this.todos = todos;
|
|
51
|
-
this.nextId =
|
|
52
|
-
this.todos.length > 0
|
|
53
|
-
? Math.max(...this.todos.map((t) => t.id)) + 1
|
|
54
|
-
: 1;
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
lineThroughText(text) {
|
|
58
|
-
return text
|
|
59
|
-
.split('')
|
|
60
|
-
.map((char) => char + '\u0336')
|
|
61
|
-
.join('');
|
|
62
|
-
}
|
|
63
|
-
registerSubProcessors() {
|
|
64
|
-
this.processors = [
|
|
65
|
-
{
|
|
66
|
-
command: 'ls',
|
|
67
|
-
description: 'List all TODO items',
|
|
68
|
-
processCommand: async (_, context) => {
|
|
69
|
-
if (this.todos.length === 0) {
|
|
70
|
-
context.writer.writeWarning('No TODO items found.');
|
|
71
|
-
context.writer.writeln('Use "todo add <text>" to add a new TODO item.');
|
|
72
|
-
context.process.output(JSON.stringify(this.todos));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
this.todos.forEach((todo) => {
|
|
76
|
-
context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`);
|
|
77
|
-
});
|
|
78
|
-
context.process.output(this.todos);
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
command: 'add',
|
|
83
|
-
description: 'Add a new TODO item',
|
|
84
|
-
allowUnlistedCommands: true,
|
|
85
|
-
valueRequired: true,
|
|
86
|
-
processCommand: async (command, context) => {
|
|
87
|
-
const text = command.value;
|
|
88
|
-
if (!text) {
|
|
89
|
-
context.writer.writeError('Please provide a TODO description.');
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const newItem = {
|
|
93
|
-
id: this.nextId++,
|
|
94
|
-
text,
|
|
95
|
-
completed: false,
|
|
96
|
-
};
|
|
97
|
-
this.todos.push(newItem);
|
|
98
|
-
await this.saveToStorage(context);
|
|
99
|
-
context.writer.writeSuccess(`Added TODO: "${text}"`);
|
|
100
|
-
context.process.output(newItem.id.toString());
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
command: 'rm',
|
|
105
|
-
description: 'Remove a TODO item by ID',
|
|
106
|
-
allowUnlistedCommands: true,
|
|
107
|
-
parameters: [
|
|
108
|
-
{
|
|
109
|
-
name: 'all',
|
|
110
|
-
description: 'Remove all TODO items',
|
|
111
|
-
type: 'boolean',
|
|
112
|
-
defaultValue: false,
|
|
113
|
-
aliases: ['a'],
|
|
114
|
-
required: false,
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
processCommand: async (command, context) => {
|
|
118
|
-
if (command.args['all'] || command.args['a']) {
|
|
119
|
-
this.todos = [];
|
|
120
|
-
await this.saveToStorage(context);
|
|
121
|
-
context.writer.writeSuccess('Removed all TODO items.');
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const id = parseInt(command.value, 10);
|
|
125
|
-
if (isNaN(id)) {
|
|
126
|
-
context.writer.writeError('Please provide a valid TODO ID.');
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
const index = this.todos.findIndex((todo) => todo.id === id);
|
|
130
|
-
if (index === -1) {
|
|
131
|
-
context.writer.writeInfo(`TODO item with ID ${id} not found.`);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
this.todos.splice(index, 1);
|
|
135
|
-
await this.saveToStorage(context);
|
|
136
|
-
context.writer.writeSuccess(`Removed TODO item with ID ${id}.`);
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
command: 'complete',
|
|
141
|
-
description: 'Mark a TODO item as completed by ID',
|
|
142
|
-
allowUnlistedCommands: true,
|
|
143
|
-
valueRequired: true,
|
|
144
|
-
processCommand: async (command, context) => {
|
|
145
|
-
const id = parseInt(command.value || '', 10);
|
|
146
|
-
if (isNaN(id)) {
|
|
147
|
-
context.writer.writeln('Please provide a valid TODO ID.');
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const todo = this.todos.find((todo) => todo.id === id);
|
|
151
|
-
if (!todo) {
|
|
152
|
-
context.writer.writeError(`TODO item with ID ${id} not found.`);
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
if (todo.completed) {
|
|
156
|
-
context.writer.writeInfo(`TODO item with ID ${id} is already completed.`);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
todo.completed = true;
|
|
160
|
-
await this.saveToStorage(context);
|
|
161
|
-
context.writer.writeSuccess(`Marked TODO item with ID ${id} as completed.`);
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
];
|
|
165
|
-
}
|
|
166
|
-
loadFromOldStorage() {
|
|
167
|
-
const data = localStorage.getItem('todo-items');
|
|
168
|
-
return data ? JSON.parse(data) : [];
|
|
169
|
-
}
|
|
170
|
-
async saveToStorage(context) {
|
|
171
|
-
context.state.updateState({ todos: this.todos });
|
|
172
|
-
await context.state.persist();
|
|
173
|
-
localStorage.removeItem('todo-items');
|
|
174
|
-
}
|
|
175
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
176
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor }); }
|
|
177
|
-
}
|
|
178
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor, decorators: [{
|
|
179
|
-
type: Injectable
|
|
180
|
-
}], ctorParameters: function () { return []; } });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRvZG8tY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2RvL3NyYy9saWIvcHJvY2Vzc29ycy9jbGktdG9kby1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsT0FBTyxFQUlQLG9CQUFvQixHQUd2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBSzdDLE1BQU0sT0FBTyx1QkFBdUI7SUE0QmhDO1FBM0JBLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFakIsZ0JBQVcsR0FDUCwySEFBMkgsQ0FBQztRQUVoSSxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFFOUIsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUUxQixlQUFVLEdBQXdDLEVBQUUsQ0FBQztRQUVyRCxhQUFRLEdBQXNDO1lBQzFDLElBQUksRUFBRSxJQUFJO1lBQ1YsbUJBQW1CLEVBQUUsUUFBUTtZQUM3QixrQkFBa0IsRUFBRSxRQUFRO1NBQy9CLENBQUM7UUFFRix1QkFBa0IsR0FBdUM7WUFDckQsWUFBWSxFQUFFO2dCQUNWLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO2FBQ3pDO1NBQ0osQ0FBQztRQUVNLFVBQUssR0FBZSxFQUFFLENBQUM7UUFFdkIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUdmLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUNoQixPQUEwQixFQUMxQixPQUE2QjtRQUU3QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FB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QjtRQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVqRCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDOytHQTlOUSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2xpRm9yZWdyb3VuZENvbG9yLFxuICAgIENsaUljb24sXG4gICAgQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgQ2xpUHJvY2Vzc29yTWV0YWRhdGEsXG4gICAgQ2xpU3RhdGVDb25maWd1cmF0aW9uLFxuICAgIERlZmF1bHRMaWJyYXJ5QXV0aG9yLFxuICAgIElDbGlDb21tYW5kUHJvY2Vzc29yLFxuICAgIElDbGlFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgeyBMSUJSQVJZX1ZFUlNJT04gfSBmcm9tICcuLi92ZXJzaW9uJztcblxudHlwZSBUb2RvSXRlbSA9IHsgaWQ6IG51bWJlcjsgdGV4dDogc3RyaW5nOyBjb21wbGV0ZWQ6IGJvb2xlYW4gfTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENsaVRvZG9Db21tYW5kUHJvY2Vzc29yIGltcGxlbWVudHMgSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIGNvbW1hbmQgPSAndG9kbyc7XG5cbiAgICBkZXNjcmlwdGlvbiA9XG4gICAgICAgICdBIGNvbW1hbmQtbGluZSB0b29sIGZvciBtYW5hZ2luZyB5b3VyIHRhc2tzIGVmZmljaWVudGx5LiBBZGQsIGxpc3QsIGNvbXBsZXRlLCBhbmQgcmVtb3ZlIFRPRE8gaXRlbXMgd2l0aCBzaW1wbGUgY29tbWFuZHMuJztcblxuICAgIGF1dGhvciA9IERlZmF1bHRMaWJyYXJ5QXV0aG9yO1xuXG4gICAgdmVyc2lvbiA9IExJQlJBUllfVkVSU0lPTjtcblxuICAgIHByb2Nlc3NvcnM/OiBJQ2xpQ29tbWFuZFByb2Nlc3NvcltdIHwgdW5kZWZpbmVkID0gW107XG5cbiAgICBtZXRhZGF0YT86IENsaVByb2Nlc3Nvck1ldGFkYXRhIHwgdW5kZWZpbmVkID0ge1xuICAgICAgICBpY29uOiAn8J+TnScsXG4gICAgICAgIHJlcXVpcmVkQ29yZVZlcnNpb246ICcwLjAuMTYnLFxuICAgICAgICByZXF1aXJlZENsaVZlcnNpb246ICcxLjAuMzcnLFxuICAgIH07XG5cbiAgICBzdGF0ZUNvbmZpZ3VyYXRpb24/OiBDbGlTdGF0ZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgdG9kb3M6IHRoaXMubG9hZEZyb21PbGRTdG9yYWdlKCkgPz8gW10sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW10gPSBbXTtcblxuICAgIHByaXZhdGUgbmV4dElkID0gMTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3ViUHJvY2Vzc29ycygpO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NDb21tYW5kKFxuICAgICAgICBjb21tYW5kOiBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnRleHQuZXhlY3V0b3Iuc2hvd0hlbHAoY29tbWFuZCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgd3JpdGVEZXNjcmlwdGlvbihjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4odGhpcy5kZXNjcmlwdGlvbiEpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBDb21tYW5kczonKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3RvZG8gbHMnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAgICAgICAgICAgICAg8J+TgyBMaXN0IGFsbCBUT0RPIGl0ZW1zYCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCd0b2RvIGFkZCA8dGV4dD4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAgICAgICDinpUgQWRkIGEgbmV3IFRPRE8gaXRlbWApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcigndG9kbyBybSA8aWQ+JywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAgICAgICAgICAg8J+XkSAgUmVtb3ZlIGEgVE9ETyBpdGVtIGJ5IElEYCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCd0b2RvIHJtIC0tYWxsJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAgICAgICAgICDwn5eRICBSZW1vdmUgYWxsIFRPRE8gaXRlbXNgKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3RvZG8gY29tcGxldGUgPGlkPicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgIOKclCAgTWFyayBhIFRPRE8gYXMgY29tcGxldGVkYCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OdIEV4YW1wbGVzOicpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICB0b2RvIGFkZCBCdXkgbWlsayAgICAgICAgICAgICAgICAke3dyaXRlci53cmFwSW5Db2xvcignIyBBZGQgYSBuZXcgdGFzaycsIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9YCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgIHRvZG8gbHMgICAgICAgICAgICAgICAgICAgICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIFZpZXcgYWxsIHRhc2tzJywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgdG9kbyBjb21wbGV0ZSAxICAgICAgICAgICAgICAgICAgJHt3cml0ZXIud3JhcEluQ29sb3IoJyMgTWFyayB0YXNrICMxIGRvbmUnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuR3JlZW4pfWApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICB0b2RvIHJtIDIgICAgICAgICAgICAgICAgICAgICAgICAke3dyaXRlci53cmFwSW5Db2xvcignIyBEZWxldGUgdGFzayAjMicsIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9YCk7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZShjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb250ZXh0LnN0YXRlXG4gICAgICAgICAgICAuc2VsZWN0PFRvZG9JdGVtW10+KCh4KSA9PiB4Wyd0b2RvcyddKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodG9kb3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZG9zID0gdG9kb3M7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5leHRJZCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBNYXRoLm1heCguLi50aGlzLnRvZG9zLm1hcCgodCkgPT4gdC5pZCkpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaW5lVGhyb3VnaFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5tYXAoKGNoYXIpID0+IGNoYXIgKyAnXFx1MDMzNicpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclN1YlByb2Nlc3NvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvY2Vzc29ycyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAnbHMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBhbGwgVE9ETyBpdGVtcycsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChfLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvZG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVXYXJuaW5nKCdObyBUT0RPIGl0ZW1zIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlIFwidG9kbyBhZGQgPHRleHQ+XCIgdG8gYWRkIGEgbmV3IFRPRE8gaXRlbS4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQoSlNPTi5zdHJpbmdpZnkodGhpcy50b2RvcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kb3MuZm9yRWFjaCgodG9kbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7dG9kby5jb21wbGV0ZWQgPyBjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcihDbGlJY29uLkNoZWNrSWNvbiwgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKSA6ICcgJ31dICMke3RvZG8uaWR9IC0gJHt0b2RvLnRleHR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQodGhpcy50b2Rvcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ2FkZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBZGQgYSBuZXcgVE9ETyBpdGVtJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKGNvbW1hbmQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGNvbW1hbmQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYSBUT0RPIGRlc2NyaXB0aW9uLicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm5leHRJZCsrLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2Rvcy5wdXNoKG5ld0l0ZW0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvU3RvcmFnZShjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVN1Y2Nlc3MoYEFkZGVkIFRPRE86IFwiJHt0ZXh0fVwiYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wcm9jZXNzLm91dHB1dChuZXdJdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdybScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYSBUT0RPIGl0ZW0gYnkgSUQnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZW1vdmUgYWxsIFRPRE8gaXRlbXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnYSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLmFyZ3NbJ2FsbCddIHx8IGNvbW1hbmQuYXJnc1snYSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZG9zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVUb1N0b3JhZ2UoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVN1Y2Nlc3MoJ1JlbW92ZWQgYWxsIFRPRE8gaXRlbXMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHBhcnNlSW50KGNvbW1hbmQudmFsdWUhLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgVE9ETyBJRC4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudG9kb3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRvZG8pID0+IHRvZG8uaWQgPT09IGlkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFRPRE8gaXRlbSB3aXRoIElEICR7aWR9IG5vdCBmb3VuZC5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZG9zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvU3RvcmFnZShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJlbW92ZWQgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0uYCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAnY29tcGxldGUnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWFyayBhIFRPRE8gaXRlbSBhcyBjb21wbGV0ZWQgYnkgSUQnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoY29tbWFuZCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHBhcnNlSW50KGNvbW1hbmQudmFsdWUgfHwgJycsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBUT0RPIElELicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvZG8gPSB0aGlzLnRvZG9zLmZpbmQoKHRvZG8pID0+IHRvZG8uaWQgPT09IGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2RvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBUT0RPIGl0ZW0gd2l0aCBJRCAke2lkfSBub3QgZm91bmQuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodG9kby5jb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVE9ETyBpdGVtIHdpdGggSUQgJHtpZH0gaXMgYWxyZWFkeSBjb21wbGV0ZWQuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvU3RvcmFnZShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgYE1hcmtlZCBUT0RPIGl0ZW0gd2l0aCBJRCAke2lkfSBhcyBjb21wbGV0ZWQuYCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGcm9tT2xkU3RvcmFnZSgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2RvLWl0ZW1zJyk7XG4gICAgICAgIHJldHVybiBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZVRvU3RvcmFnZShjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb250ZXh0LnN0YXRlLnVwZGF0ZVN0YXRlKHsgdG9kb3M6IHRoaXMudG9kb3MgfSk7XG5cbiAgICAgICAgYXdhaXQgY29udGV4dC5zdGF0ZS5wZXJzaXN0KCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0b2RvLWl0ZW1zJyk7XG4gICAgfVxufVxuIl19
|
package/esm2022/lib/version.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// Automatically generated during build
|
|
2
|
-
export const LIBRARY_VERSION = '0.0.6';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvZG8vc3JjL2xpYi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgYnVpbGRcbmV4cG9ydCBjb25zdCBMSUJSQVJZX1ZFUlNJT04gPSAnMC4wLjYnO1xuICAiXX0=
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of string
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/cli-todo.module';
|
|
5
|
-
export * from './lib/processors/cli-todo-command-processor';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvZG8vc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLGNBQWMsNkNBQTZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHN0cmluZ1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2NsaS10b2RvLm1vZHVsZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb2Nlc3NvcnMvY2xpLXRvZG8tY29tbWFuZC1wcm9jZXNzb3InO1xuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW9kYWxpcy1jbGktdG9kby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvZG8vc3JjL3FvZGFsaXMtY2xpLXRvZG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
3
|
-
import { resolveCommandProcessorProvider } from '@qodalis/angular-cli';
|
|
4
|
-
import { DefaultLibraryAuthor, CliForegroundColor, CliIcon } from '@qodalis/cli-core';
|
|
5
|
-
|
|
6
|
-
// Automatically generated during build
|
|
7
|
-
const LIBRARY_VERSION = '0.0.6';
|
|
8
|
-
|
|
9
|
-
class CliTodoCommandProcessor {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.command = 'todo';
|
|
12
|
-
this.description = 'A command-line tool for managing your tasks efficiently. Add, list, complete, and remove TODO items with simple commands.';
|
|
13
|
-
this.author = DefaultLibraryAuthor;
|
|
14
|
-
this.version = LIBRARY_VERSION;
|
|
15
|
-
this.processors = [];
|
|
16
|
-
this.metadata = {
|
|
17
|
-
icon: '📝',
|
|
18
|
-
requiredCoreVersion: '0.0.16',
|
|
19
|
-
requiredCliVersion: '1.0.37',
|
|
20
|
-
};
|
|
21
|
-
this.stateConfiguration = {
|
|
22
|
-
initialState: {
|
|
23
|
-
todos: this.loadFromOldStorage() ?? [],
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
this.todos = [];
|
|
27
|
-
this.nextId = 1;
|
|
28
|
-
this.registerSubProcessors();
|
|
29
|
-
}
|
|
30
|
-
async processCommand(command, context) {
|
|
31
|
-
context.executor.showHelp(command, context);
|
|
32
|
-
}
|
|
33
|
-
writeDescription(context) {
|
|
34
|
-
const { writer } = context;
|
|
35
|
-
writer.writeln(this.description);
|
|
36
|
-
writer.writeln();
|
|
37
|
-
writer.writeln('📋 Commands:');
|
|
38
|
-
writer.writeln(` ${writer.wrapInColor('todo ls', CliForegroundColor.Cyan)} 📃 List all TODO items`);
|
|
39
|
-
writer.writeln(` ${writer.wrapInColor('todo add <text>', CliForegroundColor.Cyan)} ➕ Add a new TODO item`);
|
|
40
|
-
writer.writeln(` ${writer.wrapInColor('todo rm <id>', CliForegroundColor.Cyan)} 🗑 Remove a TODO item by ID`);
|
|
41
|
-
writer.writeln(` ${writer.wrapInColor('todo rm --all', CliForegroundColor.Cyan)} 🗑 Remove all TODO items`);
|
|
42
|
-
writer.writeln(` ${writer.wrapInColor('todo complete <id>', CliForegroundColor.Cyan)} ✔ Mark a TODO as completed`);
|
|
43
|
-
writer.writeln();
|
|
44
|
-
writer.writeln('📝 Examples:');
|
|
45
|
-
writer.writeln(` todo add Buy milk ${writer.wrapInColor('# Add a new task', CliForegroundColor.Green)}`);
|
|
46
|
-
writer.writeln(` todo ls ${writer.wrapInColor('# View all tasks', CliForegroundColor.Green)}`);
|
|
47
|
-
writer.writeln(` todo complete 1 ${writer.wrapInColor('# Mark task #1 done', CliForegroundColor.Green)}`);
|
|
48
|
-
writer.writeln(` todo rm 2 ${writer.wrapInColor('# Delete task #2', CliForegroundColor.Green)}`);
|
|
49
|
-
}
|
|
50
|
-
async initialize(context) {
|
|
51
|
-
context.state
|
|
52
|
-
.select((x) => x['todos'])
|
|
53
|
-
.subscribe((todos) => {
|
|
54
|
-
this.todos = todos;
|
|
55
|
-
this.nextId =
|
|
56
|
-
this.todos.length > 0
|
|
57
|
-
? Math.max(...this.todos.map((t) => t.id)) + 1
|
|
58
|
-
: 1;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
lineThroughText(text) {
|
|
62
|
-
return text
|
|
63
|
-
.split('')
|
|
64
|
-
.map((char) => char + '\u0336')
|
|
65
|
-
.join('');
|
|
66
|
-
}
|
|
67
|
-
registerSubProcessors() {
|
|
68
|
-
this.processors = [
|
|
69
|
-
{
|
|
70
|
-
command: 'ls',
|
|
71
|
-
description: 'List all TODO items',
|
|
72
|
-
processCommand: async (_, context) => {
|
|
73
|
-
if (this.todos.length === 0) {
|
|
74
|
-
context.writer.writeWarning('No TODO items found.');
|
|
75
|
-
context.writer.writeln('Use "todo add <text>" to add a new TODO item.');
|
|
76
|
-
context.process.output(JSON.stringify(this.todos));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
this.todos.forEach((todo) => {
|
|
80
|
-
context.writer.writeln(`[${todo.completed ? context.writer.wrapInColor(CliIcon.CheckIcon, CliForegroundColor.Green) : ' '}] #${todo.id} - ${todo.text}`);
|
|
81
|
-
});
|
|
82
|
-
context.process.output(this.todos);
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
command: 'add',
|
|
87
|
-
description: 'Add a new TODO item',
|
|
88
|
-
allowUnlistedCommands: true,
|
|
89
|
-
valueRequired: true,
|
|
90
|
-
processCommand: async (command, context) => {
|
|
91
|
-
const text = command.value;
|
|
92
|
-
if (!text) {
|
|
93
|
-
context.writer.writeError('Please provide a TODO description.');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const newItem = {
|
|
97
|
-
id: this.nextId++,
|
|
98
|
-
text,
|
|
99
|
-
completed: false,
|
|
100
|
-
};
|
|
101
|
-
this.todos.push(newItem);
|
|
102
|
-
await this.saveToStorage(context);
|
|
103
|
-
context.writer.writeSuccess(`Added TODO: "${text}"`);
|
|
104
|
-
context.process.output(newItem.id.toString());
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
command: 'rm',
|
|
109
|
-
description: 'Remove a TODO item by ID',
|
|
110
|
-
allowUnlistedCommands: true,
|
|
111
|
-
parameters: [
|
|
112
|
-
{
|
|
113
|
-
name: 'all',
|
|
114
|
-
description: 'Remove all TODO items',
|
|
115
|
-
type: 'boolean',
|
|
116
|
-
defaultValue: false,
|
|
117
|
-
aliases: ['a'],
|
|
118
|
-
required: false,
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
processCommand: async (command, context) => {
|
|
122
|
-
if (command.args['all'] || command.args['a']) {
|
|
123
|
-
this.todos = [];
|
|
124
|
-
await this.saveToStorage(context);
|
|
125
|
-
context.writer.writeSuccess('Removed all TODO items.');
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const id = parseInt(command.value, 10);
|
|
129
|
-
if (isNaN(id)) {
|
|
130
|
-
context.writer.writeError('Please provide a valid TODO ID.');
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
const index = this.todos.findIndex((todo) => todo.id === id);
|
|
134
|
-
if (index === -1) {
|
|
135
|
-
context.writer.writeInfo(`TODO item with ID ${id} not found.`);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
this.todos.splice(index, 1);
|
|
139
|
-
await this.saveToStorage(context);
|
|
140
|
-
context.writer.writeSuccess(`Removed TODO item with ID ${id}.`);
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
command: 'complete',
|
|
145
|
-
description: 'Mark a TODO item as completed by ID',
|
|
146
|
-
allowUnlistedCommands: true,
|
|
147
|
-
valueRequired: true,
|
|
148
|
-
processCommand: async (command, context) => {
|
|
149
|
-
const id = parseInt(command.value || '', 10);
|
|
150
|
-
if (isNaN(id)) {
|
|
151
|
-
context.writer.writeln('Please provide a valid TODO ID.');
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const todo = this.todos.find((todo) => todo.id === id);
|
|
155
|
-
if (!todo) {
|
|
156
|
-
context.writer.writeError(`TODO item with ID ${id} not found.`);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (todo.completed) {
|
|
160
|
-
context.writer.writeInfo(`TODO item with ID ${id} is already completed.`);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
todo.completed = true;
|
|
164
|
-
await this.saveToStorage(context);
|
|
165
|
-
context.writer.writeSuccess(`Marked TODO item with ID ${id} as completed.`);
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
];
|
|
169
|
-
}
|
|
170
|
-
loadFromOldStorage() {
|
|
171
|
-
const data = localStorage.getItem('todo-items');
|
|
172
|
-
return data ? JSON.parse(data) : [];
|
|
173
|
-
}
|
|
174
|
-
async saveToStorage(context) {
|
|
175
|
-
context.state.updateState({ todos: this.todos });
|
|
176
|
-
await context.state.persist();
|
|
177
|
-
localStorage.removeItem('todo-items');
|
|
178
|
-
}
|
|
179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
180
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor }); }
|
|
181
|
-
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoCommandProcessor, decorators: [{
|
|
183
|
-
type: Injectable
|
|
184
|
-
}], ctorParameters: function () { return []; } });
|
|
185
|
-
|
|
186
|
-
class CliTodoModule {
|
|
187
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
188
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule }); }
|
|
189
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)] }); }
|
|
190
|
-
}
|
|
191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTodoModule, decorators: [{
|
|
192
|
-
type: NgModule,
|
|
193
|
-
args: [{
|
|
194
|
-
declarations: [],
|
|
195
|
-
imports: [],
|
|
196
|
-
exports: [],
|
|
197
|
-
providers: [resolveCommandProcessorProvider(CliTodoCommandProcessor)],
|
|
198
|
-
}]
|
|
199
|
-
}] });
|
|
200
|
-
|
|
201
|
-
/*
|
|
202
|
-
* Public API Surface of string
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Generated bundle index. Do not edit.
|
|
207
|
-
*/
|
|
208
|
-
|
|
209
|
-
export { CliTodoCommandProcessor, CliTodoModule };
|
|
210
|
-
//# sourceMappingURL=qodalis-cli-todo.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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.6';\n ","import { Injectable } from '@angular/core';\nimport {\n CliForegroundColor,\n CliIcon,\n CliProcessCommand,\n CliProcessorMetadata,\n CliStateConfiguration,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\ntype TodoItem = { id: number; text: string; completed: boolean };\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 requiredCoreVersion: '0.0.16',\n requiredCliVersion: '1.0.37',\n };\n\n stateConfiguration?: CliStateConfiguration | undefined = {\n initialState: {\n todos: this.loadFromOldStorage() ?? [],\n },\n };\n\n private todos: TodoItem[] = [];\n\n private nextId = 1;\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 const { writer } = context;\n writer.writeln(this.description!);\n writer.writeln();\n writer.writeln('📋 Commands:');\n writer.writeln(` ${writer.wrapInColor('todo ls', CliForegroundColor.Cyan)} 📃 List all TODO items`);\n writer.writeln(` ${writer.wrapInColor('todo add <text>', CliForegroundColor.Cyan)} ➕ Add a new TODO item`);\n writer.writeln(` ${writer.wrapInColor('todo rm <id>', CliForegroundColor.Cyan)} 🗑 Remove a TODO item by ID`);\n writer.writeln(` ${writer.wrapInColor('todo rm --all', CliForegroundColor.Cyan)} 🗑 Remove all TODO items`);\n writer.writeln(` ${writer.wrapInColor('todo complete <id>', CliForegroundColor.Cyan)} ✔ Mark a TODO as completed`);\n writer.writeln();\n writer.writeln('📝 Examples:');\n writer.writeln(` todo add Buy milk ${writer.wrapInColor('# Add a new task', CliForegroundColor.Green)}`);\n writer.writeln(` todo ls ${writer.wrapInColor('# View all tasks', CliForegroundColor.Green)}`);\n writer.writeln(` todo complete 1 ${writer.wrapInColor('# Mark task #1 done', CliForegroundColor.Green)}`);\n writer.writeln(` todo rm 2 ${writer.wrapInColor('# Delete task #2', CliForegroundColor.Green)}`);\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n context.state\n .select<TodoItem[]>((x) => x['todos'])\n .subscribe((todos) => {\n this.todos = todos;\n\n this.nextId =\n this.todos.length > 0\n ? Math.max(...this.todos.map((t) => t.id)) + 1\n : 1;\n });\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(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 await this.saveToStorage(context);\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 await this.saveToStorage(context);\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 await this.saveToStorage(context);\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\n if (todo.completed) {\n context.writer.writeInfo(\n `TODO item with ID ${id} is already completed.`,\n );\n return;\n }\n\n todo.completed = true;\n await this.saveToStorage(context);\n context.writer.writeSuccess(\n `Marked TODO item with ID ${id} as completed.`,\n );\n },\n },\n ];\n }\n\n private loadFromOldStorage(): TodoItem[] {\n const data = localStorage.getItem('todo-items');\n return data ? JSON.parse(data) : [];\n }\n\n private async saveToStorage(context: ICliExecutionContext): Promise<void> {\n context.state.updateState({ todos: this.todos });\n\n await context.state.persist();\n localStorage.removeItem('todo-items');\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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"}
|
package/index.d.ts
DELETED
package/lib/cli-todo.module.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class CliTodoModule {
|
|
3
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CliTodoModule, never>;
|
|
4
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<CliTodoModule, never, never, never>;
|
|
5
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<CliTodoModule>;
|
|
6
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { CliProcessCommand, CliProcessorMetadata, CliStateConfiguration, ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class CliTodoCommandProcessor implements ICliCommandProcessor {
|
|
4
|
-
command: string;
|
|
5
|
-
description: string;
|
|
6
|
-
author: import("@qodalis/cli-core").ICliCommandAuthor;
|
|
7
|
-
version: string;
|
|
8
|
-
processors?: ICliCommandProcessor[] | undefined;
|
|
9
|
-
metadata?: CliProcessorMetadata | undefined;
|
|
10
|
-
stateConfiguration?: CliStateConfiguration | undefined;
|
|
11
|
-
private todos;
|
|
12
|
-
private nextId;
|
|
13
|
-
constructor();
|
|
14
|
-
processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
|
|
15
|
-
writeDescription(context: ICliExecutionContext): void;
|
|
16
|
-
initialize(context: ICliExecutionContext): Promise<void>;
|
|
17
|
-
private lineThroughText;
|
|
18
|
-
private registerSubProcessors;
|
|
19
|
-
private loadFromOldStorage;
|
|
20
|
-
private saveToStorage;
|
|
21
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CliTodoCommandProcessor, never>;
|
|
22
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<CliTodoCommandProcessor>;
|
|
23
|
-
}
|
package/lib/version.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const LIBRARY_VERSION = "0.0.6";
|