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.
@@ -7,11 +7,13 @@ 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';
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. Remplacez par la vôtre !
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
- response.pipe(unzipper.Extract({ path: '.' }))
89
- .on('finish', resolve)
90
- .on('error', reject);
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
- fs.renameSync(`${repoName}-main`, projectName);
93
- process.chdir(projectName);
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
- // 3. Récupérer les clés de projet sécurisées
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
- // 4. Créer le fichier .env avec les clés
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
- // Nettoyage en cas d'erreur
126
- if (fs.existsSync(projectName)) {
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(projectName, { recursive: true, force: true });
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fleetbo-project",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "Creates a new Fleetbo project.",
5
5
  "main": "install-react-template.js",
6
6
  "bin": {