create-fleetbo-project 1.0.6 → 1.0.8

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.
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env node
2
+ // Fichier : install-react-template.js (Version améliorée)
1
3
  const { execSync } = require('child_process');
2
4
  const fs = require('fs');
3
5
  const path = require('path');
@@ -12,142 +14,63 @@ const projectName = process.argv[2];
12
14
  const tokenArgIndex = process.argv.indexOf('--token');
13
15
  const bootstrapToken = tokenArgIndex !== -1 ? process.argv[tokenArgIndex + 1] : null;
14
16
  const repoUrl = 'https://github.com/FleetFleetbo/dev.fleetbo.io/archive/refs/heads/main.zip';
15
- const bootstrapUrl = 'https://us-central1-myapp-259bf.cloudfunctions.net/bootstrapProject';
17
+ // ⚠️ REMPLACEZ PAR L'URL DE VOTRE FONCTION bootstrapProject
18
+ const bootstrapUrl = 'https://us-central1-myapp-259bf.cloudfunctions.net/bootstrapProject';
16
19
 
17
20
  // --- Validation ---
18
21
  if (!projectName || !bootstrapToken) {
19
- console.error(chalk.red('Error: Missing project name or token.'));
20
- console.log('Usage: npx create-fleetbo-project <project-name> --token <your-token>');
22
+ console.error(chalk.red('Erreur : Nom du projet ou token manquant.'));
23
+ console.log('Usage: npx create-fleetbo-project <nom-du-projet> --token <votre-token>');
21
24
  process.exit(1);
22
25
  }
23
26
 
