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