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