ifc-expressions 2.0.1-beta.7 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/E.d.ts +3 -0
  2. package/dist/cjs/E.js +4 -0
  3. package/dist/cjs/E.js.map +1 -1
  4. package/dist/cjs/compiler/ExprCompiler.js +6 -0
  5. package/dist/cjs/compiler/ExprCompiler.js.map +1 -1
  6. package/dist/cjs/compiler/IfcExpressionValidationListener.js +6 -3
  7. package/dist/cjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  8. package/dist/cjs/compiler/TypeManager.js +8 -0
  9. package/dist/cjs/compiler/TypeManager.js.map +1 -1
  10. package/dist/cjs/error/ExceptionToExprEvalErrorMapper.js +3 -0
  11. package/dist/cjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -1
  12. package/dist/cjs/error/FunctionArgumentException.js +14 -0
  13. package/dist/cjs/error/FunctionArgumentException.js.map +1 -0
  14. package/dist/cjs/error/MissingFunctionArgumentException.js +5 -7
  15. package/dist/cjs/error/MissingFunctionArgumentException.js.map +1 -1
  16. package/dist/cjs/error/SpuriousFunctionArgumentException.js +12 -0
  17. package/dist/cjs/error/SpuriousFunctionArgumentException.js.map +1 -0
  18. package/dist/cjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
  19. package/dist/cjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js +12 -0
  20. package/dist/cjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -0
  21. package/dist/cjs/expression/ExprEvalResult.js +14 -4
  22. package/dist/cjs/expression/ExprEvalResult.js.map +1 -1
  23. package/dist/cjs/expression/ExprKind.js +5 -4
  24. package/dist/cjs/expression/ExprKind.js.map +1 -1
  25. package/dist/cjs/expression/boolean/AndExpr.js +3 -11
  26. package/dist/cjs/expression/boolean/AndExpr.js.map +1 -1
  27. package/dist/cjs/expression/boolean/BinaryBooleanOpExpr.js +23 -0
  28. package/dist/cjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -0
  29. package/dist/cjs/expression/boolean/LogicalLiteralExpr.js +35 -0
  30. package/dist/cjs/expression/boolean/LogicalLiteralExpr.js.map +1 -0
  31. package/dist/cjs/expression/boolean/NotExpr.js +3 -5
  32. package/dist/cjs/expression/boolean/NotExpr.js.map +1 -1
  33. package/dist/cjs/expression/boolean/OrExpr.js +3 -11
  34. package/dist/cjs/expression/boolean/OrExpr.js.map +1 -1
  35. package/dist/cjs/expression/boolean/XorExpr.js +4 -14
  36. package/dist/cjs/expression/boolean/XorExpr.js.map +1 -1
  37. package/dist/cjs/expression/comparison/EqualsExpr.js +1 -1
  38. package/dist/cjs/expression/comparison/EqualsExpr.js.map +1 -1
  39. package/dist/cjs/expression/comparison/NotEqualsExpr.js +1 -1
  40. package/dist/cjs/expression/comparison/NotEqualsExpr.js.map +1 -1
  41. package/dist/cjs/expression/function/Func.js +3 -5
  42. package/dist/cjs/expression/function/Func.js.map +1 -1
  43. package/dist/cjs/expression/function/IfcExpressionFunctions.js +6 -4
  44. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  45. package/dist/cjs/expression/function/arg/FuncArgLogicalOrBoolean.js +26 -0
  46. package/dist/cjs/expression/function/arg/FuncArgLogicalOrBoolean.js.map +1 -0
  47. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js +7 -8
  48. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  49. package/dist/cjs/expression/function/impl/IF.js +54 -6
  50. package/dist/cjs/expression/function/impl/IF.js.map +1 -1
  51. package/dist/cjs/expression/function/impl/NOT.js +4 -6
  52. package/dist/cjs/expression/function/impl/NOT.js.map +1 -1
  53. package/dist/cjs/expression/function/impl/TOBOOLEAN.js +1 -1
  54. package/dist/cjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  55. package/dist/cjs/expression/function/impl/TOLOGICAL.js +39 -0
  56. package/dist/cjs/expression/function/impl/TOLOGICAL.js.map +1 -0
  57. package/dist/cjs/expression/function/impl/TONUMERIC.js +1 -1
  58. package/dist/cjs/expression/function/impl/TONUMERIC.js.map +1 -1
  59. package/dist/cjs/gen/parser/IfcExpressionLexer.js +75 -65
  60. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  61. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -1
  62. package/dist/cjs/gen/parser/IfcExpressionParser.js +195 -121
  63. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
  64. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  65. package/dist/cjs/type/Types.js +6 -0
  66. package/dist/cjs/type/Types.js.map +1 -1
  67. package/dist/cjs/value/BooleanValue.js +65 -4
  68. package/dist/cjs/value/BooleanValue.js.map +1 -1
  69. package/dist/cjs/value/Logical.js +2 -0
  70. package/dist/cjs/value/Logical.js.map +1 -0
  71. package/dist/cjs/value/LogicalValue.js +110 -7
  72. package/dist/cjs/value/LogicalValue.js.map +1 -1
  73. package/dist/compiler/ExprCompiler.d.ts +2 -1
  74. package/dist/compiler/IfcExpressionValidationListener.d.ts +2 -1
  75. package/dist/compiler/TypeManager.d.ts +2 -0
  76. package/dist/error/FunctionArgumentException.d.ts +7 -0
  77. package/dist/error/MissingFunctionArgumentException.d.ts +3 -6
  78. package/dist/error/SpuriousFunctionArgumentException.d.ts +4 -0
  79. package/dist/error/mapper/MissingFunctionArgumentExceptionMapper.d.ts +2 -2
  80. package/dist/error/mapper/SpuriousFunctionArgumentExceptionMapper.d.ts +6 -0
  81. package/dist/expression/ExprEvalResult.d.ts +9 -2
  82. package/dist/expression/ExprKind.d.ts +5 -4
  83. package/dist/expression/boolean/AndExpr.d.ts +4 -8
  84. package/dist/expression/boolean/BinaryBooleanOpExpr.d.ts +14 -0
  85. package/dist/expression/boolean/LogicalLiteralExpr.d.ts +12 -0
  86. package/dist/expression/boolean/NotExpr.d.ts +4 -3
  87. package/dist/expression/boolean/OrExpr.d.ts +4 -8
  88. package/dist/expression/boolean/XorExpr.d.ts +4 -8
  89. package/dist/expression/function/Func.d.ts +2 -1
  90. package/dist/expression/function/arg/FuncArgLogicalOrBoolean.d.ts +12 -0
  91. package/dist/expression/function/impl/FuncBooleanBinary.d.ts +2 -2
  92. package/dist/expression/function/impl/IF.d.ts +5 -0
  93. package/dist/expression/function/impl/TOLOGICAL.d.ts +13 -0
  94. package/dist/gen/parser/IfcExpressionLexer.d.ts +8 -7
  95. package/dist/gen/parser/IfcExpressionListener.d.ts +11 -0
  96. package/dist/gen/parser/IfcExpressionParser.d.ts +20 -8
  97. package/dist/gen/parser/IfcExpressionVisitor.d.ts +7 -0
  98. package/dist/mjs/E.js +4 -0
  99. package/dist/mjs/E.js.map +1 -1
  100. package/dist/mjs/compiler/ExprCompiler.js +6 -0
  101. package/dist/mjs/compiler/ExprCompiler.js.map +1 -1
  102. package/dist/mjs/compiler/IfcExpressionValidationListener.js +6 -3
  103. package/dist/mjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  104. package/dist/mjs/compiler/TypeManager.js +8 -0
  105. package/dist/mjs/compiler/TypeManager.js.map +1 -1
  106. package/dist/mjs/error/ExceptionToExprEvalErrorMapper.js +3 -0
  107. package/dist/mjs/error/ExceptionToExprEvalErrorMapper.js.map +1 -1
  108. package/dist/mjs/error/FunctionArgumentException.js +10 -0
  109. package/dist/mjs/error/FunctionArgumentException.js.map +1 -0
  110. package/dist/mjs/error/MissingFunctionArgumentException.js +5 -7
  111. package/dist/mjs/error/MissingFunctionArgumentException.js.map +1 -1
  112. package/dist/mjs/error/SpuriousFunctionArgumentException.js +8 -0
  113. package/dist/mjs/error/SpuriousFunctionArgumentException.js.map +1 -0
  114. package/dist/mjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
  115. package/dist/mjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js +8 -0
  116. package/dist/mjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -0
  117. package/dist/mjs/expression/ExprEvalResult.js +12 -3
  118. package/dist/mjs/expression/ExprEvalResult.js.map +1 -1
  119. package/dist/mjs/expression/ExprKind.js +5 -4
  120. package/dist/mjs/expression/ExprKind.js.map +1 -1
  121. package/dist/mjs/expression/boolean/AndExpr.js +3 -11
  122. package/dist/mjs/expression/boolean/AndExpr.js.map +1 -1
  123. package/dist/mjs/expression/boolean/BinaryBooleanOpExpr.js +19 -0
  124. package/dist/mjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -0
  125. package/dist/mjs/expression/boolean/LogicalLiteralExpr.js +31 -0
  126. package/dist/mjs/expression/boolean/LogicalLiteralExpr.js.map +1 -0
  127. package/dist/mjs/expression/boolean/NotExpr.js +3 -5
  128. package/dist/mjs/expression/boolean/NotExpr.js.map +1 -1
  129. package/dist/mjs/expression/boolean/OrExpr.js +3 -11
  130. package/dist/mjs/expression/boolean/OrExpr.js.map +1 -1
  131. package/dist/mjs/expression/boolean/XorExpr.js +4 -14
  132. package/dist/mjs/expression/boolean/XorExpr.js.map +1 -1
  133. package/dist/mjs/expression/comparison/EqualsExpr.js +1 -1
  134. package/dist/mjs/expression/comparison/EqualsExpr.js.map +1 -1
  135. package/dist/mjs/expression/comparison/NotEqualsExpr.js +1 -1
  136. package/dist/mjs/expression/comparison/NotEqualsExpr.js.map +1 -1
  137. package/dist/mjs/expression/function/Func.js +3 -5
  138. package/dist/mjs/expression/function/Func.js.map +1 -1
  139. package/dist/mjs/expression/function/IfcExpressionFunctions.js +6 -4
  140. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  141. package/dist/mjs/expression/function/arg/FuncArgLogicalOrBoolean.js +22 -0
  142. package/dist/mjs/expression/function/arg/FuncArgLogicalOrBoolean.js.map +1 -0
  143. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js +8 -9
  144. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  145. package/dist/mjs/expression/function/impl/IF.js +56 -8
  146. package/dist/mjs/expression/function/impl/IF.js.map +1 -1
  147. package/dist/mjs/expression/function/impl/NOT.js +4 -6
  148. package/dist/mjs/expression/function/impl/NOT.js.map +1 -1
  149. package/dist/mjs/expression/function/impl/TOBOOLEAN.js +1 -1
  150. package/dist/mjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  151. package/dist/mjs/expression/function/impl/TOLOGICAL.js +35 -0
  152. package/dist/mjs/expression/function/impl/TOLOGICAL.js.map +1 -0
  153. package/dist/mjs/expression/function/impl/TONUMERIC.js +1 -1
  154. package/dist/mjs/expression/function/impl/TONUMERIC.js.map +1 -1
  155. package/dist/mjs/gen/parser/IfcExpressionLexer.js +75 -65
  156. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  157. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -1
  158. package/dist/mjs/gen/parser/IfcExpressionParser.js +193 -120
  159. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
  160. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  161. package/dist/mjs/type/Types.js +6 -0
  162. package/dist/mjs/type/Types.js.map +1 -1
  163. package/dist/mjs/value/BooleanValue.js +65 -4
  164. package/dist/mjs/value/BooleanValue.js.map +1 -1
  165. package/dist/mjs/value/Logical.js +2 -0
  166. package/dist/mjs/value/Logical.js.map +1 -0
  167. package/dist/mjs/value/LogicalValue.js +110 -7
  168. package/dist/mjs/value/LogicalValue.js.map +1 -1
  169. package/dist/type/Types.d.ts +2 -0
  170. package/dist/value/BooleanValue.d.ts +15 -2
  171. package/dist/value/Logical.d.ts +0 -0
  172. package/dist/value/LogicalValue.d.ts +26 -9
  173. package/package.json +1 -1
