mirror of
https://github.com/sern-handler/website
synced 2026-06-23 16:22:26 +00:00
70 lines
2.9 KiB
JavaScript
70 lines
2.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getWorkspaceFolder = exports.createServiceEnvironment = exports.createSimpleProjectProviderFactory = void 0;
|
|
const vscode_uri_1 = require("vscode-uri");
|
|
const simpleProject_1 = require("./simpleProject");
|
|
const uri_1 = require("../uri");
|
|
function createSimpleProjectProviderFactory() {
|
|
return (context, servicePlugins, getLanguagePlugins) => {
|
|
const projects = new Map();
|
|
return {
|
|
getProject(uri) {
|
|
const workspaceFolder = getWorkspaceFolder(uri, context.workspaceFolders);
|
|
let projectPromise = projects.get(workspaceFolder);
|
|
if (!projectPromise) {
|
|
const serviceEnv = createServiceEnvironment(context, workspaceFolder);
|
|
projectPromise = (0, simpleProject_1.createSimpleServerProject)(context, serviceEnv, servicePlugins, getLanguagePlugins);
|
|
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.createSimpleProjectProviderFactory = createSimpleProjectProviderFactory;
|
|
function createServiceEnvironment(context, workspaceFolder) {
|
|
const env = {
|
|
workspaceFolder,
|
|
fs: context.runtimeEnv.fs,
|
|
locale: context.initializeParams.locale,
|
|
clientCapabilities: context.initializeParams.capabilities,
|
|
getConfiguration: context.configurationHost?.getConfiguration,
|
|
onDidChangeConfiguration: context.configurationHost?.onDidChangeConfiguration,
|
|
onDidChangeWatchedFiles: context.onDidChangeWatchedFiles,
|
|
typescript: {
|
|
fileNameToUri: uri_1.fileNameToUri,
|
|
uriToFileName: uri_1.uriToFileName,
|
|
},
|
|
};
|
|
return env;
|
|
}
|
|
exports.createServiceEnvironment = createServiceEnvironment;
|
|
function getWorkspaceFolder(uri, workspaceFolders) {
|
|
let parsed = vscode_uri_1.URI.parse(uri);
|
|
while (true) {
|
|
if (workspaceFolders.uriHas(parsed.toString())) {
|
|
return parsed.toString();
|
|
}
|
|
const next = vscode_uri_1.URI.parse(uri).with({ path: parsed.path.substring(0, parsed.path.lastIndexOf('/')) });
|
|
if (next.path === parsed.path) {
|
|
break;
|
|
}
|
|
parsed = next;
|
|
}
|
|
for (const folder of workspaceFolders.uriKeys()) {
|
|
return folder;
|
|
}
|
|
return vscode_uri_1.URI.parse(uri).with({ path: '/' }).toString();
|
|
}
|
|
exports.getWorkspaceFolder = getWorkspaceFolder;
|
|
//# sourceMappingURL=simpleProjectProvider.js.map
|