eslint-plugin-sonarjs
Version:
81 lines (80 loc) • 3.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.clearParsedDependencyFileCache = clearParsedDependencyFileCache;
exports.parsePackageJson = parsePackageJson;
exports.parsePackageJsonContent = parsePackageJsonContent;
exports.parsePnpmWorkspace = parsePnpmWorkspace;
exports.parseDenoManifest = parseDenoManifest;
const typescript_1 = __importDefault(require("typescript"));
const yaml_1 = __importDefault(require("yaml"));
const files_js_1 = require("../files.js");
const parsedPackageJsonCache = new Map();
const parsedPnpmWorkspaceCache = new Map();
const parsedDenoManifestCache = new Map();
function clearParsedDependencyFileCache() {
parsedPackageJsonCache.clear();
parsedPnpmWorkspaceCache.clear();
parsedDenoManifestCache.clear();
}
function getOrSetParsedDependencyFile(cache, file, parse) {
const cacheKey = (0, files_js_1.normalizeToAbsolutePath)(file.filePath);
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
const parsed = parse(file);
cache.set(cacheKey, parsed);
return parsed;
}
function parsePackageJson(file) {
return getOrSetParsedDependencyFile(parsedPackageJsonCache, file, file => parsePackageJsonContent(file.fileContent, file.filePath));
}
function parsePackageJsonContent(content, filePath) {
try {
return JSON.parse((0, files_js_1.stripBOM)(content));
}
catch (error) {
if (filePath) {
console.debug(`Error parsing package.json ${filePath}: ${error}`);
}
return undefined;
}
}
function parsePnpmWorkspace(file) {
return getOrSetParsedDependencyFile(parsedPnpmWorkspaceCache, file, parsePnpmWorkspaceContent);
}
function parsePnpmWorkspaceContent(file) {
try {
const parsedPnpm = yaml_1.default.parse(file.fileContent);
if (parsedPnpm &&
('catalog' in parsedPnpm || 'catalogs' in parsedPnpm || 'packages' in parsedPnpm)) {
return parsedPnpm;
}
return undefined;
}
catch (error) {
console.debug(`Error parsing pnpm workspace ${file.filePath}: ${error}`);
return undefined;
}
}
function parseDenoManifest(file) {
return getOrSetParsedDependencyFile(parsedDenoManifestCache, file, parseDenoManifestContent);
}
function parseDenoManifestContent(file) {
try {
// ts.parseConfigFileTextToJson handles JSON with comments and trailing commas
const parsed = typescript_1.default.parseConfigFileTextToJson(file.filePath, (0, files_js_1.stripBOM)(file.fileContent));
if (parsed.error) {
const message = typescript_1.default.flattenDiagnosticMessageText(parsed.error.messageText, '\n');
console.debug(`Error parsing deno manifest ${file.filePath}: ${message}`);
return;
}
return parsed.config;
}
catch (error) {
console.debug(`Error parsing deno manifest ${file.filePath}: ${error}`);
return;
}
}