import type { CollectionType } from "../types/entities.js"; export type EntityTag = "User" | "Organization" | "Project" | "Event" | "Poi" | "Badge" | "News" | "Comment" | "Answer" | "Form" | "Classified" | "Action"; export type CollectionKey = CollectionType; type BaseEntity = import("./BaseEntity.js").BaseEntity; type ApiClient = import("../ApiClient.js").default; type EndpointApiClass = typeof import("./EndpointApi.js").default; type EntityConstructor = new (...args: any[]) => BaseEntity; type EntityClass = EntityConstructor & { fromJSON?: (json: unknown, parent?: ApiClient | BaseEntity | null, deps?: EntityDeps) => BaseEntity; }; type EntityDeps = Partial>; export declare const EntityRegistry: Map; export declare function registerEntity(tag: "EndpointApi", EntityClass: EndpointApiClass): void; export declare function registerEntity(tag: EntityTag, EntityClass: EntityClass): void; /** * Récupère une instance depuis un JSON générique. * Si la collection ou la métadonnée d'entité est absente, renvoie l'objet d'origine. */ export declare function fromEntityJSON(json: unknown, parent?: ApiClient | BaseEntity | null): BaseEntity | unknown | null; /** * Walker récursif : parcourt un objet/tableau et ressuscite toutes les entités * sérialisées (marqueurs `__isSerializedEntity` / `__entityTag`) rencontrées. * * Pensé pour les wrappers non-entité retournés par certains endpoints (ex: `fundingEnvelope`) * ou pour réhydrater un état côté client après un transfert JSON (SSR, cache restore). * * Dates, RegExp et primitives sont préservées. Pour les entités, la chaîne de parents * est reconstruite automatiquement depuis les méta embarquées par `toJSON()`. * * @param obj - L'objet à parcourir (wrapper, array, primitive…) * @param parent - Parent racine (typiquement l'ApiClient côté client) * @returns L'objet avec toutes les entités revived * * @example * // Côté client SSR : revive l'état dehydraté * const apiClient = new ApiClient({ baseURL }); * const envelope = reviveEntities(window.__INIT__.envelope, apiClient); * envelope.projects[0].serverData.actions[0]; // Action instance */ export declare function reviveEntities(obj: unknown, parent?: ApiClient | BaseEntity | null): T; /** * Crée une instance d'entité basée sur le seul nom de la collection. */ export declare function createFromCollection(collection: CollectionKey, parent?: ApiClient | BaseEntity | null, data?: object): BaseEntity | null; export {};