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