ifc-expressions 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExprVisitor.d.ts +5 -1
- package/dist/IfcExpression.d.ts +3 -2
- package/dist/cjs/ExprVisitor.js +36 -2
- package/dist/cjs/ExprVisitor.js.map +1 -1
- package/dist/cjs/IfcExpression.js +3 -5
- package/dist/cjs/IfcExpression.js.map +1 -1
- package/dist/cjs/context/IfcElementAccessor.js +2 -2
- package/dist/cjs/context/IfcElementAccessor.js.map +1 -1
- package/dist/cjs/context/ObjectAccessor.js +9 -0
- package/dist/cjs/context/ObjectAccessor.js.map +1 -1
- package/dist/cjs/expression/Expr.js.map +1 -1
- package/dist/cjs/expression/Expr0.js +18 -2
- package/dist/cjs/expression/Expr0.js.map +1 -1
- package/dist/cjs/expression/Expr1.js +46 -2
- package/dist/cjs/expression/Expr1.js.map +1 -1
- package/dist/cjs/expression/Expr2.js +48 -2
- package/dist/cjs/expression/Expr2.js.map +1 -1
- package/dist/cjs/expression/Expr2LeftBeforeRight.js +45 -0
- package/dist/cjs/expression/Expr2LeftBeforeRight.js.map +1 -0
- package/dist/cjs/expression/ExprBase.js +20 -0
- package/dist/cjs/expression/ExprBase.js.map +1 -0
- package/dist/cjs/expression/ExprEvalResult.js +165 -0
- package/dist/cjs/expression/ExprEvalResult.js.map +1 -0
- package/dist/cjs/expression/ExprKind.js +24 -0
- package/dist/cjs/expression/ExprKind.js.map +1 -0
- package/dist/cjs/expression/LiteralExpr.js +25 -0
- package/dist/cjs/expression/LiteralExpr.js.map +1 -0
- package/dist/cjs/expression/LocalContextKeys.js +7 -0
- package/dist/cjs/expression/LocalContextKeys.js.map +1 -0
- package/dist/cjs/expression/function/Func.js +93 -0
- package/dist/cjs/expression/function/Func.js.map +1 -0
- package/dist/cjs/expression/function/FuncArg.js +33 -0
- package/dist/cjs/expression/function/FuncArg.js.map +1 -0
- package/dist/cjs/expression/function/FunctionExpr.js +33 -0
- package/dist/cjs/expression/function/FunctionExpr.js.map +1 -0
- package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js +10 -0
- package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
- package/dist/cjs/expression/function/IfcExpressionFunctions.js +26 -0
- package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -0
- package/dist/cjs/expression/function/arg/FuncArgBase.js +34 -0
- package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -0
- package/dist/cjs/expression/function/arg/FuncArgInt.js +25 -0
- package/dist/cjs/expression/function/arg/FuncArgInt.js.map +1 -0
- package/dist/cjs/expression/function/arg/FuncArgNumeric.js +22 -0
- package/dist/cjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
- package/dist/cjs/expression/function/impl/MAP.js +77 -0
- package/dist/cjs/expression/function/impl/MAP.js.map +1 -0
- package/dist/cjs/expression/function/impl/ROUND.js +29 -0
- package/dist/cjs/expression/function/impl/ROUND.js.map +1 -0
- package/dist/cjs/expression/numeric/DivideExpr.js +8 -6
- package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/MinusExpr.js +4 -6
- package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/MultiplyExpr.js +4 -6
- package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js +4 -3
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js +5 -4
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/PlusExpr.js +4 -6
- package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -1
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js +19 -5
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +3 -2
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js +33 -8
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +3 -2
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/string/StringConcatExpr.js +4 -3
- package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -1
- package/dist/cjs/expression/string/StringLiteralExpr.js +5 -4
- package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -1
- package/dist/cjs/expression/structure/ArrayExpr.js +26 -0
- package/dist/cjs/expression/structure/ArrayExpr.js.map +1 -0
- package/dist/cjs/gen/parser/IfcExpressionLexer.js +74 -72
- package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
- package/dist/cjs/gen/parser/IfcExpressionParser.js +148 -104
- package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
- package/dist/cjs/value/ArrayValue.js +23 -0
- package/dist/cjs/value/ArrayValue.js.map +1 -0
- package/dist/cjs/value/BooleanValue.js +12 -3
- package/dist/cjs/value/BooleanValue.js.map +1 -1
- package/dist/cjs/value/LiteralValue.js.map +1 -1
- package/dist/cjs/value/LiteralValueAnyArity.js.map +1 -1
- package/dist/cjs/value/LogicalValue.js +14 -3
- package/dist/cjs/value/LogicalValue.js.map +1 -1
- package/dist/cjs/value/NumericValue.js +16 -7
- package/dist/cjs/value/NumericValue.js.map +1 -1
- package/dist/cjs/value/ReferenceValue.js +12 -3
- package/dist/cjs/value/ReferenceValue.js.map +1 -1
- package/dist/cjs/value/StringValue.js +12 -3
- package/dist/cjs/value/StringValue.js.map +1 -1
- package/dist/cjs/value/Value.js +0 -10
- package/dist/cjs/value/Value.js.map +1 -1
- package/dist/context/ObjectAccessor.d.ts +1 -0
- package/dist/expression/Expr.d.ts +4 -1
- package/dist/expression/Expr0.d.ts +8 -4
- package/dist/expression/Expr1.d.ts +20 -5
- package/dist/expression/Expr2.d.ts +15 -6
- package/dist/expression/Expr2LeftBeforeRight.d.ts +14 -0
- package/dist/expression/ExprBase.d.ts +11 -0
- package/dist/expression/ExprEvalResult.d.ts +125 -0
- package/dist/expression/ExprKind.d.ts +19 -0
- package/dist/expression/LiteralExpr.d.ts +11 -0
- package/dist/expression/LocalContextKeys.d.ts +3 -0
- package/dist/expression/function/Func.d.ts +30 -0
- package/dist/expression/function/FuncArg.d.ts +18 -0
- package/dist/expression/function/FunctionExpr.d.ts +13 -0
- package/dist/expression/function/IfcExpressionFunctionConfigException.d.ts +3 -0
- package/dist/expression/function/IfcExpressionFunctions.d.ts +7 -0
- package/dist/expression/function/arg/FuncArgBase.d.ts +19 -0
- package/dist/expression/function/arg/FuncArgInt.d.ts +8 -0
- package/dist/expression/function/arg/FuncArgNumeric.d.ts +8 -0
- package/dist/expression/function/impl/MAP.d.ts +10 -0
- package/dist/expression/function/impl/ROUND.d.ts +9 -0
- package/dist/expression/numeric/DivideExpr.d.ts +4 -2
- package/dist/expression/numeric/MinusExpr.d.ts +3 -2
- package/dist/expression/numeric/MultiplyExpr.d.ts +3 -2
- package/dist/expression/numeric/NumParenthesisExpr.d.ts +2 -2
- package/dist/expression/numeric/NumericLiteralExpr.d.ts +4 -3
- package/dist/expression/numeric/PlusExpr.d.ts +2 -2
- package/dist/expression/reference/AttributeReferenceExpr.d.ts +9 -5
- package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +1 -1
- package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +5 -4
- package/dist/expression/reference/NestedObjectChainExpr.d.ts +9 -6
- package/dist/expression/reference/PropObjectReferenceExpr.d.ts +1 -1
- package/dist/expression/string/StringConcatExpr.d.ts +2 -2
- package/dist/expression/string/StringLiteralExpr.d.ts +3 -3
- package/dist/expression/structure/ArrayExpr.d.ts +11 -0
- package/dist/gen/parser/IfcExpressionLexer.d.ts +10 -9
- package/dist/gen/parser/IfcExpressionParser.d.ts +10 -9
- package/dist/mjs/ExprVisitor.js +37 -3
- package/dist/mjs/ExprVisitor.js.map +1 -1
- package/dist/mjs/IfcExpression.js +3 -4
- package/dist/mjs/IfcExpression.js.map +1 -1
- package/dist/mjs/context/IfcElementAccessor.js +2 -2
- package/dist/mjs/context/IfcElementAccessor.js.map +1 -1
- package/dist/mjs/context/ObjectAccessor.js +7 -1
- package/dist/mjs/context/ObjectAccessor.js.map +1 -1
- package/dist/mjs/expression/Expr.js.map +1 -1
- package/dist/mjs/expression/Expr0.js +18 -2
- package/dist/mjs/expression/Expr0.js.map +1 -1
- package/dist/mjs/expression/Expr1.js +46 -2
- package/dist/mjs/expression/Expr1.js.map +1 -1
- package/dist/mjs/expression/Expr2.js +48 -2
- package/dist/mjs/expression/Expr2.js.map +1 -1
- package/dist/mjs/expression/Expr2LeftBeforeRight.js +41 -0
- package/dist/mjs/expression/Expr2LeftBeforeRight.js.map +1 -0
- package/dist/mjs/expression/ExprBase.js +16 -0
- package/dist/mjs/expression/ExprBase.js.map +1 -0
- package/dist/mjs/expression/ExprEvalResult.js +144 -0
- package/dist/mjs/expression/ExprEvalResult.js.map +1 -0
- package/dist/mjs/expression/ExprKind.js +21 -0
- package/dist/mjs/expression/ExprKind.js.map +1 -0
- package/dist/mjs/expression/LiteralExpr.js +21 -0
- package/dist/mjs/expression/LiteralExpr.js.map +1 -0
- package/dist/mjs/expression/LocalContextKeys.js +4 -0
- package/dist/mjs/expression/LocalContextKeys.js.map +1 -0
- package/dist/mjs/expression/function/Func.js +89 -0
- package/dist/mjs/expression/function/Func.js.map +1 -0
- package/dist/mjs/expression/function/FuncArg.js +29 -0
- package/dist/mjs/expression/function/FuncArg.js.map +1 -0
- package/dist/mjs/expression/function/FunctionExpr.js +29 -0
- package/dist/mjs/expression/function/FunctionExpr.js.map +1 -0
- package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js +6 -0
- package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
- package/dist/mjs/expression/function/IfcExpressionFunctions.js +22 -0
- package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -0
- package/dist/mjs/expression/function/arg/FuncArgBase.js +30 -0
- package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -0
- package/dist/mjs/expression/function/arg/FuncArgInt.js +21 -0
- package/dist/mjs/expression/function/arg/FuncArgInt.js.map +1 -0
- package/dist/mjs/expression/function/arg/FuncArgNumeric.js +18 -0
- package/dist/mjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
- package/dist/mjs/expression/function/impl/MAP.js +73 -0
- package/dist/mjs/expression/function/impl/MAP.js.map +1 -0
- package/dist/mjs/expression/function/impl/ROUND.js +25 -0
- package/dist/mjs/expression/function/impl/ROUND.js.map +1 -0
- package/dist/mjs/expression/numeric/DivideExpr.js +8 -6
- package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/MinusExpr.js +4 -6
- package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/MultiplyExpr.js +4 -6
- package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js +4 -3
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js +5 -4
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/PlusExpr.js +4 -6
- package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -1
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js +19 -5
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +3 -2
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js +33 -8
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +3 -2
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/string/StringConcatExpr.js +4 -3
- package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -1
- package/dist/mjs/expression/string/StringLiteralExpr.js +5 -4
- package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -1
- package/dist/mjs/expression/structure/ArrayExpr.js +22 -0
- package/dist/mjs/expression/structure/ArrayExpr.js.map +1 -0
- package/dist/mjs/gen/parser/IfcExpressionLexer.js +74 -72
- package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
- package/dist/mjs/gen/parser/IfcExpressionParser.js +148 -104
- package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
- package/dist/mjs/value/ArrayValue.js +19 -0
- package/dist/mjs/value/ArrayValue.js.map +1 -0
- package/dist/mjs/value/BooleanValue.js +12 -3
- package/dist/mjs/value/BooleanValue.js.map +1 -1
- package/dist/mjs/value/LiteralValue.js.map +1 -1
- package/dist/mjs/value/LiteralValueAnyArity.js.map +1 -1
- package/dist/mjs/value/LogicalValue.js +14 -3
- package/dist/mjs/value/LogicalValue.js.map +1 -1
- package/dist/mjs/value/NumericValue.js +16 -4
- package/dist/mjs/value/NumericValue.js.map +1 -1
- package/dist/mjs/value/ReferenceValue.js +12 -3
- package/dist/mjs/value/ReferenceValue.js.map +1 -1
- package/dist/mjs/value/StringValue.js +12 -3
- package/dist/mjs/value/StringValue.js.map +1 -1
- package/dist/mjs/value/Value.js +1 -8
- package/dist/mjs/value/Value.js.map +1 -1
- package/dist/value/ArrayValue.d.ts +12 -0
- package/dist/value/BooleanValue.d.ts +8 -1
- package/dist/value/LiteralValue.d.ts +2 -1
- package/dist/value/LiteralValueAnyArity.d.ts +1 -1
- package/dist/value/LogicalValue.d.ts +8 -1
- package/dist/value/NumericValue.d.ts +11 -4
- package/dist/value/ReferenceValue.d.ts +8 -1
- package/dist/value/StringValue.d.ts +8 -1
- package/dist/value/Value.d.ts +2 -3
- package/package.json +1 -1
- package/dist/cjs/expression/ArrayExpr.js +0 -3
- package/dist/cjs/expression/ArrayExpr.js.map +0 -1
- package/dist/cjs/expression/numeric/MultiplyByExpr.js +0 -18
- package/dist/cjs/expression/numeric/MultiplyByExpr.js.map +0 -1
- package/dist/expression/ArrayExpr.d.ts +0 -3
- package/dist/expression/numeric/MultiplyByExpr.d.ts +0 -8
- package/dist/mjs/expression/ArrayExpr.js +0 -2
- package/dist/mjs/expression/ArrayExpr.js.map +0 -1
- package/dist/mjs/expression/numeric/MultiplyByExpr.js +0 -14
- package/dist/mjs/expression/numeric/MultiplyByExpr.js.map +0 -1
package/dist/ExprVisitor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
|
|
2
|
-
import { AttributeRefContext, ExprContext, NestedObjectChainEndContext, NestedObjectChainInnerContext, NumAddSubContext, NumAttributeRefContext, NumLitContext, NumLiteralContext, NumMulDivContext, NumParensContext, ObjectRefContext, StringAttributeRefContext, StringConcatContext, StringLiteralContext } from "./gen/parser/IfcExpressionParser.js";
|
|
2
|
+
import { ArrayContext, ArrayElementListContext, AttributeRefContext, ExprContext, ExprListContext, FunctionCallContext, NestedObjectChainEndContext, NestedObjectChainInnerContext, NumAddSubContext, NumAttributeRefContext, NumLitContext, NumLiteralContext, NumMulDivContext, NumParensContext, ObjectRefContext, StringAttributeRefContext, StringConcatContext, StringLiteralContext } from "./gen/parser/IfcExpressionParser.js";
|
|
3
3
|
import { Expr } from "./expression/Expr.js";
|
|
4
4
|
export declare class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {
|
|
5
5
|
constructor();
|
|
@@ -18,5 +18,9 @@ export declare class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {
|
|
|
18
18
|
visitNumParens: (ctx: NumParensContext) => Expr<any>;
|
|
19
19
|
visitExpr: (ctx: ExprContext) => Expr<any>;
|
|
20
20
|
visitNumLit: (ctx: NumLitContext) => Expr<any>;
|
|
21
|
+
visitArray: (ctx: ArrayContext) => Expr<any>;
|
|
22
|
+
collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>>;
|
|
23
|
+
visitFunctionCall: (ctx: FunctionCallContext) => Expr<any>;
|
|
24
|
+
collectFunctionArguments: (ctx: ExprListContext) => Array<Expr<any>>;
|
|
21
25
|
private failNode;
|
|
22
26
|
}
|
package/dist/IfcExpression.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ErrorListener, Token } from "antlr4";
|
|
2
2
|
import { ExprVisitor } from "./ExprVisitor.js";
|
|
3
3
|
import { IfcExpressionErrorListener } from "./IfcExpressionErrorListener.js";
|
|
4
|
-
import {
|
|
4
|
+
import { isNullish, isPresent } from "./IfcExpressionUtils.js";
|
|
5
5
|
import { IfcExpressionContext } from "./context/IfcExpressionContext.js";
|
|
6
6
|
import { Expr } from "./expression/Expr.js";
|
|
7
7
|
import { IfcElementAccessor } from "./context/IfcElementAccessor.js";
|
|
@@ -23,10 +23,11 @@ import { ObjectAccessor } from "./context/ObjectAccessor.js";
|
|
|
23
23
|
import { IfcExpressionEvaluationException } from "./expression/IfcExpressionEvaluationException.js";
|
|
24
24
|
import type { LiteralValueAnyArity } from "./value/LiteralValueAnyArity.js";
|
|
25
25
|
import type { PrimitiveValueType } from "./value/PrimitiveValueType.js";
|
|
26
|
+
import { ExprEvalResult } from "./expression/ExprEvalResult";
|
|
26
27
|
export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, LiteralValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprVisitor, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, };
|
|
27
28
|
export type { PrimitiveValueType, LiteralValueAnyArity };
|
|
28
29
|
export declare class IfcExpression {
|
|
29
30
|
static parse(input: string, errorListener?: ErrorListener<Token>): ExprContext;
|
|
30
|
-
static evaluate(expression: string, context: IfcExpressionContext):
|
|
31
|
+
static evaluate(expression: string, context: IfcExpressionContext): ExprEvalResult<any>;
|
|
31
32
|
private static extractExprTree;
|
|
32
33
|
}
|
package/dist/cjs/ExprVisitor.js
CHANGED
|
@@ -22,6 +22,8 @@ const NumericValue_js_1 = require("./value/NumericValue.js");
|
|
|
22
22
|
const StringValue_js_1 = require("./value/StringValue.js");
|
|
23
23
|
const StringLiteralExpr_js_1 = require("./expression/string/StringLiteralExpr.js");
|
|
24
24
|
const StringConcatExpr_js_1 = require("./expression/string/StringConcatExpr.js");
|
|
25
|
+
const ArrayExpr_1 = require("./expression/structure/ArrayExpr");
|
|
26
|
+
const FunctionExpr_1 = require("./expression/function/FunctionExpr");
|
|
25
27
|
class ExprVisitor extends IfcExpressionVisitor_js_1.default {
|
|
26
28
|
constructor() {
|
|
27
29
|
super();
|
|
@@ -74,11 +76,11 @@ class ExprVisitor extends IfcExpressionVisitor_js_1.default {
|
|
|
74
76
|
this.visitNumLiteral = (ctx) => {
|
|
75
77
|
let val = ctx.INT();
|
|
76
78
|
if ((0, IfcExpressionUtils_js_1.isPresent)(val)) {
|
|
77
|
-
return new NumericLiteralExpr_js_1.NumericLiteralExpr(new NumericValue_js_1.NumericValue(new decimal_js_1.default(
|
|
79
|
+
return new NumericLiteralExpr_js_1.NumericLiteralExpr(new NumericValue_js_1.NumericValue(new decimal_js_1.default(ctx.getText())));
|
|
78
80
|
}
|
|
79
81
|
val = ctx.FLOAT();
|
|
80
82
|
if ((0, IfcExpressionUtils_js_1.isPresent)(val)) {
|
|
81
|
-
return new NumericLiteralExpr_js_1.NumericLiteralExpr(new NumericValue_js_1.NumericValue(new decimal_js_1.default(
|
|
83
|
+
return new NumericLiteralExpr_js_1.NumericLiteralExpr(new NumericValue_js_1.NumericValue(new decimal_js_1.default(ctx.getText())));
|
|
82
84
|
}
|
|
83
85
|
this.failNode(ctx);
|
|
84
86
|
};
|
|
@@ -111,6 +113,38 @@ class ExprVisitor extends IfcExpressionVisitor_js_1.default {
|
|
|
111
113
|
this.visitNumLit = (ctx) => {
|
|
112
114
|
return this.visit(ctx.getChild(0));
|
|
113
115
|
};
|
|
116
|
+
/*================================================
|
|
117
|
+
* ArrayExpr
|
|
118
|
+
*===============================================*/
|
|
119
|
+
this.visitArray = (ctx) => {
|
|
120
|
+
return new ArrayExpr_1.ArrayExpr(this.collectArrayElements(ctx.arrayElementList()));
|
|
121
|
+
};
|
|
122
|
+
this.collectArrayElements = (ctx) => {
|
|
123
|
+
const first = this.visit(ctx.expr());
|
|
124
|
+
const rest = ctx.arrayElementList();
|
|
125
|
+
if (!(0, IfcExpressionUtils_js_1.isNullish)(rest)) {
|
|
126
|
+
const arr = this.collectArrayElements(rest);
|
|
127
|
+
arr.unshift(first);
|
|
128
|
+
return arr;
|
|
129
|
+
}
|
|
130
|
+
return [first];
|
|
131
|
+
};
|
|
132
|
+
/*================================================
|
|
133
|
+
* FuncExpr
|
|
134
|
+
*===============================================*/
|
|
135
|
+
this.visitFunctionCall = (ctx) => {
|
|
136
|
+
return new FunctionExpr_1.FunctionExpr(ctx._name.text, this.collectFunctionArguments(ctx.exprList()));
|
|
137
|
+
};
|
|
138
|
+
this.collectFunctionArguments = (ctx) => {
|
|
139
|
+
const first = this.visit(ctx.expr());
|
|
140
|
+
const rest = ctx.exprList();
|
|
141
|
+
if (!(0, IfcExpressionUtils_js_1.isNullish)(rest)) {
|
|
142
|
+
const arr = this.collectFunctionArguments(rest);
|
|
143
|
+
arr.unshift(first);
|
|
144
|
+
return arr;
|
|
145
|
+
}
|
|
146
|
+
return [first];
|
|
147
|
+
};
|
|
114
148
|
}
|
|
115
149
|
stripBrackets(name) {
|
|
116
150
|
if (name.startsWith("{")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ExprVisitor.ts"],"names":[],"mappings":"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","file":"ExprVisitor.js","sourcesContent":["import IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"./expression/numeric/NumericLiteralExpr.js\";\nimport {\n AttributeRefContext,\n ExprContext,\n NestedObjectChainEndContext,\n NestedObjectChainInnerContext,\n NumAddSubContext,\n NumAttributeRefContext,\n NumLitContext,\n NumLiteralContext,\n NumMulDivContext,\n NumParensContext,\n ObjectRefContext,\n StringAttributeRefContext,\n StringConcatContext,\n StringLiteralContext,\n} from \"./gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"./expression/Expr.js\";\nimport { isPresent } from \"./IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"./expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"./expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"./expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"./expression/numeric/DivideExpr.js\";\nimport { NumParenthesisExpr } from \"./expression/numeric/NumParenthesisExpr.js\";\nimport { AttributeReferenceExpr } from \"./expression/reference/AttributeReferenceExpr.js\";\nimport { PropObjectReferenceExpr } from \"./expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"./expression/reference/ElemObjectReferenceExpr.js\";\nimport { NestedObjectChainExpr } from \"./expression/reference/NestedObjectChainExpr.js\";\nimport { NestedObjectChainEndExpr } from \"./expression/reference/NestedObjectChainEndExpr.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { StringLiteralExpr } from \"./expression/string/StringLiteralExpr.js\";\nimport { StringConcatExpr } from \"./expression/string/StringConcatExpr.js\";\n\nexport class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {\n constructor() {\n super();\n }\n\n /*================================================\n * AttributeRef\n *==============================================*/\n\n visitAttributeRef: (ctx: AttributeRefContext) => Expr<any> = (ctx) => {\n const objectRefExpr = this.visit(ctx.objectRef());\n const nestedObjectChainExpr = this.visit(ctx.nestedObjectChain());\n return new AttributeReferenceExpr(\n objectRefExpr,\n nestedObjectChainExpr as NestedObjectChainExpr\n );\n };\n\n visitObjectRef: (ctx: ObjectRefContext) => Expr<any> = (ctx) => {\n if (isPresent(ctx.PROP())) {\n return new PropObjectReferenceExpr();\n } else if (isPresent(ctx.ELEM())) {\n return new ElemObjectReferenceExpr();\n }\n this.failNode(ctx);\n };\n\n visitNestedObjectChainInner: (\n ctx: NestedObjectChainInnerContext\n ) => Expr<any> = (ctx) => {\n let name = ctx.namedRef().getChild(0).getText();\n name = this.stripBrackets(name);\n return new NestedObjectChainExpr(\n name,\n this.visit(ctx.nestedObjectChain()) as NestedObjectChainExpr\n );\n };\n\n visitNestedObjectChainEnd: (ctx: NestedObjectChainEndContext) => Expr<any> = (\n ctx\n ) => {\n let name = ctx.RESERVED_ATTRIBUTE_NAME().getText();\n return new NestedObjectChainEndExpr(name);\n };\n\n private stripBrackets(name: string) {\n if (name.startsWith(\"{\")) {\n return name.substring(1, name.length - 1);\n }\n return name;\n }\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return new StringLiteralExpr(new StringValue(text));\n };\n\n visitStringAttributeRef: (ctx: StringAttributeRefContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitStringConcat: (ctx: StringConcatContext) => Expr<any> = (ctx) => {\n return new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right));\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumAttributeRef: (ctx: NumAttributeRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(val.symbol.text))\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(val.symbol.text))\n );\n }\n this.failNode(ctx);\n };\n\n visitNumAddSub: (ctx: NumAddSubContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"+\":\n return new PlusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"-\":\n return new MinusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumMulDiv: (ctx: NumMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"/\":\n return new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumParens: (ctx: NumParensContext) => Expr<any> = (ctx) => {\n return new NumParenthesisExpr(this.visit(ctx.getChild(1)));\n };\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLit: (ctx: NumLitContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n private failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ExprVisitor.ts"],"names":[],"mappings":"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","file":"ExprVisitor.js","sourcesContent":["import IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"./expression/numeric/NumericLiteralExpr.js\";\nimport {\n ArrayContext,\n ArrayElementListContext,\n AttributeRefContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n NestedObjectChainEndContext,\n NestedObjectChainInnerContext,\n NumAddSubContext,\n NumAttributeRefContext,\n NumLitContext,\n NumLiteralContext,\n NumMulDivContext,\n NumParensContext,\n ObjectRefContext,\n StringAttributeRefContext,\n StringConcatContext,\n StringLiteralContext,\n} from \"./gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"./expression/Expr.js\";\nimport { isNullish, isPresent } from \"./IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"./expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"./expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"./expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"./expression/numeric/DivideExpr.js\";\nimport { NumParenthesisExpr } from \"./expression/numeric/NumParenthesisExpr.js\";\nimport { AttributeReferenceExpr } from \"./expression/reference/AttributeReferenceExpr.js\";\nimport { PropObjectReferenceExpr } from \"./expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"./expression/reference/ElemObjectReferenceExpr.js\";\nimport { NestedObjectChainExpr } from \"./expression/reference/NestedObjectChainExpr.js\";\nimport { NestedObjectChainEndExpr } from \"./expression/reference/NestedObjectChainEndExpr.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { StringLiteralExpr } from \"./expression/string/StringLiteralExpr.js\";\nimport { StringConcatExpr } from \"./expression/string/StringConcatExpr.js\";\nimport { ArrayExpr } from \"./expression/structure/ArrayExpr\";\nimport { FunctionExpr } from \"./expression/function/FunctionExpr\";\n\nexport class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {\n constructor() {\n super();\n }\n\n /*================================================\n * AttributeRef\n *==============================================*/\n\n visitAttributeRef: (ctx: AttributeRefContext) => Expr<any> = (ctx) => {\n const objectRefExpr = this.visit(ctx.objectRef());\n const nestedObjectChainExpr = this.visit(ctx.nestedObjectChain());\n return new AttributeReferenceExpr(\n objectRefExpr,\n nestedObjectChainExpr as NestedObjectChainExpr\n );\n };\n\n visitObjectRef: (ctx: ObjectRefContext) => Expr<any> = (ctx) => {\n if (isPresent(ctx.PROP())) {\n return new PropObjectReferenceExpr();\n } else if (isPresent(ctx.ELEM())) {\n return new ElemObjectReferenceExpr();\n }\n this.failNode(ctx);\n };\n\n visitNestedObjectChainInner: (\n ctx: NestedObjectChainInnerContext\n ) => Expr<any> = (ctx) => {\n let name = ctx.namedRef().getChild(0).getText();\n name = this.stripBrackets(name);\n return new NestedObjectChainExpr(\n name,\n this.visit(ctx.nestedObjectChain()) as NestedObjectChainExpr\n );\n };\n\n visitNestedObjectChainEnd: (ctx: NestedObjectChainEndContext) => Expr<any> = (\n ctx\n ) => {\n let name = ctx.RESERVED_ATTRIBUTE_NAME().getText();\n return new NestedObjectChainEndExpr(name);\n };\n\n private stripBrackets(name: string) {\n if (name.startsWith(\"{\")) {\n return name.substring(1, name.length - 1);\n }\n return name;\n }\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return new StringLiteralExpr(new StringValue(text));\n };\n\n visitStringAttributeRef: (ctx: StringAttributeRefContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitStringConcat: (ctx: StringConcatContext) => Expr<any> = (ctx) => {\n return new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right));\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumAttributeRef: (ctx: NumAttributeRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(ctx.getText()))\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return new NumericLiteralExpr(\n new NumericValue(new Decimal(ctx.getText()))\n );\n }\n this.failNode(ctx);\n };\n\n visitNumAddSub: (ctx: NumAddSubContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"+\":\n return new PlusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"-\":\n return new MinusExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumMulDiv: (ctx: NumMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n case \"/\":\n return new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n );\n default:\n this.failNode(ctx);\n }\n };\n\n visitNumParens: (ctx: NumParensContext) => Expr<any> = (ctx) => {\n return new NumParenthesisExpr(this.visit(ctx.getChild(1)));\n };\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n visitNumLit: (ctx: NumLitContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n\n /*================================================\n * ArrayExpr\n *===============================================*/\n\n visitArray: (ctx: ArrayContext) => Expr<any> = (ctx) => {\n return new ArrayExpr(this.collectArrayElements(ctx.arrayElementList()));\n };\n\n collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n const first = this.visit(ctx.expr());\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n const arr = this.collectArrayElements(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n };\n\n /*================================================\n * FuncExpr\n *===============================================*/\n\n visitFunctionCall: (ctx: FunctionCallContext) => Expr<any> = (ctx) => {\n return new FunctionExpr(\n ctx._name.text,\n this.collectFunctionArguments(ctx.exprList())\n );\n };\n\n collectFunctionArguments: (ctx: ExprListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n const first = this.visit(ctx.expr());\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n const arr = this.collectFunctionArguments(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n };\n\n private failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n}\n"]}
|
|
@@ -3,19 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.IfcExpression = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprVisitor = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.
|
|
6
|
+
exports.IfcExpression = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprVisitor = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
|
|
7
7
|
const antlr4_1 = require("antlr4");
|
|
8
8
|
const ExprVisitor_js_1 = require("./ExprVisitor.js");
|
|
9
9
|
Object.defineProperty(exports, "ExprVisitor", { enumerable: true, get: function () { return ExprVisitor_js_1.ExprVisitor; } });
|
|
10
10
|
const IfcExpressionErrorListener_js_1 = require("./IfcExpressionErrorListener.js");
|
|
11
11
|
Object.defineProperty(exports, "IfcExpressionErrorListener", { enumerable: true, get: function () { return IfcExpressionErrorListener_js_1.IfcExpressionErrorListener; } });
|
|
12
12
|
const IfcExpressionUtils_js_1 = require("./IfcExpressionUtils.js");
|
|
13
|
-
Object.defineProperty(exports, "isPresent", { enumerable: true, get: function () { return IfcExpressionUtils_js_1.isPresent; } });
|
|
14
13
|
Object.defineProperty(exports, "isNullish", { enumerable: true, get: function () { return IfcExpressionUtils_js_1.isNullish; } });
|
|
14
|
+
Object.defineProperty(exports, "isPresent", { enumerable: true, get: function () { return IfcExpressionUtils_js_1.isPresent; } });
|
|
15
15
|
const IfcElementAccessor_js_1 = require("./context/IfcElementAccessor.js");
|
|
16
16
|
Object.defineProperty(exports, "IfcElementAccessor", { enumerable: true, get: function () { return IfcElementAccessor_js_1.IfcElementAccessor; } });
|
|
17
|
-
const Value_js_1 = require("./value/Value.js");
|
|
18
|
-
Object.defineProperty(exports, "Value", { enumerable: true, get: function () { return Value_js_1.Value; } });
|
|
19
17
|
const StringValue_js_1 = require("./value/StringValue.js");
|
|
20
18
|
Object.defineProperty(exports, "StringValue", { enumerable: true, get: function () { return StringValue_js_1.StringValue; } });
|
|
21
19
|
const NumericValue_js_1 = require("./value/NumericValue.js");
|
|
@@ -61,7 +59,7 @@ class IfcExpression {
|
|
|
61
59
|
throw errorListener.getException();
|
|
62
60
|
}
|
|
63
61
|
const parsedExpression = this.extractExprTree(tree);
|
|
64
|
-
return parsedExpression.evaluate(context);
|
|
62
|
+
return parsedExpression.evaluate(context, new Map());
|
|
65
63
|
}
|
|
66
64
|
static extractExprTree(tree) {
|
|
67
65
|
const visitor = new ExprVisitor_js_1.ExprVisitor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA6E;AAC7E,qDAA+C;
|
|
1
|
+
{"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA6E;AAC7E,qDAA+C;AA+C7C,4FA/CO,4BAAW,OA+CP;AA9Cb,mFAA6E;AAgD3E,2GAhDO,0DAA0B,OAgDP;AA/C5B,mEAA+D;AAkD7D,0FAlDO,iCAAS,OAkDP;AADT,0FAjDkB,iCAAS,OAiDlB;AA7CX,2EAAqE;AAyBnE,mGAzBO,0CAAkB,OAyBP;AAvBpB,2DAAqD;AA0BnD,4FA1BO,4BAAW,OA0BP;AAzBb,6DAAuD;AA4BrD,6FA5BO,8BAAY,OA4BP;AA3Bd,6DAAuD;AAyBrD,6FAzBO,8BAAY,OAyBP;AAxBd,6DAAuD;AAyBrD,6FAzBO,8BAAY,OAyBP;AAvBd,iEAA2D;AA0BzD,+FA1BO,kCAAc,OA0BP;AAzBhB,mFAA6E;AA0B3E,uGA1BO,kDAAsB,OA0BP;AAzBxB,6EAAuE;AA0BrE,oGA1BO,4CAAmB,OA0BP;AAzBrB,iFAA2E;AA0BzE,sGA1BO,gDAAqB,OA0BP;AAzBvB,iFAA2E;AA0BzE,sGA1BO,gDAAqB,OA0BP;AAzBvB,6EAAuE;AA0BrE,oGA1BO,4CAAmB,OA0BP;AAzBrB,iGAE6C;AAC7C,mGAAwE;AA4BtE,+BA5BK,iCAAoB,CA4BL;AA3BtB,+FAAoE;AAEpE,0GAAoG;AAuBlG,iHAvBO,sEAAgC,OAuBP;AASlC,MAAa,aAAa;IACjB,MAAM,CAAC,KAAK,CACjB,KAAa,EACb,aAAoC;QAEpC,MAAM,KAAK,GAAG,IAAI,mBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,6CAA6C;QAClF,MAAM,KAAK,GAAG,IAAI,+BAAkB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,0BAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,gCAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,IAAA,iCAAS,EAAC,aAAa,CAAC,EAAE;YAC5B,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;SACxC;QACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,QAAQ,CACpB,UAAkB,EAClB,OAA6B;QAE7B,MAAM,aAAa,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACvD,MAAM,IAAI,GAAgB,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzE,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE;YACnC,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;SACpC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,EAAe,CAAC,CAAC;IACpE,CAAC;IAEO,MAAM,CAAC,eAAe,CAC5B,IAAiB;QAEjB,MAAM,OAAO,GAAG,IAAI,4BAAW,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF;AAnCD,sCAmCC","file":"IfcExpression.js","sourcesContent":["import { CharStream, CommonTokenStream, ErrorListener, Token } from \"antlr4\";\nimport { ExprVisitor } from \"./ExprVisitor.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { isNullish, isPresent } from \"./IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { LiteralValue } from \"./value/LiteralValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser, {\n ExprContext,\n} from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { LiteralValueAnyArity } from \"./value/LiteralValueAnyArity.js\";\nimport type { PrimitiveValueType } from \"./value/PrimitiveValueType.js\";\nimport { ExprEvalResult } from \"./expression/ExprEvalResult\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n LiteralValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprVisitor,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n};\n\nexport type { PrimitiveValueType, LiteralValueAnyArity };\n\nexport class IfcExpression {\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token>\n ): ExprContext {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n if (isPresent(errorListener)) {\n parser.removeErrorListeners();\n parser.addErrorListener(errorListener);\n }\n return parser.expr();\n }\n\n public static evaluate(\n expression: string,\n context: IfcExpressionContext\n ): ExprEvalResult<any> {\n const errorListener = new IfcExpressionErrorListener();\n const tree: ExprContext = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n throw errorListener.getException();\n }\n const parsedExpression = this.extractExprTree(tree);\n return parsedExpression.evaluate(context, new Map<string, any>());\n }\n\n private static extractExprTree(\n tree: ExprContext\n ): Expr<LiteralValueAnyArity> {\n const visitor = new ExprVisitor();\n return visitor.visit(tree);\n }\n}\n"]}
|
|
@@ -9,11 +9,11 @@ class IfcElementAccessor extends IfcRootObjectAccessor_js_1.IfcRootObjectAccesso
|
|
|
9
9
|
if (name === "type") {
|
|
10
10
|
return this.getTypeObjectAccessor();
|
|
11
11
|
}
|
|
12
|
-
let val = this.
|
|
12
|
+
let val = this.getIfcPropertySetAccessor(name);
|
|
13
13
|
if ((0, IfcExpressionUtils_js_1.isPresent)(val)) {
|
|
14
14
|
return val;
|
|
15
15
|
}
|
|
16
|
-
return this.
|
|
16
|
+
return this.getIfcPropertyAccessor(name);
|
|
17
17
|
}
|
|
18
18
|
getAttribute(name) {
|
|
19
19
|
switch (name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/context/IfcElementAccessor.ts"],"names":[],"mappings":";;;AACA,yEAAmE;AAInE,4DAAsD;AACtD,oEAAqD;AAGrD,MAAsB,kBAAmB,SAAQ,gDAAqB;IACpE,uBAAuB,CAAC,IAAY;QAClC,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACrC;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../src/context/IfcElementAccessor.ts"],"names":[],"mappings":";;;AACA,yEAAmE;AAInE,4DAAsD;AACtD,oEAAqD;AAGrD,MAAsB,kBAAmB,SAAQ,gDAAqB;IACpE,uBAAuB,CAAC,IAAY;QAClC,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACrC;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,IAAA,iCAAS,EAAC,GAAG,CAAC,EAAE;YAClB,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,QAAQ,IAAI,EAAE;YACZ,KAAK,UAAU;gBACb,OAAO,IAAI,4BAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C;gBACE,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACnC;IACH,CAAC;IAID,iBAAiB;QACf,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,CAAC;CAcF;AA3CD,gDA2CC","file":"context/IfcElementAccessor.js","sourcesContent":["import { ObjectAccessor } from \"./ObjectAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./IfcTypeObjectAccessor.js\";\nimport { IfcPropertyAccessor } from \"./IfcPropertyAccessor.js\";\nimport { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity.js\";\nimport { StringValue } from \"../value/StringValue.js\";\nimport { isPresent } from \"../IfcExpressionUtils.js\";\nimport { IfcPropertySetAccessor } from \"./IfcPropertySetAccessor.js\";\n\nexport abstract class IfcElementAccessor extends IfcRootObjectAccessor {\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined {\n if (name === \"type\") {\n return this.getTypeObjectAccessor();\n }\n let val = this.getIfcPropertySetAccessor(name);\n if (isPresent(val)) {\n return val;\n }\n return this.getIfcPropertyAccessor(name);\n }\n\n getAttribute(name: string): LiteralValueAnyArity | undefined {\n switch (name) {\n case \"ifcClass\":\n return new StringValue(this.getIfcClass());\n default:\n return super.getAttribute(name);\n }\n }\n\n abstract getIfcClass(): string;\n\n listNestedObjects(): Array<string> {\n return [\"type\", ...this.listIfcProperties(), ...this.listIfcPropertySets()];\n }\n\n listAttributes(): Array<string> {\n return [\"ifcClass\", ...super.listAttributes()];\n }\n\n abstract listIfcProperties(): Array<string>;\n\n abstract listIfcPropertySets(): Array<string>;\n\n abstract getTypeObjectAccessor(): IfcTypeObjectAccessor | undefined;\n abstract getIfcPropertyAccessor(\n propertyName: string\n ): IfcPropertyAccessor | undefined;\n\n abstract getIfcPropertySetAccessor(\n name: string\n ): IfcPropertySetAccessor | undefined;\n}\n"]}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isObjectAccessor = void 0;
|
|
4
|
+
function isObjectAccessor(arg) {
|
|
5
|
+
return (typeof arg === "object" &&
|
|
6
|
+
typeof arg.getNestedObjectAccessor === "function" &&
|
|
7
|
+
typeof arg.getAttribute === "function" &&
|
|
8
|
+
typeof arg.listNestedObjects === "function" &&
|
|
9
|
+
typeof arg.listAttributes === "function");
|
|
10
|
+
}
|
|
11
|
+
exports.isObjectAccessor = isObjectAccessor;
|
|
3
12
|
//# sourceMappingURL=ObjectAccessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/context/ObjectAccessor.ts"],"names":[],"mappings":"","file":"context/ObjectAccessor.js","sourcesContent":["import { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity.js\";\n\nexport interface ObjectAccessor {\n /**\n * If there is a nested object with the specified name (.e.g the 'pset' in $prop.pset),\n * return an ObjectAccessor for it.\n * @param name\n */\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined;\n\n /**\n * If the object has the attribute of the specified name, return it as (an array of (array of)) LiteralValue.\n * @param name\n */\n getAttribute(name: string): LiteralValueAnyArity | undefined;\n\n listNestedObjects(): Array<string>;\n\n listAttributes(): Array<string>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/context/ObjectAccessor.ts"],"names":[],"mappings":";;;AAqBA,SAAgB,gBAAgB,CAAC,GAAQ;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,CAAC,uBAAuB,KAAK,UAAU;QACjD,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU;QACtC,OAAO,GAAG,CAAC,iBAAiB,KAAK,UAAU;QAC3C,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,CACzC,CAAC;AACJ,CAAC;AARD,4CAQC","file":"context/ObjectAccessor.js","sourcesContent":["import { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity.js\";\n\nexport interface ObjectAccessor {\n /**\n * If there is a nested object with the specified name (.e.g the 'pset' in $prop.pset),\n * return an ObjectAccessor for it.\n * @param name\n */\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined;\n\n /**\n * If the object has the attribute of the specified name, return it as (an array of (array of)) LiteralValue.\n * @param name\n */\n getAttribute(name: string): LiteralValueAnyArity | undefined;\n\n listNestedObjects(): Array<string>;\n\n listAttributes(): Array<string>;\n}\n\nexport function isObjectAccessor(arg: any): arg is ObjectAccessor {\n return (\n typeof arg === \"object\" &&\n typeof arg.getNestedObjectAccessor === \"function\" &&\n typeof arg.getAttribute === \"function\" &&\n typeof arg.listNestedObjects === \"function\" &&\n typeof arg.listAttributes === \"function\"\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/Expr.ts"],"names":[],"mappings":"","file":"expression/Expr.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\n\nexport interface Expr<T> {\n evaluate(ctx: IfcExpressionContext): T;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/expression/Expr.ts"],"names":[],"mappings":"","file":"expression/Expr.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport { ExprEvalResult } from \"./ExprEvalResult\";\n\nexport interface Expr<T> {\n evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<T>;\n getKind(): ExprKind;\n}\n"]}
|
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Expr0 = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const ExprBase_1 = require("./ExprBase");
|
|
5
|
+
const ExprEvalResult_1 = require("./ExprEvalResult");
|
|
6
|
+
class Expr0 extends ExprBase_1.ExprBase {
|
|
7
|
+
constructor(kind) {
|
|
8
|
+
super(kind);
|
|
9
|
+
}
|
|
10
|
+
evaluate(ctx, localCtx) {
|
|
11
|
+
try {
|
|
12
|
+
const result = this.doEvaluate(ctx, localCtx);
|
|
13
|
+
return this.wrapInResultIfNecessary(result);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return this.handleError(error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
handleError(error) {
|
|
20
|
+
return new ExprEvalResult_1.ExprEvalErrorObj(this.getKind(), ExprEvalResult_1.ExprEvalStatus.ERROR, error);
|
|
21
|
+
}
|
|
6
22
|
}
|
|
7
23
|
exports.Expr0 = Expr0;
|
|
8
24
|
//# sourceMappingURL=Expr0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/Expr0.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/Expr0.ts"],"names":[],"mappings":";;;AAEA,yCAAsC;AACtC,qDAK0B;AAE1B,MAAsB,KAAS,SAAQ,mBAAW;IAChD,YAAsB,IAAc;QAClC,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAOM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;IACH,CAAC;IAES,WAAW,CAAC,KAAU;QAC9B,OAAO,IAAI,iCAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,+BAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF;AAzBD,sBAyBC","file":"expression/Expr0.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport { ExprBase } from \"./ExprBase\";\nimport {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"./ExprEvalResult\";\n\nexport abstract class Expr0<E> extends ExprBase<E> {\n protected constructor(kind: ExprKind) {\n super(kind);\n }\n\n protected abstract doEvaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): E | ExprEvalError;\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n try {\n const result = this.doEvaluate(ctx, localCtx);\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n protected handleError(error: any): ExprEvalError {\n return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.ERROR, error);\n }\n}\n"]}
|
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Expr1 = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const ExprEvalResult_1 = require("./ExprEvalResult");
|
|
5
|
+
const ExprBase_1 = require("./ExprBase");
|
|
6
|
+
const IfcExpressionUtils_1 = require("../IfcExpressionUtils");
|
|
7
|
+
class Expr1 extends ExprBase_1.ExprBase {
|
|
8
|
+
constructor(exprKind, value) {
|
|
9
|
+
super(exprKind);
|
|
6
10
|
this.value = value;
|
|
7
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Override to generate a more specific error result.
|
|
14
|
+
* @param ctx
|
|
15
|
+
* @param localCtx
|
|
16
|
+
* @param subExpressionResult
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
obtainResultForSubExpressionError(ctx, localCtx, subExpressionResult) {
|
|
20
|
+
return new ExprEvalResult_1.ExprEvalConsequentialError1Obj(this.getKind(), subExpressionResult);
|
|
21
|
+
}
|
|
22
|
+
// calculate the final result
|
|
23
|
+
makeErrorOrCalculate(ctx, localCtx, subExpressionResult) {
|
|
24
|
+
if ((0, ExprEvalResult_1.isExprEvalError)(subExpressionResult)) {
|
|
25
|
+
return this.obtainResultForSubExpressionError(ctx, localCtx, subExpressionResult);
|
|
26
|
+
}
|
|
27
|
+
return this.wrapInResultIfNecessary(this.calculateResult(ctx, localCtx, subExpressionResult.result));
|
|
28
|
+
}
|
|
29
|
+
onBeforeRecusion(ctx, localCtx) {
|
|
30
|
+
// do something before we calculate the subresult
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
evaluate(ctx, localCtx) {
|
|
34
|
+
const beforeRecursionError = this.onBeforeRecusion(ctx, localCtx);
|
|
35
|
+
if (!(0, IfcExpressionUtils_1.isNullish)(beforeRecursionError)) {
|
|
36
|
+
return beforeRecursionError;
|
|
37
|
+
}
|
|
38
|
+
const subResult = this.value.evaluate(ctx, localCtx);
|
|
39
|
+
if ((0, IfcExpressionUtils_1.isNullish)(subResult)) {
|
|
40
|
+
return new ExprEvalResult_1.ExprEvalError1Obj(this.getKind(), new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.value.getKind()), ExprEvalResult_1.ExprEvalStatus.MISSING_OPERAND);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return this.makeErrorOrCalculate(ctx, localCtx, subResult);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return this.handleError(error, subResult);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
handleError(error, subResult) {
|
|
50
|
+
return new ExprEvalResult_1.ExprEvalError1Obj(this.getKind(), subResult, ExprEvalResult_1.ExprEvalStatus.ERROR, error);
|
|
51
|
+
}
|
|
8
52
|
}
|
|
9
53
|
exports.Expr1 = Expr1;
|
|
10
54
|
//# sourceMappingURL=Expr1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/Expr1.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/Expr1.ts"],"names":[],"mappings":";;;AAEA,qDAQ0B;AAC1B,yCAAsC;AAEtC,8DAAkD;AAElD,MAAsB,KAAY,SAAQ,mBAAW;IAGnD,YAAsB,QAAkB,EAAE,KAAc;QACtD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAQD;;;;;;OAMG;IACO,iCAAiC,CACzC,GAAyB,EACzB,QAA0B,EAC1B,mBAAkC;QAElC,OAAO,IAAI,+CAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,6BAA6B;IACrB,oBAAoB,CAC1B,GAAyB,EACzB,QAA0B,EAC1B,mBAAsC;QAEtC,IAAI,IAAA,gCAAe,EAAC,mBAAmB,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,iCAAiC,CAC3C,GAAG,EACH,QAAQ,EACR,mBAAmB,CACpB,CAAC;SACH;QACD,OAAO,IAAI,CAAC,uBAAuB,CACjC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAChE,CAAC;IACJ,CAAC;IAES,gBAAgB,CACxB,GAAyB,EACzB,QAA0B;QAE1B,iDAAiD;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,IAAA,8BAAS,EAAC,oBAAoB,CAAC,EAAE;YACpC,OAAO,oBAAoB,CAAC;SAC7B;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,IAAA,8BAAS,EAAC,SAAS,CAAC,EAAE;YACxB,OAAO,IAAI,kCAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,6CAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACtD,+BAAc,CAAC,eAAe,CAC/B,CAAC;SACH;QACD,IAAI;YACF,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SAC3C;IACH,CAAC;IAES,WAAW,CACnB,KAAU,EACV,SAA4B;QAE5B,OAAO,IAAI,kCAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,SAAS,EACT,+BAAc,CAAC,KAAK,EACpB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AA5FD,sBA4FC","file":"expression/Expr1.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError1Obj,\n ExprEvalError,\n ExprEvalError1Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalError,\n} from \"./ExprEvalResult\";\nimport { ExprBase } from \"./ExprBase\";\nimport { Expr } from \"./Expr\";\nimport { isNullish } from \"../IfcExpressionUtils\";\n\nexport abstract class Expr1<V, E> extends ExprBase<E> {\n readonly value: Expr<V>;\n\n protected constructor(exprKind: ExprKind, value: Expr<V>) {\n super(exprKind);\n this.value = value;\n }\n\n protected abstract calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: V\n ): E | ExprEvalError;\n\n /**\n * Override to generate a more specific error result.\n * @param ctx\n * @param localCtx\n * @param subExpressionResult\n * @protected\n */\n protected obtainResultForSubExpressionError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: ExprEvalError\n ): ExprEvalResult<E> {\n return new ExprEvalConsequentialError1Obj(\n this.getKind(),\n subExpressionResult\n );\n }\n\n // calculate the final result\n private makeErrorOrCalculate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: ExprEvalResult<V>\n ): ExprEvalResult<E> {\n if (isExprEvalError(subExpressionResult)) {\n return this.obtainResultForSubExpressionError(\n ctx,\n localCtx,\n subExpressionResult\n );\n }\n return this.wrapInResultIfNecessary(\n this.calculateResult(ctx, localCtx, subExpressionResult.result)\n );\n }\n\n protected onBeforeRecusion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): undefined | ExprEvalError {\n // do something before we calculate the subresult\n return undefined;\n }\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n const beforeRecursionError = this.onBeforeRecusion(ctx, localCtx);\n if (!isNullish(beforeRecursionError)) {\n return beforeRecursionError;\n }\n const subResult = this.value.evaluate(ctx, localCtx);\n if (isNullish(subResult)) {\n return new ExprEvalError1Obj(\n this.getKind(),\n new ExprEvalErrorUndefinedResult(this.value.getKind()),\n ExprEvalStatus.MISSING_OPERAND\n );\n }\n try {\n return this.makeErrorOrCalculate(ctx, localCtx, subResult);\n } catch (error) {\n return this.handleError(error, subResult);\n }\n }\n\n protected handleError(\n error: any,\n subResult: ExprEvalResult<V>\n ): ExprEvalError {\n return new ExprEvalError1Obj(\n this.getKind(),\n subResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
|
|
@@ -1,11 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Expr2 = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const ExprBase_1 = require("./ExprBase");
|
|
5
|
+
const ExprEvalResult_1 = require("./ExprEvalResult");
|
|
6
|
+
const IfcExpressionUtils_1 = require("../IfcExpressionUtils");
|
|
7
|
+
class Expr2 extends ExprBase_1.ExprBase {
|
|
8
|
+
constructor(exprKind, left, right) {
|
|
9
|
+
super(exprKind);
|
|
6
10
|
this.left = left;
|
|
7
11
|
this.right = right;
|
|
8
12
|
}
|
|
13
|
+
onBeforeRecursion(ctx, localCtx) {
|
|
14
|
+
// override if subclass needs to do something before recursing
|
|
15
|
+
}
|
|
16
|
+
onAfterLeftRecursion(ctx, localCtx, leftResult) {
|
|
17
|
+
// override if subclass needs to do something with the left result, such as put it in the local context
|
|
18
|
+
}
|
|
19
|
+
evaluate(ctx, localCtx) {
|
|
20
|
+
this.onBeforeRecursion(ctx, localCtx);
|
|
21
|
+
const leftResult = this.left.evaluate(ctx, localCtx);
|
|
22
|
+
if ((0, IfcExpressionUtils_1.isNullish)(leftResult)) {
|
|
23
|
+
return new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.left.getKind());
|
|
24
|
+
}
|
|
25
|
+
if ((0, ExprEvalResult_1.isExprEvalError)(leftResult)) {
|
|
26
|
+
return this.makeErrorForLeftSubExprError(ctx, localCtx, leftResult);
|
|
27
|
+
}
|
|
28
|
+
this.onAfterLeftRecursion(ctx, localCtx, leftResult.result);
|
|
29
|
+
const rightResult = this.right.evaluate(ctx, localCtx);
|
|
30
|
+
if ((0, IfcExpressionUtils_1.isNullish)(rightResult)) {
|
|
31
|
+
return new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.right.getKind());
|
|
32
|
+
}
|
|
33
|
+
if ((0, ExprEvalResult_1.isExprEvalSuccess)(rightResult)) {
|
|
34
|
+
try {
|
|
35
|
+
const result = this.calculateResult(ctx, localCtx, leftResult.result, rightResult.result);
|
|
36
|
+
return this.wrapInResultIfNecessary(result);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return this.handleError(error, leftResult, rightResult);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return this.makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult) {
|
|
47
|
+
return new ExprEvalResult_1.ExprEvalConsequentialError2Obj(this.getKind(), leftResult, rightResult);
|
|
48
|
+
}
|
|
49
|
+
makeErrorForLeftSubExprError(ctx, localCtx, leftResult) {
|
|
50
|
+
return new ExprEvalResult_1.ExprEvalConsequentialError1Obj(this.getKind(), leftResult, "Cannot evaluate attribute reference");
|
|
51
|
+
}
|
|
52
|
+
handleError(error, leftResult, rightResult) {
|
|
53
|
+
return new ExprEvalResult_1.ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalResult_1.ExprEvalStatus.ERROR, error);
|
|
54
|
+
}
|
|
9
55
|
}
|
|
10
56
|
exports.Expr2 = Expr2;
|
|
11
57
|
//# sourceMappingURL=Expr2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/Expr2.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/Expr2.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAEtC,qDAU0B;AAC1B,8DAAkD;AAGlD,MAAsB,KAAe,SAAQ,mBAAW;IAItD,YAAsB,QAAkB,EAAE,IAAa,EAAE,KAAc;QACrE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IASS,iBAAiB,CACzB,GAAyB,EACzB,QAA0B;QAE1B,8DAA8D;IAChE,CAAC;IAES,oBAAoB,CAC5B,GAAyB,EACzB,QAA0B,EAC1B,UAAa;QAEb,uGAAuG;IACzG,CAAC;IAEM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,IAAA,8BAAS,EAAC,UAAU,CAAC,EAAE;YACzB,OAAO,IAAI,6CAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC9D;QACD,IAAI,IAAA,gCAAe,EAAC,UAAU,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;SACrE;QACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAA,8BAAS,EAAC,WAAW,CAAC,EAAE;YAC1B,OAAO,IAAI,6CAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SAC/D;QACD,IAAI,IAAA,kCAAiB,EAAC,WAAW,CAAC,EAAE;YAClC,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CACjC,GAAG,EACH,QAAQ,EACR,UAAU,CAAC,MAAM,EACjB,WAAW,CAAC,MAAM,CACnB,CAAC;gBACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;aAC7C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aACzD;SACF;aAAM;YACL,OAAO,IAAI,CAAC,8BAA8B,CACxC,GAAG,EACH,QAAQ,EACR,UAAU,EACV,WAAW,CACZ,CAAC;SACH;IACH,CAAC;IAES,8BAA8B,CACtC,GAAyB,EACzB,QAA0B,EAC1B,UAA6B,EAC7B,WAA0B;QAE1B,OAAO,IAAI,+CAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,CACZ,CAAC;IACJ,CAAC;IAES,4BAA4B,CACpC,GAAyB,EACzB,QAA0B,EAC1B,UAAyB;QAEzB,OAAO,IAAI,+CAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,qCAAqC,CACtC,CAAC;IACJ,CAAC;IAES,WAAW,CACnB,KAAU,EACV,UAA6B,EAC7B,WAA8B;QAE9B,OAAO,IAAI,kCAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,EACX,+BAAc,CAAC,KAAK,EACpB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AA7GD,sBA6GC","file":"expression/Expr2.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprBase } from \"./ExprBase\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError1Obj,\n ExprEvalConsequentialError2Obj,\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./ExprEvalResult\";\nimport { isNullish } from \"../IfcExpressionUtils\";\nimport { Expr } from \"./Expr\";\n\nexport abstract class Expr2<L, R, E> extends ExprBase<E> {\n readonly left: Expr<L>;\n readonly right: Expr<R>;\n\n protected constructor(exprKind: ExprKind, left: Expr<L>, right: Expr<R>) {\n super(exprKind);\n this.left = left;\n this.right = right;\n }\n\n protected abstract calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftOperand: L,\n rightOperand: R\n ): E | ExprEvalError;\n\n protected onBeforeRecursion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ) {\n // override if subclass needs to do something before recursing\n }\n\n protected onAfterLeftRecursion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: L\n ) {\n // override if subclass needs to do something with the left result, such as put it in the local context\n }\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n this.onBeforeRecursion(ctx, localCtx);\n const leftResult = this.left.evaluate(ctx, localCtx);\n if (isNullish(leftResult)) {\n return new ExprEvalErrorUndefinedResult(this.left.getKind());\n }\n if (isExprEvalError(leftResult)) {\n return this.makeErrorForLeftSubExprError(ctx, localCtx, leftResult);\n }\n this.onAfterLeftRecursion(ctx, localCtx, leftResult.result);\n const rightResult = this.right.evaluate(ctx, localCtx);\n if (isNullish(rightResult)) {\n return new ExprEvalErrorUndefinedResult(this.right.getKind());\n }\n if (isExprEvalSuccess(rightResult)) {\n try {\n const result = this.calculateResult(\n ctx,\n localCtx,\n leftResult.result,\n rightResult.result\n );\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error, leftResult, rightResult);\n }\n } else {\n return this.makeResultForRightSubExprError(\n ctx,\n localCtx,\n leftResult,\n rightResult\n );\n }\n }\n\n protected makeResultForRightSubExprError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalError\n ): ExprEvalResult<E> {\n return new ExprEvalConsequentialError2Obj(\n this.getKind(),\n leftResult,\n rightResult\n );\n }\n\n protected makeErrorForLeftSubExprError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ExprEvalError\n ): ExprEvalError {\n return new ExprEvalConsequentialError1Obj(\n this.getKind(),\n leftResult,\n \"Cannot evaluate attribute reference\"\n );\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalResult<R>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n this.getKind(),\n leftResult,\n rightResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Expr2LeftBeforeRight = void 0;
|
|
4
|
+
const ExprBase_1 = require("./ExprBase");
|
|
5
|
+
const ExprEvalResult_1 = require("./ExprEvalResult");
|
|
6
|
+
const IfcExpressionUtils_1 = require("../IfcExpressionUtils");
|
|
7
|
+
class Expr2LeftBeforeRight extends ExprBase_1.ExprBase {
|
|
8
|
+
constructor(exprKind, left, right) {
|
|
9
|
+
super(exprKind);
|
|
10
|
+
this.left = left;
|
|
11
|
+
this.right = right;
|
|
12
|
+
}
|
|
13
|
+
evaluate(ctx, localCtx) {
|
|
14
|
+
const leftResult = this.left.evaluate(ctx, localCtx);
|
|
15
|
+
if ((0, IfcExpressionUtils_1.isNullish)(leftResult)) {
|
|
16
|
+
return new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.left.getKind());
|
|
17
|
+
}
|
|
18
|
+
this.handleLeftResult(leftResult);
|
|
19
|
+
const rightResult = this.right.evaluate(ctx, localCtx);
|
|
20
|
+
if ((0, IfcExpressionUtils_1.isNullish)(leftResult) || (0, IfcExpressionUtils_1.isNullish)(rightResult)) {
|
|
21
|
+
return new ExprEvalResult_1.ExprEvalError2Obj(this.getKind(), (0, IfcExpressionUtils_1.isNullish)(leftResult)
|
|
22
|
+
? new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.left.getKind())
|
|
23
|
+
: leftResult, (0, IfcExpressionUtils_1.isNullish)(rightResult)
|
|
24
|
+
? new ExprEvalResult_1.ExprEvalErrorUndefinedResult(this.right.getKind())
|
|
25
|
+
: rightResult, ExprEvalResult_1.ExprEvalStatus.MISSING_OPERAND);
|
|
26
|
+
}
|
|
27
|
+
if ((0, ExprEvalResult_1.isExprEvalSuccess)(leftResult) && (0, ExprEvalResult_1.isExprEvalSuccess)(rightResult)) {
|
|
28
|
+
try {
|
|
29
|
+
const result = this.doEvaluate(ctx, leftResult.result, rightResult.result);
|
|
30
|
+
return this.wrapInResultIfNecessary(result);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return this.handleError(error, leftResult, rightResult);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return new ExprEvalResult_1.ExprEvalConsequentialError2Obj(this.getKind(), leftResult, rightResult);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
handleError(error, leftResult, rightResult) {
|
|
41
|
+
return new ExprEvalResult_1.ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalResult_1.ExprEvalStatus.ERROR, error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.Expr2LeftBeforeRight = Expr2LeftBeforeRight;
|
|
45
|
+
//# sourceMappingURL=Expr2LeftBeforeRight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/Expr2LeftBeforeRight.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAEtC,qDAQ0B;AAC1B,8DAAkD;AAGlD,MAAsB,oBAA8B,SAAQ,mBAAW;IAIrE,YAAsB,QAAkB,EAAE,IAAa,EAAE,KAAc;QACrE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAUM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,IAAA,8BAAS,EAAC,UAAU,CAAC,EAAE;YACzB,OAAO,IAAI,6CAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAA,8BAAS,EAAC,UAAU,CAAC,IAAI,IAAA,8BAAS,EAAC,WAAW,CAAC,EAAE;YACnD,OAAO,IAAI,kCAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,IAAA,8BAAS,EAAC,UAAU,CAAC;gBACnB,CAAC,CAAC,IAAI,6CAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvD,CAAC,CAAC,UAAU,EACd,IAAA,8BAAS,EAAC,WAAW,CAAC;gBACpB,CAAC,CAAC,IAAI,6CAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxD,CAAC,CAAC,WAAW,EACf,+BAAc,CAAC,eAAe,CAC/B,CAAC;SACH;QACD,IAAI,IAAA,kCAAiB,EAAC,UAAU,CAAC,IAAI,IAAA,kCAAiB,EAAC,WAAW,CAAC,EAAE;YACnE,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAC5B,GAAG,EACH,UAAU,CAAC,MAAM,EACjB,WAAW,CAAC,MAAM,CACnB,CAAC;gBACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;aAC7C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aACzD;SACF;aAAM;YACL,OAAO,IAAI,+CAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,CACZ,CAAC;SACH;IACH,CAAC;IAES,WAAW,CACnB,KAAU,EACV,UAA6B,EAC7B,WAA8B;QAE9B,OAAO,IAAI,kCAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,EACX,+BAAc,CAAC,KAAK,EACpB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AAzED,oDAyEC","file":"expression/Expr2LeftBeforeRight.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprBase } from \"./ExprBase\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError2Obj,\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalSuccess,\n} from \"./ExprEvalResult\";\nimport { isNullish } from \"../IfcExpressionUtils\";\nimport { Expr } from \"./Expr\";\n\nexport abstract class Expr2LeftBeforeRight<L, R, E> extends ExprBase<E> {\n readonly left: Expr<L>;\n readonly right: Expr<R>;\n\n protected constructor(exprKind: ExprKind, left: Expr<L>, right: Expr<R>) {\n super(exprKind);\n this.left = left;\n this.right = right;\n }\n\n protected abstract doEvaluate(\n ctx: IfcExpressionContext,\n leftOperand: L,\n rightOperand: R\n ): E | ExprEvalError;\n\n protected abstract handleLeftResult(leftResult: ExprEvalResult<L>);\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n const leftResult = this.left.evaluate(ctx, localCtx);\n if (isNullish(leftResult)) {\n return new ExprEvalErrorUndefinedResult(this.left.getKind());\n }\n this.handleLeftResult(leftResult);\n const rightResult = this.right.evaluate(ctx, localCtx);\n if (isNullish(leftResult) || isNullish(rightResult)) {\n return new ExprEvalError2Obj(\n this.getKind(),\n isNullish(leftResult)\n ? new ExprEvalErrorUndefinedResult(this.left.getKind())\n : leftResult,\n isNullish(rightResult)\n ? new ExprEvalErrorUndefinedResult(this.right.getKind())\n : rightResult,\n ExprEvalStatus.MISSING_OPERAND\n );\n }\n if (isExprEvalSuccess(leftResult) && isExprEvalSuccess(rightResult)) {\n try {\n const result = this.doEvaluate(\n ctx,\n leftResult.result,\n rightResult.result\n );\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error, leftResult, rightResult);\n }\n } else {\n return new ExprEvalConsequentialError2Obj(\n this.getKind(),\n leftResult,\n rightResult\n );\n }\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalResult<R>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n this.getKind(),\n leftResult,\n rightResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExprBase = void 0;
|
|
4
|
+
const ExprEvalResult_1 = require("./ExprEvalResult");
|
|
5
|
+
class ExprBase {
|
|
6
|
+
constructor(exprKind) {
|
|
7
|
+
this.exprKind = exprKind;
|
|
8
|
+
}
|
|
9
|
+
getKind() {
|
|
10
|
+
return this.exprKind;
|
|
11
|
+
}
|
|
12
|
+
wrapInResultIfNecessary(result) {
|
|
13
|
+
if ((0, ExprEvalResult_1.isExprEvalError)(result)) {
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
return new ExprEvalResult_1.ExprEvalSuccessObj(result);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ExprBase = ExprBase;
|
|
20
|
+
//# sourceMappingURL=ExprBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/ExprBase.ts"],"names":[],"mappings":";;;AAEA,qDAK0B;AAG1B,MAAsB,QAAQ;IAG5B,YAAY,QAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAOD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAES,uBAAuB,CAC/B,MAAyB;QAEzB,IAAI,IAAA,gCAAe,EAAC,MAAM,CAAC,EAAE;YAC3B,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,mCAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;CACF;AAxBD,4BAwBC","file":"expression/ExprBase.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"./ExprEvalResult\";\nimport { ExprKind } from \"./ExprKind\";\n\nexport abstract class ExprBase<T> implements Expr<T> {\n private readonly exprKind: ExprKind;\n\n constructor(exprKind: ExprKind) {\n this.exprKind = exprKind;\n }\n\n abstract evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<T>;\n\n getKind(): ExprKind {\n return this.exprKind;\n }\n\n protected wrapInResultIfNecessary(\n result: T | ExprEvalError\n ): ExprEvalResult<T> {\n if (isExprEvalError(result)) {\n return result;\n }\n return new ExprEvalSuccessObj(result);\n }\n}\n"]}
|