mcp-code-context 3.6.0 → 3.6.2
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/CHANGELOG.md +46 -7
- package/HIRE_ME.md +234 -234
- package/INSTRUCTIONS.md +274 -274
- package/LICENSE +21 -21
- package/README.md +486 -486
- package/SECURITY.md +14 -14
- package/SPONSORS.md +104 -104
- package/dist/src/core/cacheManager.d.ts +11 -2
- package/dist/src/core/cacheManager.js +42 -33
- package/dist/src/core/cacheManager.js.map +1 -1
- package/dist/src/core/engine.d.ts +1 -1
- package/dist/src/core/engine.js +1 -1
- package/dist/src/core/validator.d.ts +1 -1
- package/dist/src/core/validator.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +237 -25
- package/dist/src/index.js.map +1 -1
- package/dist/src/operations/compress.d.ts +1 -1
- package/dist/src/operations/compress.js +1 -1
- package/dist/src/operations/confirmationStore.d.ts +3 -1
- package/dist/src/operations/confirmationStore.js +2 -1
- package/dist/src/operations/confirmationStore.js.map +1 -1
- package/dist/src/operations/read.d.ts +39 -1
- package/dist/src/operations/read.js +169 -16
- package/dist/src/operations/read.js.map +1 -1
- package/dist/src/operations/write.d.ts +3 -2
- package/dist/src/operations/write.js +7 -2
- package/dist/src/operations/write.js.map +1 -1
- package/dist/src/parsers/base.d.ts +3 -1
- package/dist/src/parsers/base.js +1 -1
- package/dist/src/parsers/base.js.map +1 -1
- package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
- package/dist/src/parsers/dartTreeSitter.js +5 -1
- package/dist/src/parsers/dartTreeSitter.js.map +1 -1
- package/dist/src/parsers/php.d.ts +1 -1
- package/dist/src/parsers/php.js +5 -1
- package/dist/src/parsers/php.js.map +1 -1
- package/dist/src/parsers/python.d.ts +1 -1
- package/dist/src/parsers/python.js +5 -1
- package/dist/src/parsers/python.js.map +1 -1
- package/dist/src/parsers/registry.d.ts +1 -1
- package/dist/src/parsers/registry.js +1 -1
- package/dist/src/parsers/typescript.d.ts +1 -1
- package/dist/src/parsers/typescript.js +9 -5
- package/dist/src/parsers/typescript.js.map +1 -1
- package/dist/src/utils/auditLogger.d.ts +1 -1
- package/dist/src/utils/auditLogger.js +1 -1
- package/dist/src/utils/backupManager.d.ts +1 -1
- package/dist/src/utils/backupManager.js +1 -1
- package/dist/src/utils/constants.d.ts +1 -1
- package/dist/src/utils/constants.js +1 -1
- package/dist/src/utils/diff.d.ts +1 -1
- package/dist/src/utils/diff.js +4 -4
- package/dist/src/utils/fileLock.d.ts +1 -1
- package/dist/src/utils/fileLock.js +1 -1
- package/dist/src/utils/fileWalker.d.ts +1 -1
- package/dist/src/utils/fileWalker.js +1 -1
- package/dist/src/utils/fileWatcher.d.ts +2 -1
- package/dist/src/utils/fileWatcher.js +12 -2
- package/dist/src/utils/fileWatcher.js.map +1 -1
- package/dist/src/utils/fuzzySearch.d.ts +1 -1
- package/dist/src/utils/fuzzySearch.js +1 -1
- package/dist/src/utils/logger.d.ts +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/utils/rateLimiter.d.ts +5 -1
- package/dist/src/utils/rateLimiter.js +5 -1
- package/dist/src/utils/rateLimiter.js.map +1 -1
- package/dist/src/utils/safeRegex.d.ts +1 -1
- package/dist/src/utils/safeRegex.js +1 -1
- package/dist/src/utils/streaming.d.ts +1 -1
- package/dist/src/utils/streaming.js +1 -1
- package/dist/src/utils/telemetry.d.ts +1 -1
- package/dist/src/utils/telemetry.js +1 -1
- package/llms.txt +5 -5
- package/package.json +3 -3
- package/scripts/replace-version.js +59 -59
- package/vitest.config.ts +37 -37
package/SECURITY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Security Policy - mcp-code-context v3.6.
|
|
1
|
+
# Security Policy - mcp-code-context v3.6.2
|
|
2
2
|
|
|
3
|
-
## 🔒 Security Improvements in v3.6.
|
|
3
|
+
## 🔒 Security Improvements in v3.6.2
|
|
4
4
|
|
|
5
5
|
This release addresses **all critical security vulnerabilities** from comprehensive adversarial audit, implements full middleware pipeline, and hardens all 13 tool handlers.
|
|
6
6
|
|
|
@@ -10,11 +10,11 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
10
10
|
|
|
11
11
|
### 1. Path Traversal (HIGH)
|
|
12
12
|
**CVSS Score**: 8.1 (High)
|
|
13
|
-
**Status**: ✅ FIXED in v3.2.0, **hardened in v3.6.
|
|
13
|
+
**Status**: ✅ FIXED in v3.2.0, **hardened in v3.6.2**
|
|
14
14
|
|
|
15
15
|
**Description**: Path traversal check occurred BEFORE path normalization, allowing bypass with absolute paths.
|
|
16
16
|
|
|
17
|
-
**Fix**: Check boundary AFTER `path.resolve()` normalization. In v3.6.
|
|
17
|
+
**Fix**: Check boundary AFTER `path.resolve()` normalization. In v3.6.2, **all 13 handlers** now require `projectRoot` and validate via `SecurityValidator`.
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -40,7 +40,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
40
40
|
|
|
41
41
|
### 4. ReDoS in searchPattern and readLines (MEDIUM)
|
|
42
42
|
**CVSS Score**: 5.3 (Medium)
|
|
43
|
-
**Status**: ✅ FIXED in v3.6.
|
|
43
|
+
**Status**: ✅ FIXED in v3.6.2
|
|
44
44
|
|
|
45
45
|
**Description**: User-provided regex patterns could cause catastrophic backtracking.
|
|
46
46
|
|
|
@@ -58,7 +58,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
58
58
|
|
|
59
59
|
### 6. extractSymbol API Mismatch (CRITICAL)
|
|
60
60
|
**CVSS Score**: 9.0 (Critical)
|
|
61
|
-
**Status**: ✅ FIXED in v3.6.
|
|
61
|
+
**Status**: ✅ FIXED in v3.6.2
|
|
62
62
|
|
|
63
63
|
**Description**: `read.ts` passed `content` as `symbolName` and real `symbolName` as `className`. Symbol extraction was 100% broken.
|
|
64
64
|
|
|
@@ -68,7 +68,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
68
68
|
|
|
69
69
|
### 7. Handlers Without Path Validation (HIGH)
|
|
70
70
|
**CVSS Score**: 8.5 (High)
|
|
71
|
-
**Status**: ✅ FIXED in v3.6.
|
|
71
|
+
**Status**: ✅ FIXED in v3.6.2
|
|
72
72
|
|
|
73
73
|
**Description**: `readLines`, `searchPattern`, `analyzeImpact`, `getSemanticRepoMap` had no path boundary check.
|
|
74
74
|
|
|
@@ -78,7 +78,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
78
78
|
|
|
79
79
|
### 8. renameSymbol Arbitrary Write (HIGH)
|
|
80
80
|
**CVSS Score**: 8.0 (High)
|
|
81
|
-
**Status**: ✅ FIXED in v3.6.
|
|
81
|
+
**Status**: ✅ FIXED in v3.6.2
|
|
82
82
|
|
|
83
83
|
**Description**: `renameSymbol` wrote dependent files without SecurityValidator check, using non-atomic writes.
|
|
84
84
|
|
|
@@ -88,7 +88,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
88
88
|
|
|
89
89
|
### 9. LCS Diff OOM (MEDIUM)
|
|
90
90
|
**CVSS Score**: 5.0 (Medium)
|
|
91
|
-
**Status**: ✅ FIXED in v3.6.
|
|
91
|
+
**Status**: ✅ FIXED in v3.6.2
|
|
92
92
|
|
|
93
93
|
**Description**: LCS diff algorithm is O(n²) memory — 10K-line files cause OOM.
|
|
94
94
|
|
|
@@ -101,16 +101,16 @@ This release addresses **all critical security vulnerabilities** from comprehens
|
|
|
101
101
|
### Defense in Depth
|
|
102
102
|
|
|
103
103
|
1. **Input Validation**
|
|
104
|
-
- Path boundary enforcement on ALL handlers (v3.6.
|
|
104
|
+
- Path boundary enforcement on ALL handlers (v3.6.2)
|
|
105
105
|
- File size limits (10MB per file, 50MB total)
|
|
106
106
|
- Regex sanitization + timeout (1s limit)
|
|
107
107
|
|
|
108
|
-
2. **Two-Phase Write Workflow** (v3.6.
|
|
108
|
+
2. **Two-Phase Write Workflow** (v3.6.2)
|
|
109
109
|
- Phase 1: Dry-run returns diff + confirmation token
|
|
110
110
|
- Phase 2: Apply with token (5-minute expiry)
|
|
111
111
|
- Max 50 pending operations
|
|
112
112
|
|
|
113
|
-
3. **Middleware Pipeline** (v3.6.
|
|
113
|
+
3. **Middleware Pipeline** (v3.6.2)
|
|
114
114
|
- Rate limiting (token bucket per operation)
|
|
115
115
|
- File locking (prevents concurrent writes)
|
|
116
116
|
- Audit logging (persistent `.mcp-audit-logs/`)
|
|
@@ -160,7 +160,7 @@ node dist-tests/tests/test-security.js
|
|
|
160
160
|
- [x] Syntax validation
|
|
161
161
|
- [x] Bounded memory in compress
|
|
162
162
|
|
|
163
|
-
### v3.6.
|
|
163
|
+
### v3.6.2 ✅
|
|
164
164
|
- [x] Regex timeout enforcement (safeRegexTest)
|
|
165
165
|
- [x] Rate limiting (token bucket)
|
|
166
166
|
- [x] File locking (concurrent write prevention)
|
|
@@ -174,4 +174,4 @@ node dist-tests/tests/test-security.js
|
|
|
174
174
|
---
|
|
175
175
|
|
|
176
176
|
**Last Updated**: 2026-04-24
|
|
177
|
-
**Version**: 3.6.
|
|
177
|
+
**Version**: 3.6.2
|
package/SPONSORS.md
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
# Sponsors & Supporters
|
|
2
|
-
|
|
3
|
-
Thank you to everyone who supports mcp-code-context! 🙏
|
|
4
|
-
|
|
5
|
-
Your contributions help keep this project:
|
|
6
|
-
- ✅ Free and open source
|
|
7
|
-
- ✅ Actively maintained
|
|
8
|
-
- ✅ Continuously improved
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## 💎 Diamond Sponsors ($100+/month)
|
|
13
|
-
|
|
14
|
-
*(No sponsors yet - be the first!)*
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 🥇 Gold Sponsors ($50-99/month)
|
|
19
|
-
|
|
20
|
-
*(No sponsors yet)*
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 🥈 Silver Sponsors ($25-49/month)
|
|
25
|
-
|
|
26
|
-
*(No sponsors yet)*
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 🥉 Bronze Supporters ($5-24/month)
|
|
31
|
-
|
|
32
|
-
*(No sponsors yet)*
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## ☕ One-Time Contributors
|
|
37
|
-
|
|
38
|
-
*(No contributors yet - be the first!)*
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 🌟 How to Become a Sponsor
|
|
43
|
-
|
|
44
|
-
See the [Support This Project](#support-this-project) section in the [README](README.md#support-this-project).
|
|
45
|
-
|
|
46
|
-
### Available Options:
|
|
47
|
-
|
|
48
|
-
**Monthly Memberships** (Ko-fi):
|
|
49
|
-
- **$5/month** - Supporter: Name in SPONSORS.md + Early access to release notes
|
|
50
|
-
- **$25/month** - Contributor: Priority support + Early access to features + Vote on roadmap
|
|
51
|
-
- **$100/month** - Sponsor: Feature requests + Monthly consultation + Logo in README
|
|
52
|
-
|
|
53
|
-
**One-Time Donations**:
|
|
54
|
-
- **Ko-fi**: https://ko-fi.com/achatainga
|
|
55
|
-
- **PayPal**: https://paypal.me/achatainga
|
|
56
|
-
- **Binance (USDT)**: See README for addresses
|
|
57
|
-
|
|
58
|
-
- **TRC20**: `0xa68d53f7853ce0175eb96aaad4a30c068ca96444`
|
|
59
|
-
- **ERC20**: `0xa68d53f7853ce0175eb96aaad4a30c068ca96444`
|
|
60
|
-
- **Binance Pay ID**: `367669339`
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## 📊 Transparency Report
|
|
65
|
-
|
|
66
|
-
### April 2025
|
|
67
|
-
- **Monthly Donations**: $0
|
|
68
|
-
- **One-Time Donations**: $0
|
|
69
|
-
- **Total Supporters**: 0
|
|
70
|
-
- **Expenses**: ~$20 (npm registry, testing credits, domain)
|
|
71
|
-
- **Time Invested**: ~40 hours
|
|
72
|
-
- **Net**: -$20
|
|
73
|
-
|
|
74
|
-
*(Updated monthly)*
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## 💼 Hire Me
|
|
79
|
-
|
|
80
|
-
Need custom MCP tools or AI integrations?
|
|
81
|
-
|
|
82
|
-
- **Rate**: $50-75/hour
|
|
83
|
-
- **Email**: a.chataing.a@gmail.com
|
|
84
|
-
- **Details**: [HIRE_ME.md](HIRE_ME.md)
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## ❤️ Non-Financial Support
|
|
89
|
-
|
|
90
|
-
Can't donate? No problem! You can still help:
|
|
91
|
-
|
|
92
|
-
- ⭐ Star the repo on GitHub
|
|
93
|
-
- 🐛 Report bugs or suggest features
|
|
94
|
-
- 📝 Improve documentation
|
|
95
|
-
- 🗣️ Share with others who might benefit
|
|
96
|
-
- 💬 Help other users in discussions
|
|
97
|
-
|
|
98
|
-
Every contribution matters, financial or not.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
**Thank you for supporting open source! 🚀**
|
|
103
|
-
|
|
104
|
-
*Built with ❤️ from Caracas, Venezuela 🇻🇪*
|
|
1
|
+
# Sponsors & Supporters
|
|
2
|
+
|
|
3
|
+
Thank you to everyone who supports mcp-code-context! 🙏
|
|
4
|
+
|
|
5
|
+
Your contributions help keep this project:
|
|
6
|
+
- ✅ Free and open source
|
|
7
|
+
- ✅ Actively maintained
|
|
8
|
+
- ✅ Continuously improved
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 💎 Diamond Sponsors ($100+/month)
|
|
13
|
+
|
|
14
|
+
*(No sponsors yet - be the first!)*
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 🥇 Gold Sponsors ($50-99/month)
|
|
19
|
+
|
|
20
|
+
*(No sponsors yet)*
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🥈 Silver Sponsors ($25-49/month)
|
|
25
|
+
|
|
26
|
+
*(No sponsors yet)*
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🥉 Bronze Supporters ($5-24/month)
|
|
31
|
+
|
|
32
|
+
*(No sponsors yet)*
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ☕ One-Time Contributors
|
|
37
|
+
|
|
38
|
+
*(No contributors yet - be the first!)*
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 🌟 How to Become a Sponsor
|
|
43
|
+
|
|
44
|
+
See the [Support This Project](#support-this-project) section in the [README](README.md#support-this-project).
|
|
45
|
+
|
|
46
|
+
### Available Options:
|
|
47
|
+
|
|
48
|
+
**Monthly Memberships** (Ko-fi):
|
|
49
|
+
- **$5/month** - Supporter: Name in SPONSORS.md + Early access to release notes
|
|
50
|
+
- **$25/month** - Contributor: Priority support + Early access to features + Vote on roadmap
|
|
51
|
+
- **$100/month** - Sponsor: Feature requests + Monthly consultation + Logo in README
|
|
52
|
+
|
|
53
|
+
**One-Time Donations**:
|
|
54
|
+
- **Ko-fi**: https://ko-fi.com/achatainga
|
|
55
|
+
- **PayPal**: https://paypal.me/achatainga
|
|
56
|
+
- **Binance (USDT)**: See README for addresses
|
|
57
|
+
|
|
58
|
+
- **TRC20**: `0xa68d53f7853ce0175eb96aaad4a30c068ca96444`
|
|
59
|
+
- **ERC20**: `0xa68d53f7853ce0175eb96aaad4a30c068ca96444`
|
|
60
|
+
- **Binance Pay ID**: `367669339`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 📊 Transparency Report
|
|
65
|
+
|
|
66
|
+
### April 2025
|
|
67
|
+
- **Monthly Donations**: $0
|
|
68
|
+
- **One-Time Donations**: $0
|
|
69
|
+
- **Total Supporters**: 0
|
|
70
|
+
- **Expenses**: ~$20 (npm registry, testing credits, domain)
|
|
71
|
+
- **Time Invested**: ~40 hours
|
|
72
|
+
- **Net**: -$20
|
|
73
|
+
|
|
74
|
+
*(Updated monthly)*
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 💼 Hire Me
|
|
79
|
+
|
|
80
|
+
Need custom MCP tools or AI integrations?
|
|
81
|
+
|
|
82
|
+
- **Rate**: $50-75/hour
|
|
83
|
+
- **Email**: a.chataing.a@gmail.com
|
|
84
|
+
- **Details**: [HIRE_ME.md](HIRE_ME.md)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## ❤️ Non-Financial Support
|
|
89
|
+
|
|
90
|
+
Can't donate? No problem! You can still help:
|
|
91
|
+
|
|
92
|
+
- ⭐ Star the repo on GitHub
|
|
93
|
+
- 🐛 Report bugs or suggest features
|
|
94
|
+
- 📝 Improve documentation
|
|
95
|
+
- 🗣️ Share with others who might benefit
|
|
96
|
+
- 💬 Help other users in discussions
|
|
97
|
+
|
|
98
|
+
Every contribution matters, financial or not.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
**Thank you for supporting open source! 🚀**
|
|
103
|
+
|
|
104
|
+
*Built with ❤️ from Caracas, Venezuela 🇻🇪*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cache Manager - v3.6.
|
|
2
|
+
* Cache Manager - v3.6.2
|
|
3
3
|
* WASM SQLite cache with debounced persistence
|
|
4
4
|
*/
|
|
5
5
|
export interface CachedFile {
|
|
@@ -18,6 +18,8 @@ export declare class CacheManager {
|
|
|
18
18
|
private initPromise;
|
|
19
19
|
private watcher;
|
|
20
20
|
private projectRoot;
|
|
21
|
+
private hits;
|
|
22
|
+
private misses;
|
|
21
23
|
constructor(projectRoot: string);
|
|
22
24
|
private init;
|
|
23
25
|
private initSchema;
|
|
@@ -28,13 +30,20 @@ export declare class CacheManager {
|
|
|
28
30
|
getStats(): Promise<{
|
|
29
31
|
totalEntries: number;
|
|
30
32
|
totalSize: number;
|
|
33
|
+
hits: number;
|
|
34
|
+
misses: number;
|
|
35
|
+
hitRate: string;
|
|
31
36
|
oldestEntry: number | null;
|
|
32
37
|
newestEntry: number | null;
|
|
33
38
|
}>;
|
|
34
39
|
private schedulePersist;
|
|
35
40
|
private persist;
|
|
36
|
-
private persistSync;
|
|
37
41
|
close(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Synchronous persist for process exit handlers
|
|
44
|
+
* CRITICAL: Only call from global shutdown hooks
|
|
45
|
+
*/
|
|
46
|
+
persistOnExit(): void;
|
|
38
47
|
startWatcher(debounceMs?: number): void;
|
|
39
48
|
stopWatcher(): void;
|
|
40
49
|
getWatcherStatus(): {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cache Manager - v3.6.
|
|
2
|
+
* Cache Manager - v3.6.2
|
|
3
3
|
* WASM SQLite cache with debounced persistence
|
|
4
4
|
*/
|
|
5
5
|
import initSqlJs from 'sql.js';
|
|
@@ -19,6 +19,8 @@ export class CacheManager {
|
|
|
19
19
|
initPromise;
|
|
20
20
|
watcher = null;
|
|
21
21
|
projectRoot;
|
|
22
|
+
hits = 0;
|
|
23
|
+
misses = 0;
|
|
22
24
|
constructor(projectRoot) {
|
|
23
25
|
this.projectRoot = projectRoot;
|
|
24
26
|
const projectHash = crypto.createHash('md5')
|
|
@@ -29,10 +31,6 @@ export class CacheManager {
|
|
|
29
31
|
this.dbPath = path.join(this.cacheDir, 'cache.db');
|
|
30
32
|
// Initialize on construction
|
|
31
33
|
this.initPromise = this.init();
|
|
32
|
-
// Persist on process exit
|
|
33
|
-
process.on('SIGINT', () => this.persistSync());
|
|
34
|
-
process.on('SIGTERM', () => this.persistSync());
|
|
35
|
-
process.on('exit', () => this.persistSync());
|
|
36
34
|
}
|
|
37
35
|
async init() {
|
|
38
36
|
try {
|
|
@@ -62,17 +60,17 @@ export class CacheManager {
|
|
|
62
60
|
initSchema() {
|
|
63
61
|
if (!this.db)
|
|
64
62
|
return;
|
|
65
|
-
this.db.run(`
|
|
66
|
-
CREATE TABLE IF NOT EXISTS file_cache (
|
|
67
|
-
file_path TEXT PRIMARY KEY,
|
|
68
|
-
hash TEXT NOT NULL,
|
|
69
|
-
symbols TEXT NOT NULL,
|
|
70
|
-
last_modified INTEGER NOT NULL,
|
|
71
|
-
cached_at INTEGER NOT NULL
|
|
72
|
-
)
|
|
63
|
+
this.db.run(`
|
|
64
|
+
CREATE TABLE IF NOT EXISTS file_cache (
|
|
65
|
+
file_path TEXT PRIMARY KEY,
|
|
66
|
+
hash TEXT NOT NULL,
|
|
67
|
+
symbols TEXT NOT NULL,
|
|
68
|
+
last_modified INTEGER NOT NULL,
|
|
69
|
+
cached_at INTEGER NOT NULL
|
|
70
|
+
)
|
|
73
71
|
`);
|
|
74
|
-
this.db.run(`
|
|
75
|
-
CREATE INDEX IF NOT EXISTS idx_cached_at ON file_cache(cached_at)
|
|
72
|
+
this.db.run(`
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_cached_at ON file_cache(cached_at)
|
|
76
74
|
`);
|
|
77
75
|
}
|
|
78
76
|
async get(filePath, currentHash) {
|
|
@@ -85,6 +83,7 @@ export class CacheManager {
|
|
|
85
83
|
if (stmt.step()) {
|
|
86
84
|
const row = stmt.getAsObject();
|
|
87
85
|
stmt.free();
|
|
86
|
+
this.hits++;
|
|
88
87
|
return {
|
|
89
88
|
filePath: row.file_path,
|
|
90
89
|
hash: row.hash,
|
|
@@ -94,6 +93,7 @@ export class CacheManager {
|
|
|
94
93
|
};
|
|
95
94
|
}
|
|
96
95
|
stmt.free();
|
|
96
|
+
this.misses++;
|
|
97
97
|
return null;
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
@@ -106,8 +106,8 @@ export class CacheManager {
|
|
|
106
106
|
if (!this.db)
|
|
107
107
|
return;
|
|
108
108
|
try {
|
|
109
|
-
this.db.run(`INSERT OR REPLACE INTO file_cache
|
|
110
|
-
(file_path, hash, symbols, last_modified, cached_at)
|
|
109
|
+
this.db.run(`INSERT OR REPLACE INTO file_cache
|
|
110
|
+
(file_path, hash, symbols, last_modified, cached_at)
|
|
111
111
|
VALUES (?, ?, ?, ?, ?)`, [
|
|
112
112
|
file.filePath,
|
|
113
113
|
file.hash,
|
|
@@ -152,11 +152,11 @@ export class CacheManager {
|
|
|
152
152
|
async getStats() {
|
|
153
153
|
await this.initPromise;
|
|
154
154
|
if (!this.db) {
|
|
155
|
-
return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null };
|
|
155
|
+
return { totalEntries: 0, totalSize: 0, hits: 0, misses: 0, hitRate: '0%', oldestEntry: null, newestEntry: null };
|
|
156
156
|
}
|
|
157
157
|
try {
|
|
158
158
|
const stmt = this.db.prepare(`
|
|
159
|
-
SELECT
|
|
159
|
+
SELECT
|
|
160
160
|
COUNT(*) as count,
|
|
161
161
|
MIN(cached_at) as oldest,
|
|
162
162
|
MAX(cached_at) as newest
|
|
@@ -168,16 +168,21 @@ export class CacheManager {
|
|
|
168
168
|
const totalSize = existsSync(this.dbPath)
|
|
169
169
|
? (await fs.stat(this.dbPath)).size
|
|
170
170
|
: 0;
|
|
171
|
+
const total = this.hits + this.misses;
|
|
172
|
+
const hitRate = total > 0 ? `${Math.round((this.hits / total) * 100)}%` : '0%';
|
|
171
173
|
return {
|
|
172
174
|
totalEntries: row.count,
|
|
173
175
|
totalSize,
|
|
176
|
+
hits: this.hits,
|
|
177
|
+
misses: this.misses,
|
|
178
|
+
hitRate,
|
|
174
179
|
oldestEntry: row.oldest,
|
|
175
180
|
newestEntry: row.newest,
|
|
176
181
|
};
|
|
177
182
|
}
|
|
178
183
|
catch (error) {
|
|
179
184
|
logger.error({ error }, 'Failed to get cache stats');
|
|
180
|
-
return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null };
|
|
185
|
+
return { totalEntries: 0, totalSize: 0, hits: 0, misses: 0, hitRate: '0%', oldestEntry: null, newestEntry: null };
|
|
181
186
|
}
|
|
182
187
|
}
|
|
183
188
|
schedulePersist() {
|
|
@@ -199,19 +204,6 @@ export class CacheManager {
|
|
|
199
204
|
logger.error({ error }, 'Failed to persist cache');
|
|
200
205
|
}
|
|
201
206
|
}
|
|
202
|
-
persistSync() {
|
|
203
|
-
if (!this.isDirty || !this.db)
|
|
204
|
-
return;
|
|
205
|
-
try {
|
|
206
|
-
const data = this.db.export();
|
|
207
|
-
const buffer = Buffer.from(data);
|
|
208
|
-
writeFileSync(this.dbPath, buffer);
|
|
209
|
-
this.isDirty = false;
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
console.error('Failed to persist cache on exit:', error);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
207
|
async close() {
|
|
216
208
|
if (this.watcher) {
|
|
217
209
|
this.watcher.stop();
|
|
@@ -227,6 +219,23 @@ export class CacheManager {
|
|
|
227
219
|
this.db = null;
|
|
228
220
|
}
|
|
229
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Synchronous persist for process exit handlers
|
|
224
|
+
* CRITICAL: Only call from global shutdown hooks
|
|
225
|
+
*/
|
|
226
|
+
persistOnExit() {
|
|
227
|
+
if (!this.isDirty || !this.db)
|
|
228
|
+
return;
|
|
229
|
+
try {
|
|
230
|
+
const data = this.db.export();
|
|
231
|
+
const buffer = Buffer.from(data);
|
|
232
|
+
writeFileSync(this.dbPath, buffer);
|
|
233
|
+
this.isDirty = false;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
console.error('Failed to persist cache on exit:', error);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
230
239
|
startWatcher(debounceMs = 500) {
|
|
231
240
|
if (this.watcher) {
|
|
232
241
|
logger.warn({ projectRoot: this.projectRoot }, 'Watcher already started');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/core/cacheManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtD,MAAM,OAAO,YAAY;IACf,EAAE,GAAoB,IAAI,CAAC;IAC3B,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,OAAO,GAAG,KAAK,CAAC;IAChB,YAAY,GAA0B,IAAI,CAAC;IAC3C,WAAW,CAAgB;IAC3B,OAAO,GAAuB,IAAI,CAAC;IACnC,WAAW,CAAS;
|
|
1
|
+
{"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/core/cacheManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtD,MAAM,OAAO,YAAY;IACf,EAAE,GAAoB,IAAI,CAAC;IAC3B,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,OAAO,GAAG,KAAK,CAAC;IAChB,YAAY,GAA0B,IAAI,CAAC;IAC3C,WAAW,CAAgB;IAC3B,OAAO,GAAuB,IAAI,CAAC;IACnC,WAAW,CAAS;IACpB,IAAI,GAAG,CAAC,CAAC;IACT,MAAM,GAAG,CAAC,CAAC;IAEnB,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;aACzC,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEnD,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,sDAAsD;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,2CAA2C,CAAC,CAAC;gBACtF,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;YAE9B,uCAAuC;YACvC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;;;KAQX,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;KAEX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,WAAmB;QAC7C,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,2DAA2D,CAC5D,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO;oBACL,QAAQ,EAAE,GAAG,CAAC,SAAmB;oBACjC,IAAI,EAAE,GAAG,CAAC,IAAc;oBACxB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAiB,CAAC;oBAC1C,YAAY,EAAE,GAAG,CAAC,aAAuB;oBACzC,QAAQ,EAAE,GAAG,CAAC,SAAmB;iBAClC,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAgB;QACxB,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,GAAG,CACT;;gCAEwB,EACxB;gBACE,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,IAAI;gBACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC5B,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,QAAQ;aACd,CACF,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4CAA4C,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QASZ,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACpH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;OAM5B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACnC,CAAC,CAAC,CAAC,CAAC;YAEN,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAE/E,OAAO;gBACL,YAAY,EAAE,GAAG,CAAC,KAAe;gBACjC,SAAS;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO;gBACP,WAAW,EAAE,GAAG,CAAC,MAAuB;gBACxC,WAAW,EAAE,GAAG,CAAC,MAAuB;aACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAC;YACrD,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACpH,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAEtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAEtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,YAAY,CAAC,aAAqB,GAAG;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,yBAAyB,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,UAAU;YACV,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;CACF"}
|
package/dist/src/core/engine.js
CHANGED
package/dist/src/index.d.ts
CHANGED