create-fleetbo-project 1.0.17 → 1.0.18
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 +58 -28
- package/package.json +1 -1
|
@@ -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
|
|
27
|
-
function
|
|
26
|
+
// --- Fonction pour télécharger le fichier ---
|
|
27
|
+
function downloadFile(url, dest) {
|
|
28
28
|
return new Promise((resolve, reject) => {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
63
|
-
|
|
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
|
-
|
|
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
|
|
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
|
}
|