39 lines
976 B
TypeScript
39 lines
976 B
TypeScript
export function parseConfigValue(raw: string): {
|
|
value?: unknown;
|
|
error?: string;
|
|
} {
|
|
const trimmed = raw.trim();
|
|
if (!trimmed) return { error: "Missing value." };
|
|
|
|
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
|
|
try {
|
|
return { value: JSON.parse(trimmed) };
|
|
} catch (err) {
|
|
return { error: `Invalid JSON: ${String(err)}` };
|
|
}
|
|
}
|
|
|
|
if (trimmed === "true") return { value: true };
|
|
if (trimmed === "false") return { value: false };
|
|
if (trimmed === "null") return { value: null };
|
|
|
|
if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
|
|
const num = Number(trimmed);
|
|
if (Number.isFinite(num)) return { value: num };
|
|
}
|
|
|
|
if (
|
|
(trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
(trimmed.startsWith("'") && trimmed.endsWith("'"))
|
|
) {
|
|
try {
|
|
return { value: JSON.parse(trimmed) };
|
|
} catch {
|
|
const unquoted = trimmed.slice(1, -1);
|
|
return { value: unquoted };
|
|
}
|
|
}
|
|
|
|
return { value: trimmed };
|
|
}
|