/
fleisar
/
agent-timetracker
Обзор
Документация
Войти
/
fleisar
/
agent-timetracker
Код
Запросы
0
Задачи
Вики
Пакеты
1
Релизы
2
CI/CD
Аналитика
Безопасность
main
src/util/json.ts
61 строка
1 KB
Matvey Kuznetsov
feat: add SQLite tracker storage
02 июл 2026, 18:27
02 июл 2026, 18:27
3511524
Код
Авторство
О чём код?
import type { Metadata } from "../domain/types.js"; function storageCorruption(message: string): Error { return new Error(message); } function isPlainObject(value: unknown): value is Record<string, unknown> { return typeof value === "object" && value !== null && !Array.isArray(value); } export function stringifyMetadata(value: Metadata | null | undefined): string { return JSON.stringify(value ?? {}); } export function parseMetadata(value: string | null | undefined): Metadata { if (value == null) { return {}; } let parsed: unknown; try { parsed = JSON.parse(value); } catch { throw storageCorruption("storage corruption: invalid metadata JSON"); } if (!isPlainObject(parsed)) { throw storageCorruption("storage corruption: metadata must be a JSON object"); } return parsed; } export function stringifyNullableStringArray( value: readonly string[] | null | undefined ): string | null { if (value == null) { return null; } return JSON.stringify(value); } export function parseNullableStringArray(value: string | null | undefined): string[] | null { if (value == null) { return null; } let parsed: unknown; try { parsed = JSON.parse(value); } catch { throw storageCorruption("storage corruption: invalid string array JSON"); } if (!Array.isArray(parsed) || parsed.some((entry) => typeof entry !== "string")) { throw storageCorruption("storage corruption: string array JSON must contain strings"); } return parsed; }