create-fleetbo-project 1.0.30 → 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 +46 -95
- 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,20 +121,14 @@ 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('close', () =>
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
})
|
|
112
|
-
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
113
|
-
}).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);
|
|
114
127
|
}
|
|
115
128
|
response.pipe(unzipper.Extract({ path: tempDir }))
|
|
116
|
-
.on('close', () =>
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
})
|
|
120
|
-
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
121
|
-
}).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);
|
|
122
132
|
});
|
|
123
133
|
|
|
124
134
|
console.log(' [2/5] ✅ Template téléchargé. Vérification...');
|
|
@@ -129,11 +139,7 @@ async function setupProject() {
|
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
// Étape 2 : Localiser intelligemment la racine du projet
|
|
132
|
-
|
|
133
|
-
const tempContents = fs.readdirSync(tempDir);
|
|
134
|
-
console.log(` → Contenu du dossier temporaire: ${tempContents.join(', ')}`);
|
|
135
|
-
|
|
136
|
-
const unzippedBaseFolder = tempContents[0];
|
|
142
|
+
const unzippedBaseFolder = fs.readdirSync(tempDir)[0];
|
|
137
143
|
let sourceDir = path.join(tempDir, unzippedBaseFolder);
|
|
138
144
|
|
|
139
145
|
if (!fs.existsSync(path.join(sourceDir, 'package.json'))) {
|
|
@@ -145,62 +151,10 @@ async function setupProject() {
|
|
|
145
151
|
sourceDir = path.join(sourceDir, nestedProjectDir);
|
|
146
152
|
}
|
|
147
153
|
|
|
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
|
-
|
|
169
154
|
// Étape 3 : Copier RÉCURSIVEMENT tous les fichiers et dossiers
|
|
170
|
-
console.log(` [3/5] 📂 Copie de
|
|
171
|
-
|
|
172
|
-
// Vérifier que le répertoire source existe et contient des fichiers
|
|
173
|
-
if (!fs.existsSync(sourceDir)) {
|
|
174
|
-
throw new Error(`Le répertoire source n'existe pas: ${sourceDir}`);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const sourceFiles = fs.readdirSync(sourceDir);
|
|
178
|
-
console.log(` → ${sourceFiles.length} éléments à la racine: ${sourceFiles.join(', ')}`);
|
|
179
|
-
|
|
180
|
-
// Copier récursivement tout le contenu
|
|
155
|
+
console.log(` [3/5] 📂 Copie de la structure complète du projet...`);
|
|
181
156
|
copyRecursiveSync(sourceDir, projectDir);
|
|
182
157
|
|
|
183
|
-
// Vérifier que la copie a réussi
|
|
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
|
-
}
|
|
190
|
-
|
|
191
|
-
if (!fs.existsSync(path.join(projectDir, 'package.json'))) {
|
|
192
|
-
throw new Error('Erreur: package.json n\'a pas été copié correctement');
|
|
193
|
-
}
|
|
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
|
-
|
|
204
158
|
// Étape 4 : Récupération des clés
|
|
205
159
|
console.log(' [4/5] 🔑 Récupération des clés de projet...');
|
|
206
160
|
const keys = await fetchProjectKeys(bootstrapToken);
|
|
@@ -242,15 +196,12 @@ async function setupProject() {
|
|
|
242
196
|
}
|
|
243
197
|
process.exit(1);
|
|
244
198
|
} finally {
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
252
|
-
}, 1000);
|
|
253
|
-
}
|
|
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);
|
|
254
205
|
}
|
|
255
206
|
}
|
|
256
207
|
|