From a500ccd2033306ecbe10056b999685986b7c741c Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Thu, 25 Sep 2025 19:55:15 +0800 Subject: [PATCH] feat(language-server): add back `typescript.tsdk` initialization option --- extensions/vscode/index.ts | 15 +++++---------- extensions/vscode/rolldown.config.ts | 2 +- packages/language-server/index.ts | 12 +++++++++++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/extensions/vscode/index.ts b/extensions/vscode/index.ts index 1762778c86..223245842c 100644 --- a/extensions/vscode/index.ts +++ b/extensions/vscode/index.ts @@ -90,16 +90,6 @@ export = defineExtension(() => { } }); - // Setup typescript.js in production mode - if (fs.existsSync(path.join(__dirname, 'language-server.js'))) { - fs.writeFileSync( - path.join(__dirname, 'typescript.js'), - `module.exports = require("${ - vscode.env.appRoot.replace(/\\/g, '/') - }/extensions/node_modules/typescript/lib/typescript.js");`, - ); - } - if (config.server.path && !serverPath) { vscode.window.showErrorMessage('Cannot find @vue/language-server.'); return; @@ -152,6 +142,11 @@ function launch(serverPath: string) { }, }, { + initializationOptions: { + typescript: { + tsdk: `${vscode.env.appRoot.replace(/\\/g, '/')}/extensions/node_modules/typescript/lib`, + }, + }, middleware: { ...middleware, async resolveCodeAction(item, token, next) { diff --git a/extensions/vscode/rolldown.config.ts b/extensions/vscode/rolldown.config.ts index 3d4e3cd38e..4a9d022fbe 100644 --- a/extensions/vscode/rolldown.config.ts +++ b/extensions/vscode/rolldown.config.ts @@ -67,7 +67,7 @@ const config: RolldownOptions = { id: /^typescript$/, }, handler() { - return { id: './typescript.js', external: true }; + return { id: 'typescript', external: true }; }, }, }, diff --git a/packages/language-server/index.ts b/packages/language-server/index.ts index a64c3b07b6..83a5976ad4 100644 --- a/packages/language-server/index.ts +++ b/packages/language-server/index.ts @@ -13,7 +13,7 @@ import { createVueLanguageServicePlugins, type LanguageService, } from '@vue/language-service'; -import * as ts from 'typescript'; +import type * as ts from 'typescript'; import { URI } from 'vscode-uri'; const connection = createConnection(); @@ -30,6 +30,16 @@ connection.onNotification('tsserver/response', ([id, res]) => { }); connection.onInitialize(params => { + let ts: typeof import('typescript'); + const tsdk = params.initializationOptions?.typescript?.tsdk; + if (tsdk) { + const tsPath = require.resolve('./typescript.js', { paths: [tsdk] }); + ts = require(tsPath); + } + else { + ts = require('typescript'); + } + const tsconfigProjects = createUriMap(); const file2ProjectInfo = new Map>();