ifc-expressions 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/ExprVisitor.d.ts +7 -3
  2. package/dist/IfcExpression.d.ts +27 -24
  3. package/dist/IfcExpressionErrorListener.d.ts +1 -1
  4. package/dist/IfcExpressionUtils.d.ts +2 -0
  5. package/dist/cjs/ExprVisitor.js +70 -36
  6. package/dist/cjs/ExprVisitor.js.map +1 -1
  7. package/dist/cjs/IfcExpression.js +42 -41
  8. package/dist/cjs/IfcExpression.js.map +1 -1
  9. package/dist/cjs/IfcExpressionErrorListener.js +4 -4
  10. package/dist/cjs/IfcExpressionErrorListener.js.map +1 -1
  11. package/dist/cjs/IfcExpressionUtils.js +12 -0
  12. package/dist/cjs/IfcExpressionUtils.js.map +1 -0
  13. package/dist/cjs/SyntaxErrorException.js +2 -2
  14. package/dist/cjs/SyntaxErrorException.js.map +1 -1
  15. package/dist/cjs/context/IfcElementAccessor.js +8 -8
  16. package/dist/cjs/context/IfcElementAccessor.js.map +1 -1
  17. package/dist/cjs/context/IfcExpressionContext.js.map +1 -1
  18. package/dist/cjs/context/IfcPropertyAccessor.js +2 -2
  19. package/dist/cjs/context/IfcPropertyAccessor.js.map +1 -1
  20. package/dist/cjs/context/IfcPropertySetAccessor.js +2 -2
  21. package/dist/cjs/context/IfcPropertySetAccessor.js.map +1 -1
  22. package/dist/cjs/context/IfcRootObjectAccessor.js +4 -4
  23. package/dist/cjs/context/IfcRootObjectAccessor.js.map +1 -1
  24. package/dist/cjs/context/IfcTypeObjectAccessor.js +4 -4
  25. package/dist/cjs/context/IfcTypeObjectAccessor.js.map +1 -1
  26. package/dist/cjs/context/NamedObjectAccessor.js +3 -3
  27. package/dist/cjs/context/NamedObjectAccessor.js.map +1 -1
  28. package/dist/cjs/context/ObjectAccessor.js +9 -0
  29. package/dist/cjs/context/ObjectAccessor.js.map +1 -1
  30. package/dist/cjs/expression/Expr.js.map +1 -1
  31. package/dist/cjs/expression/Expr0.js +18 -2
  32. package/dist/cjs/expression/Expr0.js.map +1 -1
  33. package/dist/cjs/expression/Expr1.js +46 -2
  34. package/dist/cjs/expression/Expr1.js.map +1 -1
  35. package/dist/cjs/expression/Expr2.js +48 -2
  36. package/dist/cjs/expression/Expr2.js.map +1 -1
  37. package/dist/cjs/expression/Expr2LeftBeforeRight.js +45 -0
  38. package/dist/cjs/expression/Expr2LeftBeforeRight.js.map +1 -0
  39. package/dist/cjs/expression/ExprBase.js +20 -0
  40. package/dist/cjs/expression/ExprBase.js.map +1 -0
  41. package/dist/cjs/expression/ExprEvalResult.js +165 -0
  42. package/dist/cjs/expression/ExprEvalResult.js.map +1 -0
  43. package/dist/cjs/expression/ExprKind.js +24 -0
  44. package/dist/cjs/expression/ExprKind.js.map +1 -0
  45. package/dist/cjs/expression/IfcExpressionEvaluationException.js.map +1 -1
  46. package/dist/cjs/expression/LiteralExpr.js +25 -0
  47. package/dist/cjs/expression/LiteralExpr.js.map +1 -0
  48. package/dist/cjs/expression/LocalContextKeys.js +7 -0
  49. package/dist/cjs/expression/LocalContextKeys.js.map +1 -0
  50. package/dist/cjs/expression/function/Func.js +93 -0
  51. package/dist/cjs/expression/function/Func.js.map +1 -0
  52. package/dist/cjs/expression/function/FuncArg.js +33 -0
  53. package/dist/cjs/expression/function/FuncArg.js.map +1 -0
  54. package/dist/cjs/expression/function/FunctionExpr.js +33 -0
  55. package/dist/cjs/expression/function/FunctionExpr.js.map +1 -0
  56. package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js +10 -0
  57. package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
  58. package/dist/cjs/expression/function/IfcExpressionFunctions.js +26 -0
  59. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -0
  60. package/dist/cjs/expression/function/arg/FuncArgBase.js +34 -0
  61. package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -0
  62. package/dist/cjs/expression/function/arg/FuncArgInt.js +25 -0
  63. package/dist/cjs/expression/function/arg/FuncArgInt.js.map +1 -0
  64. package/dist/cjs/expression/function/arg/FuncArgNumeric.js +22 -0
  65. package/dist/cjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
  66. package/dist/cjs/expression/function/impl/MAP.js +77 -0
  67. package/dist/cjs/expression/function/impl/MAP.js.map +1 -0
  68. package/dist/cjs/expression/function/impl/ROUND.js +29 -0
  69. package/dist/cjs/expression/function/impl/ROUND.js.map +1 -0
  70. package/dist/cjs/expression/numeric/DivideExpr.js +11 -9
  71. package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -1
  72. package/dist/cjs/expression/numeric/MinusExpr.js +7 -9
  73. package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -1
  74. package/dist/cjs/expression/numeric/MultiplyExpr.js +7 -9
  75. package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -1
  76. package/dist/cjs/expression/numeric/NumParenthesisExpr.js +6 -5
  77. package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
  78. package/dist/cjs/expression/numeric/NumericLiteralExpr.js +5 -4
  79. package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  80. package/dist/cjs/expression/numeric/PlusExpr.js +7 -9
  81. package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -1
  82. package/dist/cjs/expression/reference/AttributeReferenceExpr.js +21 -7
  83. package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
  84. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +5 -4
  85. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  86. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
  87. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
  88. package/dist/cjs/expression/reference/NestedObjectChainExpr.js +33 -8
  89. package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
  90. package/dist/cjs/expression/reference/ObjectReferenceExpr.js.map +1 -1
  91. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +5 -4
  92. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  93. package/dist/cjs/expression/string/StringConcatExpr.js +7 -6
  94. package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -1
  95. package/dist/cjs/expression/string/StringLiteralExpr.js +5 -4
  96. package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -1
  97. package/dist/cjs/expression/structure/ArrayExpr.js +26 -0
  98. package/dist/cjs/expression/structure/ArrayExpr.js.map +1 -0
  99. package/dist/cjs/gen/parser/IfcExpressionLexer.js +142 -0
  100. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -0
  101. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -0
  102. package/dist/cjs/{parser → gen/parser}/IfcExpressionParser.js +148 -104
  103. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -0
  104. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
  105. package/dist/cjs/value/ArrayValue.js +23 -0
  106. package/dist/cjs/value/ArrayValue.js.map +1 -0
  107. package/dist/cjs/value/BooleanValue.js +12 -3
  108. package/dist/cjs/value/BooleanValue.js.map +1 -1
  109. package/dist/cjs/value/LiteralValue.js.map +1 -1
  110. package/dist/cjs/value/LiteralValueAnyArity.js.map +1 -1
  111. package/dist/cjs/value/LogicalValue.js +14 -3
  112. package/dist/cjs/value/LogicalValue.js.map +1 -1
  113. package/dist/cjs/value/NumericValue.js +16 -7
  114. package/dist/cjs/value/NumericValue.js.map +1 -1
  115. package/dist/cjs/value/PrimitiveValueType.js.map +1 -1
  116. package/dist/cjs/value/ReferenceValue.js +12 -3
  117. package/dist/cjs/value/ReferenceValue.js.map +1 -1
  118. package/dist/cjs/value/StringValue.js +12 -3
  119. package/dist/cjs/value/StringValue.js.map +1 -1
  120. package/dist/cjs/value/Value.js +0 -10
  121. package/dist/cjs/value/Value.js.map +1 -1
  122. package/dist/context/IfcElementAccessor.d.ts +6 -6
  123. package/dist/context/IfcExpressionContext.d.ts +2 -2
  124. package/dist/context/IfcPropertyAccessor.d.ts +4 -4
  125. package/dist/context/IfcPropertySetAccessor.d.ts +4 -4
  126. package/dist/context/IfcRootObjectAccessor.d.ts +2 -2
  127. package/dist/context/IfcTypeObjectAccessor.d.ts +4 -4
  128. package/dist/context/NamedObjectAccessor.d.ts +2 -2
  129. package/dist/context/ObjectAccessor.d.ts +2 -1
  130. package/dist/expression/Expr.d.ts +5 -2
  131. package/dist/expression/Expr0.d.ts +9 -5
  132. package/dist/expression/Expr1.d.ts +20 -5
  133. package/dist/expression/Expr2.d.ts +15 -6
  134. package/dist/expression/Expr2LeftBeforeRight.d.ts +14 -0
  135. package/dist/expression/ExprBase.d.ts +11 -0
  136. package/dist/expression/ExprEvalResult.d.ts +125 -0
  137. package/dist/expression/ExprKind.d.ts +19 -0
  138. package/dist/expression/LiteralExpr.d.ts +11 -0
  139. package/dist/expression/LocalContextKeys.d.ts +3 -0
  140. package/dist/expression/function/Func.d.ts +30 -0
  141. package/dist/expression/function/FuncArg.d.ts +18 -0
  142. package/dist/expression/function/FunctionExpr.d.ts +13 -0
  143. package/dist/expression/function/IfcExpressionFunctionConfigException.d.ts +3 -0
  144. package/dist/expression/function/IfcExpressionFunctions.d.ts +7 -0
  145. package/dist/expression/function/arg/FuncArgBase.d.ts +19 -0
  146. package/dist/expression/function/arg/FuncArgInt.d.ts +8 -0
  147. package/dist/expression/function/arg/FuncArgNumeric.d.ts +8 -0
  148. package/dist/expression/function/impl/MAP.d.ts +10 -0
  149. package/dist/expression/function/impl/ROUND.d.ts +9 -0
  150. package/dist/expression/numeric/DivideExpr.d.ts +8 -6
  151. package/dist/expression/numeric/MinusExpr.d.ts +7 -6
  152. package/dist/expression/numeric/MultiplyExpr.d.ts +7 -6
  153. package/dist/expression/numeric/NumParenthesisExpr.d.ts +6 -6
  154. package/dist/expression/numeric/NumericLiteralExpr.d.ts +6 -5
  155. package/dist/expression/numeric/PlusExpr.d.ts +6 -6
  156. package/dist/expression/reference/AttributeReferenceExpr.d.ts +12 -8
  157. package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +5 -5
  158. package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +7 -6
  159. package/dist/expression/reference/NestedObjectChainExpr.d.ts +11 -8
  160. package/dist/expression/reference/ObjectReferenceExpr.d.ts +2 -2
  161. package/dist/expression/reference/PropObjectReferenceExpr.d.ts +5 -5
  162. package/dist/expression/string/StringConcatExpr.d.ts +6 -6
  163. package/dist/expression/string/StringLiteralExpr.d.ts +5 -5
  164. package/dist/expression/structure/ArrayExpr.d.ts +11 -0
  165. package/dist/{parser → gen/parser}/IfcExpressionLexer.d.ts +10 -9
  166. package/dist/{parser → gen/parser}/IfcExpressionParser.d.ts +10 -9
  167. package/dist/mjs/ExprVisitor.js +57 -23
  168. package/dist/mjs/ExprVisitor.js.map +1 -1
  169. package/dist/mjs/IfcExpression.js +21 -22
  170. package/dist/mjs/IfcExpression.js.map +1 -1
  171. package/dist/mjs/IfcExpressionErrorListener.js +3 -3
  172. package/dist/mjs/IfcExpressionErrorListener.js.map +1 -1
  173. package/dist/mjs/IfcExpressionUtils.js +7 -0
  174. package/dist/mjs/IfcExpressionUtils.js.map +1 -0
  175. package/dist/mjs/SyntaxErrorException.js +2 -2
  176. package/dist/mjs/SyntaxErrorException.js.map +1 -1
  177. package/dist/mjs/context/IfcElementAccessor.js +6 -6
  178. package/dist/mjs/context/IfcElementAccessor.js.map +1 -1
  179. package/dist/mjs/context/IfcExpressionContext.js.map +1 -1
  180. package/dist/mjs/context/IfcPropertyAccessor.js +1 -1
  181. package/dist/mjs/context/IfcPropertyAccessor.js.map +1 -1
  182. package/dist/mjs/context/IfcPropertySetAccessor.js +1 -1
  183. package/dist/mjs/context/IfcPropertySetAccessor.js.map +1 -1
  184. package/dist/mjs/context/IfcRootObjectAccessor.js +2 -2
  185. package/dist/mjs/context/IfcRootObjectAccessor.js.map +1 -1
  186. package/dist/mjs/context/IfcTypeObjectAccessor.js +3 -3
  187. package/dist/mjs/context/IfcTypeObjectAccessor.js.map +1 -1
  188. package/dist/mjs/context/NamedObjectAccessor.js +1 -1
  189. package/dist/mjs/context/NamedObjectAccessor.js.map +1 -1
  190. package/dist/mjs/context/ObjectAccessor.js +7 -1
  191. package/dist/mjs/context/ObjectAccessor.js.map +1 -1
  192. package/dist/mjs/expression/Expr.js.map +1 -1
  193. package/dist/mjs/expression/Expr0.js +18 -2
  194. package/dist/mjs/expression/Expr0.js.map +1 -1
  195. package/dist/mjs/expression/Expr1.js +46 -2
  196. package/dist/mjs/expression/Expr1.js.map +1 -1
  197. package/dist/mjs/expression/Expr2.js +48 -2
  198. package/dist/mjs/expression/Expr2.js.map +1 -1
  199. package/dist/mjs/expression/Expr2LeftBeforeRight.js +41 -0
  200. package/dist/mjs/expression/Expr2LeftBeforeRight.js.map +1 -0
  201. package/dist/mjs/expression/ExprBase.js +16 -0
  202. package/dist/mjs/expression/ExprBase.js.map +1 -0
  203. package/dist/mjs/expression/ExprEvalResult.js +144 -0
  204. package/dist/mjs/expression/ExprEvalResult.js.map +1 -0
  205. package/dist/mjs/expression/ExprKind.js +21 -0
  206. package/dist/mjs/expression/ExprKind.js.map +1 -0
  207. package/dist/mjs/expression/LiteralExpr.js +21 -0
  208. package/dist/mjs/expression/LiteralExpr.js.map +1 -0
  209. package/dist/mjs/expression/LocalContextKeys.js +4 -0
  210. package/dist/mjs/expression/LocalContextKeys.js.map +1 -0
  211. package/dist/mjs/expression/function/Func.js +89 -0
  212. package/dist/mjs/expression/function/Func.js.map +1 -0
  213. package/dist/mjs/expression/function/FuncArg.js +29 -0
  214. package/dist/mjs/expression/function/FuncArg.js.map +1 -0
  215. package/dist/mjs/expression/function/FunctionExpr.js +29 -0
  216. package/dist/mjs/expression/function/FunctionExpr.js.map +1 -0
  217. package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js +6 -0
  218. package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js.map +1 -0
  219. package/dist/mjs/expression/function/IfcExpressionFunctions.js +22 -0
  220. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -0
  221. package/dist/mjs/expression/function/arg/FuncArgBase.js +30 -0
  222. package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -0
  223. package/dist/mjs/expression/function/arg/FuncArgInt.js +21 -0
  224. package/dist/mjs/expression/function/arg/FuncArgInt.js.map +1 -0
  225. package/dist/mjs/expression/function/arg/FuncArgNumeric.js +18 -0
  226. package/dist/mjs/expression/function/arg/FuncArgNumeric.js.map +1 -0
  227. package/dist/mjs/expression/function/impl/MAP.js +73 -0
  228. package/dist/mjs/expression/function/impl/MAP.js.map +1 -0
  229. package/dist/mjs/expression/function/impl/ROUND.js +25 -0
  230. package/dist/mjs/expression/function/impl/ROUND.js.map +1 -0
  231. package/dist/mjs/expression/numeric/DivideExpr.js +10 -8
  232. package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -1
  233. package/dist/mjs/expression/numeric/MinusExpr.js +6 -8
  234. package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -1
  235. package/dist/mjs/expression/numeric/MultiplyExpr.js +6 -8
  236. package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -1
  237. package/dist/mjs/expression/numeric/NumParenthesisExpr.js +5 -4
  238. package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +1 -1
  239. package/dist/mjs/expression/numeric/NumericLiteralExpr.js +5 -4
  240. package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  241. package/dist/mjs/expression/numeric/PlusExpr.js +6 -8
  242. package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -1
  243. package/dist/mjs/expression/reference/AttributeReferenceExpr.js +20 -6
  244. package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +1 -1
  245. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +4 -3
  246. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  247. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +19 -5
  248. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +1 -1
  249. package/dist/mjs/expression/reference/NestedObjectChainExpr.js +33 -8
  250. package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +1 -1
  251. package/dist/mjs/expression/reference/ObjectReferenceExpr.js.map +1 -1
  252. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +4 -3
  253. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  254. package/dist/mjs/expression/string/StringConcatExpr.js +6 -5
  255. package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -1
  256. package/dist/mjs/expression/string/StringLiteralExpr.js +5 -4
  257. package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -1
  258. package/dist/mjs/expression/structure/ArrayExpr.js +22 -0
  259. package/dist/mjs/expression/structure/ArrayExpr.js.map +1 -0
  260. package/dist/mjs/gen/parser/IfcExpressionLexer.js +140 -0
  261. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -0
  262. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -0
  263. package/dist/mjs/{parser → gen/parser}/IfcExpressionParser.js +148 -104
  264. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -0
  265. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -0
  266. package/dist/mjs/value/ArrayValue.js +19 -0
  267. package/dist/mjs/value/ArrayValue.js.map +1 -0
  268. package/dist/mjs/value/BooleanValue.js +12 -3
  269. package/dist/mjs/value/BooleanValue.js.map +1 -1
  270. package/dist/mjs/value/LiteralValue.js.map +1 -1
  271. package/dist/mjs/value/LiteralValueAnyArity.js.map +1 -1
  272. package/dist/mjs/value/LogicalValue.js +14 -3
  273. package/dist/mjs/value/LogicalValue.js.map +1 -1
  274. package/dist/mjs/value/NumericValue.js +16 -4
  275. package/dist/mjs/value/NumericValue.js.map +1 -1
  276. package/dist/mjs/value/ReferenceValue.js +12 -3
  277. package/dist/mjs/value/ReferenceValue.js.map +1 -1
  278. package/dist/mjs/value/StringValue.js +12 -3
  279. package/dist/mjs/value/StringValue.js.map +1 -1
  280. package/dist/mjs/value/Value.js +1 -8
  281. package/dist/mjs/value/Value.js.map +1 -1
  282. package/dist/value/ArrayValue.d.ts +12 -0
  283. package/dist/value/BooleanValue.d.ts +9 -2
  284. package/dist/value/LiteralValue.d.ts +7 -6
  285. package/dist/value/LiteralValueAnyArity.d.ts +2 -2
  286. package/dist/value/LogicalValue.d.ts +9 -2
  287. package/dist/value/NumericValue.d.ts +12 -5
  288. package/dist/value/ReferenceValue.d.ts +9 -2
  289. package/dist/value/StringValue.d.ts +9 -2
  290. package/dist/value/Value.d.ts +3 -4
  291. package/package.json +4 -3
  292. package/dist/cjs/expression/ArrayExpr.js +0 -3
  293. package/dist/cjs/expression/ArrayExpr.js.map +0 -1
  294. package/dist/cjs/expression/numeric/MultiplyByExpr.js +0 -18
  295. package/dist/cjs/expression/numeric/MultiplyByExpr.js.map +0 -1
  296. package/dist/cjs/parser/IfcExpressionLexer.js +0 -140
  297. package/dist/cjs/parser/IfcExpressionLexer.js.map +0 -1
  298. package/dist/cjs/parser/IfcExpressionListener.js.map +0 -1
  299. package/dist/cjs/parser/IfcExpressionParser.js.map +0 -1
  300. package/dist/cjs/parser/IfcExpressionVisitor.js.map +0 -1
  301. package/dist/cjs/utils.js +0 -12
  302. package/dist/cjs/utils.js.map +0 -1
  303. package/dist/expression/ArrayExpr.d.ts +0 -3
  304. package/dist/expression/numeric/MultiplyByExpr.d.ts +0 -8
  305. package/dist/mjs/expression/ArrayExpr.js +0 -2
  306. package/dist/mjs/expression/ArrayExpr.js.map +0 -1
  307. package/dist/mjs/expression/numeric/MultiplyByExpr.js +0 -14
  308. package/dist/mjs/expression/numeric/MultiplyByExpr.js.map +0 -1
  309. package/dist/mjs/parser/IfcExpressionLexer.js +0 -138
  310. package/dist/mjs/parser/IfcExpressionLexer.js.map +0 -1
  311. package/dist/mjs/parser/IfcExpressionListener.js.map +0 -1
  312. package/dist/mjs/parser/IfcExpressionParser.js.map +0 -1
  313. package/dist/mjs/parser/IfcExpressionVisitor.js.map +0 -1
  314. package/dist/mjs/utils.js +0 -7
  315. package/dist/mjs/utils.js.map +0 -1
  316. package/dist/utils.d.ts +0 -2
  317. /package/dist/cjs/{parser → gen/parser}/IfcExpressionListener.js +0 -0
  318. /package/dist/cjs/{parser → gen/parser}/IfcExpressionVisitor.js +0 -0
  319. /package/dist/{parser → gen/parser}/IfcExpressionListener.d.ts +0 -0
  320. /package/dist/{parser → gen/parser}/IfcExpressionVisitor.d.ts +0 -0
  321. /package/dist/mjs/{parser → gen/parser}/IfcExpressionListener.js +0 -0
  322. /package/dist/mjs/{parser → gen/parser}/IfcExpressionVisitor.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["context/NamedObjectAccessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,OAAgB,mBAAmB;IAKvC,YAAY,CAAC,IAAY;QACvB,QAAQ,IAAI,EAAE;YACZ,KAAK,MAAM;gBACT,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,KAAK,aAAa;gBAChB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,uBAAuB,CAAC,IAAY;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;CACF","file":"context/NamedObjectAccessor.js","sourcesContent":["import { ObjectAccessor } from \"./ObjectAccessor\";\nimport { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity\";\nimport { StringValue } from \"../value/StringValue\";\n\nexport abstract class NamedObjectAccessor implements ObjectAccessor {\n abstract getName(): string;\n\n abstract getDescription(): string;\n\n getAttribute(name: string): LiteralValueAnyArity | undefined {\n switch (name) {\n case \"name\":\n return new StringValue(this.getName());\n case \"description\":\n return new StringValue(this.getDescription());\n }\n return undefined;\n }\n\n listAttributes(): Array<string> {\n return [\"name\", \"description\"];\n }\n\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined {\n return undefined;\n }\n\n listNestedObjects(): Array<string> {\n return [];\n }\n}\n"]}
