import * as TS from "typescript"; type MetaNode = TS.Node & { jsDoc?: TS.JSDoc[]; _original?: MetaNode; original?: MetaNode; _symbol?: TS.Symbol; symbol?: TS.Symbol; _parent?: MetaNode; localSymbol?: TS.Symbol; emitNode?: { leadingComments?: TS.SynthesizedComment[]; trailingComments?: TS.SynthesizedComment[]; }; }; type NodeHookValue = T[Key] extends TS.NodeArray ? ElementTypeA[] | TS.NodeArray : T[Key] extends TS.NodeArray | undefined ? ElementTypeB[] | TS.NodeArray | undefined : T[Key]; interface CloneNodeHookFactoryPayload { depth: number; } type CloneNodeHookCallback = (value: NodeHookValue, oldValue: NodeHookValue) => NodeHookValue; type CloneNodeFinalizerCallback = (newNode: T, oldNode: T, payload: CloneNodeHookFactoryPayload) => T | void | undefined; type CloneNodeHook = { [Key in keyof T]?: CloneNodeHookCallback; }; type CloneNodeHookFactory = (node: T, payload: CloneNodeHookFactoryPayload) => CloneNodeHook | undefined; interface CloneNodeOptions { hook: CloneNodeHookFactory; finalize: CloneNodeFinalizerCallback; typescript: typeof TS; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore factory: TS.NodeFactory; setParents: boolean; setOriginalNodes: boolean; preserveSymbols: boolean; preserveComments: boolean; debug: boolean; } type ParentPropertyName = "parent" | "_parent"; interface SetParentNodesOptions { propertyName: ParentPropertyName; deep: boolean; typescript: typeof TS; } declare function setParentNodes(node: T, options: Partial): T; declare function preserveNode(node: T, oldNode: T, options?: Partial>): T; declare function preserveNode(node: undefined, oldNode: undefined, options?: Partial>): undefined; declare function preserveNode(node: T | undefined, oldNode: T | undefined, options?: Partial>): T | undefined; declare function cloneNode(node: T, options?: Partial>): T; declare function cloneNode(node: undefined, options?: Partial>): undefined; declare function cloneNode(node: T | undefined, options?: Partial>): T | undefined; export { cloneNode, preserveNode, setParentNodes, CloneNodeOptions, CloneNodeHook }; //# sourceMappingURL=index.d.ts.map