ifc-expressions 0.2.3 → 0.3.1

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.
Files changed (249) hide show
  1. package/dist/ExprVisitor.d.ts +5 -1
  2. package/dist/IfcExpression.d.ts +3 -2
  3. package/dist/cjs/ExprVisitor.js +36 -2
  4. package/dist/cjs/ExprVisitor.js.map +1 -1
  5. package/dist/cjs/IfcExpression.js +3 -5
  6. package/dist/cjs/IfcExpression.js.map +1 -1
  7. package/dist/cjs/context/IfcElementAccessor.js +2 -2
  8. package/dist/cjs/context/IfcElementAccessor.js.map +1 -1
  9. package/dist/cjs/context/ObjectAccessor.js +9 -0
  10. package/dist/cjs/context/ObjectAccessor.js.map +1 -1
  11. package/dist/cjs/expression/Expr.js.map +1 -1
  12. package/dist/cjs/expression/Expr0.js +18 -2
  13. package/dist/cjs/expression/Expr0.js.map +1 -1
  14. package/dist/cjs/expression/Expr1.js +46 -2
  15. package/dist/cjs/expression/Expr1.js.map +1 -1
  16. package/dist/cjs/expression/Expr2.js +48 -2
  17. package/dist/cjs/expression/Expr2.js.map +1 -1
  18. package/dist/cjs/expression/Expr2LeftBeforeRight.js +45 -0
  19. package/dist/cjs/expression/Expr2LeftBeforeRight.js.map +1 -0
  20. package/dist/cjs/expression/ExprBase.js +20 -0
  21. package/dist/cjs/expression/ExprBase.js.map +1 -0
  22. package/dist/cjs/expression/ExprEvalResult.js +165 -0
  23. package/dist/cjs/expression/ExprEvalResult.js.map +1 -0
  24. package/dist/cjs/expression/ExprKind.js +24 -0
  25. package/dist/cjs/expression/ExprKind.js.map +1 -0
  26. package/dist/cjs/expression/LiteralExpr.js +25 -0
  27. package/dist/cjs/expression/LiteralExpr.js.map +1 -0
  28. package/dist/cjs/expression/LocalContextKeys.js +7 -0
  29. package/dist/cjs/expression/LocalContextKeys.js.map +1 -0
  30. package/dist/cjs/expression/function/Func.js +93 -0
  31. package/dist/cjs/expression/function/Func.js.map +1 -0
  32. package/dist/cjs/expression/function/FuncArg.js +33 -0
  33. package/dist/cjs/expression/function/FuncArg.js.map +1 -0
  34. package/dist/cjs/expression/function/FunctionExpr.js +33 -0
  35. package/dist/cjs/expression/function/FunctionExpr.js.map +1 -0
  36. package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js +10 -0
  37. package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
  38. package/dist/cjs/expression/function/IfcExpressionFunctions.js +26 -0
  39. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -0
  40. package/dist/cjs/expression/function/arg/FuncArgBase.js +34 -0
  41. package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -0
  42. package/dist/cjs/expression/function/arg/FuncArgInt.js +25 -0
  43. package/dist/cjs/expression/function/arg/FuncArgInt.js.map +1 -0
  44. package/dist/cjs/expression/function/arg/FuncArgNumeric.js +22 -0
  45. package/dist/cjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
  46. package/dist/cjs/expression/function/impl/MAP.js +77 -0
  47. package/dist/cjs/expression/function/impl/MAP.js.map +1 -0
  48. package/dist/cjs/expression/function/impl/ROUND.js +29 -0
  49. package/dist/cjs/expression/function/impl/ROUND.js.map +1 -0
  50. package/dist/cjs/expression/numeric/DivideExpr.js +8 -6
  51. package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -1
  52. package/dist/cjs/expression/numeric/MinusExpr.js +4 -6
  53. package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -1
  54. package/dist/cjs/expression/numeric/MultiplyExpr.js +4 -6
  55. package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -1
  56. package/dist/cjs/expression/numeric/NumParenthesisExpr.js +4 -3
  57. package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
  58. package/dist/cjs/expression/numeric/NumericLiteralExpr.js +5 -4
  59. package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  60. package/dist/cjs/expression/numeric/PlusExpr.js +4 -6
  61. package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -1
  62. package/dist/cjs/expression/reference/AttributeReferenceExpr.js +19 -5
  63. package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
  64. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +3 -2
  65. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  66. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
  67. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
  68. package/dist/cjs/expression/reference/NestedObjectChainExpr.js +33 -8
  69. package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
  70. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +3 -2
  71. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  72. package/dist/cjs/expression/string/StringConcatExpr.js +4 -3
  73. package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -1
  74. package/dist/cjs/expression/string/StringLiteralExpr.js +5 -4
  75. package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -1
  76. package/dist/cjs/expression/structure/ArrayExpr.js +26 -0
  77. package/dist/cjs/expression/structure/ArrayExpr.js.map +1 -0
  78. package/dist/cjs/gen/parser/IfcExpressionLexer.js +74 -72
  79. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  80. package/dist/cjs/gen/parser/IfcExpressionParser.js +148 -104
  81. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
  82. package/dist/cjs/value/ArrayValue.js +23 -0
  83. package/dist/cjs/value/ArrayValue.js.map +1 -0
  84. package/dist/cjs/value/BooleanValue.js +12 -3
  85. package/dist/cjs/value/BooleanValue.js.map +1 -1
  86. package/dist/cjs/value/LiteralValue.js.map +1 -1
  87. package/dist/cjs/value/LiteralValueAnyArity.js.map +1 -1
  88. package/dist/cjs/value/LogicalValue.js +14 -3
  89. package/dist/cjs/value/LogicalValue.js.map +1 -1
  90. package/dist/cjs/value/NumericValue.js +16 -7
  91. package/dist/cjs/value/NumericValue.js.map +1 -1
  92. package/dist/cjs/value/ReferenceValue.js +12 -3
  93. package/dist/cjs/value/ReferenceValue.js.map +1 -1
  94. package/dist/cjs/value/StringValue.js +12 -3
  95. package/dist/cjs/value/StringValue.js.map +1 -1
  96. package/dist/cjs/value/Value.js +0 -10
  97. package/dist/cjs/value/Value.js.map +1 -1
  98. package/dist/context/ObjectAccessor.d.ts +1 -0
  99. package/dist/expression/Expr.d.ts +4 -1
  100. package/dist/expression/Expr0.d.ts +8 -4
  101. package/dist/expression/Expr1.d.ts +20 -5
  102. package/dist/expression/Expr2.d.ts +15 -6
  103. package/dist/expression/Expr2LeftBeforeRight.d.ts +14 -0
  104. package/dist/expression/ExprBase.d.ts +11 -0
  105. package/dist/expression/ExprEvalResult.d.ts +125 -0
  106. package/dist/expression/ExprKind.d.ts +19 -0
  107. package/dist/expression/LiteralExpr.d.ts +11 -0
  108. package/dist/expression/LocalContextKeys.d.ts +3 -0
  109. package/dist/expression/function/Func.d.ts +30 -0
  110. package/dist/expression/function/FuncArg.d.ts +18 -0
  111. package/dist/expression/function/FunctionExpr.d.ts +13 -0
  112. package/dist/expression/function/IfcExpressionFunctionConfigException.d.ts +3 -0
  113. package/dist/expression/function/IfcExpressionFunctions.d.ts +7 -0
  114. package/dist/expression/function/arg/FuncArgBase.d.ts +19 -0
  115. package/dist/expression/function/arg/FuncArgInt.d.ts +8 -0
  116. package/dist/expression/function/arg/FuncArgNumeric.d.ts +8 -0
  117. package/dist/expression/function/impl/MAP.d.ts +10 -0
  118. package/dist/expression/function/impl/ROUND.d.ts +9 -0
  119. package/dist/expression/numeric/DivideExpr.d.ts +4 -2
  120. package/dist/expression/numeric/MinusExpr.d.ts +3 -2
  121. package/dist/expression/numeric/MultiplyExpr.d.ts +3 -2
  122. package/dist/expression/numeric/NumParenthesisExpr.d.ts +2 -2
  123. package/dist/expression/numeric/NumericLiteralExpr.d.ts +4 -3
  124. package/dist/expression/numeric/PlusExpr.d.ts +2 -2
  125. package/dist/expression/reference/AttributeReferenceExpr.d.ts +9 -5
  126. package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +1 -1
  127. package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +5 -4
  128. package/dist/expression/reference/NestedObjectChainExpr.d.ts +9 -6
  129. package/dist/expression/reference/PropObjectReferenceExpr.d.ts +1 -1
  130. package/dist/expression/string/StringConcatExpr.d.ts +2 -2
  131. package/dist/expression/string/StringLiteralExpr.d.ts +3 -3
  132. package/dist/expression/structure/ArrayExpr.d.ts +11 -0
  133. package/dist/gen/parser/IfcExpressionLexer.d.ts +10 -9
  134. package/dist/gen/parser/IfcExpressionParser.d.ts +10 -9
  135. package/dist/mjs/ExprVisitor.js +37 -3
  136. package/dist/mjs/ExprVisitor.js.map +1 -1
  137. package/dist/mjs/IfcExpression.js +3 -4
  138. package/dist/mjs/IfcExpression.js.map +1 -1
  139. package/dist/mjs/context/IfcElementAccessor.js +2 -2
  140. package/dist/mjs/context/IfcElementAccessor.js.map +1 -1
  141. package/dist/mjs/context/ObjectAccessor.js +7 -1
  142. package/dist/mjs/context/ObjectAccessor.js.map +1 -1
  143. package/dist/mjs/expression/Expr.js.map +1 -1
  144. package/dist/mjs/expression/Expr0.js +18 -2
  145. package/dist/mjs/expression/Expr0.js.map +1 -1
  146. package/dist/mjs/expression/Expr1.js +46 -2
  147. package/dist/mjs/expression/Expr1.js.map +1 -1
  148. package/dist/mjs/expression/Expr2.js +48 -2
  149. package/dist/mjs/expression/Expr2.js.map +1 -1
  150. package/dist/mjs/expression/Expr2LeftBeforeRight.js +41 -0
  151. package/dist/mjs/expression/Expr2LeftBeforeRight.js.map +1 -0
  152. package/dist/mjs/expression/ExprBase.js +16 -0
  153. package/dist/mjs/expression/ExprBase.js.map +1 -0
  154. package/dist/mjs/expression/ExprEvalResult.js +144 -0
  155. package/dist/mjs/expression/ExprEvalResult.js.map +1 -0
  156. package/dist/mjs/expression/ExprKind.js +21 -0
  157. package/dist/mjs/expression/ExprKind.js.map +1 -0
  158. package/dist/mjs/expression/LiteralExpr.js +21 -0
  159. package/dist/mjs/expression/LiteralExpr.js.map +1 -0
  160. package/dist/mjs/expression/LocalContextKeys.js +4 -0
  161. package/dist/mjs/expression/LocalContextKeys.js.map +1 -0
  162. package/dist/mjs/expression/function/Func.js +89 -0
  163. package/dist/mjs/expression/function/Func.js.map +1 -0
  164. package/dist/mjs/expression/function/FuncArg.js +29 -0
  165. package/dist/mjs/expression/function/FuncArg.js.map +1 -0
  166. package/dist/mjs/expression/function/FunctionExpr.js +29 -0
  167. package/dist/mjs/expression/function/FunctionExpr.js.map +1 -0
  168. package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js +6 -0
  169. package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
  170. package/dist/mjs/expression/function/IfcExpressionFunctions.js +22 -0
  171. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -0
  172. package/dist/mjs/expression/function/arg/FuncArgBase.js +30 -0
  173. package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -0
  174. package/dist/mjs/expression/function/arg/FuncArgInt.js +21 -0
  175. package/dist/mjs/expression/function/arg/FuncArgInt.js.map +1 -0
  176. package/dist/mjs/expression/function/arg/FuncArgNumeric.js +18 -0
  177. package/dist/mjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
  178. package/dist/mjs/expression/function/impl/MAP.js +73 -0
  179. package/dist/mjs/expression/function/impl/MAP.js.map +1 -0
  180. package/dist/mjs/expression/function/impl/ROUND.js +25 -0
  181. package/dist/mjs/expression/function/impl/ROUND.js.map +1 -0
  182. package/dist/mjs/expression/numeric/DivideExpr.js +8 -6
  183. package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -1
  184. package/dist/mjs/expression/numeric/MinusExpr.js +4 -6
  185. package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -1
  186. package/dist/mjs/expression/numeric/MultiplyExpr.js +4 -6
  187. package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -1
  188. package/dist/mjs/expression/numeric/NumParenthesisExpr.js +4 -3
  189. package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
  190. package/dist/mjs/expression/numeric/NumericLiteralExpr.js +5 -4
  191. package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  192. package/dist/mjs/expression/numeric/PlusExpr.js +4 -6
  193. package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -1
  194. package/dist/mjs/expression/reference/AttributeReferenceExpr.js +19 -5
  195. package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
  196. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +3 -2
  197. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  198. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
  199. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
  200. package/dist/mjs/expression/reference/NestedObjectChainExpr.js +33 -8
  201. package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
  202. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +3 -2
  203. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  204. package/dist/mjs/expression/string/StringConcatExpr.js +4 -3
  205. package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -1
  206. package/dist/mjs/expression/string/StringLiteralExpr.js +5 -4
  207. package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -1
  208. package/dist/mjs/expression/structure/ArrayExpr.js +22 -0
  209. package/dist/mjs/expression/structure/ArrayExpr.js.map +1 -0
  210. package/dist/mjs/gen/parser/IfcExpressionLexer.js +74 -72
  211. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  212. package/dist/mjs/gen/parser/IfcExpressionParser.js +148 -104
  213. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
  214. package/dist/mjs/value/ArrayValue.js +19 -0
  215. package/dist/mjs/value/ArrayValue.js.map +1 -0
  216. package/dist/mjs/value/BooleanValue.js +12 -3
  217. package/dist/mjs/value/BooleanValue.js.map +1 -1
  218. package/dist/mjs/value/LiteralValue.js.map +1 -1
  219. package/dist/mjs/value/LiteralValueAnyArity.js.map +1 -1
  220. package/dist/mjs/value/LogicalValue.js +14 -3
  221. package/dist/mjs/value/LogicalValue.js.map +1 -1
  222. package/dist/mjs/value/NumericValue.js +16 -4
  223. package/dist/mjs/value/NumericValue.js.map +1 -1
  224. package/dist/mjs/value/ReferenceValue.js +12 -3
  225. package/dist/mjs/value/ReferenceValue.js.map +1 -1
  226. package/dist/mjs/value/StringValue.js +12 -3
  227. package/dist/mjs/value/StringValue.js.map +1 -1
  228. package/dist/mjs/value/Value.js +1 -8
  229. package/dist/mjs/value/Value.js.map +1 -1
  230. package/dist/value/ArrayValue.d.ts +12 -0
  231. package/dist/value/BooleanValue.d.ts +8 -1
  232. package/dist/value/LiteralValue.d.ts +2 -1
  233. package/dist/value/LiteralValueAnyArity.d.ts +1 -1
  234. package/dist/value/LogicalValue.d.ts +8 -1
  235. package/dist/value/NumericValue.d.ts +11 -4
  236. package/dist/value/ReferenceValue.d.ts +8 -1
  237. package/dist/value/StringValue.d.ts +8 -1
  238. package/dist/value/Value.d.ts +2 -3
  239. package/package.json +1 -1
  240. package/dist/cjs/expression/ArrayExpr.js +0 -3
  241. package/dist/cjs/expression/ArrayExpr.js.map +0 -1
  242. package/dist/cjs/expression/numeric/MultiplyByExpr.js +0 -18
  243. package/dist/cjs/expression/numeric/MultiplyByExpr.js.map +0 -1
  244. package/dist/expression/ArrayExpr.d.ts +0 -3
  245. package/dist/expression/numeric/MultiplyByExpr.d.ts +0 -8
  246. package/dist/mjs/expression/ArrayExpr.js +0 -2
  247. package/dist/mjs/expression/ArrayExpr.js.map +0 -1
  248. package/dist/mjs/expression/numeric/MultiplyByExpr.js +0 -14
  249. package/dist/mjs/expression/numeric/MultiplyByExpr.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ import { FuncArgBase } from "./FuncArgBase";
