astro-ghostcms/.pnpm-store/v3/files/5e/7720e8f6e559184590a06421faa...

70 lines
3.4 KiB
Plaintext
Raw Normal View History

2024-02-14 19:45:06 +00:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.arrayItemsEqual = exports.createLanguageServicePlugin = void 0;
const decorateLanguageService_1 = require("../node/decorateLanguageService");
const decorateLanguageServiceHost_1 = require("../node/decorateLanguageServiceHost");
const language_core_1 = require("@volar/language-core");
const externalFiles = new WeakMap();
const projectExternalFileExtensions = new WeakMap();
const decoratedLanguageServices = new WeakSet();
const decoratedLanguageServiceHosts = new WeakSet();
function createLanguageServicePlugin(loadLanguagePlugins) {
return modules => {
const { typescript: ts } = modules;
const pluginModule = {
create(info) {
if (!decoratedLanguageServices.has(info.languageService)
&& !decoratedLanguageServiceHosts.has(info.languageServiceHost)) {
decoratedLanguageServices.add(info.languageService);
decoratedLanguageServiceHosts.add(info.languageServiceHost);
const languagePlugins = loadLanguagePlugins(ts, info);
const extensions = languagePlugins
.map(plugin => plugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [])
.flat();
projectExternalFileExtensions.set(info.project, extensions);
const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
const files = (0, language_core_1.createFileRegistry)(languagePlugins, ts.sys.useCaseSensitiveFileNames, fileName => {
const snapshot = getScriptSnapshot(fileName);
if (snapshot) {
files.set(fileName, (0, language_core_1.resolveCommonLanguageId)(fileName), snapshot);
}
else {
files.delete(fileName);
}
});
(0, decorateLanguageService_1.decorateLanguageService)(files, info.languageService);
(0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(files, info.languageServiceHost, ts);
}
return info.languageService;
},
getExternalFiles(project, updateLevel = 0) {
if (updateLevel >= (1)
|| !externalFiles.has(project)) {
const oldFiles = externalFiles.get(project);
const newFiles = (0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, projectExternalFileExtensions.get(project));
externalFiles.set(project, newFiles);
if (oldFiles && !arrayItemsEqual(oldFiles, newFiles)) {
project.refreshDiagnostics();
}
}
return externalFiles.get(project);
},
};
return pluginModule;
};
}
exports.createLanguageServicePlugin = createLanguageServicePlugin;
function arrayItemsEqual(a, b) {
if (a.length !== b.length) {
return false;
}
const set = new Set(a);
for (const file of b) {
if (!set.has(file)) {
return false;
}
}
return true;
}
exports.arrayItemsEqual = arrayItemsEqual;
//# sourceMappingURL=createLanguageServicePlugin.js.map