

























@@ -5,19 +5,21 @@ import { resolveIosVersion } from "./lib/ios-version.ts";
55type CliOptions = {
66field: string | null;
77format: "json" | "shell";
8+help: boolean;
89rootDir: string;
910};
10111112function parseArgs(argv: string[]): CliOptions {
1213let field: string | null = null;
1314let format: "json" | "shell" = "json";
15+let help = false;
1416let rootDir = path.resolve(".");
15171618for (let index = 0; index < argv.length; index += 1) {
1719const arg = argv[index];
1820switch (arg) {
1921case "--field": {
20-field = argv[index + 1] ?? null;
22+field = readOptionValue(argv, index, "--field");
2123index += 1;
2224break;
2325}
@@ -30,50 +32,74 @@ function parseArgs(argv: string[]): CliOptions {
3032break;
3133}
3234case "--root": {
33-const value = argv[index + 1];
34-if (!value) {
35-throw new Error("Missing value for --root.");
36-}
35+const value = readOptionValue(argv, index, "--root");
3736rootDir = path.resolve(value);
3837index += 1;
3938break;
4039}
4140case "-h":
4241case "--help": {
43-console.log(
44-`Usage: node --import tsx scripts/ios-version.ts [--json|--shell] [--field name] [--root dir]\n`,
45-);
46-process.exit(0);
42+help = true;
43+break;
4744}
4845default: {
4946throw new Error(`Unknown argument: ${arg}`);
5047}
5148}
5249}
535054-return { field, format, rootDir };
51+return { field, format, help, rootDir };
5552}
565357-const options = parseArgs(process.argv.slice(2));
58-const version = resolveIosVersion(options.rootDir);
59-60-if (options.field) {
61-const value = version[options.field as keyof typeof version];
62-if (value === undefined) {
63-throw new Error(`Unknown iOS version field '${options.field}'.`);
54+function readOptionValue(argv: string[], index: number, flag: string): string {
55+const value = argv[index + 1];
56+if (!value || value.startsWith("--")) {
57+throw new Error(`Missing value for ${flag}.`);
6458}
65-process.stdout.write(`${value}\n`);
66-process.exit(0);
59+return value;
6760}
686169-if (options.format === "shell") {
62+function printUsage(): void {
7063process.stdout.write(
71-[
72-`OPENCLAW_IOS_VERSION=${version.canonicalVersion}`,
73-`OPENCLAW_MARKETING_VERSION=${version.marketingVersion}`,
74-`OPENCLAW_BUILD_VERSION=${version.buildVersion}`,
75-].join("\n") + "\n",
64+"Usage: node --import tsx scripts/ios-version.ts [--json|--shell] [--field name] [--root dir]\n\n",
7665);
77-} else {
78-process.stdout.write(`${JSON.stringify(version, null, 2)}\n`);
66+}
67+68+function main(argv = process.argv.slice(2)): number {
69+const options = parseArgs(argv);
70+if (options.help) {
71+printUsage();
72+return 0;
73+}
74+75+const version = resolveIosVersion(options.rootDir);
76+77+if (options.field) {
78+const value = version[options.field as keyof typeof version];
79+if (value === undefined) {
80+throw new Error(`Unknown iOS version field '${options.field}'.`);
81+}
82+process.stdout.write(`${value}\n`);
83+return 0;
84+}
85+86+if (options.format === "shell") {
87+process.stdout.write(
88+[
89+`OPENCLAW_IOS_VERSION=${version.canonicalVersion}`,
90+`OPENCLAW_MARKETING_VERSION=${version.marketingVersion}`,
91+`OPENCLAW_BUILD_VERSION=${version.buildVersion}`,
92+].join("\n") + "\n",
93+);
94+} else {
95+process.stdout.write(`${JSON.stringify(version, null, 2)}\n`);
96+}
97+return 0;
98+}
99+100+try {
101+process.exitCode = main();
102+} catch (error) {
103+process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
104+process.exitCode = 1;
79105}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。