ifc-expressions
Version:
Parsing and evaluation of IFC expressions
163 lines (162 loc) • 7.33 kB
TypeScript
import { Expr } from "./Expr.js";
import { ExprKind } from "./ExprKind.js";
import { TextSpan } from "../util/TextSpan.js";
export declare enum ExprEvalStatus {
SUCCESS = 1000,
ERROR = 2000,
UNDEFINED_RESULT = 2001,
REFERENCE_ERROR = 2010,
CONSEQUENTIAL_ERROR = 2020,
MATH_ERROR = 2030,
TYPE_ERROR = 2040,
NOT_FOUND = 2050,
IFC_PROPERTY_NOT_FOUND = 2051,
IFC_PROPERTY_SET_NOT_FOUND = 2052,
IFC_TYPE_OBJECT_NOT_FOUND = 2053,
PARSE_ERROR = 2080,
SYNTAX_ERROR = 2081,
VALIDATION_ERROR = 2082,
STATIC_TYPE_ERROR = 2083,
MISSING_OPERAND = 2084,
MISSING_REQUIRED_FUNCTION_ARGUMENT = 2085,
UNKNOWN_FUNCTION = 2086,
WRONG_FUNCTION_ARGUMENT_TYPE = 2087,
SPURIOUS_FUNCTION_ARGUMENT = 2088
}
export declare function isExprEvalStatus(candidate: number): boolean;
export type ExprEvalResult<T> = ExprEvalSuccess<T> | ExprEvalError;
export type ExprEvalSuccess<T> = {
status: ExprEvalStatus;
result: T;
};
export declare function isExprEvalSuccess(arg: any): arg is ExprEvalSuccess<unknown>;
export declare class ExprEvalSuccessObj<T> {
readonly result: T;
readonly status: ExprEvalStatus;
constructor(result: T);
}
export declare class ExprEvalErrorObj {
readonly status: ExprEvalStatus;
readonly exprKind: ExprKind;
readonly message?: string;
readonly textSpan?: TextSpan;
constructor(exprKind: ExprKind, status?: ExprEvalStatus, message?: any, textSpan?: TextSpan);
}
export declare function mapErrorObjectToMessage(errorObjectOrMessage: any): string;
export declare class ExprEvalErrorUndefinedResult extends ExprEvalErrorObj {
constructor(epxrKind: ExprKind, textSpan?: TextSpan);
}
export declare class ExprEvalError1Obj extends ExprEvalErrorObj {
readonly sub: ExprEvalResult<unknown>;
constructor(exprKind: ExprKind, sub: ExprEvalResult<unknown>, status: ExprEvalStatus, message?: any, textSpan?: TextSpan);
}
export declare class ExprEvalError2Obj extends ExprEvalErrorObj {
readonly left: ExprEvalResult<unknown>;
readonly right: ExprEvalResult<unknown>;
constructor(exprKind: ExprKind, left: ExprEvalResult<unknown>, right: ExprEvalResult<unknown>, status?: ExprEvalStatus, message?: any, textSpan?: TextSpan);
}
export declare function isExprEvalError(arg: any): arg is ExprEvalError;
export type ExprEvalError = ExprEvalUnspecificError | ExprEvalReferencError | ExprEvalErrorUndefinedResult | ExprEvalMissingRequiredFunctionArgumentError | ExprEvalValueError<unknown>;
type ExprEvalUnspecificError = {
readonly exprKind: ExprKind;
readonly status: ExprEvalStatus;
readonly message?: string;
};
export type ExprEvalReferencError = ExprEvalUnspecificError & {
readonly status: ExprEvalStatus.REFERENCE_ERROR;
readonly expr: Expr<unknown>;
};
export type ExprEvalConsequentialError1 = ExprEvalUnspecificError & {
readonly status: ExprEvalStatus.CONSEQUENTIAL_ERROR;
readonly exprKind: ExprKind;
readonly cause: ExprEvalError;
};
export declare class ExprEvalConsequentialError1Obj extends ExprEvalErrorObj {
readonly exprKind: ExprKind;
readonly cause: ExprEvalResult<unknown>;
constructor(exprKind: ExprKind, cause: ExprEvalResult<unknown>, message?: any, textSpan?: TextSpan);
}
export type ExprEvalFunctionEvaluationError = ExprEvalUnspecificError & {
functionName: string;
};
export type ExprEvalMissingRequiredFunctionArgumentError = ExprEvalFunctionEvaluationError & {
argumentName: string;
argumentIndex: number;
};
export type ExprEvalFunctionEvaluationConsequentialError = ExprEvalFunctionEvaluationError & {
cause: ExprEvalUnspecificError;
};
export declare class ExprEvalFunctionEvaluationErrorObj extends ExprEvalErrorObj {
readonly functionName: string;
constructor(exprKind: ExprKind, status: ExprEvalStatus, message: any, functionName: string, textSpan?: TextSpan);
}
export declare class ExprEvalFunctionEvaluationObjectNotFoundErrorObj extends ExprEvalFunctionEvaluationErrorObj {
readonly offendingKey: string;
constructor(exprKind: ExprKind, status: ExprEvalStatus, message: any, functionName: string, objectKey: string, textSpan?: TextSpan);
}
export declare class ExprEvalFunctionEvaluationConsequentialErrorObj extends ExprEvalFunctionEvaluationErrorObj {
readonly cause: ExprEvalError;
constructor(exprKind: ExprKind, functionName: string, cause: ExprEvalError, textSpan?: TextSpan);
}
export declare class ExprEvalMissingRequiredFunctionArgumentErrorObj extends ExprEvalFunctionEvaluationErrorObj {
readonly argumentName: string;
readonly argumentIndex: number;
constructor(exprKind: ExprKind, message: any, functionName: string, argumentName: string, argumentIndex: number, textSpan?: TextSpan);
}
export type ExprEvalTypeError = ExprEvalUnspecificError & {
status: ExprEvalStatus.TYPE_ERROR;
};
export type ExprEvalValueError<T> = ExprEvalUnspecificError & {
offendingValue: T;
};
export declare class ExprEvalValueErrorObj<T> extends ExprEvalErrorObj {
readonly offendingValue: T;
constructor(exprKind: ExprKind, status: ExprEvalStatus, message: any, offendingValue: T, textSpan?: TextSpan);
}
export declare class ExprEvalTypeErrorObj<T> extends ExprEvalValueErrorObj<T> {
constructor(exprKind: ExprKind, message: any, offendingValue: T, textSpan?: TextSpan);
}
export type ExprEvalParseError = ExprEvalUnspecificError & {
exprKind: ExprKind.PARSE_ERROR;
line: number;
column: number;
offendingInput: string;
};
export type ExprEvalValidationError = ExprEvalUnspecificError & {
textSpan: TextSpan;
};
export declare class ExprEvalParseErrorObj extends ExprEvalErrorObj {
readonly line: number;
readonly column: number;
readonly offendingInput: string;
constructor(status: ExprEvalStatus, message: any, offendingInput: string, textSpan: TextSpan);
}
export declare class ExprEvalValidationErrorObj extends ExprEvalErrorObj {
readonly textSpan: TextSpan;
constructor(status: ExprEvalStatus, message: any, textSpan: TextSpan);
}
export declare class ExprEvalUnknownFunctionErrorObj extends ExprEvalValidationErrorObj {
readonly functionName: string;
constructor(message: any, functionName: any, textSpan: TextSpan);
}
export declare class ExprEvalMissingFunctionArgumentErrorObj extends ExprEvalErrorObj {
readonly functionName: string;
readonly argumentName: string;
readonly argumentIndex: number;
constructor(message: any, functionName: string, argumentName: string, argumentIndex: number, textSpan: TextSpan);
}
export declare class ExprEvalSpuriousFunctionArgumentErrorObj extends ExprEvalErrorObj {
readonly functionName: string;
readonly argumentName: string;
readonly argumentIndex: number;
constructor(message: any, functionName: string, argumentName: string, argumentIndex: number, textSpan: TextSpan);
}
export declare class ExprEvalWrongFunctionArgumentTypeErrorObj extends ExprEvalValidationErrorObj {
readonly functionName: string;
readonly argumentName: string;
readonly argumentIndex: number;
readonly expectedType: string;
readonly actualType: string;
constructor(message: any, functionName: string, argumentName: string, argumentIndex: number, expectedType: string, actualType: string, textSpan: TextSpan);
}
export {};