55 lines
2.7 KiB
Plaintext
55 lines
2.7 KiB
Plaintext
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const projectService_1 = require("./projectService");
|
||
|
const project_1 = require("./project");
|
||
|
// only create the once for all hosts, as this will improve performance as the internal cache can be reused
|
||
|
let projectService;
|
||
|
const projects = new Set();
|
||
|
function default_1(ts, sys, host, createLanguageService, _createProject = project_1.createProject) {
|
||
|
const hostConfiguration = { preferences: { includePackageJsonAutoImports: 'auto' } };
|
||
|
if (!projectService) {
|
||
|
projectService = (0, projectService_1.createProjectService)(ts, sys, host.getCurrentDirectory(), hostConfiguration, ts.LanguageServiceMode.Semantic);
|
||
|
}
|
||
|
const project = _createProject(ts, host, createLanguageService, {
|
||
|
projectService,
|
||
|
currentDirectory: host.getCurrentDirectory(),
|
||
|
compilerOptions: host.getCompilationSettings(),
|
||
|
});
|
||
|
const proxyMethods = [
|
||
|
'getCachedExportInfoMap',
|
||
|
'getModuleSpecifierCache',
|
||
|
'getGlobalTypingsCacheLocation',
|
||
|
'getSymlinkCache',
|
||
|
'getPackageJsonsVisibleToFile',
|
||
|
'getPackageJsonAutoImportProvider',
|
||
|
'includePackageJsonAutoImports',
|
||
|
'useSourceOfProjectReferenceRedirect'
|
||
|
];
|
||
|
proxyMethods.forEach(key => host[key] = project[key].bind(project));
|
||
|
(0, project_1.initProject)(project, host, createLanguageService);
|
||
|
projects.add(project);
|
||
|
return {
|
||
|
languageService: project.languageService,
|
||
|
setPreferences(newPreferences) {
|
||
|
let onAutoImportProviderSettingsChanged = newPreferences.includePackageJsonAutoImports !== hostConfiguration.preferences.includePackageJsonAutoImports;
|
||
|
hostConfiguration.preferences = newPreferences;
|
||
|
if (onAutoImportProviderSettingsChanged) {
|
||
|
project.onAutoImportProviderSettingsChanged();
|
||
|
}
|
||
|
},
|
||
|
projectUpdated(path) {
|
||
|
projects.forEach(projectToUpdate => {
|
||
|
var _a, _b, _c;
|
||
|
if (project === projectToUpdate || !projectToUpdate.autoImportProviderHost)
|
||
|
return;
|
||
|
const realPaths = [...(_c = (_b = (_a = projectToUpdate.symlinks) === null || _a === void 0 ? void 0 : _a.getSymlinkedDirectoriesByRealpath()) === null || _b === void 0 ? void 0 : _b.keys()) !== null && _c !== void 0 ? _c : []]
|
||
|
.map(name => projectToUpdate.projectService.getNormalizedAbsolutePath(name));
|
||
|
if (realPaths.includes(projectToUpdate.projectService.toCanonicalFileName(path))) {
|
||
|
projectToUpdate.autoImportProviderHost.markAsDirty();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
exports.default = default_1;
|