2
+ import { ExprEvalTypeErrorObj, } from "../../ExprEvalResult";
3
+ import { ExprKind } from "../../ExprKind.js";
4
+ import { Decimal } from "decimal.js";
5
+ export class FuncArgNumeric extends FuncArgBase {
6
+ constructor(required, name, defaultValue) {
7
+ super(required, name, defaultValue);
8
+ }
9
+ transformForTypeCheck(invocationValue) {
10
+ const result = invocationValue.result;
11
+ const value = result.getValue();
12
+ if (Decimal.isDecimal(value)) {
13
+ return invocationValue;
14
+ }
15
+ return new ExprEvalTypeErrorObj(ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be a number, but was ${JSON.stringify(value)}`, value);
16
+ }
17
+ }
18
+ //# sourceMappingURL=FuncArgNumeric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/arg/FuncArgNumeric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAGL,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,OAAO,cAAe,SAAQ,WAAyB;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,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,eAAe,CAAC;SACxB;QACD,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,SAAS,CAC/D,KAAK,CACN,EAAE,EACH,KAAK,CACN,CAAC;IACJ,CAAC;CACF","file":"expression/function/arg/FuncArgNumeric.js","sourcesContent":["import { FuncArgBase } from \"./FuncArgBase\";\nimport { LiteralValueAnyArity } from \"../../../value/LiteralValueAnyArity.js\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult\";\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"]}
@@ -0,0 +1,73 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExprEvalFunctionEvaluationErrorObj, ExprEvalStatus, ExprEvalSuccessObj, ExprEvalTypeErrorObj, isExprEvalSuccess, } from "../../ExprEvalResult";
3
+ import { isNullish } from "../../../IfcExpression.js";
4
+ import { FuncArg } from "../FuncArg.js";
5
+ import { ExprKind } from "../../ExprKind.js";
6
+ export class MAP extends Func {
7
+ constructor() {
8
+ super("MAP", [
9
+ new FuncArg(true, MAP.ARG_NAME_MAPPING_INPUT),
10
+ new MappingsArg(true, MAP.ARG_NAME_MAPPINGS),
11
+ new FuncArg(false, MAP.ARG_NAME_DEFAULT_VALUE),
12
+ ]);
13
+ }
14
+ calculateResult(evaluatedArguments) {
15
+ const mappings = evaluatedArguments.get(MAP.ARG_NAME_MAPPINGS);
16
+ const input = evaluatedArguments.get(MAP.ARG_NAME_MAPPING_INPUT);
17
+ const defaultValue = evaluatedArguments.get(MAP.ARG_NAME_DEFAULT_VALUE);
18
+ let matchIndex = -1;
19
+ const leftColumn = mappings.getValue()[0].getValue();
20
+ const rightColumn = mappings.getValue()[1].getValue();
21
+ const numMappings = leftColumn.length;
22
+ for (let i = 0; i < numMappings; i++) {
23
+ if (leftColumn[i].equals(input)) {
24
+ matchIndex = i;
25
+ break;
26
+ }
27
+ }
28
+ if (matchIndex === -1) {
29
+ if (isNullish(defaultValue)) {
30
+ return new ExprEvalFunctionEvaluationErrorObj(ExprKind.FUNCTION, ExprEvalStatus.UNDEFINED_RESULT, "Input value not found in left column. No default return value specified, therefore the result of MAP() is undefined ", this.name);
31
+ }
32
+ else {
33
+ return new ExprEvalSuccessObj(defaultValue);
34
+ }
35
+ }
36
+ return new ExprEvalSuccessObj(rightColumn[matchIndex]);
37
+ }
38
+ }
39
+ MAP.ARG_NAME_MAPPINGS = "mappings";
40
+ MAP.ARG_NAME_MAPPING_INPUT = "input";
41
+ MAP.ARG_NAME_DEFAULT_VALUE = "defaultValue";
42
+ class MappingsArg extends FuncArg {
43
+ constructor(required, name) {
44
+ super(required, name);
45
+ }
46
+ transformValue(invocationValue) {
47
+ if (isExprEvalSuccess(invocationValue)) {
48
+ const mappings = invocationValue.result;
49
+ if (!Array.isArray(mappings.getValue())) {
50
+ return this.makeError(mappings, "The value is not an array");
51
+ }
52
+ if (mappings.getValue().length !== 2) {
53
+ return this.makeError(mappings, "The array is not of length 2");
54
+ }
55
+ const firstElement = mappings.getValue()[0];
56
+ if (!Array.isArray(firstElement.getValue())) {
57
+ return this.makeError(mappings, "The first element of the array is not itself an array");
58
+ }
59
+ const secondElement = mappings.getValue()[1];
60
+ if (!Array.isArray(secondElement.getValue())) {
61
+ return this.makeError(mappings, "The second element of the array is not itself an array");
62
+ }
63
+ if (firstElement.getValue().length !== secondElement.getValue().length) {
64
+ return this.makeError(mappings, `The first element of the array and the second differ in length ${firstElement.getValue().length} and ${secondElement.getValue().length}`);
65
+ }
66
+ }
67
+ return invocationValue;
68
+ }
69
+ makeError(mappings, problem) {
70
+ return new ExprEvalTypeErrorObj(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);
71
+ }
72
+ }
73
+ //# sourceMappingURL=MAP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/impl/MAP.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EACL,kCAAkC,EAElC,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAgB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,OAAO,GAAI,SAAQ,IAAI;IAK3B;QACE,KAAK,CAAC,KAAK,EAAE;YACX,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,sBAAsB,CAAC;YAC7C,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC;YAC5C,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,sBAAsB,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAES,eAAe,CACvB,kBAAqD;QAErD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CACrC,GAAG,CAAC,iBAAiB,CACG,CAAC;QAC3B,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAClC,GAAG,CAAC,sBAAsB,CACQ,CAAC;QACrC,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CACzC,GAAG,CAAC,sBAAsB,CACA,CAAC;QAC7B,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,MAAM,UAAU,GACd,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CACtB,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GACf,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CACtB,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC/B,UAAU,GAAG,CAAC,CAAC;gBACf,MAAM;aACP;SACF;QACD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YACrB,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;gBAC3B,OAAO,IAAI,kCAAkC,CAC3C,QAAQ,CAAC,QAAQ,EACjB,cAAc,CAAC,gBAAgB,EAC/B,sHAAsH,EACtH,IAAI,CAAC,IAAI,CACV,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC;aAC7C;SACF;QACD,OAAO,IAAI,kBAAkB,CAC3B,WAAW,CAAC,UAAU,CAAyB,CAChD,CAAC;IACJ,CAAC;;AArDuB,qBAAiB,GAAG,UAAU,CAAC;AAC/B,0BAAsB,GAAG,OAAO,CAAC;AACjC,0BAAsB,GAAG,cAAc,CAAC;AAsDlE,MAAM,WAAY,SAAQ,OAAY;IACpC,YAAY,QAAiB,EAAE,IAAY;QACzC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,cAAc,CACZ,eAAqD;QAErD,IAAI,iBAAiB,CAAC,eAAe,CAAC,EAAE;YACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAoB,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACvC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;aAC9D;YACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;aACjE;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAA0B,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;gBAC3C,OAAO,IAAI,CAAC,SAAS,CACnB,QAAQ,EACR,uDAAuD,CACxD,CAAC;aACH;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAA0B,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;gBAC5C,OAAO,IAAI,CAAC,SAAS,CACnB,QAAQ,EACR,wDAAwD,CACzD,CAAC;aACH;YACD,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;gBACtE,OAAO,IAAI,CAAC,SAAS,CACnB,QAAQ,EACR,kEACE,YAAY,CAAC,QAAQ,EAAE,CAAC,MAC1B,QAAQ,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAC1C,CAAC;aACH;SACF;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAEO,SAAS,CAAC,QAA8B,EAAE,OAAe;QAC/D,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,gHAAgH,OAAO,GAAG,EAC/I,QAAQ,CACT,CAAC;IACJ,CAAC;CACF","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\";\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"]}
@@ -0,0 +1,25 @@
1
+ import { Func } from "../Func.js";
2
+ import { FuncArgInt } from "../arg/FuncArgInt.js";
3
+ import { NumericValue } from "../../../value/NumericValue.js";
4
+ import { FuncArgNumeric } from "../arg/FuncArgNumeric.js";
5
+ import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
6
+ import { Decimal } from "decimal.js";
7
+ export class ROUND extends Func {
8
+ constructor() {
9
+ super("ROUND", [
10
+ new FuncArgNumeric(true, ROUND.KEY_INPUT),
11
+ new FuncArgInt(false, ROUND.KEY_NUM_DECMIALS, new NumericValue(0)),
12
+ ]);
13
+ }
14
+ calculateResult(evaluatedArguments) {
15
+ const input = evaluatedArguments.get(ROUND.KEY_INPUT);
16
+ const numDecimals = evaluatedArguments.get(ROUND.KEY_NUM_DECMIALS);
17
+ const rounded = input
18
+ .getValue()
19
+ .toDecimalPlaces(numDecimals.getValue().toNumber(), Decimal.ROUND_HALF_UP);
20
+ return new ExprEvalSuccessObj(new NumericValue(rounded));
21
+ }
22
+ }
23
+ ROUND.KEY_INPUT = "input";
24
+ ROUND.KEY_NUM_DECMIALS = "num_decimals";
25
+ //# sourceMappingURL=ROUND.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/impl/ROUND.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,OAAO,KAAM,SAAQ,IAAI;IAI7B;QACE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;YACzC,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,IAAI,YAAY,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,OAAO,CAAC,aAAa,CACtB,CAAC;QACJ,OAAO,IAAI,kBAAkB,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;;AAxBc,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"]}
@@ -1,14 +1,16 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
2
  import { NumericValue } from "../../value/NumericValue.js";
3
+ import { ExprKind } from "../ExprKind.js";
4
+ import { ExprEvalError2Obj, ExprEvalStatus, } from "../ExprEvalResult";
3
5
  export class DivideExpr extends Expr2 {
4
6
  constructor(left, right) {
5
- super(left, right);
7
+ super(ExprKind.NUM_DIVIDE, left, right);
6
8
  }
7
- evaluate(ctx) {
8
- return NumericValue.of(this.left
9
- .evaluate(ctx)
10
- .getValue()
11
- .dividedBy(this.right.evaluate(ctx).getValue()));
9
+ calculateResult(ctx, localCtx, left, right) {
10
+ return NumericValue.of(left.getValue().dividedBy(right.getValue()));
11
+ }
12
+ handleError(error, leftResult, rightResult) {
13
+ return new ExprEvalError2Obj(error, leftResult, rightResult, ExprEvalStatus.MATH_ERROR, error);
12
14
  }
13
15
  }
14
16
  //# sourceMappingURL=DivideExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/DivideExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,OAAO,UAAW,SAAQ,KAI/B;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,YAAY,CAAC,EAAE,CACpB,IAAI,CAAC,IAAI;aACN,QAAQ,CAAC,GAAG,CAAC;aACb,QAAQ,EAAE;aACV,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAClD,CAAC;IACJ,CAAC;CACF","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\";\n\nexport class DivideExpr extends Expr2<\n Expr<NumericValue>,\n Expr<NumericValue>,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return NumericValue.of(\n this.left\n .evaluate(ctx)\n .getValue()\n .dividedBy(this.right.evaluate(ctx).getValue())\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/DivideExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,iBAAiB,EAEjB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,UAAW,SAAQ,KAI/B;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,IAAkB,EAClB,KAAmB;QAEnB,OAAO,YAAY,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,iBAAiB,CAC1B,KAAK,EACL,UAAU,EACV,WAAW,EACX,cAAc,CAAC,UAAU,EACzB,KAAK,CACN,CAAC;IACJ,CAAC;CACF","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\";\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"]}
@@ -1,14 +1,12 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
2
  import { NumericValue } from "../../value/NumericValue.js";
3
+ import { ExprKind } from "../ExprKind.js";
3
4
  export class MinusExpr extends Expr2 {
4
5
  constructor(left, right) {
5
- super(left, right);
6
+ super(ExprKind.NUM_MINUS, left, right);
6
7
  }
7
- evaluate(ctx) {
8
- return NumericValue.of(this.left
9
- .evaluate(ctx)
10
- .getValue()
11
- .minus(this.right.evaluate(ctx).getValue()));
8
+ calculateResult(ctx, localCtx, left, right) {
9
+ return NumericValue.of(left.getValue().minus(right.getValue()));
12
10
  }
13
11
  }
14
12
  //# sourceMappingURL=MinusExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/MinusExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,OAAO,SAAU,SAAQ,KAI9B;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,YAAY,CAAC,EAAE,CACpB,IAAI,CAAC,IAAI;aACN,QAAQ,CAAC,GAAG,CAAC;aACb,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC9C,CAAC;IACJ,CAAC;CACF","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\";\n\nexport class MinusExpr extends Expr2<\n Expr<NumericValue>,\n Expr<NumericValue>,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return NumericValue.of(\n this.left\n .evaluate(ctx)\n .getValue()\n .minus(this.right.evaluate(ctx).getValue())\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/MinusExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,SAAU,SAAQ,KAA+C;IAC5E,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,IAAkB,EAClB,KAAmB;QAEnB,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;CACF","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"]}
@@ -1,14 +1,12 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
2
  import { NumericValue } from "../../value/NumericValue.js";
3
+ import { ExprKind } from "../ExprKind.js";
3
4
  export class MultiplyExpr extends Expr2 {
4
5
  constructor(left, right) {
5
- super(left, right);
6
+ super(ExprKind.NUM_MULTIPLY, left, right);
6
7
  }
7
- evaluate(ctx) {
8
- return NumericValue.of(this.left
9
- .evaluate(ctx)
10
- .getValue()
11
- .mul(this.right.evaluate(ctx).getValue()));
8
+ calculateResult(ctx, localCtx, left, right) {
9
+ return NumericValue.of(left.getValue().mul(right.getValue()));
12
10
  }
13
11
  }
14
12
  //# sourceMappingURL=MultiplyExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/MultiplyExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,OAAO,YAAa,SAAQ,KAIjC;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,YAAY,CAAC,EAAE,CACpB,IAAI,CAAC,IAAI;aACN,QAAQ,CAAC,GAAG,CAAC;aACb,QAAQ,EAAE;aACV,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC5C,CAAC;IACJ,CAAC;CACF","file":"expression/numeric/MultiplyExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\n\nexport class MultiplyExpr extends Expr2<\n Expr<NumericValue>,\n Expr<NumericValue>,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return NumericValue.of(\n this.left\n .evaluate(ctx)\n .getValue()\n .mul(this.right.evaluate(ctx).getValue())\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/MultiplyExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,YAAa,SAAQ,KAIjC;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,IAAkB,EAClB,KAAmB;QAEnB,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;CACF","file":"expression/numeric/MultiplyExpr.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 MultiplyExpr extends Expr2<\n NumericValue,\n NumericValue,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(ExprKind.NUM_MULTIPLY, 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().mul(right.getValue()));\n }\n}\n"]}
@@ -1,10 +1,11 @@
1
1
  import { Expr1 } from "../Expr1.js";
2
+ import { ExprKind } from "../ExprKind.js";
2
3
  export class NumParenthesisExpr extends Expr1 {
3
4
  constructor(expression) {
4
- super(expression);
5
+ super(ExprKind.NUM_PARENTHESIS, expression);
5
6
  }
6
- evaluate(ctx) {
7
- return this.value.evaluate(ctx);
7
+ calculateResult(ctx, localCtx, subExpressionValue) {
8
+ return subExpressionValue;
8
9
  }
9
10
  }
10
11
  //# sourceMappingURL=NumParenthesisExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/NumParenthesisExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,MAAM,OAAO,kBAAmB,SAAQ,KAGvC;IACC,YAAY,UAA8B;QACxC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;CACF","file":"expression/numeric/NumParenthesisExpr.js","sourcesContent":["import { Expr1 } from \"../Expr1.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\n\nexport class NumParenthesisExpr extends Expr1<\n Expr<NumericValue>,\n NumericValue\n> {\n constructor(expression: Expr<NumericValue>) {\n super(expression);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return this.value.evaluate(ctx);\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/NumParenthesisExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,kBAAmB,SAAQ,KAAiC;IACvE,YAAY,UAA8B;QACxC,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,kBAAgC;QAEhC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CACF","file":"expression/numeric/NumParenthesisExpr.js","sourcesContent":["import { Expr1 } from \"../Expr1.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport class NumParenthesisExpr extends Expr1<NumericValue, NumericValue> {\n constructor(expression: Expr<NumericValue>) {\n super(ExprKind.NUM_PARENTHESIS, expression);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionValue: NumericValue\n ): NumericValue {\n return subExpressionValue;\n }\n}\n"]}
@@ -1,9 +1,10 @@
1
- import { Expr1 } from "../Expr1.js";
2
- export class NumericLiteralExpr extends Expr1 {
1
+ import { ExprKind } from "../ExprKind.js";
2
+ import { LiteralExpr } from "../LiteralExpr.js";
3
+ export class NumericLiteralExpr extends LiteralExpr {
3
4
  constructor(value) {
4
- super(value);
5
+ super(ExprKind.NUM_LITERAL, value);
5
6
  }
6
- evaluate(ctx) {
7
+ calculateResult(ctx) {
7
8
  return this.value;
8
9
  }
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/NumericLiteralExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,OAAO,kBAAmB,SAAQ,KAAiC;IACvE,YAAY,KAAmB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","file":"expression/numeric/NumericLiteralExpr.js","sourcesContent":["import { Expr1 } from \"../Expr1.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\n\nexport class NumericLiteralExpr extends Expr1<NumericValue, NumericValue> {\n constructor(value: NumericValue) {\n super(value);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return this.value;\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/NumericLiteralExpr.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,WAGvC;IACC,YAAY,KAAmB;QAC7B,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","file":"expression/numeric/NumericLiteralExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { LiteralExpr } from \"../LiteralExpr.js\";\n\nexport class NumericLiteralExpr extends LiteralExpr<\n NumericValue,\n NumericValue\n> {\n constructor(value: NumericValue) {\n super(ExprKind.NUM_LITERAL, value);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext\n ): NumericValue | ExprEvalError {\n return this.value;\n }\n}\n"]}
@@ -1,14 +1,12 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
2
  import { NumericValue } from "../../value/NumericValue.js";
3
+ import { ExprKind } from "../ExprKind.js";
3
4
  export class PlusExpr extends Expr2 {
4
5
  constructor(left, right) {
5
- super(left, right);
6
+ super(ExprKind.NUM_PLUS, left, right);
6
7
  }
7
- evaluate(ctx) {
8
- return NumericValue.of(this.left
9
- .evaluate(ctx)
10
- .getValue()
11
- .plus(this.right.evaluate(ctx).getValue()));
8
+ calculateResult(ctx, localCtx, leftResult, rightResult) {
9
+ return NumericValue.of(leftResult.getValue().plus(rightResult.getValue()));
12
10
  }
13
11
  }
14
12
  //# sourceMappingURL=PlusExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/numeric/PlusExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,OAAO,QAAS,SAAQ,KAI7B;IACC,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,YAAY,CAAC,EAAE,CACpB,IAAI,CAAC,IAAI;aACN,QAAQ,CAAC,GAAG,CAAC;aACb,QAAQ,EAAE;aACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC7C,CAAC;IACJ,CAAC;CACF","file":"expression/numeric/PlusExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { NumericValue } from \"../../value/NumericValue.js\";\n\nexport class PlusExpr extends Expr2<\n Expr<NumericValue>,\n Expr<NumericValue>,\n NumericValue\n> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): NumericValue {\n return NumericValue.of(\n this.left\n .evaluate(ctx)\n .getValue()\n .plus(this.right.evaluate(ctx).getValue())\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/numeric/PlusExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,QAAS,SAAQ,KAA+C;IAC3E,YAAY,IAAwB,EAAE,KAAyB;QAC7D,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,eAAe,CACb,GAAyB,EACzB,QAA0B,EAC1B,UAAwB,EACxB,WAAyB;QAEzB,OAAO,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF","file":"expression/numeric/PlusExpr.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\";\n\nexport class PlusExpr extends Expr2<NumericValue, NumericValue, NumericValue> {\n constructor(left: Expr<NumericValue>, right: Expr<NumericValue>) {\n super(ExprKind.NUM_PLUS, left, right);\n }\n\n calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: NumericValue,\n rightResult: NumericValue\n ): NumericValue {\n return NumericValue.of(leftResult.getValue().plus(rightResult.getValue()));\n }\n}\n"]}
@@ -1,12 +1,26 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
+ import { ExprKind } from "../ExprKind.js";
3
+ import { ExprEvalError2Obj, ExprEvalRefChainErrorObj, ExprEvalStatus, isExprEvalRefChainError, isExprEvalSuccess, } from "../ExprEvalResult";
4
+ import { LocalContextKeys } from "../LocalContextKeys";
2
5
  export class AttributeReferenceExpr extends Expr2 {
3
6
  constructor(left, right) {
4
- super(left, right);
7
+ super(ExprKind.REF_ATTRIBUTE, left, right);
5
8
  }
6
- evaluate(ctx) {
7
- const oa = this.left.evaluate(ctx);
8
- const valueAccessor = this.right.evaluate(ctx);
9
- return valueAccessor(oa);
9
+ onAfterLeftRecursion(ctx, localCtx, leftResult) {
10
+ localCtx.set(LocalContextKeys.OBJECT_ACCESSOR, leftResult);
11
+ }
12
+ calculateResult(ctx, localCtx, objectAccessor, dereferencedValue) {
13
+ localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);
14
+ return dereferencedValue;
15
+ }
16
+ makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult) {
17
+ if (isExprEvalSuccess(leftResult) && isExprEvalRefChainError(rightResult)) {
18
+ return ExprEvalRefChainErrorObj.bubbleUp(rightResult, this.left.getKind());
19
+ }
20
+ return super.makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult);
21
+ }
22
+ handleError(error, leftResult, rightResult) {
23
+ return new ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalStatus.REFERENCE_ERROR, ["Unable to resolve attribute reference:", error]);
10
24
  }
11
25
  }
12
26
  //# sourceMappingURL=AttributeReferenceExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/reference/AttributeReferenceExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMpC,MAAM,OAAO,sBAAuB,SAAQ,KAI3C;IACC,YAAY,IAAyB,EAAE,KAA4B;QACjE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,MAAM,EAAE,GAAmB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;CACF","file":"expression/reference/AttributeReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { NestedObjectChainExpr } from \"./NestedObjectChainExpr.js\";\nimport { ObjectReferenceExpr } from \"./ObjectReferenceExpr.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\n\nexport class AttributeReferenceExpr extends Expr2<\n ObjectReferenceExpr,\n NestedObjectChainExpr,\n LiteralValueAnyArity\n> {\n constructor(left: ObjectReferenceExpr, right: NestedObjectChainExpr) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): LiteralValueAnyArity {\n const oa: ObjectAccessor = this.left.evaluate(ctx);\n const valueAccessor = this.right.evaluate(ctx);\n return valueAccessor(oa);\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/reference/AttributeReferenceExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,iBAAiB,EACjB,wBAAwB,EAExB,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,OAAO,sBAAuB,SAAQ,KAI3C;IACC,YAAY,IAA0B,EAAE,KAAiC;QACvE,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAES,oBAAoB,CAC5B,GAAyB,EACzB,QAA0B,EAC1B,UAA0B;QAE1B,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,eAAe,CACb,GAAyB,EACzB,QAAQ,EACR,cAA8B,EAC9B,iBAAuC;QAEvC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAClD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAES,8BAA8B,CACtC,GAAyB,EACzB,QAA0B,EAC1B,UAA0C,EAC1C,WAA0B;QAE1B,IAAI,iBAAiB,CAAC,UAAU,CAAC,IAAI,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACzE,OAAO,wBAAwB,CAAC,QAAQ,CACtC,WAAW,EACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CACpB,CAAC;SACH;QACD,OAAO,KAAK,CAAC,8BAA8B,CACzC,GAAG,EACH,QAAQ,EACR,UAAU,EACV,WAAW,CACZ,CAAC;IACJ,CAAC;IAES,WAAW,CACnB,KAAU,EACV,UAA0C,EAC1C,WAAiD;QAEjD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,EACX,cAAc,CAAC,eAAe,EAC9B,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC;CACF","file":"expression/reference/AttributeReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport {\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalRefChainErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalRefChainError,\n isExprEvalSuccess,\n} from \"../ExprEvalResult\";\nimport { Expr } from \"../Expr.js\";\nimport { LocalContextKeys } from \"../LocalContextKeys\";\n\nexport class AttributeReferenceExpr extends Expr2<\n ObjectAccessor,\n LiteralValueAnyArity,\n LiteralValueAnyArity\n> {\n constructor(left: Expr<ObjectAccessor>, right: Expr<LiteralValueAnyArity>) {\n super(ExprKind.REF_ATTRIBUTE, left, right);\n }\n\n protected onAfterLeftRecursion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ObjectAccessor\n ) {\n localCtx.set(LocalContextKeys.OBJECT_ACCESSOR, leftResult);\n }\n\n calculateResult(\n ctx: IfcExpressionContext,\n localCtx,\n objectAccessor: ObjectAccessor,\n dereferencedValue: LiteralValueAnyArity\n ): LiteralValueAnyArity | ExprEvalError {\n localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);\n return dereferencedValue;\n }\n\n protected makeResultForRightSubExprError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ExprEvalResult<ObjectAccessor>,\n rightResult: ExprEvalError\n ): ExprEvalResult<LiteralValueAnyArity> {\n if (isExprEvalSuccess(leftResult) && isExprEvalRefChainError(rightResult)) {\n return ExprEvalRefChainErrorObj.bubbleUp(\n rightResult,\n this.left.getKind()\n );\n }\n return super.makeResultForRightSubExprError(\n ctx,\n localCtx,\n leftResult,\n rightResult\n );\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<ObjectAccessor>,\n rightResult: ExprEvalResult<LiteralValueAnyArity>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n this.getKind(),\n leftResult,\n rightResult,\n ExprEvalStatus.REFERENCE_ERROR,\n [\"Unable to resolve attribute reference:\", error]\n );\n }\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  import { Expr0 } from "../Expr0.js";
2
+ import { ExprKind } from "../ExprKind.js";
2
3
  export class ElemObjectReferenceExpr extends Expr0 {
3
4
  constructor() {
4
- super();
5
+ super(ExprKind.REF_ELEMENT);
5
6
  }
6
- evaluate(ctx) {
7
+ doEvaluate(ctx) {
7
8
  return ctx.resolveElemRef();
8
9
  }
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/reference/ElemObjectReferenceExpr.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,OAAO,uBACX,SAAQ,KAAqB;IAG7B;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF","file":"expression/reference/ElemObjectReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ObjectReferenceExpr } from \"./ObjectReferenceExpr.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { Expr0 } from \"../Expr0.js\";\n\nexport class ElemObjectReferenceExpr\n extends Expr0<ObjectAccessor>\n implements ObjectReferenceExpr\n{\n constructor() {\n super();\n }\n\n evaluate(ctx: IfcExpressionContext): ObjectAccessor {\n return ctx.resolveElemRef();\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/reference/ElemObjectReferenceExpr.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,uBACX,SAAQ,KAAqB;IAG7B;QACE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,GAAyB;QAClC,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF","file":"expression/reference/ElemObjectReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ObjectReferenceExpr } from \"./ObjectReferenceExpr.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { Expr0 } from \"../Expr0.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport class ElemObjectReferenceExpr\n extends Expr0<ObjectAccessor>\n implements ObjectReferenceExpr\n{\n constructor() {\n super(ExprKind.REF_ELEMENT);\n }\n\n doEvaluate(ctx: IfcExpressionContext): ObjectAccessor {\n return ctx.resolveElemRef();\n }\n}\n"]}
@@ -1,10 +1,24 @@
1
- import { Expr1 } from "../Expr1.js";
2
- export class NestedObjectChainEndExpr extends Expr1 {
1
+ import { ExprKind } from "../ExprKind.js";
2
+ import { ExprEvalErrorObj, ExprEvalRefChainErrorObj, ExprEvalStatus, } from "../ExprEvalResult";
3
+ import { isNullish } from "../../IfcExpressionUtils";
4
+ import { Expr0 } from "../Expr0.js";
5
+ import { LocalContextKeys } from "../LocalContextKeys";
6
+ export class NestedObjectChainEndExpr extends Expr0 {
3
7
  constructor(value) {
4
- super(value);
8
+ super(ExprKind.REF_NESTED_OBJECT_CHAIN_END);
9
+ this.attributeName = value;
5
10
  }
6
- evaluate(ctx) {
7
- return (oa) => oa.getAttribute(this.value);
11
+ doEvaluate(ctx, localCtx) {
12
+ const objectAccessor = localCtx.get(LocalContextKeys.OBJECT_ACCESSOR);
13
+ if (isNullish(objectAccessor)) {
14
+ return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.MISSING_OPERAND, `No ObjectAccessor found in localContext when trying to access attribute with name'${this.attributeName}`);
15
+ }
16
+ const attributeValue = objectAccessor.getAttribute(this.attributeName);
17
+ if (isNullish(attributeValue)) {
18
+ return new ExprEvalRefChainErrorObj(this.getKind(), ExprEvalStatus.REFERENCE_ERROR, this.attributeName, `No such nested object: '${this.attributeName}'`);
19
+ }
20
+ localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);
21
+ return attributeValue;
8
22
  }
