diff --git a/.changeset/easy-aliens-rule.md b/.changeset/easy-aliens-rule.md new file mode 100644 index 000000000..f0ebb81a7 --- /dev/null +++ b/.changeset/easy-aliens-rule.md @@ -0,0 +1,6 @@ +--- +'svelte-check': minor +'svelte-language-server': patch +--- + +perf: optimize svelte-check bundle size diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 174e556e5..6e4bc1cbb 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -7,7 +7,8 @@ "exports": { "./package.json": "./package.json", ".": "./dist/src/index.js", - "./bin/server.js": "./bin/server.js" + "./bin/server.js": "./bin/server.js", + "./svelte-check": "./dist/src/svelte-check.js" }, "scripts": { "test": "cross-env TS_NODE_TRANSPILE_ONLY=true mocha --require ts-node/register \"test/**/*.test.ts\" --no-experimental-strip-types", diff --git a/packages/language-server/src/svelte-check.ts b/packages/language-server/src/svelte-check.ts index c83547a44..3ec55fbd7 100644 --- a/packages/language-server/src/svelte-check.ts +++ b/packages/language-server/src/svelte-check.ts @@ -1,24 +1,25 @@ +import { groupBy } from 'lodash'; import { isAbsolute } from 'path'; import ts from 'typescript'; import { Diagnostic, Position, Range } from 'vscode-languageserver'; -import { WorkspaceFolder } from 'vscode-languageserver-protocol'; +import { TextDocumentContentChangeEvent, WorkspaceFolder } from 'vscode-languageserver-protocol'; import { Document, DocumentManager } from './lib/documents'; import { Logger } from './logger'; import { LSConfigManager } from './ls-config'; -import { - CSSPlugin, - LSAndTSDocResolver, - PluginHost, - SveltePlugin, - TypeScriptPlugin -} from './plugins'; +import { Plugin } from './plugins'; +import { CSSPlugin } from './plugins/css/CSSPlugin'; import { FileSystemProvider } from './plugins/css/FileSystemProvider'; import { createLanguageServices } from './plugins/css/service'; +import { PluginHost } from './plugins/PluginHost'; +import { SveltePlugin } from './plugins/svelte/SveltePlugin'; import { JSOrTSDocumentSnapshot } from './plugins/typescript/DocumentSnapshot'; +import { DiagnosticsProviderImpl } from './plugins/typescript/features/DiagnosticsProvider'; import { isInGeneratedCode } from './plugins/typescript/features/utils'; +import { LSAndTSDocResolver } from './plugins/typescript/LSAndTSDocResolver'; import { convertRange, getDiagnosticTag, mapSeverity } from './plugins/typescript/utils'; import { pathToUrl, urlToPath } from './utils'; -import { groupBy } from 'lodash'; + +export { offsetAt } from './lib/documents'; export type SvelteCheckDiagnosticSource = 'js' | 'css' | 'svelte'; @@ -101,12 +102,7 @@ export class SvelteCheck { } ); this.pluginHost.register( - new TypeScriptPlugin( - this.configManager, - this.lsAndTSDocResolver, - workspaceUris, - this.docManager - ) + new SvelteCheckTypeScriptPlugin(this.lsAndTSDocResolver, this.configManager) ); } @@ -382,3 +378,26 @@ export class SvelteCheck { })); } } + +export class SvelteCheckTypeScriptPlugin implements Plugin { + __name = 'ts'; + + constructor(lsAndTSDocResolver: LSAndTSDocResolver, lsConfigManager: LSConfigManager) { + this.lsAndTsDocResolver = lsAndTSDocResolver; + this.diagnosticsProvider = new DiagnosticsProviderImpl(lsAndTSDocResolver, lsConfigManager); + } + + private readonly diagnosticsProvider: DiagnosticsProviderImpl; + private readonly lsAndTsDocResolver: LSAndTSDocResolver; + + getDiagnostics(document: Document): Promise { + return this.diagnosticsProvider.getDiagnostics(document); + } + + async updateTsOrJsFile( + fileName: string, + changes: TextDocumentContentChangeEvent[] + ): Promise { + await this.lsAndTsDocResolver.updateExistingTsOrJsFile(fileName, changes); + } +} diff --git a/packages/svelte-check/package.json b/packages/svelte-check/package.json index 38ec1a73e..732c87402 100644 --- a/packages/svelte-check/package.json +++ b/packages/svelte-check/package.json @@ -55,9 +55,9 @@ "svelte": "^4.2.19", "svelte-language-server": "workspace:*", "typescript": "^5.9.2", - "vscode-languageserver": "8.0.2", - "vscode-languageserver-protocol": "3.17.2", - "vscode-languageserver-types": "3.17.2", - "vscode-uri": "~3.1.0" + "vscode-languageserver": "9.0.1", + "vscode-languageserver-protocol": "3.17.5", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "~3.0.0" } } diff --git a/packages/svelte-check/src/index.ts b/packages/svelte-check/src/index.ts index b803050f7..c4ceaa946 100644 --- a/packages/svelte-check/src/index.ts +++ b/packages/svelte-check/src/index.ts @@ -6,7 +6,7 @@ import { watch, FSWatcher } from 'chokidar'; import * as fs from 'fs'; import { fdir } from 'fdir'; import * as path from 'path'; -import { SvelteCheck, SvelteCheckOptions } from 'svelte-language-server'; +import { SvelteCheck, SvelteCheckOptions } from 'svelte-language-server/svelte-check'; import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-protocol'; import { URI } from 'vscode-uri'; import { parseOptions, SvelteCheckCliOptions } from './options'; diff --git a/packages/svelte-check/src/writers.ts b/packages/svelte-check/src/writers.ts index c8e5a6582..b98a1cf2c 100644 --- a/packages/svelte-check/src/writers.ts +++ b/packages/svelte-check/src/writers.ts @@ -2,7 +2,7 @@ import pc from 'picocolors'; import { sep } from 'path'; import { Writable } from 'stream'; import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-protocol'; -import { offsetAt } from 'svelte-language-server'; +import { offsetAt } from 'svelte-language-server/svelte-check'; export interface Writer { start: (workspaceDir: string) => void; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4534fd55..9957b9ee5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -177,17 +177,17 @@ importers: specifier: ^5.9.2 version: 5.9.2 vscode-languageserver: - specifier: 8.0.2 - version: 8.0.2 + specifier: 9.0.1 + version: 9.0.1 vscode-languageserver-protocol: - specifier: 3.17.2 - version: 3.17.2 + specifier: 3.17.5 + version: 3.17.5 vscode-languageserver-types: - specifier: 3.17.2 - version: 3.17.2 + specifier: 3.17.5 + version: 3.17.5 vscode-uri: - specifier: ~3.1.0 - version: 3.1.0 + specifier: ~3.0.0 + version: 3.0.8 packages/svelte-vscode: dependencies: @@ -2060,10 +2060,6 @@ packages: vscode-html-languageservice@5.4.0: resolution: {integrity: sha512-9/cbc90BSYCghmHI7/VbWettHZdC7WYpz2g5gBK6UDUI1MkZbM773Q12uAYJx9jzAiNHPpyo6KzcwmcnugncAQ==} - vscode-jsonrpc@8.0.2: - resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} - engines: {node: '>=14.0.0'} - vscode-jsonrpc@8.2.0: resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'} @@ -2072,25 +2068,15 @@ packages: resolution: {integrity: sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==} engines: {vscode: ^1.82.0} - vscode-languageserver-protocol@3.17.2: - resolution: {integrity: sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==} - vscode-languageserver-protocol@3.17.5: resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} vscode-languageserver-textdocument@1.0.12: resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} - vscode-languageserver-types@3.17.2: - resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} - vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - vscode-languageserver@8.0.2: - resolution: {integrity: sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==} - hasBin: true - vscode-languageserver@9.0.1: resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} hasBin: true @@ -2111,6 +2097,9 @@ packages: vscode-uri@2.1.2: resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} @@ -3860,8 +3849,6 @@ snapshots: vscode-languageserver-types: 3.17.5 vscode-uri: 3.1.0 - vscode-jsonrpc@8.0.2: {} - vscode-jsonrpc@8.2.0: {} vscode-languageclient@9.0.1: @@ -3870,11 +3857,6 @@ snapshots: semver: 7.7.2 vscode-languageserver-protocol: 3.17.5 - vscode-languageserver-protocol@3.17.2: - dependencies: - vscode-jsonrpc: 8.0.2 - vscode-languageserver-types: 3.17.2 - vscode-languageserver-protocol@3.17.5: dependencies: vscode-jsonrpc: 8.2.0 @@ -3882,14 +3864,8 @@ snapshots: vscode-languageserver-textdocument@1.0.12: {} - vscode-languageserver-types@3.17.2: {} - vscode-languageserver-types@3.17.5: {} - vscode-languageserver@8.0.2: - dependencies: - vscode-languageserver-protocol: 3.17.2 - vscode-languageserver@9.0.1: dependencies: vscode-languageserver-protocol: 3.17.5 @@ -3911,6 +3887,8 @@ snapshots: vscode-uri@2.1.2: {} + vscode-uri@3.0.8: {} + vscode-uri@3.1.0: {} webidl-conversions@3.0.1: {}