ifc-expressions 2.1.1 → 2.3.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 (208) hide show
  1. package/README.md +9 -1
  2. package/dist/IfcExpression.d.ts +6 -1
  3. package/dist/cjs/E.js.map +1 -1
  4. package/dist/cjs/IfcExpression.js +11 -1
  5. package/dist/cjs/IfcExpression.js.map +1 -1
  6. package/dist/cjs/compiler/ExprCompiler.js.map +1 -1
  7. package/dist/cjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -1
  8. package/dist/cjs/error/MissingFunctionArgumentException.js.map +1 -1
  9. package/dist/cjs/error/SpuriousFunctionArgumentException.js.map +1 -1
  10. package/dist/cjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
  11. package/dist/cjs/error/value/DateFormatException.js +10 -0
  12. package/dist/cjs/error/value/DateFormatException.js.map +1 -0
  13. package/dist/cjs/expression/boolean/AndExpr.js.map +1 -1
  14. package/dist/cjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
  15. package/dist/cjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
  16. package/dist/cjs/expression/boolean/NotExpr.js.map +1 -1
  17. package/dist/cjs/expression/boolean/OrExpr.js.map +1 -1
  18. package/dist/cjs/expression/boolean/XorExpr.js.map +1 -1
  19. package/dist/cjs/expression/function/Func.js +2 -0
  20. package/dist/cjs/expression/function/Func.js.map +1 -1
  21. package/dist/cjs/expression/function/IfcExpressionFunctions.js +12 -0
  22. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  23. package/dist/cjs/expression/function/arg/FuncArgArray.js.map +1 -1
  24. package/dist/cjs/expression/function/arg/FuncArgBase.js +9 -2
  25. package/dist/cjs/expression/function/arg/FuncArgBase.js.map +1 -1
  26. package/dist/cjs/expression/function/arg/FuncArgIfcDateString.js +34 -0
  27. package/dist/cjs/expression/function/arg/FuncArgIfcDateString.js.map +1 -0
  28. package/dist/cjs/expression/function/arg/FuncArgIfcDateTime.js +27 -0
  29. package/dist/cjs/expression/function/arg/FuncArgIfcDateTime.js.map +1 -0
  30. package/dist/cjs/expression/function/arg/FuncArgIfcDateTimeString.js +35 -0
  31. package/dist/cjs/expression/function/arg/FuncArgIfcDateTimeString.js.map +1 -0
  32. package/dist/cjs/expression/function/arg/FuncArgIfcDuration.js +27 -0
  33. package/dist/cjs/expression/function/arg/FuncArgIfcDuration.js.map +1 -0
  34. package/dist/cjs/expression/function/arg/FuncArgIfcDurationString.js +30 -0
  35. package/dist/cjs/expression/function/arg/FuncArgIfcDurationString.js.map +1 -0
  36. package/dist/cjs/expression/function/arg/FuncArgIfcTimeStamp.js +27 -0
  37. package/dist/cjs/expression/function/arg/FuncArgIfcTimeStamp.js.map +1 -0
  38. package/dist/cjs/expression/function/arg/FuncArgIfcTimeStampNumeric.js +28 -0
  39. package/dist/cjs/expression/function/arg/FuncArgIfcTimeStampNumeric.js.map +1 -0
  40. package/dist/cjs/expression/function/arg/FuncArgIfcTimeString.js +34 -0
  41. package/dist/cjs/expression/function/arg/FuncArgIfcTimeString.js.map +1 -0
  42. package/dist/cjs/expression/function/arg/FuncArgLogicalOrBoolean.js.map +1 -1
  43. package/dist/cjs/expression/function/arg/FuncArgRegexFlag.js.map +1 -1
  44. package/dist/cjs/expression/function/arg/FuncArgUnion.js +32 -0
  45. package/dist/cjs/expression/function/arg/FuncArgUnion.js.map +1 -0
  46. package/dist/cjs/expression/function/impl/ADDDURATION.js +53 -0
  47. package/dist/cjs/expression/function/impl/ADDDURATION.js.map +1 -0
  48. package/dist/cjs/expression/function/impl/AT.js.map +1 -1
  49. package/dist/cjs/expression/function/impl/ApplyRegex.js.map +1 -1
  50. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  51. package/dist/cjs/expression/function/impl/IF.js.map +1 -1
  52. package/dist/cjs/expression/function/impl/NOT.js.map +1 -1
  53. package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -1
  54. package/dist/cjs/expression/function/impl/SPLIT.js.map +1 -1
  55. package/dist/cjs/expression/function/impl/SUBSTRING.js.map +1 -1
  56. package/dist/cjs/expression/function/impl/TOBOOLEAN.js +0 -1
  57. package/dist/cjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  58. package/dist/cjs/expression/function/impl/TOIFCDATE.js +33 -0
  59. package/dist/cjs/expression/function/impl/TOIFCDATE.js.map +1 -0
  60. package/dist/cjs/expression/function/impl/TOIFCDATETIME.js +36 -0
  61. package/dist/cjs/expression/function/impl/TOIFCDATETIME.js.map +1 -0
  62. package/dist/cjs/expression/function/impl/TOIFCDURATION.js +21 -0
  63. package/dist/cjs/expression/function/impl/TOIFCDURATION.js.map +1 -0
  64. package/dist/cjs/expression/function/impl/TOIFCTIME.js +33 -0
  65. package/dist/cjs/expression/function/impl/TOIFCTIME.js.map +1 -0
  66. package/dist/cjs/expression/function/impl/TOIFCTIMESTAMP.js +36 -0
  67. package/dist/cjs/expression/function/impl/TOIFCTIMESTAMP.js.map +1 -0
  68. package/dist/cjs/expression/function/impl/TOLOGICAL.js.map +1 -1
  69. package/dist/cjs/expression/function/impl/TONUMERIC.js +0 -1
  70. package/dist/cjs/expression/function/impl/TONUMERIC.js.map +1 -1
  71. package/dist/cjs/type/Types.js +35 -0
  72. package/dist/cjs/type/Types.js.map +1 -1
  73. package/dist/cjs/util/TextSpan.js +0 -1
  74. package/dist/cjs/util/TextSpan.js.map +1 -1
  75. package/dist/cjs/value/BooleanValue.js.map +1 -1
  76. package/dist/cjs/value/ExpressionValue.js.map +1 -1
  77. package/dist/cjs/value/IfcDateTimeValue.js +194 -0
  78. package/dist/cjs/value/IfcDateTimeValue.js.map +1 -0
  79. package/dist/cjs/value/IfcDateValue.js +68 -0
  80. package/dist/cjs/value/IfcDateValue.js.map +1 -0
  81. package/dist/cjs/value/IfcDurationValue.js +149 -0
  82. package/dist/cjs/value/IfcDurationValue.js.map +1 -0
  83. package/dist/cjs/value/IfcTimeStampValue.js +62 -0
  84. package/dist/cjs/value/IfcTimeStampValue.js.map +1 -0
  85. package/dist/cjs/value/IfcTimeValue.js +93 -0
  86. package/dist/cjs/value/IfcTimeValue.js.map +1 -0
  87. package/dist/cjs/value/LogicalValue.js.map +1 -1
  88. package/dist/cjs/value/Value.js.map +1 -1
  89. package/dist/cjs/value/ValueType.js +3 -0
  90. package/dist/cjs/value/ValueType.js.map +1 -0
  91. package/dist/error/value/DateFormatException.d.ts +3 -0
  92. package/dist/expression/function/Func.d.ts +3 -0
  93. package/dist/expression/function/arg/FuncArgBase.d.ts +1 -0
  94. package/dist/expression/function/arg/FuncArgIfcDateString.d.ts +11 -0
  95. package/dist/expression/function/arg/FuncArgIfcDateTime.d.ts +11 -0
  96. package/dist/expression/function/arg/FuncArgIfcDateTimeString.d.ts +11 -0
  97. package/dist/expression/function/arg/FuncArgIfcDuration.d.ts +11 -0
  98. package/dist/expression/function/arg/FuncArgIfcDurationString.d.ts +11 -0
  99. package/dist/expression/function/arg/FuncArgIfcTimeStamp.d.ts +11 -0
  100. package/dist/expression/function/arg/FuncArgIfcTimeStampNumeric.d.ts +11 -0
  101. package/dist/expression/function/arg/FuncArgIfcTimeString.d.ts +11 -0
  102. package/dist/expression/function/arg/FuncArgUnion.d.ts +14 -0
  103. package/dist/expression/function/impl/ADDDURATION.d.ts +10 -0
  104. package/dist/expression/function/impl/TOBOOLEAN.d.ts +0 -1
  105. package/dist/expression/function/impl/TOIFCDATE.d.ts +10 -0
  106. package/dist/expression/function/impl/TOIFCDATETIME.d.ts +10 -0
  107. package/dist/expression/function/impl/TOIFCDURATION.d.ts +10 -0
  108. package/dist/expression/function/impl/TOIFCTIME.d.ts +10 -0
  109. package/dist/expression/function/impl/TOIFCTIMESTAMP.d.ts +10 -0
  110. package/dist/expression/function/impl/TONUMERIC.d.ts +0 -1
  111. package/dist/mjs/E.js.map +1 -1
  112. package/dist/mjs/IfcExpression.js +6 -1
  113. package/dist/mjs/IfcExpression.js.map +1 -1
  114. package/dist/mjs/compiler/ExprCompiler.js.map +1 -1
  115. package/dist/mjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -1
  116. package/dist/mjs/error/MissingFunctionArgumentException.js.map +1 -1
  117. package/dist/mjs/error/SpuriousFunctionArgumentException.js.map +1 -1
  118. package/dist/mjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
  119. package/dist/mjs/error/value/DateFormatException.js +6 -0
  120. package/dist/mjs/error/value/DateFormatException.js.map +1 -0
  121. package/dist/mjs/expression/boolean/AndExpr.js.map +1 -1
  122. package/dist/mjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
  123. package/dist/mjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
  124. package/dist/mjs/expression/boolean/NotExpr.js.map +1 -1
  125. package/dist/mjs/expression/boolean/OrExpr.js.map +1 -1
  126. package/dist/mjs/expression/boolean/XorExpr.js.map +1 -1
  127. package/dist/mjs/expression/function/Func.js +2 -0
  128. package/dist/mjs/expression/function/Func.js.map +1 -1
  129. package/dist/mjs/expression/function/IfcExpressionFunctions.js +12 -0
  130. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  131. package/dist/mjs/expression/function/arg/FuncArgArray.js.map +1 -1
  132. package/dist/mjs/expression/function/arg/FuncArgBase.js +10 -3
  133. package/dist/mjs/expression/function/arg/FuncArgBase.js.map +1 -1
  134. package/dist/mjs/expression/function/arg/FuncArgIfcDateString.js +30 -0
  135. package/dist/mjs/expression/function/arg/FuncArgIfcDateString.js.map +1 -0
  136. package/dist/mjs/expression/function/arg/FuncArgIfcDateTime.js +23 -0
  137. package/dist/mjs/expression/function/arg/FuncArgIfcDateTime.js.map +1 -0
  138. package/dist/mjs/expression/function/arg/FuncArgIfcDateTimeString.js +31 -0
  139. package/dist/mjs/expression/function/arg/FuncArgIfcDateTimeString.js.map +1 -0
  140. package/dist/mjs/expression/function/arg/FuncArgIfcDuration.js +23 -0
  141. package/dist/mjs/expression/function/arg/FuncArgIfcDuration.js.map +1 -0
  142. package/dist/mjs/expression/function/arg/FuncArgIfcDurationString.js +26 -0
  143. package/dist/mjs/expression/function/arg/FuncArgIfcDurationString.js.map +1 -0
  144. package/dist/mjs/expression/function/arg/FuncArgIfcTimeStamp.js +23 -0
  145. package/dist/mjs/expression/function/arg/FuncArgIfcTimeStamp.js.map +1 -0
  146. package/dist/mjs/expression/function/arg/FuncArgIfcTimeStampNumeric.js +24 -0
  147. package/dist/mjs/expression/function/arg/FuncArgIfcTimeStampNumeric.js.map +1 -0
  148. package/dist/mjs/expression/function/arg/FuncArgIfcTimeString.js +30 -0
  149. package/dist/mjs/expression/function/arg/FuncArgIfcTimeString.js.map +1 -0
  150. package/dist/mjs/expression/function/arg/FuncArgLogicalOrBoolean.js.map +1 -1
  151. package/dist/mjs/expression/function/arg/FuncArgRegexFlag.js.map +1 -1
  152. package/dist/mjs/expression/function/arg/FuncArgUnion.js +28 -0
  153. package/dist/mjs/expression/function/arg/FuncArgUnion.js.map +1 -0
  154. package/dist/mjs/expression/function/impl/ADDDURATION.js +49 -0
  155. package/dist/mjs/expression/function/impl/ADDDURATION.js.map +1 -0
  156. package/dist/mjs/expression/function/impl/AT.js.map +1 -1
  157. package/dist/mjs/expression/function/impl/ApplyRegex.js.map +1 -1
  158. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  159. package/dist/mjs/expression/function/impl/IF.js.map +1 -1
  160. package/dist/mjs/expression/function/impl/NOT.js.map +1 -1
  161. package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -1
  162. package/dist/mjs/expression/function/impl/SPLIT.js.map +1 -1
  163. package/dist/mjs/expression/function/impl/SUBSTRING.js.map +1 -1
  164. package/dist/mjs/expression/function/impl/TOBOOLEAN.js +0 -1
  165. package/dist/mjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  166. package/dist/mjs/expression/function/impl/TOIFCDATE.js +29 -0
  167. package/dist/mjs/expression/function/impl/TOIFCDATE.js.map +1 -0
  168. package/dist/mjs/expression/function/impl/TOIFCDATETIME.js +32 -0
  169. package/dist/mjs/expression/function/impl/TOIFCDATETIME.js.map +1 -0
  170. package/dist/mjs/expression/function/impl/TOIFCDURATION.js +17 -0
  171. package/dist/mjs/expression/function/impl/TOIFCDURATION.js.map +1 -0
  172. package/dist/mjs/expression/function/impl/TOIFCTIME.js +29 -0
  173. package/dist/mjs/expression/function/impl/TOIFCTIME.js.map +1 -0
  174. package/dist/mjs/expression/function/impl/TOIFCTIMESTAMP.js +32 -0
  175. package/dist/mjs/expression/function/impl/TOIFCTIMESTAMP.js.map +1 -0
  176. package/dist/mjs/expression/function/impl/TOLOGICAL.js.map +1 -1
  177. package/dist/mjs/expression/function/impl/TONUMERIC.js +0 -1
  178. package/dist/mjs/expression/function/impl/TONUMERIC.js.map +1 -1
  179. package/dist/mjs/type/Types.js +35 -0
  180. package/dist/mjs/type/Types.js.map +1 -1
  181. package/dist/mjs/util/TextSpan.js +0 -1
  182. package/dist/mjs/util/TextSpan.js.map +1 -1
  183. package/dist/mjs/value/BooleanValue.js.map +1 -1
  184. package/dist/mjs/value/ExpressionValue.js.map +1 -1
  185. package/dist/mjs/value/IfcDateTimeValue.js +186 -0
  186. package/dist/mjs/value/IfcDateTimeValue.js.map +1 -0
  187. package/dist/mjs/value/IfcDateValue.js +64 -0
  188. package/dist/mjs/value/IfcDateValue.js.map +1 -0
  189. package/dist/mjs/value/IfcDurationValue.js +142 -0
  190. package/dist/mjs/value/IfcDurationValue.js.map +1 -0
  191. package/dist/mjs/value/IfcTimeStampValue.js +58 -0
  192. package/dist/mjs/value/IfcTimeStampValue.js.map +1 -0
  193. package/dist/mjs/value/IfcTimeValue.js +86 -0
  194. package/dist/mjs/value/IfcTimeValue.js.map +1 -0
  195. package/dist/mjs/value/LogicalValue.js.map +1 -1
  196. package/dist/mjs/value/Value.js.map +1 -1
  197. package/dist/mjs/value/ValueType.js +2 -0
  198. package/dist/mjs/value/ValueType.js.map +1 -0
  199. package/dist/type/Types.d.ts +15 -0
  200. package/dist/value/ExpressionValue.d.ts +6 -1
  201. package/dist/value/IfcDateTimeValue.d.ts +44 -0
  202. package/dist/value/IfcDateValue.d.ts +24 -0
  203. package/dist/value/IfcDurationValue.d.ts +53 -0
  204. package/dist/value/IfcTimeStampValue.d.ts +18 -0
  205. package/dist/value/IfcTimeValue.d.ts +27 -0
  206. package/dist/value/Value.d.ts +2 -1
  207. package/dist/value/ValueType.d.ts +6 -0
  208. package/package.json +1 -1