9
23
  }
10
24
  //# sourceMappingURL=NestedObjectChainEndExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/reference/NestedObjectChainEndExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,OAAO,wBAAyB,SAAQ,KAG7C;IACC,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,QAAQ,CACN,GAAyB;QAEzB,OAAO,CAAC,EAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;CACF","file":"expression/reference/NestedObjectChainEndExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr1 } from \"../Expr1.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\n\nexport class NestedObjectChainEndExpr extends Expr1<\n string,\n (oa: ObjectAccessor) => LiteralValueAnyArity\n> {\n constructor(value: string) {\n super(value);\n }\n\n evaluate(\n ctx: IfcExpressionContext\n ): (oa: ObjectAccessor) => LiteralValueAnyArity {\n return (oa: ObjectAccessor) => oa.getAttribute(this.value);\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/reference/NestedObjectChainEndExpr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,OAAO,wBAAyB,SAAQ,KAA2B;IAEvE,YAAY,KAAa;QACvB,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAES,UAAU,CAClB,GAAyB,EACzB,QAA0B;QAE1B,MAAM,cAAc,GAAmB,QAAQ,CAAC,GAAG,CACjD,gBAAgB,CAAC,eAAe,CACjC,CAAC;QACF,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE;YAC7B,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,OAAO,EAAE,EACd,cAAc,CAAC,eAAe,EAC9B,qFAAqF,IAAI,CAAC,aAAa,EAAE,CAC1G,CAAC;SACH;QACD,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE;YAC7B,OAAO,IAAI,wBAAwB,CACjC,IAAI,CAAC,OAAO,EAAE,EACd,cAAc,CAAC,eAAe,EAC9B,IAAI,CAAC,aAAa,EAClB,2BAA2B,IAAI,CAAC,aAAa,GAAG,CACjD,CAAC;SACH;QACD,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAClD,OAAO,cAAc,CAAC;IACxB,CAAC;CACF","file":"expression/reference/NestedObjectChainEndExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalRefChainErrorObj,\n ExprEvalStatus,\n} from \"../ExprEvalResult\";\nimport { isNullish } from \"../../IfcExpressionUtils\";\nimport { Expr0 } from \"../Expr0.js\";\nimport { LocalContextKeys } from \"../LocalContextKeys\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\n\nexport class NestedObjectChainEndExpr extends Expr0<LiteralValueAnyArity> {\n private readonly attributeName: string;\n constructor(value: string) {\n super(ExprKind.REF_NESTED_OBJECT_CHAIN_END);\n this.attributeName = value;\n }\n\n protected doEvaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalError | LiteralValueAnyArity {\n const objectAccessor: ObjectAccessor = localCtx.get(\n LocalContextKeys.OBJECT_ACCESSOR\n );\n if (isNullish(objectAccessor)) {\n return new ExprEvalErrorObj(\n this.getKind(),\n ExprEvalStatus.MISSING_OPERAND,\n `No ObjectAccessor found in localContext when trying to access attribute with name'${this.attributeName}`\n );\n }\n const attributeValue = objectAccessor.getAttribute(this.attributeName);\n if (isNullish(attributeValue)) {\n return new ExprEvalRefChainErrorObj(\n this.getKind(),\n ExprEvalStatus.REFERENCE_ERROR,\n this.attributeName,\n `No such nested object: '${this.attributeName}'`\n );\n }\n localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);\n return attributeValue;\n }\n}\n"]}
