UNPKG

eslint-plugin-sonarjs

Version:
54 lines (53 loc) • 2.68 kB
"use strict"; 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;