Skip to content

Commit e3db4c8

Browse files
committed
feat: enforce strict semicolon rules in ESLint and Prettier
- Add 'semi': ['error', 'always'] rule to all ESLint configurations - Prettier already had 'semi': true configured - Automatically fix all missing semicolons across the codebase - Ensure consistent code style with mandatory semicolons This enforces a professional coding standard with strict semicolon usage throughout TypeScript, JavaScript, and Vue files.
1 parent 00a6245 commit e3db4c8

33 files changed

Lines changed: 1232 additions & 1220 deletions

.prettierrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"semi": false,
2+
"semi": true,
33
"singleQuote": true,
44
"trailingComma": "es5",
55
"tabWidth": 2,

docs/.vitepress/theme/index.ts

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import DefaultTheme from 'vitepress/theme'
2-
import type { Theme } from 'vitepress'
3-
import './custom.css'
1+
import DefaultTheme from 'vitepress/theme';
2+
import type { Theme } from 'vitepress';
3+
import './custom.css';
44

55
export default {
66
extends: DefaultTheme,
@@ -9,8 +9,8 @@ export default {
99
// Initialize Mermaid when the app starts
1010
const initMermaid = async () => {
1111
try {
12-
console.log('Initializing Mermaid...')
13-
const { default: mermaid } = await import('mermaid')
12+
console.log('Initializing Mermaid...');
13+
const { default: mermaid } = await import('mermaid');
1414

1515
mermaid.initialize({
1616
startOnLoad: false,
@@ -23,109 +23,109 @@ export default {
2323
secondaryColor: '#f3f4f6',
2424
tertiaryColor: '#ffffff',
2525
},
26-
})
26+
});
2727

28-
console.log('Mermaid initialized successfully')
28+
console.log('Mermaid initialized successfully');
2929

3030
// Function to render mermaid diagrams
3131
const renderMermaidDiagrams = async () => {
3232
// Try multiple selectors to find mermaid code blocks
3333
let mermaidElements = document.querySelectorAll(
3434
'pre code.language-mermaid'
35-
)
35+
);
3636

3737
// If not found, try alternative selectors
3838
if (mermaidElements.length === 0) {
3939
mermaidElements = document.querySelectorAll(
4040
'code.language-mermaid'
41-
)
41+
);
4242
}
4343
if (mermaidElements.length === 0) {
4444
mermaidElements = document.querySelectorAll(
4545
'pre[class*="language-mermaid"] code'
46-
)
46+
);
4747
}
4848
if (mermaidElements.length === 0) {
4949
mermaidElements = document.querySelectorAll(
5050
'[class*="language-mermaid"]'
51-
)
51+
);
5252
}
5353

5454
console.log(
5555
`Found ${mermaidElements.length} mermaid diagrams to render`
56-
)
56+
);
5757

5858
for (let i = 0; i < mermaidElements.length; i++) {
59-
const element = mermaidElements[i] as HTMLElement
59+
const element = mermaidElements[i] as HTMLElement;
6060

6161
// Skip if already processed
6262
if (element.getAttribute('data-mermaid-processed')) {
63-
continue
63+
continue;
6464
}
6565

66-
let graphDefinition = element.textContent || ''
66+
let graphDefinition = element.textContent || '';
6767

6868
// Clean up the text content - remove "mermaid" prefix if present
6969
if (graphDefinition.startsWith('mermaid')) {
70-
graphDefinition = graphDefinition.substring(7).trim()
70+
graphDefinition = graphDefinition.substring(7).trim();
7171
}
7272

73-
const graphId = `mermaid-diagram-${Date.now()}-${i}`
73+
const graphId = `mermaid-diagram-${Date.now()}-${i}`;
7474

7575
// Mark as being processed
76-
element.setAttribute('data-mermaid-processed', 'processing')
76+
element.setAttribute('data-mermaid-processed', 'processing');
7777

7878
// Create container for the diagram
79-
const container = document.createElement('div')
80-
container.className = 'mermaid-diagram'
81-
container.id = graphId
79+
const container = document.createElement('div');
80+
container.className = 'mermaid-diagram';
81+
container.id = graphId;
8282

8383
try {
8484
// Render the mermaid diagram
85-
const { svg } = await mermaid.render(graphId, graphDefinition)
86-
container.innerHTML = svg
85+
const { svg } = await mermaid.render(graphId, graphDefinition);
86+
container.innerHTML = svg;
8787

8888
// Find the correct parent element to replace (the <pre> element)
89-
const preElement = element.parentElement // This should be <pre>
89+
const preElement = element.parentElement; // This should be <pre>
9090
console.log('Element structure:', {
9191
element: element.tagName,
9292
parent: preElement?.tagName,
9393
grandparent: preElement?.parentElement?.tagName,
94-
})
94+
});
9595

