ifc-expressions 0.3.4 → 2.0.0-beta.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 (579) hide show
  1. package/README.md +158 -0
  2. package/dist/E.d.ts +45 -0
  3. package/dist/ExprVisitor.d.ts +29 -18
  4. package/dist/IfcExpression.d.ts +17 -11
  5. package/dist/IfcExpressionErrorListener.d.ts +6 -4
  6. package/dist/IfcExpressionUtils.d.ts +1 -0
  7. package/dist/IfcExpressionValidationListener.d.ts +41 -0
  8. package/dist/cjs/E.js +83 -0
  9. package/dist/cjs/E.js.map +1 -0
  10. package/dist/cjs/ExprVisitor.js +162 -78
  11. package/dist/cjs/ExprVisitor.js.map +1 -1
  12. package/dist/cjs/IfcExpression.js +51 -13
  13. package/dist/cjs/IfcExpression.js.map +1 -1
  14. package/dist/cjs/IfcExpressionErrorListener.js +9 -5
  15. package/dist/cjs/IfcExpressionErrorListener.js.map +1 -1
  16. package/dist/cjs/IfcExpressionUtils.js +5 -1
  17. package/dist/cjs/IfcExpressionUtils.js.map +1 -1
  18. package/dist/cjs/IfcExpressionValidationListener.js +184 -0
  19. package/dist/cjs/IfcExpressionValidationListener.js.map +1 -0
  20. package/dist/cjs/context/IfcElementAccessor.js +19 -3
  21. package/dist/cjs/context/IfcElementAccessor.js.map +1 -1
  22. package/dist/cjs/context/IfcPropertyAccessor.js +14 -2
  23. package/dist/cjs/context/IfcPropertyAccessor.js.map +1 -1
  24. package/dist/cjs/context/IfcPropertySetAccessor.js +1 -1
  25. package/dist/cjs/context/IfcPropertySetAccessor.js.map +1 -1
  26. package/dist/cjs/context/IfcRootObjectAccessor.js.map +1 -1
  27. package/dist/cjs/context/IfcTypeObjectAccessor.js +13 -1
  28. package/dist/cjs/context/IfcTypeObjectAccessor.js.map +1 -1
  29. package/dist/cjs/context/NamedObjectAccessor.js.map +1 -1
  30. package/dist/cjs/context/NopContext.js +13 -0
  31. package/dist/cjs/context/NopContext.js.map +1 -0
  32. package/dist/cjs/context/ObjectAccessor.js.map +1 -1
  33. package/dist/cjs/error/ExceptionToExprEvalErrorMapper.js +37 -0
  34. package/dist/cjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -0
  35. package/dist/cjs/error/ExpressionTypeError.js +11 -0
  36. package/dist/cjs/error/ExpressionTypeError.js.map +1 -0
  37. package/dist/cjs/error/IfcExpressionFunctionConfigException.js.map +1 -0
  38. package/dist/cjs/error/InvalidSyntaxException.js +12 -0
  39. package/dist/cjs/error/InvalidSyntaxException.js.map +1 -0
  40. package/dist/cjs/error/MissingFunctionArgumentException.js +14 -0
  41. package/dist/cjs/error/MissingFunctionArgumentException.js.map +1 -0
  42. package/dist/cjs/error/NoSuchFunctionException.js +12 -0
  43. package/dist/cjs/error/NoSuchFunctionException.js.map +1 -0
  44. package/dist/cjs/error/NoSuchMethodException.js +13 -0
  45. package/dist/cjs/error/NoSuchMethodException.js.map +1 -0
  46. package/dist/cjs/{SyntaxErrorException.js → error/SyntaxErrorException.js} +1 -1
  47. package/dist/cjs/error/SyntaxErrorException.js.map +1 -0
  48. package/dist/cjs/error/ValidationException.js +28 -0
  49. package/dist/cjs/error/ValidationException.js.map +1 -0
  50. package/dist/cjs/error/WrongFunctionArgumentTypeException.js +16 -0
  51. package/dist/cjs/error/WrongFunctionArgumentTypeException.js.map +1 -0
  52. package/dist/cjs/error/mapper/MissingFunctionArgumentExceptionMapper.js +11 -0
  53. package/dist/cjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -0
  54. package/dist/cjs/error/mapper/NoSuchFunctionExceptionMapper.js +15 -0
  55. package/dist/cjs/error/mapper/NoSuchFunctionExceptionMapper.js.map +1 -0
  56. package/dist/cjs/error/mapper/SyntaxErrorMapper.js +11 -0
  57. package/dist/cjs/error/mapper/SyntaxErrorMapper.js.map +1 -0
  58. package/dist/cjs/error/mapper/ValidationExceptionMapper.js +20 -0
  59. package/dist/cjs/error/mapper/ValidationExceptionMapper.js.map +1 -0
  60. package/dist/cjs/error/mapper/WrongFunctionArgumentTypeExceptionMapper.js +11 -0
  61. package/dist/cjs/error/mapper/WrongFunctionArgumentTypeExceptionMapper.js.map +1 -0
  62. package/dist/cjs/expression/Expr.js.map +1 -1
  63. package/dist/cjs/expression/ExprBase.js.map +1 -1
  64. package/dist/cjs/expression/ExprEvalResult.js +67 -28
  65. package/dist/cjs/expression/ExprEvalResult.js.map +1 -1
  66. package/dist/cjs/expression/ExprKind.js +17 -0
  67. package/dist/cjs/expression/ExprKind.js.map +1 -1
  68. package/dist/cjs/expression/boolean/AndExpr.js +23 -0
  69. package/dist/cjs/expression/boolean/AndExpr.js.map +1 -0
  70. package/dist/cjs/expression/boolean/BooleanLiteralExpr.js +23 -0
  71. package/dist/cjs/expression/boolean/BooleanLiteralExpr.js.map +1 -0
  72. package/dist/cjs/expression/boolean/NotExpr.js +23 -0
  73. package/dist/cjs/expression/boolean/NotExpr.js.map +1 -0
  74. package/dist/cjs/expression/boolean/OrExpr.js +23 -0
  75. package/dist/cjs/expression/boolean/OrExpr.js.map +1 -0
  76. package/dist/cjs/expression/boolean/XorExpr.js +25 -0
  77. package/dist/cjs/expression/boolean/XorExpr.js.map +1 -0
  78. package/dist/cjs/expression/comparison/ComparisonOp.js +23 -0
  79. package/dist/cjs/expression/comparison/ComparisonOp.js.map +1 -0
  80. package/dist/cjs/expression/comparison/EqualsExpr.js +23 -0
  81. package/dist/cjs/expression/comparison/EqualsExpr.js.map +1 -0
  82. package/dist/cjs/expression/comparison/GreaterThan.js +12 -0
  83. package/dist/cjs/expression/comparison/GreaterThan.js.map +1 -0
  84. package/dist/cjs/expression/comparison/GreaterThanOrEqual.js +12 -0
  85. package/dist/cjs/expression/comparison/GreaterThanOrEqual.js.map +1 -0
  86. package/dist/cjs/expression/comparison/LessThan.js +12 -0
  87. package/dist/cjs/expression/comparison/LessThan.js.map +1 -0
  88. package/dist/cjs/expression/comparison/LessThanOrEqual.js +12 -0
  89. package/dist/cjs/expression/comparison/LessThanOrEqual.js.map +1 -0
  90. package/dist/cjs/expression/comparison/NotEqualsExpr.js +23 -0
  91. package/dist/cjs/expression/comparison/NotEqualsExpr.js.map +1 -0
  92. package/dist/cjs/expression/function/Func.js +31 -3
  93. package/dist/cjs/expression/function/Func.js.map +1 -1
  94. package/dist/cjs/expression/function/FuncArg.js +4 -0
  95. package/dist/cjs/expression/function/FuncArg.js.map +1 -1
  96. package/dist/cjs/expression/function/FunctionExpr.js +13 -5
  97. package/dist/cjs/expression/function/FunctionExpr.js.map +1 -1
  98. package/dist/cjs/expression/function/IfcExpressionFunctions.js +64 -6
  99. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  100. package/dist/cjs/expression/function/arg/FuncArgAny.js +15 -0
  101. package/dist/cjs/expression/function/arg/FuncArgAny.js.map +1 -0
  102. package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -1
  103. package/dist/cjs/expression/function/arg/FuncArgBoolean.js +25 -0
  104. package/dist/cjs/expression/function/arg/FuncArgBoolean.js.map +1 -0
  105. package/dist/cjs/expression/function/arg/FuncArgInt.js +4 -0
  106. package/dist/cjs/expression/function/arg/FuncArgInt.js.map +1 -1
  107. package/dist/cjs/expression/function/arg/FuncArgMappings.js +45 -0
  108. package/dist/cjs/expression/function/arg/FuncArgMappings.js.map +1 -0
  109. package/dist/cjs/expression/function/arg/FuncArgNumeric.js +4 -0
  110. package/dist/cjs/expression/function/arg/FuncArgNumeric.js.map +1 -1
  111. package/dist/cjs/expression/function/arg/FuncArgObjectAccessor.js +31 -0
  112. package/dist/cjs/expression/function/arg/FuncArgObjectAccessor.js.map +1 -0
  113. package/dist/cjs/expression/function/arg/FuncArgRegex.js +28 -0
  114. package/dist/cjs/expression/function/arg/FuncArgRegex.js.map +1 -0
  115. package/dist/cjs/expression/function/arg/FuncArgSimpleRegex.js +20 -0
  116. package/dist/cjs/expression/function/arg/FuncArgSimpleRegex.js.map +1 -0
  117. package/dist/cjs/expression/function/arg/FuncArgString.js +25 -0
  118. package/dist/cjs/expression/function/arg/FuncArgString.js.map +1 -0
  119. package/dist/cjs/expression/function/impl/ApplyRegex.js +26 -0
  120. package/dist/cjs/expression/function/impl/ApplyRegex.js.map +1 -0
  121. package/dist/cjs/expression/function/impl/AttributeAccessorFunction.js +27 -0
  122. package/dist/cjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -0
  123. package/dist/cjs/expression/function/impl/CompareMagnitudes.js +39 -0
  124. package/dist/cjs/expression/function/impl/CompareMagnitudes.js.map +1 -0
  125. package/dist/cjs/expression/function/impl/EQUALS.js +28 -0
  126. package/dist/cjs/expression/function/impl/EQUALS.js.map +1 -0
  127. package/dist/cjs/expression/function/impl/EXISTS.js +43 -0
  128. package/dist/cjs/expression/function/impl/EXISTS.js.map +1 -0
  129. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js +29 -0
  130. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js.map +1 -0
  131. package/dist/cjs/expression/function/impl/MAP.js +37 -48
  132. package/dist/cjs/expression/function/impl/MAP.js.map +1 -1
  133. package/dist/cjs/expression/function/impl/MatchesPattern.js +38 -0
  134. package/dist/cjs/expression/function/impl/MatchesPattern.js.map +1 -0
  135. package/dist/cjs/expression/function/impl/NOT.js +23 -0
  136. package/dist/cjs/expression/function/impl/NOT.js.map +1 -0
  137. package/dist/cjs/expression/function/impl/PROPERTY.js +51 -0
  138. package/dist/cjs/expression/function/impl/PROPERTY.js.map +1 -0
  139. package/dist/cjs/expression/function/impl/PROPERTYSET.js +70 -0
  140. package/dist/cjs/expression/function/impl/PROPERTYSET.js.map +1 -0
  141. package/dist/cjs/expression/function/impl/ROUND.js +4 -0
  142. package/dist/cjs/expression/function/impl/ROUND.js.map +1 -1
  143. package/dist/cjs/expression/function/impl/ReplacePattern.js +40 -0
  144. package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -0
  145. package/dist/cjs/expression/function/impl/SWITCH.js +65 -0
  146. package/dist/cjs/expression/function/impl/SWITCH.js.map +1 -0
  147. package/dist/cjs/expression/function/impl/TOSTRING.js +21 -0
  148. package/dist/cjs/expression/function/impl/TOSTRING.js.map +1 -0
  149. package/dist/cjs/expression/function/impl/TYPE.js +37 -0
  150. package/dist/cjs/expression/function/impl/TYPE.js.map +1 -0
  151. package/dist/cjs/expression/numeric/DivideExpr.js +7 -0
  152. package/dist/cjs/expression/numeric/DivideExpr.js.map +1 -1
  153. package/dist/cjs/expression/numeric/MinusExpr.js +7 -0
  154. package/dist/cjs/expression/numeric/MinusExpr.js.map +1 -1
  155. package/dist/cjs/expression/numeric/MultiplyExpr.js +7 -0
  156. package/dist/cjs/expression/numeric/MultiplyExpr.js.map +1 -1
  157. package/dist/cjs/expression/numeric/NumericLiteralExpr.js +9 -1
  158. package/dist/cjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  159. package/dist/cjs/expression/numeric/PlusExpr.js +7 -0
  160. package/dist/cjs/expression/numeric/PlusExpr.js.map +1 -1
  161. package/dist/cjs/expression/numeric/PowerExpr.js +23 -0
  162. package/dist/cjs/expression/numeric/PowerExpr.js.map +1 -0
  163. package/dist/cjs/expression/numeric/UnaryMinusExpr.js +23 -0
  164. package/dist/cjs/expression/numeric/UnaryMinusExpr.js.map +1 -0
  165. package/dist/cjs/expression/poly/PlusOrConcatExpr.js +37 -0
  166. package/dist/cjs/expression/poly/PlusOrConcatExpr.js.map +1 -0
  167. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js +9 -1
  168. package/dist/cjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  169. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js +9 -1
  170. package/dist/cjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  171. package/dist/cjs/expression/string/StringConcatExpr.js +7 -0
  172. package/dist/cjs/expression/string/StringConcatExpr.js.map +1 -1
  173. package/dist/cjs/expression/string/StringLiteralExpr.js +9 -1
  174. package/dist/cjs/expression/string/StringLiteralExpr.js.map +1 -1
  175. package/dist/cjs/expression/structure/ArrayExpr.js +7 -0
  176. package/dist/cjs/expression/structure/ArrayExpr.js.map +1 -1
  177. package/dist/cjs/expression/structure/ParenthesisExpr.js +21 -0
  178. package/dist/cjs/expression/structure/ParenthesisExpr.js.map +1 -0
  179. package/dist/cjs/gen/parser/IfcExpressionLexer.js +84 -87
  180. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  181. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -1
  182. package/dist/cjs/gen/parser/IfcExpressionParser.js +785 -675
  183. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
  184. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  185. package/dist/cjs/type/ArrayType.js +69 -0
  186. package/dist/cjs/type/ArrayType.js.map +1 -0
  187. package/dist/cjs/{value/LiteralValue.js → type/ExprType.js} +1 -1
  188. package/dist/cjs/type/ExprType.js.map +1 -0
  189. package/dist/cjs/type/SimpleType.js +46 -0
  190. package/dist/cjs/type/SimpleType.js.map +1 -0
  191. package/dist/cjs/type/TupleType.js +100 -0
  192. package/dist/cjs/type/TupleType.js.map +1 -0
  193. package/dist/cjs/type/TypeDisjunction.js +64 -0
  194. package/dist/cjs/type/TypeDisjunction.js.map +1 -0
  195. package/dist/cjs/type/TypeManager.js +63 -0
  196. package/dist/cjs/type/TypeManager.js.map +1 -0
  197. package/dist/cjs/type/Types.js +91 -0
  198. package/dist/cjs/type/Types.js.map +1 -0
  199. package/dist/cjs/value/ArrayValue.js +18 -0
  200. package/dist/cjs/value/ArrayValue.js.map +1 -1
  201. package/dist/cjs/value/BooleanValue.js +10 -0
  202. package/dist/cjs/value/BooleanValue.js.map +1 -1
  203. package/dist/cjs/value/{PrimitiveValueType.js → BoxedValueTypes.js} +1 -1
  204. package/dist/cjs/value/BoxedValueTypes.js.map +1 -0
  205. package/dist/cjs/value/Comparable.js +9 -0
  206. package/dist/cjs/value/Comparable.js.map +1 -0
  207. package/dist/cjs/{expression/reference/ObjectReferenceExpr.js → value/ExpressionValue.js} +1 -1
  208. package/dist/cjs/value/ExpressionValue.js.map +1 -0
  209. package/dist/cjs/value/LogicalValue.js +11 -0
  210. package/dist/cjs/value/LogicalValue.js.map +1 -1
  211. package/dist/cjs/value/NumericValue.js +10 -0
  212. package/dist/cjs/value/NumericValue.js.map +1 -1
  213. package/dist/cjs/value/ObjectAccessorValue.js +32 -0
  214. package/dist/cjs/value/ObjectAccessorValue.js.map +1 -0
  215. package/dist/cjs/value/ReferenceValue.js +7 -0
  216. package/dist/cjs/value/ReferenceValue.js.map +1 -1
  217. package/dist/cjs/value/StringValue.js +11 -0
  218. package/dist/cjs/value/StringValue.js.map +1 -1
  219. package/dist/cjs/value/Value.js.map +1 -1
  220. package/dist/context/IfcElementAccessor.d.ts +6 -5
  221. package/dist/context/IfcPropertyAccessor.d.ts +5 -4
  222. package/dist/context/IfcPropertySetAccessor.d.ts +4 -4
  223. package/dist/context/IfcRootObjectAccessor.d.ts +2 -2
  224. package/dist/context/IfcTypeObjectAccessor.d.ts +3 -2
  225. package/dist/context/NamedObjectAccessor.d.ts +2 -2
  226. package/dist/context/NopContext.d.ts +5 -0
  227. package/dist/context/ObjectAccessor.d.ts +2 -2
  228. package/dist/error/ExceptionToExprEvalErrorMapper.d.ts +5 -0
  229. package/dist/error/ExpressionTypeError.d.ts +5 -0
  230. package/dist/error/InvalidSyntaxException.d.ts +6 -0
  231. package/dist/error/MissingFunctionArgumentException.d.ts +7 -0
  232. package/dist/error/NoSuchFunctionException.d.ts +6 -0
  233. package/dist/error/NoSuchMethodException.d.ts +6 -0
  234. package/dist/{SyntaxErrorException.d.ts → error/SyntaxErrorException.d.ts} +2 -3
  235. package/dist/error/ValidationException.d.ts +9 -0
  236. package/dist/error/WrongFunctionArgumentTypeException.d.ts +11 -0
  237. package/dist/error/mapper/MissingFunctionArgumentExceptionMapper.d.ts +6 -0
  238. package/dist/error/mapper/NoSuchFunctionExceptionMapper.d.ts +7 -0
  239. package/dist/error/mapper/SyntaxErrorMapper.d.ts +6 -0
  240. package/dist/error/mapper/ValidationExceptionMapper.d.ts +8 -0
  241. package/dist/error/mapper/WrongFunctionArgumentTypeExceptionMapper.d.ts +6 -0
  242. package/dist/expression/Expr.d.ts +3 -0
  243. package/dist/expression/ExprBase.d.ts +4 -1
  244. package/dist/expression/ExprEvalResult.d.ts +60 -15
  245. package/dist/expression/ExprKind.d.ts +18 -1
  246. package/dist/expression/boolean/AndExpr.d.ts +12 -0
  247. package/dist/expression/boolean/BooleanLiteralExpr.d.ts +11 -0
  248. package/dist/expression/boolean/NotExpr.d.ts +12 -0
  249. package/dist/expression/boolean/OrExpr.d.ts +12 -0
  250. package/dist/expression/boolean/XorExpr.d.ts +12 -0
  251. package/dist/expression/comparison/ComparisonOp.d.ts +16 -0
  252. package/dist/expression/comparison/EqualsExpr.d.ts +13 -0
  253. package/dist/expression/comparison/GreaterThan.d.ts +7 -0
  254. package/dist/expression/comparison/GreaterThanOrEqual.d.ts +7 -0
  255. package/dist/expression/comparison/LessThan.d.ts +7 -0
  256. package/dist/expression/comparison/LessThanOrEqual.d.ts +7 -0
  257. package/dist/expression/comparison/NotEqualsExpr.d.ts +13 -0
  258. package/dist/expression/function/Func.d.ts +12 -6
  259. package/dist/expression/function/FuncArg.d.ts +4 -2
  260. package/dist/expression/function/FunctionExpr.d.ts +10 -8
  261. package/dist/expression/function/IfcExpressionFunctions.d.ts +3 -2
  262. package/dist/expression/function/arg/FuncArgAny.d.ts +7 -0
  263. package/dist/expression/function/arg/FuncArgBase.d.ts +5 -5
  264. package/dist/expression/function/arg/FuncArgBoolean.d.ts +10 -0
  265. package/dist/expression/function/arg/FuncArgInt.d.ts +4 -2
  266. package/dist/expression/function/arg/FuncArgMappings.d.ts +12 -0
  267. package/dist/expression/function/arg/FuncArgNumeric.d.ts +4 -2
  268. package/dist/expression/function/arg/FuncArgObjectAccessor.d.ts +11 -0
  269. package/dist/expression/function/arg/FuncArgRegex.d.ts +11 -0
  270. package/dist/expression/function/arg/FuncArgSimpleRegex.d.ts +7 -0
  271. package/dist/expression/function/arg/FuncArgString.d.ts +10 -0
  272. package/dist/expression/function/impl/ApplyRegex.d.ts +8 -0
  273. package/dist/expression/function/impl/AttributeAccessorFunction.d.ts +12 -0
  274. package/dist/expression/function/impl/CompareMagnitudes.d.ts +12 -0
  275. package/dist/expression/function/impl/EQUALS.d.ts +11 -0
  276. package/dist/expression/function/impl/EXISTS.d.ts +11 -0
  277. package/dist/expression/function/impl/FuncBooleanBinary.d.ts +12 -0
  278. package/dist/expression/function/impl/MAP.d.ts +5 -2
  279. package/dist/expression/function/impl/MatchesPattern.d.ts +9 -0
  280. package/dist/expression/function/impl/NOT.d.ts +10 -0
  281. package/dist/expression/function/impl/PROPERTY.d.ts +11 -0
  282. package/dist/expression/function/impl/PROPERTYSET.d.ts +12 -0
  283. package/dist/expression/function/impl/ROUND.d.ts +4 -2
  284. package/dist/expression/function/impl/ReplacePattern.d.ts +10 -0
  285. package/dist/expression/function/impl/SWITCH.d.ts +12 -0
  286. package/dist/expression/function/impl/TOSTRING.d.ts +9 -0
  287. package/dist/expression/function/impl/TYPE.d.ts +10 -0
  288. package/dist/expression/numeric/DivideExpr.d.ts +3 -0
  289. package/dist/expression/numeric/MinusExpr.d.ts +3 -0
  290. package/dist/expression/numeric/MultiplyExpr.d.ts +3 -0
  291. package/dist/expression/numeric/NumericLiteralExpr.d.ts +5 -1
  292. package/dist/expression/numeric/PlusExpr.d.ts +3 -0
  293. package/dist/expression/numeric/PowerExpr.d.ts +12 -0
  294. package/dist/expression/numeric/UnaryMinusExpr.d.ts +12 -0
  295. package/dist/expression/poly/PlusOrConcatExpr.d.ts +13 -0
  296. package/dist/expression/reference/ElemObjectReferenceExpr.d.ts +6 -4
  297. package/dist/expression/reference/PropObjectReferenceExpr.d.ts +6 -4
  298. package/dist/expression/string/StringConcatExpr.d.ts +3 -0
  299. package/dist/expression/string/StringLiteralExpr.d.ts +4 -1
  300. package/dist/expression/structure/ArrayExpr.d.ts +5 -2
  301. package/dist/expression/structure/ParenthesisExpr.d.ts +11 -0
  302. package/dist/gen/parser/IfcExpressionLexer.d.ts +12 -12
  303. package/dist/gen/parser/IfcExpressionListener.d.ts +172 -109
  304. package/dist/gen/parser/IfcExpressionParser.d.ts +172 -119
  305. package/dist/gen/parser/IfcExpressionVisitor.d.ts +102 -63
  306. package/dist/mjs/E.js +79 -0
  307. package/dist/mjs/E.js.map +1 -0
  308. package/dist/mjs/ExprVisitor.js +162 -78
  309. package/dist/mjs/ExprVisitor.js.map +1 -1
  310. package/dist/mjs/IfcExpression.js +50 -13
  311. package/dist/mjs/IfcExpression.js.map +1 -1
  312. package/dist/mjs/IfcExpressionErrorListener.js +10 -6
  313. package/dist/mjs/IfcExpressionErrorListener.js.map +1 -1
  314. package/dist/mjs/IfcExpressionUtils.js +3 -0
  315. package/dist/mjs/IfcExpressionUtils.js.map +1 -1
  316. package/dist/mjs/IfcExpressionValidationListener.js +177 -0
  317. package/dist/mjs/IfcExpressionValidationListener.js.map +1 -0
  318. package/dist/mjs/context/IfcElementAccessor.js +17 -2
  319. package/dist/mjs/context/IfcElementAccessor.js.map +1 -1
  320. package/dist/mjs/context/IfcPropertyAccessor.js +12 -1
  321. package/dist/mjs/context/IfcPropertyAccessor.js.map +1 -1
  322. package/dist/mjs/context/IfcPropertySetAccessor.js +1 -1
  323. package/dist/mjs/context/IfcPropertySetAccessor.js.map +1 -1
  324. package/dist/mjs/context/IfcRootObjectAccessor.js.map +1 -1
  325. package/dist/mjs/context/IfcTypeObjectAccessor.js +11 -0
  326. package/dist/mjs/context/IfcTypeObjectAccessor.js.map +1 -1
  327. package/dist/mjs/context/NamedObjectAccessor.js.map +1 -1
  328. package/dist/mjs/context/NopContext.js +9 -0
  329. package/dist/mjs/context/NopContext.js.map +1 -0
  330. package/dist/mjs/context/ObjectAccessor.js.map +1 -1
  331. package/dist/mjs/error/ExceptionToExprEvalErrorMapper.js +33 -0
  332. package/dist/mjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -0
  333. package/dist/mjs/error/ExpressionTypeError.js +7 -0
  334. package/dist/mjs/error/ExpressionTypeError.js.map +1 -0
  335. package/dist/mjs/error/IfcExpressionFunctionConfigException.js.map +1 -0
  336. package/dist/mjs/error/InvalidSyntaxException.js +8 -0
  337. package/dist/mjs/error/InvalidSyntaxException.js.map +1 -0
  338. package/dist/mjs/error/MissingFunctionArgumentException.js +10 -0
  339. package/dist/mjs/error/MissingFunctionArgumentException.js.map +1 -0
  340. package/dist/mjs/error/NoSuchFunctionException.js +8 -0
  341. package/dist/mjs/error/NoSuchFunctionException.js.map +1 -0
  342. package/dist/mjs/error/NoSuchMethodException.js +9 -0
  343. package/dist/mjs/error/NoSuchMethodException.js.map +1 -0
  344. package/dist/mjs/{SyntaxErrorException.js → error/SyntaxErrorException.js} +1 -1
  345. package/dist/mjs/error/SyntaxErrorException.js.map +1 -0
  346. package/dist/mjs/error/ValidationException.js +24 -0
  347. package/dist/mjs/error/ValidationException.js.map +1 -0
  348. package/dist/mjs/error/WrongFunctionArgumentTypeException.js +12 -0
  349. package/dist/mjs/error/WrongFunctionArgumentTypeException.js.map +1 -0
  350. package/dist/mjs/error/mapper/MissingFunctionArgumentExceptionMapper.js +7 -0
  351. package/dist/mjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -0
  352. package/dist/mjs/error/mapper/NoSuchFunctionExceptionMapper.js +11 -0
  353. package/dist/mjs/error/mapper/NoSuchFunctionExceptionMapper.js.map +1 -0
  354. package/dist/mjs/error/mapper/SyntaxErrorMapper.js +7 -0
  355. package/dist/mjs/error/mapper/SyntaxErrorMapper.js.map +1 -0
  356. package/dist/mjs/error/mapper/ValidationExceptionMapper.js +16 -0
  357. package/dist/mjs/error/mapper/ValidationExceptionMapper.js.map +1 -0
  358. package/dist/mjs/error/mapper/WrongFunctionArgumentTypeExceptionMapper.js +7 -0
  359. package/dist/mjs/error/mapper/WrongFunctionArgumentTypeExceptionMapper.js.map +1 -0
  360. package/dist/mjs/expression/Expr.js.map +1 -1
  361. package/dist/mjs/expression/ExprBase.js.map +1 -1
  362. package/dist/mjs/expression/ExprEvalResult.js +60 -25
  363. package/dist/mjs/expression/ExprEvalResult.js.map +1 -1
  364. package/dist/mjs/expression/ExprKind.js +17 -0
  365. package/dist/mjs/expression/ExprKind.js.map +1 -1
  366. package/dist/mjs/expression/boolean/AndExpr.js +19 -0
  367. package/dist/mjs/expression/boolean/AndExpr.js.map +1 -0
  368. package/dist/mjs/expression/boolean/BooleanLiteralExpr.js +19 -0
  369. package/dist/mjs/expression/boolean/BooleanLiteralExpr.js.map +1 -0
  370. package/dist/mjs/expression/boolean/NotExpr.js +19 -0
  371. package/dist/mjs/expression/boolean/NotExpr.js.map +1 -0
  372. package/dist/mjs/expression/boolean/OrExpr.js +19 -0
  373. package/dist/mjs/expression/boolean/OrExpr.js.map +1 -0
  374. package/dist/mjs/expression/boolean/XorExpr.js +21 -0
  375. package/dist/mjs/expression/boolean/XorExpr.js.map +1 -0
  376. package/dist/mjs/expression/comparison/ComparisonOp.js +19 -0
  377. package/dist/mjs/expression/comparison/ComparisonOp.js.map +1 -0
  378. package/dist/mjs/expression/comparison/EqualsExpr.js +19 -0
  379. package/dist/mjs/expression/comparison/EqualsExpr.js.map +1 -0
  380. package/dist/mjs/expression/comparison/GreaterThan.js +8 -0
  381. package/dist/mjs/expression/comparison/GreaterThan.js.map +1 -0
  382. package/dist/mjs/expression/comparison/GreaterThanOrEqual.js +8 -0
  383. package/dist/mjs/expression/comparison/GreaterThanOrEqual.js.map +1 -0
  384. package/dist/mjs/expression/comparison/LessThan.js +8 -0
  385. package/dist/mjs/expression/comparison/LessThan.js.map +1 -0
  386. package/dist/mjs/expression/comparison/LessThanOrEqual.js +8 -0
  387. package/dist/mjs/expression/comparison/LessThanOrEqual.js.map +1 -0
  388. package/dist/mjs/expression/comparison/NotEqualsExpr.js +19 -0
  389. package/dist/mjs/expression/comparison/NotEqualsExpr.js.map +1 -0
  390. package/dist/mjs/expression/function/Func.js +31 -3
  391. package/dist/mjs/expression/function/Func.js.map +1 -1
  392. package/dist/mjs/expression/function/FuncArg.js +4 -0
  393. package/dist/mjs/expression/function/FuncArg.js.map +1 -1
  394. package/dist/mjs/expression/function/FunctionExpr.js +13 -5
  395. package/dist/mjs/expression/function/FunctionExpr.js.map +1 -1
  396. package/dist/mjs/expression/function/IfcExpressionFunctions.js +64 -6
  397. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  398. package/dist/mjs/expression/function/arg/FuncArgAny.js +11 -0
  399. package/dist/mjs/expression/function/arg/FuncArgAny.js.map +1 -0
  400. package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -1
  401. package/dist/mjs/expression/function/arg/FuncArgBoolean.js +21 -0
  402. package/dist/mjs/expression/function/arg/FuncArgBoolean.js.map +1 -0
  403. package/dist/mjs/expression/function/arg/FuncArgInt.js +4 -0
  404. package/dist/mjs/expression/function/arg/FuncArgInt.js.map +1 -1
  405. package/dist/mjs/expression/function/arg/FuncArgMappings.js +41 -0
  406. package/dist/mjs/expression/function/arg/FuncArgMappings.js.map +1 -0
  407. package/dist/mjs/expression/function/arg/FuncArgNumeric.js +4 -0
  408. package/dist/mjs/expression/function/arg/FuncArgNumeric.js.map +1 -1
  409. package/dist/mjs/expression/function/arg/FuncArgObjectAccessor.js +27 -0
  410. package/dist/mjs/expression/function/arg/FuncArgObjectAccessor.js.map +1 -0
  411. package/dist/mjs/expression/function/arg/FuncArgRegex.js +24 -0
  412. package/dist/mjs/expression/function/arg/FuncArgRegex.js.map +1 -0
  413. package/dist/mjs/expression/function/arg/FuncArgSimpleRegex.js +16 -0
  414. package/dist/mjs/expression/function/arg/FuncArgSimpleRegex.js.map +1 -0
  415. package/dist/mjs/expression/function/arg/FuncArgString.js +21 -0
  416. package/dist/mjs/expression/function/arg/FuncArgString.js.map +1 -0
  417. package/dist/mjs/expression/function/impl/ApplyRegex.js +22 -0
  418. package/dist/mjs/expression/function/impl/ApplyRegex.js.map +1 -0
  419. package/dist/mjs/expression/function/impl/AttributeAccessorFunction.js +23 -0
  420. package/dist/mjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -0
  421. package/dist/mjs/expression/function/impl/CompareMagnitudes.js +35 -0
  422. package/dist/mjs/expression/function/impl/CompareMagnitudes.js.map +1 -0
  423. package/dist/mjs/expression/function/impl/EQUALS.js +24 -0
  424. package/dist/mjs/expression/function/impl/EQUALS.js.map +1 -0
  425. package/dist/mjs/expression/function/impl/EXISTS.js +39 -0
  426. package/dist/mjs/expression/function/impl/EXISTS.js.map +1 -0
  427. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js +25 -0
  428. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js.map +1 -0
  429. package/dist/mjs/expression/function/impl/MAP.js +38 -49
  430. package/dist/mjs/expression/function/impl/MAP.js.map +1 -1
  431. package/dist/mjs/expression/function/impl/MatchesPattern.js +34 -0
  432. package/dist/mjs/expression/function/impl/MatchesPattern.js.map +1 -0
  433. package/dist/mjs/expression/function/impl/NOT.js +19 -0
  434. package/dist/mjs/expression/function/impl/NOT.js.map +1 -0
  435. package/dist/mjs/expression/function/impl/PROPERTY.js +47 -0
  436. package/dist/mjs/expression/function/impl/PROPERTY.js.map +1 -0
  437. package/dist/mjs/expression/function/impl/PROPERTYSET.js +66 -0
  438. package/dist/mjs/expression/function/impl/PROPERTYSET.js.map +1 -0
  439. package/dist/mjs/expression/function/impl/ROUND.js +4 -0
  440. package/dist/mjs/expression/function/impl/ROUND.js.map +1 -1
  441. package/dist/mjs/expression/function/impl/ReplacePattern.js +36 -0
  442. package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -0
  443. package/dist/mjs/expression/function/impl/SWITCH.js +61 -0
  444. package/dist/mjs/expression/function/impl/SWITCH.js.map +1 -0
  445. package/dist/mjs/expression/function/impl/TOSTRING.js +17 -0
  446. package/dist/mjs/expression/function/impl/TOSTRING.js.map +1 -0
  447. package/dist/mjs/expression/function/impl/TYPE.js +33 -0
  448. package/dist/mjs/expression/function/impl/TYPE.js.map +1 -0
  449. package/dist/mjs/expression/numeric/DivideExpr.js +7 -0
  450. package/dist/mjs/expression/numeric/DivideExpr.js.map +1 -1
  451. package/dist/mjs/expression/numeric/MinusExpr.js +7 -0
  452. package/dist/mjs/expression/numeric/MinusExpr.js.map +1 -1
  453. package/dist/mjs/expression/numeric/MultiplyExpr.js +7 -0
  454. package/dist/mjs/expression/numeric/MultiplyExpr.js.map +1 -1
  455. package/dist/mjs/expression/numeric/NumericLiteralExpr.js +9 -1
  456. package/dist/mjs/expression/numeric/NumericLiteralExpr.js.map +1 -1
  457. package/dist/mjs/expression/numeric/PlusExpr.js +7 -0
  458. package/dist/mjs/expression/numeric/PlusExpr.js.map +1 -1
  459. package/dist/mjs/expression/numeric/PowerExpr.js +19 -0
  460. package/dist/mjs/expression/numeric/PowerExpr.js.map +1 -0
  461. package/dist/mjs/expression/numeric/UnaryMinusExpr.js +19 -0
  462. package/dist/mjs/expression/numeric/UnaryMinusExpr.js.map +1 -0
  463. package/dist/mjs/expression/poly/PlusOrConcatExpr.js +33 -0
  464. package/dist/mjs/expression/poly/PlusOrConcatExpr.js.map +1 -0
  465. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js +9 -1
  466. package/dist/mjs/expression/reference/ElemObjectReferenceExpr.js.map +1 -1
  467. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js +9 -1
  468. package/dist/mjs/expression/reference/PropObjectReferenceExpr.js.map +1 -1
  469. package/dist/mjs/expression/string/StringConcatExpr.js +7 -0
  470. package/dist/mjs/expression/string/StringConcatExpr.js.map +1 -1
  471. package/dist/mjs/expression/string/StringLiteralExpr.js +9 -1
  472. package/dist/mjs/expression/string/StringLiteralExpr.js.map +1 -1
  473. package/dist/mjs/expression/structure/ArrayExpr.js +7 -0
  474. package/dist/mjs/expression/structure/ArrayExpr.js.map +1 -1
  475. package/dist/mjs/expression/structure/ParenthesisExpr.js +17 -0
  476. package/dist/mjs/expression/structure/ParenthesisExpr.js.map +1 -0
  477. package/dist/mjs/gen/parser/IfcExpressionLexer.js +84 -87
  478. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  479. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -1
  480. package/dist/mjs/gen/parser/IfcExpressionParser.js +760 -654
  481. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
  482. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  483. package/dist/mjs/type/ArrayType.js +65 -0
  484. package/dist/mjs/type/ArrayType.js.map +1 -0
  485. package/dist/mjs/type/ExprType.js +2 -0
  486. package/dist/mjs/type/ExprType.js.map +1 -0
  487. package/dist/mjs/type/SimpleType.js +42 -0
  488. package/dist/mjs/type/SimpleType.js.map +1 -0
  489. package/dist/mjs/type/TupleType.js +96 -0
  490. package/dist/mjs/type/TupleType.js.map +1 -0
  491. package/dist/mjs/type/TypeDisjunction.js +60 -0
  492. package/dist/mjs/type/TypeDisjunction.js.map +1 -0
  493. package/dist/mjs/type/TypeManager.js +59 -0
  494. package/dist/mjs/type/TypeManager.js.map +1 -0
  495. package/dist/mjs/type/Types.js +86 -0
  496. package/dist/mjs/type/Types.js.map +1 -0
  497. package/dist/mjs/value/ArrayValue.js +18 -0
  498. package/dist/mjs/value/ArrayValue.js.map +1 -1
  499. package/dist/mjs/value/BooleanValue.js +10 -0
  500. package/dist/mjs/value/BooleanValue.js.map +1 -1
  501. package/dist/mjs/value/BoxedValueTypes.js +2 -0
  502. package/dist/mjs/value/BoxedValueTypes.js.map +1 -0
  503. package/dist/mjs/value/Comparable.js +5 -0
  504. package/dist/mjs/value/Comparable.js.map +1 -0
  505. package/dist/mjs/value/ExpressionValue.js +2 -0
  506. package/dist/mjs/value/ExpressionValue.js.map +1 -0
  507. package/dist/mjs/value/LogicalValue.js +11 -0
  508. package/dist/mjs/value/LogicalValue.js.map +1 -1
  509. package/dist/mjs/value/NumericValue.js +10 -0
  510. package/dist/mjs/value/NumericValue.js.map +1 -1
  511. package/dist/mjs/value/ObjectAccessorValue.js +28 -0
  512. package/dist/mjs/value/ObjectAccessorValue.js.map +1 -0
  513. package/dist/mjs/value/ReferenceValue.js +7 -0
  514. package/dist/mjs/value/ReferenceValue.js.map +1 -1
  515. package/dist/mjs/value/StringValue.js +11 -0
  516. package/dist/mjs/value/StringValue.js.map +1 -1
  517. package/dist/mjs/value/Value.js.map +1 -1
  518. package/dist/type/ArrayType.d.ts +12 -0
  519. package/dist/type/ExprType.d.ts +8 -0
  520. package/dist/type/SimpleType.d.ts +12 -0
  521. package/dist/type/TupleType.d.ts +15 -0
  522. package/dist/type/TypeDisjunction.d.ts +12 -0
  523. package/dist/type/TypeManager.d.ts +21 -0
  524. package/dist/type/Types.d.ts +41 -0
  525. package/dist/value/ArrayValue.d.ts +3 -0
  526. package/dist/value/BooleanValue.d.ts +6 -1
  527. package/dist/value/BoxedValueTypes.d.ts +3 -0
  528. package/dist/value/Comparable.d.ts +4 -0
  529. package/dist/value/{LiteralValue.d.ts → ExpressionValue.d.ts} +2 -1
  530. package/dist/value/LogicalValue.d.ts +3 -0
  531. package/dist/value/NumericValue.d.ts +6 -1
  532. package/dist/value/ObjectAccessorValue.d.ts +13 -0
  533. package/dist/value/ReferenceValue.d.ts +3 -0
  534. package/dist/value/StringValue.d.ts +7 -1
  535. package/dist/value/Value.d.ts +5 -2
  536. package/package.json +1 -1
  537. package/dist/cjs/SyntaxErrorException.js.map +0 -1
  538. package/dist/cjs/expression/function/IfcExpressionFunctionConfigException.js.map +0 -1
  539. package/dist/cjs/expression/numeric/NumParenthesisExpr.js +0 -15
  540. package/dist/cjs/expression/numeric/NumParenthesisExpr.js.map +0 -1
  541. package/dist/cjs/expression/reference/AttributeReferenceExpr.js +0 -30
  542. package/dist/cjs/expression/reference/AttributeReferenceExpr.js.map +0 -1
  543. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js +0 -28
  544. package/dist/cjs/expression/reference/NestedObjectChainEndExpr.js.map +0 -1
  545. package/dist/cjs/expression/reference/NestedObjectChainExpr.js +0 -40
  546. package/dist/cjs/expression/reference/NestedObjectChainExpr.js.map +0 -1
  547. package/dist/cjs/expression/reference/ObjectReferenceExpr.js.map +0 -1
  548. package/dist/cjs/value/LiteralValue.js.map +0 -1
  549. package/dist/cjs/value/LiteralValueAnyArity.js +0 -3
  550. package/dist/cjs/value/LiteralValueAnyArity.js.map +0 -1
  551. package/dist/cjs/value/PrimitiveValueType.js.map +0 -1
  552. package/dist/expression/numeric/NumParenthesisExpr.d.ts +0 -8
  553. package/dist/expression/reference/AttributeReferenceExpr.d.ts +0 -13
  554. package/dist/expression/reference/NestedObjectChainEndExpr.d.ts +0 -9
  555. package/dist/expression/reference/NestedObjectChainExpr.d.ts +0 -12
  556. package/dist/expression/reference/ObjectReferenceExpr.d.ts +0 -4
  557. package/dist/mjs/SyntaxErrorException.js.map +0 -1
  558. package/dist/mjs/expression/function/IfcExpressionFunctionConfigException.js.map +0 -1
  559. package/dist/mjs/expression/numeric/NumParenthesisExpr.js +0 -11
  560. package/dist/mjs/expression/numeric/NumParenthesisExpr.js.map +0 -1
  561. package/dist/mjs/expression/reference/AttributeReferenceExpr.js +0 -26
  562. package/dist/mjs/expression/reference/AttributeReferenceExpr.js.map +0 -1
  563. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js +0 -24
  564. package/dist/mjs/expression/reference/NestedObjectChainEndExpr.js.map +0 -1
  565. package/dist/mjs/expression/reference/NestedObjectChainExpr.js +0 -36
  566. package/dist/mjs/expression/reference/NestedObjectChainExpr.js.map +0 -1
  567. package/dist/mjs/expression/reference/ObjectReferenceExpr.js +0 -2
  568. package/dist/mjs/expression/reference/ObjectReferenceExpr.js.map +0 -1
  569. package/dist/mjs/value/LiteralValue.js +0 -2
  570. package/dist/mjs/value/LiteralValue.js.map +0 -1
  571. package/dist/mjs/value/LiteralValueAnyArity.js +0 -2
  572. package/dist/mjs/value/LiteralValueAnyArity.js.map +0 -1
  573. package/dist/mjs/value/PrimitiveValueType.js +0 -2
  574. package/dist/mjs/value/PrimitiveValueType.js.map +0 -1
  575. package/dist/value/LiteralValueAnyArity.d.ts +0 -2
  576. package/dist/value/PrimitiveValueType.d.ts +0 -2
  577. /package/dist/cjs/{expression/function → error}/IfcExpressionFunctionConfigException.js +0 -0
  578. /package/dist/{expression/function → error}/IfcExpressionFunctionConfigException.d.ts +0 -0
  579. /package/dist/mjs/{expression/function → error}/IfcExpressionFunctionConfigException.js +0 -0
