import ts from 'typescript'; import { ScriptBuilder } from '../sb'; import { VisitOptions } from '../types'; export interface Name { readonly nameBrand: number; } export interface Scope { readonly add: (name: string) => Name; readonly addUnique: () => Name; readonly get: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions, name: Name | string) => void; readonly getThis: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions) => void; readonly getGlobal: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions) => void; readonly set: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions, name: Name | string) => void; readonly setGlobal: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions) => void; readonly pushAll: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions) => void; readonly emit: (sb: ScriptBuilder, node: ts.Node, options: VisitOptions, func: (options: VisitOptions) => void) => void; }