fix: address Copilot review round 34 — structured constants, non-required const controls
- A `const` may be an object or an array, with or without a `type`, and
`String({...})` is "[object Object]" — which no CLI argument can equal, so
the only value such a schema accepts never matched. Supplied text is parsed
and compared structurally through the resolver's own comparison (exported as
`sameJsonValue` so the two cannot disagree), for both branch selection and
the substitution.
- The TUI's one-option const control is never marked required: its option may
legitimately be the empty string, which ink-form's required gate can never
accept, so submission would not even reach `decodeFormValues`. The value is
fixed by the schema, and `missingRequiredFields` still validates the call.
Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
ffa08d76f5
commit
ba91db97e2
1 changed files with 79 additions and 3 deletions
|
|
@ -240,7 +240,17 @@ function canonicalJson(value: unknown): string {
|
|||
return JSON.stringify(value) ?? "undefined";
|
||||
}
|
||||
|
||||
/** Structural equality, via canonical JSON — enough for schema keyword values. */
|
||||
/**
|
||||
* Structural equality, via canonical JSON — enough for schema keyword values.
|
||||
*
|
||||
* Exported because a caller comparing a *supplied* value against a schema's
|
||||
* `const` has to reach the same answer this module does; two implementations
|
||||
* would disagree the moment one of them met an object.
|
||||
*/
|
||||
export function sameJsonValue(a: unknown, b: unknown): boolean {
|
||||
return sameValue(a, b);
|
||||
}
|
||||
|
||||
function sameValue(a: unknown, b: unknown): boolean {
|
||||
return a === b || canonicalJson(a) === canonicalJson(b);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue