63 lines
3.0 KiB
Plaintext
63 lines
3.0 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createProjectService = void 0;
|
|
const packageJsonCache_1 = require("./packageJsonCache");
|
|
function createProjectService(ts, sys, currentDirectory, hostConfiguration, serverMode) {
|
|
const { toPath, getNormalizedAbsolutePath, normalizePath: toNormalizedPath, createGetCanonicalFileName, forEachAncestorDirectory, getDirectoryPath, } = ts;
|
|
const projectService = {
|
|
serverMode,
|
|
host: sys,
|
|
currentDirectory: toNormalizedPath(currentDirectory),
|
|
toCanonicalFileName: createGetCanonicalFileName(sys.useCaseSensitiveFileNames),
|
|
toPath(fileName) {
|
|
return toPath(fileName, this.currentDirectory, this.toCanonicalFileName);
|
|
},
|
|
getExecutingFilePath() {
|
|
return this.getNormalizedAbsolutePath(this.host.getExecutingFilePath());
|
|
},
|
|
getNormalizedAbsolutePath(fileName) {
|
|
return getNormalizedAbsolutePath(fileName, this.host.getCurrentDirectory());
|
|
},
|
|
packageJsonCache: undefined,
|
|
getPackageJsonsVisibleToFile(fileName, rootDir) {
|
|
const packageJsonCache = this.packageJsonCache;
|
|
const rootPath = rootDir && this.toPath(rootDir);
|
|
const filePath = this.toPath(fileName);
|
|
const result = [];
|
|
const processDirectory = (directory) => {
|
|
switch (packageJsonCache.directoryHasPackageJson(directory)) {
|
|
// Sync and check same directory again
|
|
case 3 /* Ternary.Maybe */:
|
|
packageJsonCache.searchDirectoryAndAncestors(directory);
|
|
return processDirectory(directory);
|
|
// Check package.json
|
|
case -1 /* Ternary.True */:
|
|
// const packageJsonFileName = _combinePaths(directory, "package.json");
|
|
// this.watchPackageJsonFile(packageJsonFileName as ts.Path); // TODO
|
|
const info = packageJsonCache.getInDirectory(directory);
|
|
if (info)
|
|
result.push(info);
|
|
}
|
|
if (rootPath && rootPath === directory) {
|
|
return true;
|
|
}
|
|
};
|
|
forEachAncestorDirectory(getDirectoryPath(filePath), processDirectory);
|
|
return result;
|
|
},
|
|
includePackageJsonAutoImports() {
|
|
switch (hostConfiguration.preferences.includePackageJsonAutoImports) {
|
|
case 'on': return 1 /* PackageJsonAutoImportPreference.On */;
|
|
case 'off': return 0 /* PackageJsonAutoImportPreference.Off */;
|
|
default: return 2 /* PackageJsonAutoImportPreference.Auto */;
|
|
}
|
|
},
|
|
fileExists(fileName) {
|
|
return this.host.fileExists(fileName);
|
|
},
|
|
};
|
|
projectService.packageJsonCache = (0, packageJsonCache_1.createPackageJsonCache)(ts, projectService);
|
|
return projectService;
|
|
}
|
|
exports.createProjectService = createProjectService;
|