import { type NodeBuilder, type nodes } from '../../json-crdt-patch';
import type { ExtNode } from './ExtNode';
import type { ModelApi } from '../model';
import type { JsonNode } from '../nodes';
import type { JsonNodeToSchema } from '../schema/types';
import type { ExtApi } from './types';
export type AnyExtension = Extension<any, any, any, any, any, any>;
export declare class Extension<Id extends number, DataNode extends JsonNode, ENode extends ExtNode<DataNode, any>, EApi extends ExtApi<ENode>, DataArgs extends any[] = any[], DataSchema extends NodeBuilder = JsonNodeToSchema<DataNode>> {
    readonly id: Id;
    readonly name: string;
    readonly Node: new (data: DataNode) => ENode;
    readonly Api: new (node: ENode, api: ModelApi<any>) => EApi;
    readonly schema: (...args: DataArgs) => DataSchema;
    constructor(id: Id, name: string, Node: new (data: DataNode) => ENode, Api: new (node: ENode, api: ModelApi<any>) => EApi, schema: (...args: DataArgs) => DataSchema);
    new(...args: DataArgs): nodes.ext<Id, DataSchema>;
}
