@exiloncms/cli 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create-exiloncms.js +2 -0
- package/bin/exiloncms.js +2 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/bin/exiloncms.js
ADDED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport prompts from 'prompts';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { execaCommand } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport degit from 'degit';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst packageJson = await fs.readJson(path.join(__dirname, '../package.json'));\n\n// ASCII Art Banner\nconst banner = `\n${chalk.cyan('╔═══════════════════════════════════════════════════════════╗')}\n${chalk.cyan('║')} ${chalk.bold.white('ExilonCMS CLI')} ${chalk.gray(`v${packageJson.version}`)} ${' '.repeat(36)} ${chalk.cyan('║')}\n${chalk.cyan('║')} ${chalk.white('Create modern ExilonCMS projects with ease')} ${' '.repeat(24)} ${chalk.cyan('║')}\n${chalk.cyan('╚═══════════════════════════════════════════════════════════╝')}\n`;\n\n// Database options\nconst databaseOptions = [\n { title: 'SQLite (Recommandé - Pas de configuration)', value: 'sqlite', description: 'Base de données fichier, aucune configuration requise' },\n { title: 'PostgreSQL', value: 'postgresql', description: 'Base de données serveur, performante et robuste' },\n { title: 'MySQL', value: 'mysql', description: 'Base de données serveur, populaire et répandue' },\n];\n\n// Available themes (will be fetched from GitHub or API in the future)\nconst themeOptions = [\n { title: 'Default Theme', value: 'default', description: 'Thème par défaut d\\'ExilonCMS' },\n { title: 'Aucun thème (minimal)', value: 'none', description: 'Installation sans thème personnalisé' },\n];\n\n// Available plugins\nconst pluginOptions = [\n { title: 'Shop Plugin - Boutique en ligne', value: 'shop', description: 'Système complet de boutique avec panier, paiements...' },\n { title: 'Discord Plugin - Intégration Discord', value: 'discord', description: 'Authentification et notifications Discord' },\n { title: 'Analytics Plugin - Statistiques', value: 'analytics', description: 'Suivi des statistiques et analytics' },\n];\n\ninterface ProjectConfig {\n projectName: string;\n database: string;\n theme: string;\n plugins: string[];\n siteName: string;\n adminName: string;\n adminEmail: string;\n adminPassword: string;\n installDeps: boolean;\n runMigrations: boolean;\n}\n\nfunction validateProjectName(name: string): boolean {\n return /^[a-zA-Z0-9_-]+$/.test(name);\n}\n\nasync function promptForConfig(args: Partial<ProjectConfig> = {}): Promise<ProjectConfig> {\n console.log(banner);\n\n const config: ProjectConfig = {\n projectName: '',\n database: 'sqlite',\n theme: 'default',\n plugins: [],\n siteName: 'Mon Site ExilonCMS',\n adminName: 'Admin',\n adminEmail: 'admin@example.com',\n adminPassword: 'password',\n installDeps: true,\n runMigrations: true,\n };\n\n // Project Name\n if (!args.projectName) {\n const nameResponse = await prompts({\n type: 'text',\n name: 'projectName',\n message: 'Nom du projet:',\n initial: 'mon-site-exiloncms',\n validate: (value: string) => {\n if (!value) return 'Le nom du projet est requis';\n if (!validateProjectName(value)) return 'Le nom ne peut contenir que des lettres, chiffres, tirets et underscores';\n return true;\n },\n });\n config.projectName = nameResponse.projectName;\n } else {\n config.projectName = args.projectName;\n }\n\n // Database Selection\n if (!args.database) {\n const dbResponse = await prompts({\n type: 'select',\n name: 'database',\n message: 'Choisissez la base de données:',\n choices: databaseOptions,\n initial: 0,\n });\n config.database = dbResponse.database;\n } else {\n config.database = args.database;\n }\n\n // Theme Selection\n if (!args.theme) {\n const themeResponse = await prompts({\n type: 'select',\n name: 'theme',\n message: 'Choisissez un thème:',\n choices: themeOptions,\n initial: 0,\n });\n config.theme = themeResponse.theme;\n } else {\n config.theme = args.theme;\n }\n\n // Plugin Selection\n if (!args.plugins || args.plugins.length === 0) {\n const pluginResponse = await prompts({\n type: 'multiselect',\n name: 'plugins',\n message: 'Choisissez les plugins à installer (Espace pour sélectionner, Entrée pour valider):',\n choices: pluginOptions,\n instructions: false,\n });\n config.plugins = pluginResponse.plugins || [];\n } else {\n config.plugins = args.plugins;\n }\n\n // Site Configuration\n if (!args.siteName || !args.adminName || !args.adminEmail || !args.adminPassword) {\n console.log(chalk.bold('\\n📝 Configuration du site:\\n'));\n\n const siteResponse = await prompts([\n {\n type: 'text',\n name: 'siteName',\n message: 'Nom du site:',\n initial: config.siteName,\n },\n {\n type: 'text',\n name: 'adminName',\n message: 'Nom de l\\'administrateur:',\n initial: config.adminName,\n },\n {\n type: 'text',\n name: 'adminEmail',\n message: 'Email de l\\'administrateur:',\n initial: config.adminEmail,\n validate: (value: string) => {\n if (!value) return 'L\\'email est requis';\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return 'Email invalide';\n return true;\n },\n },\n {\n type: 'password',\n name: 'adminPassword',\n message: 'Mot de passe administrateur:',\n validate: (value: string) => {\n if (!value || value.length < 6) return 'Le mot de passe doit contenir au moins 6 caractères';\n return true;\n },\n },\n ]);\n\n config.siteName = siteResponse.siteName || config.siteName;\n config.adminName = siteResponse.adminName || config.adminName;\n config.adminEmail = siteResponse.adminEmail || config.adminEmail;\n config.adminPassword = siteResponse.adminPassword || config.adminPassword;\n } else {\n config.siteName = args.siteName;\n config.adminName = args.adminName;\n config.adminEmail = args.adminEmail;\n config.adminPassword = args.adminPassword;\n }\n\n // Post-install options\n if (args.installDeps === undefined || args.runMigrations === undefined) {\n console.log(chalk.bold('\\n⚙️ Options d\\'installation:\\n'));\n\n const installResponse = await prompts([\n {\n type: 'confirm',\n name: 'installDeps',\n message: 'Installer les dépendances (composer & npm)?',\n initial: true,\n },\n {\n type: 'confirm',\n name: 'runMigrations',\n message: 'Exécuter les migrations et seeder la base de données?',\n initial: true,\n },\n ]);\n\n config.installDeps = installResponse.installDeps !== undefined ? installResponse.installDeps : true;\n config.runMigrations = installResponse.runMigrations !== undefined ? installResponse.runMigrations : true;\n } else {\n config.installDeps = args.installDeps;\n config.runMigrations = args.runMigrations;\n }\n\n return config;\n}\n\nasync function downloadProject(targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Téléchargement d\\'ExilonCMS...');\n\n const emitter = degit('Exilon-Studios/ExilonCMS', {\n cache: false,\n force: true,\n verbose: false,\n });\n\n try {\n await emitter.clone(targetDir);\n spinner.succeed('ExilonCMS téléchargé avec succès');\n } catch (error) {\n spinner.fail('Erreur lors du téléchargement');\n throw error;\n }\n}\n\nasync function configureProject(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Configuration du projet...');\n\n try {\n // Configure .env file\n const envPath = path.join(targetDir, '.env');\n const envExamplePath = path.join(targetDir, '.env.example');\n\n if (await fs.pathExists(envExamplePath)) {\n let envContent = await fs.readFile(envExamplePath, 'utf-8');\n\n // Set database configuration\n if (config.database === 'sqlite') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=sqlite');\n envContent = envContent.replace(/#DB_DATABASE=.*/, 'DB_DATABASE=' + path.join(targetDir, 'database', 'database.sqlite'));\n } else if (config.database === 'postgresql') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=pgsql');\n envContent = envContent.replace(/DB_DATABASE=.*/, 'DB_DATABASE=exiloncms');\n envContent = envContent.replace(/DB_USERNAME=.*/, 'DB_USERNAME=postgres');\n } else if (config.database === 'mysql') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=mysql');\n envContent = envContent.replace(/DB_DATABASE=.*/, 'DB_DATABASE=exiloncms');\n envContent = envContent.replace(/DB_USERNAME=.*/, 'DB_USERNAME=root');\n }\n\n // Set app name\n envContent = envContent.replace(/APP_NAME=.*/, `APP_NAME=\"${config.siteName}\"`);\n\n await fs.writeFile(envPath, envContent);\n }\n\n // Create SQLite database if selected\n if (config.database === 'sqlite') {\n const dbDir = path.join(targetDir, 'database');\n await fs.ensureDir(dbDir);\n const dbPath = path.join(dbDir, 'database.sqlite');\n if (!(await fs.pathExists(dbPath))) {\n await fs.writeFile(dbPath, '');\n }\n }\n\n // Generate APP_KEY\n spinner.text = 'Génération de la clé d\\'application...';\n await execaCommand('php artisan key:generate --force', { cwd: targetDir, stdio: 'inherit' });\n\n spinner.succeed('Projet configuré avec succès');\n } catch (error) {\n spinner.fail('Erreur lors de la configuration');\n throw error;\n }\n}\n\nasync function installDependencies(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n if (!config.installDeps) {\n spinner.info('Installation des dépendances skipée');\n return;\n }\n\n // Composer\n spinner.start('Installation des dépendances PHP (Composer)...');\n try {\n await execaCommand('composer install --no-interaction --quiet', { cwd: targetDir });\n spinner.succeed('Dépendances PHP installées');\n } catch (error) {\n spinner.fail('Erreur lors de l\\'installation Composer');\n throw error;\n }\n\n // NPM\n spinner.start('Installation des dépendances Node.js...');\n try {\n await execaCommand('npm install --silent', { cwd: targetDir });\n spinner.succeed('Dépendances Node.js installées');\n } catch (error) {\n spinner.fail('Erreur lors de l\\'installation NPM');\n throw error;\n }\n\n // Build assets\n spinner.start('Construction des assets...');\n try {\n await execaCommand('npm run build', { cwd: targetDir });\n spinner.succeed('Assets construits');\n } catch (error) {\n spinner.warn('Erreur lors du build des assets (non-critique)');\n }\n}\n\nasync function runMigrationsAndSeed(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n if (!config.runMigrations) {\n spinner.info('Migrations skipées');\n return;\n }\n\n spinner.start('Exécution des migrations et seeder...');\n try {\n // For SQLite, we use migrate:fresh which is safe for fresh install\n const command = config.database === 'sqlite'\n ? 'php artisan migrate:fresh --seed --force'\n : 'php artisan migrate --seed --force';\n\n await execaCommand(command, {\n cwd: targetDir,\n stdio: 'inherit',\n });\n\n spinner.succeed('Base de données initialisée');\n } catch (error) {\n spinner.fail('Erreur lors des migrations');\n throw error;\n }\n}\n\nasync function createAdminUser(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Création de l\\'utilisateur admin...');\n try {\n await execaCommand(\n `php artisan user:create --admin --name=\"${config.adminName}\" --email=\"${config.adminEmail}\" --password=\"${config.adminPassword}\"`,\n { cwd: targetDir, stdio: 'inherit' }\n );\n spinner.succeed('Utilisateur admin créé');\n } catch (error) {\n spinner.warn('Erreur lors de la création de l\\'admin (peut-être déjà créé via seeder)');\n }\n}\n\nfunction printSuccessMessage(config: ProjectConfig, targetDir: string): void {\n console.log(chalk.bold('\\n✨ Installation terminée avec succès!\\n'));\n\n console.log(chalk.cyan(' Projet créé dans: ') + chalk.white(targetDir));\n console.log(chalk.cyan(' Base de données: ') + chalk.white(config.database));\n console.log(chalk.cyan(' Thème: ') + chalk.white(config.theme));\n\n if (config.plugins.length > 0) {\n console.log(chalk.cyan(' Plugins installés: ') + chalk.white(config.plugins.join(', ')));\n }\n\n console.log(chalk.bold('\\n🚀 Prochaines étapes:\\n'));\n\n console.log(` ${chalk.cyan('1.')} Aller dans le dossier du projet:`);\n console.log(` ${chalk.gray(`cd ${config.projectName}`)}\\n`);\n\n if (!config.installDeps) {\n console.log(` ${chalk.cyan('2.')} Installer les dépendances:`);\n console.log(` ${chalk.gray('composer install')}`);\n console.log(` ${chalk.gray('npm install')}`);\n console.log(` ${chalk.gray('npm run build')}\\n`);\n }\n\n if (!config.runMigrations) {\n console.log(` ${chalk.cyan('3.')} Configurer la base de données et lancer les migrations:`);\n if (config.database !== 'sqlite') {\n console.log(` ${chalk.yellow('⚠️ Configurez votre base de données dans .env d\\'abord')}`);\n }\n console.log(` ${chalk.gray('php artisan migrate:fresh --seed')}\\n`);\n }\n\n console.log(` ${chalk.cyan('4.')} Démarrer le serveur de développement:`);\n console.log(` ${chalk.gray('php artisan serve')}\\n`);\n\n if (config.database === 'sqlite') {\n console.log(` ${chalk.green('✓')} SQLite utilisé - aucune configuration de base de données nécessaire!\\n`);\n } else {\n console.log(` ${chalk.yellow('⚠️ ')} Configurez votre base de données ${config.database} dans ${chalk.gray('.env')}\\n`);\n }\n\n console.log(chalk.bold('📧 Identifiants admin:\\n'));\n console.log(` Email: ${chalk.cyan(config.adminEmail)}`);\n console.log(` Password: ${chalk.cyan(config.adminPassword)}\\n`);\n\n console.log(chalk.gray(' ' + '─'.repeat(60) + '\\n'));\n\n console.log(` ${chalk.cyan('Documentation:')} https://github.com/Exilon-Studios/ExilonCMS/wiki\\n`);\n}\n\nasync function createCommand(projectName: string, options: any): Promise<void> {\n try {\n const config = await promptForConfig({\n projectName,\n database: options.database,\n theme: options.theme,\n plugins: options.plugins ? options.plugins.split(',') : [],\n siteName: options.siteName,\n adminName: options.adminName,\n adminEmail: options.adminEmail,\n adminPassword: options.adminPassword,\n installDeps: options.installDeps,\n runMigrations: options.runMigrations,\n });\n\n const targetDir = path.resolve(process.cwd(), config.projectName);\n\n // Check if directory exists\n if (await fs.pathExists(targetDir)) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Le dossier ${config.projectName} existe déjà. Écraser?`,\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.yellow('\\nInstallation annulée.'));\n process.exit(0);\n }\n\n await fs.remove(targetDir);\n }\n\n const spinner = ora();\n\n // Download project\n await downloadProject(targetDir, spinner);\n\n // Configure project\n await configureProject(config, targetDir, spinner);\n\n // Install dependencies\n await installDependencies(config, targetDir, spinner);\n\n // Run migrations\n await runMigrationsAndSeed(config, targetDir, spinner);\n\n // Create admin user (if not using seeder)\n if (!config.runMigrations) {\n await createAdminUser(config, targetDir, spinner);\n }\n\n // Print success message\n printSuccessMessage(config, targetDir);\n\n } catch (error: any) {\n if (error.message === 'user cancelled') {\n console.log(chalk.yellow('\\nInstallation annulée.'));\n process.exit(0);\n }\n\n console.error(chalk.red('\\n✖ Erreur:'), error.message);\n process.exit(1);\n }\n}\n\n// CLI Program\nconst program = new Command();\n\nprogram\n .name('exiloncms')\n .description('Create a new ExilonCMS project')\n .version(packageJson.version);\n\nprogram\n .command('create [project-name]')\n .description('Create a new ExilonCMS project')\n .option('-d, --database <type>', 'Database type (sqlite, postgresql, mysql)', 'sqlite')\n .option('-t, --theme <name>', 'Theme name', 'default')\n .option('-p, --plugins <list>', 'Comma-separated list of plugins')\n .option('--site-name <name>', 'Site name')\n .option('--admin-name <name>', 'Admin name')\n .option('--admin-email <email>', 'Admin email')\n .option('--admin-password <password>', 'Admin password')\n .option('--no-install-deps', 'Skip installing dependencies')\n .option('--no-run-migrations', 'Skip running migrations')\n .action(createCommand);\n\nprogram\n .command('new [project-name]')\n .description('Alias for create')\n .option('-d, --database <type>', 'Database type (sqlite, postgresql, mysql)', 'sqlite')\n .option('-t, --theme <name>', 'Theme name', 'default')\n .option('-p, --plugins <list>', 'Comma-separated list of plugins')\n .option('--site-name <name>', 'Site name')\n .option('--admin-name <name>', 'Admin name')\n .option('--admin-email <email>', 'Admin email')\n .option('--admin-password <password>', 'Admin password')\n .option('--no-install-deps', 'Skip installing dependencies')\n .option('--no-run-migrations', 'Skip running migrations')\n .action(createCommand);\n\nprogram.parse();\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport prompts from 'prompts';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { execaCommand } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport degit from 'degit';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst packageJson = await fs.readJson(path.join(__dirname, '../package.json'));\n\n// ASCII Art Banner\nconst banner = `\n${chalk.cyan('╔═══════════════════════════════════════════════════════════╗')}\n${chalk.cyan('║')} ${chalk.bold.white('ExilonCMS CLI')} ${chalk.gray(`v${packageJson.version}`)} ${' '.repeat(36)} ${chalk.cyan('║')}\n${chalk.cyan('║')} ${chalk.white('Create modern ExilonCMS projects with ease')} ${' '.repeat(24)} ${chalk.cyan('║')}\n${chalk.cyan('╚═══════════════════════════════════════════════════════════╝')}\n`;\n\n// Database options\nconst databaseOptions = [\n { title: 'SQLite (Recommandé - Pas de configuration)', value: 'sqlite', description: 'Base de données fichier, aucune configuration requise' },\n { title: 'PostgreSQL', value: 'postgresql', description: 'Base de données serveur, performante et robuste' },\n { title: 'MySQL', value: 'mysql', description: 'Base de données serveur, populaire et répandue' },\n];\n\n// Available themes (will be fetched from GitHub or API in the future)\nconst themeOptions = [\n { title: 'Default Theme', value: 'default', description: 'Thème par défaut d\\'ExilonCMS' },\n { title: 'Aucun thème (minimal)', value: 'none', description: 'Installation sans thème personnalisé' },\n];\n\n// Available plugins\nconst pluginOptions = [\n { title: 'Shop Plugin - Boutique en ligne', value: 'shop', description: 'Système complet de boutique avec panier, paiements...' },\n { title: 'Discord Plugin - Intégration Discord', value: 'discord', description: 'Authentification et notifications Discord' },\n { title: 'Analytics Plugin - Statistiques', value: 'analytics', description: 'Suivi des statistiques et analytics' },\n];\n\ninterface ProjectConfig {\n projectName: string;\n database: string;\n theme: string;\n plugins: string[];\n siteName: string;\n adminName: string;\n adminEmail: string;\n adminPassword: string;\n installDeps: boolean;\n runMigrations: boolean;\n}\n\nfunction validateProjectName(name: string): boolean {\n return /^[a-zA-Z0-9_-]+$/.test(name);\n}\n\nasync function promptForConfig(args: Partial<ProjectConfig> = {}): Promise<ProjectConfig> {\n console.log(banner);\n\n const config: ProjectConfig = {\n projectName: '',\n database: 'sqlite',\n theme: 'default',\n plugins: [],\n siteName: 'Mon Site ExilonCMS',\n adminName: 'Admin',\n adminEmail: 'admin@example.com',\n adminPassword: 'password',\n installDeps: true,\n runMigrations: true,\n };\n\n // Project Name\n if (!args.projectName) {\n const nameResponse = await prompts({\n type: 'text',\n name: 'projectName',\n message: 'Nom du projet:',\n initial: 'mon-site-exiloncms',\n validate: (value: string) => {\n if (!value) return 'Le nom du projet est requis';\n if (!validateProjectName(value)) return 'Le nom ne peut contenir que des lettres, chiffres, tirets et underscores';\n return true;\n },\n });\n config.projectName = nameResponse.projectName;\n } else {\n config.projectName = args.projectName;\n }\n\n // Database Selection\n if (!args.database) {\n const dbResponse = await prompts({\n type: 'select',\n name: 'database',\n message: 'Choisissez la base de données:',\n choices: databaseOptions,\n initial: 0,\n });\n config.database = dbResponse.database;\n } else {\n config.database = args.database;\n }\n\n // Theme Selection\n if (!args.theme) {\n const themeResponse = await prompts({\n type: 'select',\n name: 'theme',\n message: 'Choisissez un thème:',\n choices: themeOptions,\n initial: 0,\n });\n config.theme = themeResponse.theme;\n } else {\n config.theme = args.theme;\n }\n\n // Plugin Selection\n if (!args.plugins || args.plugins.length === 0) {\n const pluginResponse = await prompts({\n type: 'multiselect',\n name: 'plugins',\n message: 'Choisissez les plugins à installer (Espace pour sélectionner, Entrée pour valider):',\n choices: pluginOptions,\n instructions: false,\n });\n config.plugins = pluginResponse.plugins || [];\n } else {\n config.plugins = args.plugins;\n }\n\n // Site Configuration\n if (!args.siteName || !args.adminName || !args.adminEmail || !args.adminPassword) {\n console.log(chalk.bold('\\n📝 Configuration du site:\\n'));\n\n const siteResponse = await prompts([\n {\n type: 'text',\n name: 'siteName',\n message: 'Nom du site:',\n initial: config.siteName,\n },\n {\n type: 'text',\n name: 'adminName',\n message: 'Nom de l\\'administrateur:',\n initial: config.adminName,\n },\n {\n type: 'text',\n name: 'adminEmail',\n message: 'Email de l\\'administrateur:',\n initial: config.adminEmail,\n validate: (value: string) => {\n if (!value) return 'L\\'email est requis';\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return 'Email invalide';\n return true;\n },\n },\n {\n type: 'password',\n name: 'adminPassword',\n message: 'Mot de passe administrateur:',\n validate: (value: string) => {\n if (!value || value.length < 6) return 'Le mot de passe doit contenir au moins 6 caractères';\n return true;\n },\n },\n ]);\n\n config.siteName = siteResponse.siteName || config.siteName;\n config.adminName = siteResponse.adminName || config.adminName;\n config.adminEmail = siteResponse.adminEmail || config.adminEmail;\n config.adminPassword = siteResponse.adminPassword || config.adminPassword;\n } else {\n config.siteName = args.siteName;\n config.adminName = args.adminName;\n config.adminEmail = args.adminEmail;\n config.adminPassword = args.adminPassword;\n }\n\n // Post-install options\n if (args.installDeps === undefined || args.runMigrations === undefined) {\n console.log(chalk.bold('\\n⚙️ Options d\\'installation:\\n'));\n\n const installResponse = await prompts([\n {\n type: 'confirm',\n name: 'installDeps',\n message: 'Installer les dépendances (composer & npm)?',\n initial: true,\n },\n {\n type: 'confirm',\n name: 'runMigrations',\n message: 'Exécuter les migrations et seeder la base de données?',\n initial: true,\n },\n ]);\n\n config.installDeps = installResponse.installDeps !== undefined ? installResponse.installDeps : true;\n config.runMigrations = installResponse.runMigrations !== undefined ? installResponse.runMigrations : true;\n } else {\n config.installDeps = args.installDeps;\n config.runMigrations = args.runMigrations;\n }\n\n return config;\n}\n\nasync function downloadProject(targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Téléchargement d\\'ExilonCMS...');\n\n const emitter = degit('Exilon-Studios/ExilonCMS', {\n cache: false,\n force: true,\n verbose: false,\n });\n\n try {\n await emitter.clone(targetDir);\n spinner.succeed('ExilonCMS téléchargé avec succès');\n } catch (error) {\n spinner.fail('Erreur lors du téléchargement');\n throw error;\n }\n}\n\nasync function configureProject(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Configuration du projet...');\n\n try {\n // Configure .env file\n const envPath = path.join(targetDir, '.env');\n const envExamplePath = path.join(targetDir, '.env.example');\n\n if (await fs.pathExists(envExamplePath)) {\n let envContent = await fs.readFile(envExamplePath, 'utf-8');\n\n // Set database configuration\n if (config.database === 'sqlite') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=sqlite');\n envContent = envContent.replace(/#DB_DATABASE=.*/, 'DB_DATABASE=' + path.join(targetDir, 'database', 'database.sqlite'));\n } else if (config.database === 'postgresql') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=pgsql');\n envContent = envContent.replace(/DB_DATABASE=.*/, 'DB_DATABASE=exiloncms');\n envContent = envContent.replace(/DB_USERNAME=.*/, 'DB_USERNAME=postgres');\n } else if (config.database === 'mysql') {\n envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=mysql');\n envContent = envContent.replace(/DB_DATABASE=.*/, 'DB_DATABASE=exiloncms');\n envContent = envContent.replace(/DB_USERNAME=.*/, 'DB_USERNAME=root');\n }\n\n // Set app name\n envContent = envContent.replace(/APP_NAME=.*/, `APP_NAME=\"${config.siteName}\"`);\n\n await fs.writeFile(envPath, envContent);\n }\n\n // Create SQLite database if selected\n if (config.database === 'sqlite') {\n const dbDir = path.join(targetDir, 'database');\n await fs.ensureDir(dbDir);\n const dbPath = path.join(dbDir, 'database.sqlite');\n if (!(await fs.pathExists(dbPath))) {\n await fs.writeFile(dbPath, '');\n }\n }\n\n // Generate APP_KEY\n spinner.text = 'Génération de la clé d\\'application...';\n await execaCommand('php artisan key:generate --force', { cwd: targetDir, stdio: 'inherit' });\n\n spinner.succeed('Projet configuré avec succès');\n } catch (error) {\n spinner.fail('Erreur lors de la configuration');\n throw error;\n }\n}\n\nasync function installDependencies(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n if (!config.installDeps) {\n spinner.info('Installation des dépendances skipée');\n return;\n }\n\n // Composer\n spinner.start('Installation des dépendances PHP (Composer)...');\n try {\n await execaCommand('composer install --no-interaction --quiet', { cwd: targetDir });\n spinner.succeed('Dépendances PHP installées');\n } catch (error) {\n spinner.fail('Erreur lors de l\\'installation Composer');\n throw error;\n }\n\n // NPM\n spinner.start('Installation des dépendances Node.js...');\n try {\n await execaCommand('npm install --silent', { cwd: targetDir });\n spinner.succeed('Dépendances Node.js installées');\n } catch (error) {\n spinner.fail('Erreur lors de l\\'installation NPM');\n throw error;\n }\n\n // Build assets\n spinner.start('Construction des assets...');\n try {\n await execaCommand('npm run build', { cwd: targetDir });\n spinner.succeed('Assets construits');\n } catch (error) {\n spinner.warn('Erreur lors du build des assets (non-critique)');\n }\n}\n\nasync function runMigrationsAndSeed(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n if (!config.runMigrations) {\n spinner.info('Migrations skipées');\n return;\n }\n\n spinner.start('Exécution des migrations et seeder...');\n try {\n // For SQLite, we use migrate:fresh which is safe for fresh install\n const command = config.database === 'sqlite'\n ? 'php artisan migrate:fresh --seed --force'\n : 'php artisan migrate --seed --force';\n\n await execaCommand(command, {\n cwd: targetDir,\n stdio: 'inherit',\n });\n\n spinner.succeed('Base de données initialisée');\n } catch (error) {\n spinner.fail('Erreur lors des migrations');\n throw error;\n }\n}\n\nasync function createAdminUser(config: ProjectConfig, targetDir: string, spinner: ReturnType<typeof ora>): Promise<void> {\n spinner.start('Création de l\\'utilisateur admin...');\n try {\n await execaCommand(\n `php artisan user:create --admin --name=\"${config.adminName}\" --email=\"${config.adminEmail}\" --password=\"${config.adminPassword}\"`,\n { cwd: targetDir, stdio: 'inherit' }\n );\n spinner.succeed('Utilisateur admin créé');\n } catch (error) {\n spinner.warn('Erreur lors de la création de l\\'admin (peut-être déjà créé via seeder)');\n }\n}\n\nfunction printSuccessMessage(config: ProjectConfig, targetDir: string): void {\n console.log(chalk.bold('\\n✨ Installation terminée avec succès!\\n'));\n\n console.log(chalk.cyan(' Projet créé dans: ') + chalk.white(targetDir));\n console.log(chalk.cyan(' Base de données: ') + chalk.white(config.database));\n console.log(chalk.cyan(' Thème: ') + chalk.white(config.theme));\n\n if (config.plugins.length > 0) {\n console.log(chalk.cyan(' Plugins installés: ') + chalk.white(config.plugins.join(', ')));\n }\n\n console.log(chalk.bold('\\n🚀 Prochaines étapes:\\n'));\n\n console.log(` ${chalk.cyan('1.')} Aller dans le dossier du projet:`);\n console.log(` ${chalk.gray(`cd ${config.projectName}`)}\\n`);\n\n if (!config.installDeps) {\n console.log(` ${chalk.cyan('2.')} Installer les dépendances:`);\n console.log(` ${chalk.gray('composer install')}`);\n console.log(` ${chalk.gray('npm install')}`);\n console.log(` ${chalk.gray('npm run build')}\\n`);\n }\n\n if (!config.runMigrations) {\n console.log(` ${chalk.cyan('3.')} Configurer la base de données et lancer les migrations:`);\n if (config.database !== 'sqlite') {\n console.log(` ${chalk.yellow('⚠️ Configurez votre base de données dans .env d\\'abord')}`);\n }\n console.log(` ${chalk.gray('php artisan migrate:fresh --seed')}\\n`);\n }\n\n console.log(` ${chalk.cyan('4.')} Démarrer le serveur de développement:`);\n console.log(` ${chalk.gray('php artisan serve')}\\n`);\n\n if (config.database === 'sqlite') {\n console.log(` ${chalk.green('✓')} SQLite utilisé - aucune configuration de base de données nécessaire!\\n`);\n } else {\n console.log(` ${chalk.yellow('⚠️ ')} Configurez votre base de données ${config.database} dans ${chalk.gray('.env')}\\n`);\n }\n\n console.log(chalk.bold('📧 Identifiants admin:\\n'));\n console.log(` Email: ${chalk.cyan(config.adminEmail)}`);\n console.log(` Password: ${chalk.cyan(config.adminPassword)}\\n`);\n\n console.log(chalk.gray(' ' + '─'.repeat(60) + '\\n'));\n\n console.log(` ${chalk.cyan('Documentation:')} https://github.com/Exilon-Studios/ExilonCMS/wiki\\n`);\n}\n\nasync function createCommand(projectName: string, options: any): Promise<void> {\n try {\n const config = await promptForConfig({\n projectName,\n database: options.database,\n theme: options.theme,\n plugins: options.plugins ? options.plugins.split(',') : [],\n siteName: options.siteName,\n adminName: options.adminName,\n adminEmail: options.adminEmail,\n adminPassword: options.adminPassword,\n installDeps: options.installDeps,\n runMigrations: options.runMigrations,\n });\n\n const targetDir = path.resolve(process.cwd(), config.projectName);\n\n // Check if directory exists\n if (await fs.pathExists(targetDir)) {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Le dossier ${config.projectName} existe déjà. Écraser?`,\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.yellow('\\nInstallation annulée.'));\n process.exit(0);\n }\n\n await fs.remove(targetDir);\n }\n\n const spinner = ora();\n\n // Download project\n await downloadProject(targetDir, spinner);\n\n // Configure project\n await configureProject(config, targetDir, spinner);\n\n // Install dependencies\n await installDependencies(config, targetDir, spinner);\n\n // Run migrations\n await runMigrationsAndSeed(config, targetDir, spinner);\n\n // Create admin user (if not using seeder)\n if (!config.runMigrations) {\n await createAdminUser(config, targetDir, spinner);\n }\n\n // Print success message\n printSuccessMessage(config, targetDir);\n\n } catch (error: any) {\n if (error.message === 'user cancelled') {\n console.log(chalk.yellow('\\nInstallation annulée.'));\n process.exit(0);\n }\n\n console.error(chalk.red('\\n✖ Erreur:'), error.message);\n process.exit(1);\n }\n}\n\n// CLI Program\nconst program = new Command();\n\nprogram\n .name('exiloncms')\n .description('Create a new ExilonCMS project')\n .version(packageJson.version);\n\nprogram\n .command('create [project-name]')\n .description('Create a new ExilonCMS project')\n .option('-d, --database <type>', 'Database type (sqlite, postgresql, mysql)', 'sqlite')\n .option('-t, --theme <name>', 'Theme name', 'default')\n .option('-p, --plugins <list>', 'Comma-separated list of plugins')\n .option('--site-name <name>', 'Site name')\n .option('--admin-name <name>', 'Admin name')\n .option('--admin-email <email>', 'Admin email')\n .option('--admin-password <password>', 'Admin password')\n .option('--no-install-deps', 'Skip installing dependencies')\n .option('--no-run-migrations', 'Skip running migrations')\n .action(createCommand);\n\nprogram\n .command('new [project-name]')\n .description('Alias for create')\n .option('-d, --database <type>', 'Database type (sqlite, postgresql, mysql)', 'sqlite')\n .option('-t, --theme <name>', 'Theme name', 'default')\n .option('-p, --plugins <list>', 'Comma-separated list of plugins')\n .option('--site-name <name>', 'Site name')\n .option('--admin-name <name>', 'Admin name')\n .option('--admin-email <email>', 'Admin email')\n .option('--admin-password <password>', 'Admin password')\n .option('--no-install-deps', 'Skip installing dependencies')\n .option('--no-run-migrations', 'Skip running migrations')\n .action(createCommand);\n\nprogram.parse();\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exiloncms/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Interactive CLI to create new ExilonCMS projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"exiloncms": "./
|
|
8
|
-
"create-exiloncms": "./
|
|
7
|
+
"exiloncms": "./bin/exiloncms.js",
|
|
8
|
+
"create-exiloncms": "./bin/create-exiloncms.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
|
+
"bin",
|
|
12
13
|
"templates"
|
|
13
14
|
],
|
|
14
15
|
"scripts": {
|