chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user