UNPKG

@qodalis/angular-cli

Version:

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

98 lines 12.2 kB
import { Injectable } from '@angular/core'; import { LIBRARY_VERSION } from '../../../version'; import { CLi_Name_Art } from '../../constants'; import { CliForegroundColor } from '@qodalis/cli-core'; import { getGreetingBasedOnTime } from '../../../utils'; import * as i0 from "@angular/core"; /** * Service that displays the welcome message to the user. */ export class CliWelcomeMessageService { /** * Displays the welcome message to the user. * @param context * @returns void */ displayWelcomeMessage(context) { const welcomeConfig = context.options?.welcomeMessage; // Handle the 'show' property if (welcomeConfig?.show) { const showOption = welcomeConfig.show; // Determine if the welcome message should be shown if (!this.shouldDisplayWelcomeMessage(showOption)) { context.showPrompt(); return; } } if (welcomeConfig?.message) { context.terminal.writeln(welcomeConfig?.message); } else { const welcomeMessage = [ `Welcome to Web CLI [Version ${context.writer.wrapInColor(LIBRARY_VERSION, CliForegroundColor.Green)}]`, '(c) 2024 Qodalis Solutions. All rights reserved.', CLi_Name_Art, '', context.writer.wrapInColor('Documentation: ', CliForegroundColor.Green) + 'https://cli-docs.qodalis.com/', '', "Type 'help' to get started.", '', ]; welcomeMessage.forEach((line, index) => { context.terminal.write(line + '\r\n'); }); } this.recordWelcomeMessageDisplay(); context.showPrompt(); context.textAnimator?.showText(getGreetingBasedOnTime(), { speed: 60, removeAfterTyping: true, }); } /** * Determines if the welcome message should be displayed based on the show option. * @param showOption - The show option from the config. * @returns true if the message should be displayed, false otherwise. */ shouldDisplayWelcomeMessage(showOption) { const lastDisplayed = this.getLastWelcomeMessageDisplayTime(); switch (showOption) { case 'always': return true; case 'once': return !lastDisplayed; // Show only if it hasn't been shown before case 'daily': if (!lastDisplayed) return true; // No previous display, show it const now = new Date(); const lastDate = new Date(lastDisplayed); return now.toDateString() !== lastDate.toDateString(); // Compare dates case 'never': return false; default: return true; } } /** * Records the current time as the last display time for the welcome message. */ recordWelcomeMessageDisplay() { localStorage.setItem('cliWelcomeMessageLastDisplayed', new Date().toISOString()); } /** * Retrieves the last display time of the welcome message. * @returns The ISO string of the last display time or null if not recorded. */ getLastWelcomeMessageDisplayTime() { return localStorage.getItem('cliWelcomeMessageLastDisplayed'); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliWelcomeMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliWelcomeMessageService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliWelcomeMessageService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXdlbGNvbWUtbWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpL3NyYy9saWIvY2xpL3NlcnZpY2VzL3N5c3RlbS9jbGktd2VsY29tZS1tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDOzs7O09BSUc7SUFDSSxxQkFBcUIsQ0FBQyxPQUE2QjtRQUN0RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztRQUV0RCw2QkFBNkI7UUFDN0IsSUFBSSxhQUFhLEVBQUUsSUFBSSxFQUFFO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFFdEMsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsT0FBTzthQUNWO1NBQ0o7UUFFRCxJQUFJLGFBQWEsRUFBRSxPQUFPLEVBQUU7WUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDSCxNQUFNLGNBQWMsR0FBRztnQkFDbkIsK0JBQStCLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDdkcsa0RBQWtEO2dCQUNsRCxZQUFZO2dCQUNaLEVBQUU7Z0JBQ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ3RCLGlCQUFpQixFQUNqQixrQkFBa0IsQ0FBQyxLQUFLLENBQzNCLEdBQUcsK0JBQStCO2dCQUNuQyxFQUFFO2dCQUNGLDZCQUE2QjtnQkFDN0IsRUFBRTthQUNMLENBQUM7WUFFRixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1lBQ3JELEtBQUssRUFBRSxFQUFFO1lBQ1QsaUJBQWlCLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDJCQUEyQixDQUMvQixVQUFpRDtRQUVqRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUU5RCxRQUFRLFVBQVUsRUFBRTtZQUNoQixLQUFLLFFBQVE7Z0JBQ1QsT0FBTyxJQUFJLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNQLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQywyQ0FBMkM7WUFDdEUsS0FBSyxPQUFPO2dCQUNSLElBQUksQ0FBQyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsK0JBQStCO2dCQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekMsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQzNFLEtBQUssT0FBTztnQkFDUixPQUFPLEtBQUssQ0FBQztZQUNqQjtnQkFDSSxPQUFPLElBQUksQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLDJCQUEyQjtRQUMvQixZQUFZLENBQUMsT0FBTyxDQUNoQixnQ0FBZ0MsRUFDaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQ0FBZ0M7UUFDcEMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzsrR0E3RlEsd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FGckIsTUFBTTs7NEZBRVQsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExJQlJBUllfVkVSU0lPTiB9IGZyb20gJy4uLy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IHsgQ0xpX05hbWVfQXJ0IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENsaUZvcmVncm91bmRDb2xvciwgSUNsaUV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgeyBnZXRHcmVldGluZ0Jhc2VkT25UaW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBkaXNwbGF5cyB0aGUgd2VsY29tZSBtZXNzYWdlIHRvIHRoZSB1c2VyLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlXZWxjb21lTWVzc2FnZVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIHRoZSB3ZWxjb21lIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAgICogQHBhcmFtIGNvbnRleHRcbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgcHVibGljIGRpc3BsYXlXZWxjb21lTWVzc2FnZShjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCB3ZWxjb21lQ29uZmlnID0gY29udGV4dC5vcHRpb25zPy53ZWxjb21lTWVzc2FnZTtcblxuICAgICAgICAvLyBIYW5kbGUgdGhlICdzaG93JyBwcm9wZXJ0eVxuICAgICAgICBpZiAod2VsY29tZUNvbmZpZz8uc2hvdykge1xuICAgICAgICAgICAgY29uc3Qgc2hvd09wdGlvbiA9IHdlbGNvbWVDb25maWcuc2hvdztcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSB3ZWxjb21lIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheVdlbGNvbWVNZXNzYWdlKHNob3dPcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zaG93UHJvbXB0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdlbGNvbWVDb25maWc/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNvbnRleHQudGVybWluYWwud3JpdGVsbih3ZWxjb21lQ29uZmlnPy5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdlbGNvbWVNZXNzYWdlID0gW1xuICAgICAgICAgICAgICAgIGBXZWxjb21lIHRvIFdlYiBDTEkgW1ZlcnNpb24gJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcihMSUJSQVJZX1ZFUlNJT04sIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9XWAsXG4gICAgICAgICAgICAgICAgJyhjKSAyMDI0IFFvZGFsaXMgU29sdXRpb25zLiBBbGwgcmlnaHRzIHJlc2VydmVkLicsXG4gICAgICAgICAgICAgICAgQ0xpX05hbWVfQXJ0LFxuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKFxuICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRhdGlvbjogJyxcbiAgICAgICAgICAgICAgICAgICAgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuLFxuICAgICAgICAgICAgICAgICkgKyAnaHR0cHM6Ly9jbGktZG9jcy5xb2RhbGlzLmNvbS8nLFxuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFwiVHlwZSAnaGVscCcgdG8gZ2V0IHN0YXJ0ZWQuXCIsXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3ZWxjb21lTWVzc2FnZS5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQudGVybWluYWwud3JpdGUobGluZSArICdcXHJcXG4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWNvcmRXZWxjb21lTWVzc2FnZURpc3BsYXkoKTtcbiAgICAgICAgY29udGV4dC5zaG93UHJvbXB0KCk7XG4gICAgICAgIGNvbnRleHQudGV4dEFuaW1hdG9yPy5zaG93VGV4dChnZXRHcmVldGluZ0Jhc2VkT25UaW1lKCksIHtcbiAgICAgICAgICAgIHNwZWVkOiA2MCxcbiAgICAgICAgICAgIHJlbW92ZUFmdGVyVHlwaW5nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3ZWxjb21lIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZCBiYXNlZCBvbiB0aGUgc2hvdyBvcHRpb24uXG4gICAgICogQHBhcmFtIHNob3dPcHRpb24gLSBUaGUgc2hvdyBvcHRpb24gZnJvbSB0aGUgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hvdWxkRGlzcGxheVdlbGNvbWVNZXNzYWdlKFxuICAgICAgICBzaG93T3B0aW9uOiAnYWx3YXlzJyB8ICdvbmNlJyB8ICdkYWlseScgfCAnbmV2ZXInLFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0RGlzcGxheWVkID0gdGhpcy5nZXRMYXN0V2VsY29tZU1lc3NhZ2VEaXNwbGF5VGltZSgpO1xuXG4gICAgICAgIHN3aXRjaCAoc2hvd09wdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgJ29uY2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAhbGFzdERpc3BsYXllZDsgLy8gU2hvdyBvbmx5IGlmIGl0IGhhc24ndCBiZWVuIHNob3duIGJlZm9yZVxuICAgICAgICAgICAgY2FzZSAnZGFpbHknOlxuICAgICAgICAgICAgICAgIGlmICghbGFzdERpc3BsYXllZCkgcmV0dXJuIHRydWU7IC8vIE5vIHByZXZpb3VzIGRpc3BsYXksIHNob3cgaXRcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3REYXRlID0gbmV3IERhdGUobGFzdERpc3BsYXllZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdy50b0RhdGVTdHJpbmcoKSAhPT0gbGFzdERhdGUudG9EYXRlU3RyaW5nKCk7IC8vIENvbXBhcmUgZGF0ZXNcbiAgICAgICAgICAgIGNhc2UgJ25ldmVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjb3JkcyB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBsYXN0IGRpc3BsYXkgdGltZSBmb3IgdGhlIHdlbGNvbWUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlY29yZFdlbGNvbWVNZXNzYWdlRGlzcGxheSgpOiB2b2lkIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAnY2xpV2VsY29tZU1lc3NhZ2VMYXN0RGlzcGxheWVkJyxcbiAgICAgICAgICAgIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgZGlzcGxheSB0aW1lIG9mIHRoZSB3ZWxjb21lIG1lc3NhZ2UuXG4gICAgICogQHJldHVybnMgVGhlIElTTyBzdHJpbmcgb2YgdGhlIGxhc3QgZGlzcGxheSB0aW1lIG9yIG51bGwgaWYgbm90IHJlY29yZGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGFzdFdlbGNvbWVNZXNzYWdlRGlzcGxheVRpbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpV2VsY29tZU1lc3NhZ2VMYXN0RGlzcGxheWVkJyk7XG4gICAgfVxufVxuIl19