1
+ {"version":3,"sources":["context/NamedObjectAccessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,OAAgB,mBAAmB;IAKvC,YAAY,CAAC,IAAY;QACvB,QAAQ,IAAI,EAAE;YACZ,KAAK,MAAM;gBACT,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,KAAK,aAAa;gBAChB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,uBAAuB,CAAC,IAAY;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;CACF","file":"context/NamedObjectAccessor.js","sourcesContent":["import { ObjectAccessor } from \"./ObjectAccessor.js\";\nimport { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity.js\";\nimport { StringValue } from \"../value/StringValue.js\";\n\nexport abstract class NamedObjectAccessor implements ObjectAccessor {\n abstract getName(): string;\n\n abstract getDescription(): string;\n\n getAttribute(name: string): LiteralValueAnyArity | undefined {\n switch (name) {\n case \"name\":\n return new StringValue(this.getName());\n case \"description\":\n return new StringValue(this.getDescription());\n }\n return undefined;\n }\n\n listAttributes(): Array<string> {\n return [\"name\", \"description\"];\n }\n\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined {\n return undefined;\n }\n\n listNestedObjects(): Array<string> {\n return [];\n }\n}\n"]}
@@ -1,2 +1,8 @@
1
- export {};
1
+ export function isObjectAccessor(arg) {
2
+ return (typeof arg === "object" &&
3
+ typeof arg.getNestedObjectAccessor === "function" &&
4
+ typeof arg.getAttribute === "function" &&
5
+ typeof arg.listNestedObjects === "function" &&
6
+ typeof arg.listAttributes === "function");
7
+ }
2
8
  //# sourceMappingURL=ObjectAccessor.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["context/ObjectAccessor.ts"],"names":[],"mappings":"","file":"context/ObjectAccessor.js","sourcesContent":["import { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity\";\n\nexport interface ObjectAccessor {\n /**\n * If there is a nested object with the specified name (.e.g the 'pset' in $prop.pset),\n * return an ObjectAccessor for it.\n * @param name\n */\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined;\n\n /**\n * If the object has the attribute of the specified name, return it as (an array of (array of)) LiteralValue.\n * @param name\n */\n getAttribute(name: string): LiteralValueAnyArity | undefined;\n\n listNestedObjects(): Array<string>;\n\n listAttributes(): Array<string>;\n}\n"]}
1
+ {"version":3,"sources":["context/ObjectAccessor.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACvC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,CAAC,uBAAuB,KAAK,UAAU;QACjD,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU;QACtC,OAAO,GAAG,CAAC,iBAAiB,KAAK,UAAU;QAC3C,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,CACzC,CAAC;AACJ,CAAC","file":"context/ObjectAccessor.js","sourcesContent":["import { LiteralValueAnyArity } from \"../value/LiteralValueAnyArity.js\";\n\nexport interface ObjectAccessor {\n /**\n * If there is a nested object with the specified name (.e.g the 'pset' in $prop.pset),\n * return an ObjectAccessor for it.\n * @param name\n */\n getNestedObjectAccessor(name: string): ObjectAccessor | undefined;\n\n /**\n * If the object has the attribute of the specified name, return it as (an array of (array of)) LiteralValue.\n * @param name\n */\n getAttribute(name: string): LiteralValueAnyArity | undefined;\n\n listNestedObjects(): Array<string>;\n\n listAttributes(): Array<string>;\n}\n\nexport function isObjectAccessor(arg: any): arg is ObjectAccessor {\n return (\n typeof arg === \"object\" &&\n typeof arg.getNestedObjectAccessor === \"function\" &&\n typeof arg.getAttribute === \"function\" &&\n typeof arg.listNestedObjects === \"function\" &&\n typeof arg.listAttributes === \"function\"\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/Expr.ts"],"names":[],"mappings":"","file":"expression/Expr.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext\";\n\nexport interface Expr<T> {\n evaluate(ctx: IfcExpressionContext): T;\n}\n"]}
1
+ {"version":3,"sources":["expression/Expr.ts"],"names":[],"mappings":"","file":"expression/Expr.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport { ExprEvalResult } from \"./ExprEvalResult\";\n\nexport interface Expr<T> {\n evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<T>;\n getKind(): ExprKind;\n}\n"]}
@@ -1,4 +1,20 @@
1
- export class Expr0 {
2
- constructor() { }
1
+ import { ExprBase } from "./ExprBase";
2
+ import { ExprEvalErrorObj, ExprEvalStatus, } from "./ExprEvalResult";
3
+ export class Expr0 extends ExprBase {
4
+ constructor(kind) {
5
+ super(kind);
6
+ }
7
+ evaluate(ctx, localCtx) {
8
+ try {
9
+ const result = this.doEvaluate(ctx, localCtx);
10
+ return this.wrapInResultIfNecessary(result);
11
+ }
12
+ catch (error) {
13
+ return this.handleError(error);
14
+ }
15
+ }
16
+ handleError(error) {
17
+ return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.ERROR, error);
18
+ }
3
19
  }
