import { Uri as URI } from '@opensumi/ide-core-common';
import * as types from '../../../common/vscode/ext-types';
import * as modes from '../../../common/vscode/model.api';
import { CommandsConverter } from './ext.host.command';
export declare class ApiCommandArgument<V, O = V> {
    readonly name: string;
    readonly description: string;
    readonly validate: (v: V) => boolean;
    readonly convert: (v: V) => O;
    static readonly Uri: ApiCommandArgument<URI, URI>;
    static readonly Position: ApiCommandArgument<types.Position, modes.Position>;
    static readonly Range: ApiCommandArgument<types.Range, modes.Range>;
    static readonly Selection: ApiCommandArgument<types.Selection, modes.Selection>;
    static readonly Number: ApiCommandArgument<number, number>;
    static readonly String: ApiCommandArgument<string, string>;
    static readonly CallHierarchyItem: ApiCommandArgument<{
        _sessionId: string;
        _itemId: string;
        kind: import("@opensumi/ide-monaco").SymbolKind;
        name: string;
        detail?: string | undefined;
        uri: import("vscode-uri/lib/umd/uri").UriComponents;
        range: {
            startLineNumber: number;
            startColumn: number;
            endLineNumber: number;
            endColumn: number;
        };
        selectionRange: {
            startLineNumber: number;
            startColumn: number;
            endLineNumber: number;
            endColumn: number;
        };
        tags?: modes.SymbolTag[] | undefined;
    }, types.CallHierarchyItem>;
    static readonly TypeHierarchyItem: ApiCommandArgument<{
        _sessionId: string;
        _itemId: string;
        kind: import("@opensumi/ide-monaco").SymbolKind;
        name: string;
        detail?: string | undefined;
        uri: import("vscode-uri/lib/umd/uri").UriComponents;
        range: {
            startLineNumber: number;
            startColumn: number;
            endLineNumber: number;
            endColumn: number;
        };
        selectionRange: {
            startLineNumber: number;
            startColumn: number;
            endLineNumber: number;
            endColumn: number;
        };
        tags?: modes.SymbolTag[] | undefined;
    }, types.TypeHierarchyItem>;
    constructor(name: string, description: string, validate: (v: V) => boolean, convert: (v: V) => O);
    optional(): ApiCommandArgument<V | undefined | null, O | undefined | null>;
    with(name: string | undefined, description: string | undefined): ApiCommandArgument<V, O>;
}
export declare class ApiCommandResult<V, O = V> {
    readonly description: string;
    readonly convert: (v: V, apiArgs: any[], cmdConverter: CommandsConverter) => O;
    static readonly Void: ApiCommandResult<void, void>;
    constructor(description: string, convert: (v: V, apiArgs: any[], cmdConverter: CommandsConverter) => O);
}
export declare class ApiCommand {
    readonly id: string;
    readonly internalId: string;
    readonly description: string;
    readonly args: ApiCommandArgument<any, any>[];
    readonly result: ApiCommandResult<any, any>;
    constructor(id: string, internalId: string, description: string, args: ApiCommandArgument<any, any>[], result: ApiCommandResult<any, any>);
}
export declare const newCommands: ApiCommand[];
//# sourceMappingURL=ext.host.api.command.d.ts.map