@zenithbuild/language-server 0.2.7 → 1.3.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.8] - 2026-01-26
9
+
10
+ ### 📝 Other Changes
11
+
12
+ - **** ()
13
+
8
14
  ## [0.2.1] - 2026-01-16
9
15
 
10
16
  ### 🐛 Bug Fixes
@@ -0,0 +1,24 @@
1
+ # 🚀 @zenithbuild/language-server v0.2.8
2
+
3
+ ## [0.2.8] - 2026-01-26
4
+
5
+ ### 📝 Other Changes
6
+
7
+ - **** ()
8
+
9
+
10
+
11
+ ## 📦 Installation
12
+
13
+ ```bash
14
+ bun add @zenithbuild/language-server@0.2.8
15
+ ```
16
+
17
+ *or with npm:*
18
+
19
+ ```bash
20
+ npm install @zenithbuild/language-server@0.2.8
21
+ ```
22
+
23
+ ---
24
+ *Generated by Zenith Automated Release*
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@zenithbuild/language-server",
3
- "version": "0.2.7",
3
+ "version": "1.3.3",
4
4
  "description": "Language Server for Zenith Framework",
5
5
  "main": "./dist/server.js",
6
6
  "types": "./dist/server.d.ts",
7
7
  "scripts": {
8
- "build": "npx esbuild src/server.ts --bundle --outdir=dist --platform=node --format=cjs",
8
+ "build": "npx esbuild src/server.ts --bundle --outdir=dist --platform=node --format=cjs --external:@zenithbuild/compiler",
9
9
  "dev": "npm run build -- --watch",
10
10
  "release": "bun run scripts/release.ts",
11
11
  "release:dry": "bun run scripts/release.ts --dry-run",
@@ -14,6 +14,7 @@
14
14
  "release:major": "bun run scripts/release.ts --bump=major"
15
15
  },
16
16
  "dependencies": {
17
+ "@zenithbuild/compiler": "^1.3.0",
17
18
  "vscode-languageserver": "^9.0.1",
18
19
  "vscode-languageserver-textdocument": "^1.0.11"
19
20
  },
@@ -279,9 +279,13 @@ function generateChangelog(
279
279
  changelog += `### ⚠️ BREAKING CHANGES\n\n`;
280
280
  for (const commit of breakingChanges) {
281
281
  const scope = commit.scope ? `**${commit.scope}**: ` : "";
282
- changelog += `- ${scope}${commit.subject} (${commit.hash.slice(0, 7)})\n`;
282
+ changelog += `#### ${scope}${commit.subject} (${commit.hash.slice(0, 7)})\n`;
283
+ if (commit.body) {
284
+ changelog += `\n${commit.body.split('\n').map(line => `> ${line}`).join('\n')}\n`;
285
+ }
286
+ changelog += "\n";
283
287
  }
284
- changelog += "\n";
288
+ changelog += "---\n\n";
285
289
  }
286
290
 
287
291
  // Regular changes by type
@@ -294,7 +298,14 @@ function generateChangelog(
294
298
  changelog += `### ${typeConfig.title}\n\n`;
295
299
  for (const commit of typeCommits) {
296
300
  const scope = commit.scope ? `**${commit.scope}**: ` : "";
297
- changelog += `- ${scope}${commit.subject} (${commit.hash.slice(0, 7)})\n`;
301
+ changelog += `- **${scope}${commit.subject}** (${commit.hash.slice(0, 7)})\n`;
302
+
303
+ // Include body if present
304
+ if (commit.body && commit.body.trim()) {
305
+ const cleanedBody = commit.body.trim();
306
+ // Indent body for better hierarchy
307
+ changelog += `${cleanedBody.split('\n').map(line => ` > ${line}`).join('\n')}\n`;
308
+ }
298
309
  }
299
310
  changelog += "\n";
300
311
  }