@@ -1,11 +1,36 @@
1
- import { Expr2 } from "../Expr2.js";
2
- export class NestedObjectChainExpr extends Expr2 {
3
- constructor(left, right) {
4
- super(left, right);
5
- }
6
- evaluate(ctx) {
7
- const nextLink = this.right.evaluate(ctx);
8
- return (oa) => nextLink(oa.getNestedObjectAccessor(this.left));
1
+ import { ExprKind } from "../ExprKind.js";
2
+ import { ExprEvalErrorObj, ExprEvalRefChainErrorObj, ExprEvalStatus, isExprEvalRefChainError, mapErrorObjectToMessage, } from "../ExprEvalResult";
3
+ import { Expr1 } from "../Expr1.js";
4
+ import { isNullish } from "../../IfcExpressionUtils";
5
+ import { LocalContextKeys } from "../LocalContextKeys";
6
+ export class NestedObjectChainExpr extends Expr1 {
7
+ constructor(literalObjectRef, nextLink) {
8
+ super(ExprKind.REF_NESTED_OBJECT_CHAIN, nextLink);
9
+ this.literalObjectRef = literalObjectRef;
10
+ }
11
+ onBeforeRecusion(ctx, localCtx) {
12
+ const objectAccessor = localCtx.get(LocalContextKeys.OBJECT_ACCESSOR);
13
+ if (isNullish(objectAccessor)) {
14
+ return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.MISSING_OPERAND, `No ObjectAccessor found in localContext when trying to access nested object with name'${this.literalObjectRef}`);
15
+ }
16
+ const nestedObjectAccessor = objectAccessor.getNestedObjectAccessor(this.literalObjectRef);
17
+ if (isNullish(nestedObjectAccessor)) {
18
+ return new ExprEvalRefChainErrorObj(this.getKind(), ExprEvalStatus.REFERENCE_ERROR, this.literalObjectRef, `No such nested object: '${this.literalObjectRef}'`);
19
+ }
20
+ localCtx.set(LocalContextKeys.OBJECT_ACCESSOR, nestedObjectAccessor);
21
+ }
22
+ calculateResult(ctx, localCtx, result) {
23
+ localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);
24
+ return result;
25
+ }
26
+ obtainResultForSubExpressionError(ctx, localCtx, subExpressionResult) {
27
+ if (isExprEvalRefChainError(subExpressionResult)) {
28
+ return ExprEvalRefChainErrorObj.bubbleUp(subExpressionResult, this.literalObjectRef);
29
+ }
30
+ return new ExprEvalRefChainErrorObj(this.getKind(), subExpressionResult.status, this.literalObjectRef, subExpressionResult.message);
31
+ }
32
+ handleError(error, subResult) {
33
+ return new ExprEvalRefChainErrorObj(this.getKind(), ExprEvalStatus.REFERENCE_ERROR, this.literalObjectRef, mapErrorObjectToMessage(error));
9
34
  }
10
35
  }
