create-fleetbo-project 1.0.33 → 1.0.34
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 +16 -9
- package/package.json +1 -1
|
@@ -6,6 +6,15 @@ const path = require('path');
|
|
|
6
6
|
const https = require('https');
|
|
7
7
|
const unzipper = require('unzipper');
|
|
8
8
|
|
|
9
|
+
// --- Vérification de la version de Node.js ---
|
|
10
|
+
const [major, minor] = process.versions.node.split('.').map(parseFloat);
|
|
11
|
+
if (major < 16 || (major === 16 && minor < 7)) {
|
|
12
|
+
console.error(`\n❌ Erreur : Ce script requiert Node.js v16.7.0 ou une version supérieure pour fonctionner correctement.`);
|
|
13
|
+
console.error(` Votre version actuelle est ${process.versions.node}.`);
|
|
14
|
+
console.log(` Veuillez mettre à jour votre installation de Node.js.`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
9
18
|
// --- Configuration ---
|
|
10
19
|
const repoOwner = 'FleetFleetbo'; // Assurez-vous que c'est le bon nom d'utilisateur GitHub
|
|
11
20
|
const repoName = 'dev.fleetbo.io'; // Assurez-vous que c'est le bon nom de dépôt
|
|
@@ -49,7 +58,11 @@ function fetchProjectKeys(token) {
|
|
|
49
58
|
res.on('data', (chunk) => { data += chunk; });
|
|
50
59
|
res.on('end', () => {
|
|
51
60
|
if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
52
|
-
|
|
61
|
+
try {
|
|
62
|
+
resolve(JSON.parse(data));
|
|
63
|
+
} catch (e) {
|
|
64
|
+
reject(new Error('Réponse invalide du serveur de clés.'));
|
|
65
|
+
}
|
|
53
66
|
} else {
|
|
54
67
|
const errorMsg = JSON.parse(data).error || `Erreur serveur (code: ${res.statusCode})`;
|
|
55
68
|
reject(new Error(errorMsg));
|
|
@@ -76,7 +89,6 @@ async function setupProject() {
|
|
|
76
89
|
await new Promise((resolve, reject) => {
|
|
77
90
|
https.get(repoUrl, (response) => {
|
|
78
91
|
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
79
|
-
// Gérer la redirection
|
|
80
92
|
return https.get(response.headers.location, (redirectResponse) => {
|
|
81
93
|
redirectResponse.pipe(unzipper.Extract({ path: tempDir }))
|
|
82
94
|
.on('finish', resolve)
|
|
@@ -93,11 +105,10 @@ async function setupProject() {
|
|
|
93
105
|
});
|
|
94
106
|
console.log(' [2/5] ✅ Template téléchargé. Organisation des fichiers...');
|
|
95
107
|
|
|
96
|
-
// Étape 2 bis : Localiser
|
|
108
|
+
// Étape 2 bis : Localiser la racine du projet dans le dossier décompressé
|
|
97
109
|
const unzippedBaseFolder = fs.readdirSync(tempDir)[0];
|
|
98
110
|
let sourceDir = path.join(tempDir, unzippedBaseFolder);
|
|
99
111
|
|
|
100
|
-
// Gère le cas où le projet est dans un sous-dossier du repo
|
|
101
112
|
if (!fs.existsSync(path.join(sourceDir, 'package.json'))) {
|
|
102
113
|
const nestedProjectDir = fs.readdirSync(sourceDir).find(file => {
|
|
103
114
|
const fullPath = path.join(sourceDir, file);
|
|
@@ -109,9 +120,6 @@ async function setupProject() {
|
|
|
109
120
|
|
|
110
121
|
// Étape 2 ter : Copier les fichiers vers la destination finale
|
|
111
122
|
fs.mkdirSync(projectDir, { recursive: true });
|
|
112
|
-
// **CORRECTION :** Utilisation de `fs.cpSync` pour copier récursivement chaque élément.
|
|
113
|
-
// C'est une méthode plus fiable pour s'assurer que toute l'arborescence
|
|
114
|
-
// des fichiers (y compris le contenu de /src) est copiée à l'identique.
|
|
115
123
|
for (const file of fs.readdirSync(sourceDir)) {
|
|
116
124
|
fs.cpSync(path.join(sourceDir, file), path.join(projectDir, file), { recursive: true });
|
|
117
125
|
}
|
|
@@ -130,7 +138,6 @@ async function setupProject() {
|
|
|
130
138
|
console.log(' [5/5] 📦 Installation des dépendances...');
|
|
131
139
|
execSync('npm install', { stdio: 'inherit' });
|
|
132
140
|
|
|
133
|
-
// Personnalisation du nom du projet dans package.json
|
|
134
141
|
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
135
142
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
136
143
|
packageJson.name = projectName;
|
|
@@ -147,7 +154,6 @@ async function setupProject() {
|
|
|
147
154
|
fs.rmSync(projectDir, { recursive: true, force: true });
|
|
148
155
|
}
|
|
149
156
|
} finally {
|
|
150
|
-
// Nettoyage du dossier temporaire
|
|
151
157
|
if (fs.existsSync(tempDir)) {
|
|
152
158
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
153
159
|
}
|
|
@@ -155,3 +161,4 @@ async function setupProject() {
|
|
|
155
161
|
}
|
|
156
162
|
|
|
157
163
|
setupProject();
|
|
164
|
+
|