create-fleetbo-project 1.0.29 → 1.0.30
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/install-react-template.js +66 -8
- package/package.json +1 -1
|
@@ -105,20 +105,35 @@ async function setupProject() {
|
|
|
105
105
|
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
106
106
|
return https.get(response.headers.location, (redirectResponse) => {
|
|
107
107
|
redirectResponse.pipe(unzipper.Extract({ path: tempDir }))
|
|
108
|
-
.on('
|
|
108
|
+
.on('close', () => {
|
|
109
|
+
// Attendre un peu pour s'assurer que tous les fichiers sont écrits
|
|
110
|
+
setTimeout(resolve, 500);
|
|
111
|
+
})
|
|
109
112
|
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
110
113
|
}).on('error', (err) => reject(new Error(`Erreur réseau après redirection: ${err.message}`)));
|
|
111
114
|
}
|
|
112
115
|
response.pipe(unzipper.Extract({ path: tempDir }))
|
|
113
|
-
.on('
|
|
116
|
+
.on('close', () => {
|
|
117
|
+
// Attendre un peu pour s'assurer que tous les fichiers sont écrits
|
|
118
|
+
setTimeout(resolve, 500);
|
|
119
|
+
})
|
|
114
120
|
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
115
121
|
}).on('error', (err) => reject(new Error(`Erreur réseau: ${err.message}`)));
|
|
116
122
|
});
|
|
117
123
|
|
|
118
|
-
console.log(' [2/5] ✅ Template téléchargé.
|
|
124
|
+
console.log(' [2/5] ✅ Template téléchargé. Vérification...');
|
|
125
|
+
|
|
126
|
+
// Vérifier que l'extraction est complète
|
|
127
|
+
if (!fs.existsSync(tempDir) || fs.readdirSync(tempDir).length === 0) {
|
|
128
|
+
throw new Error('Le téléchargement ou l\'extraction a échoué');
|
|
129
|
+
}
|
|
119
130
|
|
|
120
131
|
// Étape 2 : Localiser intelligemment la racine du projet
|
|
121
|
-
|
|
132
|
+
console.log(' [2/5] 🔍 Localisation de la racine du projet...');
|
|
133
|
+
const tempContents = fs.readdirSync(tempDir);
|
|
134
|
+
console.log(` → Contenu du dossier temporaire: ${tempContents.join(', ')}`);
|
|
135
|
+
|
|
136
|
+
const unzippedBaseFolder = tempContents[0];
|
|
122
137
|
let sourceDir = path.join(tempDir, unzippedBaseFolder);
|
|
123
138
|
|
|
124
139
|
if (!fs.existsSync(path.join(sourceDir, 'package.json'))) {
|
|
@@ -130,6 +145,27 @@ async function setupProject() {
|
|
|
130
145
|
sourceDir = path.join(sourceDir, nestedProjectDir);
|
|
131
146
|
}
|
|
132
147
|
|
|
148
|
+
console.log(` ✅ Racine du projet trouvée: ${sourceDir}`);
|
|
149
|
+
|
|
150
|
+
// Lister tous les fichiers du source avant copie
|
|
151
|
+
function countFilesRecursive(dir) {
|
|
152
|
+
let count = 0;
|
|
153
|
+
const items = fs.readdirSync(dir);
|
|
154
|
+
items.forEach(item => {
|
|
155
|
+
const fullPath = path.join(dir, item);
|
|
156
|
+
const stat = fs.statSync(fullPath);
|
|
157
|
+
if (stat.isDirectory()) {
|
|
158
|
+
count += countFilesRecursive(fullPath);
|
|
159
|
+
} else {
|
|
160
|
+
count++;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return count;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const totalSourceFiles = countFilesRecursive(sourceDir);
|
|
167
|
+
console.log(` → ${totalSourceFiles} fichiers au total dans le template`);
|
|
168
|
+
|
|
133
169
|
// Étape 3 : Copier RÉCURSIVEMENT tous les fichiers et dossiers
|
|
134
170
|
console.log(` [3/5] 📂 Copie de tous les fichiers du template...`);
|
|
135
171
|
|
|
@@ -139,19 +175,32 @@ async function setupProject() {
|
|
|
139
175
|
}
|
|
140
176
|
|
|
141
177
|
const sourceFiles = fs.readdirSync(sourceDir);
|
|
142
|
-
console.log(` → ${sourceFiles.length} éléments
|
|
178
|
+
console.log(` → ${sourceFiles.length} éléments à la racine: ${sourceFiles.join(', ')}`);
|
|
143
179
|
|
|
144
180
|
// Copier récursivement tout le contenu
|
|
145
181
|
copyRecursiveSync(sourceDir, projectDir);
|
|
146
182
|
|
|
147
183
|
// Vérifier que la copie a réussi
|
|
148
|
-
const
|
|
149
|
-
console.log(`
|
|
184
|
+
const totalCopiedFiles = countFilesRecursive(projectDir);
|
|
185
|
+
console.log(` ✅ ${totalCopiedFiles} fichiers copiés dans le nouveau projet`);
|
|
186
|
+
|
|
187
|
+
if (totalCopiedFiles !== totalSourceFiles) {
|
|
188
|
+
console.warn(` ⚠️ ATTENTION: ${totalSourceFiles - totalCopiedFiles} fichiers manquants!`);
|
|
189
|
+
}
|
|
150
190
|
|
|
151
191
|
if (!fs.existsSync(path.join(projectDir, 'package.json'))) {
|
|
152
192
|
throw new Error('Erreur: package.json n\'a pas été copié correctement');
|
|
153
193
|
}
|
|
154
194
|
|
|
195
|
+
// Vérifier spécifiquement le dossier src
|
|
196
|
+
const srcDir = path.join(projectDir, 'src');
|
|
197
|
+
if (fs.existsSync(srcDir)) {
|
|
198
|
+
const srcFiles = fs.readdirSync(srcDir);
|
|
199
|
+
console.log(` → Dossier src contient: ${srcFiles.length} éléments`);
|
|
200
|
+
} else {
|
|
201
|
+
console.warn(' ⚠️ ATTENTION: Le dossier src n\'existe pas!');
|
|
202
|
+
}
|
|
203
|
+
|
|
155
204
|
// Étape 4 : Récupération des clés
|
|
156
205
|
console.log(' [4/5] 🔑 Récupération des clés de projet...');
|
|
157
206
|
const keys = await fetchProjectKeys(bootstrapToken);
|
|
@@ -184,14 +233,23 @@ async function setupProject() {
|
|
|
184
233
|
} catch (error) {
|
|
185
234
|
console.error('\n❌ Une erreur est survenue lors de la création du projet :', error.message);
|
|
186
235
|
console.error(' Détails:', error);
|
|
236
|
+
|
|
237
|
+
// NE PAS nettoyer le projectDir si on veut déboguer
|
|
238
|
+
// Commenter cette section pour garder les fichiers et voir ce qui manque
|
|
187
239
|
if (fs.existsSync(projectDir)) {
|
|
188
240
|
console.log(' 🧹 Nettoyage du projet incomplet...');
|
|
189
241
|
fs.rmSync(projectDir, { recursive: true, force: true });
|
|
190
242
|
}
|
|
191
243
|
process.exit(1);
|
|
192
244
|
} finally {
|
|
245
|
+
// Attendre avant de nettoyer pour être sûr que tout est copié
|
|
193
246
|
if (fs.existsSync(tempDir)) {
|
|
194
|
-
|
|
247
|
+
console.log(' 🧹 Nettoyage du dossier temporaire...');
|
|
248
|
+
setTimeout(() => {
|
|
249
|
+
if (fs.existsSync(tempDir)) {
|
|
250
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
251
|
+
}
|
|
252
|
+
}, 1000);
|
|
195
253
|
}
|
|
196
254
|
}
|
|
197
255
|
}
|