package/README.md CHANGED
@@ -0,0 +1,158 @@
1
+ # IFC Expressions
2
+
3
+ This project defines an expression language for IFC models. An expression is evaluated in the context of an element of the IFC model and a specific property of that element.
4
+
5
+ ## Interface
6
+
7
+ Two ways to interact with 'ifc-expression':
8
+
9
+ - evaluate an expression string directly - receive `ExprEvalSuccessResult | ExprEvalError`
10
+
11
+ or
12
+
13
+ - parse an expression - receive a `IfcExpressionParseResult`
14
+ - evaluate a `IfcExpressionParseResult` - receive `ExprEvalSuccessResult | ExprEvalError`
15
+
16
+ ## Usage
17
+
18
+ To connect `ifc-expressions` with your IFC model, you have to provide an
19
+ implementation of `src/context/IfcExpressionContext`. Without such a context, the expressions that
20
+ contain references to the model cannot be evaluated.
21
+
22
+ ```ts
23
+ import {IfcExpression} from "ifc-expression";
24
+ import {IfcExpressionContext} from "./IfcExpressionContext";
25
+
26
+ const result = IfcExpression.evaluate("1 + 1"); // evaluation without context
27
+ console.log(JSON.stringify(result));
28
+ // ExprEvalSuccessObj {
29
+ // status: 1000,
30
+ // result: NumericValue {
31
+ // value: 2
32
+ // }
33
+ //}
34
+ const ctx: IfcExpressionContext = ... ; // set to your context here
35
+ const result2 = IfcExpression.evaluate("$element.property('width').value() * 2 ", ctx);
36
+ ```
37
+
38
+ ## Quick Reference
39
+
40
+ Get the current property value:
41
+
42
+ `$property.value()`
43
+
44
+ Get the name of the property set the property is in:
45
+
46
+ `$property.propertySet.name()`
47
+
48
+ Get the name of the current element:
49
+
50
+ `$element.name()`
51
+
52
+ Get the name of the type of the current element:
53
+
54
+ `$element.type().name()`
55
+
56
+ Get value of property `myProp` from property set `myPset` in the current element:
57
+
58
+ `$element.propertySet('myPset').property('myProp').value()`
59
+
60
+ The last expression can also be written as
61
+
62
+ `VALUE(PROPERTY(PROPERTY_SET($element, 'myPset'),'myProp'))`
63
+
64
+ Check if property `myProp` exists in property set `myPset` in the current element:
65
+
66
+ `$element.propertySet('myPset').property('myProp').exists()`
67
+
68
+ Hints:
69
+
70
+ - Function/Method names are case-insensitive
71
+ - you have `+ - * / ^` for numerics
72
+ - you have `&& || >< !` for booleans (`><`is xor)
73
+ - you have `== != >= <= > <` for strings, booleans and numerics
74
+ - you have a `.toString()` method on anything (or, equivalently, a function `toString(x)` for any `x` ).
75
+ - you have `REPLACE`, which only knows the wildcard character `*`. (same for `MATCHES, CONTAINS`)
76
+ - you have `REGEXREPLACE` with full js Regular Expressions (same for `REGEXMATCHES, REGEXCONTAINS`)
77
+
78
+ ## IFC Expression Language Syntax
79
+
80
+ The project uses ANTLR4 for parsing. The grammar is in src/grammar/ifcExpression.g4.
81
+
82
+ The result of expression evaluation is a value of type `string, numeric, boolean, ifcObjectRef`, where `ifcObjectRef` is a reference to some object in the IFC model.
83
+
84
+ The language allows for specifying _a single expression_. There are no control statements and there is no way
85
+ to define custom functions or custom types.
86
+
87
+ An expression can be
88
+
89
+ - a literal, such as `'hello world'`, or `17`
90
+ - a variable reference, such as `$property` or `$element`,(for accessing the IFC model).
91
+
92
+ ... or a combination of multiple expressions:
93
+
94
+ - a function call, such as `REPLACE("hello world", "world", "friends")`
95
+ - a function call in 'method-call style', such as `"hello world".replace("world", "friends")`
96
+ - a combination using operators, such as `+`, `&&`, `==`
97
+
98
+ ### Types
99
+
100
+ - `string`, e.g. `'abc'` or `"abc"`: text enclosed in single or double quotes
101
+ - `boolean`, e.g. `TRUE` or `false`: true or false, either spelled all-uppercase or all-lowercase
102
+ - `numeric`, e.g. `1` or `3.141`: a decimal number optionally containing one period to separate integer part from fractional part
103
+ - `array`, e.g. `[1,2,"hi there"]: an ordered list of expressions
104
+
105
+ ### Operators
106
+
107
+ - numeric operators
108
+ - '+', '-', '\*', '/': plus, minus, multiplication, division - with the ususal precedence rules and associativity
109
+ - '^': raise to the power or, e.g. `2^3` (= 8)
110
+ - boolean operators
111
+ - `&&', `||`, `><`: boolean and, or, xor
112
+ - `!`: boolean not
113
+ - string operators
114
+ - '+': string concatenation
115
+
116
+ ### Functions
117
+
118
+ #### comparison functions
119
+
120
+ `equals(a,b)`, `greaterThan(a,b)`, `greaterThanOrEquals(a,b)`, `lessThan(a,b)`, `lessThanOrEqual(a,b)`",
121
+
122
+ #### boolean operator functions
123
+
124
+ `not(a)`, `and(a,b)`, `or(a,b)`, `xor(a,b)`, `implies(a,b)`
125
+
126
+ #### string matching
127
+
128
+ `contains(string, pattern)`, e.g. `contains('hello world', 'he*o')` returns true if the string contains the pattern. `*` matches any number of characters.
129
+
130
+ `regexContains(string, regex)`, e.g. `regexContains('hello, world', 'h[aeiou]ll[aeiou]+\\\s')` returns true if the string contains the regular expression.
131
+
132
+ `matches(string, pattern)`, e.g. `matches('hello world', 'he*o')` returns true if the whole string matches the pattern. `*` matches any number of characters.
133
+
134
+ `regexMatches(string, regex)`, e.g. `regexMatches('hello, world', 'h[aeiou]ll[aeiou]+\\\s')` returns true if the whole string matches the regular expression.
135
+
136
+ #### string replacement
137
+
138
+ `replace(string, pattern, replacement)`, e.g. `replace('hello world', 'he*o', 'bye')` returns the `string`, with all occurrences of the `pattern` replaced with `replacement`. `*` matches any number of characters.
139
+
140
+ `regexReplace(string, regex, replacement)`, e.g. `regexReplace('hello, world', 'h([aeiou]ll[aeiou]+) ', 'm$1w ')` returns the `string`, with all occurrences of the `regex` replaced with `replacement`.
141
+
142
+ #### ifc object accessor functions
143
+
144
+ `property(object: ifcPropertySetRef|ifcTypeObjectRef|ifcElementRef, name: string)`: returns an `ifcPropertyRef` or an error or an error if object has no property with that name
145
+
146
+ `propertySet(object: ifcProperty)`: returns an `ifcPropertySetRef`
147
+
148
+ `propertySet(object: ifcTypeObjectRef|ifcElementRef, name: string)`: returns an `ifcPropertySetRef` or an error if the element or type has no property set with that name.
149
+
150
+ `type(object: ifcElementRef)`: returns an `ifcTypeObjectRef` or an error.
151
+
152
+ `exists(object: ifcObjectRef): boolean` check whether an object reference obtained by the above methods actually exists (suppresses the error they generate)
153
+
154
+ #### Translation functions
155
+
156
+ `map(input, mapping: [[in, out], [in, out], ... ], default)`: finds the first `[in,out]` pair in the specified mapping where `in == input` and returns that pair's `out` value. If none is found, `default` is returned.
157
+
158
+ 'switch([[condition, out], [condition, out], ... ]', default): finds the first `[condition, out]` pair where `condition == true` and returns its `out` value. In none is found, `default` is returned.
package/dist/E.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { ArrayExpr } from "./expression/structure/ArrayExpr.js";
2
+ import { Expr } from "./expression/Expr.js";
3
+ import { StringConcatExpr } from "./expression/string/StringConcatExpr.js";
4
+ import { StringLiteralExpr } from "./expression/string/StringLiteralExpr.js";
5
+ import { ElemObjectReferenceExpr } from "./expression/reference/ElemObjectReferenceExpr.js";
6
+ import { PropObjectReferenceExpr } from "./expression/reference/PropObjectReferenceExpr.js";
7
+ import { NumericValue } from "./value/NumericValue.js";
8
+ import { DivideExpr } from "./expression/numeric/DivideExpr.js";
9
+ import { StringValue } from "./value/StringValue.js";
10
+ import { MinusExpr } from "./expression/numeric/MinusExpr.js";
11
+ import { MultiplyExpr } from "./expression/numeric/MultiplyExpr.js";
12
+ import { PlusExpr } from "./expression/numeric/PlusExpr.js";
13
+ import { NumericLiteralExpr } from "./expression/numeric/NumericLiteralExpr.js";
14
+ import { Decimal } from "decimal.js";
15
+ import { ParenthesisExpr } from "./expression/structure/ParenthesisExpr.js";
16
+ import { PowerExpr } from "./expression/numeric/PowerExpr.js";
17
+ import { UnaryMinusExpr } from "./expression/numeric/UnaryMinusExpr.js";
18
+ import { FunctionExpr } from "./expression/function/FunctionExpr.js";
19
+ import { BooleanValue } from "./value/BooleanValue.js";
20
+ import { AndExpr } from "./expression/boolean/AndExpr.js";
21
+ import { OrExpr } from "./expression/boolean/OrExpr.js";
22
+ import { XorExpr } from "./expression/boolean/XorExpr.js";
23
+ import { BooleanLiteralExpr } from "./expression/boolean/BooleanLiteralExpr.js";
24
+ import { NotExpr } from "./expression/boolean/NotExpr.js";
25
+ export declare class E {
26
+ static array(...elements: Array<Expr<any>>): ArrayExpr;
27
+ static concat(left: Expr<StringValue>, right: Expr<StringValue>): StringConcatExpr;
28
+ static string(literal: string): StringLiteralExpr;
29
+ static element(): ElemObjectReferenceExpr;
30
+ static property(): PropObjectReferenceExpr;
31
+ static div(left: Expr<NumericValue>, right: Expr<NumericValue>): DivideExpr;
32
+ static minus(left: Expr<NumericValue>, right: Expr<NumericValue>): MinusExpr;
33
+ static multiply(left: Expr<NumericValue>, right: Expr<NumericValue>): MultiplyExpr;
34
+ static plus(left: Expr<NumericValue>, right: Expr<NumericValue>): PlusExpr;
35
+ static number(literal: number | string | Decimal): NumericLiteralExpr;
36
+ static parenthesis(numericExpression: Expr<NumericValue>): ParenthesisExpr;
37
+ static power(base: Expr<NumericValue>, power: Expr<NumericValue>): PowerExpr;
38
+ static unaryMinus(numExpr: Expr<NumericValue>): UnaryMinusExpr;
39
+ static fun(functionName: string, ...funcArgs: Array<Expr<any>>): FunctionExpr;
40
+ static and(left: Expr<BooleanValue>, right: Expr<BooleanValue>): AndExpr;
41
+ static or(left: Expr<BooleanValue>, right: Expr<BooleanValue>): OrExpr;
42
+ static xor(left: Expr<BooleanValue>, right: Expr<BooleanValue>): XorExpr;
43
+ static boolean(literal: boolean): BooleanLiteralExpr;
44
+ static not(booleanExpr: Expr<BooleanValue>): NotExpr;
45
+ }
@@ -1,26 +1,37 @@
1
1
  import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