package/README.md CHANGED
@@ -79,7 +79,7 @@ Hints:
79
79
 
80
80
  The project uses ANTLR4 for parsing. The grammar is in src/grammar/ifcExpression.g4.
81
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.
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, or a temporal type (`IfcDateTime`, `IfcDate`, `IfcTime`, `IfcDuration`, and `IfcTimeStamp`)
83
83
 
84
84
  The language allows for specifying _a single expression_. There are no control statements and there is no way
85
85
  to define custom functions or custom types.
@@ -115,6 +115,14 @@ An expression can be
115
115
 
116
116
  ### Functions
117
117
 
118
+ #### conversion functions
119
+
120
+ `toString(a)`, `toNumeric(a)`, `toIfcDateTime(a)`, etc.
121
+
122
+ #### temporal functions
123
+
124
+ `addDuration(IfcTimeStamp|IfcDateTime, IfcDuration)`
125
+
118
126
  #### comparison functions
119
127
 
120
128
  `equals(a,b)`, `greaterThan(a,b)`, `greaterThanOrEquals(a,b)`, `lessThan(a,b)`, `lessThanOrEqual(a,b)`",
@@ -26,7 +26,12 @@ import { ExprKind } from "./expression/ExprKind.js";
26
26
  import { TypeManager } from "./compiler/TypeManager.js";
27
27
  import { ExprToTextInputLinker } from "./compiler/ExprToTextInputLinker.js";
28
28
  import { ExprFacade } from "./expression/ExprFacade.js";
29
- export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
29
+ import { IfcDurationValue } from "./value/IfcDurationValue.js";
30
+ import { IfcDateValue } from "./value/IfcDateValue.js";
31
+ import { IfcDateTimeValue } from "./value/IfcDateTimeValue.js";
32
+ import { IfcTimeValue } from "./value/IfcTimeValue.js";
33
+ import { IfcTimeStampValue } from "./value/IfcTimeStampValue.js";
34
+ export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
30
35
  export type { BoxedValueTypes };
31
36
  export declare class IfcExpressionParseResult {
32
37
  private readonly _input;
package/dist/cjs/E.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/E.ts"],"names":[],"mappings":"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","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\";\nimport { Logical } from \"./value/LogicalValue\";\nimport { LogicalLiteralExpr } from \"./expression/boolean/LogicalLiteralExpr\";\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 logical(literal: Logical) {\n return new LogicalLiteralExpr(literal);\n }\n public static not(booleanExpr: Expr<BooleanValue>): NotExpr {\n return new NotExpr(booleanExpr);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/E.ts"],"names":[],"mappings":"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","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\";\nimport { Logical } from \"./value/LogicalValue.js\";\nimport { LogicalLiteralExpr } from \"./expression/boolean/LogicalLiteralExpr.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 logical(literal: Logical) {\n return new LogicalLiteralExpr(literal);\n }\n public static not(booleanExpr: Expr<BooleanValue>): NotExpr {\n return new NotExpr(booleanExpr);\n }\n}\n"]}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.IfcExpression = exports.IfcExpressionParseResult = exports.ExprFacade = exports.ExprToTextInputLinker = exports.isExprEvalSuccess = exports.isExprEvalError = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprKind = exports.ExprCompiler = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
6
+ exports.IfcExpression = exports.IfcExpressionParseResult = exports.ExprFacade = exports.ExprToTextInputLinker = exports.isExprEvalSuccess = exports.isExprEvalError = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprKind = exports.ExprCompiler = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.IfcTimeStampValue = exports.IfcDurationValue = exports.IfcTimeValue = exports.IfcDateTimeValue = exports.IfcDateValue = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
7
7
  const antlr4_1 = require("antlr4");
