From 3f3b757e50e37dfdf68c69cb545a710fb2ced409 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 6 Jun 2026 22:29:12 +0200 Subject: [PATCH] fix(plugin): require runtime build package targets --- scripts/check-plugin-npm-runtime-builds.mjs | 16 +++++++----- scripts/lib/plugin-npm-runtime-build.mjs | 9 +++++-- .../plugin-npm-runtime-build-args.test.ts | 26 +++++++++++++++++++ 3 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 test/scripts/plugin-npm-runtime-build-args.test.ts diff --git a/scripts/check-plugin-npm-runtime-builds.mjs b/scripts/check-plugin-npm-runtime-builds.mjs index c9c48db4a2f..a12257d17c6 100644 --- a/scripts/check-plugin-npm-runtime-builds.mjs +++ b/scripts/check-plugin-npm-runtime-builds.mjs @@ -11,16 +11,20 @@ import { resolvePluginNpmRuntimeBuildPlan, } from "./lib/plugin-npm-runtime-build.mjs"; -function parseArgs(argv) { +function readPackageArgValue(argv, index) { + const value = argv[index + 1]; + if (value === undefined || value === "" || value.startsWith("--")) { + throw new Error("missing value for --package"); + } + return value; +} + +export function parseArgs(argv) { const packageDirs = []; for (let index = 0; index < argv.length; index += 1) { const arg = argv[index]; if (arg === "--package") { - const packageDir = argv[index + 1]; - if (!packageDir) { - throw new Error("missing value for --package"); - } - packageDirs.push(packageDir); + packageDirs.push(readPackageArgValue(argv, index)); index += 1; continue; } diff --git a/scripts/lib/plugin-npm-runtime-build.mjs b/scripts/lib/plugin-npm-runtime-build.mjs index 4af907dbd03..01a00890cfe 100644 --- a/scripts/lib/plugin-npm-runtime-build.mjs +++ b/scripts/lib/plugin-npm-runtime-build.mjs @@ -294,11 +294,16 @@ export async function buildPluginNpmRuntime(params) { }; } -function parseArgs(argv) { +function readPackageDirArg(argv) { const packageDir = argv[0]; - if (!packageDir) { + if (!packageDir || packageDir.startsWith("--")) { throw new Error("usage: node scripts/lib/plugin-npm-runtime-build.mjs "); } + return packageDir; +} + +export function parseArgs(argv) { + const packageDir = readPackageDirArg(argv); return { packageDir }; } diff --git a/test/scripts/plugin-npm-runtime-build-args.test.ts b/test/scripts/plugin-npm-runtime-build-args.test.ts new file mode 100644 index 00000000000..03feb076bd6 --- /dev/null +++ b/test/scripts/plugin-npm-runtime-build-args.test.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "vitest"; +import { parseArgs as parseBulkBuildArgs } from "../../scripts/check-plugin-npm-runtime-builds.mjs"; +import { parseArgs as parseSingleBuildArgs } from "../../scripts/lib/plugin-npm-runtime-build.mjs"; + +describe("plugin npm runtime build args", () => { + it("parses explicit plugin package build targets", () => { + expect( + parseBulkBuildArgs(["--package", "extensions/slack", "--package", "extensions/telegram"]), + ).toEqual({ + packageDirs: ["extensions/slack", "extensions/telegram"], + }); + expect(parseSingleBuildArgs(["extensions/slack"])).toEqual({ + packageDir: "extensions/slack", + }); + }); + + it("rejects missing or option-looking package targets", () => { + expect(() => parseBulkBuildArgs(["--package"])).toThrow("missing value for --package"); + expect(() => parseBulkBuildArgs(["--package", "--package", "extensions/slack"])).toThrow( + "missing value for --package", + ); + expect(() => parseSingleBuildArgs(["--package"])).toThrow( + "usage: node scripts/lib/plugin-npm-runtime-build.mjs ", + ); + }); +});