11
36
  //# sourceMappingURL=NestedObjectChainExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/reference/NestedObjectChainExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,MAAM,OAAO,qBAAsB,SAAQ,KAI1C;IACC,YAAY,IAAY,EAAE,KAA4B;QACpD,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CACN,GAAyB;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,CAAC,EAAkB,EAAE,EAAE,CAC5B,QAAQ,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;CACF","file":"expression/reference/NestedObjectChainExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { NestedObjectChainEndExpr } from \"./NestedObjectChainEndExpr.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\n\nexport class NestedObjectChainExpr extends Expr2<\n string,\n NestedObjectChainExpr | NestedObjectChainEndExpr,\n (oa: ObjectAccessor) => LiteralValueAnyArity\n> {\n constructor(left: string, right: NestedObjectChainExpr) {\n super(left, right);\n }\n\n evaluate(\n ctx: IfcExpressionContext\n ): (oa: ObjectAccessor) => LiteralValueAnyArity {\n const nextLink = this.right.evaluate(ctx);\n return (oa: ObjectAccessor) =>\n nextLink(oa.getNestedObjectAccessor(this.left));\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/reference/NestedObjectChainExpr.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,gBAAgB,EAChB,wBAAwB,EAExB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,OAAO,qBAAsB,SAAQ,KAG1C;IAEC,YAAY,gBAAwB,EAAE,QAA+B;QACnE,KAAK,CAAC,QAAQ,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAES,gBAAgB,CACxB,GAAyB,EACzB,QAA0B;QAE1B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CACjC,gBAAgB,CAAC,eAAe,CACf,CAAC;QACpB,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE;YAC7B,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,OAAO,EAAE,EACd,cAAc,CAAC,eAAe,EAC9B,yFAAyF,IAAI,CAAC,gBAAgB,EAAE,CACjH,CAAC;SACH;QACD,MAAM,oBAAoB,GAAG,cAAc,CAAC,uBAAuB,CACjE,IAAI,CAAC,gBAAgB,CACtB,CAAC;QACF,IAAI,SAAS,CAAC,oBAAoB,CAAC,EAAE;YACnC,OAAO,IAAI,wBAAwB,CACjC,IAAI,CAAC,OAAO,EAAE,EACd,cAAc,CAAC,eAAe,EAC9B,IAAI,CAAC,gBAAgB,EACrB,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CACpD,CAAC;SACH;QACD,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IACvE,CAAC;IAED,eAAe,CACb,GAAyB,EACzB,QAA0B,EAC1B,MAA4B;QAE5B,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,iCAAiC,CACzC,GAAyB,EACzB,QAA0B,EAC1B,mBAAkC;QAElC,IAAI,uBAAuB,CAAC,mBAAmB,CAAC,EAAE;YAChD,OAAO,wBAAwB,CAAC,QAAQ,CACtC,mBAAmB,EACnB,IAAI,CAAC,gBAAgB,CACtB,CAAC;SACH;QACD,OAAO,IAAI,wBAAwB,CACjC,IAAI,CAAC,OAAO,EAAE,EACd,mBAAmB,CAAC,MAAM,EAC1B,IAAI,CAAC,gBAAgB,EACrB,mBAAmB,CAAC,OAAO,CAC5B,CAAC;IACJ,CAAC;IAES,WAAW,CACnB,KAAU,EACV,SAA+C;QAE/C,OAAO,IAAI,wBAAwB,CACjC,IAAI,CAAC,OAAO,EAAE,EACd,cAAc,CAAC,eAAe,EAC9B,IAAI,CAAC,gBAAgB,EACrB,uBAAuB,CAAC,KAAK,CAAC,CAC/B,CAAC;IACJ,CAAC;CACF","file":"expression/reference/NestedObjectChainExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { LiteralValueAnyArity } from \"../../value/LiteralValueAnyArity.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalRefChainErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalRefChainError,\n mapErrorObjectToMessage,\n} from \"../ExprEvalResult\";\nimport { Expr1 } from \"../Expr1.js\";\nimport { isNullish } from \"../../IfcExpressionUtils\";\nimport { LocalContextKeys } from \"../LocalContextKeys\";\n\nexport class NestedObjectChainExpr extends Expr1<\n LiteralValueAnyArity,\n LiteralValueAnyArity\n> {\n private readonly literalObjectRef: string;\n constructor(literalObjectRef: string, nextLink: NestedObjectChainExpr) {\n super(ExprKind.REF_NESTED_OBJECT_CHAIN, nextLink);\n this.literalObjectRef = literalObjectRef;\n }\n\n protected onBeforeRecusion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): undefined | ExprEvalError {\n const objectAccessor = localCtx.get(\n LocalContextKeys.OBJECT_ACCESSOR\n ) as ObjectAccessor;\n if (isNullish(objectAccessor)) {\n return new ExprEvalErrorObj(\n this.getKind(),\n ExprEvalStatus.MISSING_OPERAND,\n `No ObjectAccessor found in localContext when trying to access nested object with name'${this.literalObjectRef}`\n );\n }\n const nestedObjectAccessor = objectAccessor.getNestedObjectAccessor(\n this.literalObjectRef\n );\n if (isNullish(nestedObjectAccessor)) {\n return new ExprEvalRefChainErrorObj(\n this.getKind(),\n ExprEvalStatus.REFERENCE_ERROR,\n this.literalObjectRef,\n `No such nested object: '${this.literalObjectRef}'`\n );\n }\n localCtx.set(LocalContextKeys.OBJECT_ACCESSOR, nestedObjectAccessor);\n }\n\n calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n result: LiteralValueAnyArity\n ): LiteralValueAnyArity | ExprEvalError {\n localCtx.delete(LocalContextKeys.OBJECT_ACCESSOR);\n return result;\n }\n\n protected obtainResultForSubExpressionError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: ExprEvalError\n ): ExprEvalResult<LiteralValueAnyArity> {\n if (isExprEvalRefChainError(subExpressionResult)) {\n return ExprEvalRefChainErrorObj.bubbleUp(\n subExpressionResult,\n this.literalObjectRef\n );\n }\n return new ExprEvalRefChainErrorObj(\n this.getKind(),\n subExpressionResult.status,\n this.literalObjectRef,\n subExpressionResult.message\n );\n }\n\n protected handleError(\n error: any,\n subResult: ExprEvalResult<LiteralValueAnyArity>\n ): ExprEvalError {\n return new ExprEvalRefChainErrorObj(\n this.getKind(),\n ExprEvalStatus.REFERENCE_ERROR,\n this.literalObjectRef,\n mapErrorObjectToMessage(error)\n );\n }\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  import { Expr0 } from "../Expr0.js";
