mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Type check safe-chain package
This commit is contained in:
parent
d5dc801c00
commit
c88b1a624f
60 changed files with 1179 additions and 33 deletions
|
|
@ -3,6 +3,9 @@ import { runYarnCommand } from "./runYarnCommand.js";
|
|||
|
||||
const scanner = commandArgumentScanner();
|
||||
|
||||
/**
|
||||
* @returns {import("../currentPackageManager.js").PackageManager}
|
||||
*/
|
||||
export function createYarnPackageManager() {
|
||||
return {
|
||||
runCommand: runYarnCommand,
|
||||
|
|
@ -18,6 +21,11 @@ export function createYarnPackageManager() {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
* @param {...string} commandArgs
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function matchesCommand(args, ...commandArgs) {
|
||||
if (args.length < commandArgs.length) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import { resolvePackageVersion } from "../../../api/npmApi.js";
|
||||
import { parsePackagesFromArguments } from "../parsing/parsePackagesFromArguments.js";
|
||||
|
||||
/**
|
||||
* @returns {import("../../npm/dependencyScanner/commandArgumentScanner.js").CommandArgumentScanner}
|
||||
*/
|
||||
export function commandArgumentScanner() {
|
||||
return {
|
||||
scan: (args) => scanDependencies(args),
|
||||
|
|
@ -8,6 +11,10 @@ export function commandArgumentScanner() {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
* @returns {Promise<import("../../npm/dependencyScanner/commandArgumentScanner.js").ScanResult[]>}
|
||||
*/
|
||||
async function scanDependencies(args) {
|
||||
const changes = [];
|
||||
const packageUpdates = parsePackagesFromArguments(args);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
/**
|
||||
* @param {string[]} args
|
||||
* @returns {{name: string, version: string}[]}
|
||||
*/
|
||||
export function parsePackagesFromArguments(args) {
|
||||
const changes = [];
|
||||
let defaultTag = "latest";
|
||||
|
|
@ -22,6 +26,11 @@ export function parsePackagesFromArguments(args) {
|
|||
return changes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} arg
|
||||
*
|
||||
* @returns {{name: string, numberOfParameters: number} | undefined}
|
||||
*/
|
||||
function getOption(arg) {
|
||||
if (isOptionWithParameter(arg)) {
|
||||
return {
|
||||
|
|
@ -42,6 +51,11 @@ function getOption(arg) {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} arg
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isOptionWithParameter(arg) {
|
||||
const optionsWithParameters = [
|
||||
"--use-yarnrc",
|
||||
|
|
@ -64,6 +78,12 @@ function isOptionWithParameter(arg) {
|
|||
return optionsWithParameters.includes(arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} arg
|
||||
* @param {string} defaultTag
|
||||
*
|
||||
* @returns {{name: string, version: string}}
|
||||
*/
|
||||
function parsePackagename(arg, defaultTag) {
|
||||
// format can be --package=name@version
|
||||
// in that case, we need to remove the --package= part
|
||||
|
|
@ -93,6 +113,10 @@ function parsePackagename(arg, defaultTag) {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} arg
|
||||
* @returns {string}
|
||||
*/
|
||||
function removeAlias(arg) {
|
||||
// removes the alias.
|
||||
// Eg.: server@npm:http-server@latest becomes http-server@latest
|
||||
|
|
|
|||
|
|
@ -2,8 +2,14 @@ import { ui } from "../../environment/userInteraction.js";
|
|||
import { safeSpawn } from "../../utils/safeSpawn.js";
|
||||
import { mergeSafeChainProxyEnvironmentVariables } from "../../registryProxy/registryProxy.js";
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
*
|
||||
* @returns {Promise<{status: number}>}
|
||||
*/
|
||||
export async function runYarnCommand(args) {
|
||||
try {
|
||||
// @ts-expect-error values of process.env can be string | undefined
|
||||
const env = mergeSafeChainProxyEnvironmentVariables(process.env);
|
||||
await fixYarnProxyEnvironmentVariables(env);
|
||||
|
||||
|
|
@ -12,7 +18,7 @@ export async function runYarnCommand(args) {
|
|||
env,
|
||||
});
|
||||
return { status: result.status };
|
||||
} catch (error) {
|
||||
} catch (/** @type any */ error) {
|
||||
if (error.status) {
|
||||
return { status: error.status };
|
||||
} else {
|
||||
|
|
@ -22,6 +28,11 @@ export async function runYarnCommand(args) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Record<string, string>} env
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function fixYarnProxyEnvironmentVariables(env) {
|
||||
// Yarn ignores standard proxy environment variable HTTPS_PROXY
|
||||
// It does respect NODE_EXTRA_CA_CERTS for custom CA certificates though.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue