mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Fix type check issues
This commit is contained in:
parent
3d98bb5084
commit
a2fb94d0f0
8 changed files with 60 additions and 4 deletions
|
|
@ -16,4 +16,4 @@ setEcoSystem(ECOSYSTEM_PY);
|
||||||
initializePackageManager(packageManagerName);
|
initializePackageManager(packageManagerName);
|
||||||
const exitCode = await main(argv);
|
const exitCode = await main(argv);
|
||||||
|
|
||||||
process.exit(exitCode);
|
process.exit(typeof exitCode === 'number' ? exitCode : 1);
|
||||||
|
|
|
||||||
|
|
@ -16,4 +16,4 @@ setEcoSystem(ECOSYSTEM_PY);
|
||||||
initializePackageManager(packageManagerName);
|
initializePackageManager(packageManagerName);
|
||||||
const exitCode = await main(argv);
|
const exitCode = await main(argv);
|
||||||
|
|
||||||
process.exit(exitCode);
|
process.exit(typeof exitCode === 'number' ? exitCode : 1);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,13 @@ import {
|
||||||
pipWheelCommand,
|
pipWheelCommand,
|
||||||
} from "./utils/pipCommands.js";
|
} from "./utils/pipCommands.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} [command]
|
||||||
|
*/
|
||||||
export function createPipPackageManager(command = "pip") {
|
export function createPipPackageManager(command = "pip") {
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function isSupportedCommand(args) {
|
function isSupportedCommand(args) {
|
||||||
const scanner = findDependencyScannerForCommand(
|
const scanner = findDependencyScannerForCommand(
|
||||||
commandScannerMapping,
|
commandScannerMapping,
|
||||||
|
|
@ -16,6 +22,9 @@ export function createPipPackageManager(command = "pip") {
|
||||||
return scanner.shouldScan(args);
|
return scanner.shouldScan(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function getDependencyUpdatesForCommand(args) {
|
function getDependencyUpdatesForCommand(args) {
|
||||||
const scanner = findDependencyScannerForCommand(
|
const scanner = findDependencyScannerForCommand(
|
||||||
commandScannerMapping,
|
commandScannerMapping,
|
||||||
|
|
@ -25,7 +34,7 @@ export function createPipPackageManager(command = "pip") {
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
runCommand: (args) => runPip(command, args),
|
runCommand: /** @param {string[]} args */ (args) => runPip(command, args),
|
||||||
isSupportedCommand,
|
isSupportedCommand,
|
||||||
getDependencyUpdatesForCommand,
|
getDependencyUpdatesForCommand,
|
||||||
};
|
};
|
||||||
|
|
@ -43,6 +52,10 @@ const NULL_SCANNER = {
|
||||||
scan: () => [],
|
scan: () => [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Record<string, any>} scanners
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function findDependencyScannerForCommand(scanners, args) {
|
function findDependencyScannerForCommand(scanners, args) {
|
||||||
const command = getPipCommandForArgs(args);
|
const command = getPipCommandForArgs(args);
|
||||||
if (!command) {
|
if (!command) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,22 @@
|
||||||
import { parsePackagesFromInstallArgs } from "../parsing/parsePackagesFromInstallArgs.js";
|
import { parsePackagesFromInstallArgs } from "../parsing/parsePackagesFromInstallArgs.js";
|
||||||
import { hasDryRunArg } from "../utils/pipCommands.js";
|
import { hasDryRunArg } from "../utils/pipCommands.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {{ ignoreDryRun?: boolean }} [options]
|
||||||
|
*/
|
||||||
export function commandArgumentScanner(options = {}) {
|
export function commandArgumentScanner(options = {}) {
|
||||||
const { ignoreDryRun = false } = options;
|
const { ignoreDryRun = false } = options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function shouldScan(args) {
|
function shouldScan(args) {
|
||||||
return shouldScanDependencies(args, ignoreDryRun);
|
return shouldScanDependencies(args, ignoreDryRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function scan(args) {
|
function scan(args) {
|
||||||
return scanDependencies(args);
|
return scanDependencies(args);
|
||||||
}
|
}
|
||||||
|
|
@ -18,14 +27,24 @@ export function commandArgumentScanner(options = {}) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
* @param {boolean} ignoreDryRun
|
||||||
|
*/
|
||||||
function shouldScanDependencies(args, ignoreDryRun) {
|
function shouldScanDependencies(args, ignoreDryRun) {
|
||||||
return ignoreDryRun || !hasDryRunArg(args);
|
return ignoreDryRun || !hasDryRunArg(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
function scanDependencies(args) {
|
function scanDependencies(args) {
|
||||||
return checkChangesFromArgs(args);
|
return checkChangesFromArgs(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
export function checkChangesFromArgs(args) {
|
export function checkChangesFromArgs(args) {
|
||||||
const packageUpdates = parsePackagesFromInstallArgs(args);
|
const packageUpdates = parsePackagesFromInstallArgs(args);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@
|
||||||
* - git+https://... (VCS URLs - returned without version)
|
* - git+https://... (VCS URLs - returned without version)
|
||||||
* - -r requirements.txt (handled by flag skipping)
|
* - -r requirements.txt (handled by flag skipping)
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
export function parsePackagesFromInstallArgs(args) {
|
export function parsePackagesFromInstallArgs(args) {
|
||||||
const packages = [];
|
const packages = [];
|
||||||
let skipNext = false;
|
let skipNext = false;
|
||||||
|
|
@ -48,6 +51,9 @@ export function parsePackagesFromInstallArgs(args) {
|
||||||
return packages;
|
return packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} arg
|
||||||
|
*/
|
||||||
function isPipOptionWithParameter(arg) {
|
function isPipOptionWithParameter(arg) {
|
||||||
|
|
||||||
// Check if a pip flag takes a parameter
|
// Check if a pip flag takes a parameter
|
||||||
|
|
@ -100,6 +106,9 @@ function isPipOptionWithParameter(arg) {
|
||||||
return optionsWithParameters.includes(arg);
|
return optionsWithParameters.includes(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} spec
|
||||||
|
*/
|
||||||
function parsePipSpec(spec) {
|
function parsePipSpec(spec) {
|
||||||
// Ignore obvious URLs and paths, rely on mitm scanner
|
// Ignore obvious URLs and paths, rely on mitm scanner
|
||||||
const lower = spec.toLowerCase();
|
const lower = spec.toLowerCase();
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,9 @@ export const pipInstallCommand = "install";
|
||||||
export const pipDownloadCommand = "download";
|
export const pipDownloadCommand = "download";
|
||||||
export const pipWheelCommand = "wheel";
|
export const pipWheelCommand = "wheel";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
export function getPipCommandForArgs(args) {
|
export function getPipCommandForArgs(args) {
|
||||||
if (!args || args.length === 0) {
|
if (!args || args.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -17,6 +20,9 @@ export function getPipCommandForArgs(args) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
export function hasDryRunArg(args) {
|
export function hasDryRunArg(args) {
|
||||||
return args.some((arg) => arg === "--dry-run");
|
return args.some(/** @param {string} arg */ (arg) => arg === "--dry-run");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,10 @@ export function parsePackageFromUrl(url) {
|
||||||
return { packageName: undefined, version: undefined };
|
return { packageName: undefined, version: undefined };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} url
|
||||||
|
* @param {string} registry
|
||||||
|
*/
|
||||||
function parseJsPackageFromUrl(url, registry) {
|
function parseJsPackageFromUrl(url, registry) {
|
||||||
let packageName, version;
|
let packageName, version;
|
||||||
if (!registry || !url.endsWith(".tgz")) {
|
if (!registry || !url.endsWith(".tgz")) {
|
||||||
|
|
@ -71,6 +75,10 @@ function parseJsPackageFromUrl(url, registry) {
|
||||||
return { packageName, version };
|
return { packageName, version };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} url
|
||||||
|
* @param {string} registry
|
||||||
|
*/
|
||||||
function parsePipPackageFromUrl(url, registry) {
|
function parsePipPackageFromUrl(url, registry) {
|
||||||
let packageName, version
|
let packageName, version
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ let cachedMalwareDatabase = null;
|
||||||
* Normalize package name for comparison.
|
* Normalize package name for comparison.
|
||||||
* For Python packages (PEP-503): lowercase and replace _, -, . with -
|
* For Python packages (PEP-503): lowercase and replace _, -, . with -
|
||||||
* For js packages: keep as-is (case-sensitive)
|
* For js packages: keep as-is (case-sensitive)
|
||||||
|
* @param {string} name
|
||||||
*/
|
*/
|
||||||
function normalizePackageName(name) {
|
function normalizePackageName(name) {
|
||||||
const ecosystem = getEcoSystem();
|
const ecosystem = getEcoSystem();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue