import type { KeyOf, ValueOf1 as ValueOf } from '../types.js'; declare const nodeValueSymbol: unique symbol; export interface NodeComments { readonly comment?: string | undefined; readonly commentBefore?: string | undefined; } export interface NodeValue extends NodeComments { readonly [nodeValueSymbol]?: true; readonly value: T; } export type NodeOrValue = T | NodeValue; export interface CfgNodeBase { readonly type: 'scalar' | 'array' | 'object'; readonly value: T; getValue?: (>(key: K) => ValueOf | undefined) | undefined; getNode?: (>(key: K) => RCfgNode> | undefined) | undefined; setValue?: (>(key: K, value: NodeOrValue>) => void) | undefined; delete?: (>(key: K) => boolean) | undefined; readonly length?: number | undefined; comment?: string | undefined; commentBefore?: string | undefined; } type ScalarValue = string | number | boolean | null | undefined; export interface CfgScalarNode extends CfgNodeBase { readonly type: 'scalar'; readonly value: T; setValue?: undefined; getValue?: undefined; getNode?: undefined; setNode?: undefined; sort?: undefined; getItems?: undefined; length?: undefined; } export interface CfgArrayNode extends CfgNodeBase<{ [key: number]: T; }> { readonly type: 'array'; readonly value: T[]; getValue: (key: number) => T | undefined; getNode: (key: number) => RCfgNode | undefined; setValue: (key: number, value: NodeOrValue) => void; delete: (key: number) => boolean; push: (value: NodeOrValue) => number; readonly length: number; } export interface CfgObjectNode extends CfgNodeBase { readonly type: 'object'; getValue: >(key: K) => ValueOf | undefined; getNode: >(key: K) => RCfgNode> | undefined; setValue: >(key: K, value: NodeOrValue>) => void; delete: >(key: K) => boolean; readonly length?: undefined; } export type RCfgNode = T extends undefined ? undefined : CfgNode; export type CfgNode = T extends unknown[] ? CfgArrayNode : T extends object ? CfgObjectNode : T extends string | number | boolean | undefined ? CfgScalarNode : CfgNodeBase; export declare function isNodeValue(value: unknown): value is NodeValue; export declare function createNodeValue(value: T, comment?: string, commentBefore?: string): NodeValue; export declare function isCfgArrayNode(node: CfgArrayNode | CfgNodeBase | undefined): node is CfgArrayNode; export declare function isCfgObjectNode(node: CfgObjectNode | CfgNodeBase | undefined): node is CfgObjectNode; export declare function isCfgScalarNode(node: CfgNodeBase | CfgNodeBase | undefined): node is CfgScalarNode; export {}; //# sourceMappingURL=CfgTree.d.ts.map