/** * Utility functions for JSON. */ import { isJSONValue, type JSONObject, type JSONValue } from "../types"; /** * Parses the given `string` and converts it into a {@link JSONValue}. * * For the string to be considered valid JSON it has to satisfy the requirements for {@link JSON.parse}. * * @param str - `string` to parse. * @returns The parsed integer JSON value. * @throws {@link SyntaxError} - If the given `string` does not represent a valid JSON value. */ export function parseJSON(str: string): JSONValue { const json = JSON.parse(str); if (!isJSONValue(json)) { throw new Error("Invalid JSON returned. Should never happen."); } return json; } /** * Removes `undefined` fields from the given JSON'ish object to make it a valid {@link JSONObject}. * * Note: This only happens for fields directly belonging to the given object. No recursive cleanup is performed. * * @param obj - Object to remove `undefined` fields from. * @returns Cleaned up JSON object. */ export function filterUndefinedFromJSON(obj: { [key: string]: JSONValue | undefined; }): JSONObject { const result: JSONObject = {}; for (const [key, value] of Object.entries(obj)) { if (value !== undefined) { result[key] = value; } } return result; }