import { CodeString, LispType } from '../utils'; export type DefineLisp = [op, a, b]; export type ExtractLispOp = L extends DefineLisp ? i : never; export type ExtractLispA = L extends DefineLisp ? i : never; export type ExtractLispB = L extends DefineLisp ? i : never; export type LispItemSingle = LispType.None | LispType.True | string | Lisp; export type LispItem = LispItemSingle | LispItemSingle[]; export type Lisp = [LispType, LispItem, LispItem]; export type Literal = DefineLisp & { tempJsStrings?: string[]; }; export type IfLisp = DefineLisp; export type InlineIf = DefineLisp; export type StatementLabel = string | LispType.None; export type IfCase = DefineLisp; export type InlineIfCase = DefineLisp; export type Labeled = DefineLisp; export type KeyValLisp = DefineLisp; export type SpreadObjectLisp = DefineLisp; export type SpreadArrayLisp = DefineLisp; export type ArrayProp = DefineLisp; export type PropLisp = DefineLisp; export type PropOptional = DefineLisp; export type Call = DefineLisp; export type CallOptional = DefineLisp; export type CreateArray = DefineLisp; export type CreateObject = DefineLisp; export type Group = DefineLisp; export type Inverse = DefineLisp; export type Not = DefineLisp; export type Negative = DefineLisp; export type Positive = DefineLisp; export type Typeof = DefineLisp; export type Delete = DefineLisp; export type IncrementBefore = DefineLisp; export type IncrementAfter = DefineLisp; export type DecrementBefore = DefineLisp; export type DecrementAfter = DefineLisp; export type And = DefineLisp; export type Or = DefineLisp; export type NullishCoalescing = DefineLisp; export type Instanceof = DefineLisp; export type In = DefineLisp; export type Assigns = DefineLisp; export type SubractEquals = DefineLisp; export type AddEquals = DefineLisp; export type DivideEquals = DefineLisp; export type PowerEquals = DefineLisp; export type MultiplyEquals = DefineLisp; export type ModulusEquals = DefineLisp; export type BitNegateEquals = DefineLisp; export type BitAndEquals = DefineLisp; export type BitOrEquals = DefineLisp; export type UnsignedShiftRightEquals = DefineLisp; export type ShiftLeftEquals = DefineLisp; export type ShiftRightEquals = DefineLisp; export type AndEquals = DefineLisp; export type OrEquals = DefineLisp; export type NullishCoalescingEquals = DefineLisp; export type BitAnd = DefineLisp; export type BitOr = DefineLisp; export type BitNegate = DefineLisp; export type BitShiftLeft = DefineLisp; export type BitShiftRight = DefineLisp; export type BitUnsignedShiftRight = DefineLisp; export type SmallerEqualThan = DefineLisp; export type LargerEqualThan = DefineLisp; export type SmallerThan = DefineLisp; export type LargerThan = DefineLisp; export type StrictNotEqual = DefineLisp; export type NotEqual = DefineLisp; export type StrictEqual = DefineLisp; export type Equal = DefineLisp; export type Plus = DefineLisp; export type Minus = DefineLisp; export type Divide = DefineLisp; export type Power = DefineLisp; export type Multiply = DefineLisp; export type Modulus = DefineLisp; export type InternalCode = DefineLisp; export type Block = DefineLisp; export type Expression = DefineLisp; export type Return = DefineLisp; export type Throw = DefineLisp; export type Switch = DefineLisp; export type SwitchCase = DefineLisp; export type Var = DefineLisp; export type Let = DefineLisp; export type Const = DefineLisp; export type Internal = DefineLisp; export type Number = DefineLisp; export type BigInt = DefineLisp; export type GlobalSymbol = DefineLisp; export type LiteralIndex = DefineLisp; export type StringIndex = DefineLisp; export type RegexIndex = DefineLisp; export type Function = DefineLisp; export type InlineFunction = DefineLisp; export type ArrowFunction = DefineLisp; export type Loop = DefineLisp; export type LoopAction = DefineLisp; export type Try = DefineLisp; export type Void = DefineLisp; export type Await = DefineLisp; export type Yield = DefineLisp; export type YieldDelegate = DefineLisp; export type New = DefineLisp; export type None = DefineLisp; export type LispFamily = Literal | IfLisp | InlineIf | IfCase | InlineIfCase | Labeled | KeyValLisp | SpreadObjectLisp | SpreadArrayLisp | ArrayProp | PropLisp | PropOptional | Call | CallOptional | CreateArray | CreateObject | Group | Inverse | Not | Negative | Positive | Typeof | Delete | IncrementBefore | IncrementAfter | DecrementBefore | DecrementAfter | And | Or | NullishCoalescing | Instanceof | In | Assigns | SubractEquals | AddEquals | DivideEquals | PowerEquals | MultiplyEquals | ModulusEquals | BitNegateEquals | BitAndEquals | BitOrEquals | UnsignedShiftRightEquals | ShiftLeftEquals | ShiftRightEquals | AndEquals | OrEquals | NullishCoalescingEquals | BitAnd | BitOr | BitNegate | BitShiftLeft | BitShiftRight | BitUnsignedShiftRight | SmallerEqualThan | LargerEqualThan | SmallerThan | LargerThan | StrictNotEqual | NotEqual | StrictEqual | Equal | Plus | Minus | Divide | Power | Multiply | Modulus | InternalCode | Expression | Return | Throw | Switch | SwitchCase | Var | Let | Const | Number | BigInt | GlobalSymbol | LiteralIndex | StringIndex | RegexIndex | Function | InlineFunction | ArrowFunction | Loop | LoopAction | Try | Void | Await | Yield | YieldDelegate | New | Block | Internal | None; export interface IRegEx { regex: string; flags: string; length: number; } export interface IConstants { strings: string[]; literals: Literal[]; regexes: IRegEx[]; eager: boolean; maxDepth: number; } export interface IExecutionTree { tree: Lisp[]; constants: IConstants; } export interface LispDepthCtx { generatorDepth: number; asyncDepth: number; lispDepth: number; } export interface LispCallbackCtx extends LispDepthCtx { constants: IConstants; type: string; part: CodeString; res: string[]; expect: string; lispTree: Lisp; } export type LispCallback = (ctx: LispCallbackCtx & { type: T; }) => any;