@@ -303,7 +314,10 @@ function generateChangelog(
303
314
  if (groupedCommits.other && groupedCommits.other.length > 0) {
304
315
  changelog += `### 📝 Other Changes\n\n`;
305
316
  for (const commit of groupedCommits.other) {
306
- changelog += `- ${commit.subject} (${commit.hash.slice(0, 7)})\n`;
317
+ changelog += `- **${commit.subject}** (${commit.hash.slice(0, 7)})\n`;
318
+ if (commit.body && commit.body.trim()) {
319
+ changelog += `${commit.body.trim().split('\n').map(line => ` > ${line}`).join('\n')}\n`;
320
+ }
307
321
  }
308
322
  changelog += "\n";
309
323
  }
@@ -319,21 +333,24 @@ function generateReleaseNotes(
319
333
  ): string {
320
334
  const changelog = generateChangelog(commits, newVersion, config);
321
335
 
322
- return `# ${packageName} v${newVersion}
336
+ return `# 🚀 ${packageName} v${newVersion}
323
337
 
324
338
  ${changelog}
325
339
 
326
- ## Installation
340
+ ## 📦 Installation
327
341
 
328
342
  \`\`\`bash
329
343
  bun add ${packageName}@${newVersion}
330
344
  \`\`\`
331
345
 
332
- or with npm:
346
+ *or with npm:*
333
347
 
334
348
  \`\`\`bash
335
349
  npm install ${packageName}@${newVersion}
336
350
  \`\`\`
351
+
352
+ ---
353
+ *Generated by Zenith Automated Release*
337
354
  `;
338
355
  }
339
356
 
@@ -19,23 +19,39 @@ export interface ValidationContext {
19
19
  graph: ProjectGraph | null;
20
20
  }
21
21
 
22
+ import { compile } from '@zenithbuild/compiler';
23
+
22
24
  /**
23
25
  * Collect all diagnostics for a document
24
26
  */
25
- export function collectDiagnostics(document: TextDocument, graph: ProjectGraph | null): Diagnostic[] {
27
+ export async function collectDiagnostics(document: TextDocument, graph: ProjectGraph | null): Promise<Diagnostic[]> {
26
28
  const diagnostics: Diagnostic[] = [];
27
29
  const text = document.getText();
30
+ const filePath = new URL(document.uri).pathname;
31
+
32
+ // 1. High-Fidelity Compiler Validation (Native)
33
+ try {
34
+ // Enable caching to make this fast for subsequent calls
35
+ process.env.ZENITH_CACHE = '1';
36
+ await compile(text, filePath);
37
+ } catch (error: any) {
38
+ if (error.name === 'InvariantError' || error.name === 'CompilerError') {
39
+ diagnostics.push({
40
+ severity: DiagnosticSeverity.Error,
41
+ range: {
42
+ start: { line: (error.line || 1) - 1, character: (error.column || 1) - 1 },
43
+ end: { line: (error.line || 1) - 1, character: (error.column || 1) + 20 } // Approximate
44
+ },
45
+ message: `[${error.code}] ${error.message}${error.hints ? '\n\nHints:\n' + error.hints.join('\n') : ''}`,
46
+ source: 'zenith-compiler'
47
+ });
48
+ }
49
+ }
28
50
 
29
- // Validate component references
51
+ // 2. Light-weight LSP rules (Component resolution, etc.)
30
52
  collectComponentDiagnostics(document, text, graph, diagnostics);
31
-
32
- // Validate directive usage
33
53
  collectDirectiveDiagnostics(document, text, diagnostics);
34
-
35
- // Validate imports
36
54
  collectImportDiagnostics(document, text, diagnostics);
37
-
38
- // Validate expressions
39
55
  collectExpressionDiagnostics(document, text, diagnostics);
40
56
 
41
57
  return diagnostics;
@@ -146,6 +162,20 @@ function collectDirectiveDiagnostics(
146
162
  source: 'zenith'
147
163
  });
148
164
  }
165
+
166
+ // Check for forbidden inline functions in event handlers (Contract Violation)
167
+ const eventHandlerPattern = /\bon(?:[a-z]+)\s*=\s*["']([^"']*(?:=>|function)[^"']*)["']/gi;
168
+ while ((match = eventHandlerPattern.exec(text)) !== null) {
169
+ const startPos = document.positionAt(match.index);
170
+ const endPos = document.positionAt(match.index + match[0].length);
171
+
172
+ diagnostics.push({
173
+ severity: DiagnosticSeverity.Error,
174
+ range: { start: startPos, end: endPos },
175
+ message: `Forbidden inline function in event handler. Use a direct symbolic reference instead (e.g. "handleClick").`,
176
+ source: 'zenith'
177
+ });
178
+ }
149
179
  }
