import type { AnyEntity, EntityMetadata, EntityName, PopulateOptions } from '../typings.js'; /** * Helper that allows to keep track of where we are currently at when serializing complex entity graph with cycles. * Before we process a property, we call `visit` that checks if it is not a cycle path (but allows to pass cycles that * are defined in populate hint). If not, we proceed and call `leave` afterwards. */ export declare class SerializationContext { #private; readonly path: [EntityName, string][]; readonly visited: Set; constructor(populate?: PopulateOptions[], fields?: Set, exclude?: readonly string[]); /** * Returns true when there is a cycle detected. */ visit(entityName: EntityName, prop: string): boolean; /** Removes the last entry from the visit path after processing a property. */ leave(entityName: EntityName, prop: string): void; /** Cleans up the serialization context by removing root references from all tracked entities. */ close(): void; /** * When initializing new context, we need to propagate it to the whole entity graph recursively. */ static propagate(root: SerializationContext, entity: AnyEntity, isVisible: (meta: EntityMetadata, prop: string) => boolean): void; /** Checks whether a property is explicitly listed in the populate hints for the current path. */ isMarkedAsPopulated(entityName: EntityName, prop: string): boolean; /** Checks whether a property is excluded from serialization via the exclude list. */ isExcluded(entityName: EntityName, prop: string): boolean; /** Checks whether a property is included in the partial fields selection for the current path. */ isPartiallyLoaded(entityName: EntityName, prop: string): boolean; private register; }