local util = require("lspconfig.util") local utils = require("lsp.utils") -- Determine base path for node_modules local base_path = utils.find_node_modules_path() if not base_path then vim.notify("No global node_modules found for TypeScript server", vim.log.levels.WARN) base_path = "" end local function get_typescript_server_path(root_dir) local global_ts = base_path .. "/typescript/lib" local found_ts = "" local function check_dir(path) found_ts = table.concat({ path, "typescript", "lib" }, "/") if vim.loop.fs_stat(found_ts) then return path end end -- Check frontend/node_modules first if util.search_ancestors(root_dir .. '/frontend/node_modules', check_dir) then return found_ts end -- Check root node_modules if util.search_ancestors(root_dir .. '/node_modules', check_dir) then return found_ts end return global_ts end local function organize_imports() local params = { command = "_typescript.organizeImports", arguments = { vim.api.nvim_buf_get_name(0) }, title = "" } vim.lsp.buf.execute_command(params) end return { init_options = { plugins = { { name = "@vue/typescript-plugin", location = base_path .. "/@vue/typescript-plugin", languages = { "javascript", "typescript", "vue", "react" }, }, }, }, filetypes = { "javascript", "typescript", "vue", "typescriptreact", }, commands = { OrganizeImports = { organize_imports, description = "Organize Imports" } }, on_new_config = function(new_config, new_root_dir) if get_typescript_server_path then new_config.init_options.typescript = new_config.init_options.typescript or {} new_config.init_options.typescript.tsdk = get_typescript_server_path(new_root_dir) else vim.notify("get_typescript_server_path is not defined", vim.log.levels.ERROR) end end, }