astro-ghostcms/.pnpm-store/v3/files/31/9f0c394ba4d796d9af43f7a03ae...

66 lines
2.8 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWorkspaceFolder = exports.createServiceEnvironment = exports.createSimpleProjectProvider = void 0;
const vscode_uri_1 = require("vscode-uri");
const isFileInDir_1 = require("../utils/isFileInDir");
const simpleProject_1 = require("./simpleProject");
const createSimpleProjectProvider = (context, serverOptions, servicePlugins) => {
const projects = new Map();
return {
getProject(uri) {
const workspaceFolder = getWorkspaceFolder(uri, context.workspaceFolders, context.runtimeEnv.uriToFileName);
let projectPromise = projects.get(workspaceFolder);
if (!projectPromise) {
const serviceEnv = createServiceEnvironment(context, workspaceFolder);
projectPromise = (0, simpleProject_1.createSimpleServerProject)(context, serviceEnv, serverOptions, servicePlugins);
projects.set(workspaceFolder, projectPromise);
}
return projectPromise;
},
async getProjects() {
return await Promise.all([...projects.values()]);
},
reloadProjects() {
for (const project of projects.values()) {
project.then(project => project.dispose());
}
projects.clear();
context.reloadDiagnostics();
},
};
};
exports.createSimpleProjectProvider = createSimpleProjectProvider;
function createServiceEnvironment(context, workspaceFolder) {
const env = {
workspaceFolder: workspaceFolder.toString(),
fs: context.runtimeEnv.fs,
console: context.runtimeEnv.console,
locale: context.initializeParams.locale,
clientCapabilities: context.initializeParams.capabilities,
getConfiguration: context.configurationHost?.getConfiguration,
onDidChangeConfiguration: context.configurationHost?.onDidChangeConfiguration,
onDidChangeWatchedFiles: context.onDidChangeWatchedFiles,
typescript: {
fileNameToUri: context.runtimeEnv.fileNameToUri,
uriToFileName: context.runtimeEnv.uriToFileName,
},
};
return env;
}
exports.createServiceEnvironment = createServiceEnvironment;
function getWorkspaceFolder(uri, workspaceFolderManager, uriToFileName) {
const fileName = uriToFileName(uri);
let folders = workspaceFolderManager
.getAll()
.filter(uri => (0, isFileInDir_1.isFileInDir)(fileName, uriToFileName(uri.toString())))
.sort((a, b) => b.toString().length - a.toString().length);
if (!folders.length) {
folders = workspaceFolderManager.getAll();
}
if (!folders.length) {
folders = [vscode_uri_1.URI.parse(uri).with({ path: '/' })];
}
return folders[0];
}
exports.getWorkspaceFolder = getWorkspaceFolder;
//# sourceMappingURL=simpleProjectProvider.js.map