66 lines
2.8 KiB
Plaintext
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 |