mcp-code-context 3.6.1 → 3.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +41 -31
  2. package/HIRE_ME.md +234 -234
  3. package/INSTRUCTIONS.md +279 -274
  4. package/LICENSE +21 -21
  5. package/README.md +482 -486
  6. package/SECURITY.md +14 -14
  7. package/SPONSORS.md +104 -104
  8. package/dist/src/core/cacheManager.d.ts +6 -1
  9. package/dist/src/core/cacheManager.js +25 -16
  10. package/dist/src/core/cacheManager.js.map +1 -1
  11. package/dist/src/core/engine.d.ts +1 -1
  12. package/dist/src/core/engine.js +1 -1
  13. package/dist/src/core/validator.d.ts +1 -1
  14. package/dist/src/core/validator.js +1 -1
  15. package/dist/src/index.d.ts +1 -1
  16. package/dist/src/index.js +207 -24
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/operations/compress.d.ts +1 -1
  19. package/dist/src/operations/compress.js +1 -1
  20. package/dist/src/operations/confirmationStore.d.ts +1 -1
  21. package/dist/src/operations/confirmationStore.js +1 -1
  22. package/dist/src/operations/read.d.ts +37 -1
  23. package/dist/src/operations/read.js +176 -9
  24. package/dist/src/operations/read.js.map +1 -1
  25. package/dist/src/operations/write.d.ts +2 -2
  26. package/dist/src/operations/write.js +2 -2
  27. package/dist/src/parsers/base.d.ts +3 -1
  28. package/dist/src/parsers/base.js +1 -1
  29. package/dist/src/parsers/base.js.map +1 -1
  30. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  31. package/dist/src/parsers/dartTreeSitter.js +5 -1
  32. package/dist/src/parsers/dartTreeSitter.js.map +1 -1
  33. package/dist/src/parsers/php.d.ts +1 -1
  34. package/dist/src/parsers/php.js +5 -1
  35. package/dist/src/parsers/php.js.map +1 -1
  36. package/dist/src/parsers/python.d.ts +1 -1
  37. package/dist/src/parsers/python.js +5 -1
  38. package/dist/src/parsers/python.js.map +1 -1
  39. package/dist/src/parsers/registry.d.ts +1 -1
  40. package/dist/src/parsers/registry.js +1 -1
  41. package/dist/src/parsers/typescript.d.ts +1 -1
  42. package/dist/src/parsers/typescript.js +9 -5
  43. package/dist/src/parsers/typescript.js.map +1 -1
  44. package/dist/src/utils/auditLogger.d.ts +1 -1
  45. package/dist/src/utils/auditLogger.js +1 -1
  46. package/dist/src/utils/backupManager.d.ts +1 -1
  47. package/dist/src/utils/backupManager.js +1 -1
  48. package/dist/src/utils/constants.d.ts +1 -1
  49. package/dist/src/utils/constants.js +1 -1
  50. package/dist/src/utils/diff.d.ts +1 -1
  51. package/dist/src/utils/diff.js +4 -4
  52. package/dist/src/utils/fileLock.d.ts +1 -1
  53. package/dist/src/utils/fileLock.js +1 -1
  54. package/dist/src/utils/fileWalker.d.ts +1 -1
  55. package/dist/src/utils/fileWalker.js +1 -1
  56. package/dist/src/utils/fileWatcher.d.ts +2 -1
  57. package/dist/src/utils/fileWatcher.js +12 -2
  58. package/dist/src/utils/fileWatcher.js.map +1 -1
  59. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  60. package/dist/src/utils/fuzzySearch.js +1 -1
  61. package/dist/src/utils/logger.d.ts +1 -1
  62. package/dist/src/utils/logger.js +1 -1
  63. package/dist/src/utils/rateLimiter.d.ts +5 -1
  64. package/dist/src/utils/rateLimiter.js +5 -1
  65. package/dist/src/utils/rateLimiter.js.map +1 -1
  66. package/dist/src/utils/safeRegex.d.ts +1 -1
  67. package/dist/src/utils/safeRegex.js +1 -1
  68. package/dist/src/utils/streaming.d.ts +1 -1
  69. package/dist/src/utils/streaming.js +1 -1
  70. package/dist/src/utils/telemetry.d.ts +1 -1
  71. package/dist/src/utils/telemetry.js +1 -1
  72. package/llms.txt +37 -21
  73. package/package.json +3 -3
  74. package/scripts/replace-version.js +59 -59
  75. package/vitest.config.ts +37 -37
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Diff Utilities - v3.6.1
2
+ * Diff Utilities - v3.6.3
3
3
  * Uses diff-match-patch for efficient diffing
