将原 claude-dev-stack 目录拆分为独立的 Windows 和 WSL 部署栈,便于分别维护和使用。 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
import { z } from "zod";
|
|
/**
|
|
* Coerce a value that might be a JSON string into a string array.
|
|
* LLMs sometimes pass arrays as stringified JSON (e.g. '["a","b"]' instead of ["a","b"]).
|
|
*/
|
|
export function coerceStringArray() {
|
|
return z.preprocess((val) => {
|
|
if (typeof val === "string") {
|
|
try {
|
|
const parsed = JSON.parse(val);
|
|
if (Array.isArray(parsed))
|
|
return parsed;
|
|
}
|
|
catch {
|
|
// not JSON, return as-is for zod to validate
|
|
}
|
|
}
|
|
return val;
|
|
}, z.array(z.string()));
|
|
}
|
|
/**
|
|
* Coerce a value that might be a numeric string into a number.
|
|
* LLMs sometimes pass numbers as strings (e.g. "30" instead of 30).
|
|
*/
|
|
export function coerceNumber() {
|
|
return z.preprocess((val) => {
|
|
if (typeof val === "string") {
|
|
const n = Number(val);
|
|
if (!isNaN(n))
|
|
return n;
|
|
}
|
|
return val;
|
|
}, z.number());
|
|
}
|
|
//# sourceMappingURL=zod-coerce.js.map
|