import type { AggregatedIdentifier } from '../ids';
import * as symbols from '../symbols';
import type { Data, Metadata } from '../types';
import type { MetadataContext } from './MetadataContext';
export declare abstract class BaseMetadata implements Metadata {
    #private;
    readonly [symbols.id]: AggregatedIdentifier;
    readonly [symbols.context]: MetadataContext;
    readonly [symbols.data]: Data;
    constructor(context: MetadataContext, id: AggregatedIdentifier);
    get id(): string;
    get(): Readonly<Data>;
    get(path: string | readonly string[], fallbackValue?: unknown): unknown;
    set(path: string | readonly string[], $value: unknown): this;
    push(path: string | readonly string[], $values: unknown[]): this;
    unshift(path: string | readonly string[], $values: unknown[]): this;
    assign(path: undefined | string | readonly string[], $value: object): this;
    defaults(path: undefined | string | readonly string[], $value: object): this;
    merge(path: undefined | string | readonly string[], $value: object): this;
    toJSON(): {
        id: string;
        type: string;
        data: Data;
    };
}
