UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

204 lines (203 loc) 10.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExprEvalWrongFunctionArgumentTypeErrorObj = exports.ExprEvalSpuriousFunctionArgumentErrorObj = exports.ExprEvalMissingFunctionArgumentErrorObj = exports.ExprEvalUnknownFunctionErrorObj = exports.ExprEvalValidationErrorObj = exports.ExprEvalParseErrorObj = exports.ExprEvalTypeErrorObj = exports.ExprEvalValueErrorObj = exports.ExprEvalMissingRequiredFunctionArgumentErrorObj = exports.ExprEvalFunctionEvaluationConsequentialErrorObj = exports.ExprEvalFunctionEvaluationObjectNotFoundErrorObj = exports.ExprEvalFunctionEvaluationErrorObj = exports.ExprEvalConsequentialError1Obj = exports.isExprEvalError = exports.ExprEvalError2Obj = exports.ExprEvalError1Obj = exports.ExprEvalErrorUndefinedResult = exports.mapErrorObjectToMessage = exports.ExprEvalErrorObj = exports.ExprEvalSuccessObj = exports.isExprEvalSuccess = exports.isExprEvalStatus = exports.ExprEvalStatus = void 0; const ExprKind_js_1 = require("./ExprKind.js"); const IfcExpressionUtils_js_1 = require("../util/IfcExpressionUtils.js"); var ExprEvalStatus; (function (ExprEvalStatus) { ExprEvalStatus[ExprEvalStatus["SUCCESS"] = 1000] = "SUCCESS"; ExprEvalStatus[ExprEvalStatus["ERROR"] = 2000] = "ERROR"; ExprEvalStatus[ExprEvalStatus["UNDEFINED_RESULT"] = 2001] = "UNDEFINED_RESULT"; ExprEvalStatus[ExprEvalStatus["REFERENCE_ERROR"] = 2010] = "REFERENCE_ERROR"; ExprEvalStatus[ExprEvalStatus["CONSEQUENTIAL_ERROR"] = 2020] = "CONSEQUENTIAL_ERROR"; ExprEvalStatus[ExprEvalStatus["MATH_ERROR"] = 2030] = "MATH_ERROR"; ExprEvalStatus[ExprEvalStatus["TYPE_ERROR"] = 2040] = "TYPE_ERROR"; ExprEvalStatus[ExprEvalStatus["NOT_FOUND"] = 2050] = "NOT_FOUND"; ExprEvalStatus[ExprEvalStatus["IFC_PROPERTY_NOT_FOUND"] = 2051] = "IFC_PROPERTY_NOT_FOUND"; ExprEvalStatus[ExprEvalStatus["IFC_PROPERTY_SET_NOT_FOUND"] = 2052] = "IFC_PROPERTY_SET_NOT_FOUND"; ExprEvalStatus[ExprEvalStatus["IFC_TYPE_OBJECT_NOT_FOUND"] = 2053] = "IFC_TYPE_OBJECT_NOT_FOUND"; ExprEvalStatus[ExprEvalStatus["PARSE_ERROR"] = 2080] = "PARSE_ERROR"; ExprEvalStatus[ExprEvalStatus["SYNTAX_ERROR"] = 2081] = "SYNTAX_ERROR"; ExprEvalStatus[ExprEvalStatus["VALIDATION_ERROR"] = 2082] = "VALIDATION_ERROR"; ExprEvalStatus[ExprEvalStatus["STATIC_TYPE_ERROR"] = 2083] = "STATIC_TYPE_ERROR"; ExprEvalStatus[ExprEvalStatus["MISSING_OPERAND"] = 2084] = "MISSING_OPERAND"; ExprEvalStatus[ExprEvalStatus["MISSING_REQUIRED_FUNCTION_ARGUMENT"] = 2085] = "MISSING_REQUIRED_FUNCTION_ARGUMENT"; ExprEvalStatus[ExprEvalStatus["UNKNOWN_FUNCTION"] = 2086] = "UNKNOWN_FUNCTION"; ExprEvalStatus[ExprEvalStatus["WRONG_FUNCTION_ARGUMENT_TYPE"] = 2087] = "WRONG_FUNCTION_ARGUMENT_TYPE"; ExprEvalStatus[ExprEvalStatus["SPURIOUS_FUNCTION_ARGUMENT"] = 2088] = "SPURIOUS_FUNCTION_ARGUMENT"; })(ExprEvalStatus || (exports.ExprEvalStatus = ExprEvalStatus = {})); function isExprEvalStatus(candidate) { return (typeof candidate === "number" && typeof ExprEvalStatus[candidate] !== "undefined"); } exports.isExprEvalStatus = isExprEvalStatus; function isExprEvalSuccess(arg) { return (isExprEvalStatus(arg.status) && arg.status >= ExprEvalStatus.SUCCESS && arg.status < ExprEvalStatus.ERROR && typeof arg.result !== "undefined"); } exports.isExprEvalSuccess = isExprEvalSuccess; class ExprEvalSuccessObj { constructor(result) { this.result = result; this.status = ExprEvalStatus.SUCCESS; } } exports.ExprEvalSuccessObj = ExprEvalSuccessObj; class ExprEvalErrorObj { constructor(exprKind, status = ExprEvalStatus.ERROR, message, textSpan) { if (!isExprEvalStatus(status) || status < ExprEvalStatus.ERROR) { throw new Error(`ExprEvalStatus ${status} is not an error status"`); } this.status = status; this.exprKind = exprKind; if (!(0, IfcExpressionUtils_js_1.isNullish)(message)) { this.message = mapErrorObjectToMessage(message); } if (!(0, IfcExpressionUtils_js_1.isNullish)(textSpan)) { this.textSpan = textSpan; } } } exports.ExprEvalErrorObj = ExprEvalErrorObj; function mapErrorObjectToMessage(errorObjectOrMessage) { if (typeof errorObjectOrMessage === "string") { return errorObjectOrMessage; } else if (errorObjectOrMessage instanceof Error) { return errorObjectOrMessage.message; } else if (Array.isArray(errorObjectOrMessage)) { return errorObjectOrMessage .map((m) => this.createErrorMessage(m)) .join(" "); } return JSON.stringify(errorObjectOrMessage); } exports.mapErrorObjectToMessage = mapErrorObjectToMessage; class ExprEvalErrorUndefinedResult extends ExprEvalErrorObj { constructor(epxrKind, textSpan) { super(epxrKind, ExprEvalStatus.UNDEFINED_RESULT, "Expression evaluated to undefined or null - this should never happen", textSpan); } } exports.ExprEvalErrorUndefinedResult = ExprEvalErrorUndefinedResult; class ExprEvalError1Obj extends ExprEvalErrorObj { constructor(exprKind, sub, status, message, textSpan) { super(exprKind, status, message, textSpan); this.sub = sub; } } exports.ExprEvalError1Obj = ExprEvalError1Obj; class ExprEvalError2Obj extends ExprEvalErrorObj { constructor(exprKind, left, right, status, message, textSpan) { super(exprKind, status, message, textSpan); this.left = left; this.right = right; } } exports.ExprEvalError2Obj = ExprEvalError2Obj; function isExprEvalError(arg) { return isExprEvalStatus(arg.status) && arg.status >= ExprEvalStatus.ERROR; } exports.isExprEvalError = isExprEvalError; class ExprEvalConsequentialError1Obj extends ExprEvalErrorObj { constructor(exprKind, cause, message, textSpan) { super(exprKind, ExprEvalStatus.CONSEQUENTIAL_ERROR, message || "Consequential error", textSpan); this.exprKind = exprKind; this.cause = cause; } } exports.ExprEvalConsequentialError1Obj = ExprEvalConsequentialError1Obj; class ExprEvalFunctionEvaluationErrorObj extends ExprEvalErrorObj { constructor(exprKind, status, message, functionName, textSpan) { super(exprKind, status, message, textSpan); this.functionName = functionName; } } exports.ExprEvalFunctionEvaluationErrorObj = ExprEvalFunctionEvaluationErrorObj; class ExprEvalFunctionEvaluationObjectNotFoundErrorObj extends ExprEvalFunctionEvaluationErrorObj { constructor(exprKind, status, message, functionName, objectKey, textSpan) { super(exprKind, status, message, functionName, textSpan); this.offendingKey = objectKey; } } exports.ExprEvalFunctionEvaluationObjectNotFoundErrorObj = ExprEvalFunctionEvaluationObjectNotFoundErrorObj; class ExprEvalFunctionEvaluationConsequentialErrorObj extends ExprEvalFunctionEvaluationErrorObj { constructor(exprKind, functionName, cause, textSpan) { super(exprKind, ExprEvalStatus.CONSEQUENTIAL_ERROR, `Error evaluating function ${functionName}`, functionName, textSpan); this.cause = cause; } } exports.ExprEvalFunctionEvaluationConsequentialErrorObj = ExprEvalFunctionEvaluationConsequentialErrorObj; class ExprEvalMissingRequiredFunctionArgumentErrorObj extends ExprEvalFunctionEvaluationErrorObj { constructor(exprKind, message, functionName, argumentName, argumentIndex, textSpan) { super(exprKind, ExprEvalStatus.MISSING_REQUIRED_FUNCTION_ARGUMENT, message, functionName, textSpan); this.argumentName = argumentName; this.argumentIndex = argumentIndex; } } exports.ExprEvalMissingRequiredFunctionArgumentErrorObj = ExprEvalMissingRequiredFunctionArgumentErrorObj; class ExprEvalValueErrorObj extends ExprEvalErrorObj { constructor(exprKind, status, message, offendingValue, textSpan) { super(exprKind, status, message, textSpan); this.offendingValue = offendingValue; } } exports.ExprEvalValueErrorObj = ExprEvalValueErrorObj; class ExprEvalTypeErrorObj extends ExprEvalValueErrorObj { constructor(exprKind, message, offendingValue, textSpan) { super(exprKind, ExprEvalStatus.TYPE_ERROR, message, offendingValue, textSpan); } } exports.ExprEvalTypeErrorObj = ExprEvalTypeErrorObj; class ExprEvalParseErrorObj extends ExprEvalErrorObj { constructor(status, message, offendingInput, textSpan) { super(ExprKind_js_1.ExprKind.PARSE_ERROR, status, message, textSpan); this.offendingInput = offendingInput; } } exports.ExprEvalParseErrorObj = ExprEvalParseErrorObj; class ExprEvalValidationErrorObj extends ExprEvalErrorObj { constructor(status, message, textSpan) { super(ExprKind_js_1.ExprKind.PARSE_ERROR, status, message, textSpan); } } exports.ExprEvalValidationErrorObj = ExprEvalValidationErrorObj; class ExprEvalUnknownFunctionErrorObj extends ExprEvalValidationErrorObj { constructor(message, functionName, textSpan) { super(ExprEvalStatus.UNKNOWN_FUNCTION, message, textSpan); this.functionName = functionName; } } exports.ExprEvalUnknownFunctionErrorObj = ExprEvalUnknownFunctionErrorObj; class ExprEvalMissingFunctionArgumentErrorObj extends ExprEvalErrorObj { constructor(message, functionName, argumentName, argumentIndex, textSpan) { super(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, ExprEvalStatus.MISSING_REQUIRED_FUNCTION_ARGUMENT, message, textSpan); this.functionName = functionName; this.argumentName = argumentName; this.argumentIndex = argumentIndex; } } exports.ExprEvalMissingFunctionArgumentErrorObj = ExprEvalMissingFunctionArgumentErrorObj; class ExprEvalSpuriousFunctionArgumentErrorObj extends ExprEvalErrorObj { constructor(message, functionName, argumentName, argumentIndex, textSpan) { super(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, ExprEvalStatus.SPURIOUS_FUNCTION_ARGUMENT, message, textSpan); this.functionName = functionName; this.argumentName = argumentName; this.argumentIndex = argumentIndex; } } exports.ExprEvalSpuriousFunctionArgumentErrorObj = ExprEvalSpuriousFunctionArgumentErrorObj; class ExprEvalWrongFunctionArgumentTypeErrorObj extends ExprEvalValidationErrorObj { constructor(message, functionName, argumentName, argumentIndex, expectedType, actualType, textSpan) { super(ExprEvalStatus.WRONG_FUNCTION_ARGUMENT_TYPE, message, textSpan); this.functionName = functionName; this.argumentName = argumentName; this.argumentIndex = argumentIndex; this.expectedType = expectedType; this.actualType = actualType; } } exports.ExprEvalWrongFunctionArgumentTypeErrorObj = ExprEvalWrongFunctionArgumentTypeErrorObj; //# sourceMappingURL=ExprEvalResult.js.map