ifc-expressions
Version:
Parsing and evaluation of IFC expressions
204 lines (203 loc) • 10.8 kB
JavaScript
;
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