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.
@@ -63,70 +63,50 @@ function fetchProjectKeys(token) {
63
63
  }
64
64
 
65
65
  /**
66
- * Fonction Principale Asynchrone (Version avec manipulation de fichiers plus robuste)
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(), `${repoName}-${branchName}`);
71
+ const tempDir = path.join(process.cwd(), `fleetbo-temp-${Date.now()}`);
72
72
 
73
73
  try {
74
- console.log(' [1/5] 📥 Téléchargement du template...');
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
- const redirectUrl = response.headers.location;
79
- console.log(` -> Redirection détectée, suivi du lien : ${redirectUrl}`);
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 lors de la décompression: ${err.message}`)));
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
- if (response.statusCode !== 200) {
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 lors de la décompression: ${err.message}`)));
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
- console.log(' [2/5] ✅ Template décompressé. Réorganisation des fichiers...');
100
-
101
- // *** DÉBUT DE LA LOGIQUE CORRIGÉE POUR TROUVER LA RACINE DU PROJET ***
102
- let sourceDir = tempDir;
103
- // Si package.json n'est pas à la racine du dossier temporaire...
104
- if (!fs.existsSync(path.join(tempDir, 'package.json'))) {
105
- const tempDirContents = fs.readdirSync(tempDir);
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
- if (projectSubDir) {
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
- // Crée le dossier final du projet
104
+ // Étape 2 ter : Déplacer les fichiers vers la destination finale
121
105
  fs.mkdirSync(projectDir);
122
-
123
- // Déplace le contenu du dossier source vers le dossier final
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
- // *** FIN DE LA LOGIQUE CORRIGÉE ***
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 (cela peut prendre quelques minutes)...');
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fleetbo-project",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "Creates a new Fleetbo project.",
5
5
  "main": "install-react-template.js",
6
6
  "bin": {