import { OrderedMap } from "../../common"; export type TPowerQueryType = TPrimitiveType | TExtendedType; export type TExtendedType = AnyUnion | DefinedFunction | DefinedList | DefinedListType | DefinedRecord | DefinedTable | FunctionType | ListType | LogicalLiteral | NumberLiteral | PrimaryPrimitiveType | RecordType | TableType | TableTypePrimaryExpression | TextLiteral; export type TExtendedTypeKind = TypeKind.Any | TypeKind.Function | TypeKind.List | TypeKind.Logical | TypeKind.Number | TypeKind.Record | TypeKind.Table | TypeKind.Text | TypeKind.Type; export type TLiteral = LogicalLiteral | NumberLiteral | TextLiteral; export type TLiteralKind = ExtendedTypeKind.LogicalLiteral | ExtendedTypeKind.NumberLiteral | ExtendedTypeKind.TextLiteral; export type TAny = Any | AnyUnion; export type TList = List | DefinedList; export type TLogical = Logical | LogicalLiteral; export type TFunction = Function | DefinedFunction; export type TNumber = Number | NumberLiteral; export type TRecord = Record | DefinedRecord; export type TTable = Table | DefinedTable; export type TText = Text | TextLiteral; export type TType = Type | DefinedListType | FunctionType | ListType | PrimaryPrimitiveType | RecordType | TableType | TableTypePrimaryExpression; export type Action = IPrimitiveType; export type Any = IPrimitiveType; export type AnyNonNull = IPrimitiveType; export type Binary = IPrimitiveType; export type Date = IPrimitiveType; export type DateTime = IPrimitiveType; export type DateTimeZone = IPrimitiveType; export type Duration = IPrimitiveType; export type Function = IPrimitiveType; export type List = IPrimitiveType; export type Logical = IPrimitiveType; export type None = IPrimitiveType; export type NotApplicable = IPrimitiveType; export type Null = IPrimitiveType; export type Number = IPrimitiveType; export type Record = IPrimitiveType; export type Table = IPrimitiveType; export type Text = IPrimitiveType; export type Time = IPrimitiveType; export type Type = IPrimitiveType; export type Unknown = IPrimitiveType; export type TPrimitiveType = Action | Any | AnyNonNull | Binary | Date | DateTime | DateTimeZone | Duration | Function | List | Logical | None | NotApplicable | Null | Number | Record | Table | Text | Time | Type | Unknown; export type TFieldSpecificationList = FieldSpecificationList; export type TFields = OrderedFields | UnorderedFields; export type OrderedFields = OrderedMap; export type UnorderedFields = Map; export declare enum TypeKind { Any = "Any", AnyNonNull = "AnyNonNull", Binary = "Binary", Date = "Date", DateTime = "DateTime", DateTimeZone = "DateTimeZone", Duration = "Duration", Function = "Function", List = "List", Logical = "Logical", None = "None", Null = "Null", Number = "Number", Record = "Record", Table = "Table", Text = "Text", Type = "Type", Action = "Action", Time = "Time", NotApplicable = "NotApplicable", Unknown = "Unknown" } export declare const TypeKinds: ReadonlyArray; export declare enum ExtendedTypeKind { AnyUnion = "AnyUnion", DefinedFunction = "DefinedFunction", DefinedList = "DefinedList", DefinedListType = "DefinedListType", DefinedRecord = "DefinedRecord", DefinedTable = "DefinedTable", FunctionType = "FunctionType", ListType = "ListType", LogicalLiteral = "LogicalLiteral", NumberLiteral = "NumberLiteral", PrimaryPrimitiveType = "PrimaryPrimitiveType", RecordType = "RecordType", TextLiteral = "TextLiteral", TableType = "TableType", TableTypePrimaryExpression = "TableTypePrimaryExpression" } export interface IType { readonly kind: T; readonly extendedKind: ExtendedTypeKind | undefined; readonly isNullable: boolean; } export interface IExtendedType extends IType { readonly kind: TExtendedTypeKind; readonly extendedKind: ExtendedTypeKind; } export interface IPrimitiveLiteral extends IExtendedType { readonly literal: string; readonly normalizedLiteral: T; } export interface IPrimitiveType extends IType { readonly extendedKind: undefined; } export interface FieldSpecificationList { readonly fields: T; readonly isOpen: boolean; } export interface FunctionSignature { readonly parameters: ReadonlyArray; readonly returnType: TPowerQueryType; } export interface SimplifiedNullablePrimitiveType { readonly typeKind: TypeKind; readonly isNullable: boolean; } export interface FunctionParameter { readonly nameLiteral: string; readonly isOptional: boolean; readonly isNullable: boolean; readonly type: TypeKind | undefined; } export interface AnyUnion extends IExtendedType { readonly kind: TypeKind.Any; readonly extendedKind: ExtendedTypeKind.AnyUnion; readonly unionedTypePairs: ReadonlyArray; } export type DefinedFunction = IExtendedType & FunctionSignature & { readonly kind: TypeKind.Function; readonly extendedKind: ExtendedTypeKind.DefinedFunction; }; export interface DefinedList extends IExtendedType { readonly kind: TypeKind.List; readonly extendedKind: ExtendedTypeKind.DefinedList; readonly elements: ReadonlyArray; } export interface DefinedListType extends IExtendedType { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.DefinedListType; readonly itemTypes: ReadonlyArray; } export type DefinedRecord = IExtendedType & FieldSpecificationList & { readonly kind: TypeKind.Record; readonly extendedKind: ExtendedTypeKind.DefinedRecord; }; export type DefinedTable = IExtendedType & FieldSpecificationList & { readonly kind: TypeKind.Table; readonly extendedKind: ExtendedTypeKind.DefinedTable; }; export type FunctionType = IExtendedType & FunctionSignature & { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.FunctionType; }; export interface ListType extends IExtendedType { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.ListType; readonly itemType: TPowerQueryType; } export interface LogicalLiteral extends IPrimitiveLiteral { readonly kind: TypeKind.Logical; readonly extendedKind: ExtendedTypeKind.LogicalLiteral; } export interface NumberLiteral extends IPrimitiveLiteral { readonly kind: TypeKind.Number; readonly extendedKind: ExtendedTypeKind.NumberLiteral; } export interface PrimaryPrimitiveType extends IExtendedType { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.PrimaryPrimitiveType; readonly primitiveType: TPrimitiveType; } export type RecordType = IExtendedType & FieldSpecificationList & { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.RecordType; }; export type TableType = IExtendedType & FieldSpecificationList & { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.TableType; }; export interface TableTypePrimaryExpression extends IExtendedType { readonly kind: TypeKind.Type; readonly extendedKind: ExtendedTypeKind.TableTypePrimaryExpression; readonly primaryExpression: TPowerQueryType; } export interface TextLiteral extends IPrimitiveLiteral { readonly kind: TypeKind.Text; readonly extendedKind: ExtendedTypeKind.TextLiteral; } export declare const ActionInstance: IPrimitiveType; export declare const AnyInstance: IPrimitiveType; export declare const AnyNonNullInstance: IPrimitiveType; export declare const BinaryInstance: IPrimitiveType; export declare const DateInstance: IPrimitiveType; export declare const DateTimeInstance: IPrimitiveType; export declare const DateTimeZoneInstance: IPrimitiveType; export declare const DurationInstance: IPrimitiveType; export declare const FunctionInstance: IPrimitiveType; export declare const ListInstance: IPrimitiveType; export declare const LogicalInstance: IPrimitiveType; export declare const NoneInstance: IPrimitiveType; export declare const NotApplicableInstance: IPrimitiveType; export declare const NullInstance: IPrimitiveType; export declare const NumberInstance: IPrimitiveType; export declare const RecordInstance: IPrimitiveType; export declare const TableInstance: IPrimitiveType; export declare const TextInstance: IPrimitiveType; export declare const TimeInstance: IPrimitiveType; export declare const TypePrimitiveInstance: IPrimitiveType; export declare const UnknownInstance: IPrimitiveType; export declare const NullableActionInstance: IPrimitiveType; export declare const NullableAnyInstance: IPrimitiveType; export declare const NullableBinaryInstance: IPrimitiveType; export declare const NullableDateInstance: IPrimitiveType; export declare const NullableDateTimeInstance: IPrimitiveType; export declare const NullableDateTimeZoneInstance: IPrimitiveType; export declare const NullableDurationInstance: IPrimitiveType; export declare const NullableFunctionInstance: IPrimitiveType; export declare const NullableListInstance: IPrimitiveType; export declare const NullableLogicalInstance: IPrimitiveType; export declare const NullableNoneInstance: IPrimitiveType; export declare const NullableNotApplicableInstance: IPrimitiveType; export declare const NullableNumberInstance: IPrimitiveType; export declare const NullableRecordInstance: IPrimitiveType; export declare const NullableTableInstance: IPrimitiveType; export declare const NullableTextInstance: IPrimitiveType; export declare const NullableTimeInstance: IPrimitiveType; export declare const NullableTypeInstance: IPrimitiveType; export declare const NullableUnknownInstance: IPrimitiveType; export declare const FalseInstance: LogicalLiteral; export declare const TrueInstance: LogicalLiteral; export declare const NullableFalseInstance: LogicalLiteral; export declare const NullableTrueInstance: LogicalLiteral; export declare const PrimitiveInstance: AnyUnion; export declare const NullablePrimitiveInstance: AnyUnion; export declare const ExpressionInstance: AnyUnion; export declare const LiteralExpressionInstance: AnyUnion; export declare const PrimaryExpressionInstance: AnyUnion; export declare const PrimaryTypeInstance: AnyUnion; export declare const TypeProductionInstance: AnyUnion; export declare const TypeExpressionInstance: AnyUnion; export declare const AnyLiteralInstance: AnyUnion;