docstodev 1.0.0 → 1.0.3
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/package.json +2 -2
- package/src/ai/analyzer.ts +6 -2
- package/src/analyzers/languageAnalyzer.ts +580 -0
- package/src/cache/cacheManager.ts +179 -0
- package/src/cli/index.ts +307 -23
- package/src/commands/generateSummary.ts +129 -39
- package/src/commands/run.ts +312 -75
- package/src/exporters/html.ts +604 -106
- package/.env +0 -1
- package/dist/ai/analyzer.d.ts +0 -3
- package/dist/ai/analyzer.d.ts.map +0 -1
- package/dist/ai/analyzer.js +0 -42
- package/dist/ai/analyzer.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -59
- package/dist/cli/index.js.map +0 -1
- package/dist/commands/classify.d.ts +0 -2
- package/dist/commands/classify.d.ts.map +0 -1
- package/dist/commands/classify.js +0 -37
- package/dist/commands/classify.js.map +0 -1
- package/dist/commands/generateSummary.d.ts +0 -5
- package/dist/commands/generateSummary.d.ts.map +0 -1
- package/dist/commands/generateSummary.js +0 -54
- package/dist/commands/generateSummary.js.map +0 -1
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -142
- package/dist/commands/run.js.map +0 -1
- package/dist/exporters/html.d.ts +0 -2
- package/dist/exporters/html.d.ts.map +0 -1
- package/dist/exporters/html.js +0 -148
- package/dist/exporters/html.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/docs/docs-to-dev.md +0 -111
- package/docs/report.html +0 -90
- package/docs/report.pdf +0 -0
- package/docs/summary.md +0 -16
- package/src/commands/classify.ts +0 -40
- package/src/index.ts +0 -0
package/.env
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
GROQ_API_KEY=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
|
package/dist/ai/analyzer.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/ai/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAEvB,wBAAsB,KAAK,CAAC,gBAAgB,EAAE,MAAM,gBAyCnD"}
|
package/dist/ai/analyzer.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\ai\analyzer.ts
|
|
2
|
-
import "dotenv/config"; // Pour lire GROQ_API_KEY dans ton .env
|
|
3
|
-
export async function askAI(technicalContext) {
|
|
4
|
-
const GROQ_API_KEY = process.env.GROQ_API_KEY;
|
|
5
|
-
if (!GROQ_API_KEY) {
|
|
6
|
-
return "⚠️ Erreur : Clé API Groq manquante dans le fichier .env";
|
|
7
|
-
}
|
|
8
|
-
const systemPrompt = `
|
|
9
|
-
Vous êtes MakazouIA, l'assistant IA de DocsToDev, créé par Chadrack Massamba (EsporDev).
|
|
10
|
-
Votre mission : Transformer des données techniques brutes en descriptions métier claires.
|
|
11
|
-
|
|
12
|
-
Instructions :
|
|
13
|
-
- Vous allez recevoir une liste de fichiers, leurs rôles et leurs exports.
|
|
14
|
-
- Pour chaque fichier, rédigez UNE SEULE phrase concise expliquant sa responsabilité métier.
|
|
15
|
-
- Soyez pro, mais gardez votre touche amicale et votre pointe d'humour du Congo-Brazzaville.
|
|
16
|
-
- Ne mentionnez pas de code technique (pas de "il y a une fonction X"), expliquez le BUT du fichier.
|
|
17
|
-
`;
|
|
18
|
-
try {
|
|
19
|
-
const resp = await fetch("https://api.groq.com/openai/v1/chat/completions", {
|
|
20
|
-
method: "POST",
|
|
21
|
-
headers: {
|
|
22
|
-
Authorization: `Bearer ${GROQ_API_KEY}`,
|
|
23
|
-
"Content-Type": "application/json",
|
|
24
|
-
},
|
|
25
|
-
body: JSON.stringify({
|
|
26
|
-
model: "llama-3.3-70b-versatile",
|
|
27
|
-
messages: [
|
|
28
|
-
{ role: "system", content: systemPrompt },
|
|
29
|
-
{ role: "user", content: `Voici les données techniques du projet : \n${technicalContext}` }
|
|
30
|
-
],
|
|
31
|
-
temperature: 0.7,
|
|
32
|
-
}),
|
|
33
|
-
});
|
|
34
|
-
const data = await resp.json();
|
|
35
|
-
return data.choices?.[0]?.message?.content || "Désolé, je n'ai pas pu analyser ce fichier.";
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.error("Erreur IA:", error);
|
|
39
|
-
return "Erreur lors de la connexion à l'intelligence artificielle.";
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=analyzer.js.map
|
package/dist/ai/analyzer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/ai/analyzer.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,eAAe,CAAC,CAAC,uCAAuC;AAE/D,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,gBAAwB;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,yDAAyD,CAAC;IACrE,CAAC;IAED,MAAM,YAAY,GAAG;;;;;;;;;CASxB,CAAC;IAEE,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,iDAAiD,EAAE;YACxE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,aAAa,EAAE,UAAU,YAAY,EAAE;gBACvC,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,yBAAyB;gBAChC,QAAQ,EAAE;oBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;oBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8CAA8C,gBAAgB,EAAE,EAAE;iBAC9F;gBACD,WAAW,EAAE,GAAG;aACnB,CAAC;SACL,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,6CAA6C,CAAC;IAChG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,4DAA4D,CAAC;IACxE,CAAC;AACL,CAAC"}
|
package/dist/cli/index.d.ts
DELETED
package/dist/cli/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
package/dist/cli/index.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\cli\index.ts
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { runCommand } from "../commands/run.js";
|
|
5
|
-
import { generateSummary } from "../commands/generateSummary.js";
|
|
6
|
-
import readline from "node:readline/promises";
|
|
7
|
-
import { stdin as input, stdout as output } from "node:process";
|
|
8
|
-
import path from "node:path";
|
|
9
|
-
const program = new Command();
|
|
10
|
-
// Configuration de base du CLI
|
|
11
|
-
program
|
|
12
|
-
.name("docs-to-dev")
|
|
13
|
-
.description("DocsToDev CLI - Analyse technique & Documentation intelligente")
|
|
14
|
-
.version("1.0.0");
|
|
15
|
-
program
|
|
16
|
-
.command("run")
|
|
17
|
-
.description("Lancer le cycle complet d'analyse et de documentation")
|
|
18
|
-
.option("-l, --lang <lang>", "Langue forcée du rapport (fr | en)")
|
|
19
|
-
.action(async (options) => {
|
|
20
|
-
let lang;
|
|
21
|
-
// --- 1. Gestion de la Langue ---
|
|
22
|
-
if (options.lang === "fr" || options.lang === "en") {
|
|
23
|
-
lang = options.lang;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
const rl = readline.createInterface({ input, output });
|
|
27
|
-
console.log("\n🌍 Bienvenue dans DocsToDev / Welcome to DocsToDev");
|
|
28
|
-
let answer = "";
|
|
29
|
-
while (!["fr", "en"].includes(answer.toLowerCase())) {
|
|
30
|
-
answer = await rl.question("👉 Choisissez votre langue / Choose your language (fr/en) : ");
|
|
31
|
-
}
|
|
32
|
-
rl.close();
|
|
33
|
-
lang = answer.toLowerCase();
|
|
34
|
-
}
|
|
35
|
-
// --- 2. Interface Utilisateur (Console) ---
|
|
36
|
-
const messages = {
|
|
37
|
-
fr: { start: "🚀 Démarrage de l'analyse approfondie...", success: "✨ Documentation générée avec succès dans /docs !" },
|
|
38
|
-
en: { start: "🚀 Starting deep analysis...", success: "✨ Documentation successfully generated in /docs!" }
|
|
39
|
-
}[lang];
|
|
40
|
-
console.log(`\n${messages.start} [${lang.toUpperCase()}]\n`);
|
|
41
|
-
try {
|
|
42
|
-
// --- 3. Exécution du Moteur (runCommand) ---
|
|
43
|
-
// Analyse statique + MakazouIA + Export HTML
|
|
44
|
-
const fileCount = await runCommand(lang);
|
|
45
|
-
// --- 4. Génération du Résumé ---
|
|
46
|
-
generateSummary("docs", fileCount || 0, lang);
|
|
47
|
-
console.log(`\n${messages.success}`);
|
|
48
|
-
console.log(`📂 Dossier : ${process.cwd()}${path.sep}docs\n`);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
const errorMsg = lang === "fr"
|
|
52
|
-
? "❌ Une erreur est survenue lors de l'analyse :"
|
|
53
|
-
: "❌ An error occurred during analysis:";
|
|
54
|
-
console.error(errorMsg, error);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
program.parse(process.argv);
|
|
59
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/commands/classify.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAoCjG"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\commands\classify.ts
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
export function determineRole(filePath, content, lang = "fr") {
|
|
4
|
-
const fileName = path.basename(filePath).toLowerCase();
|
|
5
|
-
const ext = path.extname(filePath);
|
|
6
|
-
const roles = {
|
|
7
|
-
fr: {
|
|
8
|
-
cli: "Lanceur CLI",
|
|
9
|
-
logic: "Logique Métier / Service",
|
|
10
|
-
ui: "Interface Utilisateur (UI)",
|
|
11
|
-
api: "Point d'Entrée API",
|
|
12
|
-
config: "Configuration Système",
|
|
13
|
-
unknown: "Inconnu"
|
|
14
|
-
},
|
|
15
|
-
en: {
|
|
16
|
-
cli: "CLI Entry Point",
|
|
17
|
-
logic: "Business Logic / Service",
|
|
18
|
-
ui: "User Interface (UI)",
|
|
19
|
-
api: "API Endpoint",
|
|
20
|
-
config: "System Configuration",
|
|
21
|
-
unknown: "Unknown"
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const t = roles[lang];
|
|
25
|
-
if (filePath.includes("cli") || fileName === "index.ts")
|
|
26
|
-
return t.cli;
|
|
27
|
-
if (filePath.includes("commands") || content.includes("export function"))
|
|
28
|
-
return t.logic;
|
|
29
|
-
if (content.includes("react") || ext === ".tsx")
|
|
30
|
-
return t.ui;
|
|
31
|
-
if (content.includes("NextResponse") || filePath.includes("api/"))
|
|
32
|
-
return t.api;
|
|
33
|
-
if (fileName.includes("config") || ext === ".json")
|
|
34
|
-
return t.config;
|
|
35
|
-
return t.unknown;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=classify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/commands/classify.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,OAAoB,IAAI;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAG;QACV,EAAE,EAAE;YACA,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,0BAA0B;YACjC,EAAE,EAAE,4BAA4B;YAChC,GAAG,EAAE,oBAAoB;YACzB,MAAM,EAAE,uBAAuB;YAC/B,OAAO,EAAE,SAAS;SACrB;QACD,EAAE,EAAE;YACA,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,0BAA0B;YACjC,EAAE,EAAE,qBAAqB;YACzB,GAAG,EAAE,cAAc;YACnB,MAAM,EAAE,sBAAsB;YAC9B,OAAO,EAAE,SAAS;SACrB;KACJ,CAAC;IAEF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IAEtE,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAEzF,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAE7D,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IAEhF,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IAEpE,OAAO,CAAC,CAAC,OAAO,CAAC;AACrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateSummary.d.ts","sourceRoot":"","sources":["../../src/commands/generateSummary.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,QAmD5F"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\commands\generateSummary.ts
|
|
2
|
-
import { writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
/**
|
|
5
|
-
* Génère un résumé global du projet avec un ton humain et bilingue.
|
|
6
|
-
*/
|
|
7
|
-
export function generateSummary(docsDir, totalFiles, lang = "fr") {
|
|
8
|
-
mkdirSync(docsDir, { recursive: true });
|
|
9
|
-
const dateStr = new Date().toLocaleString();
|
|
10
|
-
// Contenu bilingue avec un ton "Expert & Humain"
|
|
11
|
-
const content = lang === "fr"
|
|
12
|
-
? `# 📊 Vue d'ensemble du Projet – DocsToDev
|
|
13
|
-
|
|
14
|
-
> 📅 **Rapport généré le :** ${dateStr}
|
|
15
|
-
|
|
16
|
-
## 🚀 État des lieux
|
|
17
|
-
Salut ! J'ai passé ton projet au peigne fin. Voici un résumé rapide de ce que j'ai trouvé :
|
|
18
|
-
- **Volume traité :** ${totalFiles} fichiers analysés avec succès.
|
|
19
|
-
- **Diagnostic :** La structure est claire et l'analyse est complète. ✅
|
|
20
|
-
|
|
21
|
-
## 🧭 Navigation Rapide
|
|
22
|
-
Pour aller plus loin, tu peux consulter les documents suivants :
|
|
23
|
-
- **[📂 Arborescence & Analyse](../docs/docs-to-dev.md)** : Pour comprendre la vocation de chaque fichier et les capacités du système.
|
|
24
|
-
- **[💻 Code Source](../)** : Pour retourner explorer la racine de ton projet.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
*DocsToDev – Ton allié pour une documentation technique vivante et intelligente.*
|
|
28
|
-
`
|
|
29
|
-
: `# 📊 Project Overview – DocsToDev
|
|
30
|
-
|
|
31
|
-
> 📅 **Generated on:** ${dateStr}
|
|
32
|
-
|
|
33
|
-
## 🚀 Project Status
|
|
34
|
-
Hey! I've scanned your entire codebase. Here's a quick summary of the findings:
|
|
35
|
-
- **Volume processed:** ${totalFiles} files successfully analyzed.
|
|
36
|
-
- **Diagnosis:** The structure is clear and the analysis is complete. ✅
|
|
37
|
-
|
|
38
|
-
## 🧭 Quick Navigation
|
|
39
|
-
To dive deeper, check out these documents:
|
|
40
|
-
- **[📂 Tree & Analysis](../docs/docs-to-dev.md)**: Explore file purposes and system capabilities.
|
|
41
|
-
- **[💻 Source Code](../)**: Head back to the project root.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
*DocsToDev – Your partner for living and intelligent technical documentation.*
|
|
45
|
-
`;
|
|
46
|
-
const outputPath = path.join(docsDir, "summary.md");
|
|
47
|
-
writeFileSync(outputPath, content);
|
|
48
|
-
// Log de succès bilingue
|
|
49
|
-
const successMsg = lang === "fr"
|
|
50
|
-
? `📑 Résumé humain généré avec succès : ${outputPath}`
|
|
51
|
-
: `📑 Human-friendly summary successfully generated: ${outputPath}`;
|
|
52
|
-
console.log(successMsg);
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=generateSummary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateSummary.js","sourceRoot":"","sources":["../../src/commands/generateSummary.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,UAAkB,EAAE,OAAoB,IAAI;IAC3F,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;IAE5C,iDAAiD;IACjD,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI;QAC3B,CAAC,CAAC;;+BAEyB,OAAO;;;;wBAId,UAAU;;;;;;;;;;CAUjC;QACG,CAAC,CAAC;;yBAEmB,OAAO;;;;0BAIN,UAAU;;;;;;;;;;CAUnC,CAAC;IAEA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEnC,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI;QAC9B,CAAC,CAAC,yCAAyC,UAAU,EAAE;QACvD,CAAC,CAAC,qDAAqD,UAAU,EAAE,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/commands/run.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAkEA,wBAAsB,UAAU,CAAC,QAAQ,GAAE,IAAI,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA0E9E"}
|
package/dist/commands/run.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\commands\run.ts
|
|
2
|
-
import { globby } from "globby";
|
|
3
|
-
import { writeFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import puppeteer from "puppeteer";
|
|
6
|
-
import { exportToHTML } from "../exporters/html.js";
|
|
7
|
-
import { askAI } from "../ai/analyzer.js";
|
|
8
|
-
const i18n = {
|
|
9
|
-
fr: {
|
|
10
|
-
role: "Vocation du fichier",
|
|
11
|
-
density: "Densité et maintenance",
|
|
12
|
-
exports: "Capacités offertes",
|
|
13
|
-
imports: "Collaborations sollicitées",
|
|
14
|
-
structure: "Architecture des dossiers",
|
|
15
|
-
deps: "Inventaire des modules externes",
|
|
16
|
-
aiTitle: "Synthèse Métier (par MakazouIA)",
|
|
17
|
-
genAt: "Généré le",
|
|
18
|
-
reportTitle: "Rapport d'Analyse Technique DocsToDev"
|
|
19
|
-
},
|
|
20
|
-
en: {
|
|
21
|
-
role: "File Purpose",
|
|
22
|
-
density: "Density & Maintenance",
|
|
23
|
-
exports: "Capabilities offered",
|
|
24
|
-
imports: "External services",
|
|
25
|
-
structure: "Project Architecture",
|
|
26
|
-
deps: "External Modules Inventory",
|
|
27
|
-
aiTitle: "Business Insights (by MakazouIA)",
|
|
28
|
-
genAt: "Generated on",
|
|
29
|
-
reportTitle: "DocsToDev Technical Report"
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
function buildTree(files) {
|
|
33
|
-
const root = {};
|
|
34
|
-
for (const file of files) {
|
|
35
|
-
const parts = file.split(path.sep);
|
|
36
|
-
let current = root;
|
|
37
|
-
for (const part of parts) {
|
|
38
|
-
if (!current[part])
|
|
39
|
-
current[part] = {};
|
|
40
|
-
current = current[part];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return root;
|
|
44
|
-
}
|
|
45
|
-
function renderTree(tree, prefix = "", currentPath = "") {
|
|
46
|
-
const entries = Object.keys(tree).sort();
|
|
47
|
-
let output = "";
|
|
48
|
-
entries.forEach((key, index) => {
|
|
49
|
-
const isLast = index === entries.length - 1;
|
|
50
|
-
const connector = isLast ? "└─ " : "├─ ";
|
|
51
|
-
const child = tree[key];
|
|
52
|
-
const fullPath = currentPath ? `${currentPath}/${key}` : key;
|
|
53
|
-
const isFile = !child || Object.keys(child).length === 0;
|
|
54
|
-
const label = isFile ? `[${key}](../${fullPath.replace(/\\/g, '/')})` : `**${key}/**`;
|
|
55
|
-
output += `${prefix}${connector}${label}\n`;
|
|
56
|
-
if (child && Object.keys(child).length > 0) {
|
|
57
|
-
output += renderTree(child, prefix + (isLast ? " " : "│ "), fullPath);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
return output;
|
|
61
|
-
}
|
|
62
|
-
export async function runCommand(language = "fr") {
|
|
63
|
-
const t = i18n[language];
|
|
64
|
-
console.log(language === "fr" ? "🚀 DocsToDev : Analyse Deep Scan & Graphe..." : "🚀 DocsToDev: Deep Scan & Graph analysis...");
|
|
65
|
-
const files = await globby(["**/*"], {
|
|
66
|
-
gitignore: true,
|
|
67
|
-
ignore: ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/docs/**"]
|
|
68
|
-
});
|
|
69
|
-
const docsDir = "docs";
|
|
70
|
-
if (!existsSync(docsDir))
|
|
71
|
-
mkdirSync(docsDir, { recursive: true });
|
|
72
|
-
let aiContext = `Analyse ces fichiers pour DocsToDev. Explique pourquoi ils utilisent leurs dépendances. Format: "Utilise [X] pour [Y]".\n\n`;
|
|
73
|
-
let detailContent = `## 🔬 Analyse détaillée des composants\n\n`;
|
|
74
|
-
let mermaidGraph = "";
|
|
75
|
-
const allDeps = new Map();
|
|
76
|
-
for (const file of files) {
|
|
77
|
-
const ext = path.extname(file);
|
|
78
|
-
if (![".ts", ".js", ".tsx", ".jsx"].includes(ext))
|
|
79
|
-
continue;
|
|
80
|
-
const content = readFileSync(file, "utf-8");
|
|
81
|
-
const lines = content.split(/\r?\n/);
|
|
82
|
-
const fileNameSanitized = path.basename(file).replace(/\./g, '_');
|
|
83
|
-
const exports = lines
|
|
84
|
-
.filter(l => l.startsWith("export "))
|
|
85
|
-
.map(l => l.match(/(?:function|const|class|type|interface)\s+([a-zA-Z0-9_]+)/)?.[1])
|
|
86
|
-
.filter(Boolean);
|
|
87
|
-
const importLines = lines.filter(l => l.trim().startsWith("import "));
|
|
88
|
-
detailContent += `### 📄 [\`${file}\`](../${file.replace(/\\/g, '/')})\n`;
|
|
89
|
-
detailContent += `• **${t.density} :** ${lines.length} lignes\n`;
|
|
90
|
-
if (exports.length > 0)
|
|
91
|
-
detailContent += `• **${t.exports} :** ${exports.map(e => `\`${e}\``).join(", ")}\n`;
|
|
92
|
-
if (importLines.length > 0) {
|
|
93
|
-
detailContent += `• **${t.imports} :**\n`;
|
|
94
|
-
importLines.forEach(line => {
|
|
95
|
-
const match = line.match(/from ['"]([^'"]+)['"]/);
|
|
96
|
-
if (match?.[1]) {
|
|
97
|
-
const name = match[1];
|
|
98
|
-
const type = name.startsWith('.') ? 'Internal' : (name.startsWith('node:') ? 'Node.js' : 'External');
|
|
99
|
-
allDeps.set(name, type);
|
|
100
|
-
detailContent += ` - Utilise \`${name}\` (${type})\n`;
|
|
101
|
-
if (type === 'Internal') {
|
|
102
|
-
const targetName = path.basename(name).replace(/\./g, '_');
|
|
103
|
-
mermaidGraph += ` ${fileNameSanitized} --> ${targetName}\n`;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
detailContent += `\n---\n\n`;
|
|
109
|
-
aiContext += `FICHIER: ${file}\nEXPORTS: ${exports.join(",")}\nCODE:\n${lines.slice(0, 40).join("\n")}\n\n`;
|
|
110
|
-
}
|
|
111
|
-
const aiSummary = await askAI(aiContext) || "Synthèse IA indisponible.";
|
|
112
|
-
let finalMD = `# ${t.reportTitle}\n\n`;
|
|
113
|
-
finalMD += `> 📅 ${t.genAt} : ${new Date().toLocaleString()}\n\n`;
|
|
114
|
-
finalMD += `## 💡 ${t.aiTitle}\n${aiSummary}\n\n`;
|
|
115
|
-
finalMD += `## 📂 ${t.structure}\n\n${renderTree(buildTree(files))}\n\n`;
|
|
116
|
-
finalMD += detailContent;
|
|
117
|
-
finalMD += `## 📦 ${t.deps}\n\n| Module | Type |\n| :--- | :--- |\n`;
|
|
118
|
-
Array.from(allDeps.entries()).sort().forEach(([n, ty]) => finalMD += `| \`${n}\` | ${ty} |\n`);
|
|
119
|
-
writeFileSync(path.join(docsDir, "docs-to-dev.md"), finalMD);
|
|
120
|
-
exportToHTML(docsDir, finalMD, mermaidGraph, language);
|
|
121
|
-
console.log("📄 Génération du PDF automatique...");
|
|
122
|
-
await generatePDF(path.join(docsDir, "report.html"), path.join(docsDir, "report.pdf"));
|
|
123
|
-
return files.length;
|
|
124
|
-
}
|
|
125
|
-
async function generatePDF(htmlPath, outputPath) {
|
|
126
|
-
try {
|
|
127
|
-
const browser = await puppeteer.launch({ headless: true });
|
|
128
|
-
const page = await browser.newPage();
|
|
129
|
-
await page.goto(`file://${path.resolve(htmlPath)}`, { waitUntil: "networkidle0" });
|
|
130
|
-
await page.pdf({
|
|
131
|
-
path: outputPath,
|
|
132
|
-
format: 'A4',
|
|
133
|
-
printBackground: true,
|
|
134
|
-
margin: { top: '1cm', bottom: '1cm', left: '1cm', right: '1cm' }
|
|
135
|
-
});
|
|
136
|
-
await browser.close();
|
|
137
|
-
}
|
|
138
|
-
catch (e) {
|
|
139
|
-
console.error("Erreur PDF:", e);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=run.js.map
|
package/dist/commands/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,MAAM,IAAI,GAAG;IACT,EAAE,EAAE;QACA,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,4BAA4B;QACrC,SAAS,EAAE,2BAA2B;QACtC,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,iCAAiC;QAC1C,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uCAAuC;KACvD;IACD,EAAE,EAAE;QACA,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE,mBAAmB;QAC5B,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,kCAAkC;QAC3C,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,4BAA4B;KAC5C;CACJ,CAAC;AAEF,SAAS,SAAS,CAAC,KAAe;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAa,CAAC;QACxC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAc,EAAE,MAAM,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAwB,IAAI;IACzD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;IAEhI,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE;QACjC,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;KAC3E,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,IAAI,SAAS,GAAG,6HAA6H,CAAC;IAC9I,IAAI,aAAa,GAAG,4CAA4C,CAAC;IACjE,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,KAAK;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,2DAA2D,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACnF,MAAM,CAAC,OAAO,CAAa,CAAC;QAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAEtE,aAAa,IAAI,aAAa,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;QAC1E,aAAa,IAAI,OAAO,CAAC,CAAC,OAAO,QAAQ,KAAK,CAAC,MAAM,WAAW,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,aAAa,IAAI,OAAO,CAAC,CAAC,OAAO,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE7G,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,aAAa,IAAI,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1C,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAClD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACrG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACxB,aAAa,IAAI,mBAAmB,IAAI,OAAO,IAAI,KAAK,CAAC;oBAEzD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;wBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC3D,YAAY,IAAI,OAAO,iBAAiB,QAAQ,UAAU,IAAI,CAAC;oBACnE,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,aAAa,IAAI,WAAW,CAAC;QAC7B,SAAS,IAAI,YAAY,IAAI,cAAc,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAChH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,2BAA2B,CAAC;IAExE,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,MAAM,CAAC;IACvC,OAAO,IAAI,QAAQ,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;IAClE,OAAO,IAAI,SAAS,CAAC,CAAC,OAAO,KAAK,SAAS,MAAM,CAAC;IAClD,OAAO,IAAI,SAAS,CAAC,CAAC,SAAS,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACzE,OAAO,IAAI,aAAa,CAAC;IACzB,OAAO,IAAI,SAAS,CAAC,CAAC,IAAI,0CAA0C,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/F,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvF,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,UAAkB;IAC3D,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,GAAG,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SACnE,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AACpD,CAAC"}
|
package/dist/exporters/html.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/exporters/html.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,IAAW,QAyIpH"}
|
package/dist/exporters/html.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
// Emplacement absolu : M:\workspace\extensions\docstodev\src\exporters\html.ts
|
|
2
|
-
import { writeFileSync } from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
export function exportToHTML(docsDir, markdownContent, mermaidGraph, lang = "fr") {
|
|
5
|
-
const lines = markdownContent.split('\n');
|
|
6
|
-
let htmlResult = "";
|
|
7
|
-
let inTable = false;
|
|
8
|
-
const formatText = (text) => {
|
|
9
|
-
return text
|
|
10
|
-
.replace(/`(.*?)`/g, '<code>$1</code>')
|
|
11
|
-
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
|
|
12
|
-
.replace(/\[(.*?)\]\((.*?)\)/g, '<a href="$2">$1</a>');
|
|
13
|
-
};
|
|
14
|
-
lines.forEach(line => {
|
|
15
|
-
let processed = line.trim();
|
|
16
|
-
if (processed.startsWith('|')) {
|
|
17
|
-
if (!inTable) {
|
|
18
|
-
htmlResult += '<div class="table-container"><table>';
|
|
19
|
-
inTable = true;
|
|
20
|
-
}
|
|
21
|
-
if (processed.includes('---'))
|
|
22
|
-
return;
|
|
23
|
-
const cells = processed.split('|').filter(c => c.trim() !== "");
|
|
24
|
-
const tag = (processed.includes('Module') || processed.includes('Type')) ? 'th' : 'td';
|
|
25
|
-
htmlResult += `<tr>${cells.map(c => `<${tag}>${formatText(c.trim())}</${tag}>`).join('')}</tr>`;
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
else if (inTable) {
|
|
29
|
-
htmlResult += '</table></div>';
|
|
30
|
-
inTable = false;
|
|
31
|
-
}
|
|
32
|
-
if (processed.includes('├─') || processed.includes('└─') || processed.includes('│')) {
|
|
33
|
-
const treeLine = line
|
|
34
|
-
.replace(/├─/g, '<span class="branch">├─</span>')
|
|
35
|
-
.replace(/└─/g, '<span class="branch">└─</span>')
|
|
36
|
-
.replace(/│/g, '<span class="pipe">│</span>');
|
|
37
|
-
htmlResult += `<div class="tree-line">${formatText(treeLine)}</div>`;
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (processed.startsWith('# ')) {
|
|
41
|
-
htmlResult += `<h1>${processed.replace('# ', '')}</h1>`;
|
|
42
|
-
}
|
|
43
|
-
else if (processed.startsWith('## ')) {
|
|
44
|
-
htmlResult += `<h2>${processed.replace('## ', '')}</h2>`;
|
|
45
|
-
}
|
|
46
|
-
else if (processed.startsWith('### ')) {
|
|
47
|
-
if (htmlResult.includes('</section>'))
|
|
48
|
-
htmlResult += '</section>';
|
|
49
|
-
htmlResult += `<section class="component-card"><h3 class="comp-title">${formatText(processed.replace('### ', ''))}</h3>`;
|
|
50
|
-
}
|
|
51
|
-
else if (processed.startsWith('•') || processed.startsWith('- ') || processed.startsWith('* ')) {
|
|
52
|
-
htmlResult += `<div class="list-item">${formatText(processed.replace(/^[\-\*•]\s+/, ''))}</div>`;
|
|
53
|
-
}
|
|
54
|
-
else if (processed.length > 0) {
|
|
55
|
-
htmlResult += `<p>${formatText(processed)}</p>`;
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
if (htmlResult.includes('<section'))
|
|
59
|
-
htmlResult += '</section>';
|
|
60
|
-
const html = `<!DOCTYPE html>
|
|
61
|
-
<html lang="${lang}" data-theme="dark">
|
|
62
|
-
<head>
|
|
63
|
-
<meta charset="UTF-8">
|
|
64
|
-
<title>DocsToDev | Rapport Technique</title>
|
|
65
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500&family=Fira+Code:wght@400&display=swap" rel="stylesheet">
|
|
66
|
-
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
|
67
|
-
<style>
|
|
68
|
-
:root[data-theme="dark"] {
|
|
69
|
-
--bg: #0d1117; --card: #161b22; --text: #c9d1d9; --text-dim: #8b949e;
|
|
70
|
-
--accent: #58a6ff; --border: #30363d; --code-bg: rgba(110, 118, 129, 0.2);
|
|
71
|
-
--code-text: #ff7b72; --h-color: #f0f6fc;
|
|
72
|
-
}
|
|
73
|
-
:root[data-theme="light"] {
|
|
74
|
-
--bg: #ffffff; --card: #f8f9fa; --text: #24292f; --text-dim: #57606a;
|
|
75
|
-
--accent: #0969da; --border: #d0d7de; --code-bg: #afb8c133;
|
|
76
|
-
--code-text: #cf222e; --h-color: #1b1f24;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
body { font-family: 'Inter', sans-serif; background: var(--bg); color: var(--text); padding: 2rem; line-height: 1.6; font-weight: 300; transition: background 0.3s; }
|
|
80
|
-
.container { max-width: 1100px; margin: auto; }
|
|
81
|
-
|
|
82
|
-
.controls { position: sticky; top: 10px; display: flex; gap: 1rem; margin-bottom: 2rem; z-index: 100; }
|
|
83
|
-
#search { flex: 1; padding: 12px 20px; border-radius: 25px; border: 1px solid var(--border); background: var(--card); color: var(--text); outline: none; font-weight: 300; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
|
|
84
|
-
.btn { padding: 10px 20px; border-radius: 25px; cursor: pointer; border: 1px solid var(--border); background: var(--card); color: var(--text); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 1px; }
|
|
85
|
-
.pdf-btn { background: #238636; color: white; border: none; }
|
|
86
|
-
|
|
87
|
-
h1 { font-weight: 500; font-size: 2.2rem; color: var(--accent); letter-spacing: -1px; }
|
|
88
|
-
h2 { font-weight: 400; color: var(--h-color); border-bottom: 1px solid var(--border); padding-bottom: 10px; margin-top: 3.5rem; }
|
|
89
|
-
|
|
90
|
-
.mermaid { background: var(--card); padding: 1.5rem; border-radius: 12px; border: 1px solid var(--border); margin: 1.5rem 0; overflow: auto; }
|
|
91
|
-
.component-card { background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 1.5rem; margin-bottom: 1.5rem; }
|
|
92
|
-
.comp-title { margin: 0 0 1rem 0 !important; color: var(--accent) !important; font-weight: 400; font-size: 1.2rem; border-bottom: 1px solid var(--border); padding-bottom: 10px !important; }
|
|
93
|
-
|
|
94
|
-
.tree-line { font-family: 'Fira Code', monospace; font-size: 0.85rem; color: var(--text-dim); white-space: pre; line-height: 1.4; }
|
|
95
|
-
.branch { color: var(--accent); opacity: 0.7; }
|
|
96
|
-
|
|
97
|
-
.table-container { margin: 1.5rem 0; border-radius: 8px; border: 1px solid var(--border); overflow: hidden; }
|
|
98
|
-
table { width: 100%; border-collapse: collapse; font-size: 0.9rem; }
|
|
99
|
-
th { background: rgba(88, 166, 255, 0.05); color: var(--accent); font-weight: 500; text-align: left; padding: 12px; border-bottom: 1px solid var(--border); }
|
|
100
|
-
td { padding: 10px 12px; border-bottom: 1px solid var(--border); }
|
|
101
|
-
|
|
102
|
-
code { font-family: 'Fira Code', monospace; background: var(--code-bg); color: var(--code-text); padding: 2px 6px; border-radius: 4px; font-size: 0.9em; font-weight: 400; }
|
|
103
|
-
a { color: var(--accent); text-decoration: none; }
|
|
104
|
-
.list-item { margin-bottom: 8px; }
|
|
105
|
-
.list-item::before { content: "•"; color: var(--accent); margin-right: 12px; font-weight: bold; }
|
|
106
|
-
|
|
107
|
-
@media print { .controls { display: none; } body { padding: 0; } .container { max-width: 100%; border: none; } }
|
|
108
|
-
</style>
|
|
109
|
-
</head>
|
|
110
|
-
<body>
|
|
111
|
-
<div class="container">
|
|
112
|
-
<div class="controls">
|
|
113
|
-
<input type="text" id="search" placeholder="Rechercher par nom, rôle, technologie...">
|
|
114
|
-
<button class="btn pdf-btn" onclick="window.print()">📥 Imprimer / PDF</button>
|
|
115
|
-
<button class="btn" onclick="toggleTheme()">🌓 Theme</button>
|
|
116
|
-
</div>
|
|
117
|
-
|
|
118
|
-
<h2>📊 Graphe des Dépendances</h2>
|
|
119
|
-
<div class="mermaid">
|
|
120
|
-
graph TD
|
|
121
|
-
${mermaidGraph || "A[Projet] --> B[Initialisation]"}
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<div id="content-area">${htmlResult}</div>
|
|
125
|
-
</div>
|
|
126
|
-
|
|
127
|
-
<script>
|
|
128
|
-
mermaid.initialize({ startOnLoad: true, theme: 'dark', securityLevel: 'loose' });
|
|
129
|
-
function toggleTheme() {
|
|
130
|
-
const html = document.documentElement;
|
|
131
|
-
const next = html.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
|
|
132
|
-
html.setAttribute('data-theme', next);
|
|
133
|
-
localStorage.setItem('docs-theme', next);
|
|
134
|
-
}
|
|
135
|
-
document.documentElement.setAttribute('data-theme', localStorage.getItem('docs-theme') || 'dark');
|
|
136
|
-
|
|
137
|
-
document.getElementById('search').addEventListener('input', (e) => {
|
|
138
|
-
const term = e.target.value.toLowerCase();
|
|
139
|
-
document.querySelectorAll('.component-card, .tree-line, .table-container').forEach(el => {
|
|
140
|
-
el.style.display = el.innerText.toLowerCase().includes(term) ? '' : 'none';
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
</script>
|
|
144
|
-
</body>
|
|
145
|
-
</html>`;
|
|
146
|
-
writeFileSync(path.join(docsDir, "report.html"), html);
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=html.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/exporters/html.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|