24
- // --- Main Function ---
27
+ // --- Fonction Principale ---
25
28
  async function setupProject() {
26
- console.log(chalk.blue(`Creating your Fleetbo project "${projectName}"...`));
29
+ console.log(chalk.blue(`Création de votre projet Fleetbo "${projectName}"...`));
27
30
  const spinner = ora();
28
-
31
+
29
32
  try {
30
- // 1. Fetch configuration
31
- spinner.start('Fetching secure configuration...');
33
+ spinner.start('Récupération de la configuration sécurisée...');
32
34
  const response = await axios.post(bootstrapUrl, { token: bootstrapToken });
33
35
  const projectSecrets = response.data;
34
- spinner.succeed(chalk.green('Configuration retrieved!'));
35
-
36
- console.log(chalk.dim('Config received:'), {
37
- fleetboDB: projectSecrets.fleetboDB ? '✓' : '✗',
38
- appId: projectSecrets.appId ? '✓' : '✗'
39
- });
36
+ spinner.succeed(chalk.green('Configuration récupérée !'));
40
37
 
41
- // 2. Download template
42
- spinner.start('Downloading template...');
43
- const responseStream = await new Promise((resolve, reject) =>
44
- https.get(repoUrl, res => resolve(res)).on('error', err => reject(err))
45
- );
46
- spinner.succeed(chalk.green('Template downloaded.'));
38
+ spinner.start('Téléchargement du template...');
39
+ const responseStream = await new Promise((resolve, reject) => https.get(repoUrl, res => resolve(res)).on('error', err => reject(err)));
40
+ spinner.succeed(chalk.green('Template téléchargé.'));
47
41
 
48
- // 3. Unzip files
49
- spinner.start('Unzipping files...');
42
+ spinner.start('Décompression des fichiers...');
50
43
  await new Promise((resolve, reject) => {
51
- responseStream.pipe(unzipper.Extract({ path: '.' }))
52
- .on('finish', resolve)
53
- .on('error', reject);
44
+ responseStream.pipe(unzipper.Extract({ path: '.' }))
45
+ .on('finish', resolve).on('error', reject);
54
46
  });
55
-
56
- // Rename directory
57
- const extractedDir = 'dev.fleetbo.io-main';
58
- if (fs.existsSync(extractedDir)) {
59
- fs.renameSync(extractedDir, projectName);
60
- spinner.succeed(chalk.green('Files unzipped.'));
61
- } else {
62
- throw new Error(`Extracted directory not found: ${extractedDir}`);
63
- }
47
+ fs.renameSync(`dev.fleetbo.io-main`, projectName);
48
+ spinner.succeed(chalk.green('Fichiers décompressés.'));
64
49
 
65
- // 4. Change to project directory
66
- const projectPath = path.resolve(projectName);
67
- process.chdir(projectPath);
68
- console.log(chalk.dim(`Working directory: ${process.cwd()}`));
50
+ process.chdir(projectName);
69
51
 
70
- // 5. Configure project
71
- spinner.start('Configuring project...');
52
+ spinner.start('Configuration du projet...');
53
+ const envContent = `REACT_APP_FLEETBO_DB_KEY="${projectSecrets.fleetboDB}"\nREACT_APP_ENTERPRISE_ID=${projectSecrets.appId}\n`;
54
+ fs.writeFileSync('.env', envContent, 'utf8');
72
55
 
73
- // Create .env file
74
- const envContent = `REACT_APP_FLEETBO_DB_KEY="${projectSecrets.fleetboDB}"
75
- REACT_APP_ENTERPRISE_ID=${projectSecrets.appId}
76
- `;
77
- const envPath = path.join(process.cwd(), '.env');
78
- fs.writeFileSync(envPath, envContent, 'utf8');
79
-
80
- // Verify .env was created
81
- if (fs.existsSync(envPath)) {
82
- console.log(chalk.green('✓ .env file created successfully'));
83
- console.log(chalk.dim(` Location: ${envPath}`));
84
- } else {
85
- throw new Error('.env file was not created');
86
- }
87
-
88
- // Update package.json
89
56
  const packageJsonPath = path.join(process.cwd(), 'package.json');
90
57
  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
91
58
  packageJson.name = projectName;
92
59
  fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8');
93
-
94
- spinner.succeed(chalk.green('Project configured.'));
60
+ spinner.succeed(chalk.green('Projet configuré.'));
95
61
 
96
- // 6. Create .env.example for reference
97
- const envExampleContent = `# Fleetbo Configuration
98
- # These values are automatically configured during project setup
99
- REACT_APP_FLEETBO_DB_KEY="your-fleetbo-db-key"
100
- REACT_APP_ENTERPRISE_ID=your-app-id
101
- `;
102
- fs.writeFileSync('.env.example', envExampleContent, 'utf8');
103
- console.log(chalk.dim('✓ .env.example created'));
104
-
105
- // 7. Ensure .gitignore includes .env
106
- const gitignorePath = path.join(process.cwd(), '.gitignore');
107
- if (fs.existsSync(gitignorePath)) {
108
- let gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
109
- if (!gitignoreContent.includes('.env')) {
110
- gitignoreContent += '\n# Environment variables\n.env\n.env.local\n';
111
- fs.writeFileSync(gitignorePath, gitignoreContent, 'utf8');
112
- console.log(chalk.dim('✓ .gitignore updated'));
113
- }
114
- }
115
-
116
- // 8. Install dependencies
117
- spinner.start('Installing dependencies (this may take a few minutes)...');
62
+ spinner.start('Installation des dépendances (cela peut prendre quelques minutes)...');
118
63
  execSync('npm install', { stdio: 'inherit' });
119
- spinner.succeed(chalk.green('Dependencies installed.'));
64
+ spinner.succeed(chalk.green('Dépendances installées.'));
120
65
 
121
- // 9. Final verification
122
- console.log(chalk.green.bold('\n🚀 Your Fleetbo project is ready!\n'));
123
-
124
- // Verify configuration
125
- if (fs.existsSync(envPath)) {
126
- console.log(chalk.green('✓ Configuration file verified'));
127
- } else {
128
- console.log(chalk.yellow('⚠️ Warning: .env file not found after setup'));
129
- }
130
-
131
- console.log(chalk.cyan('\nTo get started:'));
132
- console.log(chalk.cyan(` cd ${projectName}`));
133
- console.log(chalk.cyan(` npm start`));
134
-
135
- console.log(chalk.dim('\nNote: Your .env file contains sensitive credentials and is excluded from git.'));
66
+ console.log(chalk.green.bold('\n🚀 Votre projet Fleetbo est prêt !'));
67
+ console.log(`\nPour commencer :`);
68
+ console.log(chalk.cyan(` cd ${projectName}`));
69
+ console.log(chalk.cyan(` npm start`));
136
70
 
137
71
  } catch (error) {
138
72
  if (spinner.isSpinning) spinner.fail();
139
- console.error(chalk.red('\n❌ An error occurred:'));
140
-
141
- if (error.response) {
142
- console.error(chalk.red('API Error:'), error.response.data);
143
- } else if (error.code === 'ENOENT') {
144
- console.error(chalk.red('File Error:'), error.message);
145
- console.error(chalk.yellow('This might be a permissions issue.'));
146
- } else {
147
- console.error(chalk.red(error.message));
148
- }
149
-
150
- console.error(chalk.dim('\nStack trace:'), error.stack);
73
+ console.error(chalk.red('\n❌ Une erreur est survenue :'), error.response ? error.response.data : error.message);
151
74
  process.exit(1);
152
75
  }
153
76
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fleetbo-project",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Creates a new Fleetbo project.",
5
5
  "main": "install-react-template.js",
6
6
  "bin": {