/**
 * @author WMXPY
 * @namespace Variable
 * @description Scope
 */
import { IExposed, IScope, ITrace, VARIABLE_TYPE } from "../declare/variable";
import { Variable } from "../variable/variable";
import { SCOPE_LABEL_LISTENER_TYPE, ScopeLabelListener } from "./declare";
import { SandMap } from "./sand-map";
export declare const BRIDGE_SCOPE_SYMBOL: unique symbol;
export declare const EXECUTE_SCOPE_SYMBOL: unique symbol;
type ScopeSymbol = typeof BRIDGE_SCOPE_SYMBOL | typeof EXECUTE_SCOPE_SYMBOL;
export declare class Scope implements IScope {
    static bridgeScope(): Scope;
    static executeScope(parent: IScope): Scope;
    private readonly _symbol?;
    private readonly _parent;
    private _defaultExposed;
    private readonly _exposed;
    private readonly _labelListeners;
    private _constantMap;
    private _scopeMap;
    private _configs;
    private _throwValue;
    private _this;
    constructor(scope?: IScope, symbol?: ScopeSymbol);
    get constantMap(): Map<string, Variable<any>>;
    get scopeMap(): Map<string, Variable<any>>;
    get exposed(): IExposed;
    isBridgeScope(): boolean;
    isExecuteScope(): boolean;
    config(name: string, value?: any): Scope;
    child(): Scope;
    findThis(): SandMap<any>;
    initThis(): Scope;
    replaceThis(thisValue: SandMap<any>): this;
    exist(name: string): boolean;
    hasParent(): boolean;
    ensureParent(): IScope;
    register(type: VARIABLE_TYPE): (name: string, value: any) => Scope;
    rummage(name: string): Variable<any> | null;
    registerLabelListener(label: string, listener: ScopeLabelListener): this;
    executeLabelListener(label: string, type: SCOPE_LABEL_LISTENER_TYPE): boolean;
    validateEditable(name: string): IScope;
    expose(key: string, value: any, trace: ITrace): Scope;
    exposeDefault(value: any, trace: ITrace): Scope;
    setThrow(value: any): Scope;
    hasThrow(): boolean;
    getThrow(): Variable<any> | null;
    protected _declareConst(name: string, value: any): Scope;
    protected _declareLet(name: string, value: any): Scope;
}
export {};