2
+ import { ExprKind } from "../ExprKind.js";
2
3
  export class PropObjectReferenceExpr extends Expr0 {
3
4
  constructor() {
4
- super();
5
+ super(ExprKind.REF_PROPERTY);
5
6
  }
6
- evaluate(ctx) {
7
+ doEvaluate(ctx) {
7
8
  return ctx.resolvePropRef();
8
9
  }
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/reference/PropObjectReferenceExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,OAAO,uBACX,SAAQ,KAAqB;IAG7B;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF","file":"expression/reference/PropObjectReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr0 } from \"../Expr0.js\";\nimport { ObjectReferenceExpr } from \"./ObjectReferenceExpr.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\n\nexport class PropObjectReferenceExpr\n extends Expr0<ObjectAccessor>\n implements ObjectReferenceExpr\n{\n constructor() {\n super();\n }\n\n evaluate(ctx: IfcExpressionContext): ObjectAccessor {\n return ctx.resolvePropRef();\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/reference/PropObjectReferenceExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,uBACX,SAAQ,KAAqB;IAG7B;QACE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,GAAyB;QAClC,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF","file":"expression/reference/PropObjectReferenceExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Expr0 } from \"../Expr0.js\";\nimport { ObjectReferenceExpr } from \"./ObjectReferenceExpr.js\";\nimport { ObjectAccessor } from \"../../context/ObjectAccessor.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport class PropObjectReferenceExpr\n extends Expr0<ObjectAccessor>\n implements ObjectReferenceExpr\n{\n constructor() {\n super(ExprKind.REF_PROPERTY);\n }\n\n doEvaluate(ctx: IfcExpressionContext): ObjectAccessor {\n return ctx.resolvePropRef();\n }\n}\n"]}
@@ -1,11 +1,12 @@
1
1
  import { Expr2 } from "../Expr2.js";