2
- import { ArrayContext, ArrayElementListContext, AttributeRefContext, ExprContext, ExprListContext, FunctionCallContext, NestedObjectChainEndContext, NestedObjectChainInnerContext, NumAddSubContext, NumAttributeRefContext, NumLitContext, NumLiteralContext, NumMulDivContext, NumParensContext, ObjectRefContext, StringAttributeRefContext, StringConcatContext, StringLiteralContext } from "./gen/parser/IfcExpressionParser.js";
2
+ import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "./gen/parser/IfcExpressionParser.js";
3
3
  import { Expr } from "./expression/Expr.js";
4
+ import { TypeManager } from "./type/TypeManager.js";
4
5
  export declare class ExprVisitor extends IfcExpressionVisitor<Expr<any>> {
5
- constructor();
6
- visitAttributeRef: (ctx: AttributeRefContext) => Expr<any>;
7
- visitObjectRef: (ctx: ObjectRefContext) => Expr<any>;
8
- visitNestedObjectChainInner: (ctx: NestedObjectChainInnerContext) => Expr<any>;
9
- visitNestedObjectChainEnd: (ctx: NestedObjectChainEndContext) => Expr<any>;
10
- private stripBrackets;
6
+ private readonly methodCallTargetStack;
7
+ private readonly typeManager;
8
+ constructor(typeManager: TypeManager);
9
+ visitExpr: (ctx: ExprContext) => Expr<any>;
10
+ visitVariableRef: (ctx: VariableRefContext) => Expr<any>;
11
+ visitSEComparison: (ctx: SEComparisonContext) => Expr<any>;
12
+ visitSEMethodCall: (ctx: SEMethodCallContext) => Expr<any>;
13
+ visitSELiteral: (ctx: SELiteralContext) => Expr<any>;
14
+ visitSEVariableRef: (ctx: SEVariableRefContext) => Expr<any>;
15
+ visitSEArrayExpr: (ctx: SEArrayExprContext) => Expr<any>;
16
+ visitSEFunctionCall: (ctx: SEFunctionCallContext) => Expr<any>;
17
+ visitSEParenthesis: (ctx: SEParenthesisContext) => Expr<any>;
18
+ visitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => Expr<any>;
19
+ visitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => Expr<any>;
20
+ visitSEAddSub: (ctx: SEAddSubContext) => Expr<any>;
21
+ private makePlusExpr;
22
+ visitSEMulDiv: (ctx: SEMulDivContext) => Expr<any>;
11
23
  visitStringLiteral: (ctx: StringLiteralContext) => Expr<any>;
12
- visitStringAttributeRef: (ctx: StringAttributeRefContext) => Expr<any>;
13
- visitStringConcat: (ctx: StringConcatContext) => Expr<any>;
14
- visitNumAttributeRef: (ctx: NumAttributeRefContext) => Expr<any>;
15
24
  visitNumLiteral: (ctx: NumLiteralContext) => Expr<any>;
16
- visitNumAddSub: (ctx: NumAddSubContext) => Expr<any>;
17
- visitNumMulDiv: (ctx: NumMulDivContext) => Expr<any>;
18
- visitNumParens: (ctx: NumParensContext) => Expr<any>;
19
- visitExpr: (ctx: ExprContext) => Expr<any>;
20
- visitNumLit: (ctx: NumLitContext) => Expr<any>;
21
- visitArray: (ctx: ArrayContext) => Expr<any>;
25
+ visitSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => Expr<any>;
26
+ visitSEPower: (ctx: SEPowerContext) => Expr<any>;
27
+ visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any>;
28
+ visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any>;
29
+ visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any>;
30
+ visitSENot: (ctx: SENotContext) => Expr<any>;
31
+ visitArrayExpr: (ctx: ArrayExprContext) => Expr<any>;
22
32
  collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>>;
23
33
  visitFunctionCall: (ctx: FunctionCallContext) => Expr<any>;
24
- collectFunctionArguments: (ctx: ExprListContext) => Array<Expr<any>>;
25
- private failNode;
34
+ collectFunctionArguments: (ctx: ExprListContext, resultSoFar?: Array<Expr<any>>) => Array<Expr<any>>;
35
+ private static failNode;
36
+ visitLiteral: (ctx: LiteralContext) => Expr<any>;
26
37
  }