4
20
  //# sourceMappingURL=Expr0.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/Expr0.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,KAAK;IACzB,gBAAyB,CAAC;CAG3B","file":"expression/Expr0.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext\";\n\nexport abstract class Expr0<E> implements Expr<E> {\n protected constructor() {}\n\n abstract evaluate(ctx: IfcExpressionContext): E;\n}\n"]}
1
+ {"version":3,"sources":["expression/Expr0.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAEL,gBAAgB,EAEhB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,OAAgB,KAAS,SAAQ,QAAW;IAChD,YAAsB,IAAc;QAClC,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAOM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;IACH,CAAC;IAES,WAAW,CAAC,KAAU;QAC9B,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF","file":"expression/Expr0.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport { ExprBase } from \"./ExprBase\";\nimport {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"./ExprEvalResult\";\n\nexport abstract class Expr0<E> extends ExprBase<E> {\n protected constructor(kind: ExprKind) {\n super(kind);\n }\n\n protected abstract doEvaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): E | ExprEvalError;\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n try {\n const result = this.doEvaluate(ctx, localCtx);\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n protected handleError(error: any): ExprEvalError {\n return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.ERROR, error);\n }\n}\n"]}
@@ -1,6 +1,50 @@
1
- export class Expr1 {
2
- constructor(value) {
1
+ import { ExprEvalConsequentialError1Obj, ExprEvalError1Obj, ExprEvalErrorUndefinedResult, ExprEvalStatus, isExprEvalError, } from "./ExprEvalResult";
2
+ import { ExprBase } from "./ExprBase";
3
+ import { isNullish } from "../IfcExpressionUtils";
4
+ export class Expr1 extends ExprBase {
5
+ constructor(exprKind, value) {
6
+ super(exprKind);
3
7
  this.value = value;
4
8
  }
9
+ /**
10
+ * Override to generate a more specific error result.
11
+ * @param ctx
12
+ * @param localCtx
13
+ * @param subExpressionResult
14
+ * @protected
15
+ */
16
+ obtainResultForSubExpressionError(ctx, localCtx, subExpressionResult) {
17
+ return new ExprEvalConsequentialError1Obj(this.getKind(), subExpressionResult);
18
+ }
19
+ // calculate the final result
20
+ makeErrorOrCalculate(ctx, localCtx, subExpressionResult) {
21
+ if (isExprEvalError(subExpressionResult)) {
22
+ return this.obtainResultForSubExpressionError(ctx, localCtx, subExpressionResult);
23
+ }
24
+ return this.wrapInResultIfNecessary(this.calculateResult(ctx, localCtx, subExpressionResult.result));
25
+ }
26
+ onBeforeRecusion(ctx, localCtx) {
27
+ // do something before we calculate the subresult
28
+ return undefined;
29
+ }
30
+ evaluate(ctx, localCtx) {
31
+ const beforeRecursionError = this.onBeforeRecusion(ctx, localCtx);
32
+ if (!isNullish(beforeRecursionError)) {
33
+ return beforeRecursionError;
34
+ }
35
+ const subResult = this.value.evaluate(ctx, localCtx);
36
+ if (isNullish(subResult)) {
37
+ return new ExprEvalError1Obj(this.getKind(), new ExprEvalErrorUndefinedResult(this.value.getKind()), ExprEvalStatus.MISSING_OPERAND);
38
+ }
39
+ try {
40
+ return this.makeErrorOrCalculate(ctx, localCtx, subResult);
41
+ }
42
+ catch (error) {
43
+ return this.handleError(error, subResult);
44
+ }
45
+ }
46
+ handleError(error, subResult) {
47
+ return new ExprEvalError1Obj(this.getKind(), subResult, ExprEvalStatus.ERROR, error);
48
+ }
5
49
  }
6
50
  //# sourceMappingURL=Expr1.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/Expr1.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,KAAK;IAGzB,YAAsB,KAAQ;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CAGF","file":"expression/Expr1.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext\";\n\nexport abstract class Expr1<V, E> implements Expr<E> {\n readonly value: V;\n\n protected constructor(value: V) {\n this.value = value;\n }\n\n abstract evaluate(ctx: IfcExpressionContext): E;\n}\n"]}
1
+ {"version":3,"sources":["expression/Expr1.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,8BAA8B,EAE9B,iBAAiB,EACjB,4BAA4B,EAE5B,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,OAAgB,KAAY,SAAQ,QAAW;IAGnD,YAAsB,QAAkB,EAAE,KAAc;QACtD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAQD;;;;;;OAMG;IACO,iCAAiC,CACzC,GAAyB,EACzB,QAA0B,EAC1B,mBAAkC;QAElC,OAAO,IAAI,8BAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,6BAA6B;IACrB,oBAAoB,CAC1B,GAAyB,EACzB,QAA0B,EAC1B,mBAAsC;QAEtC,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,iCAAiC,CAC3C,GAAG,EACH,QAAQ,EACR,mBAAmB,CACpB,CAAC;SACH;QACD,OAAO,IAAI,CAAC,uBAAuB,CACjC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAChE,CAAC;IACJ,CAAC;IAES,gBAAgB,CACxB,GAAyB,EACzB,QAA0B;QAE1B,iDAAiD;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE;YACpC,OAAO,oBAAoB,CAAC;SAC7B;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YACxB,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACtD,cAAc,CAAC,eAAe,CAC/B,CAAC;SACH;QACD,IAAI;YACF,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SAC3C;IACH,CAAC;IAES,WAAW,CACnB,KAAU,EACV,SAA4B;QAE5B,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,SAAS,EACT,cAAc,CAAC,KAAK,EACpB,KAAK,CACN,CAAC;IACJ,CAAC;CACF","file":"expression/Expr1.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError1Obj,\n ExprEvalError,\n ExprEvalError1Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalError,\n} from \"./ExprEvalResult\";\nimport { ExprBase } from \"./ExprBase\";\nimport { Expr } from \"./Expr\";\nimport { isNullish } from \"../IfcExpressionUtils\";\n\nexport abstract class Expr1<V, E> extends ExprBase<E> {\n readonly value: Expr<V>;\n\n protected constructor(exprKind: ExprKind, value: Expr<V>) {\n super(exprKind);\n this.value = value;\n }\n\n protected abstract calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: V\n ): E | ExprEvalError;\n\n /**\n * Override to generate a more specific error result.\n * @param ctx\n * @param localCtx\n * @param subExpressionResult\n * @protected\n */\n protected obtainResultForSubExpressionError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: ExprEvalError\n ): ExprEvalResult<E> {\n return new ExprEvalConsequentialError1Obj(\n this.getKind(),\n subExpressionResult\n );\n }\n\n // calculate the final result\n private makeErrorOrCalculate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: ExprEvalResult<V>\n ): ExprEvalResult<E> {\n if (isExprEvalError(subExpressionResult)) {\n return this.obtainResultForSubExpressionError(\n ctx,\n localCtx,\n subExpressionResult\n );\n }\n return this.wrapInResultIfNecessary(\n this.calculateResult(ctx, localCtx, subExpressionResult.result)\n );\n }\n\n protected onBeforeRecusion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): undefined | ExprEvalError {\n // do something before we calculate the subresult\n return undefined;\n }\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n const beforeRecursionError = this.onBeforeRecusion(ctx, localCtx);\n if (!isNullish(beforeRecursionError)) {\n return beforeRecursionError;\n }\n const subResult = this.value.evaluate(ctx, localCtx);\n if (isNullish(subResult)) {\n return new ExprEvalError1Obj(\n this.getKind(),\n new ExprEvalErrorUndefinedResult(this.value.getKind()),\n ExprEvalStatus.MISSING_OPERAND\n );\n }\n try {\n return this.makeErrorOrCalculate(ctx, localCtx, subResult);\n } catch (error) {\n return this.handleError(error, subResult);\n }\n }\n\n protected handleError(\n error: any,\n subResult: ExprEvalResult<V>\n ): ExprEvalError {\n return new ExprEvalError1Obj(\n this.getKind(),\n subResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
@@ -1,7 +1,53 @@
1
- export class Expr2 {
2
- constructor(left, right) {
1
+ import { ExprBase } from "./ExprBase";
2
+ import { ExprEvalConsequentialError1Obj, ExprEvalConsequentialError2Obj, ExprEvalError2Obj, ExprEvalErrorUndefinedResult, ExprEvalStatus, isExprEvalError, isExprEvalSuccess, } from "./ExprEvalResult";
3
+ import { isNullish } from "../IfcExpressionUtils";
4
+ export class Expr2 extends ExprBase {
5
+ constructor(exprKind, left, right) {
6
+ super(exprKind);
3
7
  this.left = left;
4
8
  this.right = right;
5
9
  }
10
+ onBeforeRecursion(ctx, localCtx) {
11
+ // override if subclass needs to do something before recursing
12
+ }
13
+ onAfterLeftRecursion(ctx, localCtx, leftResult) {
14
+ // override if subclass needs to do something with the left result, such as put it in the local context
15
+ }
16
+ evaluate(ctx, localCtx) {
17
+ this.onBeforeRecursion(ctx, localCtx);
18
+ const leftResult = this.left.evaluate(ctx, localCtx);
19
+ if (isNullish(leftResult)) {
20
+ return new ExprEvalErrorUndefinedResult(this.left.getKind());
21
+ }
22
+ if (isExprEvalError(leftResult)) {
23
+ return this.makeErrorForLeftSubExprError(ctx, localCtx, leftResult);
24
+ }
25
+ this.onAfterLeftRecursion(ctx, localCtx, leftResult.result);
26
+ const rightResult = this.right.evaluate(ctx, localCtx);
27
+ if (isNullish(rightResult)) {
28
+ return new ExprEvalErrorUndefinedResult(this.right.getKind());
29
+ }
30
+ if (isExprEvalSuccess(rightResult)) {
31
+ try {
32
+ const result = this.calculateResult(ctx, localCtx, leftResult.result, rightResult.result);
33
+ return this.wrapInResultIfNecessary(result);
34
+ }
35
+ catch (error) {
36
+ return this.handleError(error, leftResult, rightResult);
37
+ }
38
+ }
39
+ else {
40
+ return this.makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult);
41
+ }
42
+ }
43
+ makeResultForRightSubExprError(ctx, localCtx, leftResult, rightResult) {
44
+ return new ExprEvalConsequentialError2Obj(this.getKind(), leftResult, rightResult);
45
+ }
46
+ makeErrorForLeftSubExprError(ctx, localCtx, leftResult) {
47
+ return new ExprEvalConsequentialError1Obj(this.getKind(), leftResult, "Cannot evaluate attribute reference");
48
+ }
49
+ handleError(error, leftResult, rightResult) {
50
+ return new ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalStatus.ERROR, error);
51
+ }
6
52
  }
7
53
  //# sourceMappingURL=Expr2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/Expr2.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,KAAK;IAIzB,YAAsB,IAAO,EAAE,KAAQ;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CAGF","file":"expression/Expr2.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext\";\n\nexport abstract class Expr2<L, R, E> implements Expr<E> {\n readonly left: L;\n readonly right: R;\n\n protected constructor(left: L, right: R) {\n this.left = left;\n this.right = right;\n }\n\n abstract evaluate(ctx: IfcExpressionContext): E;\n}\n"]}
1
+ {"version":3,"sources":["expression/Expr2.ts"],"names":[],"mappings":"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","file":"expression/Expr2.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprBase } from \"./ExprBase\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError1Obj,\n ExprEvalConsequentialError2Obj,\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./ExprEvalResult\";\nimport { isNullish } from \"../IfcExpressionUtils\";\nimport { Expr } from \"./Expr\";\n\nexport abstract class Expr2<L, R, E> extends ExprBase<E> {\n readonly left: Expr<L>;\n readonly right: Expr<R>;\n\n protected constructor(exprKind: ExprKind, left: Expr<L>, right: Expr<R>) {\n super(exprKind);\n this.left = left;\n this.right = right;\n }\n\n protected abstract calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftOperand: L,\n rightOperand: R\n ): E | ExprEvalError;\n\n protected onBeforeRecursion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ) {\n // override if subclass needs to do something before recursing\n }\n\n protected onAfterLeftRecursion(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: L\n ) {\n // override if subclass needs to do something with the left result, such as put it in the local context\n }\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n this.onBeforeRecursion(ctx, localCtx);\n const leftResult = this.left.evaluate(ctx, localCtx);\n if (isNullish(leftResult)) {\n return new ExprEvalErrorUndefinedResult(this.left.getKind());\n }\n if (isExprEvalError(leftResult)) {\n return this.makeErrorForLeftSubExprError(ctx, localCtx, leftResult);\n }\n this.onAfterLeftRecursion(ctx, localCtx, leftResult.result);\n const rightResult = this.right.evaluate(ctx, localCtx);\n if (isNullish(rightResult)) {\n return new ExprEvalErrorUndefinedResult(this.right.getKind());\n }\n if (isExprEvalSuccess(rightResult)) {\n try {\n const result = this.calculateResult(\n ctx,\n localCtx,\n leftResult.result,\n rightResult.result\n );\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error, leftResult, rightResult);\n }\n } else {\n return this.makeResultForRightSubExprError(\n ctx,\n localCtx,\n leftResult,\n rightResult\n );\n }\n }\n\n protected makeResultForRightSubExprError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalError\n ): ExprEvalResult<E> {\n return new ExprEvalConsequentialError2Obj(\n this.getKind(),\n leftResult,\n rightResult\n );\n }\n\n protected makeErrorForLeftSubExprError(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftResult: ExprEvalError\n ): ExprEvalError {\n return new ExprEvalConsequentialError1Obj(\n this.getKind(),\n leftResult,\n \"Cannot evaluate attribute reference\"\n );\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalResult<R>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n this.getKind(),\n leftResult,\n rightResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ import { ExprBase } from "./ExprBase";
2
+ import { ExprEvalConsequentialError2Obj, ExprEvalError2Obj, ExprEvalErrorUndefinedResult, ExprEvalStatus, isExprEvalSuccess, } from "./ExprEvalResult";
3
+ import { isNullish } from "../IfcExpressionUtils";
4
+ export class Expr2LeftBeforeRight extends ExprBase {
5
+ constructor(exprKind, left, right) {
6
+ super(exprKind);
7
+ this.left = left;
8
+ this.right = right;
9
+ }
10
+ evaluate(ctx, localCtx) {
11
+ const leftResult = this.left.evaluate(ctx, localCtx);
12
+ if (isNullish(leftResult)) {
13
+ return new ExprEvalErrorUndefinedResult(this.left.getKind());
14
+ }
15
+ this.handleLeftResult(leftResult);
16
+ const rightResult = this.right.evaluate(ctx, localCtx);
17
+ if (isNullish(leftResult) || isNullish(rightResult)) {
18
+ return new ExprEvalError2Obj(this.getKind(), isNullish(leftResult)
19
+ ? new ExprEvalErrorUndefinedResult(this.left.getKind())
20
+ : leftResult, isNullish(rightResult)
21
+ ? new ExprEvalErrorUndefinedResult(this.right.getKind())
22
+ : rightResult, ExprEvalStatus.MISSING_OPERAND);
23
+ }
24
+ if (isExprEvalSuccess(leftResult) && isExprEvalSuccess(rightResult)) {
25
+ try {
26
+ const result = this.doEvaluate(ctx, leftResult.result, rightResult.result);
27
+ return this.wrapInResultIfNecessary(result);
28
+ }
29
+ catch (error) {
30
+ return this.handleError(error, leftResult, rightResult);
31
+ }
32
+ }
33
+ else {
34
+ return new ExprEvalConsequentialError2Obj(this.getKind(), leftResult, rightResult);
35
+ }
36
+ }
37
+ handleError(error, leftResult, rightResult) {
38
+ return new ExprEvalError2Obj(this.getKind(), leftResult, rightResult, ExprEvalStatus.ERROR, error);
39
+ }
40
+ }
41
+ //# sourceMappingURL=Expr2LeftBeforeRight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/Expr2LeftBeforeRight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACL,8BAA8B,EAE9B,iBAAiB,EACjB,4BAA4B,EAE5B,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,OAAgB,oBAA8B,SAAQ,QAAW;IAIrE,YAAsB,QAAkB,EAAE,IAAa,EAAE,KAAc;QACrE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAUM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE;YACzB,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE;YACnD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,SAAS,CAAC,UAAU,CAAC;gBACnB,CAAC,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvD,CAAC,CAAC,UAAU,EACd,SAAS,CAAC,WAAW,CAAC;gBACpB,CAAC,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxD,CAAC,CAAC,WAAW,EACf,cAAc,CAAC,eAAe,CAC/B,CAAC;SACH;QACD,IAAI,iBAAiB,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE;YACnE,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAC5B,GAAG,EACH,UAAU,CAAC,MAAM,EACjB,WAAW,CAAC,MAAM,CACnB,CAAC;gBACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;aAC7C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aACzD;SACF;aAAM;YACL,OAAO,IAAI,8BAA8B,CACvC,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,CACZ,CAAC;SACH;IACH,CAAC;IAES,WAAW,CACnB,KAAU,EACV,UAA6B,EAC7B,WAA8B;QAE9B,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,WAAW,EACX,cAAc,CAAC,KAAK,EACpB,KAAK,CACN,CAAC;IACJ,CAAC;CACF","file":"expression/Expr2LeftBeforeRight.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprBase } from \"./ExprBase\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalConsequentialError2Obj,\n ExprEvalError,\n ExprEvalError2Obj,\n ExprEvalErrorUndefinedResult,\n ExprEvalResult,\n ExprEvalStatus,\n isExprEvalSuccess,\n} from \"./ExprEvalResult\";\nimport { isNullish } from \"../IfcExpressionUtils\";\nimport { Expr } from \"./Expr\";\n\nexport abstract class Expr2LeftBeforeRight<L, R, E> extends ExprBase<E> {\n readonly left: Expr<L>;\n readonly right: Expr<R>;\n\n protected constructor(exprKind: ExprKind, left: Expr<L>, right: Expr<R>) {\n super(exprKind);\n this.left = left;\n this.right = right;\n }\n\n protected abstract doEvaluate(\n ctx: IfcExpressionContext,\n leftOperand: L,\n rightOperand: R\n ): E | ExprEvalError;\n\n protected abstract handleLeftResult(leftResult: ExprEvalResult<L>);\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n const leftResult = this.left.evaluate(ctx, localCtx);\n if (isNullish(leftResult)) {\n return new ExprEvalErrorUndefinedResult(this.left.getKind());\n }\n this.handleLeftResult(leftResult);\n const rightResult = this.right.evaluate(ctx, localCtx);\n if (isNullish(leftResult) || isNullish(rightResult)) {\n return new ExprEvalError2Obj(\n this.getKind(),\n isNullish(leftResult)\n ? new ExprEvalErrorUndefinedResult(this.left.getKind())\n : leftResult,\n isNullish(rightResult)\n ? new ExprEvalErrorUndefinedResult(this.right.getKind())\n : rightResult,\n ExprEvalStatus.MISSING_OPERAND\n );\n }\n if (isExprEvalSuccess(leftResult) && isExprEvalSuccess(rightResult)) {\n try {\n const result = this.doEvaluate(\n ctx,\n leftResult.result,\n rightResult.result\n );\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error, leftResult, rightResult);\n }\n } else {\n return new ExprEvalConsequentialError2Obj(\n this.getKind(),\n leftResult,\n rightResult\n );\n }\n }\n\n protected handleError(\n error: any,\n leftResult: ExprEvalResult<L>,\n rightResult: ExprEvalResult<R>\n ): ExprEvalError {\n return new ExprEvalError2Obj(\n this.getKind(),\n leftResult,\n rightResult,\n ExprEvalStatus.ERROR,\n error\n );\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { ExprEvalSuccessObj, isExprEvalError, } from "./ExprEvalResult";
2
+ export class ExprBase {
3
+ constructor(exprKind) {
4
+ this.exprKind = exprKind;
5
+ }
6
+ getKind() {
7
+ return this.exprKind;
8
+ }
9
+ wrapInResultIfNecessary(result) {
10
+ if (isExprEvalError(result)) {
11
+ return result;
12
+ }
13
+ return new ExprEvalSuccessObj(result);
14
+ }
15
+ }
16
+ //# sourceMappingURL=ExprBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/ExprBase.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,kBAAkB,EAClB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,OAAgB,QAAQ;IAG5B,YAAY,QAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAOD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAES,uBAAuB,CAC/B,MAAyB;QAEzB,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;YAC3B,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;CACF","file":"expression/ExprBase.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"./ExprEvalResult\";\nimport { ExprKind } from \"./ExprKind\";\n\nexport abstract class ExprBase<T> implements Expr<T> {\n private readonly exprKind: ExprKind;\n\n constructor(exprKind: ExprKind) {\n this.exprKind = exprKind;\n }\n\n abstract evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<T>;\n\n getKind(): ExprKind {\n return this.exprKind;\n }\n\n protected wrapInResultIfNecessary(\n result: T | ExprEvalError\n ): ExprEvalResult<T> {\n if (isExprEvalError(result)) {\n return result;\n }\n return new ExprEvalSuccessObj(result);\n }\n}\n"]}
@@ -0,0 +1,144 @@
1
+ import { isNullish } from "../IfcExpressionUtils";
2
+ export var ExprEvalStatus;
3
+ (function (ExprEvalStatus) {
4
+ ExprEvalStatus[ExprEvalStatus["SUCCESS"] = 1000] = "SUCCESS";
5
+ ExprEvalStatus[ExprEvalStatus["ERROR"] = 2000] = "ERROR";
6
+ ExprEvalStatus[ExprEvalStatus["UNDEFINED_RESULT"] = 2001] = "UNDEFINED_RESULT";
7
+ ExprEvalStatus[ExprEvalStatus["REFERENCE_ERROR"] = 2010] = "REFERENCE_ERROR";
8
+ ExprEvalStatus[ExprEvalStatus["MISSING_OPERAND"] = 2011] = "MISSING_OPERAND";
9
+ ExprEvalStatus[ExprEvalStatus["MISSING_REQUIRED_FUNCTION_ARGUMENT"] = 2012] = "MISSING_REQUIRED_FUNCTION_ARGUMENT";
10
+ ExprEvalStatus[ExprEvalStatus["UNKNOWN_FUNCTION"] = 2014] = "UNKNOWN_FUNCTION";
11
+ ExprEvalStatus[ExprEvalStatus["CONSEQUENTIAL_ERROR"] = 2020] = "CONSEQUENTIAL_ERROR";
12
+ ExprEvalStatus[ExprEvalStatus["MATH_ERROR"] = 2030] = "MATH_ERROR";
13
+ ExprEvalStatus[ExprEvalStatus["TYPE_ERROR"] = 2040] = "TYPE_ERROR";
14
+ })(ExprEvalStatus || (ExprEvalStatus = {}));
15
+ export function isExprEvalStatus(candidate) {
16
+ return (typeof candidate === "number" &&
17
+ typeof ExprEvalStatus[candidate] !== "undefined");
18
+ }
19
+ export function isExprEvalSuccess(arg) {
20
+ return (isExprEvalStatus(arg.status) &&
21
+ arg.status >= ExprEvalStatus.SUCCESS &&
22
+ arg.status < ExprEvalStatus.ERROR &&
23
+ typeof arg.result !== "undefined");
24
+ }
25
+ export class ExprEvalSuccessObj {
26
+ constructor(result) {
27
+ this.result = result;
28
+ this.status = ExprEvalStatus.SUCCESS;
29
+ }
30
+ }
31
+ export class ExprEvalErrorObj {
32
+ constructor(exprKind, status = ExprEvalStatus.ERROR, message) {
33
+ if (!isExprEvalStatus(status) || status < ExprEvalStatus.ERROR) {
34
+ throw new Error(`ExprEvalStatus ${status} is not an error status"`);
35
+ }
36
+ this.status = status;
37
+ this.exprKind = exprKind;
38
+ if (!isNullish(message)) {
39
+ this.message = mapErrorObjectToMessage(message);
40
+ }
41
+ }
42
+ }
43
+ export function mapErrorObjectToMessage(errorObjectOrMessage) {
44
+ if (typeof errorObjectOrMessage === "string") {
45
+ return errorObjectOrMessage;
46
+ }
47
+ else if (errorObjectOrMessage instanceof Error) {
48
+ return errorObjectOrMessage.message;
49
+ }
50
+ else if (Array.isArray(errorObjectOrMessage)) {
51
+ return errorObjectOrMessage
52
+ .map((m) => this.createErrorMessage(m))
53
+ .join(" ");
54
+ }
55
+ return JSON.stringify(errorObjectOrMessage);
56
+ }
57
+ export class ExprEvalErrorUndefinedResult extends ExprEvalErrorObj {
58
+ constructor(epxrKind) {
59
+ super(epxrKind, ExprEvalStatus.UNDEFINED_RESULT, "Expression evaluated to undefined or null - this should never happen");
60
+ }
61
+ }
62
+ export class ExprEvalRefChainErrorObj extends ExprEvalErrorObj {
63
+ constructor(exprKind, status, errorPathElement, message) {
64
+ super(exprKind, status, message);
65
+ this.errorPathElement = errorPathElement;
66
+ this.path = [errorPathElement];
67
+ }
68
+ static bubbleUp(error, currentPathElement) {
69
+ return {
70
+ exprKind: error.exprKind,
71
+ status: error.status,
72
+ errorPathElement: error.errorPathElement,
73
+ path: [currentPathElement, ...error.path],
74
+ message: error.message,
75
+ };
76
+ }
77
+ }
78
+ export class ExprEvalError1Obj extends ExprEvalErrorObj {
79
+ constructor(exprKind, sub, status, message) {
80
+ super(exprKind, status, message);
81
+ this.sub = sub;
82
+ }
83
+ }
84
+ export class ExprEvalError2Obj extends ExprEvalErrorObj {
85
+ constructor(exprKind, left, right, status, message) {
86
+ super(exprKind, status, message);
87
+ this.left = left;
88
+ this.right = right;
89
+ }
90
+ }
91
+ export function isExprEvalError(arg) {
92
+ return isExprEvalStatus(arg.status) && arg.status >= ExprEvalStatus.ERROR;
93
+ }
94
+ export function isExprEvalRefChainError(arg) {
95
+ return (isExprEvalStatus(arg.status) &&
96
+ arg.status >= ExprEvalStatus.ERROR &&
97
+ Array.isArray(arg.path) &&
98
+ typeof arg.errorPathElement === "string");
99
+ }
100
+ export class ExprEvalConsequentialError1Obj extends ExprEvalErrorObj {
101
+ constructor(exprKind, cause, message) {
102
+ super(exprKind, ExprEvalStatus.CONSEQUENTIAL_ERROR, message || "Consequential error");
103
+ this.exprKind = exprKind;
104
+ this.cause = cause;
105
+ }
106
+ }
107
+ export class ExprEvalConsequentialError2Obj extends ExprEvalErrorObj {
108
+ constructor(exprKind, leftCause, rightCause, message) {
109
+ super(exprKind, ExprEvalStatus.CONSEQUENTIAL_ERROR, message || "Consequential error");
110
+ this.leftCause = leftCause;
111
+ this.rightCause = rightCause;
112
+ }
113
+ }
114
+ export class ExprEvalFunctionEvaluationErrorObj extends ExprEvalErrorObj {
115
+ constructor(exprKind, status, message, functionName) {
116
+ super(exprKind, status, message);
117
+ this.functionName = functionName;
118
+ }
119
+ }
120
+ export class ExprEvalFunctionEvaluationConsequentialErrorObj extends ExprEvalFunctionEvaluationErrorObj {
121
+ constructor(exprKind, functionName, cause) {
122
+ super(exprKind, ExprEvalStatus.CONSEQUENTIAL_ERROR, `Error evaluating function ${functionName}`, functionName);
123
+ this.cause = cause;
124
+ }
125
+ }
126
+ export class ExprEvalMissingRequiredFunctionArgumentErrorObj extends ExprEvalFunctionEvaluationErrorObj {
127
+ constructor(exprKind, message, functionName, argumentName, argumentIndex) {
128
+ super(exprKind, ExprEvalStatus.MISSING_REQUIRED_FUNCTION_ARGUMENT, message, functionName);
129
+ this.argumentName = argumentName;
130
+ this.argumentIndex = argumentIndex;
131
+ }
132
+ }
133
+ export class ExprEvalValueErrorObj extends ExprEvalErrorObj {
134
+ constructor(exprKind, status, message, offendingValue) {
135
+ super(exprKind, status, message);
136
+ this.offendingValue = offendingValue;
137
+ }
138
+ }
139
+ export class ExprEvalTypeErrorObj extends ExprEvalValueErrorObj {
140
+ constructor(exprKind, message, offendingValue) {
141
+ super(exprKind, ExprEvalStatus.TYPE_ERROR, message, offendingValue);
142
+ }
143
+ }
144
+ //# sourceMappingURL=ExprEvalResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/ExprEvalResult.ts"],"names":[],"mappings":"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","file":"expression/ExprEvalResult.js","sourcesContent":["import { Expr } from \"./Expr\";\nimport { ExprKind } from \"./ExprKind\";\nimport { isNullish } from \"../IfcExpressionUtils\";\n\nexport enum ExprEvalStatus {\n SUCCESS = 1000,\n ERROR = 2000,\n UNDEFINED_RESULT = 2001,\n REFERENCE_ERROR = 2010,\n MISSING_OPERAND,\n MISSING_REQUIRED_FUNCTION_ARGUMENT = 2012,\n UNKNOWN_FUNCTION = 2014,\n CONSEQUENTIAL_ERROR = 2020,\n MATH_ERROR = 2030,\n TYPE_ERROR = 2040,\n}\n\nexport function isExprEvalStatus(candidate: number): boolean {\n return (\n typeof candidate === \"number\" &&\n typeof ExprEvalStatus[candidate] !== \"undefined\"\n );\n}\n\nexport type ExprEvalResult<T> = ExprEvalSuccess<T> | ExprEvalError;\n\nexport type ExprEvalSuccess<T> = {\n status: ExprEvalStatus;\n result: T;\n};\n\nexport function isExprEvalSuccess(arg: any): arg is ExprEvalSuccess<unknown> {\n return (\n isExprEvalStatus(arg.status) &&\n arg.status >= ExprEvalStatus.SUCCESS &&\n arg.status < ExprEvalStatus.ERROR &&\n typeof arg.result !== \"undefined\"\n );\n}\n\nexport class ExprEvalSuccessObj<T> {\n public readonly result: T;\n public readonly status: ExprEvalStatus;\n\n constructor(result: T) {\n this.result = result;\n this.status = ExprEvalStatus.SUCCESS;\n }\n}\n\nexport class ExprEvalErrorObj {\n public readonly status: ExprEvalStatus;\n public readonly exprKind: ExprKind;\n public readonly message?: string;\n constructor(\n exprKind: ExprKind,\n status: ExprEvalStatus = ExprEvalStatus.ERROR,\n message?: any\n ) {\n if (!isExprEvalStatus(status) || status < ExprEvalStatus.ERROR) {\n throw new Error(`ExprEvalStatus ${status} is not an error status\"`);\n }\n this.status = status;\n this.exprKind = exprKind;\n if (!isNullish(message)) {\n this.message = mapErrorObjectToMessage(message);\n }\n }\n}\n\nexport function mapErrorObjectToMessage(errorObjectOrMessage: any): string {\n if (typeof errorObjectOrMessage === \"string\") {\n return errorObjectOrMessage;\n } else if (errorObjectOrMessage instanceof Error) {\n return errorObjectOrMessage.message;\n } else if (Array.isArray(errorObjectOrMessage)) {\n return errorObjectOrMessage\n .map((m) => this.createErrorMessage(m))\n .join(\" \");\n }\n return JSON.stringify(errorObjectOrMessage);\n}\n\nexport class ExprEvalErrorUndefinedResult extends ExprEvalErrorObj {\n constructor(epxrKind: ExprKind) {\n super(\n epxrKind,\n ExprEvalStatus.UNDEFINED_RESULT,\n \"Expression evaluated to undefined or null - this should never happen\"\n );\n }\n}\n\nexport class ExprEvalRefChainErrorObj extends ExprEvalErrorObj {\n public readonly errorPathElement: string;\n public readonly path: Array<string>;\n\n constructor(\n exprKind: ExprKind,\n status: ExprEvalStatus,\n errorPathElement: string,\n message?: any\n ) {\n super(exprKind, status, message);\n this.errorPathElement = errorPathElement;\n this.path = [errorPathElement];\n }\n\n public static bubbleUp(\n error: ExprEvalRefChainError,\n currentPathElement\n ): ExprEvalRefChainError {\n return {\n exprKind: error.exprKind,\n status: error.status,\n errorPathElement: error.errorPathElement,\n path: [currentPathElement, ...error.path],\n message: error.message,\n };\n }\n}\n\nexport class ExprEvalError1Obj extends ExprEvalErrorObj {\n public readonly sub: ExprEvalResult<unknown>;\n\n constructor(\n exprKind: ExprKind,\n sub: ExprEvalResult<unknown>,\n status: ExprEvalStatus,\n message?: any\n ) {\n super(exprKind, status, message);\n this.sub = sub;\n }\n}\n\nexport class ExprEvalError2Obj extends ExprEvalErrorObj {\n public readonly left: ExprEvalResult<unknown>;\n public readonly right: ExprEvalResult<unknown>;\n\n constructor(\n exprKind: ExprKind,\n left: ExprEvalResult<unknown>,\n right: ExprEvalResult<unknown>,\n status?: ExprEvalStatus,\n message?: any\n ) {\n super(exprKind, status, message);\n this.left = left;\n this.right = right;\n }\n}\n\nexport function isExprEvalError(arg: any): arg is ExprEvalError {\n return isExprEvalStatus(arg.status) && arg.status >= ExprEvalStatus.ERROR;\n}\n\nexport type ExprEvalError =\n | ExprEvalUnspecificError\n | ExprEvalReferencError\n | ExprEvalErrorUndefinedResult\n | ExprEvalMissingRequiredFunctionArgumentError\n | ExprEvalValueError<unknown>;\n\ntype ExprEvalUnspecificError = {\n readonly exprKind: ExprKind;\n readonly status: ExprEvalStatus;\n readonly message?: string;\n};\n\nexport type ExprEvalRefChainError = ExprEvalUnspecificError & {\n readonly errorPathElement: string;\n readonly path: Array<string>;\n};\n\nexport function isExprEvalRefChainError(\n arg: any\n): arg is ExprEvalRefChainError {\n return (\n isExprEvalStatus(arg.status) &&\n arg.status >= ExprEvalStatus.ERROR &&\n Array.isArray(arg.path) &&\n typeof arg.errorPathElement === \"string\"\n );\n}\n\nexport type ExprEvalReferencError = ExprEvalUnspecificError & {\n readonly status: ExprEvalStatus.REFERENCE_ERROR;\n readonly expr: Expr<unknown>;\n};\n\nexport type ExprEvalConsequentialError1 = ExprEvalUnspecificError & {\n readonly status: ExprEvalStatus.CONSEQUENTIAL_ERROR;\n readonly exprKind: ExprKind;\n readonly cause: ExprEvalError;\n};\n\nexport class ExprEvalConsequentialError1Obj extends ExprEvalErrorObj {\n public readonly exprKind: ExprKind;\n public readonly cause: ExprEvalResult<unknown>;\n\n constructor(\n exprKind: ExprKind,\n cause: ExprEvalResult<unknown>,\n message?: any\n ) {\n super(\n exprKind,\n ExprEvalStatus.CONSEQUENTIAL_ERROR,\n message || \"Consequential error\"\n );\n this.exprKind = exprKind;\n this.cause = cause;\n }\n}\n\nexport type ExprEvalConsequentialError2 = ExprEvalUnspecificError & {\n readonly status: ExprEvalStatus.CONSEQUENTIAL_ERROR;\n readonly exprKind: ExprKind;\n readonly leftCause: ExprEvalResult<unknown>;\n readonly rightCause: ExprEvalResult<unknown>;\n};\n\nexport class ExprEvalConsequentialError2Obj extends ExprEvalErrorObj {\n public readonly leftCause: ExprEvalResult<unknown>;\n public readonly rightCause: ExprEvalResult<unknown>;\n\n constructor(\n exprKind: ExprKind,\n leftCause: ExprEvalResult<unknown>,\n rightCause: ExprEvalResult<unknown>,\n message?: any\n ) {\n super(\n exprKind,\n ExprEvalStatus.CONSEQUENTIAL_ERROR,\n message || \"Consequential error\"\n );\n this.leftCause = leftCause;\n this.rightCause = rightCause;\n }\n}\n\nexport type ExprEvalFunctionEvaluationError = ExprEvalUnspecificError & {\n functionName: string;\n};\n\nexport type ExprEvalMissingRequiredFunctionArgumentError =\n ExprEvalFunctionEvaluationError & {\n argumentName: string;\n argumentIndex: number;\n };\n\nexport type ExprEvalFunctionEvaluationConsequentialError =\n ExprEvalFunctionEvaluationError & {\n cause: ExprEvalUnspecificError;\n };\n\nexport class ExprEvalFunctionEvaluationErrorObj extends ExprEvalErrorObj {\n public readonly functionName: string;\n\n constructor(\n exprKind: ExprKind,\n status: ExprEvalStatus,\n message: any,\n functionName: string\n ) {\n super(exprKind, status, message);\n this.functionName = functionName;\n }\n}\n\nexport class ExprEvalFunctionEvaluationConsequentialErrorObj extends ExprEvalFunctionEvaluationErrorObj {\n public readonly cause: ExprEvalError;\n\n constructor(exprKind: ExprKind, functionName: string, cause: ExprEvalError) {\n super(\n exprKind,\n ExprEvalStatus.CONSEQUENTIAL_ERROR,\n `Error evaluating function ${functionName}`,\n functionName\n );\n this.cause = cause;\n }\n}\n\nexport class ExprEvalMissingRequiredFunctionArgumentErrorObj extends ExprEvalFunctionEvaluationErrorObj {\n public readonly argumentName: string;\n public readonly argumentIndex: number;\n\n constructor(\n exprKind: ExprKind,\n message: any,\n functionName: string,\n argumentName: string,\n argumentIndex: number\n ) {\n super(\n exprKind,\n ExprEvalStatus.MISSING_REQUIRED_FUNCTION_ARGUMENT,\n message,\n functionName\n );\n this.argumentName = argumentName;\n this.argumentIndex = argumentIndex;\n }\n}\n\nexport type ExprEvalTypeError = ExprEvalUnspecificError & {\n status: ExprEvalStatus.TYPE_ERROR;\n};\n\nexport type ExprEvalValueError<T> = ExprEvalUnspecificError & {\n offendingValue: T;\n};\n\nexport class ExprEvalValueErrorObj<T> extends ExprEvalErrorObj {\n public readonly offendingValue: T;\n\n constructor(\n exprKind: ExprKind,\n status: ExprEvalStatus,\n message: any,\n offendingValue: T\n ) {\n super(exprKind, status, message);\n this.offendingValue = offendingValue;\n }\n}\n\nexport class ExprEvalTypeErrorObj<T> extends ExprEvalValueErrorObj<T> {\n constructor(exprKind: ExprKind, message: any, offendingValue: T) {\n super(exprKind, ExprEvalStatus.TYPE_ERROR, message, offendingValue);\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ export var ExprKind;
2
+ (function (ExprKind) {
3
+ ExprKind["NUM_DIVIDE"] = "NUM_DIVIDE";
4
+ ExprKind["NUM_MULTIPLY"] = "NUM_MULTIPLY";
5
+ ExprKind["NUM_PLUS"] = "NUM_PLUS";
6
+ ExprKind["NUM_MINUS"] = "NUM_MINUS";
7
+ ExprKind["NUM_LITERAL"] = "NUM_LiTERAL";
8
+ ExprKind["NUM_PARENTHESIS"] = "NUM_PARENTHESIS";
9
+ ExprKind["REF_ATTRIBUTE"] = "REF_ATTRIBUTE";
10
+ ExprKind["REF_ELEMENT"] = "REF_ELEMENT";
11
+ ExprKind["REF_NESTED_OBJECT_CHAIN_END"] = "REF_NESTED_OBJECT_CHAIN_END";
12
+ ExprKind["REF_NESTED_OBJECT_CHAIN"] = "REF_NESTED_OBJECT_CHAIN ";
13
+ ExprKind["REF_OBJECT"] = "REF_OBJECT";
14
+ ExprKind["REF_PROPERTY"] = "REF_PROPERTY";
15
+ ExprKind["STR_CONCAT"] = "STR_CONCAT";
16
+ ExprKind["STR_LITERAL"] = "STR_LITERAL";
17
+ ExprKind["FUNCTION_ARGUMENTS"] = "FUNCTION_ARGUMENTS";
18
+ ExprKind["FUNCTION"] = "FUNCTION";
19
+ ExprKind["ARRAY"] = "ARRAY";
20
+ })(ExprKind || (ExprKind = {}));
21
+ //# sourceMappingURL=ExprKind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/ExprKind.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAkBX;AAlBD,WAAY,QAAQ;IAClB,qCAAyB,CAAA;IACzB,yCAA6B,CAAA;IAC7B,iCAAqB,CAAA;IACrB,mCAAuB,CAAA;IACvB,uCAA2B,CAAA;IAC3B,+CAAmC,CAAA;IACnC,2CAA+B,CAAA;IAC/B,uCAA2B,CAAA;IAC3B,uEAA2D,CAAA;IAC3D,gEAAoD,CAAA;IACpD,qCAAyB,CAAA;IACzB,yCAA6B,CAAA;IAC7B,qCAAyB,CAAA;IACzB,uCAA2B,CAAA;IAC3B,qDAAyC,CAAA;IACzC,iCAAqB,CAAA;IACrB,2BAAe,CAAA;AACjB,CAAC,EAlBW,QAAQ,KAAR,QAAQ,QAkBnB","file":"expression/ExprKind.js","sourcesContent":["export enum ExprKind {\n NUM_DIVIDE = \"NUM_DIVIDE\",\n NUM_MULTIPLY = \"NUM_MULTIPLY\",\n NUM_PLUS = \"NUM_PLUS\",\n NUM_MINUS = \"NUM_MINUS\",\n NUM_LITERAL = \"NUM_LiTERAL\",\n NUM_PARENTHESIS = \"NUM_PARENTHESIS\",\n REF_ATTRIBUTE = \"REF_ATTRIBUTE\",\n REF_ELEMENT = \"REF_ELEMENT\",\n REF_NESTED_OBJECT_CHAIN_END = \"REF_NESTED_OBJECT_CHAIN_END\",\n REF_NESTED_OBJECT_CHAIN = \"REF_NESTED_OBJECT_CHAIN \",\n REF_OBJECT = \"REF_OBJECT\",\n REF_PROPERTY = \"REF_PROPERTY\",\n STR_CONCAT = \"STR_CONCAT\",\n STR_LITERAL = \"STR_LITERAL\",\n FUNCTION_ARGUMENTS = \"FUNCTION_ARGUMENTS\",\n FUNCTION = \"FUNCTION\",\n ARRAY = \"ARRAY\",\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { ExprEvalErrorObj, ExprEvalStatus, } from "./ExprEvalResult";
2
+ import { ExprBase } from "./ExprBase";
3
+ export class LiteralExpr extends ExprBase {
4
+ constructor(exprKind, value) {
5
+ super(exprKind);
6
+ this.value = value;
7
+ }
8
+ evaluate(ctx, localCtx) {
9
+ try {
10
+ const result = this.calculateResult(ctx);
11
+ return this.wrapInResultIfNecessary(result);
12
+ }
13
+ catch (error) {
14
+ return this.handleError(error);
15
+ }
16
+ }
17
+ handleError(error) {
18
+ return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.ERROR, error);
19
+ }
20
+ }
21
+ //# sourceMappingURL=LiteralExpr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/LiteralExpr.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EAEhB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAgB,WAAkB,SAAQ,QAAW;IAGzD,YAAsB,QAAkB,EAAE,KAAQ;QAChD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAMM,QAAQ,CACb,GAAyB,EACzB,QAA0B;QAE1B,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;IACH,CAAC;IAES,WAAW,CAAC,KAAU;QAC9B,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF","file":"expression/LiteralExpr.js","sourcesContent":["import { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport { ExprKind } from \"./ExprKind\";\nimport {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"./ExprEvalResult\";\nimport { ExprBase } from \"./ExprBase\";\n\nexport abstract class LiteralExpr<V, E> extends ExprBase<E> {\n readonly value: V;\n\n protected constructor(exprKind: ExprKind, value: V) {\n super(exprKind);\n this.value = value;\n }\n\n protected abstract calculateResult(\n ctx: IfcExpressionContext\n ): E | ExprEvalError;\n\n public evaluate(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>\n ): ExprEvalResult<E> {\n try {\n const result = this.calculateResult(ctx);\n return this.wrapInResultIfNecessary(result);\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n protected handleError(error: any): ExprEvalError {\n return new ExprEvalErrorObj(this.getKind(), ExprEvalStatus.ERROR, error);\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export const LocalContextKeys = Object.freeze({
2
+ OBJECT_ACCESSOR: "OBJECT_ACCESSOR",
3
+ });
4
+ //# sourceMappingURL=LocalContextKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/LocalContextKeys.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,eAAe,EAAE,iBAAiB;CACnC,CAAC,CAAC","file":"expression/LocalContextKeys.js","sourcesContent":["export const LocalContextKeys = Object.freeze({\n OBJECT_ACCESSOR: \"OBJECT_ACCESSOR\",\n});\n"]}
@@ -0,0 +1,89 @@
1
+ import { IfcExpressionFunctionConfigException } from "./IfcExpressionFunctionConfigException";
2
+ import { isNullish } from "../../IfcExpressionUtils";
3
+ import { ExprEvalFunctionEvaluationConsequentialErrorObj, ExprEvalMissingRequiredFunctionArgumentErrorObj, ExprEvalSuccessObj, isExprEvalError, } from "../ExprEvalResult";
4
+ import { ExprKind } from "../ExprKind";
5
+ export class Func {
6
+ constructor(name, args) {
7
+ this.name = name;
8
+ if (isNullish(this.name)) {
9
+ throw new IfcExpressionFunctionConfigException("Function must have a name");
10
+ }
11
+ this.formalArguments = args;
12
+ this.checkArgs(args);
13
+ }
14
+ evaluate(funcArgs) {
15
+ const evaluatedArguments = this.getArgumentValues(funcArgs);
16
+ if (isExprEvalError(evaluatedArguments)) {
17
+ return evaluatedArguments;
18
+ }
19
+ const argumentsReadyForUse = new Map();
20
+ for (const [argName, argValue] of evaluatedArguments.entries()) {
21
+ if (isExprEvalError(argValue)) {
22
+ return new ExprEvalFunctionEvaluationConsequentialErrorObj(ExprKind.FUNCTION, this.name, argValue);
23
+ }
24
+ argumentsReadyForUse.set(argName, argValue.result);
25
+ }
26
+ return this.calculateResult(argumentsReadyForUse);
27
+ }
28
+ /**
29
+ * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the
30
+ * returned array is an ExprEvalError, the function evaluation fails.
31
+ * @param evaluatedArguments
32
+ * @protected
33
+ */
34
+ transformArguments(evaluatedArguments) {
35
+ return evaluatedArguments;
36
+ }
37
+ /**
38
+ * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).
39
+ * Generates an error if a required value is missing.
40
+ * @param provided
41
+ * @protected
42
+ */
43
+ getArgumentValues(provided) {
44
+ const result = new Map();
45
+ const numProvided = provided.length;
46
+ if (!isNullish(this.formalArguments)) {
47
+ let j = 0;
48
+ for (let i = 0; i < this.formalArguments.length; i++) {
49
+ const currentArg = this.formalArguments[i];
50
+ if (numProvided > i) {
51
+ result.set(currentArg.name, currentArg.transformValue(provided[i]));
52
+ }
53
+ else {
54
+ if (currentArg.hasDefaultValue()) {
55
+ result.set(currentArg.name, new ExprEvalSuccessObj(currentArg.defaultValue));
56
+ }
57
+ if (currentArg.required) {
58
+ return new ExprEvalMissingRequiredFunctionArgumentErrorObj(ExprKind.FUNCTION_ARGUMENTS, `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`, this.name, currentArg.name, i);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ const transformedArguments = this.transformArguments(result);
64
+ return result;
65
+ }
66
+ checkArgs(args) {
67
+ if (!Array.isArray(this.formalArguments)) {
68
+ throw new IfcExpressionFunctionConfigException("Formal function arguments is not an array");
69
+ }
70
+ let optionalArgsReached = false;
71
+ const names = new Set();
72
+ for (let i = 0; i < this.formalArguments.length; i++) {
73
+ if (names.has(this.formalArguments[i].name)) {
74
+ throw new IfcExpressionFunctionConfigException(`Duplicate argument name '${this.formalArguments[i].name}'.`);
75
+ }
76
+ if (optionalArgsReached) {
77
+ if (this.formalArguments[i].required) {
78
+ throw new IfcExpressionFunctionConfigException(`Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`);
79
+ }
80
+ }
81
+ else {
82
+ if (!this.formalArguments[i].required) {
83
+ optionalArgsReached = true;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=Func.js.map