create-fleetbo-project 1.0.20 → 1.0.22
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 +52 -35
- package/package.json +1 -1
|
@@ -7,11 +7,13 @@ const https = require('https');
|
|
|
7
7
|
const unzipper = require('unzipper');
|
|
8
8
|
|
|
9
9
|
// --- Configuration ---
|
|
10
|
-
|
|
11
|
-
const
|
|
10
|
+
// !!! VÉRIFIEZ ET CORRIGEZ CES DEUX LIGNES !!!
|
|
11
|
+
const repoOwner = 'FleetFleetbo'; // Assurez-vous que c'est le bon nom d'utilisateur GitHub
|
|
12
|
+
const repoName = 'dev.fleetbo.io'; // Assurez-vous que c'est le bon nom de dépôt
|
|
13
|
+
|
|
12
14
|
const repoUrl = `https://github.com/${repoOwner}/${repoName}/archive/refs/heads/main.zip`;
|
|
13
15
|
|
|
14
|
-
// URL de votre Cloud Function.
|
|
16
|
+
// URL de votre Cloud Function.
|
|
15
17
|
const bootstrapUrl = 'https://us-central1-myapp-259bf.cloudfunctions.net/bootstrapProject';
|
|
16
18
|
|
|
17
19
|
// --- Analyse des Arguments ---
|
|
@@ -41,15 +43,7 @@ const projectName = projectNameArg;
|
|
|
41
43
|
function fetchProjectKeys(token) {
|
|
42
44
|
return new Promise((resolve, reject) => {
|
|
43
45
|
const postData = JSON.stringify({ token });
|
|
44
|
-
|
|
45
|
-
const options = {
|
|
46
|
-
method: 'POST',
|
|
47
|
-
headers: {
|
|
48
|
-
'Content-Type': 'application/json',
|
|
49
|
-
'Content-Length': Buffer.byteLength(postData),
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
|
|
46
|
+
const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) } };
|
|
53
47
|
const req = https.request(bootstrapUrl, options, (res) => {
|
|
54
48
|
let data = '';
|
|
55
49
|
res.on('data', (chunk) => { data += chunk; });
|
|
@@ -62,54 +56,72 @@ function fetchProjectKeys(token) {
|
|
|
62
56
|
}
|
|
63
57
|
});
|
|
64
58
|
});
|
|
65
|
-
|
|
66
59
|
req.on('error', (e) => reject(e));
|
|
67
60
|
req.write(postData);
|
|
68
61
|
req.end();
|
|
69
62
|
});
|
|
70
63
|
}
|
|
71
64
|
|
|
72
|
-
|
|
73
65
|
/**
|
|
74
|
-
* Fonction Principale Asynchrone
|
|
66
|
+
* Fonction Principale Asynchrone (Version avec meilleur débogage)
|
|
75
67
|
*/
|
|
76
68
|
async function setupProject() {
|
|
77
69
|
console.log(`\nCréation de votre projet Fleetbo "${projectName}"...`);
|
|
78
70
|
|
|
79
71
|
try {
|
|
80
|
-
// 1. Télécharger le template depuis GitHub
|
|
81
72
|
console.log(' [1/5] 📥 Téléchargement du template...');
|
|
82
|
-
const response = await new Promise((resolve, reject) => {
|
|
83
|
-
https.get(repoUrl, res => resolve(res)).on('error', err => reject(err));
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// 2. Décompresser l'archive
|
|
87
73
|
await new Promise((resolve, reject) => {
|
|
88
|
-
|
|
89
|
-
.
|
|
90
|
-
|
|
74
|
+
https.get(repoUrl, (response) => {
|
|
75
|
+
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
76
|
+
const redirectUrl = response.headers.location;
|
|
77
|
+
// Log de l'URL pour faciliter le débogage
|
|
78
|
+
console.log(` -> Redirection détectée, suivi du lien : ${redirectUrl}`);
|
|
79
|
+
https.get(redirectUrl, (redirectResponse) => {
|
|
80
|
+
if (redirectResponse.statusCode !== 200) {
|
|
81
|
+
return reject(new Error(`Échec du téléchargement après redirection. L'URL n'existe pas (Code: ${redirectResponse.statusCode})`));
|
|
82
|
+
}
|
|
83
|
+
redirectResponse.pipe(unzipper.Extract({ path: '.' }))
|
|
84
|
+
.on('finish', resolve)
|
|
85
|
+
.on('error', (err) => reject(new Error(`Erreur lors de la décompression: ${err.message}`)));
|
|
86
|
+
}).on('error', (err) => reject(new Error(`Erreur réseau après redirection: ${err.message}`)));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (response.statusCode !== 200) {
|
|
91
|
+
return reject(new Error(`Échec du téléchargement. Le dépôt est peut-être privé ou l'URL est incorrecte (Code: ${response.statusCode})`));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
response.pipe(unzipper.Extract({ path: '.' }))
|
|
95
|
+
.on('finish', resolve)
|
|
96
|
+
.on('error', (err) => reject(new Error(`Erreur lors de la décompression: ${err.message}`)));
|
|
97
|
+
|
|
98
|
+
}).on('error', (err) => reject(new Error(`Erreur réseau lors du téléchargement: ${err.message}`)));
|
|
91
99
|
});
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
|
|
101
|
+
// La suite du script a été omise pour la brièveté mais reste identique...
|
|
102
|
+
// ...
|
|
103
|
+
// Le renommage et le reste de la logique doit être ici
|
|
104
|
+
// ...
|
|
105
|
+
|
|
94
106
|
console.log(' [2/5] ✅ Template téléchargé et décompressé.');
|
|
107
|
+
|
|
108
|
+
// Le dossier décompressé aura un nom comme "repoName-main", on le renomme
|
|
109
|
+
fs.renameSync(`${repoName}-main`, projectName);
|
|
95
110
|
|
|
96
|
-
|
|
111
|
+
process.chdir(projectName);
|
|
97
112
|
console.log(' [3/5] 🔑 Récupération des clés de projet...');
|
|
98
113
|
const keys = await fetchProjectKeys(bootstrapToken);
|
|
99
114
|
if (!keys.enterpriseId || !keys.fleetboDBKey) {
|
|
100
115
|
throw new Error("Les clés reçues du serveur sont invalides.");
|
|
101
116
|
}
|
|
102
117
|
|
|
103
|
-
|
|
118
|
+
console.log(' [4/5] ✅ Fichier .env configuré avec succès.');
|
|
104
119
|
const envContent = `REACT_APP_FLEETBO_DB_KEY=${keys.fleetboDBKey}\nREACT_APP_ENTERPRISE_ID=${keys.enterpriseId}\n`;
|
|
105
120
|
fs.writeFileSync(path.join(process.cwd(), '.env'), envContent, 'utf8');
|
|
106
|
-
console.log(' [4/5] ✅ Fichier .env configuré avec succès.');
|
|
107
121
|
|
|
108
|
-
// 5. Installer les dépendances
|
|
109
122
|
console.log(' [5/5] 📦 Installation des dépendances (cela peut prendre quelques minutes)...');
|
|
110
123
|
execSync('npm install', { stdio: 'inherit' });
|
|
111
124
|
|
|
112
|
-
// Mise à jour du package.json (optionnel mais propre)
|
|
113
125
|
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
114
126
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
115
127
|
packageJson.name = projectName;
|
|
@@ -122,13 +134,18 @@ async function setupProject() {
|
|
|
122
134
|
|
|
123
135
|
} catch (error) {
|
|
124
136
|
console.error('\n❌ Une erreur est survenue lors de la création du projet :', error.message);
|
|
125
|
-
|
|
126
|
-
if (fs.existsSync(
|
|
137
|
+
const dirToDelete = path.join(process.cwd(), projectName);
|
|
138
|
+
if (fs.existsSync(dirToDelete)) {
|
|
127
139
|
console.log(' Nettoyage du répertoire du projet...');
|
|
128
|
-
fs.rmSync(
|
|
140
|
+
fs.rmSync(dirToDelete, { recursive: true, force: true });
|
|
141
|
+
}
|
|
142
|
+
const extractedDir = path.join(process.cwd(), `${repoName}-main`);
|
|
143
|
+
if (fs.existsSync(extractedDir)) {
|
|
144
|
+
console.log(' Nettoyage du répertoire temporaire...');
|
|
145
|
+
fs.rmSync(extractedDir, { recursive: true, force: true });
|
|
129
146
|
}
|
|
130
147
|
process.exit(1);
|
|
131
148
|
}
|
|
132
149
|
}
|
|
133
150
|
|
|
134
|
-
setupProject();
|
|
151
|
+
setupProject();
|