@@ -1,4 +1,4 @@
1
- import { ErrorListener, Token } from "antlr4";
1
+ import { ErrorListener, ParserRuleContext, Token } from "antlr4";
2
2
  import { ExprVisitor } from "./ExprVisitor.js";
3
3
  import { IfcExpressionErrorListener } from "./IfcExpressionErrorListener.js";
4
4
  import { isNullish, isPresent } from "./IfcExpressionUtils.js";
@@ -10,25 +10,31 @@ import { StringValue } from "./value/StringValue.js";
10
10
  import { NumericValue } from "./value/NumericValue.js";
11
11
  import { BooleanValue } from "./value/BooleanValue.js";
12
12
  import { LogicalValue } from "./value/LogicalValue.js";
13
- import { LiteralValue } from "./value/LiteralValue.js";
14
13
  import { ReferenceValue } from "./value/ReferenceValue.js";
15
14
  import { IfcPropertySetAccessor } from "./context/IfcPropertySetAccessor.js";
16
15
  import { IfcPropertyAccessor } from "./context/IfcPropertyAccessor.js";
17
16
  import { IfcRootObjectAccessor } from "./context/IfcRootObjectAccessor.js";
18
17
  import { IfcTypeObjectAccessor } from "./context/IfcTypeObjectAccessor.js";
