mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-05-23 04:28:06 +00:00
110 lines
2.6 KiB
JavaScript
110 lines
2.6 KiB
JavaScript
/**
|
|
* Args parser for feature-triage CLI.
|
|
* Precedence: CLI flag > env var > default.
|
|
*/
|
|
|
|
const DEFAULTS = {
|
|
quarantineDays: 14,
|
|
overrideThumbs: 5,
|
|
overrideCommenters: 3,
|
|
staleNeedsDays: 30,
|
|
staleDeferDays: 90,
|
|
ideiaDir: "_ideia",
|
|
changelog: "CHANGELOG.md",
|
|
output: null,
|
|
dryRun: false,
|
|
verbose: false,
|
|
onlyIssues: [],
|
|
};
|
|
|
|
const ENV_MAP = {
|
|
quarantineDays: "FEATURE_QUARANTINE_DAYS",
|
|
overrideThumbs: "FEATURE_OVERRIDE_THUMBS",
|
|
overrideCommenters: "FEATURE_OVERRIDE_COMMENTERS",
|
|
staleNeedsDays: "FEATURE_STALE_NEEDS_DAYS",
|
|
staleDeferDays: "FEATURE_STALE_DEFER_DAYS",
|
|
};
|
|
|
|
function takeNext(argv, i) {
|
|
if (i + 1 >= argv.length) {
|
|
throw new Error(`${argv[i]} requires a value`);
|
|
}
|
|
return argv[i + 1];
|
|
}
|
|
|
|
export function parseArgs(argv, env = process.env) {
|
|
const out = { ...DEFAULTS, owner: null, repo: null };
|
|
|
|
for (const [key, envKey] of Object.entries(ENV_MAP)) {
|
|
if (env[envKey] !== undefined) {
|
|
const n = Number(env[envKey]);
|
|
if (Number.isFinite(n)) out[key] = n;
|
|
}
|
|
}
|
|
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const a = argv[i];
|
|
switch (a) {
|
|
case "--owner":
|
|
out.owner = takeNext(argv, i);
|
|
i++;
|
|
break;
|
|
case "--repo":
|
|
out.repo = takeNext(argv, i);
|
|
i++;
|
|
break;
|
|
case "--quarantine-days":
|
|
out.quarantineDays = Number(takeNext(argv, i));
|
|
i++;
|
|
break;
|
|
case "--override-thumbs":
|
|
out.overrideThumbs = Number(takeNext(argv, i));
|
|
i++;
|
|
break;
|
|
case "--override-commenters":
|
|
out.overrideCommenters = Number(takeNext(argv, i));
|
|
i++;
|
|
break;
|
|
case "--stale-needs-days":
|
|
out.staleNeedsDays = Number(takeNext(argv, i));
|
|
i++;
|
|
break;
|
|
case "--stale-defer-days":
|
|
out.staleDeferDays = Number(takeNext(argv, i));
|
|
i++;
|
|
break;
|
|
case "--ideia-dir":
|
|
out.ideiaDir = takeNext(argv, i);
|
|
i++;
|
|
break;
|
|
case "--changelog":
|
|
out.changelog = takeNext(argv, i);
|
|
i++;
|
|
break;
|
|
case "--output":
|
|
out.output = takeNext(argv, i);
|
|
i++;
|
|
break;
|
|
case "--dry-run":
|
|
out.dryRun = true;
|
|
break;
|
|
case "--verbose":
|
|
out.verbose = true;
|
|
break;
|
|
case "--only-issues":
|
|
out.onlyIssues = takeNext(argv, i)
|
|
.split(",")
|
|
.map((s) => Number(s.trim()))
|
|
.filter(Number.isFinite);
|
|
i++;
|
|
break;
|
|
default:
|
|
throw new Error(`Unknown arg: ${a}`);
|
|
}
|
|
}
|
|
|
|
if (!out.owner) throw new Error("--owner is required");
|
|
if (!out.repo) throw new Error("--repo is required");
|
|
|
|
return out;
|
|
}
|