UNPKG

snyk-nodejs-lockfile-parser

Version:
93 lines 3.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.rewriteAliasesInOverrides = exports.rewriteAliases = exports.rewriteAliasesPkgJson = exports.parseNpmAlias = void 0; const util_1 = require("../dep-graph-builders/util"); /** * Parses a npm alias string (e.g., "npm:package@1.0.0") and returns the package name and version */ const parseNpmAlias = (aliasString) => { if (!aliasString.startsWith('npm:')) { return null; } const lastAtIndex = aliasString.lastIndexOf('@'); if (lastAtIndex <= 4) { // Invalid format: must have content after 'npm:' and before '@' return null; } return { packageName: aliasString.substring(4, lastAtIndex), version: aliasString.substring(lastAtIndex + 1), }; }; exports.parseNpmAlias = parseNpmAlias; /** * Adds an alias entry to the package.json aliases field */ const addAlias = (pkgJson, aliasName, targetDepName, semver) => { if (!pkgJson['aliases']) { pkgJson['aliases'] = {}; } pkgJson['aliases'][aliasName] = { aliasName, aliasTargetDepName: targetDepName, semver, version: null, }; }; const rewriteAliasesPkgJson = (packageJsonContent) => { const pkgJsonPreprocessed = (0, util_1.parsePkgJson)(packageJsonContent); pkgJsonPreprocessed.dependencies = (0, exports.rewriteAliases)(pkgJsonPreprocessed, pkgJsonPreprocessed.dependencies); pkgJsonPreprocessed.devDependencies = (0, exports.rewriteAliases)(pkgJsonPreprocessed, pkgJsonPreprocessed.devDependencies); pkgJsonPreprocessed.optionalDependencies = (0, exports.rewriteAliases)(pkgJsonPreprocessed, pkgJsonPreprocessed.optionalDependencies); pkgJsonPreprocessed.peerDependencies = (0, exports.rewriteAliases)(pkgJsonPreprocessed, pkgJsonPreprocessed.peerDependencies); // Process overrides field to extract aliases if (pkgJsonPreprocessed.overrides) { (0, exports.rewriteAliasesInOverrides)(pkgJsonPreprocessed, pkgJsonPreprocessed.overrides); } // Process resolutions field to extract aliases (yarn) if (pkgJsonPreprocessed.resolutions) { (0, exports.rewriteAliasesInOverrides)(pkgJsonPreprocessed, pkgJsonPreprocessed.resolutions); } return JSON.stringify(pkgJsonPreprocessed); }; exports.rewriteAliasesPkgJson = rewriteAliasesPkgJson; const rewriteAliases = (pkgJsonPreprocessed, dependencies) => { if (!dependencies) { return undefined; } const newDependencies = {}; for (const key in dependencies) { const value = dependencies[key]; const parsed = (0, exports.parseNpmAlias)(value); if (parsed) { addAlias(pkgJsonPreprocessed, key, parsed.packageName, parsed.version); } newDependencies[key] = value; } return newDependencies; }; exports.rewriteAliases = rewriteAliases; /** * Recursively processes the overrides object to extract aliases */ const rewriteAliasesInOverrides = (pkgJsonPreprocessed, overrides) => { if (typeof overrides === 'string') { return; // String values are handled at the parent level where we have the key } // Recursive case: process each key-value pair in the overrides object for (const key in overrides) { const value = overrides[key]; if (typeof value === 'string') { const parsed = (0, exports.parseNpmAlias)(value); if (parsed) { addAlias(pkgJsonPreprocessed, key, parsed.packageName, parsed.version); } } else if (typeof value === 'object') { // Recursively process nested overrides (0, exports.rewriteAliasesInOverrides)(pkgJsonPreprocessed, value); } } }; exports.rewriteAliasesInOverrides = rewriteAliasesInOverrides; //# sourceMappingURL=pkgJson.js.map