create-fleetbo-project 1.0.26 → 1.0.28
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 +24 -46
- package/package.json +1 -1
|
@@ -63,70 +63,50 @@ function fetchProjectKeys(token) {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
|
-
* Fonction Principale Asynchrone (Version avec
|
|
66
|
+
* Fonction Principale Asynchrone (Version pro avec téléchargement direct et gestion de fichiers robuste)
|
|
67
67
|
*/
|
|
68
68
|
async function setupProject() {
|
|
69
69
|
console.log(`\nCréation de votre projet Fleetbo "${projectName}"...`);
|
|
70
70
|
const projectDir = path.join(process.cwd(), projectName);
|
|
71
|
-
const tempDir = path.join(process.cwd(),
|
|
71
|
+
const tempDir = path.join(process.cwd(), `fleetbo-temp-${Date.now()}`);
|
|
72
72
|
|
|
73
73
|
try {
|
|
74
|
-
|
|
74
|
+
// Étape 1 : Téléchargement et décompression
|
|
75
|
+
console.log(` [1/5] 📥 Téléchargement du template...`);
|
|
75
76
|
await new Promise((resolve, reject) => {
|
|
76
77
|
https.get(repoUrl, (response) => {
|
|
77
78
|
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
https.get(redirectUrl, (redirectResponse) => {
|
|
81
|
-
if (redirectResponse.statusCode !== 200) {
|
|
82
|
-
return reject(new Error(`Échec du téléchargement après redirection. L'URL n'existe pas (Code: ${redirectResponse.statusCode})`));
|
|
83
|
-
}
|
|
84
|
-
redirectResponse.pipe(unzipper.Extract({ path: process.cwd() }))
|
|
79
|
+
return https.get(response.headers.location, (redirectResponse) => {
|
|
80
|
+
redirectResponse.pipe(unzipper.Extract({ path: tempDir }))
|
|
85
81
|
.on('finish', resolve)
|
|
86
|
-
.on('error', (err) => reject(new Error(`Erreur
|
|
82
|
+
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
87
83
|
}).on('error', (err) => reject(new Error(`Erreur réseau après redirection: ${err.message}`)));
|
|
88
|
-
return;
|
|
89
84
|
}
|
|
90
|
-
|
|
91
|
-
return reject(new Error(`Échec du téléchargement (Code: ${response.statusCode})`));
|
|
92
|
-
}
|
|
93
|
-
response.pipe(unzipper.Extract({ path: process.cwd() }))
|
|
85
|
+
response.pipe(unzipper.Extract({ path: tempDir }))
|
|
94
86
|
.on('finish', resolve)
|
|
95
|
-
.on('error', (err) => reject(new Error(`Erreur
|
|
87
|
+
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
96
88
|
}).on('error', (err) => reject(new Error(`Erreur réseau: ${err.message}`)));
|
|
97
89
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
let sourceDir = tempDir;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// ...on cherche le premier sous-dossier qui le contient.
|
|
107
|
-
const projectSubDir = tempDirContents.find(f => {
|
|
108
|
-
const fullPath = path.join(tempDir, f);
|
|
90
|
+
console.log(' [2/5] ✅ Template téléchargé. Organisation des fichiers...');
|
|
91
|
+
|
|
92
|
+
// Étape 2 bis : Localiser intelligemment la racine du projet
|
|
93
|
+
const unzippedBaseFolder = fs.readdirSync(tempDir)[0];
|
|
94
|
+
let sourceDir = path.join(tempDir, unzippedBaseFolder);
|
|
95
|
+
if (!fs.existsSync(path.join(sourceDir, 'package.json'))) {
|
|
96
|
+
const nestedProjectDir = fs.readdirSync(sourceDir).find(file => {
|
|
97
|
+
const fullPath = path.join(sourceDir, file);
|
|
109
98
|
return fs.statSync(fullPath).isDirectory() && fs.existsSync(path.join(fullPath, 'package.json'));
|
|
110
99
|
});
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
console.log(` -> Structure imbriquée détectée. Utilisation du sous-dossier "${projectSubDir}".`);
|
|
114
|
-
sourceDir = path.join(tempDir, projectSubDir);
|
|
115
|
-
} else {
|
|
116
|
-
throw new Error('Impossible de localiser le fichier package.json dans le template. La structure du dépôt est peut-être incorrecte.');
|
|
117
|
-
}
|
|
100
|
+
if (!nestedProjectDir) throw new Error('Impossible de trouver package.json dans le template.');
|
|
101
|
+
sourceDir = path.join(sourceDir, nestedProjectDir);
|
|
118
102
|
}
|
|
119
103
|
|
|
120
|
-
//
|
|
104
|
+
// Étape 2 ter : Déplacer les fichiers vers la destination finale
|
|
121
105
|
fs.mkdirSync(projectDir);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const sourceContents = fs.readdirSync(sourceDir);
|
|
125
|
-
for (const item of sourceContents) {
|
|
126
|
-
fs.renameSync(path.join(sourceDir, item), path.join(projectDir, item));
|
|
106
|
+
for (const file of fs.readdirSync(sourceDir)) {
|
|
107
|
+
fs.renameSync(path.join(sourceDir, file), path.join(projectDir, file));
|
|
127
108
|
}
|
|
128
|
-
|
|
129
|
-
|
|
109
|
+
|
|
130
110
|
process.chdir(projectDir);
|
|
131
111
|
console.log(' [3/5] 🔑 Récupération des clés de projet...');
|
|
132
112
|
const keys = await fetchProjectKeys(bootstrapToken);
|
|
@@ -138,7 +118,7 @@ async function setupProject() {
|
|
|
138
118
|
const envContent = `REACT_APP_FLEETBO_DB_KEY=${keys.fleetboDBKey}\nREACT_APP_ENTERPRISE_ID=${keys.enterpriseId}\n`;
|
|
139
119
|
fs.writeFileSync(path.join(projectDir, '.env'), envContent, 'utf8');
|
|
140
120
|
|
|
141
|
-
console.log(' [5/5] 📦 Installation des dépendances
|
|
121
|
+
console.log(' [5/5] 📦 Installation des dépendances...');
|
|
142
122
|
execSync('npm install', { stdio: 'inherit' });
|
|
143
123
|
|
|
144
124
|
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
@@ -154,11 +134,9 @@ async function setupProject() {
|
|
|
154
134
|
} catch (error) {
|
|
155
135
|
console.error('\n❌ Une erreur est survenue lors de la création du projet :', error.message);
|
|
156
136
|
if (fs.existsSync(projectDir)) {
|
|
157
|
-
console.log(' Nettoyage du répertoire du projet...');
|
|
158
137
|
fs.rmSync(projectDir, { recursive: true, force: true });
|
|
159
138
|
}
|
|
160
139
|
} finally {
|
|
161
|
-
// Nettoyage final du dossier temporaire
|
|
162
140
|
if (fs.existsSync(tempDir)) {
|
|
163
141
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
164
142
|
}
|