@qodalis/angular-cli
Version:
A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.
83 lines • 11 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, map } from 'rxjs';
import * as i0 from "@angular/core";
export class CliUsersStoreService {
constructor() {
this.localStorageKey = 'users';
this.defaultUsers = [
{
id: 'root',
name: 'root',
email: 'root@domain.com',
groups: ['admin'],
},
];
this.usersSubject = new BehaviorSubject([]);
this.initialize(this.defaultUsers);
}
initialize(defaultUsers) {
const storedUsers = this.loadUsers(defaultUsers);
this.usersSubject.next(storedUsers);
}
async createUser(user) {
const users = this.usersSubject.getValue();
if (users.some((u) => u.email === user.email || u.name === user.name)) {
return Promise.reject('User already exists');
}
const newUser = {
...user,
id: user.email,
};
users.push(newUser);
this.saveUsers(users);
this.usersSubject.next(users);
return newUser;
}
getUsers(options) {
const { query, skip, take } = options || {};
return this.usersSubject.asObservable().pipe(map((users) => {
if (query) {
const queryLower = query.toLowerCase();
users = users.filter((u) => u.name.toLowerCase().includes(queryLower) ||
u.email.toLowerCase().includes(queryLower));
}
if (skip) {
users = users.slice(skip);
}
if (take) {
users = users.slice(0, take);
}
return users;
}));
}
getUser(id) {
return this.usersSubject
.asObservable()
.pipe(map((users) => users.find((u) => u.id === id || u.name === id || u.email === id)));
}
saveUsers(users) {
localStorage.setItem(this.localStorageKey, JSON.stringify(users));
}
loadUsers(fallbackUsers) {
const data = localStorage.getItem(this.localStorageKey);
if (!data) {
return fallbackUsers;
}
try {
return JSON.parse(data);
}
catch (error) {
console.error('Failed to parse user data from localStorage', error);
return [];
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliUsersStoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliUsersStoreService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliUsersStoreService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXVzZXJzLXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGkvc3JjL2xpYi9jbGkvc2VydmljZXMvY2xpLXVzZXJzLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFLeEQsTUFBTSxPQUFPLG9CQUFvQjtJQWM3QjtRQWJRLG9CQUFlLEdBQUcsT0FBTyxDQUFDO1FBRXhCLGlCQUFZLEdBQWU7WUFDakM7Z0JBQ0ksRUFBRSxFQUFFLE1BQU07Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3BCO1NBQ0osQ0FBQztRQUVRLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7UUFHekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVTLFVBQVUsQ0FBQyxZQUF3QjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQTBCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0MsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxD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b250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDbGlVc2VyLCBJQ2xpVXNlcnNTdG9yZVNlcnZpY2UgfSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlVc2Vyc1N0b3JlU2VydmljZSBpbXBsZW1lbnRzIElDbGlVc2Vyc1N0b3JlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VLZXkgPSAndXNlcnMnO1xuXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRVc2VyczogSUNsaVVzZXJbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdyb290JyxcbiAgICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICAgIGVtYWlsOiAncm9vdEBkb21haW4uY29tJyxcbiAgICAgICAgICAgIGdyb3VwczogWydhZG1pbiddLFxuICAgICAgICB9LFxuICAgIF07XG5cbiAgICBwcm90ZWN0ZWQgdXNlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ2xpVXNlcltdPihbXSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKHRoaXMuZGVmYXVsdFVzZXJzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZShkZWZhdWx0VXNlcnM6IElDbGlVc2VyW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RvcmVkVXNlcnMgPSB0aGlzLmxvYWRVc2VycyhkZWZhdWx0VXNlcnMpO1xuICAgICAgICB0aGlzLnVzZXJzU3ViamVjdC5uZXh0KHN0b3JlZFVzZXJzKTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVVc2VyKHVzZXI6IE9taXQ8SUNsaVVzZXIsICdpZCc+KTogUHJvbWlzZTxJQ2xpVXNlcj4ge1xuICAgICAgICBjb25zdCB1c2VycyA9IHRoaXMudXNlcnNTdWJqZWN0LmdldFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKHVzZXJzLnNvbWUoKHUpID0+IHUuZW1haWwgPT09IHVzZXIuZW1haWwgfHwgdS5uYW1lID09PSB1c2VyLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1VzZXI6IElDbGlVc2VyID0ge1xuICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgIGlkOiB1c2VyLmVtYWlsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHVzZXJzLnB1c2gobmV3VXNlcik7XG4gICAgICAgIHRoaXMuc2F2ZVVzZXJzKHVzZXJzKTtcbiAgICAgICAgdGhpcy51c2Vyc1N1YmplY3QubmV4dCh1c2Vycyk7XG5cbiAgICAgICAgcmV0dXJuIG5ld1VzZXI7XG4gICAgfVxuXG4gICAgZ2V0VXNlcnMob3B0aW9ucz86IHtcbiAgICAgICAgcXVlcnk/OiBzdHJpbmc7XG4gICAgICAgIHNraXA/OiBudW1iZXI7XG4gICAgICAgIHRha2U/OiBudW1iZXI7XG4gICAgfSk6IE9ic2VydmFibGU8SUNsaVVzZXJbXT4ge1xuICAgICAgICBjb25zdCB7IHF1ZXJ5LCBza2lwLCB0YWtlIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgbWFwKCh1c2VycykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUxvd2VyID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMgPSB1c2Vycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAodSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUuZW1haWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICB1c2VycyA9IHVzZXJzLnNsaWNlKHNraXApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0YWtlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJzID0gdXNlcnMuc2xpY2UoMCwgdGFrZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VXNlcihpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxJQ2xpVXNlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51c2Vyc1N1YmplY3RcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCh1c2VycykgPT5cbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh1KSA9PiB1LmlkID09PSBpZCB8fCB1Lm5hbWUgPT09IGlkIHx8IHUuZW1haWwgPT09IGlkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVVzZXJzKHVzZXJzOiBJQ2xpVXNlcltdKTogdm9pZCB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeSh1c2VycykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFVzZXJzKGZhbGxiYWNrVXNlcnM6IElDbGlVc2VyW10pOiBJQ2xpVXNlcltdIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tVc2VycztcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBJQ2xpVXNlcltdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHVzZXIgZGF0YSBmcm9tIGxvY2FsU3RvcmFnZScsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==