import type { JSONArray, JSONObject, JSONValue } from './json-value'; export function isJSONValue(value: unknown): value is JSONValue { if ( value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ) { return true; } if (Array.isArray(value)) { return value.every(isJSONValue); } if (typeof value === 'object') { return Object.entries(value).every( ([key, val]) => typeof key === 'string' && (val === undefined || isJSONValue(val)), ); } return false; } export function isJSONArray(value: unknown): value is JSONArray { return Array.isArray(value) && value.every(isJSONValue); } export function isJSONObject(value: unknown): value is JSONObject { return ( value != null && typeof value === 'object' && Object.entries(value).every( ([key, val]) => typeof key === 'string' && (val === undefined || isJSONValue(val)), ) ); }