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.
- package/install-react-template.js +54 -45
- package/package.json +1 -1
|
@@ -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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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('
|
|
109
|
-
.on('error',
|
|
110
|
-
}).on('error',
|
|
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('
|
|
114
|
-
.on('error',
|
|
115
|
-
}).on('error',
|
|
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é.
|
|
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
|
|
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
|
-
|
|
194
|
-
|
|
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
|
|