create-mellowtel-extension
Version:
Create a new Mellowtel browser extension with one command
85 lines (71 loc) ⢠2.81 kB
JavaScript
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const inquirer = require('inquirer');
async function main() {
try {
// Get project name and template choice using inquirer
const answers = await inquirer.prompt([
{
type: 'input',
name: 'projectName',
message: 'What is your extension name?',
validate: input => input.trim().length > 0 || 'Project name is required'
},
{
type: 'list',
name: 'template',
message: 'Choose a template:',
choices: [
{ name: 'ā” Vanilla - Basic webpack-based extension', value: 'vanilla' },
{ name: 'š Plasmo - React-based extension with TypeScript', value: 'plasmo' },
{ name: 'āļø WXT - Vue.js-based extension with TypeScript', value: 'wxt' }
],
default: 'vanilla'
},
{
type: 'input',
name: 'configKey',
message: 'Enter your Mellowtel configuration key:',
validate: input => input.trim().length > 0 || 'Mellowtel configuration key is required'
}
]);
const { projectName, template, configKey } = answers;
const projectDir = path.join(process.cwd(), projectName);
// Create project directory
console.log(`\nCreating new Mellowtel extension in ${projectDir} using ${template} template...`);
fs.mkdirSync(projectDir, { recursive: true });
// Copy template files
const templateDir = path.join(__dirname, '..', 'templates', template);
fs.cpSync(templateDir, projectDir, { recursive: true });
// Create .env file with config key
const envContent = template === 'plasmo'
? `PLASMO_PUBLIC_MELLOWTEL="${configKey}"`
: template === 'wxt'
? `VITE_MELLOWTEL_CONFIG_KEY="${configKey}"`
: `MELLOWTEL_CONFIG_KEY="${configKey}"`;
fs.writeFileSync(path.join(projectDir, '.env'), envContent);
// Change to project directory
process.chdir(projectDir);
// Install dependencies
console.log('\nInstalling dependencies...');
execSync('npm install', { stdio: 'inherit' });
// Success message with next steps
console.log('\nš Successfully created Mellowtel extension!');
console.log('\nNext steps:');
console.log(`1. cd ${projectName}`);
if (template === 'vanilla') {
console.log('2. npm run watch # Start development mode');
} else if (template === 'plasmo') {
console.log('2. npm run dev # Start Plasmo development server');
} else if (template === 'wxt') {
console.log('2. npm run dev # Start WXT development server');
}
console.log('\nHappy coding! š');
} catch (error) {
console.error('Error:', error);
process.exit(1);
}
}
main();