Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

73 lines
1.5 KiB
TypeScript

export function isRecord(value: unknown): value is Record<string, unknown> {
return !!value && typeof value === "object";
}
export function normalizeTextValue(value: unknown): string {
if (typeof value !== "string") {
return "";
}
return value.trim();
}
export function normalizeBoolean(value: unknown): boolean | null {
if (typeof value !== "boolean") {
return null;
}
return value;
}
export function normalizeIntegerInRange(
value: unknown,
fallback: number,
min: number,
max: number
): number {
if (typeof value !== "number" || !Number.isFinite(value)) {
return fallback;
}
const normalized = Math.round(value);
return Math.max(min, Math.min(max, normalized));
}
export function normalizeUniqueStringArray(value: unknown): string[] {
if (!Array.isArray(value)) {
return [];
}
const normalized: string[] = [];
for (const item of value) {
const entry = normalizeTextValue(item);
if (entry.length === 0 || normalized.includes(entry)) {
continue;
}
normalized.push(entry);
}
return normalized;
}
export function normalizeUniqueStringArrayWithFallback(
value: unknown,
fallback: string[]
): string[] {
if (!Array.isArray(value)) {
return [...fallback];
}
const normalized: string[] = [];
for (const item of value) {
const entry = normalizeTextValue(item);
if (entry.length === 0 || normalized.includes(entry)) {
continue;
}
normalized.push(entry);
}
return normalized.length > 0 ? normalized : [...fallback];
}