@enokdev/springdocs-mcp 1.2.2 → 1.2.4

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,593 @@
1
+ import fetch from 'node-fetch';
2
+ import * as cheerio from 'cheerio';
3
+ import TurndownService from 'turndown';
4
+ import { CacheService } from './cache.js';
5
+ /**
6
+ * Optimized Spring Boot Documentation Service with caching and enhanced features
7
+ */
8
+ export class SpringBootDocsServiceOptimized {
9
+ baseUrl = 'https://docs.spring.io';
10
+ springProjectsUrl = 'https://spring.io/projects';
11
+ springGuideUrl = 'https://spring.io/guides';
12
+ springBootVersion = '3.5.6';
13
+ turndownService;
14
+ cache;
15
+ REQUEST_TIMEOUT = 10000;
16
+ MAX_RETRIES = 3;
17
+ constructor() {
18
+ this.turndownService = new TurndownService({
19
+ headingStyle: 'atx',
20
+ codeBlockStyle: 'fenced',
21
+ });
22
+ this.cache = new CacheService();
23
+ // Cleanup cache every hour
24
+ setInterval(() => this.cache.cleanup(), 60 * 60 * 1000);
25
+ }
26
+ /**
27
+ * Search Spring projects with caching and retry logic
28
+ */
29
+ async searchSpringProjects(query, limit = 10) {
30
+ const cacheKey = `projects:${query}:${limit}`;
31
+ const cached = this.cache.get(cacheKey);
32
+ if (cached) {
33
+ console.error(`✅ Cache hit for projects search: ${query}`);
34
+ return cached;
35
+ }
36
+ console.error(`🔍 Fetching projects for: ${query}`);
37
+ try {
38
+ const response = await this.fetchWithRetry(this.springProjectsUrl);
39
+ if (!response.ok) {
40
+ throw new Error('Unable to access Spring projects page');
41
+ }
42
+ const html = await response.text();
43
+ const $ = cheerio.load(html);
44
+ const projects = [];
45
+ $('.project-list .project, .project-item, .card').each((index, element) => {
46
+ const $project = $(element);
47
+ const title = $project.find('h2, h3, .title, .project-title').first().text().trim();
48
+ const description = $project.find('p, .description, .summary').first().text().trim();
49
+ const link = $project.find('a').first().attr('href');
50
+ if (title && (title.toLowerCase().includes(query.toLowerCase()) ||
51
+ description.toLowerCase().includes(query.toLowerCase()))) {
52
+ projects.push({
53
+ type: 'spring-project',
54
+ title: title,
55
+ description: description,
56
+ url: link?.startsWith('http') ? link : `https://spring.io${link}`,
57
+ });
58
+ }
59
+ });
60
+ // If few results, add popular projects
61
+ if (projects.length < 3) {
62
+ const popularProjects = this.getPopularSpringProjects()
63
+ .filter(project => project.title.toLowerCase().includes(query.toLowerCase()) ||
64
+ project.description.toLowerCase().includes(query.toLowerCase()) ||
65
+ project.keywords.some((k) => k.toLowerCase().includes(query.toLowerCase())));
66
+ projects.push(...popularProjects);
67
+ }
68
+ const results = projects.slice(0, limit);
69
+ this.cache.set(cacheKey, results);
70
+ return results;
71
+ }
72
+ catch (error) {
73
+ console.error('Error searching Spring projects:', error);
74
+ // Fallback to popular projects
75
+ return this.getPopularSpringProjects()
76
+ .filter(project => project.title.toLowerCase().includes(query.toLowerCase()) ||
77
+ project.description.toLowerCase().includes(query.toLowerCase()))
78
+ .slice(0, limit);
79
+ }
80
+ }
81
+ /**
82
+ * Get Spring project details with caching
83
+ */
84
+ async getSpringProject(projectName) {
85
+ const cacheKey = `project:${projectName}`;
86
+ const cached = this.cache.get(cacheKey);
87
+ if (cached) {
88
+ console.error(`✅ Cache hit for project: ${projectName}`);
89
+ return cached;
90
+ }
91
+ console.error(`🔍 Fetching project: ${projectName}`);
92
+ try {
93
+ const url = `${this.springProjectsUrl}/${projectName}`;
94
+ const response = await this.fetchWithRetry(url);
95
+ if (!response.ok) {
96
+ throw new Error(`Project not found: ${projectName}`);
97
+ }
98
+ const html = await response.text();
99
+ const $ = cheerio.load(html);
100
+ const content = $('.project-overview, .content, main, .project-details').first();
101
+ if (content.length === 0) {
102
+ throw new Error('Project content not found');
103
+ }
104
+ this.cleanHtml($, content);
105
+ const markdown = this.turndownService.turndown(content.html() || '');
106
+ const version = $('.version, .current-version').first().text().trim();
107
+ const status = $('.status, .project-status').first().text().trim();
108
+ let result = `# Spring Project: ${projectName}\n\n`;
109
+ if (version)
110
+ result += `**Current Version:** ${version}\n\n`;
111
+ if (status)
112
+ result += `**Status:** ${status}\n\n`;
113
+ result += markdown;
114
+ this.cache.setLongTerm(cacheKey, result);
115
+ return result;
116
+ }
117
+ catch (error) {
118
+ console.error(`Error retrieving project ${projectName}:`, error);
119
+ throw new Error(`Unable to retrieve project: ${projectName}`);
120
+ }
121
+ }
122
+ /**
123
+ * Get all Spring guides with caching
124
+ */
125
+ async getAllSpringGuides(category, limit = 20) {
126
+ const cacheKey = `guides:${category || 'all'}:${limit}`;
127
+ const cached = this.cache.get(cacheKey);
128
+ if (cached) {
129
+ console.error(`✅ Cache hit for guides: ${category || 'all'}`);
130
+ return cached;
131
+ }
132
+ console.error(`🔍 Fetching guides for category: ${category || 'all'}`);
133
+ try {
134
+ const response = await this.fetchWithRetry(this.springGuideUrl);
135
+ if (!response.ok) {
136
+ throw new Error('Unable to access Spring guides page');
137
+ }
138
+ const html = await response.text();
139
+ const $ = cheerio.load(html);
140
+ const guides = [];
141
+ $('.guide-list .guide, .guide-item, .card').each((index, element) => {
142
+ const $guide = $(element);
143
+ const title = $guide.find('h2, h3, .title, .guide-title').first().text().trim();
144
+ const description = $guide.find('p, .description, .summary').first().text().trim();
145
+ const link = $guide.find('a').first().attr('href');
146
+ const guideCategory = $guide.find('.category, .tag').first().text().trim();
147
+ if (title && (!category || guideCategory.toLowerCase().includes(category.toLowerCase()))) {
148
+ guides.push({
149
+ type: 'spring-guide',
150
+ title: title,
151
+ description: description,
152
+ category: guideCategory,
153
+ url: link?.startsWith('http') ? link : `https://spring.io${link}`,
154
+ id: link?.split('/').pop()?.replace('.html', '') || title.toLowerCase().replace(/\s+/g, '-'),
155
+ });
156
+ }
157
+ });
158
+ // If few results, add popular guides
159
+ if (guides.length < 5) {
160
+ const popularGuides = this.getPopularSpringGuides();
161
+ guides.push(...popularGuides);
162
+ }
163
+ const results = guides.slice(0, limit);
164
+ this.cache.set(cacheKey, results);
165
+ return results;
166
+ }
167
+ catch (error) {
168
+ console.error('Error retrieving Spring guides:', error);
169
+ return this.getPopularSpringGuides().slice(0, limit);
170
+ }
171
+ }
172
+ /**
173
+ * Get specific guide with enhanced error handling and caching
174
+ */
175
+ async getGuide(guideId) {
176
+ const cacheKey = `guide:${guideId}`;
177
+ const cached = this.cache.get(cacheKey);
178
+ if (cached) {
179
+ console.error(`✅ Cache hit for guide: ${guideId}`);
180
+ return cached;
181
+ }
182
+ console.error(`🔍 Fetching guide: ${guideId}`);
183
+ try {
184
+ let content = '';
185
+ let sourceUrl = '';
186
+ // Multiple sources to try
187
+ const sources = [
188
+ { url: `https://spring.io/guides/${guideId}/`, name: 'spring.io' },
189
+ { url: `https://raw.githubusercontent.com/spring-guides/${guideId}/main/README.adoc`, name: 'GitHub raw' },
190
+ { url: `https://github.com/spring-guides/${guideId}/blob/main/README.adoc`, name: 'GitHub blob' }
191
+ ];
192
+ for (const source of sources) {
193
+ try {
194
+ console.error(`Trying ${source.name}: ${source.url}`);
195
+ const response = await this.fetchWithRetry(source.url);
196
+ if (response.ok) {
197
+ content = await response.text();
198
+ sourceUrl = source.url;
199
+ console.error(`✅ Success with ${source.name} (${content.length} chars)`);
200
+ break;
201
+ }
202
+ else {
203
+ console.error(`❌ ${source.name} failed: ${response.status}`);
204
+ }
205
+ }
206
+ catch (error) {
207
+ console.error(`❌ ${source.name} error:`, error instanceof Error ? error.message : 'Unknown error');
208
+ }
209
+ }
210
+ if (!content) {
211
+ return this.generateGuideNotFoundMessage(guideId);
212
+ }
213
+ let result = '';
214
+ // Process different content types
215
+ if (content.includes('<html') || content.includes('<!DOCTYPE')) {
216
+ // HTML content
217
+ result = this.processHtmlGuide(content, guideId, sourceUrl);
218
+ }
219
+ else if (content.includes('=') || content.includes(':toc:') || content.includes('== ')) {
220
+ // AsciiDoc content
221
+ result = this.processAsciiDocGuide(content, guideId, sourceUrl);
222
+ }
223
+ else {
224
+ // Plain text
225
+ result = `# Spring Guide: ${guideId}\n\n*Source: ${sourceUrl}*\n\n\`\`\`\n${content}\n\`\`\``;
226
+ }
227
+ this.cache.setLongTerm(cacheKey, result);
228
+ return result;
229
+ }
230
+ catch (error) {
231
+ console.error(`Error retrieving guide ${guideId}:`, error);
232
+ return this.generateGuideErrorMessage(guideId, error);
233
+ }
234
+ }
235
+ /**
236
+ * Get reference documentation with caching
237
+ */
238
+ async getReference(section, subsection) {
239
+ const cacheKey = `reference:${section}:${subsection || 'main'}`;
240
+ const cached = this.cache.get(cacheKey);
241
+ if (cached) {
242
+ console.error(`✅ Cache hit for reference: ${section}`);
243
+ return cached;
244
+ }
245
+ console.error(`🔍 Fetching reference: ${section}`);
246
+ try {
247
+ let url = `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/reference/html/`;
248
+ if (subsection) {
249
+ url += `${section}.html#${subsection}`;
250
+ }
251
+ else {
252
+ url += `${section}.html`;
253
+ }
254
+ const response = await this.fetchWithRetry(url);
255
+ if (!response.ok) {
256
+ throw new Error(`Reference section not found: ${section}`);
257
+ }
258
+ const html = await response.text();
259
+ const $ = cheerio.load(html);
260
+ const content = $('.content, .section, main').first();
261
+ if (content.length === 0) {
262
+ throw new Error('Section content not found');
263
+ }
264
+ this.cleanHtml($, content);
265
+ const markdown = this.turndownService.turndown(content.html() || '');
266
+ const result = `# Spring Boot Reference: ${section}\n\n${markdown}`;
267
+ this.cache.setLongTerm(cacheKey, result);
268
+ return result;
269
+ }
270
+ catch (error) {
271
+ console.error(`Error retrieving reference ${section}:`, error);
272
+ throw new Error(`Unable to retrieve reference section: ${section}`);
273
+ }
274
+ }
275
+ /**
276
+ * Search concepts with caching
277
+ */
278
+ async searchConcepts(concept, category) {
279
+ const cacheKey = `concepts:${concept}:${category || 'all'}`;
280
+ const cached = this.cache.get(cacheKey);
281
+ if (cached) {
282
+ console.error(`✅ Cache hit for concepts: ${concept}`);
283
+ return cached;
284
+ }
285
+ console.error(`🔍 Searching concepts: ${concept}`);
286
+ try {
287
+ const concepts = this.getSpringBootConcepts();
288
+ const results = {};
289
+ for (const [cat, conceptList] of Object.entries(concepts)) {
290
+ if (category && cat !== category)
291
+ continue;
292
+ const matches = conceptList.filter((c) => c.name.toLowerCase().includes(concept.toLowerCase()) ||
293
+ c.description.toLowerCase().includes(concept.toLowerCase()) ||
294
+ c.keywords.some((k) => k.toLowerCase().includes(concept.toLowerCase())));
295
+ if (matches.length > 0) {
296
+ results[cat] = matches;
297
+ }
298
+ }
299
+ this.cache.setLongTerm(cacheKey, results);
300
+ return results;
301
+ }
302
+ catch (error) {
303
+ console.error('Error searching concepts:', error);
304
+ throw new Error('Unable to search Spring Boot concepts');
305
+ }
306
+ }
307
+ /**
308
+ * Enhanced documentation search with parallel processing
309
+ */
310
+ async searchDocumentation(query, docType = 'all', limit = 10) {
311
+ const cacheKey = `docs:${query}:${docType}:${limit}`;
312
+ const cached = this.cache.get(cacheKey);
313
+ if (cached) {
314
+ console.error(`✅ Cache hit for documentation search: ${query}`);
315
+ return cached;
316
+ }
317
+ console.error(`🔍 Searching documentation: ${query}`);
318
+ try {
319
+ const searchPromises = [];
320
+ if (docType === 'all' || docType === 'guides') {
321
+ searchPromises.push(this.searchGuides(query, Math.ceil(limit / 3)));
322
+ }
323
+ if (docType === 'all' || docType === 'reference') {
324
+ searchPromises.push(this.searchReference(query, Math.ceil(limit / 3)));
325
+ }
326
+ if (docType === 'all' || docType === 'api') {
327
+ searchPromises.push(this.searchAPI(query, Math.ceil(limit / 3)));
328
+ }
329
+ const results = await Promise.all(searchPromises);
330
+ const flatResults = results.flat().slice(0, limit);
331
+ this.cache.set(cacheKey, flatResults);
332
+ return flatResults;
333
+ }
334
+ catch (error) {
335
+ console.error('Error searching documentation:', error);
336
+ throw new Error('Failed to search Spring Boot documentation');
337
+ }
338
+ }
339
+ // Private helper methods
340
+ async fetchWithRetry(url, timeout = this.REQUEST_TIMEOUT, retries = this.MAX_RETRIES) {
341
+ for (let attempt = 1; attempt <= retries; attempt++) {
342
+ const controller = new AbortController();
343
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
344
+ try {
345
+ const response = await fetch(url, {
346
+ signal: controller.signal,
347
+ headers: {
348
+ 'User-Agent': 'Spring-Docs-MCP/1.2.3',
349
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
350
+ 'Accept-Language': 'en-US,en;q=0.9'
351
+ }
352
+ });
353
+ clearTimeout(timeoutId);
354
+ return response;
355
+ }
356
+ catch (error) {
357
+ clearTimeout(timeoutId);
358
+ if (attempt === retries)
359
+ throw error;
360
+ console.error(`Retry ${attempt}/${retries} for ${url}:`, error instanceof Error ? error.message : 'Unknown error');
361
+ await new Promise(resolve => setTimeout(resolve, 1000 * attempt)); // Exponential backoff
362
+ }
363
+ }
364
+ throw new Error('All retry attempts failed');
365
+ }
366
+ processHtmlGuide(content, guideId, sourceUrl) {
367
+ console.log('Processing HTML content...');
368
+ const $ = cheerio.load(content);
369
+ let mainContent = $('.guide-content, .content, main, .container .row .col-md-8, .markdown-body, article').first();
370
+ if (mainContent.length === 0) {
371
+ const bodyContent = $('.guide-body, .guide-content, .content').first();
372
+ if (bodyContent.length > 0) {
373
+ mainContent = bodyContent;
374
+ }
375
+ else {
376
+ mainContent = $('body');
377
+ }
378
+ }
379
+ if (mainContent.length > 0) {
380
+ this.cleanHtml($, mainContent);
381
+ const markdown = this.turndownService.turndown(mainContent.html() || '');
382
+ return `# Spring Guide: ${guideId}\n\n*Source: ${sourceUrl}*\n\n${markdown}`;
383
+ }
384
+ return this.generateGuideNotFoundMessage(guideId);
385
+ }
386
+ processAsciiDocGuide(content, guideId, sourceUrl) {
387
+ console.log('Processing AsciiDoc content...');
388
+ let processedContent = content
389
+ .replace(/^= (.+)$/gm, '# $1')
390
+ .replace(/^== (.+)$/gm, '## $1')
391
+ .replace(/^=== (.+)$/gm, '### $1')
392
+ .replace(/^==== (.+)$/gm, '#### $1')
393
+ .replace(/^\[source,(\w+)\]$/gm, '')
394
+ .replace(/^----$/gm, '```')
395
+ .replace(/^\+\+\+\+$/gm, '```');
396
+ return `# Spring Guide: ${guideId}\n\n*Source: ${sourceUrl}*\n\n${processedContent}`;
397
+ }
398
+ generateGuideNotFoundMessage(guideId) {
399
+ return `# Spring Guide: ${guideId}
400
+
401
+ ❌ **Guide not found**
402
+
403
+ The guide "${guideId}" could not be retrieved from any source.
404
+
405
+ ## 📚 Popular guides available:
406
+ - \`gs-rest-service\` - Building a RESTful Web Service
407
+ - \`gs-spring-boot\` - Building an Application with Spring Boot
408
+ - \`gs-accessing-data-jpa\` - Accessing Data with JPA
409
+ - \`gs-securing-web\` - Securing a Web Application
410
+ - \`gs-actuator-service\` - Building a RESTful Web Service with Spring Boot Actuator
411
+ - \`gs-testing-web\` - Testing the Web Layer
412
+
413
+ ## 🔧 Alternative tools:
414
+ 1. \`get_all_spring_guides\` - See all available guides
415
+ 2. \`search_spring_docs\` - Search documentation
416
+
417
+ ## 💡 Identifier format:
418
+ The identifier should be in format: \`gs-guide-name\``;
419
+ }
420
+ generateGuideErrorMessage(guideId, error) {
421
+ return `# Spring Guide: ${guideId}
422
+
423
+ ❌ **Error retrieving guide**
424
+
425
+ The guide "${guideId}" could not be retrieved.
426
+
427
+ ## 🔧 Possible solutions:
428
+ 1. Check the guide identifier (format: \`gs-guide-name\`)
429
+ 2. Use \`get_all_spring_guides\` to see all available guides
430
+ 3. Use \`search_spring_docs\` to search documentation
431
+
432
+ ## 📚 Popular guides:
433
+ - \`gs-rest-service\` - Creating a RESTful Web Service
434
+ - \`gs-spring-boot\` - Building an Application with Spring Boot
435
+ - \`gs-accessing-data-jpa\` - Accessing Data with JPA
436
+ - \`gs-securing-web\` - Securing a Web Application
437
+
438
+ **Technical error:** ${error instanceof Error ? error.message : 'Unknown error'}`;
439
+ }
440
+ cleanHtml($, content) {
441
+ content.find('script, style, nav, .sidebar, .toc, .feedback').remove();
442
+ content.find('*').each((index, element) => {
443
+ $(element).removeAttr('class').removeAttr('style').removeAttr('id');
444
+ });
445
+ }
446
+ // Static data methods (unchanged from original)
447
+ getPopularSpringProjects() {
448
+ return [
449
+ {
450
+ type: 'spring-project',
451
+ title: 'Spring Boot',
452
+ description: 'Create stand-alone, production-grade Spring applications easily',
453
+ url: 'https://spring.io/projects/spring-boot',
454
+ keywords: ['boot', 'microservices', 'web', 'standalone'],
455
+ },
456
+ {
457
+ type: 'spring-project',
458
+ title: 'Spring Framework',
459
+ description: 'The most popular Java framework for building enterprise applications',
460
+ url: 'https://spring.io/projects/spring-framework',
461
+ keywords: ['framework', 'core', 'mvc', 'ioc', 'dependency injection'],
462
+ },
463
+ {
464
+ type: 'spring-project',
465
+ title: 'Spring Data',
466
+ description: 'Provides a familiar programming model for data access',
467
+ url: 'https://spring.io/projects/spring-data',
468
+ keywords: ['data', 'jpa', 'mongodb', 'redis', 'repository'],
469
+ },
470
+ {
471
+ type: 'spring-project',
472
+ title: 'Spring Security',
473
+ description: 'Powerful and highly customizable security framework',
474
+ url: 'https://spring.io/projects/spring-security',
475
+ keywords: ['security', 'authentication', 'authorization', 'oauth'],
476
+ },
477
+ {
478
+ type: 'spring-project',
479
+ title: 'Spring Cloud',
480
+ description: 'Tools for rapidly building distributed system patterns',
481
+ url: 'https://spring.io/projects/spring-cloud',
482
+ keywords: ['cloud', 'microservices', 'distributed', 'netflix'],
483
+ },
484
+ ];
485
+ }
486
+ getPopularSpringGuides() {
487
+ return [
488
+ {
489
+ type: 'spring-guide',
490
+ title: 'Building a RESTful Web Service',
491
+ description: 'Learn how to create a RESTful web service with Spring Boot',
492
+ category: 'Web',
493
+ url: 'https://spring.io/guides/gs/rest-service/',
494
+ id: 'gs-rest-service',
495
+ },
496
+ {
497
+ type: 'spring-guide',
498
+ title: 'Building an Application with Spring Boot',
499
+ description: 'Learn how to build an application with minimal configuration',
500
+ category: 'Getting Started',
501
+ url: 'https://spring.io/guides/gs/spring-boot/',
502
+ id: 'gs-spring-boot',
503
+ },
504
+ {
505
+ type: 'spring-guide',
506
+ title: 'Accessing Data with JPA',
507
+ description: 'Learn how to work with JPA data persistence',
508
+ category: 'Data',
509
+ url: 'https://spring.io/guides/gs/accessing-data-jpa/',
510
+ id: 'gs-accessing-data-jpa',
511
+ },
512
+ ];
513
+ }
514
+ async searchGuides(query, limit) {
515
+ const guides = [
516
+ { id: 'gs-rest-service', title: 'Building a RESTful Web Service', description: 'Learn how to create a RESTful web service with Spring Boot' },
517
+ { id: 'gs-spring-boot', title: 'Building an Application with Spring Boot', description: 'Learn how to build an application with minimal configuration' },
518
+ { id: 'gs-accessing-data-jpa', title: 'Accessing Data with JPA', description: 'Learn how to work with JPA data persistence' },
519
+ ];
520
+ return guides
521
+ .filter(guide => guide.title.toLowerCase().includes(query.toLowerCase()) ||
522
+ guide.description.toLowerCase().includes(query.toLowerCase()))
523
+ .slice(0, limit)
524
+ .map(guide => ({
525
+ type: 'guide',
526
+ title: guide.title,
527
+ url: `${this.springGuideUrl}/${guide.id}/`,
528
+ description: guide.description,
529
+ id: guide.id,
530
+ }));
531
+ }
532
+ async searchReference(query, limit) {
533
+ const sections = [
534
+ { name: 'web', title: 'Web Applications', description: 'Building web applications with Spring Boot' },
535
+ { name: 'data', title: 'Data Access', description: 'Working with databases and data sources' },
536
+ { name: 'security', title: 'Security', description: 'Securing Spring Boot applications' },
537
+ ];
538
+ return sections
539
+ .filter(section => section.title.toLowerCase().includes(query.toLowerCase()) ||
540
+ section.description.toLowerCase().includes(query.toLowerCase()))
541
+ .slice(0, limit)
542
+ .map(section => ({
543
+ type: 'reference',
544
+ title: section.title,
545
+ url: `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/reference/html/${section.name}.html`,
546
+ description: section.description,
547
+ section: section.name,
548
+ }));
549
+ }
550
+ async searchAPI(query, limit) {
551
+ const apiSections = [
552
+ { name: 'Configuration Properties', description: 'Spring Boot configuration properties reference' },
553
+ { name: 'Auto-configuration Classes', description: 'List of auto-configuration classes' },
554
+ ];
555
+ return apiSections
556
+ .filter(section => section.name.toLowerCase().includes(query.toLowerCase()) ||
557
+ section.description.toLowerCase().includes(query.toLowerCase()))
558
+ .slice(0, limit)
559
+ .map(section => ({
560
+ type: 'api',
561
+ title: section.name,
562
+ url: `${this.baseUrl}/spring-boot/docs/${this.springBootVersion}/api/`,
563
+ description: section.description,
564
+ }));
565
+ }
566
+ getSpringBootConcepts() {
567
+ return {
568
+ core: [
569
+ {
570
+ name: 'Auto-configuration',
571
+ description: 'Mechanism that automatically configures Spring Boot based on present dependencies',
572
+ keywords: ['auto-configuration', '@EnableAutoConfiguration', 'conditional'],
573
+ examples: ['@SpringBootApplication', '@Conditional', 'spring.factories'],
574
+ },
575
+ {
576
+ name: 'Profiles',
577
+ description: 'Allows separating parts of application configuration for different environments',
578
+ keywords: ['profiles', '@Profile', 'application.properties'],
579
+ examples: ['application-dev.properties', '@Profile("prod")', 'spring.profiles.active'],
580
+ },
581
+ ],
582
+ web: [
583
+ {
584
+ name: 'Spring MVC',
585
+ description: 'Integrated web framework for building web applications and REST APIs',
586
+ keywords: ['mvc', '@Controller', '@RestController', 'web'],
587
+ examples: ['@GetMapping', '@PostMapping', '@RequestMapping'],
588
+ },
589
+ ],
590
+ };
591
+ }
592
+ }
593
+ //# sourceMappingURL=springboot-docs-optimized.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"springboot-docs-optimized.js","sourceRoot":"","sources":["../../src/services/springboot-docs-optimized.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export class SpringBootDocsService {
8
8
  baseUrl = 'https://docs.spring.io';
9
9
  springProjectsUrl = 'https://spring.io/projects';
10
10
  springGuideUrl = 'https://spring.io/guides';
11
- springBootVersion = '3.2.0'; // Version par défaut
11
+ springBootVersion = '3.5.5'; // Version par défaut
12
12
  turndownService;
13
13
  constructor() {
14
14
  this.turndownService = new TurndownService({