(argv: readonly string[])
| 46 | | { kind: "stdin" }; |
| 47 | |
| 48 | async function parseArgs(argv: readonly string[]): Promise<Args> { |
| 49 | let agentId: string | undefined; |
| 50 | let messageSource: MessageSource | undefined; |
| 51 | let waitIdle = false; |
| 52 | let maxWaitSeconds = DEFAULT_MAX_WAIT_S; |
| 53 | let pollMs = DEFAULT_POLL_MS; |
| 54 | |
| 55 | const requireValue = (flag: string, value: string | undefined): string => { |
| 56 | if (value === undefined) { |
| 57 | console.error(`flag ${flag} requires a value`); |
| 58 | usage(); |
| 59 | } |
| 60 | return value; |
| 61 | }; |
| 62 | |
| 63 | for (let i = 0; i < argv.length; i++) { |
| 64 | const a = argv[i]; |
| 65 | switch (a) { |
| 66 | case "--message": |
| 67 | messageSource = setMessageSource(messageSource, { |
| 68 | kind: "inline", |
| 69 | text: requireValue("--message", argv[++i]), |
| 70 | }); |
| 71 | break; |
| 72 | case "--message-file": |
| 73 | messageSource = setMessageSource(messageSource, { |
| 74 | kind: "file", |
| 75 | path: requireValue("--message-file", argv[++i]), |
| 76 | }); |
| 77 | break; |
| 78 | case "--stdin": |
| 79 | messageSource = setMessageSource(messageSource, { kind: "stdin" }); |
| 80 | break; |
| 81 | case "--wait-idle": |
| 82 | waitIdle = true; |
| 83 | break; |
| 84 | case "--max-wait": { |
| 85 | const n = Number(requireValue("--max-wait", argv[++i])); |
| 86 | if (!Number.isFinite(n) || n <= 0) { |
| 87 | console.error("--max-wait must be a positive number of seconds"); |
| 88 | usage(); |
| 89 | } |
| 90 | maxWaitSeconds = n; |
| 91 | break; |
| 92 | } |
| 93 | case "--poll-ms": { |
| 94 | const n = Number(requireValue("--poll-ms", argv[++i])); |
| 95 | if (!Number.isFinite(n) || n <= 0) { |
| 96 | console.error("--poll-ms must be a positive number of milliseconds"); |
| 97 | usage(); |
| 98 | } |
| 99 | pollMs = n; |
| 100 | break; |
| 101 | } |
| 102 | case "-h": |
| 103 | case "--help": |
| 104 | return usage(); |
| 105 | default: |
no test coverage detected