UNPKG

@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
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==