astro-ghostcms/.pnpm-store/v3/files/e9/aad2d1803229a563f81d9c01460...

111 lines
5.5 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.plugin = void 0;
const node_1 = require("@volar/language-server/node");
const core_1 = require("./core");
const svelte_js_1 = require("./core/svelte.js");
const vue_js_1 = require("./core/vue.js");
const importPackage_js_1 = require("./importPackage.js");
const utils_js_1 = require("./utils.js");
// Services
const volar_service_css_1 = require("volar-service-css");
const volar_service_emmet_1 = require("volar-service-emmet");
const volar_service_prettier_1 = require("volar-service-prettier");
const volar_service_typescript_twoslash_queries_1 = require("volar-service-typescript-twoslash-queries");
const astro_js_1 = require("./plugins/astro.js");
const html_js_1 = require("./plugins/html.js");
const index_js_1 = require("./plugins/typescript-addons/index.js");
const index_js_2 = require("./plugins/typescript/index.js");
const plugin = (initOptions, modules) => ({
extraFileExtensions: [
{ extension: 'astro', isMixedContent: true, scriptKind: 7 },
{ extension: 'vue', isMixedContent: true, scriptKind: 7 },
{ extension: 'svelte', isMixedContent: true, scriptKind: 7 },
],
watchFileExtensions: [
'js',
'cjs',
'mjs',
'ts',
'cts',
'mts',
'jsx',
'tsx',
'json',
'astro',
'vue',
'svelte',
],
resolveConfig(config, ctx) {
config.languages ??= {};
if (ctx) {
const nearestPackageJson = modules.typescript?.findConfigFile(ctx.project.rootUri.fsPath, modules.typescript.sys.fileExists, 'package.json');
const astroInstall = (0, utils_js_1.getAstroInstall)([ctx.project.rootUri.fsPath], {
nearestPackageJson: nearestPackageJson,
readDirectory: modules.typescript.sys.readDirectory,
});
if (astroInstall === 'not-found') {
ctx.server.connection.sendNotification(node_1.ShowMessageNotification.type, {
message: `Couldn't find Astro in workspace "${ctx.project.rootUri.fsPath}". Experience might be degraded. For the best experience, please make sure Astro is installed into your project and restart the language server.`,
type: node_1.MessageType.Warning,
});
}
config.languages.astro = (0, core_1.getLanguageModule)(typeof astroInstall === 'string' ? undefined : astroInstall, modules.typescript);
config.languages.vue = (0, vue_js_1.getVueLanguageModule)();
config.languages.svelte = (0, svelte_js_1.getSvelteLanguageModule)();
}
config.services ??= {};
config.services.html ??= (0, html_js_1.create)();
config.services.css ??= (0, volar_service_css_1.create)();
config.services.emmet ??= (0, volar_service_emmet_1.create)();
config.services.typescript ??= (0, index_js_2.create)();
config.services.typescripttwoslash ??= (0, volar_service_typescript_twoslash_queries_1.create)();
config.services.typescriptaddons ??= (0, index_js_1.create)();
config.services.astro ??= (0, astro_js_1.create)();
if (ctx) {
const rootDir = ctx.env.uriToFileName(ctx.project.rootUri.toString());
const prettier = (0, importPackage_js_1.importPrettier)(rootDir);
const prettierPluginPath = (0, importPackage_js_1.getPrettierPluginPath)(rootDir);
if (prettier && prettierPluginPath) {
config.services.prettier ??= (0, volar_service_prettier_1.create)({
prettier: prettier,
languages: ['astro'],
ignoreIdeOptions: true,
useIdeOptionsFallback: true,
resolveConfigOptions: {
// This seems to be broken since Prettier 3, and it'll always use its cumbersome cache. Hopefully it works one day.
useCache: false,
},
additionalOptions: async (resolvedConfig) => {
async function getAstroPrettierPlugin() {
if (!prettier || !prettierPluginPath) {
return [];
}
const hasPluginLoadedAlready = (await prettier.getSupportInfo()).languages.some((l) => l.name === 'astro') ||
resolvedConfig.plugins?.includes('prettier-plugin-astro'); // getSupportInfo doesn't seems to work very well in Prettier 3 for plugins
return hasPluginLoadedAlready ? [] : [prettierPluginPath];
}
const plugins = [
...(await getAstroPrettierPlugin()),
...(resolvedConfig.plugins ?? []),
];
return {
...resolvedConfig,
plugins: plugins,
parser: 'astro',
};
},
});
}
else {
ctx.server.connection.sendNotification(node_1.ShowMessageNotification.type, {
message: "Couldn't load `prettier` or `prettier-plugin-astro`. Formatting will not work. Please make sure those two packages are installed into your project.",
type: node_1.MessageType.Warning,
});
}
}
return config;
},
});
exports.plugin = plugin;
//# sourceMappingURL=languageServerPlugin.js.map