You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					80 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					80 lines
				
				2.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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<string>;
							 | 
						||
| 
								 | 
							
								    parent?: Scope;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								interface ValueScopeOptions extends ScopeOptions {
							 | 
						||
| 
								 | 
							
								    scope: ScopeStore;
							 | 
						||
| 
								 | 
							
								    es5?: boolean;
							 | 
						||
| 
								 | 
							
								    lines?: boolean;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare type ScopeStore = Record<string, ValueReference[] | undefined>;
							 | 
						||
| 
								 | 
							
								declare type ScopeValues = {
							 | 
						||
| 
								 | 
							
								    [Prefix in string]?: Map<unknown, ValueScopeName>;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								export declare type ScopeValueSets = {
							 | 
						||
| 
								 | 
							
								    [Prefix in string]?: Set<ValueScopeName>;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								export declare enum UsedValueState {
							 | 
						||
| 
								 | 
							
								    Started = 0,
							 | 
						||
| 
								 | 
							
								    Completed = 1
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export declare type UsedScopeValues = {
							 | 
						||
| 
								 | 
							
								    [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								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<string>;
							 | 
						||
| 
								 | 
							
								    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 {};
							 |