import "reflect-metadata";
import { Constructor } from "./../../GN-app-api/service/IRequestConverterService";
import { GNArray, GNHashtable } from "./../common/GNData";
import { AbstractConstructor, GNObjectFieldMetadata, GNObjectMetadata } from "./GNMetadata";
export declare const initGNObjectMetadata: <T extends GNObjectMetadata>(prototype: any) => T;
export declare const initGNObjectFieldMetadata: <T extends GNObjectFieldMetadata>(prototype: any, propertyKey: string) => T;
export declare const getGNObjectMetadata: <T extends GNObjectMetadata>(obj: AbstractConstructor<any>) => T | undefined;
export declare const setGNObjectMetadata: <T extends GNObjectMetadata>(obj: AbstractConstructor<any>, metadata: T) => void;
export declare const getTableName: (model: Constructor<any>) => string;
export interface GNEnhancedObjectFieldMetadata extends GNObjectFieldMetadata {
    code: string;
    isOptional: boolean;
    gnFieldType: GNFieldDataType;
    defaultValue: any;
    activeConditionValid: boolean;
    mustNonNull?: boolean;
    minLength?: number;
    maxLength?: number;
    minValue?: number;
    maxValue?: number;
    mustInt?: boolean;
}
export declare enum GNFieldDataType {
    Other = 0,
    Number = 1,
    String = 2,
    Boolean = 3,
    GNHashtable = 4,
    GNArray = 5
}
export interface GNEnhancedObjectMetadata extends GNObjectMetadata {
    fields: GNEnhancedObjectFieldMetadata[];
}
interface DataMemberBaseArgs {
    code: string;
    isOptional?: boolean;
    defaultValue?: any;
}
interface DataMemberArgs extends DataMemberBaseArgs {
    gnFieldType?: GNFieldDataType;
}
interface OtherDataMemberArgs extends DataMemberBaseArgs {
}
interface StringDataMemberArgs extends OtherDataMemberArgs {
    defaultValue?: string;
    mustNonNull?: boolean;
    minLength?: number;
    maxLength?: number;
}
interface BooleanDataMemberArgs extends OtherDataMemberArgs {
    defaultValue?: boolean;
}
interface NumberDataMemberArgs extends OtherDataMemberArgs {
    defaultValue?: number;
    minValue?: number;
    maxValue?: number;
    mustInt?: boolean;
}
interface GNHashtableDataMemberArgs extends OtherDataMemberArgs {
    defaultValue?: GNHashtable;
    mustNonNull?: boolean;
    minLength?: number;
    maxLength?: number;
}
interface GNArrayDataMemberArgs extends OtherDataMemberArgs {
    defaultValue?: GNArray;
    mustNonNull?: boolean;
    minLength?: number;
    maxLength?: number;
    elementCls?: new (...args: any[]) => any;
}
export declare const DataMember: (args: DataMemberArgs) => (prototype: any, propertyKey: string) => void;
export declare const StringDataMember: (args: StringDataMemberArgs) => (prototype: any, propertyKey: string) => void;
export declare const BooleanDataMember: (args: BooleanDataMemberArgs) => (prototype: any, propertyKey: string) => void;
export declare const GNHashtableDataMember: (args: GNHashtableDataMemberArgs) => (prototype: any, propertyKey: string) => void;
export declare const GNArrayDataMember: (args: GNArrayDataMemberArgs) => (prototype: any, propertyKey: string) => void;
export declare const NumberDataMember: (args: NumberDataMemberArgs) => (prototype: any, propertyKey: string) => void;
export {};
