@eduardbar/drift 0.9.1 → 1.0.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.
Files changed (68) hide show
  1. package/.github/workflows/publish-vscode.yml +76 -0
  2. package/AGENTS.md +30 -12
  3. package/README.md +1 -1
  4. package/ROADMAP.md +130 -98
  5. package/dist/analyzer.d.ts +4 -38
  6. package/dist/analyzer.js +85 -1543
  7. package/dist/cli.js +47 -4
  8. package/dist/config.js +1 -1
  9. package/dist/fix.d.ts +13 -0
  10. package/dist/fix.js +120 -0
  11. package/dist/git/blame.d.ts +22 -0
  12. package/dist/git/blame.js +227 -0
  13. package/dist/git/helpers.d.ts +36 -0
  14. package/dist/git/helpers.js +152 -0
  15. package/dist/git/trend.d.ts +21 -0
  16. package/dist/git/trend.js +80 -0
  17. package/dist/git.d.ts +0 -4
  18. package/dist/git.js +2 -2
  19. package/dist/report.js +620 -293
  20. package/dist/rules/phase0-basic.d.ts +11 -0
  21. package/dist/rules/phase0-basic.js +176 -0
  22. package/dist/rules/phase1-complexity.d.ts +31 -0
  23. package/dist/rules/phase1-complexity.js +277 -0
  24. package/dist/rules/phase2-crossfile.d.ts +27 -0
  25. package/dist/rules/phase2-crossfile.js +122 -0
  26. package/dist/rules/phase3-arch.d.ts +31 -0
  27. package/dist/rules/phase3-arch.js +148 -0
  28. package/dist/rules/phase5-ai.d.ts +8 -0
  29. package/dist/rules/phase5-ai.js +262 -0
  30. package/dist/rules/phase8-semantic.d.ts +22 -0
  31. package/dist/rules/phase8-semantic.js +109 -0
  32. package/dist/rules/shared.d.ts +7 -0
  33. package/dist/rules/shared.js +27 -0
  34. package/package.json +8 -3
  35. package/packages/vscode-drift/.vscodeignore +9 -0
  36. package/packages/vscode-drift/LICENSE +21 -0
  37. package/packages/vscode-drift/README.md +64 -0
  38. package/packages/vscode-drift/images/icon.png +0 -0
  39. package/packages/vscode-drift/images/icon.svg +30 -0
  40. package/packages/vscode-drift/package-lock.json +485 -0
  41. package/packages/vscode-drift/package.json +119 -0
  42. package/packages/vscode-drift/src/analyzer.ts +38 -0
  43. package/packages/vscode-drift/src/diagnostics.ts +55 -0
  44. package/packages/vscode-drift/src/extension.ts +111 -0
  45. package/packages/vscode-drift/src/statusbar.ts +47 -0
  46. package/packages/vscode-drift/src/treeview.ts +108 -0
  47. package/packages/vscode-drift/tsconfig.json +18 -0
  48. package/packages/vscode-drift/vscode-drift-0.1.0.vsix +0 -0
  49. package/packages/vscode-drift/vscode-drift-0.1.1.vsix +0 -0
  50. package/src/analyzer.ts +124 -1773
  51. package/src/cli.ts +53 -4
  52. package/src/config.ts +1 -1
  53. package/src/fix.ts +154 -0
  54. package/src/git/blame.ts +279 -0
  55. package/src/git/helpers.ts +198 -0
  56. package/src/git/trend.ts +116 -0
  57. package/src/git.ts +2 -2
  58. package/src/report.ts +631 -296
  59. package/src/rules/phase0-basic.ts +187 -0
  60. package/src/rules/phase1-complexity.ts +302 -0
  61. package/src/rules/phase2-crossfile.ts +149 -0
  62. package/src/rules/phase3-arch.ts +179 -0
  63. package/src/rules/phase5-ai.ts +292 -0
  64. package/src/rules/phase8-semantic.ts +132 -0
  65. package/src/rules/shared.ts +39 -0
  66. package/tests/helpers.ts +45 -0
  67. package/tests/rules.test.ts +1269 -0
  68. package/vitest.config.ts +15 -0
