UNPKG

@qodalis/angular-cli

Version:

A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.

106 lines 14.5 kB
import { Inject, Injectable } from '@angular/core'; import { CliIcon, CliForegroundColor, } from '@qodalis/cli-core'; import { firstValueFrom } from 'rxjs'; import { ICliUserSessionService_TOKEN, ICliUsersStoreService_TOKEN, } from '../../tokens'; import { DefaultLibraryAuthor } from '@qodalis/cli-core'; import * as i0 from "@angular/core"; export class CliSwitchUserCommandProcessor { constructor(userSessionService, usersStore) { this.userSessionService = userSessionService; this.usersStore = usersStore; this.command = 'su'; this.description = 'Switch user'; this.allowUnlistedCommands = true; this.parameters = [ { name: 'reload', description: 'Reload the page after switching user', type: 'boolean', required: false, aliases: ['r'], }, ]; this.author = DefaultLibraryAuthor; this.metadata = { sealed: true, module: 'users', icon: CliIcon.User, }; this.stateConfiguration = { initialState: {}, storeName: 'users', }; this.valueRequired = true; } async processCommand(command, context) { try { const fromUser = context.userSession?.user; const toUser = command.value; if (!fromUser) { context.writer.writeError('Missing user to switch from'); context.process.exit(-1); return; } if (!toUser) { context.writer.writeError('Missing user to switch to'); context.process.exit(-1); return; } context.spinner?.show(CliIcon.User + ' Switching...'); const user = await firstValueFrom(this.usersStore.getUser(toUser)); if (!user) { context.writer.writeError(`User ${toUser} not found`); context.spinner?.hide(); context.process.exit(-1); return; } if (user.id === fromUser.id) { context.writer.writeError('Already on the user'); context.spinner?.hide(); context.process.exit(-1); return; } await this.userSessionService.setUserSession({ user, }); context.spinner?.hide(); context.writer.writeSuccess(`Switch to ${context.writer.wrapInColor(toUser, CliForegroundColor.Cyan)} was successfully`); const reload = command.args['reload'] || command.args['r'] || context.options?.usersModule?.reloadPageOnUserChange === true; if (reload) { context.writer.writeln('Reloading the page in 3 seconds...'); setTimeout(() => { window.location.reload(); }, 3000); } } catch (e) { console.error(e); context.spinner?.hide(); context.writer.writeError('Failed to switch user'); context.process.exit(-1); return; } } writeDescription(context) { context.writer.writeln('Switch user command'); context.writer.writeln('Usage: su <user email>'); context.writer.writeln('Example: su user@domain.com'); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliSwitchUserCommandProcessor, deps: [{ token: ICliUserSessionService_TOKEN }, { token: ICliUsersStoreService_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliSwitchUserCommandProcessor, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliSwitchUserCommandProcessor, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [ICliUserSessionService_TOKEN] }] }, { type: undefined, decorators: [{ type: Inject, args: [ICliUsersStoreService_TOKEN] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXN3aXRjaC11c2VyLWNvbW1hbmQtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpL3NyYy9saWIvY2xpL3Byb2Nlc3NvcnMvdXNlcnMvY2xpLXN3aXRjaC11c2VyLWNvbW1hbmQtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFRSCxPQUFPLEVBQ1Asa0JBQWtCLEdBRXJCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLDJCQUEyQixHQUM5QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLDZCQUE2QjtJQWdDdEMsWUFFcUIsa0JBQTBDLEVBRTFDLFVBQWlDO1FBRmpDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBd0I7UUFFMUMsZUFBVSxHQUFWLFVBQVUsQ0FBdUI7UUFuQ3RELFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFZixnQkFBVyxHQUF3QixhQUFhLENBQUM7UUFFakQsMEJBQXFCLEdBQXlCLElBQUksQ0FBQztRQUVuRCxlQUFVLEdBQWtEO1lBQ3hEO2dCQUNJLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxzQ0FBc0M7Z0JBQ25ELElBQUksRUFBRSxTQUFTO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQzthQUNqQjtTQUNKLENBQUM7UUFFRixXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFFOUIsYUFBUSxHQUFzQztZQUMxQyxNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxPQUFP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QUM7WUFDakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBRW5ELE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsT0FBTztTQUNWO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQTZCO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzFELENBQUM7K0dBbEhRLDZCQUE2QixrQkFpQzFCLDRCQUE0QixhQUU1QiwyQkFBMkI7bUhBbkM5Qiw2QkFBNkIsY0FGMUIsTUFBTTs7NEZBRVQsNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBa0NRLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgSUNsaUNvbW1hbmRQcm9jZXNzb3IsXG4gICAgSUNsaUNvbW1hbmRQYXJhbWV0ZXJEZXNjcmlwdG9yLFxuICAgIElDbGlVc2Vyc1N0b3JlU2VydmljZSxcbiAgICBJQ2xpVXNlclNlc3Npb25TZXJ2aWNlLFxuICAgIENsaVByb2Nlc3Nvck1ldGFkYXRhLFxuICAgIENsaUljb24sXG4gICAgQ2xpRm9yZWdyb3VuZENvbG9yLFxuICAgIENsaVN0YXRlQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnQHFvZGFsaXMvY2xpLWNvcmUnO1xuXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBJQ2xpVXNlclNlc3Npb25TZXJ2aWNlX1RPS0VOLFxuICAgIElDbGlVc2Vyc1N0b3JlU2VydmljZV9UT0tFTixcbn0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IERlZmF1bHRMaWJyYXJ5QXV0aG9yIH0gZnJvbSAnQHFvZGFsaXMvY2xpLWNvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlTd2l0Y2hVc2VyQ29tbWFuZFByb2Nlc3NvciBpbXBsZW1lbnRzIElDbGlDb21tYW5kUHJvY2Vzc29yIHtcbiAgICBjb21tYW5kID0gJ3N1JztcblxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ1N3aXRjaCB1c2VyJztcblxuICAgIGFsbG93VW5saXN0ZWRDb21tYW5kcz86IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuXG4gICAgcGFyYW1ldGVycz86IElDbGlDb21tYW5kUGFyYW1ldGVyRGVzY3JpcHRvcltdIHwgdW5kZWZpbmVkID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAncmVsb2FkJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVsb2FkIHRoZSBwYWdlIGFmdGVyIHN3aXRjaGluZyB1c2VyJyxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGFsaWFzZXM6IFsnciddLFxuICAgICAgICB9LFxuICAgIF07XG5cbiAgICBhdXRob3IgPSBEZWZhdWx0TGlicmFyeUF1dGhvcjtcblxuICAgIG1ldGFkYXRhPzogQ2xpUHJvY2Vzc29yTWV0YWRhdGEgfCB1bmRlZmluZWQgPSB7XG4gICAgICAgIHNlYWxlZDogdHJ1ZSxcbiAgICAgICAgbW9kdWxlOiAndXNlcnMnLFxuICAgICAgICBpY29uOiBDbGlJY29uLlVzZXIsXG4gICAgfTtcblxuICAgIHN0YXRlQ29uZmlndXJhdGlvbj86IENsaVN0YXRlQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IHtcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7fSxcbiAgICAgICAgc3RvcmVOYW1lOiAndXNlcnMnLFxuICAgIH07XG5cbiAgICB2YWx1ZVJlcXVpcmVkID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElDbGlVc2VyU2Vzc2lvblNlcnZpY2VfVE9LRU4pXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclNlc3Npb25TZXJ2aWNlOiBJQ2xpVXNlclNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElDbGlVc2Vyc1N0b3JlU2VydmljZV9UT0tFTilcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2Vyc1N0b3JlOiBJQ2xpVXNlcnNTdG9yZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgcHJvY2Vzc0NvbW1hbmQoXG4gICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21Vc2VyID0gY29udGV4dC51c2VyU2Vzc2lvbj8udXNlcjtcblxuICAgICAgICAgICAgY29uc3QgdG9Vc2VyID0gY29tbWFuZC52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKCFmcm9tVXNlcikge1xuICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoJ01pc3NpbmcgdXNlciB0byBzd2l0Y2ggZnJvbScpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdG9Vc2VyKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcignTWlzc2luZyB1c2VyIHRvIHN3aXRjaCB0bycpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuc3Bpbm5lcj8uc2hvdyhDbGlJY29uLlVzZXIgKyAnICBTd2l0Y2hpbmcuLi4nKTtcblxuICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudXNlcnNTdG9yZS5nZXRVc2VyKHRvVXNlcikpO1xuXG4gICAgICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKGBVc2VyICR7dG9Vc2VyfSBub3QgZm91bmRgKTtcblxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Bpbm5lcj8uaGlkZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1c2VyLmlkID09PSBmcm9tVXNlci5pZCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoJ0FscmVhZHkgb24gdGhlIHVzZXInKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNwaW5uZXI/LmhpZGUoKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3MuZXhpdCgtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXNzaW9uU2VydmljZS5zZXRVc2VyU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb250ZXh0LnNwaW5uZXI/LmhpZGUoKTtcblxuICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKFxuICAgICAgICAgICAgICAgIGBTd2l0Y2ggdG8gJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcih0b1VzZXIsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gd2FzIHN1Y2Nlc3NmdWxseWAsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPVxuICAgICAgICAgICAgICAgIGNvbW1hbmQuYXJnc1sncmVsb2FkJ10gfHxcbiAgICAgICAgICAgICAgICBjb21tYW5kLmFyZ3NbJ3InXSB8fFxuICAgICAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucz8udXNlcnNNb2R1bGU/LnJlbG9hZFBhZ2VPblVzZXJDaGFuZ2UgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZWxvYWQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdSZWxvYWRpbmcgdGhlIHBhZ2UgaW4gMyBzZWNvbmRzLi4uJyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIGNvbnRleHQuc3Bpbm5lcj8uaGlkZSgpO1xuICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcignRmFpbGVkIHRvIHN3aXRjaCB1c2VyJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlRGVzY3JpcHRpb24oY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignU3dpdGNoIHVzZXIgY29tbWFuZCcpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdVc2FnZTogc3UgPHVzZXIgZW1haWw+Jyk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJ0V4YW1wbGU6IHN1IHVzZXJAZG9tYWluLmNvbScpO1xuICAgIH1cbn1cbiJdfQ==