import type * as DatabaseDev from "@antelopejs/interface-database"; import { type Constructible } from "../common"; export declare const MixinSymbol: unique symbol; export type MixinType = T extends { [MixinSymbol]: infer A; } ? A : never; export declare class Modifier { protected meta: Meta; protected options: Options; } export declare class OneWayModifier extends Modifier { lock(_locked_value: LockedType | undefined, _value: unknown, ..._args: Args): LockedType; test(locked_value: LockedType, value: unknown, ...args: Args): boolean; } type ProxyOrValArray = { [K in keyof T]: DatabaseDev.ValueProxyOrValue; }; export declare class TwoWayModifier extends OneWayModifier { unlock(_locked_value: LockedType, ..._args: Args): unknown; unlockrequest(_data: DatabaseDev.ValueProxy, _meta: DatabaseDev.ValueProxy, ..._args: ProxyOrValArray): DatabaseDev.ValueProxy; } export declare class ContainerModifier extends TwoWayModifier, [ key: string ], Meta, Options> { lock(locked_value: Record | undefined, value: unknown, key: string): Record; unlock(locked_value: Record, key: string): unknown; unlockrequest(data: DatabaseDev.ValueProxy>, _meta: DatabaseDev.ValueProxy, key: DatabaseDev.ValueProxyOrValue): DatabaseDev.ValueProxy; } interface InternalType { meta: Record; data: Record; } interface ModifiedField { id: string; modifier: Modifier; metaRef: { _ref: any; }; } export declare class ModifiersStaticMetadata { static key: symbol; fields: Record>; events: Map; } export declare class ModifiersDynamicMetadata { static key: symbol; staticMeta: ModifiersStaticMetadata; floating: Record; fields: Record>; constructor(target: any); canGet(field: string): boolean; get(field: string, internal: InternalType): any; canSet(field: string): boolean; set(field: string, internal: InternalType, value: unknown): void; } export declare function fromPlainData(rawObject: Record, TableClass: T): InstanceType; export declare function toPlainData(object: T): Record; export declare function fromDatabase(rawObject: any, TableClass: T): InstanceType; export declare function toDatabase(object: T): Record; type ExtractModifierOptions = T extends Modifier ? Options : undefined; type ExtractModifierArgs = T extends OneWayModifier ? Args : []; export declare function attachModifier>(TableClass: T, Modifier: M, field: keyof InstanceType, options: ExtractModifierOptions>): void; export declare function getModifiedFields>(object: T, Modifier: M): (keyof T)[]; export declare function unlock>(object: T, Modifier: M, fields: Array | undefined, ...args: ExtractModifierArgs>): void; type ModifierWithProxyArgs = { modifier: Constructible>; args: DatabaseDev.ValueProxyOrValue[]; }; export declare function unlockrequest(table: Constructible, object: DatabaseDev.ValueProxy, field: K, modifiers: ModifierWithProxyArgs[]): DatabaseDev.ValueProxy; export declare function lock>(object: T, Modifier: M, fields: Array | undefined, ...args: ExtractModifierArgs> | []): void; export declare function testValue(object: T, field: K, value: T[K]): unknown; export declare function triggerEvent(object: T, event: string, ...args: unknown[]): void; export {};