























@@ -87,64 +87,72 @@ export function parseArgs(argv) {
8787windowsNodeInstallerDigests: "",
8888outputDir: "",
8989};
90+const seen = new Set();
91+const setOnce = (flag, key, value) => {
92+if (seen.has(flag)) {
93+throw new Error(`${flag} was provided more than once`);
94+}
95+seen.add(flag);
96+options[key] = value;
97+};
9098 parseArgv: for (let index = 0; index < args.length; index += 1) {
9199const arg = args[index];
92100switch (arg) {
93101case "--":
94102break parseArgv;
95103case "--tag":
96-options.tag = requireValue(args, ++index, arg);
104+setOnce(arg, "tag", requireValue(args, ++index, arg));
97105break;
98106case "--workflow-ref":
99-options.workflowRef = requireValue(args, ++index, arg);
107+setOnce(arg, "workflowRef", requireValue(args, ++index, arg));
100108break;
101109case "--repo":
102-options.repo = requireValue(args, ++index, arg);
110+setOnce(arg, "repo", requireValue(args, ++index, arg));
103111break;
104112case "--full-release-run":
105-options.fullReleaseRunId = requireValue(args, ++index, arg);
113+setOnce(arg, "fullReleaseRunId", requireValue(args, ++index, arg));
106114break;
107115case "--npm-preflight-run":
108-options.npmPreflightRunId = requireValue(args, ++index, arg);
116+setOnce(arg, "npmPreflightRunId", requireValue(args, ++index, arg));
109117break;
110118case "--windows-node-tag":
111-options.windowsNodeTag = requireValue(args, ++index, arg);
119+setOnce(arg, "windowsNodeTag", requireValue(args, ++index, arg));
112120break;
113121case "--skip-dispatch":
114-options.skipDispatch = true;
122+setOnce(arg, "skipDispatch", true);
115123break;
116124case "--skip-local-generated-check":
117-options.skipLocalGeneratedCheck = true;
125+setOnce(arg, "skipLocalGeneratedCheck", true);
118126break;
119127case "--skip-parallels":
120-options.skipParallels = true;
128+setOnce(arg, "skipParallels", true);
121129break;
122130case "--skip-telegram":
123-options.skipTelegram = true;
131+setOnce(arg, "skipTelegram", true);
124132break;
125133case "--telegram-provider-mode":
126-options.telegramProviderMode = requireValue(args, ++index, arg);
134+setOnce(arg, "telegramProviderMode", requireValue(args, ++index, arg));
127135break;
128136case "--provider":
129-options.provider = requireValue(args, ++index, arg);
137+setOnce(arg, "provider", requireValue(args, ++index, arg));
130138break;
131139case "--mode":
132-options.mode = requireValue(args, ++index, arg);
140+setOnce(arg, "mode", requireValue(args, ++index, arg));
133141break;
134142case "--release-profile":
135-options.releaseProfile = requireValue(args, ++index, arg);
143+setOnce(arg, "releaseProfile", requireValue(args, ++index, arg));
136144break;
137145case "--npm-dist-tag":
138-options.npmDistTag = requireValue(args, ++index, arg);
146+setOnce(arg, "npmDistTag", requireValue(args, ++index, arg));
139147break;
140148case "--plugin-publish-scope":
141-options.pluginPublishScope = requireValue(args, ++index, arg);
149+setOnce(arg, "pluginPublishScope", requireValue(args, ++index, arg));
142150break;
143151case "--plugins":
144-options.plugins = requireValue(args, ++index, arg);
152+setOnce(arg, "plugins", requireValue(args, ++index, arg));
145153break;
146154case "--output-dir":
147-options.outputDir = requireValue(args, ++index, arg);
155+setOnce(arg, "outputDir", requireValue(args, ++index, arg));
148156break;
149157case "-h":
150158case "--help":
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。