ifc-expressions 0.3.0 → 0.3.2
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/IfcExpression.d.ts +1 -1
- package/dist/cjs/ExprVisitor.js +4 -4
- package/dist/cjs/ExprVisitor.js.map +1 -1
- package/dist/cjs/IfcExpression.js.map +1 -1
- package/dist/cjs/expression/Expr.js.map +1 -1
- package/dist/cjs/expression/Expr0.js +4 -4
- package/dist/cjs/expression/Expr0.js.map +1 -1
- package/dist/cjs/expression/Expr1.js +10 -10
- package/dist/cjs/expression/Expr1.js.map +1 -1
- package/dist/cjs/expression/Expr2.js +13 -13
- package/dist/cjs/expression/Expr2.js.map +1 -1
- package/dist/cjs/expression/Expr2LeftBeforeRight.js +15 -15
- package/dist/cjs/expression/Expr2LeftBeforeRight.js.map +1 -1
- package/dist/cjs/expression/ExprBase.js +3 -3
- package/dist/cjs/expression/ExprBase.js.map +1 -1
- package/dist/cjs/expression/ExprEvalResult.js +2 -2
- package/dist/cjs/expression/ExprEvalResult.js.map +1 -1
- package/dist/cjs/expression/LiteralExpr.js +4 -4
- package/dist/cjs/expression/LiteralExpr.js.map +1 -1
- package/dist/cjs/expression/function/Func.js +15 -15
- package/dist/cjs/expression/function/Func.js.map +1 -1
- package/dist/cjs/expression/function/FuncArg.js +2 -2
- package/dist/cjs/expression/function/FuncArg.js.map +1 -1
- package/dist/cjs/expression/function/FunctionExpr.js +11 -11
- package/dist/cjs/expression/function/FunctionExpr.js.map +1 -1
- package/dist/cjs/expression/function/IfcExpressionFunctions.js +9 -9
- package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/cjs/expression/function/arg/FuncArgBase.js +4 -4
- package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -1
- package/dist/cjs/expression/function/arg/FuncArgInt.js +8 -8
- package/dist/cjs/expression/function/arg/FuncArgInt.js.map +1 -1
- package/dist/cjs/expression/function/arg/FuncArgNumeric.js +5 -5
- package/dist/cjs/expression/function/arg/FuncArgNumeric.js.map +1 -1
- package/dist/cjs/expression/function/impl/MAP.js +15 -15
- package/dist/cjs/expression/function/impl/MAP.js.map +1 -1
- package/dist/cjs/expression/function/impl/ROUND.js +9 -9
- package/dist/cjs/expression/function/impl/ROUND.js.map +1 -1
- package/dist/cjs/expression/numeric/DivideExpr.js +4 -4
- package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/MinusExpr.js +2 -2
- package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/MultiplyExpr.js +2 -2
- package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js +2 -2
- package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js +4 -4
- package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
- package/dist/cjs/expression/numeric/PlusExpr.js +2 -2
- package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -1
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js +9 -9
- package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +2 -2
- package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +13 -13
- package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js +18 -18
- package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +2 -2
- package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
- package/dist/cjs/expression/string/StringConcatExpr.js +2 -2
- package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -1
- package/dist/cjs/expression/string/StringLiteralExpr.js +4 -4
- package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -1
- package/dist/cjs/expression/structure/ArrayExpr.js +9 -9
- package/dist/cjs/expression/structure/ArrayExpr.js.map +1 -1
- package/dist/cjs/value/ArrayValue.js.map +1 -1
- package/dist/cjs/value/LiteralValue.js.map +1 -1
- package/dist/expression/Expr.d.ts +2 -2
- package/dist/expression/Expr0.d.ts +3 -3
- package/dist/expression/Expr1.d.ts +4 -4
- package/dist/expression/Expr2.d.ts +4 -4
- package/dist/expression/Expr2LeftBeforeRight.d.ts +4 -4
- package/dist/expression/ExprBase.d.ts +4 -4
- package/dist/expression/ExprEvalResult.d.ts +2 -2
- package/dist/expression/LiteralExpr.d.ts +3 -3
- package/dist/expression/function/Func.d.ts +3 -3
- package/dist/expression/function/FuncArg.d.ts +2 -2
- package/dist/expression/function/FunctionExpr.d.ts +6 -6
- package/dist/expression/function/IfcExpressionFunctions.d.ts +3 -3
- package/dist/expression/function/arg/FuncArgBase.d.ts +3 -3
- package/dist/expression/function/arg/FuncArgInt.d.ts +4 -4
- package/dist/expression/function/arg/FuncArgNumeric.d.ts +4 -4
- package/dist/expression/function/impl/MAP.d.ts +3 -3
- package/dist/expression/function/impl/ROUND.d.ts +3 -3
- package/dist/expression/numeric/DivideExpr.d.ts +1 -1
- package/dist/expression/numeric/MinusExpr.d.ts +1 -1
- package/dist/expression/numeric/MultiplyExpr.d.ts +1 -1
- package/dist/expression/numeric/NumericLiteralExpr.d.ts +2 -2
- package/dist/expression/reference/AttributeReferenceExpr.d.ts +2 -2
- package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +2 -2
- package/dist/expression/reference/NestedObjectChainExpr.d.ts +2 -2
- package/dist/expression/string/StringLiteralExpr.d.ts +1 -1
- package/dist/expression/structure/ArrayExpr.d.ts +6 -6
- package/dist/mjs/ExprVisitor.js +2 -2
- package/dist/mjs/ExprVisitor.js.map +1 -1
- package/dist/mjs/IfcExpression.js.map +1 -1
- package/dist/mjs/expression/Expr.js.map +1 -1
- package/dist/mjs/expression/Expr0.js +2 -2
- package/dist/mjs/expression/Expr0.js.map +1 -1
- package/dist/mjs/expression/Expr1.js +3 -3
- package/dist/mjs/expression/Expr1.js.map +1 -1
- package/dist/mjs/expression/Expr2.js +3 -3
- package/dist/mjs/expression/Expr2.js.map +1 -1
- package/dist/mjs/expression/Expr2LeftBeforeRight.js +3 -3
- package/dist/mjs/expression/Expr2LeftBeforeRight.js.map +1 -1
- package/dist/mjs/expression/ExprBase.js +1 -1
- package/dist/mjs/expression/ExprBase.js.map +1 -1
- package/dist/mjs/expression/ExprEvalResult.js +1 -1
- package/dist/mjs/expression/ExprEvalResult.js.map +1 -1
- package/dist/mjs/expression/LiteralExpr.js +2 -2
- package/dist/mjs/expression/LiteralExpr.js.map +1 -1
- package/dist/mjs/expression/function/Func.js +4 -4
- package/dist/mjs/expression/function/Func.js.map +1 -1
- package/dist/mjs/expression/function/FuncArg.js +1 -1
- package/dist/mjs/expression/function/FuncArg.js.map +1 -1
- package/dist/mjs/expression/function/FunctionExpr.js +5 -5
- package/dist/mjs/expression/function/FunctionExpr.js.map +1 -1
- package/dist/mjs/expression/function/IfcExpressionFunctions.js +5 -5
- package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/mjs/expression/function/arg/FuncArgBase.js +2 -2
- package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -1
- package/dist/mjs/expression/function/arg/FuncArgInt.js +4 -4
- package/dist/mjs/expression/function/arg/FuncArgInt.js.map +1 -1
- package/dist/mjs/expression/function/arg/FuncArgNumeric.js +3 -3
- package/dist/mjs/expression/function/arg/FuncArgNumeric.js.map +1 -1
- package/dist/mjs/expression/function/impl/MAP.js +5 -5
- package/dist/mjs/expression/function/impl/MAP.js.map +1 -1
- package/dist/mjs/expression/function/impl/ROUND.js +5 -5
- package/dist/mjs/expression/function/impl/ROUND.js.map +1 -1
- package/dist/mjs/expression/numeric/DivideExpr.js +2 -2
- package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/MinusExpr.js +1 -1
- package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/MultiplyExpr.js +1 -1
- package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js +1 -1
- package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js +2 -2
- package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
- package/dist/mjs/expression/numeric/PlusExpr.js +1 -1
- package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -1
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js +3 -3
- package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +1 -1
- package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +5 -5
- package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js +5 -5
- package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +1 -1
- package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
- package/dist/mjs/expression/string/StringConcatExpr.js +1 -1
- package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -1
- package/dist/mjs/expression/string/StringLiteralExpr.js +2 -2
- package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -1
- package/dist/mjs/expression/structure/ArrayExpr.js +4 -4
- package/dist/mjs/expression/structure/ArrayExpr.js.map +1 -1
- package/dist/mjs/value/ArrayValue.js.map +1 -1
- package/dist/mjs/value/LiteralValue.js.map +1 -1
- package/dist/value/ArrayValue.d.ts +1 -1
- package/dist/value/LiteralValue.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Func = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
const IfcExpressionFunctionConfigException_js_1 = require("./IfcExpressionFunctionConfigException.js");
|
|
5
|
+
const IfcExpressionUtils_js_1 = require("../../IfcExpressionUtils.js");
|
|
6
|
+
const ExprEvalResult_js_1 = require("../ExprEvalResult.js");
|
|
7
|
+
const ExprKind_js_1 = require("../ExprKind.js");
|
|
8
8
|
class Func {
|
|
9
9
|
constructor(name, args) {
|
|
10
10
|
this.name = name;
|
|
11
|
-
if ((0,
|
|
12
|
-
throw new
|
|
11
|
+
if ((0, IfcExpressionUtils_js_1.isNullish)(this.name)) {
|
|
12
|
+
throw new IfcExpressionFunctionConfigException_js_1.IfcExpressionFunctionConfigException("Function must have a name");
|
|
13
13
|
}
|
|
14
14
|
this.formalArguments = args;
|
|
15
15
|
this.checkArgs(args);
|
|
16
16
|
}
|
|
17
17
|
evaluate(funcArgs) {
|
|
18
18
|
const evaluatedArguments = this.getArgumentValues(funcArgs);
|
|
19
|
-
if ((0,
|
|
19
|
+
if ((0, ExprEvalResult_js_1.isExprEvalError)(evaluatedArguments)) {
|
|
20
20
|
return evaluatedArguments;
|
|
21
21
|
}
|
|
22
22
|
const argumentsReadyForUse = new Map();
|
|
23
23
|
for (const [argName, argValue] of evaluatedArguments.entries()) {
|
|
24
|
-
if ((0,
|
|
25
|
-
return new
|
|
24
|
+
if ((0, ExprEvalResult_js_1.isExprEvalError)(argValue)) {
|
|
25
|
+
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationConsequentialErrorObj(ExprKind_js_1.ExprKind.FUNCTION, this.name, argValue);
|
|
26
26
|
}
|
|
27
27
|
argumentsReadyForUse.set(argName, argValue.result);
|
|
28
28
|
}
|
|
@@ -46,7 +46,7 @@ class Func {
|
|
|
46
46
|
getArgumentValues(provided) {
|
|
47
47
|
const result = new Map();
|
|
48
48
|
const numProvided = provided.length;
|
|
49
|
-
if (!(0,
|
|
49
|
+
if (!(0, IfcExpressionUtils_js_1.isNullish)(this.formalArguments)) {
|
|
50
50
|
let j = 0;
|
|
51
51
|
for (let i = 0; i < this.formalArguments.length; i++) {
|
|
52
52
|
const currentArg = this.formalArguments[i];
|
|
@@ -55,10 +55,10 @@ class Func {
|
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
57
57
|
if (currentArg.hasDefaultValue()) {
|
|
58
|
-
result.set(currentArg.name, new
|
|
58
|
+
result.set(currentArg.name, new ExprEvalResult_js_1.ExprEvalSuccessObj(currentArg.defaultValue));
|
|
59
59
|
}
|
|
60
60
|
if (currentArg.required) {
|
|
61
|
-
return new
|
|
61
|
+
return new ExprEvalResult_js_1.ExprEvalMissingRequiredFunctionArgumentErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`, this.name, currentArg.name, i);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -68,17 +68,17 @@ class Func {
|
|
|
68
68
|
}
|
|
69
69
|
checkArgs(args) {
|
|
70
70
|
if (!Array.isArray(this.formalArguments)) {
|
|
71
|
-
throw new
|
|
71
|
+
throw new IfcExpressionFunctionConfigException_js_1.IfcExpressionFunctionConfigException("Formal function arguments is not an array");
|
|
72
72
|
}
|
|
73
73
|
let optionalArgsReached = false;
|
|
74
74
|
const names = new Set();
|
|
75
75
|
for (let i = 0; i < this.formalArguments.length; i++) {
|
|
76
76
|
if (names.has(this.formalArguments[i].name)) {
|
|
77
|
-
throw new
|
|
77
|
+
throw new IfcExpressionFunctionConfigException_js_1.IfcExpressionFunctionConfigException(`Duplicate argument name '${this.formalArguments[i].name}'.`);
|
|
78
78
|
}
|
|
79
79
|
if (optionalArgsReached) {
|
|
80
80
|
if (this.formalArguments[i].required) {
|
|
81
|
-
throw new
|
|
81
|
+
throw new IfcExpressionFunctionConfigException_js_1.IfcExpressionFunctionConfigException(`Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/Func.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/Func.ts"],"names":[],"mappings":"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","file":"expression/function/Func.js","sourcesContent":["import { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { IfcExpressionFunctionConfigException } from \"./IfcExpressionFunctionConfigException.js\";\nimport { isNullish } from \"../../IfcExpressionUtils.js\";\nimport { FuncArg } from \"./FuncArg.js\";\nimport {\n ExprEvalError,\n ExprEvalFunctionEvaluationConsequentialErrorObj,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"../ExprEvalResult.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport abstract class Func {\n protected name: string;\n protected formalArguments: Array<FuncArg<unknown>>;\n\n constructor(name: string, args: Array<FuncArg<unknown>>) {\n this.name = name;\n if (isNullish(this.name)) {\n throw new IfcExpressionFunctionConfigException(\n \"Function must have a name\"\n );\n }\n this.formalArguments = args;\n this.checkArgs(args);\n }\n\n public evaluate(\n funcArgs: Array<ExprEvalResult<LiteralValueAnyArity>>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const evaluatedArguments = this.getArgumentValues(funcArgs);\n if (isExprEvalError(evaluatedArguments)) {\n return evaluatedArguments;\n }\n const argumentsReadyForUse = new Map<string, LiteralValueAnyArity>();\n for (const [argName, argValue] of evaluatedArguments.entries()) {\n if (isExprEvalError(argValue)) {\n return new ExprEvalFunctionEvaluationConsequentialErrorObj(\n ExprKind.FUNCTION,\n this.name,\n argValue\n );\n }\n argumentsReadyForUse.set(argName, argValue.result);\n }\n return this.calculateResult(argumentsReadyForUse);\n }\n\n /**\n * Subclasses must provide the funcation evaluation code here.\n * @param evaluatedArguments\n * @protected\n */\n protected abstract calculateResult(\n evaluatedArguments: Map<string, LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity>;\n\n /**\n * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the\n * returned array is an ExprEvalError, the function evaluation fails.\n * @param evaluatedArguments\n * @protected\n */\n protected transformArguments(\n evaluatedArguments: Map<string, ExprEvalResult<LiteralValueAnyArity>>\n ): Map<string, ExprEvalResult<LiteralValueAnyArity>> {\n return evaluatedArguments;\n }\n\n /**\n * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).\n * Generates an error if a required value is missing.\n * @param provided\n * @protected\n */\n protected getArgumentValues(\n provided: Array<ExprEvalResult<LiteralValueAnyArity>>\n ): Map<string, ExprEvalResult<LiteralValueAnyArity>> | ExprEvalError {\n const result = new Map<string, ExprEvalResult<LiteralValueAnyArity>>();\n const numProvided = provided.length;\n if (!isNullish(this.formalArguments)) {\n let j = 0;\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n result.set(currentArg.name, currentArg.transformValue(provided[i]));\n } else {\n if (currentArg.hasDefaultValue()) {\n result.set(\n currentArg.name,\n new ExprEvalSuccessObj(\n currentArg.defaultValue as LiteralValueAnyArity\n )\n );\n }\n if (currentArg.required) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`,\n this.name,\n currentArg.name,\n i\n );\n }\n }\n }\n }\n const transformedArguments = this.transformArguments(result);\n return result;\n }\n\n private checkArgs(args: Array<FuncArg<unknown>>): void {\n if (!Array.isArray(this.formalArguments)) {\n throw new IfcExpressionFunctionConfigException(\n \"Formal function arguments is not an array\"\n );\n }\n let optionalArgsReached: boolean = false;\n const names = new Set<string>();\n for (let i = 0; i < this.formalArguments.length; i++) {\n if (names.has(this.formalArguments[i].name)) {\n throw new IfcExpressionFunctionConfigException(\n `Duplicate argument name '${this.formalArguments[i].name}'.`\n );\n }\n if (optionalArgsReached) {\n if (this.formalArguments[i].required) {\n throw new IfcExpressionFunctionConfigException(\n `Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`\n );\n }\n } else {\n if (!this.formalArguments[i].required) {\n optionalArgsReached = true;\n }\n }\n }\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FuncArg = void 0;
|
|
4
|
-
const
|
|
4
|
+
const IfcExpressionUtils_js_1 = require("../../IfcExpressionUtils.js");
|
|
5
5
|
class FuncArg {
|
|
6
6
|
constructor(required, name, defaultValue) {
|
|
7
7
|
this._required = required;
|
|
@@ -26,7 +26,7 @@ class FuncArg {
|
|
|
26
26
|
return this._defaultValue;
|
|
27
27
|
}
|
|
28
28
|
hasDefaultValue() {
|
|
29
|
-
return !(0,
|
|
29
|
+
return !(0, IfcExpressionUtils_js_1.isNullish)(this._defaultValue);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
exports.FuncArg = FuncArg;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/FuncArg.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/FuncArg.ts"],"names":[],"mappings":";;;AAEA,uEAAwD;AAExD,MAAa,OAAO;IAKlB,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAgB;QAC3D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,cAAc,CACnB,eAAqD;QAErD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,OAAO,CAAC,IAAA,iCAAS,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF;AArCD,0BAqCC","file":"expression/function/FuncArg.js","sourcesContent":["import { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { ExprEvalResult } from \"../ExprEvalResult.js\";\nimport { isNullish } from \"../../IfcExpressionUtils.js\";\n\nexport class FuncArg<T> {\n protected _required: boolean;\n protected _name: string;\n protected _defaultValue?: T;\n\n constructor(required: boolean, name: string, defaultValue?: T) {\n this._required = required;\n this._name = name;\n this._defaultValue = defaultValue;\n }\n\n /**\n * For the value provided for a specific invocation of the function, return an appropriate result (maybe some kind of type conversion or type check might happen here)\n *\n * @param invocationValue\n */\n public transformValue(\n invocationValue: ExprEvalResult<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n return invocationValue;\n }\n\n get required(): boolean {\n return this._required;\n }\n\n get name(): string {\n return this._name;\n }\n\n get defaultValue(): T | undefined {\n return this._defaultValue;\n }\n\n hasDefaultValue(): boolean {\n return !isNullish(this._defaultValue);\n }\n}\n"]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FunctionExpr = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
class FunctionExpr extends
|
|
4
|
+
const ExprEvalResult_js_1 = require("../ExprEvalResult.js");
|
|
5
|
+
const ExprKind_js_1 = require("../ExprKind.js");
|
|
6
|
+
const Expr0_js_1 = require("../Expr0.js");
|
|
7
|
+
const IfcExpressionFunctions_js_1 = require("./IfcExpressionFunctions.js");
|
|
8
|
+
const IfcExpressionUtils_js_1 = require("../../IfcExpressionUtils.js");
|
|
9
|
+
class FunctionExpr extends Expr0_js_1.Expr0 {
|
|
10
10
|
constructor(name, elements) {
|
|
11
|
-
super(
|
|
11
|
+
super(ExprKind_js_1.ExprKind.ARRAY);
|
|
12
12
|
this.name = name;
|
|
13
13
|
this.elements = elements;
|
|
14
|
-
this.functionImplementation =
|
|
15
|
-
if ((0,
|
|
14
|
+
this.functionImplementation = IfcExpressionFunctions_js_1.IfcExpressionFunctions.getFunction(this.name);
|
|
15
|
+
if ((0, IfcExpressionUtils_js_1.isNullish)(this.functionImplementation)) {
|
|
16
16
|
throw new Error(`No such function: ${this.name}`);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -22,8 +22,8 @@ class FunctionExpr extends Expr0_1.Expr0 {
|
|
|
22
22
|
const evalResult = this.elements[i].evaluate(ctx, localCtx);
|
|
23
23
|
functionArguments.push(evalResult);
|
|
24
24
|
}
|
|
25
|
-
const evaluationResult =
|
|
26
|
-
if ((0,
|
|
25
|
+
const evaluationResult = IfcExpressionFunctions_js_1.IfcExpressionFunctions.applyFunction(this.name, functionArguments);
|
|
26
|
+
if ((0, ExprEvalResult_js_1.isExprEvalSuccess)(evaluationResult)) {
|
|
27
27
|
return evaluationResult.result;
|
|
28
28
|
}
|
|
29
29
|
return evaluationResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/FunctionExpr.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/FunctionExpr.ts"],"names":[],"mappings":";;;AAEA,4DAAwE;AAExE,gDAA0C;AAC1C,0CAAoC;AAGpC,2EAAqE;AACrE,uEAAwD;AAExD,MAAa,YAAa,SAAQ,gBAA2B;IAK3D,YAAY,IAAY,EAAE,QAAmC;QAC3D,KAAK,CAAC,sBAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,sBAAsB,GAAG,kDAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,IAAA,iCAAS,EAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACnD;IACH,CAAC;IAES,UAAU,CAClB,GAAyB,EACzB,QAA0B;QAE1B,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC5D,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACpC;QACD,MAAM,gBAAgB,GAAG,kDAAsB,CAAC,aAAa,CAC3D,IAAI,CAAC,IAAI,EACT,iBAAiB,CAClB,CAAC;QACF,IAAI,IAAA,qCAAiB,EAAC,gBAAgB,CAAC,EAAE;YACvC,OAAO,gBAAgB,CAAC,MAAM,CAAC;SAChC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF;AAjCD,oCAiCC","file":"expression/function/FunctionExpr.js","sourcesContent":["import { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprEvalError, isExprEvalSuccess } from \"../ExprEvalResult.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Expr0 } from \"../Expr0.js\";\nimport { LiteralValue } from \"../../value/LiteralValue.js\";\nimport { Func } from \"./Func.js\";\nimport { IfcExpressionFunctions } from \"./IfcExpressionFunctions.js\";\nimport { isNullish } from \"../../IfcExpressionUtils.js\";\n\nexport class FunctionExpr extends Expr0<LiteralValueAnyArity> {\n private name: string;\n private elements: Array<Expr<LiteralValue>>;\n private functionImplementation: Func;\n\n constructor(name: string, elements: Array<Expr<LiteralValue>>) {\n super(ExprKind.ARRAY);\n this.name = name;\n this.elements = elements;\n this.functionImplementation = IfcExpressionFunctions.getFunction(this.name);\n if (isNullish(this.functionImplementation)) {\n throw new Error(`No such function: ${this.name}`);\n }\n }\n\n protected doEvaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalError | LiteralValueAnyArity {\n const functionArguments = [];\n for (let i = 0; i < this.elements.length; i++) {\n const evalResult = this.elements[i].evaluate(ctx, localCtx);\n functionArguments.push(evalResult);\n }\n const evaluationResult = IfcExpressionFunctions.applyFunction(\n this.name,\n functionArguments\n );\n if (isExprEvalSuccess(evaluationResult)) {\n return evaluationResult.result;\n }\n return evaluationResult;\n }\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IfcExpressionFunctions = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const ExprEvalResult_js_1 = require("../ExprEvalResult.js");
|
|
5
|
+
const IfcExpressionUtils_js_1 = require("../../IfcExpressionUtils.js");
|
|
6
|
+
const ExprKind_js_1 = require("../ExprKind.js");
|
|
7
|
+
const MAP_js_1 = require("./impl/MAP.js");
|
|
8
|
+
const ROUND_js_1 = require("./impl/ROUND.js");
|
|
9
9
|
const builtinFunctions = Object.freeze(new Map([
|
|
10
|
-
["MAP", new
|
|
11
|
-
["ROUND", new
|
|
10
|
+
["MAP", new MAP_js_1.MAP()],
|
|
11
|
+
["ROUND", new ROUND_js_1.ROUND()],
|
|
12
12
|
]));
|
|
13
13
|
class IfcExpressionFunctions {
|
|
14
14
|
static getFunction(name) {
|
|
@@ -16,8 +16,8 @@ class IfcExpressionFunctions {
|
|
|
16
16
|
}
|
|
17
17
|
static applyFunction(name, functionArgs) {
|
|
18
18
|
const func = IfcExpressionFunctions.getFunction(name);
|
|
19
|
-
if ((0,
|
|
20
|
-
return new
|
|
19
|
+
if ((0, IfcExpressionUtils_js_1.isNullish)(func)) {
|
|
20
|
+
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.UNKNOWN_FUNCTION, `No such function ${name}`, name);
|
|
21
21
|
}
|
|
22
22
|
return func.evaluate(functionArgs);
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":";;;AAAA,4DAI8B;AAG9B,uEAAwD;AACxD,gDAA0C;AAC1C,0CAAoC;AACpC,8CAAwC;AAExC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACpC,IAAI,GAAG,CAAe;IACpB,CAAC,KAAK,EAAE,IAAI,YAAG,EAAE,CAAC;IAClB,CAAC,OAAO,EAAE,IAAI,gBAAK,EAAE,CAAC;CACvB,CAAC,CACH,CAAC;AAEF,MAAa,sBAAsB;IAC1B,MAAM,CAAC,WAAW,CAAC,IAAY;QACpC,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,aAAa,CACzB,IAAY,EACZ,YAAyD;QAEzD,MAAM,IAAI,GAAG,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAA,iCAAS,EAAC,IAAI,CAAC,EAAE;YACnB,OAAO,IAAI,sDAAkC,CAC3C,sBAAQ,CAAC,QAAQ,EACjB,kCAAc,CAAC,gBAAgB,EAC/B,oBAAoB,IAAI,EAAE,EAC1B,IAAI,CACL,CAAC;SACH;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;CACF;AApBD,wDAoBC","file":"expression/function/IfcExpressionFunctions.js","sourcesContent":["import {\n ExprEvalFunctionEvaluationErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"../ExprEvalResult.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { Func } from \"./Func.js\";\nimport { isNullish } from \"../../IfcExpressionUtils.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { MAP } from \"./impl/MAP.js\";\nimport { ROUND } from \"./impl/ROUND.js\";\n\nconst builtinFunctions = Object.freeze(\n new Map<string, Func>([\n [\"MAP\", new MAP()],\n [\"ROUND\", new ROUND()],\n ])\n);\n\nexport class IfcExpressionFunctions {\n public static getFunction(name: string) {\n return builtinFunctions.get(name);\n }\n\n public static applyFunction(\n name: string,\n functionArgs: Array<ExprEvalResult<LiteralValueAnyArity>>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const func = IfcExpressionFunctions.getFunction(name);\n if (isNullish(func)) {\n return new ExprEvalFunctionEvaluationErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.UNKNOWN_FUNCTION,\n `No such function ${name}`,\n name\n );\n }\n return func.evaluate(functionArgs);\n }\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FuncArgBase = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
class FuncArgBase extends
|
|
4
|
+
const FuncArg_js_1 = require("../FuncArg.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
class FuncArgBase extends FuncArg_js_1.FuncArg {
|
|
7
7
|
constructor(required, name, defaultValue) {
|
|
8
8
|
super(required, name, defaultValue);
|
|
9
9
|
}
|
|
10
10
|
transformValue(invocationValue) {
|
|
11
|
-
if ((0,
|
|
11
|
+
if ((0, ExprEvalResult_js_1.isExprEvalSuccess)(invocationValue)) {
|
|
12
12
|
return this.transformForTypeCheck(invocationValue);
|
|
13
13
|
}
|
|
14
14
|
return this.transformForError(invocationValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/arg/FuncArgBase.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/arg/FuncArgBase.ts"],"names":[],"mappings":";;;AAAA,8CAAwC;AACxC,+DAKiC;AAGjC,MAAsB,WAAe,SAAQ,oBAAU;IACrD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAgB;QAC3D,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,cAAc,CACZ,eAAqD;QAErD,IAAI,IAAA,qCAAiB,EAAC,eAAe,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;SACpD;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACO,qBAAqB,CAC7B,eAAsD;QAEtD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACO,iBAAiB,CACzB,eAA8B;QAE9B,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAnCD,kCAmCC","file":"expression/function/arg/FuncArgBase.js","sourcesContent":["import { FuncArg } from \"../FuncArg.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n ExprEvalSuccess,\n isExprEvalSuccess,\n} from \"../../ExprEvalResult.js\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\n\nexport abstract class FuncArgBase<T> extends FuncArg<T> {\n constructor(required: boolean, name: string, defaultValue?: T) {\n super(required, name, defaultValue);\n }\n\n transformValue(\n invocationValue: ExprEvalResult<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n if (isExprEvalSuccess(invocationValue)) {\n return this.transformForTypeCheck(invocationValue);\n }\n return this.transformForError(invocationValue);\n }\n\n /**\n * Override to type-check the successfully evaluated invocationValue.\n * @param result\n * @protected\n */\n protected transformForTypeCheck(\n invocationValue: ExprEvalSuccess<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n return invocationValue;\n }\n\n /**\n * Override to transform the error result obtained from evaluating the invocation value.\n * @param invocationValue\n * @protected\n */\n protected transformForError(\n invocationValue: ExprEvalError\n ): ExprEvalResult<LiteralValueAnyArity> {\n return invocationValue;\n }\n}\n"]}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FuncArgInt = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
class FuncArgInt extends
|
|
4
|
+
const FuncArgBase_js_1 = require("./FuncArgBase.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
const ExprKind_js_1 = require("../../ExprKind.js");
|
|
7
|
+
const NumericValue_js_1 = require("../../../value/NumericValue.js");
|
|
8
|
+
class FuncArgInt extends FuncArgBase_js_1.FuncArgBase {
|
|
9
9
|
constructor(required, name, defaultValue) {
|
|
10
10
|
super(required, name, defaultValue);
|
|
11
11
|
}
|
|
12
12
|
transformForTypeCheck(invocationValue) {
|
|
13
13
|
const result = invocationValue.result;
|
|
14
|
-
if (!
|
|
15
|
-
return new
|
|
14
|
+
if (!NumericValue_js_1.NumericValue.isNumericValueType(result)) {
|
|
15
|
+
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be a NumericValue, but was ${result}`, result);
|
|
16
16
|
}
|
|
17
17
|
const value = result.numericValue;
|
|
18
18
|
if (value.isInteger()) {
|
|
19
19
|
return invocationValue;
|
|
20
20
|
}
|
|
21
|
-
return new
|
|
21
|
+
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Value of argument ${this.name} must be an integer, but was ${value}`, value);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
exports.FuncArgInt = FuncArgInt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/arg/FuncArgInt.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/arg/FuncArgInt.ts"],"names":[],"mappings":";;;AAAA,qDAA+C;AAE/C,+DAIiC;AACjC,mDAA6C;AAC7C,oEAA8D;AAE9D,MAAa,UAAW,SAAQ,4BAAyB;IACvD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAA2B;QACtE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAES,qBAAqB,CAC7B,eAAsD;QAEtD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,8BAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC5C,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,oCAAoC,MAAM,EAAE,EACjE,MAAM,CACP,CAAC;SACH;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,eAAe,CAAC;SACxB;QACD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,qBAAqB,IAAI,CAAC,IAAI,gCAAgC,KAAK,EAAE,EACrE,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AA1BD,gCA0BC","file":"expression/function/arg/FuncArgInt.js","sourcesContent":["import { FuncArgBase } from \"./FuncArgBase.js\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { NumericValue } from \"../../../value/NumericValue.js\";\n\nexport class FuncArgInt extends FuncArgBase<NumericValue> {\n constructor(required: boolean, name: string, defaultValue?: NumericValue) {\n super(required, name, defaultValue);\n }\n\n protected transformForTypeCheck(\n invocationValue: ExprEvalSuccess<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const result = invocationValue.result;\n if (!NumericValue.isNumericValueType(result)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} must be a NumericValue, but was ${result}`,\n result\n );\n }\n const value = result.numericValue;\n if (value.isInteger()) {\n return invocationValue;\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Value of argument ${this.name} must be an integer, but was ${value}`,\n value\n );\n }\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FuncArgNumeric = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const FuncArgBase_js_1 = require("./FuncArgBase.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
const ExprKind_js_1 = require("../../ExprKind.js");
|
|
7
7
|
const decimal_js_1 = require("decimal.js");
|
|
8
|
-
class FuncArgNumeric extends
|
|
8
|
+
class FuncArgNumeric extends FuncArgBase_js_1.FuncArgBase {
|
|
9
9
|
constructor(required, name, defaultValue) {
|
|
10
10
|
super(required, name, defaultValue);
|
|
11
11
|
}
|
|
@@ -15,7 +15,7 @@ class FuncArgNumeric extends FuncArgBase_1.FuncArgBase {
|
|
|
15
15
|
if (decimal_js_1.Decimal.isDecimal(value)) {
|
|
16
16
|
return invocationValue;
|
|
17
17
|
}
|
|
18
|
-
return new
|
|
18
|
+
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be a number, but was ${JSON.stringify(value)}`, value);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.FuncArgNumeric = FuncArgNumeric;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/arg/FuncArgNumeric.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/arg/FuncArgNumeric.ts"],"names":[],"mappings":";;;AAAA,qDAA+C;AAE/C,+DAIiC;AACjC,mDAA6C;AAE7C,2CAAqC;AAErC,MAAa,cAAe,SAAQ,4BAAyB;IAC3D,YAAY,QAAiB,EAAE,IAAY,EAAE,YAA2B;QACtE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAES,qBAAqB,CAC7B,eAAsD;QAEtD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,oBAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,eAAe,CAAC;SACxB;QACD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,SAAS,CAC/D,KAAK,CACN,EAAE,EACH,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AArBD,wCAqBC","file":"expression/function/arg/FuncArgNumeric.js","sourcesContent":["import { FuncArgBase } from \"./FuncArgBase.js\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { NumericValue } from \"../../../value/NumericValue.js\";\nimport { Decimal } from \"decimal.js\";\n\nexport class FuncArgNumeric extends FuncArgBase<NumericValue> {\n constructor(required: boolean, name: string, defaultValue?: NumericValue) {\n super(required, name, defaultValue);\n }\n\n protected transformForTypeCheck(\n invocationValue: ExprEvalSuccess<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const result = invocationValue.result;\n const value = result.getValue();\n if (Decimal.isDecimal(value)) {\n return invocationValue;\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} must be a number, but was ${JSON.stringify(\n value\n )}`,\n value\n );\n }\n}\n"]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MAP = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
class MAP extends
|
|
4
|
+
const Func_js_1 = require("../Func.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
const IfcExpression_js_1 = require("../../../IfcExpression.js");
|
|
7
|
+
const FuncArg_js_1 = require("../FuncArg.js");
|
|
8
|
+
const ExprKind_js_1 = require("../../ExprKind.js");
|
|
9
|
+
class MAP extends Func_js_1.Func {
|
|
10
10
|
constructor() {
|
|
11
11
|
super("MAP", [
|
|
12
|
-
new
|
|
12
|
+
new FuncArg_js_1.FuncArg(true, MAP.ARG_NAME_MAPPING_INPUT),
|
|
13
13
|
new MappingsArg(true, MAP.ARG_NAME_MAPPINGS),
|
|
14
|
-
new
|
|
14
|
+
new FuncArg_js_1.FuncArg(false, MAP.ARG_NAME_DEFAULT_VALUE),
|
|
15
15
|
]);
|
|
16
16
|
}
|
|
17
17
|
calculateResult(evaluatedArguments) {
|
|
@@ -29,26 +29,26 @@ class MAP extends Func_1.Func {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
if (matchIndex === -1) {
|
|
32
|
-
if ((0,
|
|
33
|
-
return new
|
|
32
|
+
if ((0, IfcExpression_js_1.isNullish)(defaultValue)) {
|
|
33
|
+
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.UNDEFINED_RESULT, "Input value not found in left column. No default return value specified, therefore the result of MAP() is undefined ", this.name);
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
|
-
return new
|
|
36
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(defaultValue);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
return new
|
|
39
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(rightColumn[matchIndex]);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
exports.MAP = MAP;
|
|
43
43
|
MAP.ARG_NAME_MAPPINGS = "mappings";
|
|
44
44
|
MAP.ARG_NAME_MAPPING_INPUT = "input";
|
|
45
45
|
MAP.ARG_NAME_DEFAULT_VALUE = "defaultValue";
|
|
46
|
-
class MappingsArg extends
|
|
46
|
+
class MappingsArg extends FuncArg_js_1.FuncArg {
|
|
47
47
|
constructor(required, name) {
|
|
48
48
|
super(required, name);
|
|
49
49
|
}
|
|
50
50
|
transformValue(invocationValue) {
|
|
51
|
-
if ((0,
|
|
51
|
+
if ((0, ExprEvalResult_js_1.isExprEvalSuccess)(invocationValue)) {
|
|
52
52
|
const mappings = invocationValue.result;
|
|
53
53
|
if (!Array.isArray(mappings.getValue())) {
|
|
54
54
|
return this.makeError(mappings, "The value is not an array");
|
|
@@ -71,7 +71,7 @@ class MappingsArg extends FuncArg_1.FuncArg {
|
|
|
71
71
|
return invocationValue;
|
|
72
72
|
}
|
|
73
73
|
makeError(mappings, problem) {
|
|
74
|
-
return new
|
|
74
|
+
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be an array containing two arrays of the same length (i.e., a 2xn matrix: 2 rows, N columns). Problem: ${problem}.`, mappings);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
//# sourceMappingURL=MAP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/MAP.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/MAP.ts"],"names":[],"mappings":"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","file":"expression/function/impl/MAP.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\nimport {\n ExprEvalFunctionEvaluationErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n isExprEvalSuccess,\n} from \"../../ExprEvalResult.js\";\nimport { isNullish, LiteralValue } from \"../../../IfcExpression.js\";\nimport { FuncArg } from \"../FuncArg.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { ArrayValue } from \"../../../value/ArrayValue.js\";\n\nexport class MAP extends Func {\n private static readonly ARG_NAME_MAPPINGS = \"mappings\";\n private static readonly ARG_NAME_MAPPING_INPUT = \"input\";\n private static readonly ARG_NAME_DEFAULT_VALUE = \"defaultValue\";\n\n constructor() {\n super(\"MAP\", [\n new FuncArg(true, MAP.ARG_NAME_MAPPING_INPUT),\n new MappingsArg(true, MAP.ARG_NAME_MAPPINGS),\n new FuncArg(false, MAP.ARG_NAME_DEFAULT_VALUE),\n ]);\n }\n\n protected calculateResult(\n evaluatedArguments: Map<string, LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const mappings = evaluatedArguments.get(\n MAP.ARG_NAME_MAPPINGS\n ) as unknown as ArrayValue;\n const input = evaluatedArguments.get(\n MAP.ARG_NAME_MAPPING_INPUT\n ) as unknown as LiteralValueAnyArity;\n const defaultValue = evaluatedArguments.get(\n MAP.ARG_NAME_DEFAULT_VALUE\n ) as unknown as LiteralValue;\n let matchIndex = -1;\n const leftColumn = (\n mappings.getValue()[0] as unknown as ArrayValue\n ).getValue();\n const rightColumn = (\n mappings.getValue()[1] as unknown as ArrayValue\n ).getValue();\n const numMappings = leftColumn.length;\n for (let i = 0; i < numMappings; i++) {\n if (leftColumn[i].equals(input)) {\n matchIndex = i;\n break;\n }\n }\n if (matchIndex === -1) {\n if (isNullish(defaultValue)) {\n return new ExprEvalFunctionEvaluationErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.UNDEFINED_RESULT,\n \"Input value not found in left column. No default return value specified, therefore the result of MAP() is undefined \",\n this.name\n );\n } else {\n return new ExprEvalSuccessObj(defaultValue);\n }\n }\n return new ExprEvalSuccessObj(\n rightColumn[matchIndex] as LiteralValueAnyArity\n );\n }\n}\n\nclass MappingsArg extends FuncArg<any> {\n constructor(required: boolean, name: string) {\n super(required, name);\n }\n\n transformValue(\n invocationValue: ExprEvalResult<LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n if (isExprEvalSuccess(invocationValue)) {\n const mappings = invocationValue.result as ArrayValue;\n if (!Array.isArray(mappings.getValue())) {\n return this.makeError(mappings, \"The value is not an array\");\n }\n if (mappings.getValue().length !== 2) {\n return this.makeError(mappings, \"The array is not of length 2\");\n }\n const firstElement = mappings.getValue()[0] as unknown as ArrayValue;\n if (!Array.isArray(firstElement.getValue())) {\n return this.makeError(\n mappings,\n \"The first element of the array is not itself an array\"\n );\n }\n const secondElement = mappings.getValue()[1] as unknown as ArrayValue;\n if (!Array.isArray(secondElement.getValue())) {\n return this.makeError(\n mappings,\n \"The second element of the array is not itself an array\"\n );\n }\n if (firstElement.getValue().length !== secondElement.getValue().length) {\n return this.makeError(\n mappings,\n `The first element of the array and the second differ in length ${\n firstElement.getValue().length\n } and ${secondElement.getValue().length}`\n );\n }\n }\n return invocationValue;\n }\n\n private makeError(mappings: LiteralValueAnyArity, problem: string) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} must be an array containing two arrays of the same length (i.e., a 2xn matrix: 2 rows, N columns). Problem: ${problem}.`,\n mappings\n );\n }\n}\n"]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ROUND = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const Func_js_1 = require("../Func.js");
|
|
5
|
+
const FuncArgInt_js_1 = require("../arg/FuncArgInt.js");
|
|
6
|
+
const NumericValue_js_1 = require("../../../value/NumericValue.js");
|
|
7
|
+
const FuncArgNumeric_js_1 = require("../arg/FuncArgNumeric.js");
|
|
8
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
9
9
|
const decimal_js_1 = require("decimal.js");
|
|
10
|
-
class ROUND extends
|
|
10
|
+
class ROUND extends Func_js_1.Func {
|
|
11
11
|
constructor() {
|
|
12
12
|
super("ROUND", [
|
|
13
|
-
new
|
|
14
|
-
new
|
|
13
|
+
new FuncArgNumeric_js_1.FuncArgNumeric(true, ROUND.KEY_INPUT),
|
|
14
|
+
new FuncArgInt_js_1.FuncArgInt(false, ROUND.KEY_NUM_DECMIALS, new NumericValue_js_1.NumericValue(0)),
|
|
15
15
|
]);
|
|
16
16
|
}
|
|
17
17
|
calculateResult(evaluatedArguments) {
|
|
@@ -20,7 +20,7 @@ class ROUND extends Func_1.Func {
|
|
|
20
20
|
const rounded = input
|
|
21
21
|
.getValue()
|
|
22
22
|
.toDecimalPlaces(numDecimals.getValue().toNumber(), decimal_js_1.Decimal.ROUND_HALF_UP);
|
|
23
|
-
return new
|
|
23
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(new NumericValue_js_1.NumericValue(rounded));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
exports.ROUND = ROUND;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/ROUND.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/ROUND.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAClD,oEAA8D;AAC9D,gEAA0D;AAE1D,+DAA6E;AAC7E,2CAAqC;AAErC,MAAa,KAAM,SAAQ,cAAI;IAI7B;QACE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,kCAAc,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;YACzC,IAAI,0BAAU,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,IAAI,8BAAY,CAAC,CAAC,CAAC,CAAC;SACnE,CAAC,CAAC;IACL,CAAC;IAES,eAAe,CACvB,kBAAqD;QAErD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAiB,CAAC;QACtE,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CACxC,KAAK,CAAC,gBAAgB,CACP,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK;aAClB,QAAQ,EAAE;aACV,eAAe,CACd,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EACjC,oBAAO,CAAC,aAAa,CACtB,CAAC;QACJ,OAAO,IAAI,sCAAkB,CAAC,IAAI,8BAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;;AAzBH,sBA0BC;AAzBgB,eAAS,GAAG,OAAO,CAAC;AACpB,sBAAgB,GAAG,cAAc,CAAC","file":"expression/function/impl/ROUND.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgInt } from \"../arg/FuncArgInt.js\";\nimport { NumericValue } from \"../../../value/NumericValue.js\";\nimport { FuncArgNumeric } from \"../arg/FuncArgNumeric.js\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { Decimal } from \"decimal.js\";\n\nexport class ROUND extends Func {\n private static KEY_INPUT = \"input\";\n private static KEY_NUM_DECMIALS = \"num_decimals\";\n\n constructor() {\n super(\"ROUND\", [\n new FuncArgNumeric(true, ROUND.KEY_INPUT),\n new FuncArgInt(false, ROUND.KEY_NUM_DECMIALS, new NumericValue(0)),\n ]);\n }\n\n protected calculateResult(\n evaluatedArguments: Map<string, LiteralValueAnyArity>\n ): ExprEvalResult<LiteralValueAnyArity> {\n const input = evaluatedArguments.get(ROUND.KEY_INPUT) as NumericValue;\n const numDecimals = evaluatedArguments.get(\n ROUND.KEY_NUM_DECMIALS\n ) as NumericValue;\n const rounded = input\n .getValue()\n .toDecimalPlaces(\n numDecimals.getValue().toNumber(),\n Decimal.ROUND_HALF_UP\n );\n return new ExprEvalSuccessObj(new NumericValue(rounded));\n }\n}\n"]}
|
|
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DivideExpr = void 0;
|
|
4
4
|
const Expr2_js_1 = require("../Expr2.js");
|
|
5
5
|
const NumericValue_js_1 = require("../../value/NumericValue.js");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
6
|
+
const ExprKind_js_1 = require("../ExprKind.js");
|
|
7
|
+
const ExprEvalResult_js_1 = require("../ExprEvalResult.js");
|
|
8
8
|
class DivideExpr extends Expr2_js_1.Expr2 {
|
|
9
9
|
constructor(left, right) {
|
|
10
|
-
super(
|
|
10
|
+
super(ExprKind_js_1.ExprKind.NUM_DIVIDE, left, right);
|
|
11
11
|
}
|
|
12
12
|
calculateResult(ctx, localCtx, left, right) {
|
|
13
13
|
return NumericValue_js_1.NumericValue.of(left.getValue().dividedBy(right.getValue()));
|
|
14
14
|
}
|
|
15
15
|
handleError(error, leftResult, rightResult) {
|
|
16
|
-
return new
|
|
16
|
+
return new ExprEvalResult_js_1.ExprEvalError2Obj(error, leftResult, rightResult, ExprEvalResult_js_1.ExprEvalStatus.MATH_ERROR, error);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
exports.DivideExpr = DivideExpr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/numeric/DivideExpr.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AAGpC,iEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/numeric/DivideExpr.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AAGpC,iEAA2D;AAC3D,gDAA0C;AAC1C,4DAK8B;AAE9B,MAAa,UAAW,SAAQ,gBAI/B;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,sBAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,IAAkB,EAClB,KAAmB;QAEnB,OAAO,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAES,WAAW,CACnB,KAAU,EACV,UAAwC,EACxC,WAAyC;QAEzC,OAAO,IAAI,qCAAiB,CAC1B,KAAK,EACL,UAAU,EACV,WAAW,EACX,kCAAc,CAAC,UAAU,EACzB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AA/BD,gCA+BC","file":"expression/numeric/DivideExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport {\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"../ExprEvalResult.js\";\n\nexport class DivideExpr extends Expr2<\n NumericValue,\n NumericValue,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(ExprKind.NUM_DIVIDE, left, right);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n left: NumericValue,\n right: NumericValue\n ): NumericValue | ExprEvalError {\n return NumericValue.of(left.getValue().dividedBy(right.getValue()));\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<NumericValue>,\n rightResult: ExprEvalResult<NumericValue>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n error,\n leftResult,\n rightResult,\n ExprEvalStatus.MATH_ERROR,\n error\n );\n }\n}\n"]}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MinusExpr = void 0;
|
|
4
4
|
const Expr2_js_1 = require("../Expr2.js");
|
|
5
5
|
const NumericValue_js_1 = require("../../value/NumericValue.js");
|
|
6
|
-
const
|
|
6
|
+
const ExprKind_js_1 = require("../ExprKind.js");
|
|
7
7
|
class MinusExpr extends Expr2_js_1.Expr2 {
|
|
8
8
|
constructor(left, right) {
|
|
9
|
-
super(
|
|
9
|
+
super(ExprKind_js_1.ExprKind.NUM_MINUS, left, right);
|
|
10
10
|
}
|
|
11
11
|
calculateResult(ctx, localCtx, left, right) {
|
|
12
12
|
return NumericValue_js_1.NumericValue.of(left.getValue().minus(right.getValue()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/numeric/MinusExpr.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AAGpC,iEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/numeric/MinusExpr.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AAGpC,iEAA2D;AAC3D,gDAA0C;AAG1C,MAAa,SAAU,SAAQ,gBAA+C;IAC5E,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,sBAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,IAAkB,EAClB,KAAmB;QAEnB,OAAO,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;CACF;AAbD,8BAaC","file":"expression/numeric/MinusExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\n\nexport class MinusExpr extends Expr2<NumericValue, NumericValue, NumericValue> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(ExprKind.NUM_MINUS, left, right);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n left: NumericValue,\n right: NumericValue\n ): NumericValue | ExprEvalError {\n return NumericValue.of(left.getValue().minus(right.getValue()));\n }\n}\n"]}
|