150
180
 
151
181
  /**
@@ -256,5 +286,18 @@ function collectExpressionDiagnostics(
256
286
  source: 'zenith'
257
287
  });
258
288
  }
289
+
290
+ // Check for TypeScript syntax in runtime expressions (Contract Violation)
291
+ if (expression.includes(' as ') || (expression.includes('<') && expression.includes('>'))) {
292
+ const startPos = document.positionAt(offset);
293
+ const endPos = document.positionAt(offset + match[0].length);
294
+
295
+ diagnostics.push({
296
+ severity: DiagnosticSeverity.Error,
297
+ range: { start: startPos, end: endPos },
298
+ message: `TypeScript syntax (type casting or generics) detected in runtime expression. Runtime code must be pure JavaScript.`,
299
+ source: 'zenith'
300
+ });
301
+ }
259
302
  }
260
303
  }
package/src/server.ts CHANGED
@@ -35,27 +35,27 @@ import {
35
35
  ProjectGraph
36
36
  } from './project';
37
37
 
38
- import {
39
- DIRECTIVES,
40
- isDirective,
41
- getDirective,
38
+ import {
39
+ DIRECTIVES,
40
+ isDirective,
41
+ getDirective,
42
42
  getDirectiveNames,
43
43
  canPlaceDirective,
44
- parseForExpression
44
+ parseForExpression
45
45
  } from './metadata/directive-metadata';
46
46
 
47
- import {
48
- parseZenithImports,
49
- hasRouterImport,
50
- resolveModule,
47
+ import {
48
+ parseZenithImports,
49
+ hasRouterImport,
50
+ resolveModule,
51
51
  resolveExport,
52
52
  getAllModules,
53
- getModuleExports
53
+ getModuleExports
54
54
  } from './imports';
55
55
 
56
- import {
57
- ROUTER_HOOKS,
58
- ZENLINK_PROPS,
56
+ import {
57
+ ROUTER_HOOKS,
58
+ ZENLINK_PROPS,
59
59
  ROUTE_FIELDS,
60
60
  getRouterHook,
61
61
  isRouterHook,
@@ -190,7 +190,7 @@ function extractLoopVariables(text: string): string[] {
190
190
  const vars: string[] = [];
191
191
  const loopPattern = /zen:for\s*=\s*["']([^"']+)["']/g;
192
192
  let match;
193
-
193
+
194
194
  while ((match = loopPattern.exec(text)) !== null) {
195
195
  const parsed = parseForExpression(match[1]);
196
196
  if (parsed) {
@@ -198,7 +198,7 @@ function extractLoopVariables(text: string): string[] {
198
198
  if (parsed.indexVar) vars.push(parsed.indexVar);
199
199
  }
200
200
  }
201
-
201
+
202
202
  return vars;
203
203
  }
204
204
 
@@ -257,7 +257,7 @@ function getPositionContext(text: string, offset: number): {
257
257
  // Get current word being typed
258
258
  const wordMatch = before.match(/[a-zA-Z_$:@][a-zA-Z0-9_$:-]*$/);
259
259
  const currentWord = wordMatch ? wordMatch[0] : '';
260
-
260
+
261
261
  // Check for @ or : prefix for event/binding completion
262
262
  const afterAt = before.endsWith('@') || currentWord.startsWith('@');
263
263
  const afterColon = before.endsWith(':') || (currentWord.startsWith(':') && !currentWord.startsWith(':'));
@@ -529,7 +529,7 @@ connection.onCompletion((params: TextDocumentPositionParams): CompletionItem[] =
529
529
  if (ctx.inTag && ctx.tagName && !ctx.inAttributeValue) {
530
530
  // Directives (zen:if, zen:for, etc.)
531
531
  const elementType = ctx.tagName === 'slot' ? 'slot' : (/^[A-Z]/.test(ctx.tagName) ? 'component' : 'element');
532
-
532
+
533
533
  for (const directiveName of getDirectiveNames()) {
534
534
  if (canPlaceDirective(directiveName, elementType as 'element' | 'component' | 'slot')) {
535
535
  if (!ctx.currentWord || directiveName.toLowerCase().startsWith(ctx.currentWord.toLowerCase())) {
@@ -693,7 +693,7 @@ connection.onHover((params: TextDocumentPositionParams): Hover | null => {
693
693
  } else {
694
694
  notes = '- Compile-time directive\n- No runtime assumptions\n- Processed at build time';
695
695
  }
696
-
696
+
697
697
  return {
698
698
  contents: {
699
699
  kind: MarkupKind.Markdown,
@@ -822,7 +822,7 @@ documents.onDidOpen(event => {
822
822
 
823
823
  async function validateDocument(document: TextDocument) {
824
824
  const graph = getProjectGraph(document.uri);
825
- const diagnostics = collectDiagnostics(document, graph);
825
+ const diagnostics = await collectDiagnostics(document, graph);
826
826
  connection.sendDiagnostics({ uri: document.uri, diagnostics });
827
827
  }
828
828
 
package/bun.lock DELETED
@@ -1,83 +0,0 @@
1
- {
2
- "lockfileVersion": 1,
3
- "configVersion": 0,
4
- "workspaces": {
5
- "": {
6
- "name": "@zenithbuild/language-server",
7
- "dependencies": {
8
- "vscode-languageserver": "^9.0.1",
9
- "vscode-languageserver-textdocument": "^1.0.11",
10
- },
11
- "devDependencies": {
12
- "@types/node": "^20.0.0",
13
- "esbuild": "^0.19.0",
14
- "typescript": "^5.0.0",
15
- },
16
- },
17
- },
18
- "packages": {
19
- "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="],
20
-
21
- "@esbuild/android-arm": ["@esbuild/android-arm@0.19.12", "", { "os": "android", "cpu": "arm" }, "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w=="],
22
-
23
- "@esbuild/android-arm64": ["@esbuild/android-arm64@0.19.12", "", { "os": "android", "cpu": "arm64" }, "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA=="],
24
-
25
- "@esbuild/android-x64": ["@esbuild/android-x64@0.19.12", "", { "os": "android", "cpu": "x64" }, "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew=="],
26
-
27
- "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.19.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g=="],
28
-
29
- "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.19.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A=="],
30
-
31
- "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.19.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA=="],
32
-
33
- "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.19.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg=="],
34
-
35
- "@esbuild/linux-arm": ["@esbuild/linux-arm@0.19.12", "", { "os": "linux", "cpu": "arm" }, "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w=="],
36
-
37
- "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.19.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA=="],
38
-
39
- "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.19.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA=="],
40
-
41
- "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA=="],
42
-
43
- "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w=="],
44
-
45
- "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.19.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg=="],
46
-
47
- "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg=="],
48
-
49
- "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.19.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg=="],
50
-
51
- "@esbuild/linux-x64": ["@esbuild/linux-x64@0.19.12", "", { "os": "linux", "cpu": "x64" }, "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg=="],
52
-
53
- "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.19.12", "", { "os": "none", "cpu": "x64" }, "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA=="],
54
-
55
- "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.19.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw=="],
56
-
57
- "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.19.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA=="],
58
-
59
- "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.19.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A=="],
60
-
61
- "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.19.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ=="],
62
-
63
- "@esbuild/win32-x64": ["@esbuild/win32-x64@0.19.12", "", { "os": "win32", "cpu": "x64" }, "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA=="],
64
-
65
- "@types/node": ["@types/node@20.19.27", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug=="],
66
-
67
- "esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": "bin/esbuild" }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="],
68
-
69
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
70
-
71
- "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
72
-
73
- "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="],
74
-
75
- "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="],
76
-
77
- "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="],
78
-
79
- "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="],
80
-
81
- "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="],
82
- }
83
- }