9696
if (preElement && preElement.tagName === 'PRE') {
9797
// Replace only the <pre> element, not its parent
98-
preElement.parentElement?.replaceChild(container, preElement)
98+
preElement.parentElement?.replaceChild(container, preElement);
9999
} else {
100100
// Fallback: replace the element itself if structure is different
101-
element.parentElement?.replaceChild(container, element)
101+
element.parentElement?.replaceChild(container, element);
102102
}
103103
} catch (error) {
104-
console.error('Mermaid rendering failed:', error)
104+
console.error('Mermaid rendering failed:', error);
105105
// Keep the original code block on error
106-
element.setAttribute('data-mermaid-processed', 'error')
106+
element.setAttribute('data-mermaid-processed', 'error');
107107
}
108108
}
109-
}
109+
};
110110

111111
// Render diagrams on initial load
112-
renderMermaidDiagrams()
112+
renderMermaidDiagrams();
113113

114114
// Re-render on route changes
115115
router.onAfterRouteChange = () => {
116-
setTimeout(renderMermaidDiagrams, 100)
117-
}
116+
setTimeout(renderMermaidDiagrams, 100);
117+
};
118118
} catch (error) {
119-
console.error('Failed to initialize Mermaid:', error)
119+
console.error('Failed to initialize Mermaid:', error);
120120
}
121-
}
121+
};
122122

123123
// Initialize after DOM is ready
124124
if (document.readyState === 'loading') {
125-
document.addEventListener('DOMContentLoaded', initMermaid)
125+
document.addEventListener('DOMContentLoaded', initMermaid);
126126
} else {
127-
initMermaid()
127+
initMermaid();
128128
}
129129
}
130130
},
131-
} satisfies Theme
131+
} satisfies Theme;

docs/api/index.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,19 @@ All API responses follow this structure:
114114

115115
```typescript
116116
interface ApiResponse<T> {
117-
success: boolean
118-
data?: T
117+
success: boolean;
118+
data?: T;
119119
error?: {
120-
code: string
121-
message: string
122-
details?: any
123-
}
120+
code: string;
121+
message: string;
122+
details?: any;
123+
};
124124
meta?: {
125-
timestamp: Date
126-
requestId: string
127-
version: string
128-
executionTime?: number
129-
}
125+
timestamp: Date;
126+
requestId: string;
127+
version: string;
128+
executionTime?: number;
129+
};
130130
}
131131
```
132132

@@ -300,10 +300,10 @@ const response = await fetch('http://localhost:3000/api/search', {
300300
searchMode: 'natural',
301301
limit: 10,
302302
}),
303-
})
303+
});
304304

305-
const result = await response.json()
306-
console.log(result.data.results)
305+
const result = await response.json();
306+
console.log(result.data.results);
307307
```
308308

309309
### Python Examples

docs/architecture/index.md

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ Data access is abstracted through service interfaces:
146146

147147
```typescript
148148
interface IUserService {
149-
getUserById(id: string): Promise<User>
150-
createUser(userData: CreateUserRequest): Promise<User>
149+
getUserById(id: string): Promise<User>;
150+
createUser(userData: CreateUserRequest): Promise<User>;
151151
}
152152
```
153153

@@ -156,17 +156,17 @@ interface IUserService {
156156
Different search modes implemented as strategies:
157157

158158
```typescript
159-
type SearchMode = 'natural' | 'boolean' | 'semantic'
159+
type SearchMode = 'natural' | 'boolean' | 'semantic';
160160