4
4
  */
5
5
  import DiffMatchPatch from 'diff-match-patch';
@@ -35,9 +35,9 @@ export function generateUnifiedDiff(oldText, newText) {
35
35
  export function generateSimpleDiff(oldText, newText) {
36
36
  const oldLines = oldText.split('\n');
37
37
  const newLines = newText.split('\n');
38
- return `File too large for detailed diff.
39
- Old: ${oldLines.length} lines
40
- New: ${newLines.length} lines
38
+ return `File too large for detailed diff.
39
+ Old: ${oldLines.length} lines
40
+ New: ${newLines.length} lines
41
41
  Changed: ${Math.abs(oldLines.length - newLines.length)} lines`;
42
42
  }
43
43
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.6.1
2
+ * File Lock Manager - v3.6.3
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.6.1
2
+ * File Lock Manager - v3.6.3
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  import lockfile from 'proper-lockfile';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Walker Utility - v3.6.1
2
+ * File Walker Utility - v3.6.3
3
3
  * Centralized directory traversal with filtering
4
4
  */
5
5
  export interface WalkOptions {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Walker Utility - v3.6.1
2
+ * File Walker Utility - v3.6.3
3
3
  * Centralized directory traversal with filtering
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Watcher - v3.6.1
2
+ * File Watcher - v3.6.3
3
3
  * Auto-invalidate cache on file changes with chokidar
4
4
  */
5
5
  export interface FileWatcherConfig {
@@ -18,6 +18,7 @@ export declare class FileWatcher {
18
18
  getStatus(): {
19
19
  isWatching: boolean;
20
20
  watchedFiles: number;
21
+ paths: string[];
21
22
  };
22
23
  private handleChange;
23
24
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Watcher - v3.6.1
2
+ * File Watcher - v3.6.3
3
3
  * Auto-invalidate cache on file changes with chokidar
4
4
  */
5
5
  import chokidar from 'chokidar';
@@ -52,9 +52,19 @@ export class FileWatcher {
52
52
  logger.info('File watcher stopped');
53
53
  }
54
54
  getStatus() {
55
+ if (!this.watcher)
56
+ return { isWatching: false, watchedFiles: 0, paths: [] };
57
+ const watched = this.watcher.getWatched();
58
+ const paths = [];
59
+ for (const [dir, files] of Object.entries(watched)) {
60
+ for (const file of files) {
61
+ paths.push(file ? `${dir}/${file}` : dir);
62
+ }
63
+ }
55
64
  return {
56
65
  isWatching: this.isWatching,
57
- watchedFiles: this.watcher ? Object.keys(this.watcher.getWatched()).length : 0,
66
+ watchedFiles: paths.length,
67
+ paths: paths.slice(0, 50), // cap at 50 to avoid token explosion
58
68
  };
59
69
  }
60
70
  handleChange(filePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../../src/utils/fileWatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../../src/utils/fileWatcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fuzzy Search - v3.6.1
2
+ * Fuzzy Search - v3.6.3
3
3
  * Typo-tolerant search with fuse.js
4
4
  */
5
5
  export interface FuzzySearchOptions {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fuzzy Search - v3.6.1
2
+ * Fuzzy Search - v3.6.3
3
3
  * Typo-tolerant search with fuse.js
4
4
  */
5
5
  import Fuse from 'fuse.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Logger - v3.6.1
2
+ * Logger - v3.6.3
3
3
  * Structured logging with pino (JSON to stderr, MCP-safe)
4
4
  */
5
5
  import pino from 'pino';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Logger - v3.6.1
2
+ * Logger - v3.6.3
3
3
  * Structured logging with pino (JSON to stderr, MCP-safe)
4
4
  */
5
5
  import pino from 'pino';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.6.1
2
+ * Rate Limiter - v3.6.3
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  interface RateLimitConfig {
@@ -57,5 +57,9 @@ export declare const OPERATION_COSTS: {
57
57
  readonly rollback_file: 2;
58
58
  readonly clean_backups: 2;
59
59
  readonly get_server_stats: 1;
60
+ readonly get_rate_limit_status: 1;
61
+ readonly search_symbols: 40;
62
+ readonly explain_symbol: 10;
63
+ readonly batch_read: 10;
60
64
  };
61
65
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.6.1
2
+ * Rate Limiter - v3.6.3
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  export class RateLimiter {
@@ -110,5 +110,9 @@ export const OPERATION_COSTS = {
110
110
  rollback_file: 2,
111
111
  clean_backups: 2,
112
112
  get_server_stats: 1,
113
+ get_rate_limit_status: 1,
114
+ search_symbols: 40, // Full repo AST walk
115
+ explain_symbol: 10,
116
+ batch_read: 10,
113
117
  };
114
118
  //# sourceMappingURL=rateLimiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Safe Regex - v3.6.1
2
+ * Safe Regex - v3.6.3
3
3
  * CRITICAL FIX: Real ReDoS protection via worker_threads
4
4
  *
5
5
  * Problem: setTimeout cannot interrupt regex.test() in Node.js single-threaded event loop.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Safe Regex - v3.6.1
2
+ * Safe Regex - v3.6.3
3
3
  * CRITICAL FIX: Real ReDoS protection via worker_threads
4
4
  *
5
5
  * Problem: setTimeout cannot interrupt regex.test() in Node.js single-threaded event loop.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Streaming - v3.6.1
2
+ * File Streaming - v3.6.3
3
3
  * Stream large files in chunks to avoid memory exhaustion
4
4
  */
5
5
  export interface StreamOptions {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Streaming - v3.6.1
2
+ * File Streaming - v3.6.3
3
3
  * Stream large files in chunks to avoid memory exhaustion
4
4
  */
5
5
  import * as fs from "node:fs";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Telemetry - v3.6.1
2
+ * Telemetry - v3.6.3
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export interface Metric {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Telemetry - v3.6.1
2
+ * Telemetry - v3.6.3
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export class TelemetryCollector {
package/llms.txt CHANGED
@@ -1,23 +1,19 @@
1
- # mcp-code-context v3.6.1
1
+ # mcp-code-context v3.6.3
2
2
 
3
3
  > A Model Context Protocol (MCP) server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with middleware pipeline.
4
4
 
5
- ## What's New in v3.6.1
5
+ ## What's New in v3.6.3
6
6
 
7
- 🔒 **Production Hardening**:
8
- - ✅ Two-phase write workflow (dry-run + confirmation token)
9
- - ✅ Middleware pipeline: Rate limiting → File locking → Execution → Audit logging → Telemetry
10
- - ✅ All 13 handlers require `projectRoot` with SecurityValidator
11
- - ✅ Safe regex with timeout enforcement (ReDoS protection)
12
- - ✅ LCS diff OOM guard (MAX_DIFF_LINES = 5000)
13
- - ✅ Atomic writes (write-to-tmp + rename)
14
- - ✅ Critical bug fix: `extractSymbol` API mismatch resolved
15
-
16
- 🚀 **Architecture**: 100% WASM portable
17
- - ✅ web-tree-sitter@0.25.1 (WASM)
18
- - ✅ Zero native dependencies (no Visual Studio, node-gyp, Python)
19
- - ✅ Windows/Mac/Linux without compilation
20
- - ✅ TypeScript/JavaScript/Python/PHP/Dart all use WASM parsers
7
+ 🚀 **LLM Agent Experience Release**:
8
+ - ✅ 4 new tools: `search_symbols`, `explain_symbol`, `batch_read`, `get_rate_limit_status`
9
+ - ✅ `diffFormat` parameter on all write tools (`unified`, `compact`, `summary`, `none`)
10
+ - ✅ Phase 2 no longer requires `newContent`/`code` — server stores content from Phase 1
11
+ - ✅ `aroundPattern` now includes match line number in output
12
+ - ✅ `get_server_stats` includes rate limiter token balance and operation costs
13
+ - ✅ `get_cache_stats` includes hit rate percentage
14
+ - ✅ `get_file_watcher_status` includes list of watched paths
15
+ - ✅ `read_file_lines` clamps `endLine` to file length instead of erroring
16
+ - ✅ CVE fix: `@modelcontextprotocol/sdk` updated from 1.12.0 to 1.29.0
21
17
 
22
18
  ## What This Tool Does
23
19
 
@@ -142,13 +138,13 @@ This MCP server solves two problems:
142
138
  - `steps` (optional): Number of versions to go back (1-5, default: 1).
143
139
  **What it does:** Reverts the file to the state it was in before the last 1-5 modifications.
144
140
 
145
- ### Write Tools (v3.6.1 Two-Phase Workflow)
141
+ ### Write Tools (v3.6.3 Two-Phase Workflow)
146
142
 
147
143
  All write tools follow a **Two-Phase Workflow**:
148
144
  1. **Phase 1 (Preview)**: Call without a token to get a unified `diff` and a `confirmationToken`.
149
145
  2. **Phase 2 (Apply)**: Call with `confirmationToken` and `confirm: true` to apply the changes.
150
146
 
151
- **Important Notes (v3.6.1):**
147
+ **Important Notes (v3.6.3):**
152
148
  - ✅ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings.
153
149
  - ✅ **Parameter Brace Handling**: Methods with braces in parameters (e.g., `{int? cart}`) are now handled correctly.
154
150
 
@@ -236,12 +232,12 @@ All write tools follow a **Two-Phase Workflow**:
236
232
  5. **Phase 2: Apply Edit** → Verify the diff, then call with the token and `confirm: true`.
237
233
  6. **Recovery** → Use `rollback_file` if needed.
238
234
 
239
- ### Additional Tools (v3.6.1)
235
+ ### Additional Tools (v3.6.3)
240
236
 
241
237
  #### 11. `parse_file`
242
238
  **Purpose:** Parse a file using Tree-sitter and extract all symbols.
243
239
  **Input:** `filePath` (required), `projectRoot` (required).
244
- **Returns:** JSON array of all symbols with type and name.
240
+ **Returns:** JSON array of all symbols with type, name, `startLine`, and `endLine`.
245
241
 
246
242
  #### 12. `clean_backups`
247
243
  **Purpose:** Remove all backup files for a project.
@@ -250,7 +246,27 @@ All write tools follow a **Two-Phase Workflow**:
250
246
  #### 13. `get_server_stats`
251
247
  **Purpose:** Get server telemetry, audit statistics, and health metrics.
252
248
  **Input:** None.
253
- **Returns:** Pending confirmations count and operational metrics.
249
+ **Returns:** Pending confirmations, rate limiter token balance, operation costs, and operational metrics.
250
+
251
+ #### 14. `search_symbols`
252
+ **Purpose:** Search symbols by name across the repo using AST (not text search).
253
+ **Input:** `rootDir` (required), `projectRoot` (required), `query` (required), `types` (optional), `fuzzy` (optional), `fileExtensions` (optional), `maxResults` (optional).
254
+ **Returns:** Matching symbols with file path, line numbers, and type.
255
+
256
+ #### 15. `explain_symbol`
257
+ **Purpose:** Get signature, location, and callers of a symbol in one call.
258
+ **Input:** `filePath` (required), `projectRoot` (required), `symbolName` (required), `className` (optional), `rootDir` (optional).
259
+ **Returns:** Symbol definition + list of files that call it. Replaces `read_file_surgical` + `analyze_impact` in one round-trip.
260
+
261
+ #### 16. `batch_read`
262
+ **Purpose:** Read N symbols from N files in a single call.
263
+ **Input:** `reads` (required): array of `{filePath, symbolName, className?}`. `projectRoot` (required).
264
+ **Returns:** All requested symbols in one response. Eliminates N round-trips.
265
+
266
+ #### 17. `get_rate_limit_status`
267
+ **Purpose:** Get current token balance and operation costs.
268
+ **Input:** None.
269
+ **Returns:** `tokensAvailable`, `maxTokens`, `refillRate`, and `canAfford` map per operation. Lets autonomous agents plan their budget.
254
270
 
255
271
  ## Technical Details
256
272
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-code-context",
3
- "version": "3.6.1",
3
+ "version": "3.6.3",
4
4
  "description": "Powerful MCP server with Tree-sitter WASM parsers for 100% AST accuracy. Zero native dependencies. Production-ready with persistent caching, structured logging, file watching, fuzzy search, rate limiting, file locking, and ReDoS protection. Supports TypeScript, JavaScript, PHP, Dart, and Python.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -62,7 +62,7 @@
62
62
  "email": "a.chataing.a@gmail.com"
63
63
  },
64
64
  "dependencies": {
65
- "@modelcontextprotocol/sdk": "1.12.0",
65
+ "@modelcontextprotocol/sdk": "1.29.0",
66
66
  "chokidar": "5.0.0",
67
67
  "diff-match-patch": "1.0.5",
68
68
  "fuse.js": "7.3.0",
@@ -83,7 +83,7 @@
83
83
  "@vitest/coverage-v8": "4.1.5",
84
84
  "@vitest/ui": "4.1.5",
85
85
  "rimraf": "6.0.1",
86
- "typescript": "5.7.0",
86
+ "typescript": "5.7.2",
87
87
  "vitest": "4.1.5"
88
88
  },
89
89
  "engines": {
@@ -1,59 +1,59 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
-
4
- /**
5
- * Universal Version Replacer - v1.0.0
6
- * Usage: node scripts/replace-version.js <oldVersion> <newVersion>
7
- */
8
-
9
- const [,, oldVersion, newVersion] = process.argv;
10
-
11
- if (!oldVersion || !newVersion) {
12
- console.error('Usage: node scripts/replace-version.js <oldVersion> <newVersion>');
13
- console.error('Example: node scripts/replace-version.js 3.4.0 3.4.1');
14
- process.exit(1);
15
- }
16
-
17
- const root = process.cwd();
18
- const oldRegex = new RegExp(oldVersion.replace(/\./g, '\\.'), 'g');
19
-
20
- console.log(`🚀 Starting global replace: ${oldVersion} -> ${newVersion}`);
21
-
22
- function walk(dir) {
23
- const files = fs.readdirSync(dir);
24
- for (const file of files) {
25
- const fullPath = path.join(dir, file);
26
-
27
- // Safety boundaries
28
- if (fullPath.includes('.git') ||
29
- fullPath.includes('node_modules') ||
30
- fullPath.includes('scripts') ||
31
- file === 'stderr.txt' ||
32
- file === 'stdout.txt') continue;
33
-
34
- const stat = fs.statSync(fullPath);
35
- if (stat.isDirectory()) {
36
- walk(fullPath);
37
- } else {
38
- // Process only relevant text files
39
- const ext = path.extname(file).toLowerCase();
40
- const textExtensions = ['.ts', '.js', '.json', '.md', '.txt', '.d.ts', '.map'];
41
-
42
- if (textExtensions.includes(ext) || file.endsWith('.d.ts')) {
43
- try {
44
- const content = fs.readFileSync(fullPath, 'utf8');
45
- if (content.includes(oldVersion)) {
46
- const updated = content.replace(oldRegex, newVersion);
47
- fs.writeFileSync(fullPath, updated, 'utf8');
48
- console.log(`✅ Updated: ${fullPath}`);
49
- }
50
- } catch (err) {
51
- console.warn(`⚠️ Skipped ${fullPath}: ${err.message}`);
52
- }
53
- }
54
- }
55
- }
56
- }
57
-
58
- walk(root);
59
- console.log('✨ Version update complete.');
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+
4
+ /**
5
+ * Universal Version Replacer - v1.0.0
6
+ * Usage: node scripts/replace-version.js <oldVersion> <newVersion>
7
+ */
8
+
9
+ const [,, oldVersion, newVersion] = process.argv;
10
+
11
+ if (!oldVersion || !newVersion) {
12
+ console.error('Usage: node scripts/replace-version.js <oldVersion> <newVersion>');
13
+ console.error('Example: node scripts/replace-version.js 3.4.0 3.4.1');
14
+ process.exit(1);
15
+ }
16
+
17
+ const root = process.cwd();
18
+ const oldRegex = new RegExp(oldVersion.replace(/\./g, '\\.'), 'g');
19
+
20
+ console.log(`🚀 Starting global replace: ${oldVersion} -> ${newVersion}`);
21
+
22
+ function walk(dir) {
23
+ const files = fs.readdirSync(dir);
24
+ for (const file of files) {
25
+ const fullPath = path.join(dir, file);
26
+
27
+ // Safety boundaries
28
+ if (fullPath.includes('.git') ||
29
+ fullPath.includes('node_modules') ||
30
+ fullPath.includes('scripts') ||
31
+ file === 'stderr.txt' ||
32
+ file === 'stdout.txt') continue;
33
+
34
+ const stat = fs.statSync(fullPath);
35
+ if (stat.isDirectory()) {
36
+ walk(fullPath);
37
+ } else {
38
+ // Process only relevant text files
39
+ const ext = path.extname(file).toLowerCase();
40
+ const textExtensions = ['.ts', '.js', '.json', '.md', '.txt', '.d.ts', '.map'];
41
+
42
+ if (textExtensions.includes(ext) || file.endsWith('.d.ts')) {
43
+ try {
44
+ const content = fs.readFileSync(fullPath, 'utf8');
45
+ if (content.includes(oldVersion)) {
46
+ const updated = content.replace(oldRegex, newVersion);
47
+ fs.writeFileSync(fullPath, updated, 'utf8');
48
+ console.log(`✅ Updated: ${fullPath}`);
49
+ }
50
+ } catch (err) {
51
+ console.warn(`⚠️ Skipped ${fullPath}: ${err.message}`);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ walk(root);
59
+ console.log('✨ Version update complete.');
package/vitest.config.ts CHANGED
@@ -1,37 +1,37 @@
1
- import { defineConfig } from 'vitest/config';
2
- import path from 'path';
3
-
4
- export default defineConfig({
5
- test: {
6
- globals: true,
7
- environment: 'node',
8
- reporters: ['default'],
9
- coverage: {
10
- provider: 'v8',
11
- reporter: ['text', 'json', 'html'],
12
- exclude: [
13
- 'node_modules/',
14
- 'dist/',
15
- 'dist-tests/',
16
- '**/*.spec.ts',
17
- '**/*.test.ts',
18
- 'tests/',
19
- 'scripts/'
20
- ],
21
- thresholds: {
22
- lines: 80,
23
- functions: 80,
24
- branches: 75,
25
- statements: 80
26
- }
27
- },
28
- testTimeout: 60000,
29
- hookTimeout: 60000,
30
- outputTruncateLength: 80
31
- },
32
- resolve: {
33
- alias: {
34
- '@': path.resolve(__dirname, './src')
35
- }
36
- }
37
- });
1
+ import { defineConfig } from 'vitest/config';
2
+ import path from 'path';
3
+
4
+ export default defineConfig({
5
+ test: {
6
+ globals: true,
7
+ environment: 'node',
8
+ reporters: ['default'],
9
+ coverage: {
10
+ provider: 'v8',
11
+ reporter: ['text', 'json', 'html'],
12
+ exclude: [
13
+ 'node_modules/',
14
+ 'dist/',
15
+ 'dist-tests/',
16
+ '**/*.spec.ts',
17
+ '**/*.test.ts',
18
+ 'tests/',
19
+ 'scripts/'
20
+ ],
21
+ thresholds: {
22
+ lines: 80,
23
+ functions: 80,
24
+ branches: 75,
25
+ statements: 80
26
+ }
27
+ },
28
+ testTimeout: 60000,
29
+ hookTimeout: 60000,
30
+ outputTruncateLength: 80
31
+ },
32
+ resolve: {
33
+ alias: {
34
+ '@': path.resolve(__dirname, './src')
35
+ }
36
+ }
37
+ });