eslint-plugin-sonarjs
Version:
54 lines (53 loc) • 2.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDependencyManifests = exports.getPackageJsonManifestsSanitizePaths = exports.getPackageJsonManifests = void 0;
const files_js_1 = require("../files.js");
const index_js_1 = require("./index.js");
const all_in_parent_dirs_js_1 = require("../find-up/all-in-parent-dirs.js");
const deno_js_1 = require("./resolvers/deno.js");
const parsed_dependency_files_js_1 = require("./parsed-dependency-files.js");
const package_json_js_1 = require("./resolvers/package-json.js");
const top_dir_js_1 = require("./top-dir.js");
/**
* Returns the project manifests that are used to resolve the dependencies imported by
* the module named `filename`, up to the passed working directory.
*/
const getPackageJsonManifests = (dir, topDir, fileSystem) => {
const files = all_in_parent_dirs_js_1.patternInParentsCache
.get(index_js_1.PACKAGE_JSON, fileSystem)
.get(topDir ?? (0, files_js_1.getPathRoot)(dir))
.get(dir);
return files.map(file => (0, parsed_dependency_files_js_1.parsePackageJson)(file) ?? {});
};
exports.getPackageJsonManifests = getPackageJsonManifests;
const getPackageJsonManifestsSanitizePaths = (context, fileSystem) => {
const filePath = (0, files_js_1.normalizeToAbsolutePath)(context.filename);
return (0, exports.getPackageJsonManifests)((0, files_js_1.dirnamePath)(filePath), (0, top_dir_js_1.getDependencyTopDir)(context, filePath), fileSystem);
};
exports.getPackageJsonManifestsSanitizePaths = getPackageJsonManifestsSanitizePaths;
/**
* Registry of manifest resolvers. Add a new entry here to support a new package manager
* or manifest format (e.g., Bun).
*/
const MANIFEST_RESOLVERS = [deno_js_1.denoManifestResolver, package_json_js_1.packageJsonManifestResolver];
/**
* Returns dependency manifest files from closest-to-file and then up to root.
*
* For each directory, at most one Deno manifest is selected (`deno.json` > `deno.jsonc`)
* and `package.json` is always included when present.
*/
const getDependencyManifests = (dir, topDir, fileSystem) => {
const rootDir = topDir ?? (0, files_js_1.getPathRoot)(dir);
const manifests = [];
let currentDir = dir;
do {
const manifestsInDir = MANIFEST_RESOLVERS.flatMap(manifestResolver => manifestResolver.resolve(currentDir, rootDir, fileSystem));
manifests.push(...manifestsInDir);
if (currentDir === rootDir || (0, files_js_1.isRoot)(currentDir)) {
break;
}
currentDir = (0, files_js_1.dirnamePath)(currentDir);
} while (true);
return manifests;
};
exports.getDependencyManifests = getDependencyManifests;