2
2
  import { StringValue } from "../../value/StringValue.js";
3
+ import { ExprKind } from "../ExprKind.js";
3
4
  export class StringConcatExpr extends Expr2 {
4
5
  constructor(left, right) {
5
- super(left, right);
6
+ super(ExprKind.STR_CONCAT, left, right);
6
7
  }
7
- evaluate(ctx) {
8
- return StringValue.of(this.left.evaluate(ctx).getValue() + this.right.evaluate(ctx).getValue());
8
+ calculateResult(ctx, localCtx, left, right) {
9
+ return StringValue.of(left.getValue() + right.getValue());
9
10
  }
10
11
  }
11
12
  //# sourceMappingURL=StringConcatExpr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/string/StringConcatExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,KAIrC;IACC,YAAY,IAAuB,EAAE,KAAwB;QAC3D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,WAAW,CAAC,EAAE,CACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CACzE,CAAC;IACJ,CAAC;CACF","file":"expression/string/StringConcatExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { StringValue } from \"../../value/StringValue.js\";\n\nexport class StringConcatExpr extends Expr2<\n Expr<StringValue>,\n Expr<StringValue>,\n StringValue\n> {\n constructor(left: Expr<StringValue>, right: Expr<StringValue>) {\n super(left, right);\n }\n\n evaluate(ctx: IfcExpressionContext): StringValue {\n return StringValue.of(\n this.left.evaluate(ctx).getValue() + this.right.evaluate(ctx).getValue()\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/string/StringConcatExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,gBAAiB,SAAQ,KAIrC;IACC,YAAY,IAAuB,EAAE,KAAwB;QAC3D,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CACb,GAAyB,EACzB,QAA0B,EAC1B,IAAiB,EACjB,KAAkB;QAElB,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF","file":"expression/string/StringConcatExpr.js","sourcesContent":["import { Expr2 } from \"../Expr2.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { StringValue } from \"../../value/StringValue.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport class StringConcatExpr extends Expr2<\n StringValue,\n StringValue,\n StringValue\n> {\n constructor(left: Expr<StringValue>, right: Expr<StringValue>) {\n super(ExprKind.STR_CONCAT, left, right);\n }\n\n calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n left: StringValue,\n right: StringValue\n ): StringValue {\n return StringValue.of(left.getValue() + right.getValue());\n }\n}\n"]}
@@ -1,9 +1,10 @@
1
- import { Expr1 } from "../Expr1.js";
2
- export class StringLiteralExpr extends Expr1 {
1
+ import { LiteralExpr } from "../LiteralExpr.js";
2
+ import { ExprKind } from "../ExprKind.js";
3
+ export class StringLiteralExpr extends LiteralExpr {
3
4
  constructor(value) {
4
- super(value);
5
+ super(ExprKind.STR_LITERAL, value);
5
6
  }
6
- evaluate(ctx) {
7
+ calculateResult(ctx) {
7
8
  return this.value;
8
9
  }
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/string/StringLiteralExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,OAAO,iBAAkB,SAAQ,KAA+B;IACpE,YAAY,KAAkB;QAC5B,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","file":"expression/string/StringLiteralExpr.js","sourcesContent":["import { Expr1 } from \"../Expr1.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { StringValue } from \"../../value/StringValue.js\";\n\nexport class StringLiteralExpr extends Expr1<StringValue, StringValue> {\n constructor(value: StringValue) {\n super(value);\n }\n\n evaluate(ctx: IfcExpressionContext): StringValue {\n return this.value;\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/string/StringLiteralExpr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,iBAAkB,SAAQ,WAAqC;IAC1E,YAAY,KAAkB;QAC5B,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,GAAyB;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","file":"expression/string/StringLiteralExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { StringValue } from \"../../value/StringValue.js\";\nimport { LiteralExpr } from \"../LiteralExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\n\nexport class StringLiteralExpr extends LiteralExpr<StringValue, StringValue> {\n constructor(value: StringValue) {\n super(ExprKind.STR_LITERAL, value);\n }\n\n calculateResult(ctx: IfcExpressionContext): StringValue {\n return this.value;\n }\n}\n"]}