UNPKG

meet-simen

Version:

Get to know Simen via `npx meet-simen`

95 lines (94 loc) 4.01 kB
#!/usr/bin/env node import { Command } from 'commander'; import ora from 'ora'; import chalk from 'chalk'; // Import utility functions import { displayWelcome, displayBio, displaySocialWithGitHub, displayAd, displayDebug, displayTerminalSizeWarning } from './utils/display.js'; import { loadLocalData, loadRemoteData, loadConfig, getPackageInfo } from './utils/data-loader.js'; import { fetchGitHubStats } from './utils/github.js'; // Main function async function main() { try { // Display terminal size warning displayTerminalSizeWarning(); // Get package info const pkg = getPackageInfo(); // Parse command line arguments const program = new Command(); program .version(pkg.version) .description(pkg.description) .option('-d, --debug', 'Output debug information') .option('-r, --remote', 'Load data from remote source') .parse(process.argv); const options = program.opts(); // Only show welcome message in debug mode if (options.debug) { displayWelcome(pkg.name, pkg.version, pkg.description); displayDebug(options); } // Load config const config = await loadConfig(); // Load data (from remote or local) let bio; let social; // Loading spinner for data const dataSpinner = ora('Loading awesome developer profile...').start(); if (options.remote) { try { bio = await loadRemoteData(config, 'bio.json'); social = await loadRemoteData(config, 'social.json'); dataSpinner.succeed('Remote data loaded!'); } catch (error) { dataSpinner.fail('Failed to load remote data'); console.error('Error loading remote data:', error); console.log('Falling back to local data...'); bio = await loadLocalData('bio.json'); social = await loadLocalData('social.json'); } } else { bio = await loadLocalData('bio.json'); social = await loadLocalData('social.json'); dataSpinner.succeed('Profile data loaded!'); } // Fetch GitHub stats const githubSpinner = ora('Stalking my GitHub profile...').start(); let githubStats = ''; try { githubStats = await fetchGitHubStats(config.github.username); githubSpinner.succeed('GitHub stats acquired!'); } catch (error) { githubSpinner.fail('Failed to fetch GitHub stats'); console.error('Error fetching GitHub stats:', error); } console.clear(); // Display header with a small ASCII art console.log(chalk.cyan(` _____ _ ______ __ __ _ / ___/ (_)____ ___ ___ ____ / ____/___ ____ / /____/ /_(_)____ \\__ \\ / // __ \`__ \\ / _ \\ / __ \\ / / / _ \\ / __ \\ / // __ // // __ \\ ___/ // // / / / / // __// / / / / /___ / __// /_/ // // /_/ // // /_/ / /____//_//_/ /_/ /_/ \\___//_/ /_/ \\____/ \\___/ \\____//_/ \\__,_//_// .___/ /_/ `)); // Display bio displayBio(bio); console.log('\n'); // Display social links with GitHub stats displaySocialWithGitHub(social, githubStats); console.log('\n'); // Display CTA displayAd(config.ad.message, config.ad.color); // Final message console.log(chalk.green.bold('\nThanks for checking out my CLI profile! If you made it this far, we should work together. 🤝\n')); console.log(chalk.dim('P.S. Frontend, backend, or DevOps — I deliver. Let\'s build something amazing! 🛠️\n')); } catch (error) { console.error('An error occurred:', error); } } // Run the main function main();