import { Code, Name } from "./code"; interface NameGroup { prefix: string; index: number; } export interface NameValue { ref: ValueReference; key?: unknown; code?: Code; } export declare type ValueReference = unknown; interface ScopeOptions { prefixes?: Set; parent?: Scope; } interface ValueScopeOptions extends ScopeOptions { scope: ScopeStore; es5?: boolean; lines?: boolean; } export declare type ScopeStore = Record; declare type ScopeValues = { [Prefix in string]?: Map; }; export declare type ScopeValueSets = { [Prefix in string]?: Set; }; export declare enum UsedValueState { Started = 0, Completed = 1 } export declare type UsedScopeValues = { [Prefix in string]?: Map; }; export declare const varKinds: { const: Name; let: Name; var: Name; }; export declare class Scope { protected readonly _names: { [Prefix in string]?: NameGroup; }; protected readonly _prefixes?: Set; protected readonly _parent?: Scope; constructor({ prefixes, parent }?: ScopeOptions); toName(nameOrPrefix: Name | string): Name; name(prefix: string): Name; protected _newName(prefix: string): string; private _nameGroup; } interface ScopePath { property: string; itemIndex: number; } export declare class ValueScopeName extends Name { readonly prefix: string; value?: NameValue; scopePath?: Code; constructor(prefix: string, nameStr: string); setValue(value: NameValue, { property, itemIndex }: ScopePath): void; } interface VSOptions extends ValueScopeOptions { _n: Code; } export declare class ValueScope extends Scope { protected readonly _values: ScopeValues; protected readonly _scope: ScopeStore; readonly opts: VSOptions; constructor(opts: ValueScopeOptions); get(): ScopeStore; name(prefix: string): ValueScopeName; value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName; getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined; scopeRefs(scopeName: Name, values?: ScopeValues | ScopeValueSets): Code; scopeCode(values?: ScopeValues | ScopeValueSets, usedValues?: UsedScopeValues, getCode?: (n: ValueScopeName) => Code | undefined): Code; private _reduceValues; } export {};