161161
class SearchService {
162162
private getSearchStrategy(mode: SearchMode): SearchStrategy {
163163
switch (mode) {
164164
case 'natural':
165-
return new NaturalSearchStrategy()
165+
return new NaturalSearchStrategy();
166166
case 'boolean':
167-
return new BooleanSearchStrategy()
167+
return new BooleanSearchStrategy();
168168
case 'semantic':
169-
return new SemanticSearchStrategy()
169+
return new SemanticSearchStrategy();
170170
}
171171
}
172172
}
@@ -179,10 +179,10 @@ Event-driven analytics and monitoring:
179179
```typescript
180180
class SearchService extends EventEmitter {
181181
async search(request: SearchRequest): Promise<SearchResponse> {
182-
this.emit('search:started', request)
183-
const result = await this.performSearch(request)
184-
this.emit('search:completed', { request, result })
185-
return result
182+
this.emit('search:started', request);
183+
const result = await this.performSearch(request);
184+
this.emit('search:completed', { request, result });
185+
return result;
186186
}
187187
}
188188
```
@@ -376,8 +376,8 @@ class AppError extends Error {
376376
public statusCode: number = 500,
377377
public details?: any
378378
) {
379-
super(message)
380-
this.name = 'AppError'
379+
super(message);
380+
this.name = 'AppError';
381381
}
382382
}
383383

@@ -388,10 +388,10 @@ export const errorHandler = (
388388
res: Response,
389389
next: NextFunction
390390
): void => {
391-
const statusCode = error instanceof AppError ? error.statusCode : 500
392-
const code = error instanceof AppError ? error.code : 'INTERNAL_ERROR'
391+
const statusCode = error instanceof AppError ? error.statusCode : 500;
392+
const code = error instanceof AppError ? error.code : 'INTERNAL_ERROR';
393393

394-
logger.error('Request failed:', { error, request: req.body })
394+
logger.error('Request failed:', { error, request: req.body });
395395

396396
res.status(statusCode).json({
397397
success: false,
@@ -404,8 +404,8 @@ export const errorHandler = (
404404
timestamp: new Date().toISOString(),
405405
requestId: req.headers['x-request-id'],
406406
},
407-
})
408-
}
407+
});
408+
};
409409
```
410410
411411
## Monitoring & Observability
@@ -428,25 +428,25 @@ export const errorHandler = (
428428
```typescript
429429
interface Metrics {
430430
requests: {
431-
total: number
432-
successful: number
433-
failed: number
434-
averageResponseTime: number
435-
}
431+
total: number;
432+
successful: number;
433+
failed: number;
434+
averageResponseTime: number;
435+
};
436436
searches: {
437-
total: number
438-
cacheHits: number
439-
averageExecutionTime: number
440-
}
437+
total: number;
438+
cacheHits: number;
439+
averageExecutionTime: number;
440+
};
441441
database: {
442-
activeConnections: number
443-
queryCount: number
444-
averageQueryTime: number
445-
}
442+
activeConnections: number;
443+
queryCount: number;
444+
averageQueryTime: number;
445+
};
446446
cache: {
447-
hitRate: number
448-
memoryUsage: number
449-
}
447+
hitRate: number;
448+
memoryUsage: number;
449+
};
450450
}
451451
```
452452
@@ -457,32 +457,32 @@ interface Metrics {
457457
```typescript
458458
interface Config {
459459
server: {
460-
port: number
461-
environment: 'development' | 'production' | 'test'
462-
}
460+
port: number;
461+
environment: 'development' | 'production' | 'test';
462+
};
463463
database: {
464-
host: string
465-
port: number
466-
username: string
467-
password: string
468-
database: string
469-
connectionLimit: number
470-
}
464+
host: string;
465+
port: number;
466+
username: string;
467+
password: string;
468+
database: string;
469+
connectionLimit: number;
470+
};
471471
cache: {
472-
host: string
473-
port: number
474-
password?: string
475-
}
472+
host: string;
473+
port: number;
474+
password?: string;
475+
};
476476
security: {
477-
jwtSecret: string
478-
jwtExpiresIn: string
479-
bcryptRounds: number
480-
}
477+
jwtSecret: string;
478+
jwtExpiresIn: string;
479+
bcryptRounds: number;
480+
};
481481
ai: {
482-
openaiApiKey: string
483-
model: string
484-
maxTokens: number
485-
}
482+
openaiApiKey: string;
483+
model: string;
484+
maxTokens: number;
485+
};
486486
}
487487
```
488488

0 commit comments

Comments
 (0)