UNPKG

express-hale

Version:

šŸš€ Interactive Express.js scaffold CLI with comprehensive error handling, TypeScript/JavaScript, database integrations, Git Flow, and development tools

124 lines • 7.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.StartupBanner = void 0; const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const crypto_1 = __importDefault(require("crypto")); class StartupBanner { constructor() { this._integrity = this.calculateIntegrity(); this.performSecurityCheck(); } static getInstance() { if (!StartupBanner._instance) { StartupBanner._instance = new StartupBanner(); } return StartupBanner._instance; } calculateIntegrity() { const source = this.constructor.toString(); return crypto_1.default .createHash('sha256') .update(source) .digest('hex') .substring(0, 16); } performSecurityCheck() { const args = process.argv.join(''); const mainFile = require.main?.filename || ''; const suspiciousPatterns = [/--inspect/, /--debug/, /debugger/, /devtools/]; if (suspiciousPatterns.some((pattern) => pattern.test(args) || pattern.test(mainFile))) { console.log(chalk_1.default.red('Security check failed')); process.exit(1); } if (this._integrity !== StartupBanner._checksum) { const warning = Buffer.from('SW50ZWdyaXR5IGNoZWNrIGZhaWxlZA==', 'base64').toString(); console.log(chalk_1.default.yellow(`Warning: ${warning}`)); } } generateHash(input) { return crypto_1.default .createHash('md5') .update(input + this._integrity) .digest('hex') .substring(0, 8); } async displayStartupBanner(config) { this.performSecurityCheck(); const spinner = (0, ora_1.default)('Initializing Express Hale...').start(); await new Promise((resolve) => setTimeout(resolve, 1000)); spinner.succeed(); console.clear(); const banner = this.createBanner(); const info = this.createInfoSection(config); const decorations = this.createDecorations(); console.log(banner); console.log(info); console.log(decorations); await this.animatedStartup(); } createBanner() { const banner = ` ${chalk_1.default.cyan(' ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—')} ${chalk_1.default.cyan(' ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā•šā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā•ā• ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā•ā•ā•')} ${chalk_1.default.blue(' ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā•šā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ')} ${chalk_1.default.blue(' ā–ˆā–ˆā•”ā•ā•ā• ā–ˆā–ˆā•”ā–ˆā–ˆā•— ā–ˆā–ˆā•”ā•ā•ā•ā• ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā• ā•šā•ā•ā•ā•ā–ˆā–ˆā•‘ā•šā•ā•ā•ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā• ')} ${chalk_1.default.magenta(' ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•”ā• ā–ˆā–ˆā•—ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—')} ${chalk_1.default.magenta(' ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā• ā•šā•ā•ā•šā•ā• ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā•ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā•ā•ā•ā•ā•ā•')} `; return banner; } createInfoSection(config) { const hash = this.generateHash(config.name + config.version); return ` ${chalk_1.default.bold.white(' :: Express Hale CLI ::')} ${chalk_1.default.dim(`(v${config.version})`)} ${chalk_1.default.white(' :: Powered by Node.js ::')} ${chalk_1.default.dim(`${process.version}`)} ${chalk_1.default.green(' :: Author ::')} ${chalk_1.default.dim(config.author || 'Gaowenhan')} ${chalk_1.default.yellow(' :: Environment ::')} ${chalk_1.default.dim(config.environment || 'development')} ${chalk_1.default.blue(' :: Build Hash ::')} ${chalk_1.default.dim(hash.substring(0, 8))} ${chalk_1.default.magenta(' :: License ::')} ${chalk_1.default.dim('MIT')} `; } createDecorations() { return ` ${chalk_1.default.cyan('ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”')} ${chalk_1.default.cyan('│')} ${chalk_1.default.bold.green('šŸš€ Modern Express.js Application Generator')} ${' '.repeat(36)} ${chalk_1.default.cyan('│')} ${chalk_1.default.cyan('│')} ${chalk_1.default.white('✨ TypeScript/JavaScript Support')} ${' '.repeat(45)} ${chalk_1.default.cyan('│')} ${chalk_1.default.cyan('│')} ${chalk_1.default.white('šŸ“¦ Multiple Database Integrations')} ${' '.repeat(43)} ${chalk_1.default.cyan('│')} ${chalk_1.default.cyan('│')} ${chalk_1.default.white('šŸ”§ Advanced Error Handling')} ${' '.repeat(49)} ${chalk_1.default.cyan('│')} ${chalk_1.default.cyan('│')} ${chalk_1.default.white('🐳 Docker & Git Flow Ready')} ${' '.repeat(48)} ${chalk_1.default.cyan('│')} ${chalk_1.default.cyan('ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜')} `; } async animatedStartup() { const steps = [ 'šŸ” Scanning system dependencies...', 'šŸ“ Loading project templates...', '⚔ Initializing code generators...', 'šŸ›”ļø Configuring security protocols...', 'šŸŽÆ Ready to create amazing projects!', ]; for (const step of steps) { const spinner = (0, ora_1.default)(step).start(); await new Promise((resolve) => setTimeout(resolve, 500)); spinner.succeed(); } console.log(chalk_1.default.green.bold('\nšŸŽ‰ Express Hale CLI is ready to use!\n')); } displayShutdownMessage() { console.log(` ${chalk_1.default.yellow('ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”')} ${chalk_1.default.yellow('│')} ${chalk_1.default.bold.white('Express Hale CLI Shutdown')} ${' '.repeat(10)} ${chalk_1.default.yellow('│')} ${chalk_1.default.yellow('│')} ${chalk_1.default.white('Thank you for using Express Hale!')} ${' '.repeat(4)} ${chalk_1.default.yellow('│')} ${chalk_1.default.yellow('│')} ${chalk_1.default.dim('Visit: github.com/GaoWenHan/Express-Hale')} ${chalk_1.default.yellow('│')} ${chalk_1.default.yellow('ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜')} `); } } exports.StartupBanner = StartupBanner; StartupBanner._checksum = '4f8ae2b9c1d0f3a7'; StartupBanner._marker = Buffer.from('RXhwcmVzcyBIYWxlIENMSQ==', 'base64').toString(); //# sourceMappingURL=startup-banner.js.map