@qodalis/angular-cli
Version:
A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.
38 lines • 5.85 kB
JavaScript
import { BehaviorSubject } from 'rxjs';
import { distinctUntilChanged, map } from 'rxjs/operators';
export class CliStateStore {
constructor(services, name, initialState) {
this.services = services;
this.name = name;
this.initialState = initialState;
this.state$ = new BehaviorSubject(initialState);
this.storageKey = `store-state-${name}`;
}
getState() {
return this.state$.getValue();
}
updateState(newState) {
this.state$.next({ ...this.getState(), ...newState });
}
select(selector) {
return this.state$.asObservable().pipe(map(selector), distinctUntilChanged());
}
subscribe(callback) {
return this.state$.asObservable().subscribe(callback);
}
reset() {
this.state$.next(this.initialState);
}
async persist() {
const keyValueStore = this.services.get('cli-key-value-store');
await keyValueStore.set(this.storageKey, this.getState());
}
async initialize() {
const keyValueStore = this.services.get('cli-key-value-store');
const state = await keyValueStore.get(this.storageKey);
if (state) {
this.state$.next(state);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXN0YXRlLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpL3NyYy9saWIvY2xpL3N0YXRlL2NsaS1zdGF0ZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDcUIsUUFBNkIsRUFDOUIsSUFBWSxFQUNYLFlBQXNCO1FBRnRCLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWCxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUV2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFXLFlBQVksQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNLENBQUksUUFBZ0M7UUFDdEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUNiLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQW1DO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ25DLHFCQUFxQixDQUN4QixDQUFDO1FBRUYsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ1osTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ25DLHFCQUFxQixDQUN4QixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqRSxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDbGlTdGF0ZSxcbiAgICBJQ2xpU2VydmljZVByb3ZpZGVyLFxuICAgIElDbGlLZXlWYWx1ZVN0b3JlLFxuICAgIElDbGlTdGF0ZVN0b3JlLFxufSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENsaVN0YXRlU3RvcmUgaW1wbGVtZW50cyBJQ2xpU3RhdGVTdG9yZSB7XG4gICAgcHJpdmF0ZSBzdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxDbGlTdGF0ZT47XG5cbiAgICBwcml2YXRlIHN0b3JhZ2VLZXk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VzOiBJQ2xpU2VydmljZVByb3ZpZGVyLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxTdGF0ZTogQ2xpU3RhdGUsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDbGlTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuICAgICAgICB0aGlzLnN0b3JhZ2VLZXkgPSBgc3RvcmUtc3RhdGUtJHtuYW1lfWA7XG4gICAgfVxuXG4gICAgZ2V0U3RhdGU8VCBleHRlbmRzIENsaVN0YXRlID0gQ2xpU3RhdGU+KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQuZ2V0VmFsdWUoKSBhcyBUO1xuICAgIH1cblxuICAgIHVwZGF0ZVN0YXRlKG5ld1N0YXRlOiBQYXJ0aWFsPENsaVN0YXRlPik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgLi4udGhpcy5nZXRTdGF0ZSgpLCAuLi5uZXdTdGF0ZSB9KTtcbiAgICB9XG5cbiAgICBzZWxlY3Q8Sz4oc2VsZWN0b3I6IChzdGF0ZTogQ2xpU3RhdGUpID0+IEspOiBPYnNlcnZhYmxlPEs+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAoc2VsZWN0b3IpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgLy8gRW1pdCBvbmx5IHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmUoY2FsbGJhY2s6IChzdGF0ZTogQ2xpU3RhdGUpID0+IHZvaWQpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0ZSQubmV4dCh0aGlzLmluaXRpYWxTdGF0ZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5VmFsdWVTdG9yZSA9IHRoaXMuc2VydmljZXMuZ2V0PElDbGlLZXlWYWx1ZVN0b3JlPihcbiAgICAgICAgICAgICdjbGkta2V5LXZhbHVlLXN0b3JlJyxcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBrZXlWYWx1ZVN0b3JlLnNldCh0aGlzLnN0b3JhZ2VLZXksIHRoaXMuZ2V0U3RhdGUoKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5VmFsdWVTdG9yZSA9IHRoaXMuc2VydmljZXMuZ2V0PElDbGlLZXlWYWx1ZVN0b3JlPihcbiAgICAgICAgICAgICdjbGkta2V5LXZhbHVlLXN0b3JlJyxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IGtleVZhbHVlU3RvcmUuZ2V0PENsaVN0YXRlPih0aGlzLnN0b3JhZ2VLZXkpO1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSQubmV4dChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=