import {TypeEnum} from "../types/TypeEnum"; import {areLiteralValuesEqual} from "./helper/equality/areLiteralValuesEqual"; import {areArraysEqual} from "./helper/equality/areArraysEqual"; import {areTuplesEqual} from "./helper/equality/areTuplesEqual"; import {areObjectsEqual} from "./helper/equality/areObjectsEqual"; export const equalityMatrix = { [TypeEnum.STRING]: { [TypeEnum.STRING] : true, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.STRING_LITERAL_TYPE]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : areLiteralValuesEqual, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.NUMBER]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : true, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.NUMBER_LITERAL_TYPE]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : areLiteralValuesEqual, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.BOOLEAN]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: true, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.BOOLEAN_LITERAL]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: areLiteralValuesEqual, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.OBJECT_TYPE]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: areObjectsEqual, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.ARRAY_TYPE]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: areArraysEqual, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.TUPLE_TYPE]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: areTuplesEqual, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.NULL]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: true, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: false }, [TypeEnum.ANY]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: true, [TypeEnum.NEVER]: false }, [TypeEnum.NEVER]: { [TypeEnum.STRING] : false, [TypeEnum.STRING_LITERAL_TYPE ] : false, [TypeEnum.NUMBER] : false, [TypeEnum.NUMBER_LITERAL_TYPE] : false, [TypeEnum.BOOLEAN]: false, [TypeEnum.BOOLEAN_LITERAL]: false, [TypeEnum.OBJECT_TYPE]: false, [TypeEnum.ARRAY_TYPE]: false, [TypeEnum.TUPLE_TYPE]: false, [TypeEnum.NULL]: false, [TypeEnum.ANY]: false, [TypeEnum.NEVER]: true } }