

















@@ -19,6 +19,51 @@ type InstalledPackageJson = {
1919version?: string;
2020};
212122+export type OpenClawNpmPrepublishVerifyArgs =
23+| {
24+expectedVersion?: string;
25+ help: false;
26+ tarballPath: string;
27+}
28+| {
29+expectedVersion?: undefined;
30+ help: true;
31+ tarballPath: "";
32+};
33+34+export function openClawNpmPrepublishVerifyUsage(): string {
35+return "Usage: node --import tsx scripts/openclaw-npm-prepublish-verify.ts <tarball.tgz> [expected-version]";
36+}
37+38+export function parseOpenClawNpmPrepublishVerifyArgs(
39+argv: readonly string[],
40+): OpenClawNpmPrepublishVerifyArgs {
41+const args = argv[0] === "--" ? argv.slice(1) : argv;
42+const tarballPath = args[0]?.trim() ?? "";
43+if (tarballPath === "--help" || tarballPath === "-h") {
44+return { help: true, tarballPath: "" };
45+}
46+if (!tarballPath) {
47+throw new Error(openClawNpmPrepublishVerifyUsage());
48+}
49+if (tarballPath.startsWith("-")) {
50+throw new Error(`Unknown openclaw npm prepublish verifier option: ${tarballPath}`);
51+}
52+53+const expectedVersion = args[1]?.trim();
54+if (expectedVersion?.startsWith("-")) {
55+throw new Error(`Unknown openclaw npm prepublish verifier option: ${expectedVersion}`);
56+}
57+const extraArg = args[2]?.trim();
58+if (extraArg) {
59+throw new Error(`Unexpected openclaw npm prepublish verifier argument: ${extraArg}`);
60+}
61+62+return expectedVersion
63+ ? { expectedVersion, help: false, tarballPath }
64+ : { help: false, tarballPath };
65+}
66+2267function npmExec(args: string[], cwd: string): string {
2368const invocation = resolveNpmCommandInvocation({
2469npmArgs: args,
@@ -30,13 +75,11 @@ function npmExec(args: string[], cwd: string): string {
3075return runNpmVerifyCommand(invocation, cwd);
3176}
327733-function main(): void {
34-const tarballPath = process.argv[2]?.trim();
35-const expectedVersion = process.argv[3]?.trim();
36-if (!tarballPath) {
37-throw new Error(
38-"Usage: node --import tsx scripts/openclaw-npm-prepublish-verify.ts <tarball.tgz> [expected-version]",
39-);
78+function main(argv = process.argv.slice(2)): void {
79+const args = parseOpenClawNpmPrepublishVerifyArgs(argv);
80+if (args.help) {
81+console.log(openClawNpmPrepublishVerifyUsage());
82+return;
4083}
41844285const workingDir = mkdtempSync(join(tmpdir(), "openclaw-prepublish-"));
@@ -48,7 +91,7 @@ function main(): void {
4891"-g",
4992"--prefix",
5093prefixDir,
51-realpathSync(tarballPath),
94+realpathSync(args.tarballPath),
5295"--no-fund",
5396"--no-audit",
5497],
@@ -59,7 +102,7 @@ function main(): void {
59102const pkg = JSON.parse(
60103readFileSync(join(packageRoot, "package.json"), "utf8"),
61104) as InstalledPackageJson;
62-const resolvedExpectedVersion = expectedVersion || pkg.version?.trim() || "";
105+const resolvedExpectedVersion = args.expectedVersion || pkg.version?.trim() || "";
63106const errors = collectInstalledPackageErrors({
64107expectedVersion: resolvedExpectedVersion,
65108installedVersion: pkg.version?.trim() ?? "",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。