8
8
  const ExprCompiler_js_1 = require("./compiler/ExprCompiler.js");
9
9
  Object.defineProperty(exports, "ExprCompiler", { enumerable: true, get: function () { return ExprCompiler_js_1.ExprCompiler; } });
@@ -53,6 +53,16 @@ const ExprToTextInputLinker_js_1 = require("./compiler/ExprToTextInputLinker.js"
53
53
  Object.defineProperty(exports, "ExprToTextInputLinker", { enumerable: true, get: function () { return ExprToTextInputLinker_js_1.ExprToTextInputLinker; } });
54
54
  const ExprFacade_js_1 = require("./expression/ExprFacade.js");
55
55
  Object.defineProperty(exports, "ExprFacade", { enumerable: true, get: function () { return ExprFacade_js_1.ExprFacade; } });
56
+ const IfcDurationValue_js_1 = require("./value/IfcDurationValue.js");
57
+ Object.defineProperty(exports, "IfcDurationValue", { enumerable: true, get: function () { return IfcDurationValue_js_1.IfcDurationValue; } });
58
+ const IfcDateValue_js_1 = require("./value/IfcDateValue.js");
59
+ Object.defineProperty(exports, "IfcDateValue", { enumerable: true, get: function () { return IfcDateValue_js_1.IfcDateValue; } });
60
+ const IfcDateTimeValue_js_1 = require("./value/IfcDateTimeValue.js");
61
+ Object.defineProperty(exports, "IfcDateTimeValue", { enumerable: true, get: function () { return IfcDateTimeValue_js_1.IfcDateTimeValue; } });
62
+ const IfcTimeValue_js_1 = require("./value/IfcTimeValue.js");
63
+ Object.defineProperty(exports, "IfcTimeValue", { enumerable: true, get: function () { return IfcTimeValue_js_1.IfcTimeValue; } });
64
+ const IfcTimeStampValue_js_1 = require("./value/IfcTimeStampValue.js");
65
+ Object.defineProperty(exports, "IfcTimeStampValue", { enumerable: true, get: function () { return IfcTimeStampValue_js_1.IfcTimeStampValue; } });
56
66
  class IfcExpressionParseResult {
57
67
  constructor(input, typeManager, exprContext) {
58
68
  this._typeManager = typeManager;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\nimport { ExprFacade } from \"./expression/ExprFacade\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n ExprFacade,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): ExprFacade<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return new ExprFacade(expr);\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context);\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: ExprFacade<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n return expr.evaluate(context);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\nimport { ExprFacade } from \"./expression/ExprFacade.js\";\nimport { IfcDurationValue } from \"./value/IfcDurationValue\";\nimport { IfcDateValue } from \"./value/IfcDateValue.js\";\nimport { IfcDateTimeValue } from \"./value/IfcDateTimeValue.js\";\nimport { IfcTimeValue } from \"./value/IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./value/IfcTimeStampValue.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n ExprFacade,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): ExprFacade<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return new ExprFacade(expr);\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context);\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: ExprFacade<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n return expr.evaluate(context);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler/ExprCompiler.ts"],"names":[],"mappings":"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","file":"compiler/ExprCompiler.js","sourcesContent":["import IfcExpressionVisitor from \"../gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"../expression/numeric/NumericLiteralExpr.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { isNullish, isPresent } from \"../util/IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"../expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"../expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"../expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"../expression/numeric/DivideExpr.js\";\nimport { PropObjectReferenceExpr } from \"../expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"../expression/reference/ElemObjectReferenceExpr.js\";\nimport { StringLiteralExpr } from \"../expression/string/StringLiteralExpr.js\";\nimport { ArrayExpr } from \"../expression/structure/ArrayExpr.js\";\nimport { FunctionExpr } from \"../expression/function/FunctionExpr.js\";\nimport { PowerExpr } from \"../expression/numeric/PowerExpr.js\";\nimport { UnaryMinusExpr } from \"../expression/numeric/UnaryMinusExpr.js\";\nimport { AndExpr } from \"../expression/boolean/AndExpr.js\";\nimport { BooleanLiteralExpr } from \"../expression/boolean/BooleanLiteralExpr.js\";\nimport { OrExpr } from \"../expression/boolean/OrExpr.js\";\nimport { XorExpr } from \"../expression/boolean/XorExpr.js\";\nimport { SyntaxErrorException } from \"../error/SyntaxErrorException.js\";\nimport { NotExpr } from \"../expression/boolean/NotExpr.js\";\nimport { ParenthesisExpr } from \"../expression/structure/ParenthesisExpr.js\";\nimport { EqualsExpr } from \"../expression/comparison/EqualsExpr.js\";\nimport { NotEqualsExpr } from \"../expression/comparison/NotEqualsExpr.js\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { StringConcatExpr } from \"../expression/string/StringConcatExpr.js\";\nimport { PlusOrConcatExpr } from \"../expression/poly/PlusOrConcatExpr.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { GreaterThan } from \"../expression/comparison/GreaterThan.js\";\nimport { GreaterThanOrEqual } from \"../expression/comparison/GreaterThanOrEqual.js\";\nimport { LessThan } from \"../expression/comparison/LessThan.js\";\nimport { LessThanOrEqual } from \"../expression/comparison/LessThanOrEqual.js\";\nimport { ExprManager } from \"./ExprManager.js\";\nimport { LogicalValue } from \"../value/LogicalValue\";\nimport { LogicalLiteralExpr } from \"../expression/boolean/LogicalLiteralExpr\";\n\nexport class ExprCompiler extends IfcExpressionVisitor<Expr<any>> {\n private readonly methodCallTargetStack = [];\n private readonly typeManager: TypeManager;\n private readonly exprManager: ExprManager;\n\n constructor(typeManager: TypeManager) {\n super();\n this.typeManager = typeManager;\n this.exprManager = new ExprManager();\n }\n\n public getExprManager(): ExprManager {\n return this.exprManager;\n }\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.singleExpr());\n };\n\n /*================================================\n * VariableRef\n *==============================================*/\n\n private associateContextAndReturn(expr: Expr<any>, ctx: ParserRuleContext) {\n this.exprManager.registerExprWithContext(expr, ctx);\n return expr;\n }\n\n visitVariableRef: (ctx: VariableRefContext) => Expr<any> = (ctx) => {\n if (ctx.IDENTIFIER().getText().toUpperCase() === \"PROPERTY\") {\n return this.associateContextAndReturn(new PropObjectReferenceExpr(), ctx);\n } else if (ctx.IDENTIFIER().getText().toUpperCase() === \"ELEMENT\") {\n return this.associateContextAndReturn(new ElemObjectReferenceExpr(), ctx);\n }\n throw new Error(`Parsing error: No variable '${ctx.getText()}' found `);\n };\n\n visitSEComparison: (ctx: SEComparisonContext) => Expr<any> = (ctx) => {\n const left = this.visit(ctx.singleExpr(0));\n const right = this.visit(ctx.singleExpr(1));\n switch (ctx.CMP_OP().getText()) {\n case \"==\":\n return this.associateContextAndReturn(new EqualsExpr(left, right), ctx);\n case \"!=\":\n return this.associateContextAndReturn(\n new NotEqualsExpr(left, right),\n ctx\n );\n case \">\":\n return this.associateContextAndReturn(\n new GreaterThan(left, right),\n ctx\n );\n case \">=\":\n return this.associateContextAndReturn(\n new GreaterThanOrEqual(left, right),\n ctx\n );\n case \"<\":\n return this.associateContextAndReturn(new LessThan(left, right), ctx);\n case \"<=\":\n return this.associateContextAndReturn(\n new LessThanOrEqual(left, right),\n ctx\n );\n }\n throw new Error(\n `Parsing error: comparison operator '${ctx\n .CMP_OP()\n .getText()}' not supported`\n );\n };\n\n visitSEMethodCall: (ctx: SEMethodCallContext) => Expr<any> = (ctx) => {\n this.methodCallTargetStack.push(this.visit(ctx.singleExpr()));\n return this.visit(ctx.methodCallChain());\n };\n\n visitSELiteral: (ctx: SELiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.literal());\n };\n\n visitSEVariableRef: (ctx: SEVariableRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.variableRef());\n };\n visitSEArrayExpr: (ctx: SEArrayExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.arrayExpr());\n };\n visitSEFunctionCall: (ctx: SEFunctionCallContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.functionCall());\n };\n visitSEParenthesis: (ctx: SEParenthesisContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ParenthesisExpr(this.visit(ctx._sub)),\n ctx\n );\n };\n\n /*================================================\n * MethodCallChain\n *==============================================*/\n\n visitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => Expr<any> = (\n ctx\n ) => {\n const functionExpr = new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n );\n this.associateContextAndReturn(functionExpr, ctx.functionCall());\n this.methodCallTargetStack.push(functionExpr);\n return this.visit(ctx.methodCallChain());\n };\n\n visitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => Expr<any> = (\n ctx\n ) => {\n return this.associateContextAndReturn(\n new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n ),\n ctx.functionCall()\n );\n };\n\n visitSEAddSub: (ctx: SEAddSubContext) => Expr<any> = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n switch (ctx._op.text) {\n case \"+\":\n return this.makePlusExpr(ctx);\n case \"-\":\n return this.associateContextAndReturn(\n new MinusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n private makePlusExpr(ctx: SEAddSubContext) {\n if (this.typeManager.isNumeric(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new PlusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (this.typeManager.isString(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (\n this.typeManager.overlapsWithString(ctx._left, ctx._right) ||\n this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)\n ) {\n return this.associateContextAndReturn(\n new PlusOrConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n throw new ExpressionTypeError(\n \"Operator '+' requires the operands to be either both of type numeric or both of type string, but they are not.\",\n ctx\n );\n }\n\n visitSEMulDiv: (ctx: SEMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return this.associateContextAndReturn(\n new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n case \"/\":\n return this.associateContextAndReturn(\n new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return this.associateContextAndReturn(new StringLiteralExpr(text), ctx);\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n ExprCompiler.failNode(ctx);\n };\n\n visitSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.singleExpr());\n };\n visitSEPower: (ctx: SEPowerContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new PowerExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n };\n visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new UnaryMinusExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * BooleanExpr\n *===============================================*/\n\n visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any> = (\n ctx\n ) => {\n switch (ctx._op.text) {\n case \"&&\":\n return this.associateContextAndReturn(\n new AndExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"||\":\n return this.associateContextAndReturn(\n new OrExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"><\":\n return this.associateContextAndReturn(\n new XorExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n }\n throw new SyntaxErrorException(\n ctx._op.text,\n ctx._op.line,\n ctx._op.column,\n `Unknown boolean operator ${ctx._op.text}`\n );\n };\n\n visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new BooleanLiteralExpr(ctx.BOOLEAN().getText().toUpperCase() === \"TRUE\"),\n ctx\n );\n };\n\n visitLogicalLiteral: (ctx: LogicalLiteralContext) => Expr<any> = (ctx) => {\n // the only literal we recognize is 'UNKNOWN' (true and false are boolean literals)\n return this.associateContextAndReturn(\n new LogicalLiteralExpr(LogicalValue.UNKNOWN_VALUE),\n ctx\n );\n };\n\n visitSENot: (ctx: SENotContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new NotExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * ArrayExpr\n *===============================================*/\n\n visitArrayExpr: (ctx: ArrayExprContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ArrayExpr(this.collectArrayElements(ctx.arrayElementList())),\n ctx\n );\n };\n\n collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n if (!isNullish(ctx)) {\n const first = this.visit(ctx.singleExpr());\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n const arr = this.collectArrayElements(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n }\n return [];\n };\n\n /*================================================\n * FuncExpr\n *===============================================*/\n\n visitFunctionCall: (ctx: FunctionCallContext) => Expr<any> = (ctx) => {\n const args = isNullish(ctx.exprList())\n ? []\n : this.collectFunctionArguments(ctx.exprList());\n return this.associateContextAndReturn(\n new FunctionExpr(ctx.IDENTIFIER().getText(), args),\n ctx\n );\n };\n\n collectFunctionArguments: (\n ctx: ExprListContext,\n resultSoFar?: Array<Expr<any>>\n ) => Array<Expr<any>> = (ctx, resultSoFar?: Array<Expr<any>>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.visit(ctx.singleExpr()));\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectFunctionArguments(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n private static failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n\n visitLiteral: (ctx: LiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/compiler/ExprCompiler.ts"],"names":[],"mappings":"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","file":"compiler/ExprCompiler.js","sourcesContent":["import IfcExpressionVisitor from \"../gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"../expression/numeric/NumericLiteralExpr.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { isNullish, isPresent } from \"../util/IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"../expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"../expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"../expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"../expression/numeric/DivideExpr.js\";\nimport { PropObjectReferenceExpr } from \"../expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"../expression/reference/ElemObjectReferenceExpr.js\";\nimport { StringLiteralExpr } from \"../expression/string/StringLiteralExpr.js\";\nimport { ArrayExpr } from \"../expression/structure/ArrayExpr.js\";\nimport { FunctionExpr } from \"../expression/function/FunctionExpr.js\";\nimport { PowerExpr } from \"../expression/numeric/PowerExpr.js\";\nimport { UnaryMinusExpr } from \"../expression/numeric/UnaryMinusExpr.js\";\nimport { AndExpr } from \"../expression/boolean/AndExpr.js\";\nimport { BooleanLiteralExpr } from \"../expression/boolean/BooleanLiteralExpr.js\";\nimport { OrExpr } from \"../expression/boolean/OrExpr.js\";\nimport { XorExpr } from \"../expression/boolean/XorExpr.js\";\nimport { SyntaxErrorException } from \"../error/SyntaxErrorException.js\";\nimport { NotExpr } from \"../expression/boolean/NotExpr.js\";\nimport { ParenthesisExpr } from \"../expression/structure/ParenthesisExpr.js\";\nimport { EqualsExpr } from \"../expression/comparison/EqualsExpr.js\";\nimport { NotEqualsExpr } from \"../expression/comparison/NotEqualsExpr.js\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { StringConcatExpr } from \"../expression/string/StringConcatExpr.js\";\nimport { PlusOrConcatExpr } from \"../expression/poly/PlusOrConcatExpr.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { GreaterThan } from \"../expression/comparison/GreaterThan.js\";\nimport { GreaterThanOrEqual } from \"../expression/comparison/GreaterThanOrEqual.js\";\nimport { LessThan } from \"../expression/comparison/LessThan.js\";\nimport { LessThanOrEqual } from \"../expression/comparison/LessThanOrEqual.js\";\nimport { ExprManager } from \"./ExprManager.js\";\nimport { LogicalValue } from \"../value/LogicalValue.js\";\nimport { LogicalLiteralExpr } from \"../expression/boolean/LogicalLiteralExpr.js\";\n\nexport class ExprCompiler extends IfcExpressionVisitor<Expr<any>> {\n private readonly methodCallTargetStack = [];\n private readonly typeManager: TypeManager;\n private readonly exprManager: ExprManager;\n\n constructor(typeManager: TypeManager) {\n super();\n this.typeManager = typeManager;\n this.exprManager = new ExprManager();\n }\n\n public getExprManager(): ExprManager {\n return this.exprManager;\n }\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.singleExpr());\n };\n\n /*================================================\n * VariableRef\n *==============================================*/\n\n private associateContextAndReturn(expr: Expr<any>, ctx: ParserRuleContext) {\n this.exprManager.registerExprWithContext(expr, ctx);\n return expr;\n }\n\n visitVariableRef: (ctx: VariableRefContext) => Expr<any> = (ctx) => {\n if (ctx.IDENTIFIER().getText().toUpperCase() === \"PROPERTY\") {\n return this.associateContextAndReturn(new PropObjectReferenceExpr(), ctx);\n } else if (ctx.IDENTIFIER().getText().toUpperCase() === \"ELEMENT\") {\n return this.associateContextAndReturn(new ElemObjectReferenceExpr(), ctx);\n }\n throw new Error(`Parsing error: No variable '${ctx.getText()}' found `);\n };\n\n visitSEComparison: (ctx: SEComparisonContext) => Expr<any> = (ctx) => {\n const left = this.visit(ctx.singleExpr(0));\n const right = this.visit(ctx.singleExpr(1));\n switch (ctx.CMP_OP().getText()) {\n case \"==\":\n return this.associateContextAndReturn(new EqualsExpr(left, right), ctx);\n case \"!=\":\n return this.associateContextAndReturn(\n new NotEqualsExpr(left, right),\n ctx\n );\n case \">\":\n return this.associateContextAndReturn(\n new GreaterThan(left, right),\n ctx\n );\n case \">=\":\n return this.associateContextAndReturn(\n new GreaterThanOrEqual(left, right),\n ctx\n );\n case \"<\":\n return this.associateContextAndReturn(new LessThan(left, right), ctx);\n case \"<=\":\n return this.associateContextAndReturn(\n new LessThanOrEqual(left, right),\n ctx\n );\n }\n throw new Error(\n `Parsing error: comparison operator '${ctx\n .CMP_OP()\n .getText()}' not supported`\n );\n };\n\n visitSEMethodCall: (ctx: SEMethodCallContext) => Expr<any> = (ctx) => {\n this.methodCallTargetStack.push(this.visit(ctx.singleExpr()));\n return this.visit(ctx.methodCallChain());\n };\n\n visitSELiteral: (ctx: SELiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.literal());\n };\n\n visitSEVariableRef: (ctx: SEVariableRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.variableRef());\n };\n visitSEArrayExpr: (ctx: SEArrayExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.arrayExpr());\n };\n visitSEFunctionCall: (ctx: SEFunctionCallContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.functionCall());\n };\n visitSEParenthesis: (ctx: SEParenthesisContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ParenthesisExpr(this.visit(ctx._sub)),\n ctx\n );\n };\n\n /*================================================\n * MethodCallChain\n *==============================================*/\n\n visitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => Expr<any> = (\n ctx\n ) => {\n const functionExpr = new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n );\n this.associateContextAndReturn(functionExpr, ctx.functionCall());\n this.methodCallTargetStack.push(functionExpr);\n return this.visit(ctx.methodCallChain());\n };\n\n visitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => Expr<any> = (\n ctx\n ) => {\n return this.associateContextAndReturn(\n new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n ),\n ctx.functionCall()\n );\n };\n\n visitSEAddSub: (ctx: SEAddSubContext) => Expr<any> = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n switch (ctx._op.text) {\n case \"+\":\n return this.makePlusExpr(ctx);\n case \"-\":\n return this.associateContextAndReturn(\n new MinusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n private makePlusExpr(ctx: SEAddSubContext) {\n if (this.typeManager.isNumeric(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new PlusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (this.typeManager.isString(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (\n this.typeManager.overlapsWithString(ctx._left, ctx._right) ||\n this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)\n ) {\n return this.associateContextAndReturn(\n new PlusOrConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n throw new ExpressionTypeError(\n \"Operator '+' requires the operands to be either both of type numeric or both of type string, but they are not.\",\n ctx\n );\n }\n\n visitSEMulDiv: (ctx: SEMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return this.associateContextAndReturn(\n new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n case \"/\":\n return this.associateContextAndReturn(\n new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return this.associateContextAndReturn(new StringLiteralExpr(text), ctx);\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n ExprCompiler.failNode(ctx);\n };\n\n visitSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.singleExpr());\n };\n visitSEPower: (ctx: SEPowerContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new PowerExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n };\n visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new UnaryMinusExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * BooleanExpr\n *===============================================*/\n\n visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any> = (\n ctx\n ) => {\n switch (ctx._op.text) {\n case \"&&\":\n return this.associateContextAndReturn(\n new AndExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"||\":\n return this.associateContextAndReturn(\n new OrExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"><\":\n return this.associateContextAndReturn(\n new XorExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n }\n throw new SyntaxErrorException(\n ctx._op.text,\n ctx._op.line,\n ctx._op.column,\n `Unknown boolean operator ${ctx._op.text}`\n );\n };\n\n visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new BooleanLiteralExpr(ctx.BOOLEAN().getText().toUpperCase() === \"TRUE\"),\n ctx\n );\n };\n\n visitLogicalLiteral: (ctx: LogicalLiteralContext) => Expr<any> = (ctx) => {\n // the only literal we recognize is 'UNKNOWN' (true and false are boolean literals)\n return this.associateContextAndReturn(\n new LogicalLiteralExpr(LogicalValue.UNKNOWN_VALUE),\n ctx\n );\n };\n\n visitSENot: (ctx: SENotContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new NotExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * ArrayExpr\n *===============================================*/\n\n visitArrayExpr: (ctx: ArrayExprContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ArrayExpr(this.collectArrayElements(ctx.arrayElementList())),\n ctx\n );\n };\n\n collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n if (!isNullish(ctx)) {\n const first = this.visit(ctx.singleExpr());\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n const arr = this.collectArrayElements(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n }\n return [];\n };\n\n /*================================================\n * FuncExpr\n *===============================================*/\n\n visitFunctionCall: (ctx: FunctionCallContext) => Expr<any> = (ctx) => {\n const args = isNullish(ctx.exprList())\n ? []\n : this.collectFunctionArguments(ctx.exprList());\n return this.associateContextAndReturn(\n new FunctionExpr(ctx.IDENTIFIER().getText(), args),\n ctx\n );\n };\n\n collectFunctionArguments: (\n ctx: ExprListContext,\n resultSoFar?: Array<Expr<any>>\n ) => Array<Expr<any>> = (ctx, resultSoFar?: Array<Expr<any>>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.visit(ctx.singleExpr()));\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectFunctionArguments(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n private static failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n\n visitLiteral: (ctx: LiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/ExceptionToExprEvalErrorMapper.ts"],"names":[],"mappings":";;;AAAA,uEAIyC;AACzC,uEAAiE;AACjE,wEAAkE;AAClE,yEAA0D;AAC1D,2DAAqD;AACrD,kHAA4G;AAC5G,gGAA0F;AAC1F,qEAA+D;AAC/D,+FAAyF;AACzF,6EAAuE;AACvE,yEAAmE;AACnE,mGAA6F;AAC7F,sHAAgH;AAChH,2EAAqE;AACrE,wFAAkF;AAClF,qEAA+D;AAC/D,oHAA8G;AAC9G,iGAA2F;AAM3F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;AACzE,OAAO,CAAC,GAAG,CAAC,8CAAoB,CAAC,IAAI,EAAE,IAAI,wCAAiB,EAAE,CAAC,CAAC;AAChE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,EAAE,IAAI,wDAAyB,EAAE,CAAC,CAAC;AACvE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,OAAO,CAAC,GAAG,CACT,sEAAgC,CAAC,IAAI,EACrC,IAAI,kFAAsC,EAAE,CAC7C,CAAC;AACF,OAAO,CAAC,GAAG,CACT,wEAAiC,CAAC,IAAI,EACtC,IAAI,oFAAuC,EAAE,CAC9C,CAAC;AACF,OAAO,CAAC,GAAG,CAAC,oDAAuB,CAAC,IAAI,EAAE,IAAI,gEAA6B,EAAE,CAAC,CAAC;AAC/E,OAAO,CAAC,GAAG,CACT,gDAAqB,CAAC,IAAI,EAC1B,OAAO,CAAC,GAAG,CAAC,oDAAuB,CAAC,IAAI,CAAC,CAC1C,CAAC;AACF,OAAO,CAAC,GAAG,CACT,0EAAkC,CAAC,IAAI,EACvC,IAAI,sFAAwC,EAAE,CAC/C,CAAC;AACF,OAAO,CAAC,GAAG,CAAC,kDAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEhF,SAAgB,YAAY,CAAC,CAAQ;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,IAAA,iCAAS,EAAC,MAAM,CAAC,EAAE;QACrB,OAAO,IAAI,oCAAgB,CACzB,sBAAQ,CAAC,WAAW,EACpB,kCAAc,CAAC,KAAK,EACpB,CAAC,CAAC,OAAO,EACT,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;KACH;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAXD,oCAWC","file":"error/ExceptionToExprEvalErrorMapper.js","sourcesContent":["import {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalStatus,\n} from \"../expression/ExprEvalResult.js\";\nimport { SyntaxErrorException } from \"./SyntaxErrorException.js\";\nimport { SyntaxErrorMapper } from \"./mapper/SyntaxErrorMapper.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { ExprKind } from \"../expression/ExprKind.js\";\nimport { MissingFunctionArgumentExceptionMapper } from \"./mapper/MissingFunctionArgumentExceptionMapper.js\";\nimport { NoSuchFunctionExceptionMapper } from \"./mapper/NoSuchFunctionExceptionMapper.js\";\nimport { ExpressionTypeError } from \"./ExpressionTypeError.js\";\nimport { MissingFunctionArgumentException } from \"./MissingFunctionArgumentException.js\";\nimport { NoSuchFunctionException } from \"./NoSuchFunctionException.js\";\nimport { NoSuchMethodException } from \"./NoSuchMethodException.js\";\nimport { WrongFunctionArgumentTypeException } from \"./WrongFunctionArgumentTypeException.js\";\nimport { WrongFunctionArgumentTypeExceptionMapper } from \"./mapper/WrongFunctionArgumentTypeExceptionMapper.js\";\nimport { InvalidSyntaxException } from \"./InvalidSyntaxException.js\";\nimport { ValidationExceptionMapper } from \"./mapper/ValidationExceptionMapper.js\";\nimport { ValidationException } from \"./ValidationException.js\";\nimport { SpuriousFunctionArgumentExceptionMapper } from \"./mapper/SpuriousFunctionArgumentExceptionMapper\";\nimport { SpuriousFunctionArgumentException } from \"./SpuriousFunctionArgumentException\";\n\nexport interface ExceptionToExprEvalErrorMapper<T extends Error> {\n mapException(exception: T): ExprEvalError;\n}\n\nconst mappers = new Map<string, ExceptionToExprEvalErrorMapper<Error>>();\nmappers.set(SyntaxErrorException.name, new SyntaxErrorMapper());\nmappers.set(ValidationException.name, new ValidationExceptionMapper());\nmappers.set(ExpressionTypeError.name, mappers.get(ValidationException.name));\nmappers.set(\n MissingFunctionArgumentException.name,\n new MissingFunctionArgumentExceptionMapper()\n);\nmappers.set(\n SpuriousFunctionArgumentException.name,\n new SpuriousFunctionArgumentExceptionMapper()\n);\nmappers.set(NoSuchFunctionException.name, new NoSuchFunctionExceptionMapper());\nmappers.set(\n NoSuchMethodException.name,\n mappers.get(NoSuchFunctionException.name)\n);\nmappers.set(\n WrongFunctionArgumentTypeException.name,\n new WrongFunctionArgumentTypeExceptionMapper()\n);\nmappers.set(InvalidSyntaxException.name, mappers.get(ValidationException.name));\n\nexport function mapException(e: Error): ExprEvalError {\n const mapper = mappers.get(e.constructor.name);\n if (isNullish(mapper)) {\n return new ExprEvalErrorObj(\n ExprKind.PARSE_ERROR,\n ExprEvalStatus.ERROR,\n e.message,\n this.getTextSpan()\n );\n }\n return mapper.mapException(e);\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/ExceptionToExprEvalErrorMapper.ts"],"names":[],"mappings":";;;AAAA,uEAIyC;AACzC,uEAAiE;AACjE,wEAAkE;AAClE,yEAA0D;AAC1D,2DAAqD;AACrD,kHAA4G;AAC5G,gGAA0F;AAC1F,qEAA+D;AAC/D,+FAAyF;AACzF,6EAAuE;AACvE,yEAAmE;AACnE,mGAA6F;AAC7F,sHAAgH;AAChH,2EAAqE;AACrE,wFAAkF;AAClF,qEAA+D;AAC/D,oHAA8G;AAC9G,iGAA2F;AAM3F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;AACzE,OAAO,CAAC,GAAG,CAAC,8CAAoB,CAAC,IAAI,EAAE,IAAI,wCAAiB,EAAE,CAAC,CAAC;AAChE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,EAAE,IAAI,wDAAyB,EAAE,CAAC,CAAC;AACvE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,OAAO,CAAC,GAAG,CACT,sEAAgC,CAAC,IAAI,EACrC,IAAI,kFAAsC,EAAE,CAC7C,CAAC;AACF,OAAO,CAAC,GAAG,CACT,wEAAiC,CAAC,IAAI,EACtC,IAAI,oFAAuC,EAAE,CAC9C,CAAC;AACF,OAAO,CAAC,GAAG,CAAC,oDAAuB,CAAC,IAAI,EAAE,IAAI,gEAA6B,EAAE,CAAC,CAAC;AAC/E,OAAO,CAAC,GAAG,CACT,gDAAqB,CAAC,IAAI,EAC1B,OAAO,CAAC,GAAG,CAAC,oDAAuB,CAAC,IAAI,CAAC,CAC1C,CAAC;AACF,OAAO,CAAC,GAAG,CACT,0EAAkC,CAAC,IAAI,EACvC,IAAI,sFAAwC,EAAE,CAC/C,CAAC;AACF,OAAO,CAAC,GAAG,CAAC,kDAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,4CAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEhF,SAAgB,YAAY,CAAC,CAAQ;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,IAAA,iCAAS,EAAC,MAAM,CAAC,EAAE;QACrB,OAAO,IAAI,oCAAgB,CACzB,sBAAQ,CAAC,WAAW,EACpB,kCAAc,CAAC,KAAK,EACpB,CAAC,CAAC,OAAO,EACT,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;KACH;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAXD,oCAWC","file":"error/ExceptionToExprEvalErrorMapper.js","sourcesContent":["import {\n ExprEvalError,\n ExprEvalErrorObj,\n ExprEvalStatus,\n} from \"../expression/ExprEvalResult.js\";\nimport { SyntaxErrorException } from \"./SyntaxErrorException.js\";\nimport { SyntaxErrorMapper } from \"./mapper/SyntaxErrorMapper.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { ExprKind } from \"../expression/ExprKind.js\";\nimport { MissingFunctionArgumentExceptionMapper } from \"./mapper/MissingFunctionArgumentExceptionMapper.js\";\nimport { NoSuchFunctionExceptionMapper } from \"./mapper/NoSuchFunctionExceptionMapper.js\";\nimport { ExpressionTypeError } from \"./ExpressionTypeError.js\";\nimport { MissingFunctionArgumentException } from \"./MissingFunctionArgumentException.js\";\nimport { NoSuchFunctionException } from \"./NoSuchFunctionException.js\";\nimport { NoSuchMethodException } from \"./NoSuchMethodException.js\";\nimport { WrongFunctionArgumentTypeException } from \"./WrongFunctionArgumentTypeException.js\";\nimport { WrongFunctionArgumentTypeExceptionMapper } from \"./mapper/WrongFunctionArgumentTypeExceptionMapper.js\";\nimport { InvalidSyntaxException } from \"./InvalidSyntaxException.js\";\nimport { ValidationExceptionMapper } from \"./mapper/ValidationExceptionMapper.js\";\nimport { ValidationException } from \"./ValidationException.js\";\nimport { SpuriousFunctionArgumentExceptionMapper } from \"./mapper/SpuriousFunctionArgumentExceptionMapper.js\";\nimport { SpuriousFunctionArgumentException } from \"./SpuriousFunctionArgumentException.js\";\n\nexport interface ExceptionToExprEvalErrorMapper<T extends Error> {\n mapException(exception: T): ExprEvalError;\n}\n\nconst mappers = new Map<string, ExceptionToExprEvalErrorMapper<Error>>();\nmappers.set(SyntaxErrorException.name, new SyntaxErrorMapper());\nmappers.set(ValidationException.name, new ValidationExceptionMapper());\nmappers.set(ExpressionTypeError.name, mappers.get(ValidationException.name));\nmappers.set(\n MissingFunctionArgumentException.name,\n new MissingFunctionArgumentExceptionMapper()\n);\nmappers.set(\n SpuriousFunctionArgumentException.name,\n new SpuriousFunctionArgumentExceptionMapper()\n);\nmappers.set(NoSuchFunctionException.name, new NoSuchFunctionExceptionMapper());\nmappers.set(\n NoSuchMethodException.name,\n mappers.get(NoSuchFunctionException.name)\n);\nmappers.set(\n WrongFunctionArgumentTypeException.name,\n new WrongFunctionArgumentTypeExceptionMapper()\n);\nmappers.set(InvalidSyntaxException.name, mappers.get(ValidationException.name));\n\nexport function mapException(e: Error): ExprEvalError {\n const mapper = mappers.get(e.constructor.name);\n if (isNullish(mapper)) {\n return new ExprEvalErrorObj(\n ExprKind.PARSE_ERROR,\n ExprEvalStatus.ERROR,\n e.message,\n this.getTextSpan()\n );\n }\n return mapper.mapException(e);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/MissingFunctionArgumentException.ts"],"names":[],"mappings":";;;AAAA,iFAA2E;AAC3E,yEAA0D;AAE1D,MAAa,gCAAiC,SAAQ,wDAAyB;IAC7E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,IAAA,iCAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAC1D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAhBD,4EAgBC","file":"error/MissingFunctionArgumentException.js","sourcesContent":["import { FunctionArgumentException } from \"./FunctionArgumentException\";\nimport { isNullish } from \"../util/IfcExpressionUtils\";\n\nexport class MissingFunctionArgumentException extends FunctionArgumentException {\n constructor(\n functionName: string,\n argumentName: string,\n index: number,\n ctx,\n message?: string\n ) {\n super(\n isNullish(message) ? \"Required argument missing\" : message,\n functionName,\n argumentName,\n index,\n ctx\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/MissingFunctionArgumentException.ts"],"names":[],"mappings":";;;AAAA,iFAA2E;AAC3E,yEAA0D;AAE1D,MAAa,gCAAiC,SAAQ,wDAAyB;IAC7E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,IAAA,iCAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAC1D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAhBD,4EAgBC","file":"error/MissingFunctionArgumentException.js","sourcesContent":["import { FunctionArgumentException } from \"./FunctionArgumentException.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class MissingFunctionArgumentException extends FunctionArgumentException {\n constructor(\n functionName: string,\n argumentName: string,\n index: number,\n ctx,\n message?: string\n ) {\n super(\n isNullish(message) ? \"Required argument missing\" : message,\n functionName,\n argumentName,\n index,\n ctx\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/SpuriousFunctionArgumentException.ts"],"names":[],"mappings":";;;AAAA,iFAA2E;AAC3E,yEAA0D;AAE1D,MAAa,iCAAkC,SAAQ,wDAAyB;IAC9E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,IAAA,iCAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAC3D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAhBD,8EAgBC","file":"error/SpuriousFunctionArgumentException.js","sourcesContent":["import { FunctionArgumentException } from \"./FunctionArgumentException\";\nimport { isNullish } from \"../util/IfcExpressionUtils\";\n\nexport class SpuriousFunctionArgumentException extends FunctionArgumentException {\n constructor(\n functionName: string,\n argumentName: string,\n index: number,\n ctx,\n message?: string\n ) {\n super(\n isNullish(message) ? \"Spurious function argument\" : message,\n functionName,\n argumentName,\n index,\n ctx\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/SpuriousFunctionArgumentException.ts"],"names":[],"mappings":";;;AAAA,iFAA2E;AAC3E,yEAA0D;AAE1D,MAAa,iCAAkC,SAAQ,wDAAyB;IAC9E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,IAAA,iCAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAC3D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAhBD,8EAgBC","file":"error/SpuriousFunctionArgumentException.js","sourcesContent":["import { FunctionArgumentException } from \"./FunctionArgumentException.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class SpuriousFunctionArgumentException extends FunctionArgumentException {\n constructor(\n functionName: string,\n argumentName: string,\n index: number,\n ctx,\n message?: string\n ) {\n super(\n isNullish(message) ? \"Spurious function argument\" : message,\n functionName,\n argumentName,\n index,\n ctx\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,0EAG4C;AAC5C,wDAAkD;AAGlD,MAAa,uCAAuC;IAGlD,YAAY,CAAC,SAA4C;QACvD,OAAO,IAAI,4DAAwC,CACjD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,sBAAQ,CAAC,EAAE,CACT,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,GAAG,CAAC,EACxB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,QAAQ,GAAG,CAAC,CACvB,CACF,CAAC;IACJ,CAAC;CACF;AAjBD,0FAiBC","file":"error/mapper/SpuriousFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalSpuriousFunctionArgumentErrorObj,\n} from \"../../expression/ExprEvalResult.js\";\nimport { TextSpan } from \"../../util/TextSpan.js\";\nimport { SpuriousFunctionArgumentException } from \"../SpuriousFunctionArgumentException\";\n\nexport class SpuriousFunctionArgumentExceptionMapper\n implements ExceptionToExprEvalErrorMapper<SpuriousFunctionArgumentException>\n{\n mapException(exception: SpuriousFunctionArgumentException): ExprEvalError {\n return new ExprEvalSpuriousFunctionArgumentErrorObj(\n exception.message,\n exception.functionName,\n exception.argumentName,\n exception.index,\n TextSpan.of(\n exception.fromLine,\n exception.fromColumn + 1,\n exception.toLine,\n exception.toColumn + 1\n )\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,0EAG4C;AAC5C,wDAAkD;AAGlD,MAAa,uCAAuC;IAGlD,YAAY,CAAC,SAA4C;QACvD,OAAO,IAAI,4DAAwC,CACjD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,sBAAQ,CAAC,EAAE,CACT,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,GAAG,CAAC,EACxB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,QAAQ,GAAG,CAAC,CACvB,CACF,CAAC;IACJ,CAAC;CACF;AAjBD,0FAiBC","file":"error/mapper/SpuriousFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalSpuriousFunctionArgumentErrorObj,\n} from \"../../expression/ExprEvalResult.js\";\nimport { TextSpan } from \"../../util/TextSpan.js\";\nimport { SpuriousFunctionArgumentException } from \"../SpuriousFunctionArgumentException.js\";\n\nexport class SpuriousFunctionArgumentExceptionMapper\n implements ExceptionToExprEvalErrorMapper<SpuriousFunctionArgumentException>\n{\n mapException(exception: SpuriousFunctionArgumentException): ExprEvalError {\n return new ExprEvalSpuriousFunctionArgumentErrorObj(\n exception.message,\n exception.functionName,\n exception.argumentName,\n exception.index,\n TextSpan.of(\n exception.fromLine,\n exception.fromColumn + 1,\n exception.toLine,\n exception.toColumn + 1\n )\n );\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateFormatException = void 0;
4
+ class DateFormatException extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ }
8
+ }
9
+ exports.DateFormatException = DateFormatException;
10
+ //# sourceMappingURL=DateFormatException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/error/value/DateFormatException.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,kDAIC","file":"error/value/DateFormatException.js","sourcesContent":["export class DateFormatException extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/AndExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,OAAQ,SAAQ,4CAAmB;IAC9C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,0BAWC","file":"expression/boolean/AndExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr\";\nimport { ExprKind } from \"../ExprKind\";\nimport { BooleanValue } from \"../../value/BooleanValue\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\nimport { Expr } from \"../Expr\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder\";\n\nexport class AndExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.AND, \"and\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" && \").appendExpr(this.right);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/AndExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,OAAQ,SAAQ,4CAAmB;IAC9C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,0BAWC","file":"expression/boolean/AndExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { LogicalValue } from \"../../value/LogicalValue.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\n\nexport class AndExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.AND, \"and\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" && \").appendExpr(this.right);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAKpC,kDAAkD;AAIlD,MAAsB,mBAAoB,SAAQ,gBAIjD;IAGC,YACE,IAAc,EACd,MAAc,EACd,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,WAAwC,EACxC,YAAyC;QAEzC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,IACE,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACrC;YACA,OAAO,eAAI,CAAC,OAAO,CAAC;SACrB;QACD,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAnCD,kDAmCC","file":"expression/boolean/BinaryBooleanOpExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { Type, Types } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\n\nexport abstract class BinaryBooleanOpExpr extends Expr2<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n private readonly method: string;\n\n constructor(\n kind: ExprKind,\n method: string,\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(kind, left, right);\n this.method = method;\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftOperand: BooleanValue | LogicalValue,\n rightOperand: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return leftOperand[this.method].call(leftOperand, rightOperand);\n }\n\n getType(): ExprType {\n if (\n Types.isLogical(this.left.getType()) ||\n Types.isLogical(this.right.getType())\n ) {\n return Type.LOGICAL;\n }\n return Type.BOOLEAN;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAKpC,kDAAkD;AAIlD,MAAsB,mBAAoB,SAAQ,gBAIjD;IAGC,YACE,IAAc,EACd,MAAc,EACd,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,WAAwC,EACxC,YAAyC;QAEzC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,IACE,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACrC;YACA,OAAO,eAAI,CAAC,OAAO,CAAC;SACrB;QACD,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAnCD,kDAmCC","file":"expression/boolean/BinaryBooleanOpExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { Type, Types } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { LogicalValue } from \"../../value/LogicalValue.js\";\n\nexport abstract class BinaryBooleanOpExpr extends Expr2<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n private readonly method: string;\n\n constructor(\n kind: ExprKind,\n method: string,\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(kind, left, right);\n this.method = method;\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftOperand: BooleanValue | LogicalValue,\n rightOperand: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return leftOperand[this.method].call(leftOperand, rightOperand);\n }\n\n getType(): ExprType {\n if (\n Types.isLogical(this.left.getType()) ||\n Types.isLogical(this.right.getType())\n ) {\n return Type.LOGICAL;\n }\n return Type.BOOLEAN;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":";;;AAAA,sDAAgD;AAChD,gDAA0C;AAG1C,kDAA2C;AAG3C,iEAAoE;AAEpE,MAAa,kBAAmB,SAAQ,4BAAkC;IACxE,YAAY,KAAc;QACxB,KAAK,CAAC,sBAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,8BAAY,CAAC,aAAa;gBAC7B,OAAO,CAAC,YAAY,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,IAAI;gBACP,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACpE,CAAC;SACL;IACH,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAhCD,gDAgCC","file":"expression/boolean/LogicalLiteralExpr.js","sourcesContent":["import { LiteralExpr } from \"../LiteralExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Type } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { Logical, LogicalValue } from \"../../value/LogicalValue\";\n\nexport class LogicalLiteralExpr extends LiteralExpr<Logical, LogicalValue> {\n constructor(value: Logical) {\n super(ExprKind.LOGICAL_LITERAL, value);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext\n ): ExprEvalError | LogicalValue {\n return LogicalValue.of(this.value);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n switch (this.value) {\n case LogicalValue.UNKNOWN_VALUE:\n builder.appendString(LogicalValue.UNKNOWN_VALUE);\n break;\n case true:\n builder.appendString(\"TRUE\");\n break;\n case false:\n builder.appendString(\"FALSE\");\n break;\n default:\n throw new Error(\n \"Cannot build exprString for logical value \" + JSON.stringify(this)\n );\n }\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":";;;AAAA,sDAAgD;AAChD,gDAA0C;AAG1C,kDAA2C;AAG3C,iEAAoE;AAEpE,MAAa,kBAAmB,SAAQ,4BAAkC;IACxE,YAAY,KAAc;QACxB,KAAK,CAAC,sBAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,8BAAY,CAAC,aAAa;gBAC7B,OAAO,CAAC,YAAY,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,IAAI;gBACP,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACpE,CAAC;SACL;IACH,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAhCD,gDAgCC","file":"expression/boolean/LogicalLiteralExpr.js","sourcesContent":["import { LiteralExpr } from \"../LiteralExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Type } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { Logical, LogicalValue } from \"../../value/LogicalValue.js\";\n\nexport class LogicalLiteralExpr extends LiteralExpr<Logical, LogicalValue> {\n constructor(value: Logical) {\n super(ExprKind.LOGICAL_LITERAL, value);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext\n ): ExprEvalError | LogicalValue {\n return LogicalValue.of(this.value);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n switch (this.value) {\n case LogicalValue.UNKNOWN_VALUE:\n builder.appendString(LogicalValue.UNKNOWN_VALUE);\n break;\n case true:\n builder.appendString(\"TRUE\");\n break;\n case false:\n builder.appendString(\"FALSE\");\n break;\n default:\n throw new Error(\n \"Cannot build exprString for logical value \" + JSON.stringify(this)\n );\n }\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/NotExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAEpC,gDAA0C;AAO1C,MAAa,OAAQ,SAAQ,gBAG5B;IACC,YAAY,GAAsC;QAChD,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,mBAAgD;QAEhD,OAAO,mBAAmB,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF;AAvBD,0BAuBC","file":"expression/boolean/NotExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr1 } from \"../Expr1.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\n\nexport class NotExpr extends Expr1<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n constructor(sub: Expr<BooleanValue | LogicalValue>) {\n super(ExprKind.NOT, sub);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return subExpressionResult.not();\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendString(\"!\").appendExpr(this.sub);\n }\n\n getType(): ExprType {\n return this.sub.getType();\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/NotExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAEpC,gDAA0C;AAO1C,MAAa,OAAQ,SAAQ,gBAG5B;IACC,YAAY,GAAsC;QAChD,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,mBAAgD;QAEhD,OAAO,mBAAmB,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF;AAvBD,0BAuBC","file":"expression/boolean/NotExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr1 } from \"../Expr1.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { LogicalValue } from \"../../value/LogicalValue.js\";\n\nexport class NotExpr extends Expr1<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n constructor(sub: Expr<BooleanValue | LogicalValue>) {\n super(ExprKind.NOT, sub);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return subExpressionResult.not();\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendString(\"!\").appendExpr(this.sub);\n }\n\n getType(): ExprType {\n return this.sub.getType();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/OrExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,MAAO,SAAQ,4CAAmB;IAC7C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,wBAWC","file":"expression/boolean/OrExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr\";\nimport { ExprKind } from \"../ExprKind\";\nimport { BooleanValue } from \"../../value/BooleanValue\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\nimport { Expr } from \"../Expr\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder\";\n\nexport class OrExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.OR, \"or\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" || \").appendExpr(this.right);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/OrExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,MAAO,SAAQ,4CAAmB;IAC7C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,wBAWC","file":"expression/boolean/OrExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { LogicalValue } from \"../../value/LogicalValue.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\n\nexport class OrExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.OR, \"or\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" || \").appendExpr(this.right);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/boolean/XorExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,OAAQ,SAAQ,4CAAmB;IAC9C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,0BAWC","file":"expression/boolean/XorExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr\";\nimport { ExprKind } from \"../ExprKind\";\nimport { BooleanValue } from \"../../value/BooleanValue\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\nimport { Expr } from \"../Expr\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder\";\n\nexport class XorExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.XOR, \"xor\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" >< \").appendExpr(this.right);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/boolean/XorExpr.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAC/D,gDAA0C;AAM1C,MAAa,OAAQ,SAAQ,4CAAmB;IAC9C,YACE,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAXD,0BAWC","file":"expression/boolean/XorExpr.js","sourcesContent":["import { BinaryBooleanOpExpr } from \"./BinaryBooleanOpExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { LogicalValue } from \"../../value/LogicalValue.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\n\nexport class XorExpr extends BinaryBooleanOpExpr {\n constructor(\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(ExprKind.XOR, \"xor\", left, right);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendExpr(this.left).appendString(\" >< \").appendExpr(this.right);\n }\n}\n"]}
@@ -64,6 +64,7 @@ class Func {
64
64
  /**
65
65
  * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the
66
66
  * returned array is an ExprEvalError, the function evaluation fails.
67
+ * @param callingExpr
67
68
  * @param evaluatedArguments
68
69
  * @protected
69
70
  */
@@ -71,6 +72,7 @@ class Func {
71
72
  /**
72
73
  * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).
73
74
  * Generates an error if a required value is missing.
75
+ * @param callingExpr
74
76
  * @param provided
75
77
  * @protected
76
78
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/function/Func.ts"],"names":[],"mappings":"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","file":"expression/function/Func.js","sourcesContent":["import { ExpressionValue } from \"../../value/ExpressionValue.js\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { FuncArg } from \"./FuncArg.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"../ExprEvalResult.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Types } from \"../../type/Types.js\";\nimport { MissingFunctionArgumentException } from \"../../error/MissingFunctionArgumentException.js\";\nimport { WrongFunctionArgumentTypeException } from \"../../error/WrongFunctionArgumentTypeException.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { FunctionExpr } from \"./FunctionExpr.js\";\nimport { Expr } from \"../Expr\";\nimport { SpuriousFunctionArgumentException } from \"../../error/SpuriousFunctionArgumentException\";\n\nexport abstract class Func {\n protected name: string;\n protected formalArguments: Array<FuncArg<unknown>>;\n\n protected constructor(name: string, args: Array<FuncArg<unknown>>) {\n this.name = name;\n if (isNullish(this.name)) {\n throw new IfcExpressionFunctionConfigException(\n \"Function must have a name\"\n );\n }\n this.formalArguments = args;\n this.checkArgs(args);\n }\n\n public abstract getReturnType(argumentTypes: Array<ExprType>): ExprType;\n\n public checkArgumentsAndGetReturnType(\n argumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): ExprType {\n this.checkArgumentTypes(argumentTypes, ctx);\n return this.getReturnType(argumentTypes.map((t) => t[1]));\n }\n\n protected checkArgumentTypes(\n providedArgumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): void {\n const numProvided = providedArgumentTypes.length;\n if (!isNullish(this.formalArguments)) {\n if (numProvided > this.formalArguments.length) {\n throw new SpuriousFunctionArgumentException(\n this.name,\n \"[unexpected argument]\",\n this.formalArguments.length,\n ctx,\n `Function expects (at most) ${this.formalArguments.length} arguments`\n );\n }\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n Types.requireWeakIsAssignableFrom(\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n () =>\n new WrongFunctionArgumentTypeException(\n this.name,\n this.formalArguments[i].name,\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n i,\n providedArgumentTypes[i][0]\n )\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n //should be fine.\n }\n if (currentArg.required) {\n throw new MissingFunctionArgumentException(\n this.name,\n currentArg.name,\n i,\n ctx\n );\n }\n }\n }\n }\n }\n\n public getName(): string {\n return this.name;\n }\n\n public evaluate(\n callingExpr: FunctionExpr,\n funcArgs: Array<ExprEvalResult<ExpressionValue>>\n ): ExprEvalResult<ExpressionValue> {\n const evaluatedArguments = this.getArgumentValues(callingExpr, funcArgs);\n if (isExprEvalError(evaluatedArguments)) {\n return evaluatedArguments;\n }\n const argumentsReadyForUse = new Map<string, ExpressionValue>();\n for (const [argName, argValue] of evaluatedArguments.entries()) {\n if (isExprEvalError(argValue)) {\n return argValue;\n }\n argumentsReadyForUse.set(argName, argValue.result);\n }\n return this.calculateResult(callingExpr, argumentsReadyForUse);\n }\n\n /**\n * Subclasses must provide the funcation evaluation code here.\n * @param evaluatedArguments\n * @protected\n */\n protected abstract calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue>;\n\n /**\n * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the\n * returned array is an ExprEvalError, the function evaluation fails.\n * @param evaluatedArguments\n * @protected\n */\n protected transformArguments(\n callingExpr: Expr<any>,\n evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>\n ): void {}\n\n /**\n * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).\n * Generates an error if a required value is missing.\n * @param provided\n * @protected\n */\n protected getArgumentValues(\n callingExpr: FunctionExpr,\n provided: Array<ExprEvalResult<ExpressionValue>>\n ): Map<string, ExprEvalResult<ExpressionValue>> | ExprEvalError {\n const result = new Map<string, ExprEvalResult<ExpressionValue>>();\n const numProvided = provided.length;\n if (!isNullish(this.formalArguments)) {\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n result.set(\n currentArg.name,\n currentArg.transformValue(callingExpr, provided[i])\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n result.set(\n currentArg.name,\n new ExprEvalSuccessObj(currentArg.defaultValue as ExpressionValue)\n );\n }\n if (currentArg.required) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`,\n this.name,\n currentArg.name,\n i,\n callingExpr.getTextSpan()\n );\n }\n }\n }\n }\n this.transformArguments(callingExpr, result);\n return result;\n }\n\n private checkArgs(args: Array<FuncArg<unknown>>): void {\n if (!Array.isArray(this.formalArguments)) {\n throw new IfcExpressionFunctionConfigException(\n \"Formal function arguments is not an array\"\n );\n }\n let optionalArgsReached: boolean = false;\n const names = new Set<string>();\n for (let i = 0; i < this.formalArguments.length; i++) {\n if (names.has(this.formalArguments[i].name)) {\n throw new IfcExpressionFunctionConfigException(\n `Duplicate argument name '${this.formalArguments[i].name}'.`\n );\n }\n if (optionalArgsReached) {\n if (this.formalArguments[i].required) {\n throw new IfcExpressionFunctionConfigException(\n `Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`\n );\n }\n } else {\n if (!this.formalArguments[i].required) {\n optionalArgsReached = true;\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/expression/function/Func.ts"],"names":[],"mappings":"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","file":"expression/function/Func.js","sourcesContent":["import { ExpressionValue } from \"../../value/ExpressionValue.js\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { FuncArg } from \"./FuncArg.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"../ExprEvalResult.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Types } from \"../../type/Types.js\";\nimport { MissingFunctionArgumentException } from \"../../error/MissingFunctionArgumentException.js\";\nimport { WrongFunctionArgumentTypeException } from \"../../error/WrongFunctionArgumentTypeException.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { FunctionExpr } from \"./FunctionExpr.js\";\nimport { Expr } from \"../Expr.js\";\nimport { SpuriousFunctionArgumentException } from \"../../error/SpuriousFunctionArgumentException.js\";\n\nexport abstract class Func {\n protected name: string;\n protected formalArguments: Array<FuncArg<unknown>>;\n\n protected constructor(name: string, args: Array<FuncArg<unknown>>) {\n this.name = name;\n if (isNullish(this.name)) {\n throw new IfcExpressionFunctionConfigException(\n \"Function must have a name\"\n );\n }\n this.formalArguments = args;\n this.checkArgs(args);\n }\n\n public abstract getReturnType(argumentTypes: Array<ExprType>): ExprType;\n\n public checkArgumentsAndGetReturnType(\n argumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): ExprType {\n this.checkArgumentTypes(argumentTypes, ctx);\n return this.getReturnType(argumentTypes.map((t) => t[1]));\n }\n\n protected checkArgumentTypes(\n providedArgumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): void {\n const numProvided = providedArgumentTypes.length;\n if (!isNullish(this.formalArguments)) {\n if (numProvided > this.formalArguments.length) {\n throw new SpuriousFunctionArgumentException(\n this.name,\n \"[unexpected argument]\",\n this.formalArguments.length,\n ctx,\n `Function expects (at most) ${this.formalArguments.length} arguments`\n );\n }\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n Types.requireWeakIsAssignableFrom(\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n () =>\n new WrongFunctionArgumentTypeException(\n this.name,\n this.formalArguments[i].name,\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n i,\n providedArgumentTypes[i][0]\n )\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n //should be fine.\n }\n if (currentArg.required) {\n throw new MissingFunctionArgumentException(\n this.name,\n currentArg.name,\n i,\n ctx\n );\n }\n }\n }\n }\n }\n\n public getName(): string {\n return this.name;\n }\n\n public evaluate(\n callingExpr: FunctionExpr,\n funcArgs: Array<ExprEvalResult<ExpressionValue>>\n ): ExprEvalResult<ExpressionValue> {\n const evaluatedArguments = this.getArgumentValues(callingExpr, funcArgs);\n if (isExprEvalError(evaluatedArguments)) {\n return evaluatedArguments;\n }\n const argumentsReadyForUse = new Map<string, ExpressionValue>();\n for (const [argName, argValue] of evaluatedArguments.entries()) {\n if (isExprEvalError(argValue)) {\n return argValue;\n }\n argumentsReadyForUse.set(argName, argValue.result);\n }\n return this.calculateResult(callingExpr, argumentsReadyForUse);\n }\n\n /**\n * Subclasses must provide the funcation evaluation code here.\n * @param callingExpr\n * @param evaluatedArguments\n * @protected\n */\n protected abstract calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue>;\n\n /**\n * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the\n * returned array is an ExprEvalError, the function evaluation fails.\n * @param callingExpr\n * @param evaluatedArguments\n * @protected\n */\n protected transformArguments(\n callingExpr: Expr<any>,\n evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>\n ): void {}\n\n /**\n * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).\n * Generates an error if a required value is missing.\n * @param callingExpr\n * @param provided\n * @protected\n */\n protected getArgumentValues(\n callingExpr: FunctionExpr,\n provided: Array<ExprEvalResult<ExpressionValue>>\n ): Map<string, ExprEvalResult<ExpressionValue>> | ExprEvalError {\n const result = new Map<string, ExprEvalResult<ExpressionValue>>();\n const numProvided = provided.length;\n if (!isNullish(this.formalArguments)) {\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n result.set(\n currentArg.name,\n currentArg.transformValue(callingExpr, provided[i])\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n result.set(\n currentArg.name,\n new ExprEvalSuccessObj(currentArg.defaultValue as ExpressionValue)\n );\n }\n if (currentArg.required) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`,\n this.name,\n currentArg.name,\n i,\n callingExpr.getTextSpan()\n );\n }\n }\n }\n }\n this.transformArguments(callingExpr, result);\n return result;\n }\n\n private checkArgs(args: Array<FuncArg<unknown>>): void {\n if (!Array.isArray(this.formalArguments)) {\n throw new IfcExpressionFunctionConfigException(\n \"Formal function arguments is not an array\"\n );\n }\n let optionalArgsReached: boolean = false;\n const names = new Set<string>();\n for (let i = 0; i < this.formalArguments.length; i++) {\n if (names.has(this.formalArguments[i].name)) {\n throw new IfcExpressionFunctionConfigException(\n `Duplicate argument name '${this.formalArguments[i].name}'.`\n );\n }\n if (optionalArgsReached) {\n if (this.formalArguments[i].required) {\n throw new IfcExpressionFunctionConfigException(\n `Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`\n );\n }\n } else {\n if (!this.formalArguments[i].required) {\n optionalArgsReached = true;\n }\n }\n }\n }\n}\n"]}
@@ -28,6 +28,12 @@ const TOUPPERCASE_js_1 = require("./impl/TOUPPERCASE.js");
28
28
  const SUBSTRING_js_1 = require("./impl/SUBSTRING.js");
29
29
  const SPLIT_js_1 = require("./impl/SPLIT.js");
30
30
  const AT_js_1 = require("./impl/AT.js");
31
+ const TOIFCDATE_js_1 = require("./impl/TOIFCDATE.js");
32
+ const TOIFCDATETIME_js_1 = require("./impl/TOIFCDATETIME.js");
33
+ const TOIFCTIME_js_1 = require("./impl/TOIFCTIME.js");
34
+ const TOIFCDURATION_js_1 = require("./impl/TOIFCDURATION.js");
35
+ const TOIFCTIMESTAMP_js_1 = require("./impl/TOIFCTIMESTAMP.js");
36
+ const ADDDURATION_js_1 = require("./impl/ADDDURATION.js");
31
37
  const builtinFunctions = new Map();
32
38
  function registerOrDie(fnKey, func) {
33
39
  if (builtinFunctions.has(fnKey)) {
@@ -80,6 +86,12 @@ registerFunc(new TOSTRING_js_1.TOSTRING());
80
86
  registerFunc(new TONUMERIC_js_1.TONUMERIC(), "TONUMBER");
81
87
  registerFunc(new TOBOOLEAN_js_1.TOBOOLEAN());
82
88
  registerFunc(new TOLOGICAL_js_1.TOLOGICAL(), "NOTFOUNDASUNKNOWN");
89
+ registerFunc(new TOIFCDATE_js_1.TOIFCDATE());
90
+ registerFunc(new TOIFCTIME_js_1.TOIFCTIME());
91
+ registerFunc(new TOIFCDATETIME_js_1.TOIFCDATETIME());
92
+ registerFunc(new TOIFCDURATION_js_1.TOIFCDURATION());
93
+ registerFunc(new TOIFCTIMESTAMP_js_1.TOIFCTIMESTAMP());
94
+ registerFunc(new ADDDURATION_js_1.ADDDURATION());
83
95
  registerFunc(new TOLOWERCASE_js_1.TOLOWERCASE());
84
96
  registerFunc(new TOUPPERCASE_js_1.TOUPPERCASE());
85
97
  registerFunc(new SUBSTRING_js_1.SUBSTRING());