@enokdev/springdocs-mcp 1.1.0

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.
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Service pour accéder et traiter la documentation Spring Boot
3
+ */
4
+ export declare class SpringBootDocsService {
5
+ private readonly baseUrl;
6
+ private readonly springProjectsUrl;
7
+ private readonly springGuideUrl;
8
+ private readonly springBootVersion;
9
+ private turndownService;
10
+ constructor();
11
+ /**
12
+ * Recherche dans tous les projets Spring
13
+ */
14
+ searchSpringProjects(query: string, limit?: number): Promise<any[]>;
15
+ /**
16
+ * Récupère les détails d'un projet Spring spécifique
17
+ */
18
+ getSpringProject(projectName: string): Promise<string>;
19
+ /**
20
+ * Récupère tous les guides Spring disponibles
21
+ */
22
+ getAllSpringGuides(category?: string, limit?: number): Promise<any[]>;
23
+ /**
24
+ * Liste des projets Spring populaires
25
+ */
26
+ private getPopularSpringProjects;
27
+ /**
28
+ * Liste des guides Spring populaires
29
+ */
30
+ private getPopularSpringGuides;
31
+ searchDocumentation(query: string, docType?: string, limit?: number): Promise<any[]>;
32
+ /**
33
+ * Récupère un guide Spring Boot spécifique
34
+ */
35
+ getGuide(guideId: string): Promise<string>;
36
+ /**
37
+ * Récupère une section de la documentation de référence
38
+ */
39
+ getReference(section: string, subsection?: string): Promise<string>;
40
+ /**
41
+ * Recherche des concepts Spring Boot
42
+ */
43
+ searchConcepts(concept: string, category?: string): Promise<any>;
44
+ /**
45
+ * Recherche dans les guides Spring Boot
46
+ */
47
+ private searchGuides;
48
+ /**
49
+ * Recherche dans la documentation de référence
50
+ */
51
+ private searchReference;
52
+ /**
53
+ * Recherche dans la documentation de l'API
54
+ */
55
+ private searchAPI;
56
+ /**
57
+ * Nettoie le HTML pour une meilleure conversion en Markdown
58
+ */
59
+ private cleanHtml;
60
+ /**
61
+ * Base de connaissances des concepts Spring Boot
62
+ */
63
+ private getSpringBootConcepts;
64
+ }
65
+ //# sourceMappingURL=springboot-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"springboot-docs.d.ts","sourceRoot":"","sources":["../../src/services/springboot-docs.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAW;IAC7C,OAAO,CAAC,eAAe,CAAkB;;IASzC;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IA0D5D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuC5D;;OAEG;IACG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IA+C9D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6DhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoExB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,EAAE,KAAK,GAAE,MAAW;IA6BpF;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BhD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCzE;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA0BvD;;OAEG;YACW,YAAY;IA2B1B;;OAEG;YACW,eAAe;IAyB7B;;OAEG;YACW,SAAS;IAsBvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA4E9B"}
@@ -0,0 +1,549 @@
1
+ import fetch from 'node-fetch';
2
+ import * as cheerio from 'cheerio';
3
+ import TurndownService from 'turndown';
4
+ /**
5
+ * Service pour accéder et traiter la documentation Spring Boot
6
+ */
7
+ export class SpringBootDocsService {
8
+ baseUrl = 'https://docs.spring.io';
9
+ springProjectsUrl = 'https://spring.io/projects';
10
+ springGuideUrl = 'https://spring.io/guides';
11
+ springBootVersion = '3.2.0'; // Version par défaut
12
+ turndownService;
13
+ constructor() {
14
+ this.turndownService = new TurndownService({
15
+ headingStyle: 'atx',
16
+ codeBlockStyle: 'fenced',
17
+ });
18
+ }
19
+ /**
20
+ * Recherche dans tous les projets Spring
21
+ */
22
+ async searchSpringProjects(query, limit = 10) {
23
+ try {
24
+ const response = await fetch(this.springProjectsUrl);
25
+ if (!response.ok) {
26
+ throw new Error('Impossible d\'accéder à la page des projets Spring');
27
+ }
28
+ const html = await response.text();
29
+ const $ = cheerio.load(html);
30
+ const projects = [];
31
+ // Extraire les projets depuis la page
32
+ $('.project-list .project, .project-item, .card').each((index, element) => {
33
+ const $project = $(element);
34
+ const title = $project.find('h2, h3, .title, .project-title').first().text().trim();
35
+ const description = $project.find('p, .description, .summary').first().text().trim();
36
+ const link = $project.find('a').first().attr('href');
37
+ if (title && (title.toLowerCase().includes(query.toLowerCase()) ||
38
+ description.toLowerCase().includes(query.toLowerCase()))) {
39
+ projects.push({
40
+ type: 'spring-project',
41
+ title: title,
42
+ description: description,
43
+ url: link?.startsWith('http') ? link : `https://spring.io${link}`,
44
+ });
45
+ }
46
+ });
47
+ // Si peu de résultats, ajouter des projets populaires
48
+ if (projects.length < 3) {
49
+ const popularProjects = this.getPopularSpringProjects()
50
+ .filter(project => project.title.toLowerCase().includes(query.toLowerCase()) ||
51
+ project.description.toLowerCase().includes(query.toLowerCase()) ||
52
+ project.keywords.some((k) => k.toLowerCase().includes(query.toLowerCase())));
53
+ projects.push(...popularProjects);
54
+ }
55
+ return projects.slice(0, limit);
56
+ }
57
+ catch (error) {
58
+ console.error('Erreur lors de la recherche des projets Spring:', error);
59
+ // Fallback sur les projets populaires
60
+ return this.getPopularSpringProjects()
61
+ .filter(project => project.title.toLowerCase().includes(query.toLowerCase()) ||
62
+ project.description.toLowerCase().includes(query.toLowerCase()))
63
+ .slice(0, limit);
64
+ }
65
+ }
66
+ /**
67
+ * Récupère les détails d'un projet Spring spécifique
68
+ */
69
+ async getSpringProject(projectName) {
70
+ try {
71
+ const url = `${this.springProjectsUrl}/${projectName}`;
72
+ const response = await fetch(url);
73
+ if (!response.ok) {
74
+ throw new Error(`Projet non trouvé: ${projectName}`);
75
+ }
76
+ const html = await response.text();
77
+ const $ = cheerio.load(html);
78
+ // Extrait le contenu principal du projet
79
+ const content = $('.project-overview, .content, main, .project-details').first();
80
+ if (content.length === 0) {
81
+ throw new Error('Contenu du projet non trouvé');
82
+ }
83
+ // Nettoie et convertit en Markdown
84
+ this.cleanHtml($, content);
85
+ const markdown = this.turndownService.turndown(content.html() || '');
86
+ // Ajouter des informations supplémentaires
87
+ const version = $('.version, .current-version').first().text().trim();
88
+ const status = $('.status, .project-status').first().text().trim();
89
+ let result = `# Projet Spring: ${projectName}\n\n`;
90
+ if (version)
91
+ result += `**Version actuelle:** ${version}\n\n`;
92
+ if (status)
93
+ result += `**Statut:** ${status}\n\n`;
94
+ result += markdown;
95
+ return result;
96
+ }
97
+ catch (error) {
98
+ console.error(`Erreur lors de la récupération du projet ${projectName}:`, error);
99
+ throw new Error(`Impossible de récupérer le projet: ${projectName}`);
100
+ }
101
+ }
102
+ /**
103
+ * Récupère tous les guides Spring disponibles
104
+ */
105
+ async getAllSpringGuides(category, limit = 20) {
106
+ try {
107
+ const response = await fetch(this.springGuideUrl);
108
+ if (!response.ok) {
109
+ throw new Error('Impossible d\'accéder à la page des guides Spring');
110
+ }
111
+ const html = await response.text();
112
+ const $ = cheerio.load(html);
113
+ const guides = [];
114
+ // Extraire les guides depuis la page
115
+ $('.guide-list .guide, .guide-item, .card').each((index, element) => {
116
+ const $guide = $(element);
117
+ const title = $guide.find('h2, h3, .title, .guide-title').first().text().trim();
118
+ const description = $guide.find('p, .description, .summary').first().text().trim();
119
+ const link = $guide.find('a').first().attr('href');
120
+ const guideCategory = $guide.find('.category, .tag').first().text().trim();
121
+ if (title && (!category || guideCategory.toLowerCase().includes(category.toLowerCase()))) {
122
+ guides.push({
123
+ type: 'spring-guide',
124
+ title: title,
125
+ description: description,
126
+ category: guideCategory,
127
+ url: link?.startsWith('http') ? link : `https://spring.io${link}`,
128
+ id: link?.split('/').pop()?.replace('.html', '') || title.toLowerCase().replace(/\s+/g, '-'),
129
+ });
130
+ }
131
+ });
132
+ // Si peu de résultats, ajouter des guides populaires
133
+ if (guides.length < 5) {
134
+ const popularGuides = this.getPopularSpringGuides();
135
+ guides.push(...popularGuides);
136
+ }
137
+ return guides.slice(0, limit);
138
+ }
139
+ catch (error) {
140
+ console.error('Erreur lors de la récupération des guides Spring:', error);
141
+ // Fallback sur les guides populaires
142
+ return this.getPopularSpringGuides().slice(0, limit);
143
+ }
144
+ }
145
+ /**
146
+ * Liste des projets Spring populaires
147
+ */
148
+ getPopularSpringProjects() {
149
+ return [
150
+ {
151
+ type: 'spring-project',
152
+ title: 'Spring Boot',
153
+ description: 'Créez des applications Spring de qualité production facilement',
154
+ url: 'https://spring.io/projects/spring-boot',
155
+ keywords: ['boot', 'microservices', 'web', 'standalone'],
156
+ },
157
+ {
158
+ type: 'spring-project',
159
+ title: 'Spring Framework',
160
+ description: 'Le framework Java le plus populaire pour créer des applications d\'entreprise',
161
+ url: 'https://spring.io/projects/spring-framework',
162
+ keywords: ['framework', 'core', 'mvc', 'ioc', 'dependency injection'],
163
+ },
164
+ {
165
+ type: 'spring-project',
166
+ title: 'Spring Data',
167
+ description: 'Fournit un modèle de programmation familier pour l\'accès aux données',
168
+ url: 'https://spring.io/projects/spring-data',
169
+ keywords: ['data', 'jpa', 'mongodb', 'redis', 'repository'],
170
+ },
171
+ {
172
+ type: 'spring-project',
173
+ title: 'Spring Security',
174
+ description: 'Framework de sécurité puissant et hautement personnalisable',
175
+ url: 'https://spring.io/projects/spring-security',
176
+ keywords: ['security', 'authentication', 'authorization', 'oauth'],
177
+ },
178
+ {
179
+ type: 'spring-project',
180
+ title: 'Spring Cloud',
181
+ description: 'Outils pour développer rapidement des patterns de systèmes distribués',
182
+ url: 'https://spring.io/projects/spring-cloud',
183
+ keywords: ['cloud', 'microservices', 'distributed', 'netflix'],
184
+ },
185
+ {
186
+ type: 'spring-project',
187
+ title: 'Spring Integration',
188
+ description: 'Implémentation des Enterprise Integration Patterns',
189
+ url: 'https://spring.io/projects/spring-integration',
190
+ keywords: ['integration', 'messaging', 'endpoints', 'channels'],
191
+ },
192
+ {
193
+ type: 'spring-project',
194
+ title: 'Spring Batch',
195
+ description: 'Framework pour le traitement batch robuste',
196
+ url: 'https://spring.io/projects/spring-batch',
197
+ keywords: ['batch', 'processing', 'jobs', 'steps'],
198
+ },
199
+ {
200
+ type: 'spring-project',
201
+ title: 'Spring WebFlux',
202
+ description: 'Framework web réactif pour Spring',
203
+ url: 'https://spring.io/projects/spring-framework',
204
+ keywords: ['reactive', 'webflux', 'non-blocking', 'async'],
205
+ },
206
+ ];
207
+ }
208
+ /**
209
+ * Liste des guides Spring populaires
210
+ */
211
+ getPopularSpringGuides() {
212
+ return [
213
+ {
214
+ type: 'spring-guide',
215
+ title: 'Building a RESTful Web Service',
216
+ description: 'Apprendre à créer un service web RESTful avec Spring Boot',
217
+ category: 'Web',
218
+ url: 'https://spring.io/guides/gs/rest-service/',
219
+ id: 'gs-rest-service',
220
+ },
221
+ {
222
+ type: 'spring-guide',
223
+ title: 'Building an Application with Spring Boot',
224
+ description: 'Apprendre à construire une application avec une configuration minimale',
225
+ category: 'Getting Started',
226
+ url: 'https://spring.io/guides/gs/spring-boot/',
227
+ id: 'gs-spring-boot',
228
+ },
229
+ {
230
+ type: 'spring-guide',
231
+ title: 'Accessing Data with JPA',
232
+ description: 'Apprendre à travailler avec la persistance de données JPA',
233
+ category: 'Data',
234
+ url: 'https://spring.io/guides/gs/accessing-data-jpa/',
235
+ id: 'gs-accessing-data-jpa',
236
+ },
237
+ {
238
+ type: 'spring-guide',
239
+ title: 'Securing a Web Application',
240
+ description: 'Apprendre à protéger votre application web avec Spring Security',
241
+ category: 'Security',
242
+ url: 'https://spring.io/guides/gs/securing-web/',
243
+ id: 'gs-securing-web',
244
+ },
245
+ {
246
+ type: 'spring-guide',
247
+ title: 'Building a RESTful Web Service with Spring Boot Actuator',
248
+ description: 'Apprendre à créer un service prêt pour la production',
249
+ category: 'Production',
250
+ url: 'https://spring.io/guides/gs/actuator-service/',
251
+ id: 'gs-actuator-service',
252
+ },
253
+ {
254
+ type: 'spring-guide',
255
+ title: 'Testing the Web Layer',
256
+ description: 'Apprendre à tester les applications Spring Boot',
257
+ category: 'Testing',
258
+ url: 'https://spring.io/guides/gs/testing-web/',
259
+ id: 'gs-testing-web',
260
+ },
261
+ {
262
+ type: 'spring-guide',
263
+ title: 'Building a Reactive RESTful Web Service',
264
+ description: 'Créer des services web réactifs avec Spring WebFlux',
265
+ category: 'Reactive',
266
+ url: 'https://spring.io/guides/gs/reactive-rest-service/',
267
+ id: 'gs-reactive-rest-service',
268
+ },
269
+ {
270
+ type: 'spring-guide',
271
+ title: 'Consuming a RESTful Web Service',
272
+ description: 'Apprendre à récupérer des données depuis un endpoint REST',
273
+ category: 'Web',
274
+ url: 'https://spring.io/guides/gs/consuming-rest/',
275
+ id: 'gs-consuming-rest',
276
+ },
277
+ ];
278
+ }
279
+ async searchDocumentation(query, docType = 'all', limit = 10) {
280
+ const results = [];
281
+ try {
282
+ // Recherche dans les guides
283
+ if (docType === 'all' || docType === 'guides') {
284
+ const guideResults = await this.searchGuides(query, Math.ceil(limit / 3));
285
+ results.push(...guideResults);
286
+ }
287
+ // Recherche dans la documentation de référence
288
+ if (docType === 'all' || docType === 'reference') {
289
+ const refResults = await this.searchReference(query, Math.ceil(limit / 3));
290
+ results.push(...refResults);
291
+ }
292
+ // Recherche dans l'API documentation
293
+ if (docType === 'all' || docType === 'api') {
294
+ const apiResults = await this.searchAPI(query, Math.ceil(limit / 3));
295
+ results.push(...apiResults);
296
+ }
297
+ return results.slice(0, limit);
298
+ }
299
+ catch (error) {
300
+ console.error('Erreur lors de la recherche dans la documentation:', error);
301
+ throw new Error('Impossible de rechercher dans la documentation Spring Boot');
302
+ }
303
+ }
304
+ /**
305
+ * Récupère un guide Spring Boot spécifique
306
+ */
307
+ async getGuide(guideId) {
308
+ try {
309
+ const url = `${this.baseUrl}/guides/${guideId}/`;
310
+ const response = await fetch(url);
311
+ if (!response.ok) {
312
+ throw new Error(`Guide non trouvé: ${guideId}`);
313
+ }
314
+ const html = await response.text();
315
+ const $ = cheerio.load(html);
316
+ // Extrait le contenu principal du guide
317
+ const content = $('.content, .guide-content, main').first();
318
+ if (content.length === 0) {
319
+ throw new Error('Contenu du guide non trouvé');
320
+ }
321
+ // Nettoie et convertit en Markdown
322
+ this.cleanHtml($, content);
323
+ const markdown = this.turndownService.turndown(content.html() || '');
324
+ return `# Guide Spring Boot: ${guideId}\n\n${markdown}`;
325
+ }
326
+ catch (error) {
327
+ console.error(`Erreur lors de la récupération du guide ${guideId}:`, error);
328
+ throw new Error(`Impossible de récupérer le guide: ${guideId}`);
329
+ }
330
+ }
331
+ /**
332
+ * Récupère une section de la documentation de référence
333
+ */
334
+ async getReference(section, subsection) {
335
+ try {
336
+ let url = `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/reference/html/`;
337
+ if (subsection) {
338
+ url += `${section}.html#${subsection}`;
339
+ }
340
+ else {
341
+ url += `${section}.html`;
342
+ }
343
+ const response = await fetch(url);
344
+ if (!response.ok) {
345
+ throw new Error(`Section de référence non trouvée: ${section}`);
346
+ }
347
+ const html = await response.text();
348
+ const $ = cheerio.load(html);
349
+ // Extrait le contenu principal
350
+ const content = $('.content, .section, main').first();
351
+ if (content.length === 0) {
352
+ throw new Error('Contenu de la section non trouvé');
353
+ }
354
+ this.cleanHtml($, content);
355
+ const markdown = this.turndownService.turndown(content.html() || '');
356
+ return `# Spring Boot Reference: ${section}\n\n${markdown}`;
357
+ }
358
+ catch (error) {
359
+ console.error(`Erreur lors de la récupération de la référence ${section}:`, error);
360
+ throw new Error(`Impossible de récupérer la section de référence: ${section}`);
361
+ }
362
+ }
363
+ /**
364
+ * Recherche des concepts Spring Boot
365
+ */
366
+ async searchConcepts(concept, category) {
367
+ try {
368
+ const concepts = this.getSpringBootConcepts();
369
+ const results = {};
370
+ for (const [cat, conceptList] of Object.entries(concepts)) {
371
+ if (category && cat !== category)
372
+ continue;
373
+ const matches = conceptList.filter((c) => c.name.toLowerCase().includes(concept.toLowerCase()) ||
374
+ c.description.toLowerCase().includes(concept.toLowerCase()) ||
375
+ c.keywords.some((k) => k.toLowerCase().includes(concept.toLowerCase())));
376
+ if (matches.length > 0) {
377
+ results[cat] = matches;
378
+ }
379
+ }
380
+ return results;
381
+ }
382
+ catch (error) {
383
+ console.error('Erreur lors de la recherche de concepts:', error);
384
+ throw new Error('Impossible de rechercher les concepts Spring Boot');
385
+ }
386
+ }
387
+ /**
388
+ * Recherche dans les guides Spring Boot
389
+ */
390
+ async searchGuides(query, limit) {
391
+ // Liste des guides populaires Spring Boot
392
+ const guides = [
393
+ { id: 'gs-rest-service', title: 'Building a RESTful Web Service', description: 'Learn how to create a RESTful web service with Spring Boot' },
394
+ { id: 'gs-spring-boot', title: 'Building an Application with Spring Boot', description: 'Learn how to build an application with minimal configuration' },
395
+ { id: 'gs-accessing-data-jpa', title: 'Accessing Data with JPA', description: 'Learn how to work with JPA data persistence' },
396
+ { id: 'gs-securing-web', title: 'Securing a Web Application', description: 'Learn how to protect your web application with Spring Security' },
397
+ { id: 'gs-consuming-rest', title: 'Consuming a RESTful Web Service', description: 'Learn how to retrieve data from a REST endpoint' },
398
+ { id: 'gs-testing-web', title: 'Testing the Web Layer', description: 'Learn how to test Spring Boot applications' },
399
+ { id: 'gs-actuator-service', title: 'Building a RESTful Web Service with Spring Boot Actuator', description: 'Learn how to create a production-ready service' },
400
+ ];
401
+ return guides
402
+ .filter(guide => guide.title.toLowerCase().includes(query.toLowerCase()) ||
403
+ guide.description.toLowerCase().includes(query.toLowerCase()))
404
+ .slice(0, limit)
405
+ .map(guide => ({
406
+ type: 'guide',
407
+ title: guide.title,
408
+ url: `${this.baseUrl}/guides/${guide.id}/`,
409
+ description: guide.description,
410
+ id: guide.id,
411
+ }));
412
+ }
413
+ /**
414
+ * Recherche dans la documentation de référence
415
+ */
416
+ async searchReference(query, limit) {
417
+ const sections = [
418
+ { name: 'web', title: 'Web Applications', description: 'Building web applications with Spring Boot' },
419
+ { name: 'data', title: 'Data Access', description: 'Working with databases and data sources' },
420
+ { name: 'security', title: 'Security', description: 'Securing Spring Boot applications' },
421
+ { name: 'actuator', title: 'Production-ready Features', description: 'Monitoring and managing applications' },
422
+ { name: 'testing', title: 'Testing', description: 'Testing Spring Boot applications' },
423
+ { name: 'configuration', title: 'Configuration', description: 'Configuring Spring Boot applications' },
424
+ ];
425
+ return sections
426
+ .filter(section => section.title.toLowerCase().includes(query.toLowerCase()) ||
427
+ section.description.toLowerCase().includes(query.toLowerCase()))
428
+ .slice(0, limit)
429
+ .map(section => ({
430
+ type: 'reference',
431
+ title: section.title,
432
+ url: `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/reference/html/${section.name}.html`,
433
+ description: section.description,
434
+ section: section.name,
435
+ }));
436
+ }
437
+ /**
438
+ * Recherche dans la documentation de l'API
439
+ */
440
+ async searchAPI(query, limit) {
441
+ const apiSections = [
442
+ { name: 'Configuration Properties', description: 'Spring Boot configuration properties reference' },
443
+ { name: 'Auto-configuration Classes', description: 'List of auto-configuration classes' },
444
+ { name: 'Starter Dependencies', description: 'Available Spring Boot starters' },
445
+ { name: 'Test Utilities', description: 'Testing utilities and annotations' },
446
+ ];
447
+ return apiSections
448
+ .filter(section => section.name.toLowerCase().includes(query.toLowerCase()) ||
449
+ section.description.toLowerCase().includes(query.toLowerCase()))
450
+ .slice(0, limit)
451
+ .map(section => ({
452
+ type: 'api',
453
+ title: section.name,
454
+ url: `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/api/`,
455
+ description: section.description,
456
+ }));
457
+ }
458
+ /**
459
+ * Nettoie le HTML pour une meilleure conversion en Markdown
460
+ */
461
+ cleanHtml($, content) {
462
+ // Supprime les éléments indésirables
463
+ content.find('script, style, nav, .sidebar, .toc, .feedback').remove();
464
+ // Nettoie les classes CSS
465
+ content.find('*').each((index, element) => {
466
+ $(element).removeAttr('class').removeAttr('style').removeAttr('id');
467
+ });
468
+ }
469
+ /**
470
+ * Base de connaissances des concepts Spring Boot
471
+ */
472
+ getSpringBootConcepts() {
473
+ return {
474
+ core: [
475
+ {
476
+ name: 'Auto-configuration',
477
+ description: 'Mécanisme qui configure automatiquement Spring Boot basé sur les dépendances présentes',
478
+ keywords: ['auto-configuration', '@EnableAutoConfiguration', 'conditional'],
479
+ examples: ['@SpringBootApplication', '@Conditional', 'spring.factories'],
480
+ },
481
+ {
482
+ name: 'Profiles',
483
+ description: 'Permet de séparer les parties de la configuration d\'application pour différents environnements',
484
+ keywords: ['profiles', '@Profile', 'application.properties'],
485
+ examples: ['application-dev.properties', '@Profile("prod")', 'spring.profiles.active'],
486
+ },
487
+ {
488
+ name: 'Properties',
489
+ description: 'Système de configuration externalisée de Spring Boot',
490
+ keywords: ['properties', '@ConfigurationProperties', '@Value'],
491
+ examples: ['application.yml', '@ConfigurationProperties', 'Environment'],
492
+ },
493
+ ],
494
+ web: [
495
+ {
496
+ name: 'Spring MVC',
497
+ description: 'Framework web intégré pour construire des applications web et des API REST',
498
+ keywords: ['mvc', '@Controller', '@RestController', 'web'],
499
+ examples: ['@GetMapping', '@PostMapping', '@RequestMapping'],
500
+ },
501
+ {
502
+ name: 'Embedded Server',
503
+ description: 'Serveur web intégré (Tomcat, Jetty, Undertow) pour déployer des applications standalone',
504
+ keywords: ['embedded', 'tomcat', 'jetty', 'server'],
505
+ examples: ['server.port', 'TomcatServletWebServerFactory'],
506
+ },
507
+ ],
508
+ data: [
509
+ {
510
+ name: 'Spring Data JPA',
511
+ description: 'Simplifie l\'accès aux données avec JPA/Hibernate',
512
+ keywords: ['jpa', 'hibernate', '@Entity', '@Repository'],
513
+ examples: ['JpaRepository', '@Query', '@Transactional'],
514
+ },
515
+ {
516
+ name: 'Database Migration',
517
+ description: 'Gestion des évolutions de schéma de base de données',
518
+ keywords: ['flyway', 'liquibase', 'migration', 'schema'],
519
+ examples: ['db/migration', 'V1__Initial_schema.sql'],
520
+ },
521
+ ],
522
+ security: [
523
+ {
524
+ name: 'Spring Security',
525
+ description: 'Framework de sécurité pour l\'authentification et l\'autorisation',
526
+ keywords: ['security', 'authentication', 'authorization', '@Secured'],
527
+ examples: ['SecurityConfig', '@PreAuthorize', 'HttpSecurity'],
528
+ },
529
+ ],
530
+ testing: [
531
+ {
532
+ name: 'Test Slices',
533
+ description: 'Tests d\'intégration focalisés sur des couches spécifiques',
534
+ keywords: ['test', '@WebMvcTest', '@DataJpaTest', 'slice'],
535
+ examples: ['@SpringBootTest', '@TestConfiguration', 'TestRestTemplate'],
536
+ },
537
+ ],
538
+ production: [
539
+ {
540
+ name: 'Actuator',
541
+ description: 'Fonctionnalités de monitoring et gestion pour les applications en production',
542
+ keywords: ['actuator', 'monitoring', 'health', 'metrics'],
543
+ examples: ['/actuator/health', '/actuator/metrics', 'HealthIndicator'],
544
+ },
545
+ ],
546
+ };
547
+ }
548
+ }
549
+ //# sourceMappingURL=springboot-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"springboot-docs.js","sourceRoot":"","sources":["../../src/services/springboot-docs.ts"],"names":[],"mappings":"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"}