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
						
					
					
				| 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 {};
 |