create-fleetbo-project 1.0.28 → 1.0.29
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 +72 -20
- package/package.json +1 -1
|
@@ -7,13 +7,11 @@ const https = require('https');
|
|
|
7
7
|
const unzipper = require('unzipper');
|
|
8
8
|
|
|
9
9
|
// --- Configuration ---
|
|
10
|
-
const repoOwner = 'FleetFleetbo';
|
|
11
|
-
const repoName = 'dev.fleetbo.io';
|
|
12
|
-
const branchName = 'master';
|
|
10
|
+
const repoOwner = 'FleetFleetbo';
|
|
11
|
+
const repoName = 'dev.fleetbo.io';
|
|
12
|
+
const branchName = 'master';
|
|
13
13
|
|
|
14
14
|
const repoUrl = `https://github.com/${repoOwner}/${repoName}/archive/refs/heads/${branchName}.zip`;
|
|
15
|
-
|
|
16
|
-
// URL de votre Cloud Function.
|
|
17
15
|
const bootstrapUrl = 'https://us-central1-myapp-259bf.cloudfunctions.net/bootstrapProject';
|
|
18
16
|
|
|
19
17
|
// --- Analyse des Arguments ---
|
|
@@ -37,13 +35,42 @@ if (!bootstrapToken) {
|
|
|
37
35
|
|
|
38
36
|
const projectName = projectNameArg;
|
|
39
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Fonction pour copier récursivement un dossier
|
|
40
|
+
*/
|
|
41
|
+
function copyRecursiveSync(src, dest) {
|
|
42
|
+
const exists = fs.existsSync(src);
|
|
43
|
+
const stats = exists && fs.statSync(src);
|
|
44
|
+
const isDirectory = exists && stats.isDirectory();
|
|
45
|
+
|
|
46
|
+
if (isDirectory) {
|
|
47
|
+
if (!fs.existsSync(dest)) {
|
|
48
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
fs.readdirSync(src).forEach(childItemName => {
|
|
51
|
+
copyRecursiveSync(
|
|
52
|
+
path.join(src, childItemName),
|
|
53
|
+
path.join(dest, childItemName)
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
} else {
|
|
57
|
+
fs.copyFileSync(src, dest);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
40
61
|
/**
|
|
41
62
|
* Fonction pour appeler la Cloud Function et récupérer les clés.
|
|
42
63
|
*/
|
|
43
64
|
function fetchProjectKeys(token) {
|
|
44
65
|
return new Promise((resolve, reject) => {
|
|
45
66
|
const postData = JSON.stringify({ token });
|
|
46
|
-
const options = {
|
|
67
|
+
const options = {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: {
|
|
70
|
+
'Content-Type': 'application/json',
|
|
71
|
+
'Content-Length': Buffer.byteLength(postData)
|
|
72
|
+
}
|
|
73
|
+
};
|
|
47
74
|
const req = https.request(bootstrapUrl, options, (res) => {
|
|
48
75
|
let data = '';
|
|
49
76
|
res.on('data', (chunk) => { data += chunk; });
|
|
@@ -63,7 +90,7 @@ function fetchProjectKeys(token) {
|
|
|
63
90
|
}
|
|
64
91
|
|
|
65
92
|
/**
|
|
66
|
-
* Fonction Principale Asynchrone
|
|
93
|
+
* Fonction Principale Asynchrone
|
|
67
94
|
*/
|
|
68
95
|
async function setupProject() {
|
|
69
96
|
console.log(`\nCréation de votre projet Fleetbo "${projectName}"...`);
|
|
@@ -87,11 +114,13 @@ async function setupProject() {
|
|
|
87
114
|
.on('error', (err) => reject(new Error(`Erreur de décompression: ${err.message}`)));
|
|
88
115
|
}).on('error', (err) => reject(new Error(`Erreur réseau: ${err.message}`)));
|
|
89
116
|
});
|
|
117
|
+
|
|
90
118
|
console.log(' [2/5] ✅ Template téléchargé. Organisation des fichiers...');
|
|
91
119
|
|
|
92
|
-
// Étape 2
|
|
120
|
+
// Étape 2 : Localiser intelligemment la racine du projet
|
|
93
121
|
const unzippedBaseFolder = fs.readdirSync(tempDir)[0];
|
|
94
122
|
let sourceDir = path.join(tempDir, unzippedBaseFolder);
|
|
123
|
+
|
|
95
124
|
if (!fs.existsSync(path.join(sourceDir, 'package.json'))) {
|
|
96
125
|
const nestedProjectDir = fs.readdirSync(sourceDir).find(file => {
|
|
97
126
|
const fullPath = path.join(sourceDir, file);
|
|
@@ -101,31 +130,52 @@ async function setupProject() {
|
|
|
101
130
|
sourceDir = path.join(sourceDir, nestedProjectDir);
|
|
102
131
|
}
|
|
103
132
|
|
|
104
|
-
// Étape
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
133
|
+
// Étape 3 : Copier RÉCURSIVEMENT tous les fichiers et dossiers
|
|
134
|
+
console.log(` [3/5] 📂 Copie de tous les fichiers du template...`);
|
|
135
|
+
|
|
136
|
+
// Vérifier que le répertoire source existe et contient des fichiers
|
|
137
|
+
if (!fs.existsSync(sourceDir)) {
|
|
138
|
+
throw new Error(`Le répertoire source n'existe pas: ${sourceDir}`);
|
|
108
139
|
}
|
|
109
140
|
|
|
110
|
-
|
|
111
|
-
console.log(
|
|
141
|
+
const sourceFiles = fs.readdirSync(sourceDir);
|
|
142
|
+
console.log(` → ${sourceFiles.length} éléments détectés à la racine du template`);
|
|
143
|
+
|
|
144
|
+
// Copier récursivement tout le contenu
|
|
145
|
+
copyRecursiveSync(sourceDir, projectDir);
|
|
146
|
+
|
|
147
|
+
// Vérifier que la copie a réussi
|
|
148
|
+
const copiedFiles = fs.readdirSync(projectDir);
|
|
149
|
+
console.log(` → ${copiedFiles.length} éléments copiés dans le nouveau projet`);
|
|
150
|
+
|
|
151
|
+
if (!fs.existsSync(path.join(projectDir, 'package.json'))) {
|
|
152
|
+
throw new Error('Erreur: package.json n\'a pas été copié correctement');
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Étape 4 : Récupération des clés
|
|
156
|
+
console.log(' [4/5] 🔑 Récupération des clés de projet...');
|
|
112
157
|
const keys = await fetchProjectKeys(bootstrapToken);
|
|
158
|
+
|
|
113
159
|
if (!keys.enterpriseId || !keys.fleetboDBKey) {
|
|
114
160
|
throw new Error("Les clés reçues du serveur sont invalides.");
|
|
115
161
|
}
|
|
116
162
|
|
|
117
|
-
|
|
163
|
+
// Configuration du fichier .env
|
|
118
164
|
const envContent = `REACT_APP_FLEETBO_DB_KEY=${keys.fleetboDBKey}\nREACT_APP_ENTERPRISE_ID=${keys.enterpriseId}\n`;
|
|
119
165
|
fs.writeFileSync(path.join(projectDir, '.env'), envContent, 'utf8');
|
|
166
|
+
console.log(' ✅ Fichier .env configuré avec succès.');
|
|
120
167
|
|
|
121
|
-
|
|
122
|
-
execSync('npm install', { stdio: 'inherit' });
|
|
123
|
-
|
|
168
|
+
// Mise à jour du package.json avec le nom du projet
|
|
124
169
|
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
125
170
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
126
171
|
packageJson.name = projectName;
|
|
127
172
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8');
|
|
128
173
|
|
|
174
|
+
// Étape 5 : Installation des dépendances
|
|
175
|
+
console.log(' [5/5] 📦 Installation des dépendances...');
|
|
176
|
+
process.chdir(projectDir);
|
|
177
|
+
execSync('npm install', { stdio: 'inherit' });
|
|
178
|
+
|
|
129
179
|
console.log('\n🚀 Votre projet Fleetbo est prêt !');
|
|
130
180
|
console.log(`\nPour commencer, exécutez les commandes suivantes :`);
|
|
131
181
|
console.log(` cd ${projectName}`);
|
|
@@ -133,9 +183,12 @@ async function setupProject() {
|
|
|
133
183
|
|
|
134
184
|
} catch (error) {
|
|
135
185
|
console.error('\n❌ Une erreur est survenue lors de la création du projet :', error.message);
|
|
186
|
+
console.error(' Détails:', error);
|
|
136
187
|
if (fs.existsSync(projectDir)) {
|
|
188
|
+
console.log(' 🧹 Nettoyage du projet incomplet...');
|
|
137
189
|
fs.rmSync(projectDir, { recursive: true, force: true });
|
|
138
190
|
}
|
|
191
|
+
process.exit(1);
|
|
139
192
|
} finally {
|
|
140
193
|
if (fs.existsSync(tempDir)) {
|
|
141
194
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
@@ -143,5 +196,4 @@ async function setupProject() {
|
|
|
143
196
|
}
|
|
144
197
|
}
|
|
145
198
|
|
|
146
|
-
setupProject();
|
|
147
|
-
|
|
199
|
+
setupProject();
|