19
18
  import { NamedObjectAccessor } from "./context/NamedObjectAccessor.js";
20
- import { ExprContext } from "./gen/parser/IfcExpressionParser.js";
21
19
  import IfcExpressionVisitor from "./gen/parser/IfcExpressionVisitor.js";
22
20
  import { ObjectAccessor } from "./context/ObjectAccessor.js";
23
21
  import { IfcExpressionEvaluationException } from "./expression/IfcExpressionEvaluationException.js";
24
- import type { LiteralValueAnyArity } from "./value/LiteralValueAnyArity.js";
25
- import type { PrimitiveValueType } from "./value/PrimitiveValueType.js";
26
- import { ExprEvalResult, isExprEvalSuccess, ExprEvalError, isExprEvalError } from "./expression/ExprEvalResult.js";
22
+ import type { ExpressionValue } from "./value/ExpressionValue.js";
23
+ import type { BoxedValueTypes } from "./value/BoxedValueTypes.js";
24
+ import { ExprEvalError, ExprEvalResult, isExprEvalError, isExprEvalSuccess } from "./expression/ExprEvalResult.js";
27
25
  import { ExprKind } from "./expression/ExprKind.js";
28
- export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, LiteralValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprVisitor, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, };
29
- export type { PrimitiveValueType, LiteralValueAnyArity };
26
+ import { TypeManager } from "./type/TypeManager.js";
27
+ export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprVisitor, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, };
28
+ export type { BoxedValueTypes };
29
+ export declare class IfcExpressionParseResult {
30
+ private readonly _typeManager;
31
+ private readonly _parseTree;
32
+ constructor(typeManager: TypeManager, exprContext: any);
33
+ get typeManager(): TypeManager;
34
+ get parseTree(): ParserRuleContext;
35
+ }
30
36
  export declare class IfcExpression {
31
- static parse(input: string, errorListener?: ErrorListener<Token>): ExprContext;
32
- static evaluate(expression: string, context: IfcExpressionContext): ExprEvalResult<any>;
33
- private static extractExprTree;
37
+ static parse(input: string, errorListener?: ErrorListener<Token | number>): IfcExpressionParseResult;
38
+ private static compile;
39
+ static evaluate(expression: string, context?: IfcExpressionContext): ExprEvalResult<ExpressionValue>;
34
40
  }
