create-fleetbo-project 1.0.29 → 1.0.31

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.
@@ -36,25 +36,41 @@ if (!bootstrapToken) {
36
36
  const projectName = projectNameArg;
37
37
 
38
38
  /**
39
- * Fonction pour copier récursivement un dossier
39
+ * Fonction pour copier récursivement un dossier (version robuste)
40
40
  */
41
41
  function copyRecursiveSync(src, dest) {
42
- const exists = fs.existsSync(src);
43
- const stats = exists && fs.statSync(src);
44
- const isDirectory = exists && stats.isDirectory();
45
-
46
- if (isDirectory) {
47
- if (!fs.existsSync(dest)) {
48
- fs.mkdirSync(dest, { recursive: true });
42
+ try {
43
+ const stat = fs.statSync(src);
44
+
45
+ if (stat.isDirectory()) {
46
+ // Créer le dossier de destination
47
+ if (!fs.existsSync(dest)) {
48
+ fs.mkdirSync(dest, { recursive: true });
49
+ }
50
+
51
+ // Copier tous les enfants
52
+ const entries = fs.readdirSync(src, { withFileTypes: true });
53
+ for (const entry of entries) {
54
+ const srcPath = path.join(src, entry.name);
55
+ const destPath = path.join(dest, entry.name);
56
+
57
+ if (entry.isDirectory()) {
58
+ copyRecursiveSync(srcPath, destPath);
59
+ } else if (entry.isFile() || entry.isSymbolicLink()) {
60
+ fs.copyFileSync(srcPath, destPath);
61
+ }
62
+ }
63
+ } else if (stat.isFile()) {
64
+ // Créer le dossier parent si nécessaire
65
+ const destDir = path.dirname(dest);
66
+ if (!fs.existsSync(destDir)) {
67
+ fs.mkdirSync(destDir, { recursive: true });
68
+ }
69
+ fs.copyFileSync(src, dest);
49
70
  }
50
- fs.readdirSync(src).forEach(childItemName => {
51
- copyRecursiveSync(
52
- path.join(src, childItemName),
53
- path.join(dest, childItemName)
54
- );
55
- });
56
- } else {
57
- fs.copyFileSync(src, dest);
71
+ } catch (error) {
72
+ console.error(`Erreur lors de la copie de ${src} vers ${dest}:`, error.message);
73
+ throw error;
58
74
  }
59
75
  }
60
76
 
@@ -105,17 +121,22 @@ async function setupProject() {
105
121
  if (response.statusCode === 301 || response.statusCode === 302) {
106
122
  return https.get(response.headers.location, (redirectResponse) => {
107
123
  redirectResponse.pipe(unzipper.Extract({ path: tempDir }))
108
- .on('finish', resolve)
109
- .on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
110
- }).on('error', (err) => reject(new Error(`Erreur réseau après redirection: ${err.message}`)));
124
+ .on('close', () => setTimeout(resolve, 1000))
125
+ .on('error', reject);
126
+ }).on('error', reject);
111
127
  }
112
128
  response.pipe(unzipper.Extract({ path: tempDir }))
113
- .on('finish', resolve)
114
- .on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
115
- }).on('error', (err) => reject(new Error(`Erreur réseau: ${err.message}`)));
129
+ .on('close', () => setTimeout(resolve, 1000))
130
+ .on('error', reject);
131
+ }).on('error', reject);
116
132
  });
117
133
 
118
- console.log(' [2/5] ✅ Template téléchargé. Organisation des fichiers...');
134
+ console.log(' [2/5] ✅ Template téléchargé. Vérification...');
135
+
136
+ // Vérifier que l'extraction est complète
137
+ if (!fs.existsSync(tempDir) || fs.readdirSync(tempDir).length === 0) {
138
+ throw new Error('Le téléchargement ou l\'extraction a échoué');
139
+ }
119
140
 
120
141
  // Étape 2 : Localiser intelligemment la racine du projet
121
142
  const unzippedBaseFolder = fs.readdirSync(tempDir)[0];
@@ -131,27 +152,9 @@ async function setupProject() {
131
152
  }
132
153
 
133
154
  // Étape 3 : Copier RÉCURSIVEMENT tous les fichiers et dossiers
134
- console.log(` [3/5] 📂 Copie de tous les fichiers du template...`);
135
-
136
- // Vérifier que le répertoire source existe et contient des fichiers
137
- if (!fs.existsSync(sourceDir)) {
138
- throw new Error(`Le répertoire source n'existe pas: ${sourceDir}`);
139
- }
140
-
141
- const sourceFiles = fs.readdirSync(sourceDir);
142
- console.log(` → ${sourceFiles.length} éléments détectés à la racine du template`);
143
-
144
- // Copier récursivement tout le contenu
155
+ console.log(` [3/5] 📂 Copie de la structure complète du projet...`);
145
156
  copyRecursiveSync(sourceDir, projectDir);
146
157
 
147
- // Vérifier que la copie a réussi
148
- const copiedFiles = fs.readdirSync(projectDir);
149
- console.log(` → ${copiedFiles.length} éléments copiés dans le nouveau projet`);
150
-
151
- if (!fs.existsSync(path.join(projectDir, 'package.json'))) {
152
- throw new Error('Erreur: package.json n\'a pas été copié correctement');
153
- }
154
-
155
158
  // Étape 4 : Récupération des clés
156
159
  console.log(' [4/5] 🔑 Récupération des clés de projet...');
157
160
  const keys = await fetchProjectKeys(bootstrapToken);
@@ -184,15 +187,21 @@ async function setupProject() {
184
187
  } catch (error) {
185
188
  console.error('\n❌ Une erreur est survenue lors de la création du projet :', error.message);
186
189
  console.error(' Détails:', error);
190
+
191
+ // NE PAS nettoyer le projectDir si on veut déboguer
192
+ // Commenter cette section pour garder les fichiers et voir ce qui manque
187
193
  if (fs.existsSync(projectDir)) {
188
194
  console.log(' 🧹 Nettoyage du projet incomplet...');
189
195
  fs.rmSync(projectDir, { recursive: true, force: true });
190
196
  }
191
197
  process.exit(1);
192
198
  } finally {
193
- if (fs.existsSync(tempDir)) {
194
- fs.rmSync(tempDir, { recursive: true, force: true });
195
- }
199
+ // Nettoyer APRÈS que tout soit terminé
200
+ setTimeout(() => {
201
+ if (fs.existsSync(tempDir)) {
202
+ fs.rmSync(tempDir, { recursive: true, force: true });
203
+ }
204
+ }, 2000);
196
205
  }
197
206
  }
198
207
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fleetbo-project",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "Creates a new Fleetbo project.",
5
5
  "main": "install-react-template.js",
6
6
  "bin": {