import { BeanPath, BooleanPath, StringPath } from '../expression/';
import { QTypedManyResourceRelationship, QTypedOneResourceRelationship } from '../stub/';
import { MetaAttribute, QMetaAttribute } from './meta.attribute';
import { MetaElement, QMetaElement } from './meta.element';
import { ManyQueryResult, OneQueryResult, ResourceRelationship, TypedManyResourceRelationship } from 'ngrx-json-api';
export declare module MetaKey {
    interface Relationships extends MetaElement.Relationships {
        [key: string]: ResourceRelationship;
        elements?: TypedManyResourceRelationship<MetaAttribute>;
    }
    interface Attributes extends MetaElement.Attributes {
        unique?: boolean;
    }
}
export interface MetaKey extends MetaElement {
    relationships?: MetaKey.Relationships;
    attributes?: MetaKey.Attributes;
}
export interface MetaKeyResult extends OneQueryResult {
    data?: MetaKey;
}
export interface MetaKeyListResult extends ManyQueryResult {
    data?: Array<MetaKey>;
}
export declare class QMetaKey extends BeanPath<MetaKey> {
    metaId: string;
    id: StringPath;
    type: StringPath;
    relationships: QMetaKey.QRelationships;
    attributes: QMetaKey.QAttributes;
}
export declare module QMetaKey {
    class QRelationships extends BeanPath<MetaKey.Relationships> {
        private _elements;
        readonly elements: QTypedManyResourceRelationship<QMetaAttribute, MetaAttribute>;
        private _parent;
        readonly parent: QTypedOneResourceRelationship<QMetaElement, MetaElement>;
        private _children;
        readonly children: QTypedManyResourceRelationship<QMetaElement, MetaElement>;
    }
    class QAttributes extends BeanPath<MetaKey.Attributes> {
        unique: BooleanPath;
        name: StringPath;
    }
}
export declare let createEmptyMetaKey: (id: string) => MetaKey;
