create-fleetbo-project 1.0.17 → 1.0.19

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,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // Fichier : install-react-template.js (Version corrigée)
2
+ // Fichier : install-react-template.js (Version corrigée avec téléchargement complet)
3
3
  const { execSync } = require('child_process');
4
4
  const fs = require('fs');
5
5
  const path = require('path');
@@ -23,20 +23,51 @@ if (!projectName || !bootstrapToken) {
23
23
  process.exit(1);
24
24
  }
25
25
 
26
- // --- Fonction pour attendre que le dossier existe ---
27
- function waitForDirectory(dirPath, timeout = 10000) {
26
+ // --- Fonction pour télécharger le fichier ---
27
+ function downloadFile(url, dest) {
28
28
  return new Promise((resolve, reject) => {
29
- const startTime = Date.now();
30
- const interval = setInterval(() => {
31
- if (fs.existsSync(dirPath)) {
32
- clearInterval(interval);
33
- // Attendre un peu plus pour s'assurer que tous les fichiers sont écrits
34
- setTimeout(() => resolve(), 500);
35
- } else if (Date.now() - startTime > timeout) {
36
- clearInterval(interval);
37
- reject(new Error(`Le dossier ${dirPath} n'a pas été créé dans le délai imparti`));
29
+ const file = fs.createWriteStream(dest);
30
+ https.get(url, (response) => {
31
+ // Gérer les redirections
32
+ if (response.statusCode === 302 || response.statusCode === 301) {
33
+ file.close();
34
+ fs.unlinkSync(dest);
35
+ return downloadFile(response.headers.location, dest).then(resolve).catch(reject);
38
36
  }
39
- }, 100);
37
+
38
+ if (response.statusCode !== 200) {
39
+ file.close();
40
+ fs.unlinkSync(dest);
41
+ return reject(new Error(`Échec du téléchargement: ${response.statusCode}`));
42
+ }
43
+
44
+ response.pipe(file);
45
+
46
+ file.on('finish', () => {
47
+ file.close(() => resolve());
48
+ });
49
+ }).on('error', (err) => {
50
+ fs.unlinkSync(dest);
51
+ reject(err);
52
+ });
53
+
54
+ file.on('error', (err) => {
55
+ fs.unlinkSync(dest);
56
+ reject(err);
57
+ });
58
+ });
59
+ }
60
+
61
+ // --- Fonction pour décompresser ---
62
+ function extractZip(zipPath, extractTo) {
63
+ return new Promise((resolve, reject) => {
64
+ fs.createReadStream(zipPath)
65
+ .pipe(unzipper.Extract({ path: extractTo }))
66
+ .on('close', () => {
67
+ // Attendre un peu pour s'assurer que tous les fichiers sont écrits
68
+ setTimeout(resolve, 500);
69
+ })
70
+ .on('error', reject);
40
71
  });
41
72
  }
42
73
 
@@ -44,6 +75,7 @@ function waitForDirectory(dirPath, timeout = 10000) {
44
75
  async function setupProject() {
45
76
  console.log(chalk.blue(`Création de votre projet Fleetbo "${projectName}"...`));
46
77
  const spinner = ora();
78
+ const tempZip = path.join(process.cwd(), 'temp-fleetbo.zip');
47
79
 
48
80
  try {
49
81
  spinner.start('Récupération de la configuration sécurisée...');
@@ -52,26 +84,18 @@ async function setupProject() {
52
84
  spinner.succeed(chalk.green('Configuration récupérée !'));
53
85
 
54
86
  spinner.start('Téléchargement du template...');
55
- const responseStream = await new Promise((resolve, reject) => {
56
- https.get(repoUrl, res => resolve(res)).on('error', err => reject(err));
57
- });
87
+ await downloadFile(repoUrl, tempZip);
58
88
  spinner.succeed(chalk.green('Template téléchargé.'));
59
89
 
60
90
  spinner.start('Décompression des fichiers...');
91
+ await extractZip(tempZip, '.');
61
92
 
62
- // Décompression avec gestion d'erreur améliorée
63
- await new Promise((resolve, reject) => {
64
- responseStream
65
- .pipe(unzipper.Extract({ path: '.' }))
66
- .on('close', resolve) // 'close' est plus fiable que 'finish'
67
- .on('error', reject);
68
- });
93
+ // Supprimer le fichier ZIP temporaire
94
+ fs.unlinkSync(tempZip);
69
95
 
70
- // Attendre que le dossier soit bien créé
71
96
  const extractedDir = 'dev.fleetbo.io-main';
72
- await waitForDirectory(extractedDir);
73
-
74
- // Vérifier que le dossier existe avant de renommer
97
+
98
+ // Vérifier que le dossier existe
75
99
  if (!fs.existsSync(extractedDir)) {
76
100
  throw new Error(`Le dossier ${extractedDir} n'a pas été créé après la décompression`);
77
101
  }
@@ -87,7 +111,7 @@ async function setupProject() {
87
111
  process.chdir(projectName);
88
112
 
89
113
  spinner.start('Configuration du projet...');
90
- const envContent = `REACT_APP_FLEETBO_DB_KEY=${projectSecrets.fleetboDB}\nREACT_APP_ENTERPRISE_ID=${projectSecrets.appId}\n`;
114
+ const envContent = `REACT_APP_FLEETBO_DB_KEY="${projectSecrets.fleetboDB}"\nREACT_APP_ENTERPRISE_ID=${projectSecrets.appId}\n`;
91
115
  fs.writeFileSync('.env', envContent, 'utf8');
92
116
 
93
117
  const packageJsonPath = path.join(process.cwd(), 'package.json');
@@ -107,6 +131,12 @@ async function setupProject() {
107
131
 
108
132
  } catch (error) {
109
133
  if (spinner.isSpinning) spinner.fail();
134
+
135
+ // Nettoyer le fichier temporaire en cas d'erreur
136
+ if (fs.existsSync(tempZip)) {
137
+ fs.unlinkSync(tempZip);
138
+ }
139
+
110
140
  console.error(chalk.red('\n❌ Une erreur est survenue :'), error.response ? error.response.data : error.message);
111
141
  process.exit(1);
112
142
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fleetbo-project",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
4
4
  "description": "Creates a new Fleetbo project.",
5
5
  "main": "install-react-template.js",
6
6
  "bin": {