@@ -0,0 +1,64 @@
1
+ # drift — Technical Debt Detector
2
+
3
+ [![Version](https://img.shields.io/visual-studio-marketplace/v/eduardbar.vscode-drift?color=6366f1&label=version)](https://marketplace.visualstudio.com/items?itemName=eduardbar.vscode-drift)
4
+ [![Installs](https://img.shields.io/visual-studio-marketplace/i/eduardbar.vscode-drift?color=8b5cf6&label=installs)](https://marketplace.visualstudio.com/items?itemName=eduardbar.vscode-drift)
5
+ [![Rating](https://img.shields.io/visual-studio-marketplace/r/eduardbar.vscode-drift?color=6366f1)](https://marketplace.visualstudio.com/items?itemName=eduardbar.vscode-drift)
6
+ [![License: MIT](https://img.shields.io/badge/license-MIT-94a3b8)](https://github.com/eduardbar/drift/blob/master/LICENSE)
7
+
8
+ Detect structural technical debt in TypeScript and JavaScript, directly in VS Code. drift uses a custom AST engine to score your files from **0 to 100** and surface issues as inline diagnostics — no config needed.
9
+
10
+ ## Features
11
+
12
+ - **Inline diagnostics** — issues appear as red/yellow squiggles, just like TypeScript errors
13
+ - **Problems panel** — all drift issues listed alongside compiler errors
14
+ - **Drift Issues panel** — sidebar TreeView with files sorted by score, click any issue to jump to the line
15
+ - **Status bar** — `drift 74/100 · 3 issues` always visible, color-coded by severity
16
+ - **On-save analysis** — runs automatically when you save a `.ts`, `.tsx`, `.js`, or `.jsx` file
17
+ - **Workspace scan** — `Drift: Scan Workspace` command to analyze all files at once
18
+
19
+ ## What drift detects
20
+
21
+ | Rule | Severity | What it detects |
22
+ |---|---|---|
23
+ | `large-file` | error | Files over threshold lines |
24
+ | `large-function` | error | Functions over threshold lines |
25
+ | `high-complexity` | error | Cyclomatic complexity too high |
26
+ | `duplicate-function-name` | error | Same function name in multiple files |
27
+ | `debug-leftover` | warning | `console.*` calls and TODO/FIXME markers |
28
+ | `catch-swallow` | warning | Empty catch blocks |
29
+ | `deep-nesting` | warning | Deeply nested control flow |
30
+ | `any-abuse` | warning | Excessive use of `any` |
31
+ | `too-many-params` | warning | Functions with too many parameters |
32
+ | `dead-code` | warning | Unused imports and variables |
33
+ | `high-coupling` | warning | Too many imports in a single file |
34
+ | `promise-style-mix` | warning | Mixed Promise and async/await styles |
35
+ | `comment-contradiction` | warning | Comments that contradict the code |
36
+ | `no-return-type` | info | Missing return type annotations |
37
+ | `magic-number` | info | Hardcoded numbers without named constants |
38
+
39
+ ## Commands
40
+
41
+ | Command | Description |
42
+ |---|---|
43
+ | `Drift: Scan Workspace` | Analyze all TS/JS files in the workspace |
44
+ | `Drift: Clear Diagnostics` | Remove all drift diagnostics |
45
+
46
+ ## Settings
47
+
48
+ | Setting | Default | Description |
49
+ |---|---|---|
50
+ | `drift.enable` | `true` | Enable automatic analysis on save |
51
+ | `drift.minSeverity` | `"info"` | Minimum severity to show (`error`, `warning`, `info`) |
52
+
53
+ ## CLI
54
+
55
+ drift also ships as a standalone CLI with HTML reports, CI integration, git blame, and trend analysis.
56
+
57
+ ```
58
+ npm install -g @eduardbar/drift
59
+ drift scan .
60
+ drift fix .
61
+ drift report . --html
62
+ ```
63
+
64
+ [![GitHub](https://img.shields.io/badge/github-eduardbar%2Fdrift-6366f1)](https://github.com/eduardbar/drift)
@@ -0,0 +1,30 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256">
2
+ <defs>
3
+ <linearGradient id="bgGrad" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#0a0a0f"/>
5
+ <stop offset="100%" stop-color="#12121a"/>
6
+ </linearGradient>
7
+ <linearGradient id="arcGrad" x1="0" y1="0" x2="1" y2="1">
8
+ <stop offset="0%" stop-color="#6366f1"/>
9
+ <stop offset="100%" stop-color="#8b5cf6"/>
10
+ </linearGradient>
11
+ <linearGradient id="scoreGrad" x1="0" y1="0" x2="0" y2="1">
12
+ <stop offset="0%" stop-color="#ffffff"/>
13
+ <stop offset="100%" stop-color="#c4b5fd"/>
14
+ </linearGradient>
15
+ </defs>
16
+
17
+ <rect width="256" height="256" rx="40" ry="40" fill="url(#bgGrad)"/>
18
+
19
+ <circle cx="128" cy="118" r="88" fill="none" stroke="#1e1e2e" stroke-width="14"/>
20
+
21
+ <path d="M 128 30 A 88 88 0 1 1 48.76 163" fill="none" stroke="url(#arcGrad)" stroke-width="14" stroke-linecap="round"/>
22
+
23
+ <circle cx="128" cy="118" r="64" fill="#0f0f1a" opacity="0.95"/>
24
+
25
+ <text x="128" y="108" font-family="system-ui, -apple-system, sans-serif" font-size="52" font-weight="700" text-anchor="middle" fill="url(#scoreGrad)">74</text>
26
+
27
+ <text x="128" y="140" font-family="system-ui, -apple-system, sans-serif" font-size="16" font-weight="400" text-anchor="middle" fill="#94a3b8" letter-spacing="3">SCORE</text>
28
+
29
+ <text x="128" y="222" font-family="system-ui, -apple-system, sans-serif" font-size="22" font-weight="700" text-anchor="middle" fill="#6366f1" letter-spacing="5">drift</text>
30
+ </svg>
@@ -0,0 +1,485 @@
1
+ {
2
+ "name": "vscode-drift",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "vscode-drift",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "@eduardbar/drift": "*",
12
+ "ts-morph": "^23.0.0"
13
+ },
14
+ "devDependencies": {
15
+ "@types/node": "^20.0.0",
16
+ "@types/vscode": "^1.85.0",
17
+ "typescript": "^5.3.0"
18
+ },
19
+ "engines": {
20
+ "vscode": "^1.85.0"
21
+ }
22
+ },
23
+ "node_modules/@eduardbar/drift": {
24
+ "version": "0.9.1",
25
+ "resolved": "https://registry.npmjs.org/@eduardbar/drift/-/drift-0.9.1.tgz",
26
+ "integrity": "sha512-q7G95Ps/vTdCk2twnnglF5zR2YYqVd38teFLotEIxuAvVQcaTRMJ4cqaem+xZtmbVIgySPWgAnE8vQlPpGq1Eg==",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "commander": "^14.0.3",
30
+ "kleur": "^4.1.5",
31
+ "ts-morph": "^27.0.2"
32
+ },
33
+ "bin": {
34
+ "drift": "bin/drift.js"
35
+ }
36
+ },
37
+ "node_modules/@eduardbar/drift/node_modules/@ts-morph/common": {
38
+ "version": "0.28.1",
39
+ "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.28.1.tgz",
40
+ "integrity": "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==",
41
+ "license": "MIT",
42
+ "dependencies": {
43
+ "minimatch": "^10.0.1",
44
+ "path-browserify": "^1.0.1",
45
+ "tinyglobby": "^0.2.14"
46
+ }
47
+ },
48
+ "node_modules/@eduardbar/drift/node_modules/minimatch": {
49
+ "version": "10.2.3",
50
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
51
+ "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
52
+ "license": "BlueOak-1.0.0",
53
+ "dependencies": {
54
+ "brace-expansion": "^5.0.2"
55
+ },
56
+ "engines": {
57
+ "node": "18 || 20 || >=22"
58
+ },
59
+ "funding": {
60
+ "url": "https://github.com/sponsors/isaacs"
61
+ }
62
+ },
63
+ "node_modules/@eduardbar/drift/node_modules/ts-morph": {
64
+ "version": "27.0.2",
65
+ "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-27.0.2.tgz",
66
+ "integrity": "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==",
67
+ "license": "MIT",
68
+ "dependencies": {
69
+ "@ts-morph/common": "~0.28.1",
70
+ "code-block-writer": "^13.0.3"
71
+ }
72
+ },
73
+ "node_modules/@nodelib/fs.scandir": {
74
+ "version": "2.1.5",
75
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
76
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
77
+ "license": "MIT",
78
+ "dependencies": {
79
+ "@nodelib/fs.stat": "2.0.5",
80
+ "run-parallel": "^1.1.9"
81
+ },
82
+ "engines": {
83
+ "node": ">= 8"
84
+ }
85
+ },
86
+ "node_modules/@nodelib/fs.stat": {
87
+ "version": "2.0.5",
88
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
89
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
90
+ "license": "MIT",
91
+ "engines": {
92
+ "node": ">= 8"
93
+ }
94
+ },
95
+ "node_modules/@nodelib/fs.walk": {
96
+ "version": "1.2.8",
97
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
98
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
99
+ "license": "MIT",
100
+ "dependencies": {
101
+ "@nodelib/fs.scandir": "2.1.5",
102
+ "fastq": "^1.6.0"
103
+ },
104
+ "engines": {
105
+ "node": ">= 8"
106
+ }
107
+ },
108
+ "node_modules/@ts-morph/common": {
109
+ "version": "0.24.0",
110
+ "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz",
111
+ "integrity": "sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==",
112
+ "license": "MIT",
113
+ "dependencies": {
114
+ "fast-glob": "^3.3.2",
115
+ "minimatch": "^9.0.4",
116
+ "mkdirp": "^3.0.1",
117
+ "path-browserify": "^1.0.1"
118
+ }
119
+ },
120
+ "node_modules/@types/node": {
121
+ "version": "20.19.33",
122
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz",
123
+ "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
124
+ "dev": true,
125
+ "license": "MIT",
126
+ "dependencies": {
127
+ "undici-types": "~6.21.0"
128
+ }
129
+ },
130
+ "node_modules/@types/vscode": {
131
+ "version": "1.109.0",
132
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz",
133
+ "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==",
134
+ "dev": true,
135
+ "license": "MIT"
136
+ },
137
+ "node_modules/balanced-match": {
138
+ "version": "4.0.4",
139
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
140
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
141
+ "license": "MIT",
142
+ "engines": {
143
+ "node": "18 || 20 || >=22"
144
+ }
145
+ },
146
+ "node_modules/brace-expansion": {
147
+ "version": "5.0.3",
148
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
149
+ "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
150
+ "license": "MIT",
151
+ "dependencies": {
152
+ "balanced-match": "^4.0.2"
153
+ },
154
+ "engines": {
155
+ "node": "18 || 20 || >=22"
156
+ }
157
+ },
158
+ "node_modules/braces": {
159
+ "version": "3.0.3",
160
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
161
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
162
+ "license": "MIT",
163
+ "dependencies": {
164
+ "fill-range": "^7.1.1"
165
+ },
166
+ "engines": {
167
+ "node": ">=8"
168
+ }
169
+ },
170
+ "node_modules/code-block-writer": {
171
+ "version": "13.0.3",
172
+ "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz",
173
+ "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==",
174
+ "license": "MIT"
175
+ },
176
+ "node_modules/commander": {
177
+ "version": "14.0.3",
178
+ "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
179
+ "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
180
+ "license": "MIT",
181
+ "engines": {
182
+ "node": ">=20"
183
+ }
184
+ },
185
+ "node_modules/fast-glob": {
186
+ "version": "3.3.3",
187
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
188
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
189
+ "license": "MIT",
190
+ "dependencies": {
191
+ "@nodelib/fs.stat": "^2.0.2",
192
+ "@nodelib/fs.walk": "^1.2.3",
193
+ "glob-parent": "^5.1.2",
194
+ "merge2": "^1.3.0",
195
+ "micromatch": "^4.0.8"
196
+ },
197
+ "engines": {
198
+ "node": ">=8.6.0"
199
+ }
200
+ },
201
+ "node_modules/fastq": {
202
+ "version": "1.20.1",
203
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
204
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
205
+ "license": "ISC",
206
+ "dependencies": {
207
+ "reusify": "^1.0.4"
208
+ }
209
+ },
210
+ "node_modules/fill-range": {
211
+ "version": "7.1.1",
212
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
213
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
214
+ "license": "MIT",
215
+ "dependencies": {
216
+ "to-regex-range": "^5.0.1"
217
+ },
218
+ "engines": {
219
+ "node": ">=8"
220
+ }
221
+ },
222
+ "node_modules/glob-parent": {
223
+ "version": "5.1.2",
224
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
225
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
226
+ "license": "ISC",
227
+ "dependencies": {
228
+ "is-glob": "^4.0.1"
229
+ },
230
+ "engines": {
231
+ "node": ">= 6"
232
+ }
233
+ },
234
+ "node_modules/is-extglob": {
235
+ "version": "2.1.1",
236
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
237
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
238
+ "license": "MIT",
239
+ "engines": {
240
+ "node": ">=0.10.0"
241
+ }
242
+ },
243
+ "node_modules/is-glob": {
244
+ "version": "4.0.3",
245
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
246
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
247
+ "license": "MIT",
248
+ "dependencies": {
249
+ "is-extglob": "^2.1.1"
250
+ },
251
+ "engines": {
252
+ "node": ">=0.10.0"
253
+ }
254
+ },
255
+ "node_modules/is-number": {
256
+ "version": "7.0.0",
257
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
258
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
259
+ "license": "MIT",
260
+ "engines": {
261
+ "node": ">=0.12.0"
262
+ }
263
+ },
264
+ "node_modules/kleur": {
265
+ "version": "4.1.5",
266
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
267
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
268
+ "license": "MIT",
269
+ "engines": {
270
+ "node": ">=6"
271
+ }
272
+ },
273
+ "node_modules/merge2": {
274
+ "version": "1.4.1",
275
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
276
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
277
+ "license": "MIT",
278
+ "engines": {
279
+ "node": ">= 8"
280
+ }
281
+ },
282
+ "node_modules/micromatch": {
283
+ "version": "4.0.8",
284
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
285
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
286
+ "license": "MIT",
287
+ "dependencies": {
288
+ "braces": "^3.0.3",
289
+ "picomatch": "^2.3.1"
290
+ },
291
+ "engines": {
292
+ "node": ">=8.6"
293
+ }
294
+ },
295
+ "node_modules/minimatch": {
296
+ "version": "9.0.7",
297
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.7.tgz",
298
+ "integrity": "sha512-MOwgjc8tfrpn5QQEvjijjmDVtMw2oL88ugTevzxQnzRLm6l3fVEF2gzU0kYeYYKD8C66+IdGX6peJ4MyUlUnPg==",
299
+ "license": "ISC",
300
+ "dependencies": {
301
+ "brace-expansion": "^5.0.2"
302
+ },
303
+ "engines": {
304
+ "node": ">=16 || 14 >=14.17"
305
+ },
306
+ "funding": {
307
+ "url": "https://github.com/sponsors/isaacs"
308
+ }
309
+ },
310
+ "node_modules/mkdirp": {
311
+ "version": "3.0.1",
312
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
313
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
314
+ "license": "MIT",
315
+ "bin": {
316
+ "mkdirp": "dist/cjs/src/bin.js"
317
+ },
318
+ "engines": {
319
+ "node": ">=10"
320
+ },
321
+ "funding": {
322
+ "url": "https://github.com/sponsors/isaacs"
323
+ }
324
+ },
325
+ "node_modules/path-browserify": {
326
+ "version": "1.0.1",
327
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
328
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
329
+ "license": "MIT"
330
+ },
331
+ "node_modules/picomatch": {
332
+ "version": "2.3.1",
333
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
334
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
335
+ "license": "MIT",
336
+ "engines": {
337
+ "node": ">=8.6"
338
+ },
339
+ "funding": {
340
+ "url": "https://github.com/sponsors/jonschlinkert"
341
+ }
342
+ },
343
+ "node_modules/queue-microtask": {
344
+ "version": "1.2.3",
345
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
346
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
347
+ "funding": [
348
+ {
349
+ "type": "github",
350
+ "url": "https://github.com/sponsors/feross"
351
+ },
352
+ {
353
+ "type": "patreon",
354
+ "url": "https://www.patreon.com/feross"
355
+ },
356
+ {
357
+ "type": "consulting",
358
+ "url": "https://feross.org/support"
359
+ }
360
+ ],
361
+ "license": "MIT"
362
+ },
363
+ "node_modules/reusify": {
364
+ "version": "1.1.0",
365
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
366
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
367
+ "license": "MIT",
368
+ "engines": {
369
+ "iojs": ">=1.0.0",
370
+ "node": ">=0.10.0"
371
+ }
372
+ },
373
+ "node_modules/run-parallel": {
374
+ "version": "1.2.0",
375
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
376
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
377
+ "funding": [
378
+ {
379
+ "type": "github",
380
+ "url": "https://github.com/sponsors/feross"
381
+ },
382
+ {
383
+ "type": "patreon",
384
+ "url": "https://www.patreon.com/feross"
385
+ },
386
+ {
387
+ "type": "consulting",
388
+ "url": "https://feross.org/support"
389
+ }
390
+ ],
391
+ "license": "MIT",
392
+ "dependencies": {
393
+ "queue-microtask": "^1.2.2"
394
+ }
395
+ },
396
+ "node_modules/tinyglobby": {
397
+ "version": "0.2.15",
398
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
399
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
400
+ "license": "MIT",
401
+ "dependencies": {
402
+ "fdir": "^6.5.0",
403
+ "picomatch": "^4.0.3"
404
+ },
405
+ "engines": {
406
+ "node": ">=12.0.0"
407
+ },
408
+ "funding": {
409
+ "url": "https://github.com/sponsors/SuperchupuDev"
410
+ }
411
+ },
412
+ "node_modules/tinyglobby/node_modules/fdir": {
413
+ "version": "6.5.0",
414
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
415
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
416
+ "license": "MIT",
417
+ "engines": {
418
+ "node": ">=12.0.0"
419
+ },
420
+ "peerDependencies": {
421
+ "picomatch": "^3 || ^4"
422
+ },
423
+ "peerDependenciesMeta": {
424
+ "picomatch": {
425
+ "optional": true
426
+ }
427
+ }
428
+ },
429
+ "node_modules/tinyglobby/node_modules/picomatch": {
430
+ "version": "4.0.3",
431
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
432
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
433
+ "license": "MIT",
434
+ "engines": {
435
+ "node": ">=12"
436
+ },
437
+ "funding": {
438
+ "url": "https://github.com/sponsors/jonschlinkert"
439
+ }
440
+ },
441
+ "node_modules/to-regex-range": {
442
+ "version": "5.0.1",
443
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
444
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
445
+ "license": "MIT",
446
+ "dependencies": {
447
+ "is-number": "^7.0.0"
448
+ },
449
+ "engines": {
450
+ "node": ">=8.0"
451
+ }
452
+ },
453
+ "node_modules/ts-morph": {
454
+ "version": "23.0.0",
455
+ "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-23.0.0.tgz",
456
+ "integrity": "sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==",
457
+ "license": "MIT",
458
+ "dependencies": {
459
+ "@ts-morph/common": "~0.24.0",
460
+ "code-block-writer": "^13.0.1"
461
+ }
462
+ },
463
+ "node_modules/typescript": {
464
+ "version": "5.9.3",
465
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
466
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
467
+ "dev": true,
468
+ "license": "Apache-2.0",
469
+ "bin": {
470
+ "tsc": "bin/tsc",
471
+ "tsserver": "bin/tsserver"
472
+ },
473
+ "engines": {
474
+ "node": ">=14.17"
475
+ }
476
+ },
477
+ "node_modules/undici-types": {
478
+ "version": "6.21.0",
479
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
480
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
481
+ "dev": true,
482
+ "license": "MIT"
483
+ }
484
+ }
485
+ }