MCPcopy Create free account
hub / github.com/modem-dev/hunk / parseArgs

Function parseArgs

benchmarks/navigation-memory.ts:64–140  ·  view source on GitHub ↗

Parse a small flag set without pulling benchmark-only dependencies into the app.

(argv: string[])

Source from the content-addressed store, hash-verified

62
63/** Parse a small flag set without pulling benchmark-only dependencies into the app. */
64function parseArgs(argv: string[]): CliOptions {
65 const options = { ...defaultOptions };
66
67 for (let index = 0; index < argv.length; index += 1) {
68 const arg = argv[index]!;
69 if (arg === "--help" || arg === "-h") {
70 console.log(
71 `Usage: bun run benchmarks/navigation-memory.ts [options]\n\nOptions:\n --navigations <n> Key-driven hunk navigations (default ${defaultOptions.navigations})\n --warmup-navigations <n> Navigations ignored for trend analysis (default ${defaultOptions.warmupNavigations})\n --sample-every <n> Sample every N navigations (default ${defaultOptions.sampleEvery})\n --file-count <n> One-hunk files in the synthetic review (default ${defaultOptions.fileCount})\n --lines-per-file <n> Lines per synthetic file (default ${defaultOptions.linesPerFile})\n --width <n> Test renderer width (default ${defaultOptions.width})\n --height <n> Test renderer height (default ${defaultOptions.height})\n --mode <bounce|forward> Bounce avoids end-of-review no-ops (default ${defaultOptions.mode})\n --no-gc Do not force Bun.gc before samples\n --max-heap-growth-mb <n> Fail if post-warmup heap grows beyond this (default ${defaultOptions.maxHeapGrowthMb})\n --max-heap-slope-kb <n> Fail if post-warmup heap slope exceeds this per navigation (default ${defaultOptions.maxHeapSlopeKb})\n --max-rss-growth-mb <n> Fail if post-warmup RSS grows beyond this (default ${defaultOptions.maxRssGrowthMb})\n --json-out <path> Write full sample summary JSON\n`,
72 );
73 process.exit(0);
74 }
75
76 const next = () => argv[++index];
77 switch (arg) {
78 case "--navigations":
79 options.navigations = parseNumberOption(arg, next());
80 break;
81 case "--warmup-navigations":
82 options.warmupNavigations = parseNumberOption(arg, next());
83 break;
84 case "--sample-every":
85 options.sampleEvery = parseNumberOption(arg, next());
86 break;
87 case "--file-count":
88 options.fileCount = parseNumberOption(arg, next());
89 break;
90 case "--lines-per-file":
91 options.linesPerFile = parseNumberOption(arg, next());
92 break;
93 case "--width":
94 options.width = parseNumberOption(arg, next());
95 break;
96 case "--height":
97 options.height = parseNumberOption(arg, next());
98 break;
99 case "--mode": {
100 const mode = next();
101 if (mode !== "bounce" && mode !== "forward") {
102 throw new Error("Expected --mode to be either bounce or forward.");
103 }
104 options.mode = mode;
105 break;
106 }
107 case "--no-gc":
108 options.gc = false;
109 break;
110 case "--max-heap-growth-mb":
111 options.maxHeapGrowthMb = parseNumberOption(arg, next());
112 break;
113 case "--max-heap-slope-kb":
114 options.maxHeapSlopeKb = parseNumberOption(arg, next());
115 break;
116 case "--max-rss-growth-mb":
117 options.maxRssGrowthMb = parseNumberOption(arg, next());
118 break;
119 case "--json-out":
120 options.jsonOut = next();
121 if (!options.jsonOut) {

Callers 1

mainFunction · 0.70

Calls 2

parseNumberOptionFunction · 0.70
nextFunction · 0.70

Tested by

no test coverage detected