import {TypeEnum} from "../types/TypeEnum"; import {evaluateLiterals} from "./helper/and/evaluateLiterals"; import {evaluateObjects} from "./helper/and/evaluateObjects"; import {evaluateArrays} from "./helper/and/evaluateArrays"; import {evaluateTuples} from "./helper/and/evaluateTuples"; import {getTypeToCompare} from "./helper/common/getTypeToCompare"; import {getBaseType} from "./helper/common/getBaseType"; export const andOperationMatrix = { [TypeEnum.STRING]: { [TypeEnum.STRING] : TypeEnum.STRING, [TypeEnum.STRING_LITERAL_TYPE ] : getTypeToCompare, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: TypeEnum.STRING, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.STRING_LITERAL_TYPE]: { [TypeEnum.STRING] : getBaseType, [TypeEnum.STRING_LITERAL_TYPE ] : evaluateLiterals, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.NUMBER]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NUMBER, [TypeEnum.NUMBER_LITERAL_TYPE] : getTypeToCompare, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: TypeEnum.NUMBER, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.NUMBER_LITERAL_TYPE]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : getBaseType, [TypeEnum.NUMBER_LITERAL_TYPE] : evaluateLiterals, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.BOOLEAN]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.BOOLEAN, [TypeEnum.BOOLEAN_LITERAL]: getTypeToCompare, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: TypeEnum.BOOLEAN, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.BOOLEAN_LITERAL]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: getBaseType, [TypeEnum.BOOLEAN_LITERAL]: evaluateLiterals, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.OBJECT_TYPE]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: evaluateObjects, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.ARRAY_TYPE]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: evaluateArrays, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.TUPLE_TYPE]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: evaluateTuples, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: getBaseType, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.NULL]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NULL, [TypeEnum.ANY]: TypeEnum.NULL, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.ANY]: { [TypeEnum.STRING] : TypeEnum.STRING, [TypeEnum.STRING_LITERAL_TYPE ] : getTypeToCompare, [TypeEnum.NUMBER] : TypeEnum.NUMBER, [TypeEnum.NUMBER_LITERAL_TYPE] : getTypeToCompare, [TypeEnum.BOOLEAN]: TypeEnum.BOOLEAN, [TypeEnum.BOOLEAN_LITERAL]: getTypeToCompare, [TypeEnum.OBJECT_TYPE]: getTypeToCompare, [TypeEnum.ARRAY_TYPE]: getTypeToCompare, [TypeEnum.TUPLE_TYPE]: getTypeToCompare, [TypeEnum.NULL]: TypeEnum.NULL, [TypeEnum.ANY]: TypeEnum.ANY, [TypeEnum.NEVER]: TypeEnum.NEVER }, [TypeEnum.NEVER]: { [TypeEnum.STRING] : TypeEnum.NEVER, [TypeEnum.STRING_LITERAL_TYPE ] : TypeEnum.NEVER, [TypeEnum.NUMBER] : TypeEnum.NEVER, [TypeEnum.NUMBER_LITERAL_TYPE] : TypeEnum.NEVER, [TypeEnum.BOOLEAN]: TypeEnum.NEVER, [TypeEnum.BOOLEAN_LITERAL]: TypeEnum.NEVER, [TypeEnum.OBJECT_TYPE]: TypeEnum.NEVER, [TypeEnum.ARRAY_TYPE]: TypeEnum.NEVER, [TypeEnum.TUPLE_TYPE]: TypeEnum.NEVER, [TypeEnum.NULL]: TypeEnum.NEVER, [TypeEnum.ANY]: TypeEnum.NEVER, [TypeEnum.NEVER]: TypeEnum.NEVER } };