cc-terminal
Version:
AngularJs Web based terminal module
66 lines • 9.4 kB
JavaScript
// https://jurebajt.com/state-management-in-angular-with-observable-store-services/
import { Injectable } from '@angular/core';
import { Store } from './store';
import { CommandState } from './cc-terminal-command-state';
import * as i0 from "@angular/core";
export class CommandStore extends Store {
constructor() {
super(new CommandState());
}
addKeyValue(command) {
this.setState({
...this.state,
commands: this.state.commands.map(c => {
if (c.name === command.name) {
if (c.details && !c.details.readonly) {
if (!c['details'][command.key]) {
c['details'][command.key] = null;
} // If key not exists, make one
return { ...c, details: { ...{ ...c.details, [command.key]: command.value } } };
}
else {
console.error('You are trying to modify the readonly command, which is not allowed, command name: ' + command.name);
return { ...c }; // You are trying modify readonly command, which is not possible.
}
}
return c;
})
});
}
/**
* @description - This function will add the command
*
* @param command
*/
addCommand(command) {
let _regex = /^[a-zA-Z]+$/;
if (command && command.name && _regex.test(command.name)) {
if (command && command.details && command.details.hasOwnProperty('output')) {
const exists = this.state.commands.map(function (e) { return e.name; }).indexOf(command.name);
if (exists === -1) {
this.setState({
...this.state,
commands: [...this.state.commands, command]
});
}
else {
console.error('You are trying to add duplicate command, which is not allowed, command name: ' + command.name);
// alert('You are trying to add duplicate command, which is not allowed, command name: ' + command.name);
// throw 'You are trying to add duplicate command, which is not allowed, command name: ' + command.name;
}
}
else {
console.error('To add a new command, we need output property, command name: ' + command.name);
}
}
else {
console.error('Command name is not valid to add in command list, command name should be from [a-z | A-Z] without containing space, command name: ' + command.name);
}
}
}
/** @nocollapse */ CommandStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CommandStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ CommandStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CommandStore });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CommandStore, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtdGVybWluYWwtY29tbWFuZC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NjLXRlcm1pbmFsL3NyYy9saWIvY2MtdGVybWluYWwtY29tbWFuZC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRkFBbUY7QUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0sNkJBQTZCLENBQUM7O0FBRzdFLE1BQU0sT0FBTyxZQUFhLFNBQVEsS0FBbUI7SUFDbkQ7UUFDRSxLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBa0Q7UUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDM0IsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUFFLENBQUMsOEJBQThCO3dCQUNwRyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUNqRjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHFGQUFxRixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEgsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxpRUFBaUU7cUJBQ25GO2lCQUNGO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsT0FBeUI7UUFDekMsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQzNCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlGLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUNaLEdBQUcsSUFBSSxDQUFDLEtBQUs7d0JBQ2IsUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7cUJBQzVDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLCtFQUErRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUcseUdBQXlHO29CQUN6Ryx3R0FBd0c7aUJBQ3pHO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0Y7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxvSUFBb0ksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEs7SUFDSCxDQUFDOzs0SEFqRFUsWUFBWTtnSUFBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2p1cmViYWp0LmNvbS9zdGF0ZS1tYW5hZ2VtZW50LWluLWFuZ3VsYXItd2l0aC1vYnNlcnZhYmxlLXN0b3JlLXNlcnZpY2VzL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IENvbW1hbmRTdGF0ZSwgQ29tbWFuZEludGVyZmFjZSB9IGZyb20gJy4vY2MtdGVybWluYWwtY29tbWFuZC1zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb21tYW5kU3RvcmUgZXh0ZW5kcyBTdG9yZTxDb21tYW5kU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobmV3IENvbW1hbmRTdGF0ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRLZXlWYWx1ZShjb21tYW5kOiB7IG5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkgfSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIGNvbW1hbmRzOiB0aGlzLnN0YXRlLmNvbW1hbmRzLm1hcChjID0+IHtcbiAgICAgICAgaWYgKGMubmFtZSA9PT0gY29tbWFuZC5uYW1lKSB7XG4gICAgICAgICAgaWYgKGMuZGV0YWlscyAmJiAhYy5kZXRhaWxzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICBpZiAoIWNbJ2RldGFpbHMnXVtjb21tYW5kLmtleV0pIHsgY1snZGV0YWlscyddW2NvbW1hbmQua2V5XSA9IG51bGw7IH0gLy8gSWYga2V5IG5vdCBleGlzdHMsIG1ha2Ugb25lXG4gICAgICAgICAgICByZXR1cm4geyAuLi5jLCBkZXRhaWxzOiB7IC4uLnsgLi4uYy5kZXRhaWxzLCBbY29tbWFuZC5rZXldOiBjb21tYW5kLnZhbHVlIH0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgYXJlIHRyeWluZyB0byBtb2RpZnkgdGhlIHJlYWRvbmx5IGNvbW1hbmQsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLCBjb21tYW5kIG5hbWU6ICcgKyBjb21tYW5kLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYyB9OyAvLyBZb3UgYXJlIHRyeWluZyBtb2RpZnkgcmVhZG9ubHkgY29tbWFuZCwgd2hpY2ggaXMgbm90IHBvc3NpYmxlLlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGUgY29tbWFuZFxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZFxuICAgKi9cbiAgcHVibGljIGFkZENvbW1hbmQoY29tbWFuZDogQ29tbWFuZEludGVyZmFjZSk6IHZvaWQge1xuICAgIGxldCBfcmVnZXggPSAvXlthLXpBLVpdKyQvO1xuICAgIGlmIChjb21tYW5kICYmIGNvbW1hbmQubmFtZSAmJiBfcmVnZXgudGVzdChjb21tYW5kLm5hbWUpKSB7XG4gICAgICBpZiAoY29tbWFuZCAmJiBjb21tYW5kLmRldGFpbHMgJiYgY29tbWFuZC5kZXRhaWxzLmhhc093blByb3BlcnR5KCdvdXRwdXQnKSkge1xuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLnN0YXRlLmNvbW1hbmRzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lOyB9KS5pbmRleE9mKGNvbW1hbmQubmFtZSk7XG4gICAgICAgIGlmIChleGlzdHMgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgY29tbWFuZHM6IFsuLi50aGlzLnN0YXRlLmNvbW1hbmRzLCBjb21tYW5kXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1lvdSBhcmUgdHJ5aW5nIHRvIGFkZCBkdXBsaWNhdGUgY29tbWFuZCwgd2hpY2ggaXMgbm90IGFsbG93ZWQsIGNvbW1hbmQgbmFtZTogJyArIGNvbW1hbmQubmFtZSk7XG4gICAgICAgICAgLy8gYWxlcnQoJ1lvdSBhcmUgdHJ5aW5nIHRvIGFkZCBkdXBsaWNhdGUgY29tbWFuZCwgd2hpY2ggaXMgbm90IGFsbG93ZWQsIGNvbW1hbmQgbmFtZTogJyArIGNvbW1hbmQubmFtZSk7XG4gICAgICAgICAgLy8gdGhyb3cgJ1lvdSBhcmUgdHJ5aW5nIHRvIGFkZCBkdXBsaWNhdGUgY29tbWFuZCwgd2hpY2ggaXMgbm90IGFsbG93ZWQsIGNvbW1hbmQgbmFtZTogJyArIGNvbW1hbmQubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVG8gYWRkIGEgbmV3IGNvbW1hbmQsIHdlIG5lZWQgb3V0cHV0IHByb3BlcnR5LCBjb21tYW5kIG5hbWU6ICcgKyBjb21tYW5kLm5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb21tYW5kIG5hbWUgaXMgbm90IHZhbGlkIHRvIGFkZCBpbiBjb21tYW5kIGxpc3QsIGNvbW1hbmQgbmFtZSBzaG91bGQgYmUgZnJvbSBbYS16IHwgQS1aXSB3aXRob3V0IGNvbnRhaW5pbmcgc3BhY2UsIGNvbW1hbmQgbmFtZTogJyArIGNvbW1hbmQubmFtZSk7XG4gICAgfVxuICB9XG59XG4iXX0=