test(cli): treat omitted exactOptional inputs as optional
The advertised-schema check parsed undefined on each field. exactOptional rejects that value and still accepts a missing key, so inspect-wasm-artifact looked required for commandTimeoutMs. Judge omission with an object parse that leaves the key out. The advertised required list already matched that parse for every other primary command. Co-authored-by: morluto <morluto@users.noreply.github.com>
This commit is contained in:
1 parent
ea3534759f
commit
5eebe2fdf8
1 file changed
+8
-1
@@ -61,12 +61,19 @@ const parserSchema = (
|
||||
return schema instanceof z.ZodObject ? schema : undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Reject a key only when an object parse that omits it fails.
|
||||
* `exactOptional()` rejects explicit `undefined` and still accepts omission.
|
||||
*/
|
||||
const omissionRejected = (schema: z.ZodObject | undefined): string[] =>
|
||||
Object.entries(schema?.shape ?? {})
|
||||
.filter(([key, field]) => !z.object({ [key]: field }).safeParse({}).success)
|
||||
.filter(([key, field]) => !acceptsOmittedKey(key, field))
|
||||
.map(([key]) => key)
|
||||
.sort();
|
||||
|
||||
const acceptsOmittedKey = (key: string, field: z.ZodType): boolean =>
|
||||
z.object({ [key]: field }).safeParse({}).success;
|
||||
|
||||
describe("CLI advertised input schemas", () => {
|
||||
it("require exactly the inputs whose omission the parser rejects", async () => {
|
||||
const cli = createCli({});
|
||||
|
||||
Reference in new issue
Block a user