@@ -1,8 +1,10 @@
1
1
  import { ErrorListener, RecognitionException, Recognizer, Token } from "antlr4";
2
- import { SyntaxErrorException } from "./SyntaxErrorException.js";
3
- export declare class IfcExpressionErrorListener extends ErrorListener<Token> {
2
+ import { SyntaxErrorException } from "./error/SyntaxErrorException.js";
3
+ import { ValidationException } from "./error/ValidationException.js";
4
+ export declare class IfcExpressionErrorListener extends ErrorListener<Token | number> {
4
5
  private exception;
5
- syntaxError(recognizer: Recognizer<Token>, offendingSymbol: Token, line: number, column: number, msg: string, e: RecognitionException | undefined): void;
6
+ validationException(validationException: ValidationException): void;
7
+ syntaxError(recognizer: Recognizer<Token | number>, offendingSymbol: Token | number, line: number, column: number, msg: string, e: RecognitionException | undefined): void;
6
8
  isErrorOccurred(): boolean;
7
- getException(): SyntaxErrorException;
9
+ getException(): SyntaxErrorException | ValidationException;
8
10
  }
@@ -1,2 +1,3 @@
1
1
  export declare function isNullish(val: any): boolean;
2
2
  export declare function isPresent(val: any): boolean;
3
+ export declare function isFunction(val: any): boolean;
@@ -0,0 +1,41 @@
1
+ import IfcExpressionListener from "./gen/parser/IfcExpressionListener.js";
2
+ import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "./gen/parser/IfcExpressionParser.js";
3
+ import { TypeManager } from "./type/TypeManager.js";
4
+ export declare class IfcExpressionValidationListener extends IfcExpressionListener {
5
+ private readonly typeManager;
6
+ private methodCallTargetStack;
7
+ constructor();
8
+ getTypeManager(): TypeManager;
9
+ enterFunctionCall: (ctx: FunctionCallContext) => void;
10
+ enterSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => void;
11
+ exitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => void;
12
+ exitSEComparison: (ctx: SEComparisonContext) => void;
13
+ exitSEParenthesis: (ctx: SEParenthesisContext) => void;
14
+ exitSELiteral: (ctx: SELiteralContext) => void;
15
+ exitLiteral: (ctx: LiteralContext) => void;
16
+ exitNumLiteral: (ctx: NumLiteralContext) => void;
17
+ exitStringLiteral: (ctx: StringLiteralContext) => void;
18
+ exitBooleanLiteral: (ctx: BooleanLiteralContext) => void;
19
+ exitExpr: (ctx: ExprContext) => void;
20
+ exitSEMulDiv: (ctx: SEMulDivContext) => void;
21
+ exitSEPower: (ctx: SEPowerContext) => void;
22
+ exitSEFunctionCall: (ctx: SEFunctionCallContext) => void;
23
+ exitSEArrayExpr: (ctx: SEArrayExprContext) => void;
24
+ exitSENot: (ctx: SENotContext) => void;
25
+ exitSEVariableRef: (ctx: SEVariableRefContext) => void;
26
+ exitSEUnaryMinus: (ctx: SEUnaryMinusContext) => void;
27
+ exitSEAddSub: (ctx: SEAddSubContext) => void;
28
+ exitSEMethodCall: (ctx: SEMethodCallContext) => void;
29
+ enterMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void;
30
+ exitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void;
31
+ enterMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void;
32
+ private pushMethodCallTarget;
33
+ exitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void;
34
+ exitFunctionCall: (ctx: FunctionCallContext) => void;
35
+ private collectArgumentTypes;
36
+ exitExprList: (ctx: ExprListContext) => void;
37
+ exitArrayExpr: (ctx: ArrayExprContext) => void;
38
+ private collectArrayElementTypes;
39
+ exitArrayElementList: (ctx: ArrayElementListContext) => void;
40
+ exitVariableRef: (ctx: VariableRefContext) => void;
41
+ }
package/dist/cjs/E.js ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E = void 0;
4
+ const ArrayExpr_js_1 = require("./expression/structure/ArrayExpr.js");
5
+ const StringConcatExpr_js_1 = require("./expression/string/StringConcatExpr.js");
6
+ const StringLiteralExpr_js_1 = require("./expression/string/StringLiteralExpr.js");
7
+ const ElemObjectReferenceExpr_js_1 = require("./expression/reference/ElemObjectReferenceExpr.js");
8
+ const PropObjectReferenceExpr_js_1 = require("./expression/reference/PropObjectReferenceExpr.js");
9
+ const DivideExpr_js_1 = require("./expression/numeric/DivideExpr.js");
10
+ const MinusExpr_js_1 = require("./expression/numeric/MinusExpr.js");
11
+ const MultiplyExpr_js_1 = require("./expression/numeric/MultiplyExpr.js");
12
+ const PlusExpr_js_1 = require("./expression/numeric/PlusExpr.js");
13
+ const NumericLiteralExpr_js_1 = require("./expression/numeric/NumericLiteralExpr.js");
14
+ const ParenthesisExpr_js_1 = require("./expression/structure/ParenthesisExpr.js");
15
+ const PowerExpr_js_1 = require("./expression/numeric/PowerExpr.js");
16
+ const UnaryMinusExpr_js_1 = require("./expression/numeric/UnaryMinusExpr.js");
17
+ const FunctionExpr_js_1 = require("./expression/function/FunctionExpr.js");
18
+ const AndExpr_js_1 = require("./expression/boolean/AndExpr.js");
19
+ const OrExpr_js_1 = require("./expression/boolean/OrExpr.js");
20
+ const XorExpr_js_1 = require("./expression/boolean/XorExpr.js");
21
+ const BooleanLiteralExpr_js_1 = require("./expression/boolean/BooleanLiteralExpr.js");
22
+ const NotExpr_js_1 = require("./expression/boolean/NotExpr.js");
23
+ class E {
24
+ static array(...elements) {
25
+ return new ArrayExpr_js_1.ArrayExpr(elements);
26
+ }
27
+ static concat(left, right) {
28
+ return new StringConcatExpr_js_1.StringConcatExpr(left, right);
29
+ }
30
+ static string(literal) {
31
+ return new StringLiteralExpr_js_1.StringLiteralExpr(literal);
32
+ }
33
+ static element() {
34
+ return new ElemObjectReferenceExpr_js_1.ElemObjectReferenceExpr();
35
+ }
36
+ static property() {
37
+ return new PropObjectReferenceExpr_js_1.PropObjectReferenceExpr();
38
+ }
39
+ static div(left, right) {
40
+ return new DivideExpr_js_1.DivideExpr(left, right);
41
+ }
42
+ static minus(left, right) {
43
+ return new MinusExpr_js_1.MinusExpr(left, right);
44
+ }
45
+ static multiply(left, right) {
46
+ return new MultiplyExpr_js_1.MultiplyExpr(left, right);
47
+ }
48
+ static plus(left, right) {
49
+ return new PlusExpr_js_1.PlusExpr(left, right);
50
+ }
51
+ static number(literal) {
52
+ return new NumericLiteralExpr_js_1.NumericLiteralExpr(literal);
53
+ }
54
+ static parenthesis(numericExpression) {
55
+ return new ParenthesisExpr_js_1.ParenthesisExpr(numericExpression);
56
+ }
57
+ static power(base, power) {
58
+ return new PowerExpr_js_1.PowerExpr(base, power);
59
+ }
60
+ static unaryMinus(numExpr) {
61
+ return new UnaryMinusExpr_js_1.UnaryMinusExpr(numExpr);
62
+ }
63
+ static fun(functionName, ...funcArgs) {
64
+ return new FunctionExpr_js_1.FunctionExpr(functionName, funcArgs);
65
+ }
66
+ static and(left, right) {
67
+ return new AndExpr_js_1.AndExpr(left, right);
68
+ }
69
+ static or(left, right) {
70
+ return new OrExpr_js_1.OrExpr(left, right);
71
+ }
72
+ static xor(left, right) {
73
+ return new XorExpr_js_1.XorExpr(left, right);
74
+ }
75
+ static boolean(literal) {
76
+ return new BooleanLiteralExpr_js_1.BooleanLiteralExpr(literal);
77
+ }
78
+ static not(booleanExpr) {
79
+ return new NotExpr_js_1.NotExpr(booleanExpr);
80
+ }
81
+ }
82
+ exports.E = E;
83
+ //# sourceMappingURL=E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/E.ts"],"names":[],"mappings":";;;AAAA,sEAAgE;AAEhE,iFAA2E;AAC3E,mFAA6E;AAC7E,kGAA4F;AAC5F,kGAA4F;AAE5F,sEAAgE;AAEhE,oEAA8D;AAC9D,0EAAoE;AACpE,kEAA4D;AAC5D,sFAAgF;AAEhF,kFAA4E;AAC5E,oEAA8D;AAC9D,8EAAwE;AACxE,2EAAqE;AAErE,gEAA0D;AAC1D,8DAAwD;AACxD,gEAA0D;AAC1D,sFAAgF;AAChF,gEAA0D;AAE1D,MAAa,CAAC;IACL,MAAM,CAAC,KAAK,CAAC,GAAG,QAA0B;QAC/C,OAAO,IAAI,wBAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IACM,MAAM,CAAC,MAAM,CAClB,IAAuB,EACvB,KAAwB;QAExB,OAAO,IAAI,sCAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,OAAe;QAClC,OAAO,IAAI,wCAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACM,MAAM,CAAC,OAAO;QACnB,OAAO,IAAI,oDAAuB,EAAE,CAAC;IACvC,CAAC;IACM,MAAM,CAAC,QAAQ;QACpB,OAAO,IAAI,oDAAuB,EAAE,CAAC;IACvC,CAAC;IACM,MAAM,CAAC,GAAG,CACf,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,0BAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,KAAK,CACjB,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,wBAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACM,MAAM,CAAC,QAAQ,CACpB,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,8BAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACM,MAAM,CAAC,IAAI,CAChB,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,sBAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,OAAkC;QACrD,OAAO,IAAI,0CAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACM,MAAM,CAAC,WAAW,CACvB,iBAAqC;QAErC,OAAO,IAAI,oCAAe,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IACM,MAAM,CAAC,KAAK,CACjB,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,wBAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACM,MAAM,CAAC,UAAU,CAAC,OAA2B;QAClD,OAAO,IAAI,kCAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,GAAG,CACf,YAAoB,EACpB,GAAG,QAA0B;QAE7B,OAAO,IAAI,8BAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IACM,MAAM,CAAC,GAAG,CACf,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,oBAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IACM,MAAM,CAAC,EAAE,CACd,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,kBAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACM,MAAM,CAAC,GAAG,CACf,IAAwB,EACxB,KAAyB;QAEzB,OAAO,IAAI,oBAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IACM,MAAM,CAAC,OAAO,CAAC,OAAgB;QACpC,OAAO,IAAI,0CAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACM,MAAM,CAAC,GAAG,CAAC,WAA+B;QAC/C,OAAO,IAAI,oBAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;CACF;AA1FD,cA0FC","file":"E.js","sourcesContent":["import { ArrayExpr } from \"./expression/structure/ArrayExpr.js\";\nimport { Expr } from \"./expression/Expr.js\";\nimport { StringConcatExpr } from \"./expression/string/StringConcatExpr.js\";\nimport { StringLiteralExpr } from \"./expression/string/StringLiteralExpr.js\";\nimport { ElemObjectReferenceExpr } from \"./expression/reference/ElemObjectReferenceExpr.js\";\nimport { PropObjectReferenceExpr } from \"./expression/reference/PropObjectReferenceExpr.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { DivideExpr } from \"./expression/numeric/DivideExpr.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { MinusExpr } from \"./expression/numeric/MinusExpr.js\";\nimport { MultiplyExpr } from \"./expression/numeric/MultiplyExpr.js\";\nimport { PlusExpr } from \"./expression/numeric/PlusExpr.js\";\nimport { NumericLiteralExpr } from \"./expression/numeric/NumericLiteralExpr.js\";\nimport { Decimal } from \"decimal.js\";\nimport { ParenthesisExpr } from \"./expression/structure/ParenthesisExpr.js\";\nimport { PowerExpr } from \"./expression/numeric/PowerExpr.js\";\nimport { UnaryMinusExpr } from \"./expression/numeric/UnaryMinusExpr.js\";\nimport { FunctionExpr } from \"./expression/function/FunctionExpr.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { AndExpr } from \"./expression/boolean/AndExpr.js\";\nimport { OrExpr } from \"./expression/boolean/OrExpr.js\";\nimport { XorExpr } from \"./expression/boolean/XorExpr.js\";\nimport { BooleanLiteralExpr } from \"./expression/boolean/BooleanLiteralExpr.js\";\nimport { NotExpr } from \"./expression/boolean/NotExpr.js\";\n\nexport class E {\n public static array(...elements: Array<Expr<any>>): ArrayExpr {\n return new ArrayExpr(elements);\n }\n public static concat(\n left: Expr<StringValue>,\n right: Expr<StringValue>\n ): StringConcatExpr {\n return new StringConcatExpr(left, right);\n }\n public static string(literal: string): StringLiteralExpr {\n return new StringLiteralExpr(literal);\n }\n public static element() {\n return new ElemObjectReferenceExpr();\n }\n public static property() {\n return new PropObjectReferenceExpr();\n }\n public static div(\n left: Expr<NumericValue>,\n right: Expr<NumericValue>\n ): DivideExpr {\n return new DivideExpr(left, right);\n }\n public static minus(\n left: Expr<NumericValue>,\n right: Expr<NumericValue>\n ): MinusExpr {\n return new MinusExpr(left, right);\n }\n public static multiply(\n left: Expr<NumericValue>,\n right: Expr<NumericValue>\n ): MultiplyExpr {\n return new MultiplyExpr(left, right);\n }\n public static plus(\n left: Expr<NumericValue>,\n right: Expr<NumericValue>\n ): PlusExpr {\n return new PlusExpr(left, right);\n }\n public static number(literal: number | string | Decimal): NumericLiteralExpr {\n return new NumericLiteralExpr(literal);\n }\n public static parenthesis(\n numericExpression: Expr<NumericValue>\n ): ParenthesisExpr {\n return new ParenthesisExpr(numericExpression);\n }\n public static power(\n base: Expr<NumericValue>,\n power: Expr<NumericValue>\n ): PowerExpr {\n return new PowerExpr(base, power);\n }\n public static unaryMinus(numExpr: Expr<NumericValue>): UnaryMinusExpr {\n return new UnaryMinusExpr(numExpr);\n }\n public static fun(\n functionName: string,\n ...funcArgs: Array<Expr<any>>\n ): FunctionExpr {\n return new FunctionExpr(functionName, funcArgs);\n }\n public static and(\n left: Expr<BooleanValue>,\n right: Expr<BooleanValue>\n ): AndExpr {\n return new AndExpr(left, right);\n }\n public static or(\n left: Expr<BooleanValue>,\n right: Expr<BooleanValue>\n ): OrExpr {\n return new OrExpr(left, right);\n }\n public static xor(\n left: Expr<BooleanValue>,\n right: Expr<BooleanValue>\n ): XorExpr {\n return new XorExpr(left, right);\n }\n public static boolean(literal: boolean) {\n return new BooleanLiteralExpr(literal);\n }\n public static not(booleanExpr: Expr<BooleanValue>): NotExpr {\n return new NotExpr(booleanExpr);\n }\n}\n"]}