UNPKG

roblox-ts

Version:

A TypeScript-to-Luau Compiler for Roblox

47 lines (46 loc) 1.83 kB
import luau from "@roblox-ts/luau-ast"; import { TransformState } from ".."; import ts from "typescript"; declare enum OptionalChainItemKind { PropertyAccess = 0, ElementAccess = 1, Call = 2, PropertyCall = 3, ElementCall = 4 } interface OptionalChainItem<T extends OptionalChainItemKind, U extends ts.Expression> { kind: T; node: U; optional: boolean; type: ts.Type; } interface PropertyAccessItem extends OptionalChainItem<OptionalChainItemKind.PropertyAccess, ts.PropertyAccessExpression> { name: string; } interface ElementAccessItem extends OptionalChainItem<OptionalChainItemKind.ElementAccess, ts.ElementAccessExpression> { expression: ts.Expression; } interface CallItem extends OptionalChainItem<OptionalChainItemKind.Call, ts.CallExpression> { args: ReadonlyArray<ts.Expression>; } interface PropertyCallItem extends OptionalChainItem<OptionalChainItemKind.PropertyCall, ts.CallExpression> { expression: ts.PropertyAccessExpression; name: string; callOptional: boolean; callType: ts.Type; args: ReadonlyArray<ts.Expression>; } interface ElementCallItem extends OptionalChainItem<OptionalChainItemKind.ElementCall, ts.CallExpression> { expression: ts.ElementAccessExpression; argumentExpression: ts.Expression; callOptional: boolean; callType: ts.Type; args: ReadonlyArray<ts.Expression>; } type ChainItem = PropertyAccessItem | ElementAccessItem | CallItem | PropertyCallItem | ElementCallItem; export declare function flattenOptionalChain(state: TransformState, expression: ts.Expression): { chain: ChainItem[]; expression: ts.Expression; }; export declare function transformOptionalChain(state: TransformState, node: ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.CallExpression): luau.Expression; export {};