@@ -39,6 +39,9 @@ class Types {
39
39
  static isBoolean(actualType) {
40
40
  return this.isType(actualType, Type.BOOLEAN);
41
41
  }
42
+ static isLogical(actualType) {
43
+ return this.isType(actualType, Type.LOGICAL);
44
+ }
42
45
  static isString(actualType) {
43
46
  return this.isType(actualType, Type.STRING);
44
47
  }
@@ -48,6 +51,9 @@ class Types {
48
51
  static boolean() {
49
52
  return Type.BOOLEAN;
50
53
  }
54
+ static logical() {
55
+ return Type.LOGICAL;
56
+ }
51
57
  static string() {
52
58
  return Type.STRING;
53
59
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/type/Types.ts"],"names":[],"mappings":"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","file":"type/Types.js","sourcesContent":["import { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { SimpleType } from \"./SimpleType.js\";\nimport { TypeDisjunction } from \"./TypeDisjunction.js\";\nimport { ExprType } from \"./ExprType.js\";\nimport { ArrayType } from \"./ArrayType.js\";\nimport { TupleType } from \"./TupleType.js\";\n\nexport class Type {\n static readonly ANY = new SimpleType(\"any\");\n static readonly NUMERIC = new SimpleType(\"numeric\");\n static readonly STRING = new SimpleType(\"string\");\n static readonly LOGICAL = new SimpleType(\"logical\");\n static readonly BOOLEAN = new SimpleType(\"boolean\", Type.LOGICAL);\n static readonly IFC_OBJECT_REF = new SimpleType(\"ifcObjectRef\");\n static readonly IFC_ELEMENT_REF = new SimpleType(\n \"ifcElementRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_PROPERTY_REF = new SimpleType(\n \"ifcPropertyRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_PROPERTY_SET_REF = new SimpleType(\n \"ifcPropertySetRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_TYPE_OBJECT_REF = new SimpleType(\n \"ifcTypeObjectRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly ARRAY = new SimpleType(\"array\");\n}\n\nexport class Types {\n public static or(...types: Array<ExprType>) {\n const disjunction = new TypeDisjunction(...types);\n if (disjunction.getTypes().length == 1) {\n return disjunction.getTypes()[0];\n }\n return disjunction;\n }\n public static array(elementType: ExprType): ArrayType {\n return new ArrayType(elementType);\n }\n public static tuple(...types: Array<ExprType>): TupleType {\n return new TupleType(...types);\n }\n public static isNumeric(actualType: ExprType) {\n return this.isType(actualType, Type.NUMERIC);\n }\n public static isBoolean(actualType: ExprType) {\n return this.isType(actualType, Type.BOOLEAN);\n }\n public static isString(actualType: ExprType) {\n return this.isType(actualType, Type.STRING);\n }\n public static isType(actualType: ExprType, type: ExprType) {\n return actualType === type;\n }\n public static boolean() {\n return Type.BOOLEAN;\n }\n public static string() {\n return Type.STRING;\n }\n public static numeric() {\n return Type.NUMERIC;\n }\n public static ifcObjectRef() {\n return Type.IFC_OBJECT_REF;\n }\n\n public static requireIsAssignableFrom(\n expectedType: ExprType,\n actualType: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (!expectedType.isAssignableFrom(actualType)) {\n throw exceptionProducer();\n }\n }\n\n /**\n * Requires overlap if actual is a disjunction, assignable from if it is a type\n * @param expectedType\n * @param actualType\n * @param exceptionProducer\n */\n public static requireWeakIsAssignableFrom(\n expectedType: ExprType,\n actualType: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (expectedType.isAssignableFrom(actualType)) {\n return;\n }\n if (actualType instanceof TypeDisjunction) {\n if (expectedType.overlapsWith(actualType)) {\n return;\n }\n }\n if (actualType instanceof TupleType) {\n const weakerType = Types.array(Types.or(...actualType.getTypes()));\n if (expectedType.isAssignableFrom(weakerType)) {\n return;\n }\n }\n throw exceptionProducer();\n }\n\n static requireTypesOverlap(\n actualType: ExprType,\n actualType2: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (!actualType.overlapsWith(actualType2)) {\n throw exceptionProducer();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/type/Types.ts"],"names":[],"mappings":"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","file":"type/Types.js","sourcesContent":["import { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { SimpleType } from \"./SimpleType.js\";\nimport { TypeDisjunction } from \"./TypeDisjunction.js\";\nimport { ExprType } from \"./ExprType.js\";\nimport { ArrayType } from \"./ArrayType.js\";\nimport { TupleType } from \"./TupleType.js\";\n\nexport class Type {\n static readonly ANY = new SimpleType(\"any\");\n static readonly NUMERIC = new SimpleType(\"numeric\");\n static readonly STRING = new SimpleType(\"string\");\n static readonly LOGICAL = new SimpleType(\"logical\");\n static readonly BOOLEAN = new SimpleType(\"boolean\", Type.LOGICAL);\n static readonly IFC_OBJECT_REF = new SimpleType(\"ifcObjectRef\");\n static readonly IFC_ELEMENT_REF = new SimpleType(\n \"ifcElementRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_PROPERTY_REF = new SimpleType(\n \"ifcPropertyRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_PROPERTY_SET_REF = new SimpleType(\n \"ifcPropertySetRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly IFC_TYPE_OBJECT_REF = new SimpleType(\n \"ifcTypeObjectRef\",\n Type.IFC_OBJECT_REF\n );\n static readonly ARRAY = new SimpleType(\"array\");\n}\n\nexport class Types {\n public static or(...types: Array<ExprType>) {\n const disjunction = new TypeDisjunction(...types);\n if (disjunction.getTypes().length == 1) {\n return disjunction.getTypes()[0];\n }\n return disjunction;\n }\n public static array(elementType: ExprType): ArrayType {\n return new ArrayType(elementType);\n }\n public static tuple(...types: Array<ExprType>): TupleType {\n return new TupleType(...types);\n }\n public static isNumeric(actualType: ExprType) {\n return this.isType(actualType, Type.NUMERIC);\n }\n public static isBoolean(actualType: ExprType) {\n return this.isType(actualType, Type.BOOLEAN);\n }\n public static isLogical(actualType: ExprType) {\n return this.isType(actualType, Type.LOGICAL);\n }\n public static isString(actualType: ExprType) {\n return this.isType(actualType, Type.STRING);\n }\n public static isType(actualType: ExprType, type: ExprType) {\n return actualType === type;\n }\n public static boolean() {\n return Type.BOOLEAN;\n }\n public static logical() {\n return Type.LOGICAL;\n }\n public static string() {\n return Type.STRING;\n }\n public static numeric() {\n return Type.NUMERIC;\n }\n public static ifcObjectRef() {\n return Type.IFC_OBJECT_REF;\n }\n\n public static requireIsAssignableFrom(\n expectedType: ExprType,\n actualType: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (!expectedType.isAssignableFrom(actualType)) {\n throw exceptionProducer();\n }\n }\n\n /**\n * Requires overlap if actual is a disjunction, assignable from if it is a type\n * @param expectedType\n * @param actualType\n * @param exceptionProducer\n */\n public static requireWeakIsAssignableFrom(\n expectedType: ExprType,\n actualType: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (expectedType.isAssignableFrom(actualType)) {\n return;\n }\n if (actualType instanceof TypeDisjunction) {\n if (expectedType.overlapsWith(actualType)) {\n return;\n }\n }\n if (actualType instanceof TupleType) {\n const weakerType = Types.array(Types.or(...actualType.getTypes()));\n if (expectedType.isAssignableFrom(weakerType)) {\n return;\n }\n }\n throw exceptionProducer();\n }\n\n static requireTypesOverlap(\n actualType: ExprType,\n actualType2: ExprType,\n exceptionProducer: () => ExpressionTypeError\n ) {\n if (!actualType.overlapsWith(actualType2)) {\n throw exceptionProducer();\n }\n }\n}\n"]}
@@ -2,12 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BooleanValue = void 0;
4
4
  const Types_js_1 = require("../type/Types.js");
5
+ const LogicalValue_js_1 = require("./LogicalValue.js");
5
6
  class BooleanValue {
6
7
  constructor(value) {
7
8
  this.booleanValue = value;
8
9
  }
9
10
  static of(value) {
10
- return new BooleanValue(value);
11
+ if (value === true) {
12
+ return this.TRUE_VALUE;
13
+ }
14
+ else if (value === false) {
15
+ return this.FALSE_VALUE;
16
+ }
17
+ throw new Error(`Cannot get boolean value of ${value}`);
11
18
  }
12
19
  getValue() {
13
20
  return this.booleanValue;
@@ -15,9 +22,20 @@ class BooleanValue {
15
22
  getType() {
16
23
  return Types_js_1.Type.BOOLEAN;
17
24
  }
18
- equals(other) {
19
- return (BooleanValue.isBooleanValueType(other) &&
20
- other.booleanValue === this.booleanValue);
25
+ static true() {
26
+ return BooleanValue.of(true);
27
+ }
28
+ static false() {
29
+ return BooleanValue.of(false);
30
+ }
31
+ static isBoolean(val) {
32
+ return typeof val === "boolean";
33
+ }
34
+ isTrue() {
35
+ return this.booleanValue === true;
36
+ }
37
+ isFalse() {
38
+ return this.booleanValue === false;
21
39
  }
22
40
  compareTo(other) {
23
41
  return this.booleanValue ? (other.booleanValue ? 0 : 1) : -1;
@@ -28,6 +46,49 @@ class BooleanValue {
28
46
  static isBooleanValueType(arg) {
29
47
  return typeof arg.booleanValue === "boolean";
30
48
  }
49
+ and(other) {
50
+ if (other instanceof LogicalValue_js_1.LogicalValue) {
51
+ return other.and(this);
52
+ }
53
+ return BooleanValue.of(this.booleanValue && other.booleanValue);
54
+ }
55
+ or(other) {
56
+ if (other instanceof LogicalValue_js_1.LogicalValue) {
57
+ return other.or(this);
58
+ }
59
+ return BooleanValue.of(this.booleanValue || other.booleanValue);
60
+ }
61
+ xor(other) {
62
+ if (other instanceof LogicalValue_js_1.LogicalValue) {
63
+ return other.xor(this);
64
+ }
65
+ return BooleanValue.of(this.booleanValue != other.booleanValue);
66
+ }
67
+ implies(other) {
68
+ if (other instanceof LogicalValue_js_1.LogicalValue) {
69
+ if (other.isUnknown()) {
70
+ return (this.isFalse() ? LogicalValue_js_1.LogicalValue.true() : LogicalValue_js_1.LogicalValue.unknown());
71
+ }
72
+ else {
73
+ return LogicalValue_js_1.LogicalValue.of(!this.booleanValue || other.getValue());
74
+ }
75
+ }
76
+ return BooleanValue.of(!this.booleanValue || other.booleanValue);
77
+ }
78
+ not() {
79
+ return this.isTrue() ? BooleanValue.false() : BooleanValue.true();
80
+ }
81
+ equals(other) {
82
+ if (LogicalValue_js_1.LogicalValue.isLogicalValueType(other)) {
83
+ return this.booleanValue === other.getValue();
84
+ }
85
+ else if (BooleanValue.isBooleanValueType(other)) {
86
+ return this.booleanValue === other.booleanValue;
87
+ }
88
+ return false;
89
+ }
31
90
  }
32
91
  exports.BooleanValue = BooleanValue;
92
+ BooleanValue.TRUE_VALUE = new BooleanValue(true);
93
+ BooleanValue.FALSE_VALUE = new BooleanValue(false);
33
94
  //# sourceMappingURL=BooleanValue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/BooleanValue.ts"],"names":[],"mappings":";;;AAGA,+CAAwC;AAExC,MAAa,YAAY;IAGvB,YAAY,KAAc;QACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAAc;QAC7B,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CACzC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,KAAmB;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QAChC,OAAO,OAAO,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;IAC/C,CAAC;CACF;AArCD,oCAqCC","file":"value/BooleanValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\n\nexport class BooleanValue implements Value<boolean>, Comparable<BooleanValue> {\n private readonly booleanValue: boolean;\n\n constructor(value: boolean) {\n this.booleanValue = value;\n }\n\n public static of(value: boolean): BooleanValue {\n return new BooleanValue(value);\n }\n\n getValue(): boolean {\n return this.booleanValue;\n }\n\n getType(): ExprType {\n return Type.BOOLEAN;\n }\n\n equals(other: Value<any>): boolean {\n return (\n BooleanValue.isBooleanValueType(other) &&\n other.booleanValue === this.booleanValue\n );\n }\n\n compareTo(other: BooleanValue): number {\n return this.booleanValue ? (other.booleanValue ? 0 : 1) : -1;\n }\n\n toString(): string {\n return this.booleanValue ? \"TRUE\" : \"FALSE\";\n }\n\n static isBooleanValueType(arg: any): arg is BooleanValueType {\n return typeof arg.booleanValue === \"boolean\";\n }\n}\n\nexport type BooleanValueType = {\n booleanValue: boolean;\n};\n"]}
1
+ {"version":3,"sources":["../../src/value/BooleanValue.ts"],"names":[],"mappings":"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","file":"value/BooleanValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { LogicalValue } from \"./LogicalValue\";\n\nexport class BooleanValue implements Value<boolean>, Comparable<BooleanValue> {\n private readonly booleanValue: boolean;\n\n private static readonly TRUE_VALUE = new BooleanValue(true);\n private static readonly FALSE_VALUE = new BooleanValue(false);\n\n private constructor(value: boolean) {\n this.booleanValue = value;\n }\n\n public static of(value: boolean): BooleanValue {\n if (value === true) {\n return this.TRUE_VALUE;\n } else if (value === false) {\n return this.FALSE_VALUE;\n }\n throw new Error(`Cannot get boolean value of ${value}`);\n }\n\n getValue(): boolean {\n return this.booleanValue;\n }\n\n getType(): ExprType {\n return Type.BOOLEAN;\n }\n\n static true() {\n return BooleanValue.of(true);\n }\n\n static false() {\n return BooleanValue.of(false);\n }\n\n static isBoolean(val: any): val is boolean {\n return typeof val === \"boolean\";\n }\n\n isTrue() {\n return this.booleanValue === true;\n }\n\n isFalse() {\n return this.booleanValue === false;\n }\n\n compareTo(other: BooleanValue): number {\n return this.booleanValue ? (other.booleanValue ? 0 : 1) : -1;\n }\n\n toString(): string {\n return this.booleanValue ? \"TRUE\" : \"FALSE\";\n }\n\n static isBooleanValueType(arg: any): arg is BooleanValueType {\n return typeof arg.booleanValue === \"boolean\";\n }\n\n and<T extends LogicalValue | BooleanValue>(other: T): T {\n if (other instanceof LogicalValue) {\n return other.and(this) as T;\n }\n return BooleanValue.of(this.booleanValue && other.booleanValue) as T;\n }\n\n or<T extends LogicalValue | BooleanValue>(other: T): T {\n if (other instanceof LogicalValue) {\n return other.or(this) as T;\n }\n return BooleanValue.of(this.booleanValue || other.booleanValue) as T;\n }\n\n xor<T extends LogicalValue | BooleanValue>(other: T): T {\n if (other instanceof LogicalValue) {\n return other.xor(this) as T;\n }\n return BooleanValue.of(this.booleanValue != other.booleanValue) as T;\n }\n\n implies<T extends LogicalValue | BooleanValue>(other: T): T {\n if (other instanceof LogicalValue) {\n if (other.isUnknown()) {\n return (\n this.isFalse() ? LogicalValue.true() : LogicalValue.unknown()\n ) as T;\n } else {\n return LogicalValue.of(!this.booleanValue || other.getValue()) as T;\n }\n }\n return BooleanValue.of(!this.booleanValue || other.booleanValue) as T;\n }\n\n not(): BooleanValue {\n return this.isTrue() ? BooleanValue.false() : BooleanValue.true();\n }\n\n equals(other: Value<any>): boolean {\n if (LogicalValue.isLogicalValueType(other)) {\n return this.booleanValue === other.getValue();\n } else if (BooleanValue.isBooleanValueType(other)) {\n return this.booleanValue === other.booleanValue;\n }\n return false;\n }\n}\n\nexport type BooleanValueType = {\n booleanValue: boolean;\n};\n"]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=Logical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/value/Logical.ts"],"names":[],"mappings":"","file":"value/Logical.js","sourcesContent":[""]}
@@ -2,26 +2,126 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LogicalValue = void 0;
4
4
  const Types_js_1 = require("../type/Types.js");
5
+ const BooleanValue_js_1 = require("./BooleanValue.js");
5
6
  class LogicalValue {
6
7
  constructor(value) {
7
8
  this.logicalValue = value;
8
9
  }
10
+ static true() {
11
+ return this.LOGICAL_VALUE_TRUE;
12
+ }
13
+ static false() {
14
+ return this.LOGICAL_VALUE_FALSE;
15
+ }
16
+ static unknown() {
17
+ return this.LOGICAL_VALUE_UNKNOWN;
18
+ }
9
19
  static of(value) {
10
- return new LogicalValue(value);
20
+ switch (value) {
21
+ case this.UNKNOWN_VALUE:
22
+ return this.LOGICAL_VALUE_UNKNOWN;
23
+ case false:
24
+ return this.LOGICAL_VALUE_FALSE;
25
+ case true:
26
+ return this.LOGICAL_VALUE_TRUE;
27
+ }
28
+ throw new Error(`Cannot get logical value of ${value}`);
11
29
  }
12
30
  getValue() {
13
31
  return this.logicalValue;
14
32
  }
33
+ isTrue() {
34
+ return this.logicalValue === true;
35
+ }
36
+ isFalse() {
37
+ return this.logicalValue === false;
38
+ }
39
+ isUnknown() {
40
+ return this.logicalValue === "UNKNOWN";
41
+ }
42
+ static isUnknown(val) {
43
+ return val === "UNKNOWN";
44
+ }
45
+ static isLogical(val) {
46
+ return typeof val === "boolean" || this.isUnknown(val);
47
+ }
48
+ and(other) {
49
+ const otherValue = other.getValue();
50
+ if (this.logicalValue === false || otherValue === false) {
51
+ return LogicalValue.false();
52
+ }
53
+ if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {
54
+ return LogicalValue.unknown();
55
+ }
56
+ return LogicalValue.true();
57
+ }
58
+ or(other) {
59
+ const otherValue = other.getValue();
60
+ if (this.logicalValue === true || otherValue === true) {
61
+ return LogicalValue.true();
62
+ }
63
+ if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {
64
+ return LogicalValue.unknown();
65
+ }
66
+ return LogicalValue.false();
67
+ }
68
+ xor(other) {
69
+ const otherValue = other.getValue();
70
+ if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {
71
+ return LogicalValue.unknown();
72
+ }
73
+ return LogicalValue.of(this.logicalValue !== other.getValue());
74
+ }
75
+ implies(other) {
76
+ const otherValue = other.getValue();
77
+ if (otherValue === true) {
78
+ return LogicalValue.true();
79
+ }
80
+ if (this.isUnknown()) {
81
+ return LogicalValue.unknown();
82
+ }
83
+ if (this.isFalse()) {
84
+ return LogicalValue.true();
85
+ }
86
+ return LogicalValue.of(otherValue);
87
+ }
88
+ not() {
89
+ switch (this.logicalValue) {
90
+ case LogicalValue.UNKNOWN_VALUE:
91
+ return LogicalValue.LOGICAL_VALUE_UNKNOWN;
92
+ case true:
93
+ return LogicalValue.LOGICAL_VALUE_FALSE;
94
+ case false:
95
+ return LogicalValue.LOGICAL_VALUE_TRUE;
96
+ }
97
+ throw new Error(`Cannot invert logical value ${this.logicalValue}`);
98
+ }
15
99
  equals(other) {
16
- return (LogicalValue.isLogicalValueType(other) &&
17
- other.logicalValue === this.logicalValue);
100
+ if (LogicalValue.isLogicalValueType(other)) {
101
+ return this.logicalValue === other.logicalValue;
102
+ }
103
+ else if (BooleanValue_js_1.BooleanValue.isBooleanValueType(other)) {
104
+ return this.logicalValue === other.booleanValue;
105
+ }
106
+ return false;
18
107
  }
19
108
  getType() {
20
109
  return Types_js_1.Type.LOGICAL;
21
110
  }
111
+ compareTo(other) {
112
+ switch (this.logicalValue) {
113
+ case true:
114
+ return other.isTrue() ? 0 : 1;
115
+ case false:
116
+ return other.isTrue() ? -1 : other.logicalValue === false ? 0 : 1;
117
+ case "UNKNOWN":
118
+ return other.isUnknown() ? 0 : -1;
119
+ }
120
+ throw new Error(`Unexpected logical value comparison: ${this.logicalValue} vs ${other.logicalValue}`);
121
+ }
22
122
  toString() {
23
- return this.logicalValue === LogicalValue.UNKNOWN
24
- ? "UNKNOWN"
123
+ return this.logicalValue === LogicalValue.UNKNOWN_VALUE
124
+ ? LogicalValue.UNKNOWN_VALUE
25
125
  : this.logicalValue
26
126
  ? "TRUE"
27
127
  : "FALSE";
@@ -29,9 +129,12 @@ class LogicalValue {
29
129
  static isLogicalValueType(arg) {
30
130
  return ((typeof arg.logicalValue !== "undefined" &&
31
131
  typeof arg.logicalValue === "boolean") ||
32
- arg.logicalValue === LogicalValue.UNKNOWN);
132
+ arg.logicalValue === LogicalValue.UNKNOWN_VALUE);
33
133
  }
34
134
  }
35
135
  exports.LogicalValue = LogicalValue;
36
- LogicalValue.UNKNOWN = "UNKNOWN";
136
+ LogicalValue.UNKNOWN_VALUE = "UNKNOWN";
137
+ LogicalValue.LOGICAL_VALUE_TRUE = new LogicalValue(true);
138
+ LogicalValue.LOGICAL_VALUE_FALSE = new LogicalValue(false);
139
+ LogicalValue.LOGICAL_VALUE_UNKNOWN = new LogicalValue(LogicalValue.UNKNOWN_VALUE);
37
140
  //# sourceMappingURL=LogicalValue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/LogicalValue.ts"],"names":[],"mappings":";;;AAEA,+CAAwC;AAExC,MAAa,YAAY;IAIvB,YAAY,KAA0B;QACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAA0B;QACzC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO;YAC/C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,OAAO,CACL,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,WAAW;YACtC,OAAO,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;YACxC,GAAG,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAC1C,CAAC;IACJ,CAAC;;AAzCH,oCA0CC;AAzCwB,oBAAO,GAAG,SAAS,CAAC","file":"value/LogicalValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\n\nexport class LogicalValue implements Value<boolean | \"UNKNOWN\"> {\n public static readonly UNKNOWN = \"UNKNOWN\";\n private readonly logicalValue: boolean | \"UNKNOWN\";\n\n constructor(value: boolean | \"UNKNOWN\") {\n this.logicalValue = value;\n }\n\n public static of(value: boolean | \"UNKNOWN\"): LogicalValue {\n return new LogicalValue(value);\n }\n\n getValue(): boolean | \"UNKNOWN\" {\n return this.logicalValue;\n }\n\n equals(other: Value<any>): boolean {\n return (\n LogicalValue.isLogicalValueType(other) &&\n other.logicalValue === this.logicalValue\n );\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n\n toString(): string {\n return this.logicalValue === LogicalValue.UNKNOWN\n ? \"UNKNOWN\"\n : this.logicalValue\n ? \"TRUE\"\n : \"FALSE\";\n }\n\n public static isLogicalValueType(arg: any): arg is LogicalValueType {\n return (\n (typeof arg.logicalValue !== \"undefined\" &&\n typeof arg.logicalValue === \"boolean\") ||\n arg.logicalValue === LogicalValue.UNKNOWN\n );\n }\n}\n\nexport type LogicalValueType = {\n logicalValue: boolean | \"UNKNOWN\";\n};\n"]}
1
+ {"version":3,"sources":["../../src/value/LogicalValue.ts"],"names":[],"mappings":"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","file":"value/LogicalValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { BooleanValue } from \"./BooleanValue\";\nimport { Comparable } from \"./Comparable\";\n\nexport type Logical = boolean | \"UNKNOWN\";\n\nexport class LogicalValue implements Value<Logical>, Comparable<LogicalValue> {\n public static readonly UNKNOWN_VALUE = \"UNKNOWN\";\n private readonly logicalValue: Logical;\n private static readonly LOGICAL_VALUE_TRUE = new LogicalValue(true);\n private static readonly LOGICAL_VALUE_FALSE = new LogicalValue(false);\n private static readonly LOGICAL_VALUE_UNKNOWN = new LogicalValue(\n LogicalValue.UNKNOWN_VALUE\n );\n\n private constructor(value: Logical) {\n this.logicalValue = value;\n }\n\n public static true(): LogicalValue {\n return this.LOGICAL_VALUE_TRUE;\n }\n\n public static false(): LogicalValue {\n return this.LOGICAL_VALUE_FALSE;\n }\n\n public static unknown(): LogicalValue {\n return this.LOGICAL_VALUE_UNKNOWN;\n }\n\n public static of(value: Logical): LogicalValue {\n switch (value) {\n case this.UNKNOWN_VALUE:\n return this.LOGICAL_VALUE_UNKNOWN;\n case false:\n return this.LOGICAL_VALUE_FALSE;\n case true:\n return this.LOGICAL_VALUE_TRUE;\n }\n throw new Error(`Cannot get logical value of ${value}`);\n }\n\n getValue(): Logical {\n return this.logicalValue;\n }\n\n isTrue(): boolean {\n return this.logicalValue === true;\n }\n\n isFalse(): boolean {\n return this.logicalValue === false;\n }\n\n isUnknown(): boolean {\n return this.logicalValue === \"UNKNOWN\";\n }\n\n static isUnknown(val: any): boolean {\n return val === \"UNKNOWN\";\n }\n\n static isLogical(val: any): val is Logical {\n return typeof val === \"boolean\" || this.isUnknown(val);\n }\n\n and(other: LogicalValue | BooleanValue): LogicalValue {\n const otherValue = other.getValue();\n if (this.logicalValue === false || otherValue === false) {\n return LogicalValue.false();\n }\n if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {\n return LogicalValue.unknown();\n }\n return LogicalValue.true();\n }\n\n or(other: LogicalValue | BooleanValue): LogicalValue {\n const otherValue = other.getValue();\n if (this.logicalValue === true || otherValue === true) {\n return LogicalValue.true();\n }\n if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {\n return LogicalValue.unknown();\n }\n return LogicalValue.false();\n }\n\n xor(other: LogicalValue | BooleanValue): LogicalValue {\n const otherValue = other.getValue();\n if (this.isUnknown() || otherValue === LogicalValue.UNKNOWN_VALUE) {\n return LogicalValue.unknown();\n }\n return LogicalValue.of(this.logicalValue !== other.getValue());\n }\n\n implies(other: LogicalValue | BooleanValue): LogicalValue {\n const otherValue = other.getValue();\n if (otherValue === true) {\n return LogicalValue.true();\n }\n if (this.isUnknown()) {\n return LogicalValue.unknown();\n }\n if (this.isFalse()) {\n return LogicalValue.true();\n }\n return LogicalValue.of(otherValue);\n }\n\n public not(): LogicalValue {\n switch (this.logicalValue) {\n case LogicalValue.UNKNOWN_VALUE:\n return LogicalValue.LOGICAL_VALUE_UNKNOWN;\n case true:\n return LogicalValue.LOGICAL_VALUE_FALSE;\n case false:\n return LogicalValue.LOGICAL_VALUE_TRUE;\n }\n throw new Error(`Cannot invert logical value ${this.logicalValue}`);\n }\n\n equals(other: Value<any>): boolean {\n if (LogicalValue.isLogicalValueType(other)) {\n return this.logicalValue === other.logicalValue;\n } else if (BooleanValue.isBooleanValueType(other)) {\n return this.logicalValue === other.booleanValue;\n }\n return false;\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n\n compareTo(other: LogicalValue): number {\n switch (this.logicalValue) {\n case true:\n return other.isTrue() ? 0 : 1;\n case false:\n return other.isTrue() ? -1 : other.logicalValue === false ? 0 : 1;\n case \"UNKNOWN\":\n return other.isUnknown() ? 0 : -1;\n }\n throw new Error(\n `Unexpected logical value comparison: ${this.logicalValue} vs ${other.logicalValue}`\n );\n }\n\n toString(): string {\n return this.logicalValue === LogicalValue.UNKNOWN_VALUE\n ? LogicalValue.UNKNOWN_VALUE\n : this.logicalValue\n ? \"TRUE\"\n : \"FALSE\";\n }\n\n public static isLogicalValueType(arg: any): arg is LogicalValue {\n return (\n (typeof arg.logicalValue !== \"undefined\" &&\n typeof arg.logicalValue === \"boolean\") ||\n arg.logicalValue === LogicalValue.UNKNOWN_VALUE\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import IfcExpressionVisitor from "../gen/parser/IfcExpressionVisitor.js";
2
- import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "../gen/parser/IfcExpressionParser.js";
2
+ import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, LogicalLiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "../gen/parser/IfcExpressionParser.js";
3
3
  import { Expr } from "../expression/Expr.js";
4
4
  import { TypeManager } from "./TypeManager.js";
5
5
  import { ExprManager } from "./ExprManager.js";
@@ -31,6 +31,7 @@ export declare class ExprCompiler extends IfcExpressionVisitor<Expr<any>> {
31
31
  visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any>;
32
32
  visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any>;
33
33
  visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any>;
34
+ visitLogicalLiteral: (ctx: LogicalLiteralContext) => Expr<any>;
34
35
  visitSENot: (ctx: SENotContext) => Expr<any>;
35
36
  visitArrayExpr: (ctx: ArrayExprContext) => Expr<any>;
36
37
  collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>>;
@@ -1,5 +1,5 @@
1
1
  import IfcExpressionListener from "../gen/parser/IfcExpressionListener.js";
2
- import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "../gen/parser/IfcExpressionParser.js";
2
+ import { ArrayElementListContext, ArrayExprContext, BooleanLiteralContext, ExprContext, ExprListContext, FunctionCallContext, LiteralContext, LogicalLiteralContext, MethodCallChainEndContext, MethodCallChainInnerContext, NumLiteralContext, SEAddSubContext, SEArrayExprContext, SEBooleanBinaryOpContext, SEComparisonContext, SEFunctionCallContext, SELiteralContext, SEMethodCallContext, SEMulDivContext, SENotContext, SEParenthesisContext, SEPowerContext, SEUnaryMinusContext, SEUnaryMultipleMinusContext, SEVariableRefContext, StringLiteralContext, VariableRefContext } from "../gen/parser/IfcExpressionParser.js";
3
3
  import { TypeManager } from "./TypeManager.js";
4
4
  export declare class IfcExpressionValidationListener extends IfcExpressionListener {
5
5
  private readonly typeManager;
@@ -16,6 +16,7 @@ export declare class IfcExpressionValidationListener extends IfcExpressionListen
16
16
  exitNumLiteral: (ctx: NumLiteralContext) => void;
17
17
  exitStringLiteral: (ctx: StringLiteralContext) => void;
18
18
  exitBooleanLiteral: (ctx: BooleanLiteralContext) => void;
19
+ exitLogicalLiteral: (ctx: LogicalLiteralContext) => void;
19
20
  exitExpr: (ctx: ExprContext) => void;
20
21
  exitSEMulDiv: (ctx: SEMulDivContext) => void;
21
22
  exitSEPower: (ctx: SEPowerContext) => void;
@@ -8,6 +8,8 @@ export declare class TypeManager {
8
8
  copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext): void;
9
9
  requireString(ctx: ParserRuleContext): void;
10
10
  requireBoolean(ctx: ParserRuleContext): void;
11
+ requireLogicalOrBoolean(ctx: ParserRuleContext): void;
12
+ requireOneOf(ctx: ParserRuleContext, ...types: Array<ExprType>): void;
11
13
  requireNumeric(ctx: ParserRuleContext): void;
12
14
  requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext): void;
13
15
  isType(type: ExprType, ...ctxs: any[]): boolean;
@@ -0,0 +1,7 @@
1
+ import { ValidationException } from "./ValidationException.js";
2
+ export declare abstract class FunctionArgumentException extends ValidationException {
3
+ readonly functionName: string;
4
+ readonly argumentName: string;
5
+ readonly index: number;
6
+ constructor(message: string, functionName: string, argumentName: string, index: number, ctx: any);
7
+ }
@@ -1,7 +1,4 @@
1
- import { ValidationException } from "./ValidationException.js";
2
- export declare class MissingFunctionArgumentException extends ValidationException {
3
- readonly functionName: string;
4
- readonly argumentName: string;
5
- readonly index: number;
6
- constructor(functionName: string, argumentName: string, index: number, ctx: any);
1
+ import { FunctionArgumentException } from "./FunctionArgumentException.js";
2
+ export declare class MissingFunctionArgumentException extends FunctionArgumentException {
3
+ constructor(functionName: string, argumentName: string, index: number, ctx: any, message?: string);
7
4
  }
@@ -0,0 +1,4 @@
1
+ import { FunctionArgumentException } from "./FunctionArgumentException.js";
2
+ export declare class SpuriousFunctionArgumentException extends FunctionArgumentException {
3
+ constructor(functionName: string, argumentName: string, index: number, ctx: any, message?: string);
4
+ }
@@ -1,6 +1,6 @@
1
1
  import { ExceptionToExprEvalErrorMapper } from "../ExceptionToExprEvalErrorMapper.js";
2
- import { ExprEvalValidationError } from "../../expression/ExprEvalResult.js";
2
+ import { ExprEvalError } from "../../expression/ExprEvalResult.js";
3
3
  import { MissingFunctionArgumentException } from "../MissingFunctionArgumentException.js";
4
4
  export declare class MissingFunctionArgumentExceptionMapper implements ExceptionToExprEvalErrorMapper<MissingFunctionArgumentException> {
5
- mapException(exception: MissingFunctionArgumentException): ExprEvalValidationError;
5
+ mapException(exception: MissingFunctionArgumentException): ExprEvalError;
6
6
  }
@@ -0,0 +1,6 @@
1
+ import { ExceptionToExprEvalErrorMapper } from "../ExceptionToExprEvalErrorMapper.js";
2
+ import { ExprEvalError } from "../../expression/ExprEvalResult.js";
3
+ import { SpuriousFunctionArgumentException } from "../SpuriousFunctionArgumentException.js";
4
+ export declare class SpuriousFunctionArgumentExceptionMapper implements ExceptionToExprEvalErrorMapper<SpuriousFunctionArgumentException> {
5
+ mapException(exception: SpuriousFunctionArgumentException): ExprEvalError;
6
+ }
@@ -20,7 +20,8 @@ export declare enum ExprEvalStatus {
20
20
  MISSING_OPERAND = 2084,
21
21
  MISSING_REQUIRED_FUNCTION_ARGUMENT = 2085,
22
22
  UNKNOWN_FUNCTION = 2086,
23
- WRONG_FUNCTION_ARGUMENT_TYPE = 2088
23
+ WRONG_FUNCTION_ARGUMENT_TYPE = 2087,
24
+ SPURIOUS_FUNCTION_ARGUMENT = 2088
24
25
  }
25
26
  export declare function isExprEvalStatus(candidate: number): boolean;
26
27
  export type ExprEvalResult<T> = ExprEvalSuccess<T> | ExprEvalError;
@@ -138,7 +139,13 @@ export declare class ExprEvalUnknownFunctionErrorObj extends ExprEvalValidationE
138
139
  readonly functionName: string;
139
140
  constructor(message: any, functionName: any, textSpan: TextSpan);
140
141
  }
141
- export declare class ExprEvalMissingFunctionArgumentErrorObj extends ExprEvalValidationErrorObj {
142
+ export declare class ExprEvalMissingFunctionArgumentErrorObj extends ExprEvalErrorObj {
143
+ readonly functionName: string;
144
+ readonly argumentName: string;
145
+ readonly argumentIndex: number;
146
+ constructor(message: any, functionName: string, argumentName: string, argumentIndex: number, textSpan: TextSpan);
147
+ }
148
+ export declare class ExprEvalSpuriousFunctionArgumentErrorObj extends ExprEvalErrorObj {
142
149
  readonly functionName: string;
143
150
  readonly argumentName: string;
144
151
  readonly argumentIndex: number;
@@ -15,11 +15,12 @@ export declare enum ExprKind {
15
15
  REF_PROPERTY = "REF_PROPERTY",
16
16
  STR_CONCAT = "STR_CONCAT",
17
17
  STR_LITERAL = "STR_LITERAL",
18
- BOOLEAN_AND = "BOOLEAN_AND",
19
- BOOLEAN_OR = "BOOLEAN_OR",
20
- BOOLEAN_XOR = "BOOLEAN_XOR",
21
- BOOLEAN_NOT = "BOOLEAN_NOT",
18
+ AND = "AND",
19
+ OR = "OR",
20
+ XOR = "XOR",
21
+ NOT = "NOT",
22
22
  BOOLEAN_LITERAL = "BOOLEAN_LITERAL",
23
+ LOGICAL_LITERAL = "LOGICAL_LITERAL",
23
24
  CMP_EQUALS = "CMP_EQUALS",
24
25
  CMP_NOT_EQUALS = "CMP_NOT_EQUALS",
25
26
  CMP_LESS_THAN = "CMP_LESS_THAN",
@@ -1,13 +1,9 @@
1
+ import { BinaryBooleanOpExpr } from "./BinaryBooleanOpExpr.js";
1
2
  import { BooleanValue } from "../../value/BooleanValue.js";
2
- import { Expr2 } from "../Expr2.js";
3
+ import { LogicalValue } from "../../value/LogicalValue.js";
3
4
  import { Expr } from "../Expr.js";
4
- import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
5
- import { ExprEvalError } from "../ExprEvalResult.js";
6
- import { ExprType } from "../../type/ExprType.js";
7
5
  import { ExprStringBuilder } from "../ExprStringBuilder.js";
8
- export declare class AndExpr extends Expr2<BooleanValue, BooleanValue, BooleanValue> {
9
- constructor(left: Expr<BooleanValue>, right: Expr<BooleanValue>);
10
- protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, leftOperand: BooleanValue, rightOperand: BooleanValue): ExprEvalError | BooleanValue;
6
+ export declare class AndExpr extends BinaryBooleanOpExpr {
7
+ constructor(left: Expr<BooleanValue | LogicalValue>, right: Expr<BooleanValue | LogicalValue>);
11
8
  protected buildExprString(builder: ExprStringBuilder): void;
12
- getType(): ExprType;
13
9
  }
@@ -0,0 +1,14 @@
1
+ import { BooleanValue } from "../../value/BooleanValue.js";
2
+ import { Expr2 } from "../Expr2.js";
3
+ import { ExprKind } from "../ExprKind.js";
4
+ import { Expr } from "../Expr.js";
5
+ import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
6
+ import { ExprEvalError } from "../ExprEvalResult.js";
7
+ import { ExprType } from "../../type/ExprType.js";
8
+ import { LogicalValue } from "../../value/LogicalValue.js";
9
+ export declare abstract class BinaryBooleanOpExpr extends Expr2<BooleanValue | LogicalValue, BooleanValue | LogicalValue, BooleanValue | LogicalValue> {
10
+ private readonly method;
11
+ constructor(kind: ExprKind, method: string, left: Expr<BooleanValue | LogicalValue>, right: Expr<BooleanValue | LogicalValue>);
12
+ protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, leftOperand: BooleanValue | LogicalValue, rightOperand: BooleanValue | LogicalValue): ExprEvalError | BooleanValue | LogicalValue;
13
+ getType(): ExprType;
14
+ }
@@ -0,0 +1,12 @@
1
+ import { LiteralExpr } from "../LiteralExpr.js";
2
+ import { ExprEvalError } from "../ExprEvalResult.js";
3
+ import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
4
+ import { ExprType } from "../../type/ExprType.js";
5
+ import { ExprStringBuilder } from "../ExprStringBuilder.js";
6
+ import { Logical, LogicalValue } from "../../value/LogicalValue.js";
7
+ export declare class LogicalLiteralExpr extends LiteralExpr<Logical, LogicalValue> {
8
+ constructor(value: Logical);
9
+ protected calculateResult(ctx: IfcExpressionContext): ExprEvalError | LogicalValue;
10
+ protected buildExprString(builder: ExprStringBuilder): void;
11
+ getType(): ExprType;
12
+ }
@@ -5,9 +5,10 @@ import { ExprEvalError } from "../ExprEvalResult.js";
5
5
  import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
6
6
  import { ExprType } from "../../type/ExprType.js";
7
7
  import { ExprStringBuilder } from "../ExprStringBuilder.js";
8
- export declare class NotExpr extends Expr1<BooleanValue, BooleanValue> {
9
- constructor(sub: Expr<BooleanValue>);
10
- protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, subExpressionResult: BooleanValue): ExprEvalError | BooleanValue;
8
+ import { LogicalValue } from "../../value/LogicalValue.js";
9
+ export declare class NotExpr extends Expr1<BooleanValue | LogicalValue, BooleanValue | LogicalValue> {
10
+ constructor(sub: Expr<BooleanValue | LogicalValue>);
11
+ protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, subExpressionResult: BooleanValue | LogicalValue): ExprEvalError | BooleanValue | LogicalValue;
11
12
  protected buildExprString(builder: ExprStringBuilder): void;
12
13
  getType(): ExprType;
13
14
  }
@@ -1,13 +1,9 @@
1
+ import { BinaryBooleanOpExpr } from "./BinaryBooleanOpExpr.js";
1
2
  import { BooleanValue } from "../../value/BooleanValue.js";
2
- import { Expr2 } from "../Expr2.js";
3
+ import { LogicalValue } from "../../value/LogicalValue.js";
3
4
  import { Expr } from "../Expr.js";
4
- import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
5
- import { ExprEvalError } from "../ExprEvalResult.js";
6
- import { ExprType } from "../../type/ExprType.js";
7
5
  import { ExprStringBuilder } from "../ExprStringBuilder.js";
8
- export declare class OrExpr extends Expr2<BooleanValue, BooleanValue, BooleanValue> {
9
- constructor(left: Expr<BooleanValue>, right: Expr<BooleanValue>);
10
- protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, leftOperand: BooleanValue, rightOperand: BooleanValue): ExprEvalError | BooleanValue;
6
+ export declare class OrExpr extends BinaryBooleanOpExpr {
7
+ constructor(left: Expr<BooleanValue | LogicalValue>, right: Expr<BooleanValue | LogicalValue>);
11
8
  protected buildExprString(builder: ExprStringBuilder): void;
12
- getType(): ExprType;
13
9
  }
@@ -1,13 +1,9 @@
1
+ import { BinaryBooleanOpExpr } from "./BinaryBooleanOpExpr.js";
1
2
  import { BooleanValue } from "../../value/BooleanValue.js";
2
- import { Expr2 } from "../Expr2.js";
3
+ import { LogicalValue } from "../../value/LogicalValue.js";
3
4
  import { Expr } from "../Expr.js";
4
- import { IfcExpressionContext } from "../../context/IfcExpressionContext.js";
5
- import { ExprEvalError } from "../ExprEvalResult.js";
6
- import { ExprType } from "../../type/ExprType.js";
7
5
  import { ExprStringBuilder } from "../ExprStringBuilder.js";
8
- export declare class XorExpr extends Expr2<BooleanValue, BooleanValue, BooleanValue> {
9
- constructor(left: Expr<BooleanValue>, right: Expr<BooleanValue>);
10
- protected calculateResult(ctx: IfcExpressionContext, localCtx: Map<string, any>, leftOperand: BooleanValue, rightOperand: BooleanValue): ExprEvalError | BooleanValue;
6
+ export declare class XorExpr extends BinaryBooleanOpExpr {
7
+ constructor(left: Expr<BooleanValue | LogicalValue>, right: Expr<BooleanValue | LogicalValue>);
11
8
  protected buildExprString(builder: ExprStringBuilder): void;
12
- getType(): ExprType;
13
9
  }
@@ -4,6 +4,7 @@ import { ExprEvalError, ExprEvalResult } from "../ExprEvalResult.js";
4
4
  import { ExprType } from "../../type/ExprType.js";
5
5
  import { ParserRuleContext } from "antlr4";
6
6
  import { FunctionExpr } from "./FunctionExpr.js";
7
+ import { Expr } from "../Expr.js";
7
8
  export declare abstract class Func {
8
9
  protected name: string;
9
10
  protected formalArguments: Array<FuncArg<unknown>>;
@@ -25,7 +26,7 @@ export declare abstract class Func {
25
26
  * @param evaluatedArguments
26
27
  * @protected
27
28
  */
28
- protected transformArguments(evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>): Map<string, ExprEvalResult<ExpressionValue>>;
29
+ protected transformArguments(callingExpr: Expr<any>, evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>): void;
29
30
  /**
30
31
  * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).
31
32
  * Generates an error if a required value is missing.
@@ -0,0 +1,12 @@
1
+ import { FuncArgBase } from "./FuncArgBase.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult, ExprEvalSuccess } from "../../ExprEvalResult.js";
4
+ import { BooleanValue } from "../../../value/BooleanValue.js";
5
+ import { ExprType } from "../../../type/ExprType.js";
6
+ import { FunctionExpr } from "../FunctionExpr.js";
7
+ import { LogicalValue } from "../../../value/LogicalValue.js";
8
+ export declare class FuncArgLogicalOrBoolean extends FuncArgBase<BooleanValue | LogicalValue> {
9
+ constructor(required: boolean, name: string, defaultValue?: BooleanValue | LogicalValue);
10
+ getType(): ExprType;
11
+ protected transformForTypeCheck(callingExpr: FunctionExpr, invocationValue: ExprEvalSuccess<ExpressionValue>): ExprEvalResult<ExpressionValue>;
12
+ }