@iksdev/shard-cli 0.1.28 → 0.1.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.
Files changed (2) hide show
  1. package/notify-discord.js +32 -17
  2. package/package.json +1 -1
package/notify-discord.js CHANGED
@@ -45,31 +45,37 @@ async function downloadBuffer(url) {
45
45
  }
46
46
 
47
47
  // ─── Parse le tarball (.tgz) sans dépendance externe ─────────────────────────
48
- // Un .tgz = gzip(tar). On décompresse puis on parse le format TAR à la main.
49
48
  function extractFileFromTar(tarBuffer, targetPath) {
50
49
  let offset = 0;
50
+ const found = [];
51
+
51
52
  while (offset + 512 <= tarBuffer.length) {
52
- // Header TAR (512 octets)
53
53
  const header = tarBuffer.slice(offset, offset + 512);
54
54
  const nameRaw = header.slice(0, 100).toString("utf8").replace(/\0/g, "").trim();
55
- if (!nameRaw) break; // fin d'archive
55
+ if (!nameRaw) break;
56
56
 
57
57
  const sizeOctal = header.slice(124, 136).toString("utf8").replace(/\0/g, "").trim();
58
58
  const size = parseInt(sizeOctal, 8) || 0;
59
59
 
60
- // Prefix (ustar)
61
60
  const prefix = header.slice(345, 500).toString("utf8").replace(/\0/g, "").trim();
62
61
  const fullName = prefix ? `${prefix}/${nameRaw}` : nameRaw;
63
62
 
64
- offset += 512; // saute le header
63
+ offset += 512;
64
+
65
+ // Log tous les fichiers trouvés pour debug
66
+ if (size > 0) found.push(fullName);
65
67
 
66
68
  if (fullName.endsWith(targetPath) || fullName === targetPath) {
69
+ console.log(` ✅ Trouvé: ${fullName}`);
67
70
  return tarBuffer.slice(offset, offset + size).toString("utf8");
68
71
  }
69
72
 
70
- // Saute le contenu (arrondi à 512)
71
73
  offset += Math.ceil(size / 512) * 512;
72
74
  }
75
+
76
+ // Si pas trouvé, affiche tous les fichiers du tarball
77
+ console.log(` ❌ "${targetPath}" introuvable. Fichiers dans le tarball:`);
78
+ found.forEach((f) => console.log(` - ${f}`));
73
79
  return null;
74
80
  }
75
81
 
@@ -85,21 +91,16 @@ async function fetchShardJsFromNpm(version) {
85
91
  }
86
92
  console.log(` ✅ Téléchargé (${(tgzBuffer.length / 1024).toFixed(0)} Ko)`);
87
93
 
88
- // Décompresse le gzip
89
94
  const tarBuffer = await new Promise((resolve, reject) => {
90
95
  zlib.gunzip(tgzBuffer, (err, result) => {
91
- if (err) reject(err);
96
+ if (err) { console.log(" ❌ Erreur gunzip:", err.message); reject(err); }
92
97
  else resolve(result);
93
98
  });
94
99
  });
95
100
 
96
- // Extrait bin/shard.js
101
+ console.log(` ✅ Décompressé (${(tarBuffer.length / 1024).toFixed(0)} Ko)`);
97
102
  const content = extractFileFromTar(tarBuffer, "bin/shard.js");
98
- if (!content) {
99
- console.log(" ❌ bin/shard.js introuvable dans le tarball");
100
- } else {
101
- console.log(` ✅ bin/shard.js extrait (${content.length} chars)`);
102
- }
103
+ if (content) console.log(` ✅ bin/shard.js extrait (${content.length} chars)`);
103
104
  return content;
104
105
  }
105
106
 
@@ -122,16 +123,27 @@ function geminiRequest(prompt) {
122
123
  },
123
124
  (res) => {
124
125
  let data = "";
126
+ console.log(` Gemini HTTP status: ${res.statusCode}`);
125
127
  res.on("data", (c) => (data += c));
126
128
  res.on("end", () => {
127
129
  try {
128
130
  const json = JSON.parse(data);
129
- resolve(json.candidates?.[0]?.content?.parts?.[0]?.text || null);
130
- } catch { resolve(null); }
131
+ // Log la réponse complète si erreur
132
+ if (res.statusCode !== 200) {
133
+ console.log(" ❌ Réponse Gemini:", JSON.stringify(json, null, 2));
134
+ }
135
+ const text = json.candidates?.[0]?.content?.parts?.[0]?.text || null;
136
+ console.log(text ? ` ✅ Changelog généré (${text.length} chars)` : " ❌ Gemini a retourné null");
137
+ resolve(text);
138
+ } catch (e) {
139
+ console.log(" ❌ Parse JSON échoué:", e.message);
140
+ console.log(" Raw response:", data.slice(0, 500));
141
+ resolve(null);
142
+ }
131
143
  });
132
144
  }
133
145
  );
134
- req.on("error", reject);
146
+ req.on("error", (e) => { console.log(" ❌ Erreur réseau Gemini:", e.message); reject(e); });
135
147
  req.write(body);
136
148
  req.end();
137
149
  });
@@ -220,6 +232,7 @@ function sendDiscord(changelog, prevVersion) {
220
232
  (async () => {
221
233
  console.log("🔍 Récupération de la version précédente sur npm...");
222
234
  const prevVersion = await getPreviousVersion();
235
+ console.log(` Version précédente: ${prevVersion}`);
223
236
 
224
237
  if (!prevVersion) {
225
238
  console.log("⚠️ Pas de version précédente, envoi sans changelog.");
@@ -230,9 +243,11 @@ function sendDiscord(changelog, prevVersion) {
230
243
  console.log(`📥 Téléchargement de shard.js v${prevVersion} depuis npm...`);
231
244
  const oldCode = await fetchShardJsFromNpm(prevVersion);
232
245
 
246
+ console.log("📂 Lecture de bin/shard.js local...");
233
247
  const newCode = fs.existsSync("./bin/shard.js")
234
248
  ? fs.readFileSync("./bin/shard.js", "utf-8")
235
249
  : null;
250
+ console.log(newCode ? ` ✅ Lu (${newCode.length} chars)` : " ❌ ./bin/shard.js introuvable");
236
251
 
237
252
  if (!oldCode || !newCode) {
238
253
  console.log("⚠️ Fichiers introuvables, envoi sans changelog.");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iksdev/shard-cli",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "CLI pour synchroniser un dossier local avec Shard",
5
5
  "bin": {
6
6
  "shard": "bin/shard.js"