Files
cc-utils/types/dkjson/index.d.ts

131 lines
4.1 KiB
TypeScript

/** @noResolution */
/**
* Represents a JSON null value that is distinct from Lua's nil.
*/
interface JsonNull {
readonly __json_null: unique symbol;
}
/**
* State object for JSON encoding options
*/
interface EncodeState {
/** When set, the output will contain newlines and indentations */
indent?: boolean;
/** Specifies ordering of keys in encoded output */
keyorder?: string[];
/** Initial indentation level when indent is set (2 spaces per level, default is 0) */
level?: number;
/** Array to store result strings for concatenation at once */
buffer?: string[];
/** Index of last element in buffer (when set) */
bufferlen?: number;
/** Used to detect reference cycles (temporary, created when absent) */
tables?: unknown[];
/** Called when encoder cannot encode a value */
exception?: (
reason: string,
value: unknown,
state: EncodeState,
defaultmessage: string,
) => unknown;
}
/**
* Options for JSON decoding with custom metatables
*/
interface DecodeOptions {
objectmeta?: unknown;
arraymeta?: unknown;
}
/**
* The dkjson module version string
*/
export const version: string;
/**
* Special value representing JSON null (distinct from Lua's nil)
*/
export const jsonNull: JsonNull;
/**
* Encode a Lua value to a JSON string.
* @param object The value to encode (can be a table, string, number, boolean, nil, json.null or any object with a __tojson function in its metatable)
* @param state Optional table with configuration options for encoding
* @returns A string containing the JSON representation, or true if state.buffer is set and encoding was successful
*/
export function encode(
object: object | string | number | boolean | undefined,
state?: EncodeState,
): string | boolean;
/**
* Decode a JSON string starting at a given position.
* @param str The JSON string to decode
* @param pos Starting position (default is 1)
* @param nullval Value to return for null values (default is nil, can be set to json.null)
* @param objectmeta Custom metatable for decoded objects (optional)
* @param arraymeta Custom metatable for decoded arrays (optional)
* @returns The decoded object (or the custom null value) and position of next character not part of the object, or undefined, position, and error message in case of errors
*/
export function decode(
str: string,
pos?: number,
nullval?: unknown,
objectmeta?: unknown,
arraymeta?: unknown,
): LuaMultiReturn<[object | undefined, number | undefined, string | undefined]>;
/**
* Quote a UTF-8 string and escape critical characters using JSON escape sequences.
* Only necessary when building custom __tojson functions.
* @param str The string to quote and escape
* @returns The quoted and escaped string
*/
export function quotestring(str: string): string;
/**
* When state.indent is set, adds a newline to state.buffer and spaces according to state.level.
* @param state The encoding state containing indent and level information
*/
export function addnewline(state: EncodeState): void;
/**
* Function that can be used as the exception option in encode. Instead of raising an error,
* this function encodes the error message as a string for debugging malformed input.
* @param reason The reason for the exception
* @param value The value that caused the exception
* @param state The encoding state
* @param defaultmessage The default error message
* @returns The encoded error message
*/
export function encodeexception(
reason: string,
value: unknown,
state: EncodeState,
defaultmessage: string,
): string;
/**
* Require the LPeg module and return a copy of the module table where the decode function
* is replaced by a version that uses LPeg for better performance.
* @returns A copy of the module with LPeg-optimized decode function
*/
export function use_lpeg(): {
version: string;
null: JsonNull;
encode: typeof encode;
decode: typeof decode;
quotestring: typeof quotestring;
addnewline: typeof addnewline;
encodeexception: typeof encodeexception;
use_lpeg: typeof use_lpeg;
using_lpeg: boolean;
};
/**
* Variable set to true in the module table copy that uses LPeg support.
*/
export const using_lpeg: boolean;