ifc-expressions 2.0.1-beta.8 → 2.1.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 (69) hide show
  1. package/dist/cjs/error/MissingFunctionArgumentException.js.map +1 -1
  2. package/dist/cjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
  3. package/dist/cjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
  4. package/dist/cjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
  5. package/dist/cjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
  6. package/dist/cjs/expression/boolean/NotExpr.js.map +1 -1
  7. package/dist/cjs/expression/function/Func.js +4 -0
  8. package/dist/cjs/expression/function/Func.js.map +1 -1
  9. package/dist/cjs/expression/function/IfcExpressionFunctions.js +10 -0
  10. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  11. package/dist/cjs/expression/function/arg/FuncArgArray.js +25 -0
  12. package/dist/cjs/expression/function/arg/FuncArgArray.js.map +1 -0
  13. package/dist/cjs/expression/function/impl/AT.js +31 -0
  14. package/dist/cjs/expression/function/impl/AT.js.map +1 -0
  15. package/dist/cjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -1
  16. package/dist/cjs/expression/function/impl/CompareMagnitudes.js.map +1 -1
  17. package/dist/cjs/expression/function/impl/EQUALS.js.map +1 -1
  18. package/dist/cjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  19. package/dist/cjs/expression/function/impl/NOT.js.map +1 -1
  20. package/dist/cjs/expression/function/impl/SPLIT.js +37 -0
  21. package/dist/cjs/expression/function/impl/SPLIT.js.map +1 -0
  22. package/dist/cjs/expression/function/impl/SUBSTRING.js +36 -0
  23. package/dist/cjs/expression/function/impl/SUBSTRING.js.map +1 -0
  24. package/dist/cjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  25. package/dist/cjs/expression/function/impl/TOLOGICAL.js.map +1 -1
  26. package/dist/cjs/expression/function/impl/TOLOWERCASE.js +23 -0
  27. package/dist/cjs/expression/function/impl/TOLOWERCASE.js.map +1 -0
  28. package/dist/cjs/expression/function/impl/TONUMERIC.js.map +1 -1
  29. package/dist/cjs/expression/function/impl/TOUPPERCASE.js +23 -0
  30. package/dist/cjs/expression/function/impl/TOUPPERCASE.js.map +1 -0
  31. package/dist/cjs/util/TextSpan.js.map +1 -1
  32. package/dist/expression/function/arg/FuncArgArray.d.ts +11 -0
  33. package/dist/expression/function/impl/AT.d.ts +10 -0
  34. package/dist/expression/function/impl/SPLIT.d.ts +10 -0
  35. package/dist/expression/function/impl/SUBSTRING.d.ts +10 -0
  36. package/dist/expression/function/impl/TOLOWERCASE.d.ts +10 -0
  37. package/dist/expression/function/impl/TOUPPERCASE.d.ts +10 -0
  38. package/dist/mjs/error/MissingFunctionArgumentException.js.map +1 -1
  39. package/dist/mjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
  40. package/dist/mjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
  41. package/dist/mjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
  42. package/dist/mjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
  43. package/dist/mjs/expression/boolean/NotExpr.js.map +1 -1
  44. package/dist/mjs/expression/function/Func.js +4 -0
  45. package/dist/mjs/expression/function/Func.js.map +1 -1
  46. package/dist/mjs/expression/function/IfcExpressionFunctions.js +10 -0
  47. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  48. package/dist/mjs/expression/function/arg/FuncArgArray.js +21 -0
  49. package/dist/mjs/expression/function/arg/FuncArgArray.js.map +1 -0
  50. package/dist/mjs/expression/function/impl/AT.js +27 -0
  51. package/dist/mjs/expression/function/impl/AT.js.map +1 -0
  52. package/dist/mjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -1
  53. package/dist/mjs/expression/function/impl/CompareMagnitudes.js.map +1 -1
  54. package/dist/mjs/expression/function/impl/EQUALS.js.map +1 -1
  55. package/dist/mjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
  56. package/dist/mjs/expression/function/impl/NOT.js.map +1 -1
  57. package/dist/mjs/expression/function/impl/SPLIT.js +33 -0
  58. package/dist/mjs/expression/function/impl/SPLIT.js.map +1 -0
  59. package/dist/mjs/expression/function/impl/SUBSTRING.js +32 -0
  60. package/dist/mjs/expression/function/impl/SUBSTRING.js.map +1 -0
  61. package/dist/mjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
  62. package/dist/mjs/expression/function/impl/TOLOGICAL.js.map +1 -1
  63. package/dist/mjs/expression/function/impl/TOLOWERCASE.js +19 -0
  64. package/dist/mjs/expression/function/impl/TOLOWERCASE.js.map +1 -0
  65. package/dist/mjs/expression/function/impl/TONUMERIC.js.map +1 -1
  66. package/dist/mjs/expression/function/impl/TOUPPERCASE.js +19 -0
  67. package/dist/mjs/expression/function/impl/TOUPPERCASE.js.map +1 -0
  68. package/dist/mjs/util/TextSpan.js.map +1 -1
  69. package/package.json +2 -1
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOUPPERCASE = void 0;
4
+ const Func_js_1 = require("../Func.js");
5
+ const FuncArgString_js_1 = require("../arg/FuncArgString.js");
6
+ const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
7
+ const StringValue_js_1 = require("../../../value/StringValue.js");
8
+ const Types_js_1 = require("../../../type/Types.js");
9
+ class TOUPPERCASE extends Func_js_1.Func {
10
+ constructor() {
11
+ super("TOUPPERCASE", [new FuncArgString_js_1.FuncArgString(true, "object")]);
12
+ }
13
+ calculateResult(callingExpr, evaluatedArguments) {
14
+ return new ExprEvalResult_js_1.ExprEvalSuccessObj(StringValue_js_1.StringValue.of(evaluatedArguments.get("object")
15
+ .getValue()
16
+ .toUpperCase()));
17
+ }
18
+ getReturnType(argumentTypes) {
19
+ return Types_js_1.Type.STRING;
20
+ }
21
+ }
22
+ exports.TOUPPERCASE = TOUPPERCASE;
23
+ //# sourceMappingURL=TOUPPERCASE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/expression/function/impl/TOUPPERCASE.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8DAAwD;AAExD,+DAA6E;AAC7E,kEAA4D;AAE5D,qDAA8C;AAG9C,MAAa,WAAY,SAAQ,cAAI;IACnC;QACE,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,gCAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACS,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,OAAO,IAAI,sCAAkB,CAC3B,4BAAW,CAAC,EAAE,CACX,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAiB;aAC9C,QAAQ,EAAE;aACV,WAAW,EAAE,CACjB,CACF,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,aAAyB;QAC5C,OAAO,eAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AApBD,kCAoBC","file":"expression/function/impl/TOUPPERCASE.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class TOUPPERCASE extends Func {\n constructor() {\n super(\"TOUPPERCASE\", [new FuncArgString(true, \"object\")]);\n }\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n return new ExprEvalSuccessObj(\n StringValue.of(\n (evaluatedArguments.get(\"object\") as StringValue)\n .getValue()\n .toUpperCase()\n )\n );\n }\n\n public getReturnType(argumentTypes: ExprType[]): ExprType {\n return Type.STRING;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/TextSpan.ts"],"names":[],"mappings":"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","file":"util/TextSpan.js","sourcesContent":["import { TextPosition } from \"./TextPosition.js\";\nimport { isNullish } from \"./IfcExpressionUtils.js\";\n\nexport class TextSpan {\n private _start: TextPosition;\n private _end: TextPosition;\n\n constructor(start: TextPosition, end: TextPosition) {\n if (start.isBefore(end)) {\n this._start = start;\n this._end = end;\n } else {\n this._start = end;\n this._end = start;\n }\n }\n\n static of(\n fromLine: number,\n fromColumn: number,\n toLine: number,\n toColumn: number\n ) {\n return new TextSpan(\n new TextPosition(fromLine, fromColumn),\n new TextPosition(toLine, toColumn)\n );\n }\n\n get start(): TextPosition {\n return this._start;\n }\n\n get end(): TextPosition {\n return this._end;\n }\n\n toString(): string {\n return this._start.toString() + \" - \" + this._end.toString();\n }\n\n public getCoveredText(input: string) {\n if (\n this._start.isFirstLine() &&\n this._end.isFirstLine() &&\n this.end.column <= input.length\n ) {\n return input.substr(this._start.column - 1, this._end.column - 1);\n }\n const lines = input.split(\"\\n\");\n if (lines.length > this._end.line) {\n // this is correct: _end.line is 1-based, so if there are 3 lines, length is 3 and the last TextPosition is line is line 3, col x.\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the number of lines in the text (${\n lines.length\n })`\n );\n }\n if (\n lines.length == this.end.line &&\n lines[lines.length - 1].length > this._end.column\n ) {\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the last position in the last column in the last line of the text (${\n lines.length\n }:${lines[lines.length - 1].length})`\n );\n }\n if (this._start.isAtSameLine(this._end)) {\n return lines[this.start.line - 1].substr(\n this._start.column - 1,\n this._end.column - 1\n );\n }\n let result = \"\";\n let copying = false;\n for (let line = this._start.line; line <= this.end.line; line++) {\n if (line === this._start.line) {\n result += lines[line - 1].substr(this.start.column - 1);\n copying = true;\n } else if (line === this._end.line) {\n result += lines[line - 1].substr(0, this.end.column - 1);\n return result;\n } else if (copying) {\n result += lines[line - 1];\n }\n }\n throw new Error(\n \"Cannot compute text coverage, this should not have happened. There is a bug in the sanity checks for the start and end positions.\"\n );\n }\n\n public underline(input: string, underlineChar: string = \"~\"): string {\n const lines = input.split(\"\\n\");\n if (lines.length < this._end.line) {\n // this is correct: _end.line is 1-based, so if there are 3 lines, length is 3 and the last TextPosition is line is line 3, col x.\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the number of lines in the text (${\n lines.length\n })`\n );\n }\n if (\n lines.length == this.end.line &&\n lines[lines.length - 1].length + 1 < this._end.column\n ) {\n //tolerate a one-off error as the antlr4 syntax error is sometimes at index 0, sometimes at index [length].\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the last position in the last column in the last line of the text (${\n lines.length\n }:${lines[lines.length - 1].length})`\n );\n }\n let result = [];\n let underlining = false;\n for (let line = 1; line <= lines.length; line++) {\n if (line === this._start.line && line === this._end.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n this.start.column - 1,\n this._end.column - this._start.column + 1\n )\n );\n } else if (line === this._start.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n this.start.column - 1\n )\n );\n underlining = true;\n } else if (line === this._end.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n 0,\n this.end.column\n )\n );\n underlining = false;\n } else {\n if (underlining) {\n result.push(...this.underlineOneLine(lines[line - 1], underlineChar));\n } else {\n result.push(lines[line - 1]);\n }\n }\n }\n return result.join(\"\\n\");\n throw new Error(\n \"Cannot compute text coverage, this should not have happened. There is a bug in the sanity checks for the start and end positions.\"\n );\n }\n\n private underlineOneLine(\n line: string,\n ulChar: string = \"~\",\n ulStart: number = 0,\n ulLength: number = line.length - ulStart\n ): Array<string> {\n if (ulChar.length != 1) {\n throw new Error(\n `Underline char must be a string of length 1, ${ulChar} does not qualify`\n );\n }\n if (ulLength <= 0) {\n ulLength = 1;\n }\n return [line, \" \".repeat(ulStart) + ulChar.repeat(ulLength)];\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/util/TextSpan.ts"],"names":[],"mappings":"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","file":"util/TextSpan.js","sourcesContent":["import { TextPosition } from \"./TextPosition.js\";\n\nexport class TextSpan {\n private _start: TextPosition;\n private _end: TextPosition;\n\n constructor(start: TextPosition, end: TextPosition) {\n if (start.isBefore(end)) {\n this._start = start;\n this._end = end;\n } else {\n this._start = end;\n this._end = start;\n }\n }\n\n static of(\n fromLine: number,\n fromColumn: number,\n toLine: number,\n toColumn: number\n ) {\n return new TextSpan(\n new TextPosition(fromLine, fromColumn),\n new TextPosition(toLine, toColumn)\n );\n }\n\n get start(): TextPosition {\n return this._start;\n }\n\n get end(): TextPosition {\n return this._end;\n }\n\n toString(): string {\n return this._start.toString() + \" - \" + this._end.toString();\n }\n\n public getCoveredText(input: string) {\n if (\n this._start.isFirstLine() &&\n this._end.isFirstLine() &&\n this.end.column <= input.length\n ) {\n return input.substr(this._start.column - 1, this._end.column - 1);\n }\n const lines = input.split(\"\\n\");\n if (lines.length > this._end.line) {\n // this is correct: _end.line is 1-based, so if there are 3 lines, length is 3 and the last TextPosition is line is line 3, col x.\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the number of lines in the text (${\n lines.length\n })`\n );\n }\n if (\n lines.length == this.end.line &&\n lines[lines.length - 1].length > this._end.column\n ) {\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the last position in the last column in the last line of the text (${\n lines.length\n }:${lines[lines.length - 1].length})`\n );\n }\n if (this._start.isAtSameLine(this._end)) {\n return lines[this.start.line - 1].substr(\n this._start.column - 1,\n this._end.column - 1\n );\n }\n let result = \"\";\n let copying = false;\n for (let line = this._start.line; line <= this.end.line; line++) {\n if (line === this._start.line) {\n result += lines[line - 1].substr(this.start.column - 1);\n copying = true;\n } else if (line === this._end.line) {\n result += lines[line - 1].substr(0, this.end.column - 1);\n return result;\n } else if (copying) {\n result += lines[line - 1];\n }\n }\n throw new Error(\n \"Cannot compute text coverage, this should not have happened. There is a bug in the sanity checks for the start and end positions.\"\n );\n }\n\n public underline(input: string, underlineChar: string = \"~\"): string {\n const lines = input.split(\"\\n\");\n if (lines.length < this._end.line) {\n // this is correct: _end.line is 1-based, so if there are 3 lines, length is 3 and the last TextPosition is line is line 3, col x.\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the number of lines in the text (${\n lines.length\n })`\n );\n }\n if (\n lines.length == this.end.line &&\n lines[lines.length - 1].length + 1 < this._end.column\n ) {\n //tolerate a one-off error as the antlr4 syntax error is sometimes at index 0, sometimes at index [length].\n throw new Error(\n `Cannot compute covered text. End position ${this._end.toString()} is past the last position in the last column in the last line of the text (${\n lines.length\n }:${lines[lines.length - 1].length})`\n );\n }\n let result = [];\n let underlining = false;\n for (let line = 1; line <= lines.length; line++) {\n if (line === this._start.line && line === this._end.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n this.start.column - 1,\n this._end.column - this._start.column + 1\n )\n );\n } else if (line === this._start.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n this.start.column - 1\n )\n );\n underlining = true;\n } else if (line === this._end.line) {\n result.push(\n ...this.underlineOneLine(\n lines[line - 1],\n underlineChar,\n 0,\n this.end.column\n )\n );\n underlining = false;\n } else {\n if (underlining) {\n result.push(...this.underlineOneLine(lines[line - 1], underlineChar));\n } else {\n result.push(lines[line - 1]);\n }\n }\n }\n return result.join(\"\\n\");\n throw new Error(\n \"Cannot compute text coverage, this should not have happened. There is a bug in the sanity checks for the start and end positions.\"\n );\n }\n\n private underlineOneLine(\n line: string,\n ulChar: string = \"~\",\n ulStart: number = 0,\n ulLength: number = line.length - ulStart\n ): Array<string> {\n if (ulChar.length != 1) {\n throw new Error(\n `Underline char must be a string of length 1, ${ulChar} does not qualify`\n );\n }\n if (ulLength <= 0) {\n ulLength = 1;\n }\n return [line, \" \".repeat(ulStart) + ulChar.repeat(ulLength)];\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { FuncArgBase } from "./FuncArgBase.js";
2
+ import { ArrayValue } from "../../../value/ArrayValue.js";
3
+ import { ExprType } from "../../../type/ExprType.js";
4
+ import { FunctionExpr } from "../FunctionExpr.js";
5
+ import { ExprEvalResult, ExprEvalSuccess } from "../../ExprEvalResult.js";
6
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
7
+ export declare class FuncArgArray extends FuncArgBase<ArrayValue> {
8
+ constructor(required: boolean, name: string, defaultValue?: ArrayValue);
9
+ getType(): ExprType;
10
+ protected transformForTypeCheck(callingExpr: FunctionExpr, invocationValue: ExprEvalSuccess<ExpressionValue>): ExprEvalResult<ExpressionValue>;
11
+ }
@@ -0,0 +1,10 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult } from "../../ExprEvalResult.js";
4
+ import { ExprType } from "../../../type/ExprType.js";
5
+ import { FunctionExpr } from "../FunctionExpr.js";
6
+ export declare class AT extends Func {
7
+ constructor();
8
+ protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
9
+ getReturnType(argumentTypes: Array<ExprType>): ExprType;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult } from "../../ExprEvalResult.js";
4
+ import { ExprType } from "../../../type/ExprType.js";
5
+ import { FunctionExpr } from "../FunctionExpr.js";
6
+ export declare class SPLIT extends Func {
7
+ constructor();
8
+ protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
9
+ getReturnType(argumentTypes: ExprType[]): ExprType;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult } from "../../ExprEvalResult.js";
4
+ import { ExprType } from "../../../type/ExprType.js";
5
+ import { FunctionExpr } from "../FunctionExpr.js";
6
+ export declare class SUBSTRING extends Func {
7
+ constructor();
8
+ protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
9
+ getReturnType(argumentTypes: ExprType[]): ExprType;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult } from "../../ExprEvalResult.js";
4
+ import { ExprType } from "../../../type/ExprType.js";
5
+ import { FunctionExpr } from "../FunctionExpr.js";
6
+ export declare class TOLOWERCASE extends Func {
7
+ constructor();
8
+ protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
9
+ getReturnType(argumentTypes: ExprType[]): ExprType;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExpressionValue } from "../../../value/ExpressionValue.js";
3
+ import { ExprEvalResult } from "../../ExprEvalResult.js";
4
+ import { ExprType } from "../../../type/ExprType.js";
5
+ import { FunctionExpr } from "../FunctionExpr.js";
6
+ export declare class TOUPPERCASE extends Func {
7
+ constructor();
8
+ protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
9
+ getReturnType(argumentTypes: ExprType[]): ExprType;
10
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["error/MissingFunctionArgumentException.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,OAAO,gCAAiC,SAAQ,yBAAyB;IAC7E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAC1D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF","file":"error/MissingFunctionArgumentException.js","sourcesContent":["import { ValidationException } from \"./ValidationException.js\";\nimport { 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":["error/MissingFunctionArgumentException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,OAAO,gCAAiC,SAAQ,yBAAyB;IAC7E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAC1D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF","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 +1 @@
1
- {"version":3,"sources":["error/mapper/MissingFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,uCAAuC,GAExC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,OAAO,sCAAsC;IAGjD,YAAY,CAAC,SAA2C;QACtD,OAAO,IAAI,uCAAuC,CAChD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,QAAQ,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","file":"error/mapper/MissingFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingFunctionArgumentErrorObj,\n ExprEvalValidationError,\n} from \"../../expression/ExprEvalResult.js\";\nimport { MissingFunctionArgumentException } from \"../MissingFunctionArgumentException.js\";\nimport { TextSpan } from \"../../util/TextSpan.js\";\n\nexport class MissingFunctionArgumentExceptionMapper\n implements ExceptionToExprEvalErrorMapper<MissingFunctionArgumentException>\n{\n mapException(exception: MissingFunctionArgumentException): ExprEvalError {\n return new ExprEvalMissingFunctionArgumentErrorObj(\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":["error/mapper/MissingFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,uCAAuC,GACxC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,OAAO,sCAAsC;IAGjD,YAAY,CAAC,SAA2C;QACtD,OAAO,IAAI,uCAAuC,CAChD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,QAAQ,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","file":"error/mapper/MissingFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingFunctionArgumentErrorObj,\n} from \"../../expression/ExprEvalResult.js\";\nimport { MissingFunctionArgumentException } from \"../MissingFunctionArgumentException.js\";\nimport { TextSpan } from \"../../util/TextSpan.js\";\n\nexport class MissingFunctionArgumentExceptionMapper\n implements ExceptionToExprEvalErrorMapper<MissingFunctionArgumentException>\n{\n mapException(exception: MissingFunctionArgumentException): ExprEvalError {\n return new ExprEvalMissingFunctionArgumentErrorObj(\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 +1 @@
1
- {"version":3,"sources":["error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,wCAAwC,GAEzC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,OAAO,uCAAuC;IAGlD,YAAY,CAAC,SAA4C;QACvD,OAAO,IAAI,wCAAwC,CACjD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,QAAQ,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","file":"error/mapper/SpuriousFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingFunctionArgumentErrorObj,\n ExprEvalSpuriousFunctionArgumentErrorObj,\n ExprEvalValidationError,\n} from \"../../expression/ExprEvalResult.js\";\nimport { MissingFunctionArgumentException } from \"../MissingFunctionArgumentException.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":["error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wCAAwC,GACzC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,OAAO,uCAAuC;IAGlD,YAAY,CAAC,SAA4C;QACvD,OAAO,IAAI,wCAAwC,CACjD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,QAAQ,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","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 +1 @@
1
- {"version":3,"sources":["expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,OAAgB,mBAAoB,SAAQ,KAIjD;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,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACrC;YACA,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF","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 { ExprStringBuilder } from \"../ExprStringBuilder.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":["expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKpC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,OAAgB,mBAAoB,SAAQ,KAIjD;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,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACrC;YACA,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF","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 +1 @@
1
- {"version":3,"sources":["expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,OAAO,EAAW,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,OAAO,kBAAmB,SAAQ,WAAkC;IACxE,YAAY,KAAc;QACxB,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,YAAY,CAAC,aAAa;gBAC7B,OAAO,CAAC,YAAY,CAAC,YAAY,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,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF","file":"expression/boolean/LogicalLiteralExpr.js","sourcesContent":["import { LiteralExpr } from \"../LiteralExpr.js\";\nimport { BooleanValue } from \"../../value/BooleanValue.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":["expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,OAAO,EAAW,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,OAAO,kBAAmB,SAAQ,WAAkC;IACxE,YAAY,KAAc;QACxB,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,YAAY,CAAC,aAAa;gBAC7B,OAAO,CAAC,YAAY,CAAC,YAAY,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,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF","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 +1 @@
1
- {"version":3,"sources":["expression/boolean/NotExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C,MAAM,OAAO,OAAQ,SAAQ,KAG5B;IACC,YAAY,GAAsC;QAChD,KAAK,CAAC,QAAQ,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","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 { Type } from \"../../type/Types.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":["expression/boolean/NotExpr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO1C,MAAM,OAAO,OAAQ,SAAQ,KAG5B;IACC,YAAY,GAAsC;QAChD,KAAK,CAAC,QAAQ,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","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"]}
@@ -5,6 +5,7 @@ import { ExprKind } from "../ExprKind.js";
5
5
  import { Types } from "../../type/Types.js";
6
6
  import { MissingFunctionArgumentException } from "../../error/MissingFunctionArgumentException.js";
7
7
  import { WrongFunctionArgumentTypeException } from "../../error/WrongFunctionArgumentTypeException.js";
8
+ import { SpuriousFunctionArgumentException } from "../../error/SpuriousFunctionArgumentException.js";
8
9
  export class Func {
9
10
  constructor(name, args) {
10
11
  this.name = name;
@@ -21,6 +22,9 @@ export class Func {
21
22
  checkArgumentTypes(providedArgumentTypes, ctx) {
22
23
  const numProvided = providedArgumentTypes.length;
23
24
  if (!isNullish(this.formalArguments)) {
25
+ if (numProvided > this.formalArguments.length) {
26
+ throw new SpuriousFunctionArgumentException(this.name, "[unexpected argument]", this.formalArguments.length, ctx, `Function expects (at most) ${this.formalArguments.length} arguments`);
27
+ }
24
28
  for (let i = 0; i < this.formalArguments.length; i++) {
25
29
  const currentArg = this.formalArguments[i];
26
30
  if (numProvided > i) {
@@ -1 +1 @@
1
- {"version":3,"sources":["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 ExprEvalFunctionEvaluationConsequentialErrorObj,\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\";\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 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":["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"]}
@@ -20,6 +20,11 @@ import { TONUMERIC } from "./impl/TONUMERIC.js";
20
20
  import { IfcExpressionFunctionConfigException } from "../../error/IfcExpressionFunctionConfigException.js";
21
21
  import { TOBOOLEAN } from "./impl/TOBOOLEAN.js";
22
22
  import { TOLOGICAL } from "./impl/TOLOGICAL.js";
23
+ import { TOLOWERCASE } from "./impl/TOLOWERCASE.js";
24
+ import { TOUPPERCASE } from "./impl/TOUPPERCASE.js";
25
+ import { SUBSTRING } from "./impl/SUBSTRING.js";
26
+ import { SPLIT } from "./impl/SPLIT.js";
27
+ import { AT } from "./impl/AT.js";
23
28
  const builtinFunctions = new Map();
24
29
  function registerOrDie(fnKey, func) {
25
30
  if (builtinFunctions.has(fnKey)) {
@@ -55,6 +60,7 @@ export class IfcExpressionFunctions {
55
60
  }
56
61
  registerFunc(new MAP());
57
62
  registerFunc(new CHOOSE());
63
+ registerFunc(new AT());
58
64
  registerFunc(new IF());
59
65
  registerFunc(new ROUND());
60
66
  registerFunc(new AttributeAccessorFunction("name", Type.STRING));
@@ -70,6 +76,10 @@ registerFunc(new TOSTRING());
70
76
  registerFunc(new TONUMERIC(), "TONUMBER");
71
77
  registerFunc(new TOBOOLEAN());
72
78
  registerFunc(new TOLOGICAL(), "NOTFOUNDASUNKNOWN");
79
+ registerFunc(new TOLOWERCASE());
80
+ registerFunc(new TOUPPERCASE());
81
+ registerFunc(new SUBSTRING());
82
+ registerFunc(new SPLIT());
73
83
  registerFunc(new EXISTS());
74
84
  registerFunc(new FuncBooleanBinary("AND", "and"));
75
85
  registerFunc(new FuncBooleanBinary("OR", "or"));
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":"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","file":"expression/function/IfcExpressionFunctions.js","sourcesContent":["import { Func } from \"./Func.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { MAP } from \"./impl/MAP.js\";\nimport { ROUND } from \"./impl/ROUND.js\";\nimport { AttributeAccessorFunction } from \"./impl/AttributeAccessorFunction.js\";\nimport { PROPERTYSET } from \"./impl/PROPERTYSET.js\";\nimport { PROPERTY } from \"./impl/PROPERTY.js\";\nimport { TYPE } from \"./impl/TYPE.js\";\nimport { FuncBooleanBinary } from \"./impl/FuncBooleanBinary.js\";\nimport { NOT } from \"./impl/NOT.js\";\nimport { CHOOSE } from \"./impl/CHOOSE.js\";\nimport { MatchesPattern } from \"./impl/MatchesPattern.js\";\nimport { Type, Types } from \"../../type/Types.js\";\nimport { TOSTRING } from \"./impl/TOSTRING.js\";\nimport { EXISTS } from \"./impl/EXISTS.js\";\nimport { EQUALS } from \"./impl/EQUALS.js\";\nimport { CompareMagnitudes } from \"./impl/CompareMagnitudes.js\";\nimport { ReplacePattern } from \"./impl/ReplacePattern.js\";\nimport { IF } from \"./impl/IF.js\";\nimport { TONUMERIC } from \"./impl/TONUMERIC\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException\";\nimport { TOBOOLEAN } from \"./impl/TOBOOLEAN\";\nimport { TOLOGICAL } from \"./impl/TOLOGICAL\";\n\nconst builtinFunctions = new Map<string, Func>();\n\nfunction registerOrDie(fnKey: string, func: Func) {\n if (builtinFunctions.has(fnKey)) {\n throw new IfcExpressionFunctionConfigException(\n `cannot register function with name '${fnKey}': name already in use`\n );\n }\n builtinFunctions.set(fnKey, func);\n}\n\nfunction registerFunc(func: Func, ...aliases: Array<string>) {\n const fnKey = func.getName();\n const keys = [...aliases];\n keys.unshift(fnKey);\n keys.forEach((key) =>\n registerOrDie(IfcExpressionFunctions.normalizeName(key), func)\n );\n}\n\nexport class IfcExpressionFunctions {\n public static normalizeName(name: string): string {\n if (isNullish(name)) {\n return undefined;\n }\n return name.toUpperCase();\n }\n\n public static isBuiltinFunction(name: string) {\n if (isNullish(name)) {\n return false;\n }\n return builtinFunctions.has(this.normalizeName(name));\n }\n\n public static getFunction(name: string): Func {\n if (isNullish(name)) {\n return undefined;\n }\n return builtinFunctions.get(this.normalizeName(name));\n }\n}\n\nregisterFunc(new MAP());\nregisterFunc(new CHOOSE());\nregisterFunc(new IF());\nregisterFunc(new ROUND());\nregisterFunc(new AttributeAccessorFunction(\"name\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"guid\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"ifcClass\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"description\", Type.STRING));\nregisterFunc(\n new AttributeAccessorFunction(\n \"value\",\n Types.or(Type.STRING, Type.NUMERIC, Type.BOOLEAN, Type.ARRAY)\n )\n);\nregisterFunc(new PROPERTYSET());\nregisterFunc(new PROPERTY());\nregisterFunc(new TYPE());\nregisterFunc(new NOT());\nregisterFunc(new TOSTRING());\nregisterFunc(new TONUMERIC(), \"TONUMBER\");\nregisterFunc(new TOBOOLEAN());\nregisterFunc(new TOLOGICAL(), \"NOTFOUNDASUNKNOWN\");\nregisterFunc(new EXISTS());\nregisterFunc(new FuncBooleanBinary(\"AND\", \"and\"));\nregisterFunc(new FuncBooleanBinary(\"OR\", \"or\"));\nregisterFunc(new FuncBooleanBinary(\"XOR\", \"xor\"));\nregisterFunc(new FuncBooleanBinary(\"IMPLIES\", \"implies\"));\nregisterFunc(new EQUALS());\nregisterFunc(new CompareMagnitudes(\"GREATERTHAN\", (cmp) => cmp > 0));\nregisterFunc(new CompareMagnitudes(\"GREATERTHANOREQUAL\", (cmp) => cmp >= 0));\nregisterFunc(new CompareMagnitudes(\"LESSTHAN\", (cmp) => cmp < 0));\nregisterFunc(new CompareMagnitudes(\"LESSTHANOREQUAL\", (cmp) => cmp <= 0));\nregisterFunc(new MatchesPattern(\"CONTAINS\", true, false));\nregisterFunc(new MatchesPattern(\"MATCHES\", true, true));\nregisterFunc(new MatchesPattern(\"REGEXCONTAINS\", false, false));\nregisterFunc(new MatchesPattern(\"REGEXMATCHES\", false, true));\nregisterFunc(new ReplacePattern(\"REPLACE\", true));\nregisterFunc(new ReplacePattern(\"REGEXREPLACE\", false));\n"]}
1
+ {"version":3,"sources":["expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":"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","file":"expression/function/IfcExpressionFunctions.js","sourcesContent":["import { Func } from \"./Func.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { MAP } from \"./impl/MAP.js\";\nimport { ROUND } from \"./impl/ROUND.js\";\nimport { AttributeAccessorFunction } from \"./impl/AttributeAccessorFunction.js\";\nimport { PROPERTYSET } from \"./impl/PROPERTYSET.js\";\nimport { PROPERTY } from \"./impl/PROPERTY.js\";\nimport { TYPE } from \"./impl/TYPE.js\";\nimport { FuncBooleanBinary } from \"./impl/FuncBooleanBinary.js\";\nimport { NOT } from \"./impl/NOT.js\";\nimport { CHOOSE } from \"./impl/CHOOSE.js\";\nimport { MatchesPattern } from \"./impl/MatchesPattern.js\";\nimport { Type, Types } from \"../../type/Types.js\";\nimport { TOSTRING } from \"./impl/TOSTRING.js\";\nimport { EXISTS } from \"./impl/EXISTS.js\";\nimport { EQUALS } from \"./impl/EQUALS.js\";\nimport { CompareMagnitudes } from \"./impl/CompareMagnitudes.js\";\nimport { ReplacePattern } from \"./impl/ReplacePattern.js\";\nimport { IF } from \"./impl/IF.js\";\nimport { TONUMERIC } from \"./impl/TONUMERIC\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException\";\nimport { TOBOOLEAN } from \"./impl/TOBOOLEAN\";\nimport { TOLOGICAL } from \"./impl/TOLOGICAL\";\nimport { TOLOWERCASE } from \"./impl/TOLOWERCASE\";\nimport { TOUPPERCASE } from \"./impl/TOUPPERCASE\";\nimport { SUBSTRING } from \"./impl/SUBSTRING\";\nimport { SPLIT } from \"./impl/SPLIT\";\nimport { AT } from \"./impl/AT\";\n\nconst builtinFunctions = new Map<string, Func>();\n\nfunction registerOrDie(fnKey: string, func: Func) {\n if (builtinFunctions.has(fnKey)) {\n throw new IfcExpressionFunctionConfigException(\n `cannot register function with name '${fnKey}': name already in use`\n );\n }\n builtinFunctions.set(fnKey, func);\n}\n\nfunction registerFunc(func: Func, ...aliases: Array<string>) {\n const fnKey = func.getName();\n const keys = [...aliases];\n keys.unshift(fnKey);\n keys.forEach((key) =>\n registerOrDie(IfcExpressionFunctions.normalizeName(key), func)\n );\n}\n\nexport class IfcExpressionFunctions {\n public static normalizeName(name: string): string {\n if (isNullish(name)) {\n return undefined;\n }\n return name.toUpperCase();\n }\n\n public static isBuiltinFunction(name: string) {\n if (isNullish(name)) {\n return false;\n }\n return builtinFunctions.has(this.normalizeName(name));\n }\n\n public static getFunction(name: string): Func {\n if (isNullish(name)) {\n return undefined;\n }\n return builtinFunctions.get(this.normalizeName(name));\n }\n}\n\nregisterFunc(new MAP());\nregisterFunc(new CHOOSE());\nregisterFunc(new AT());\nregisterFunc(new IF());\nregisterFunc(new ROUND());\nregisterFunc(new AttributeAccessorFunction(\"name\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"guid\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"ifcClass\", Type.STRING));\nregisterFunc(new AttributeAccessorFunction(\"description\", Type.STRING));\nregisterFunc(\n new AttributeAccessorFunction(\n \"value\",\n Types.or(Type.STRING, Type.NUMERIC, Type.BOOLEAN, Type.ARRAY)\n )\n);\nregisterFunc(new PROPERTYSET());\nregisterFunc(new PROPERTY());\nregisterFunc(new TYPE());\nregisterFunc(new NOT());\nregisterFunc(new TOSTRING());\nregisterFunc(new TONUMERIC(), \"TONUMBER\");\nregisterFunc(new TOBOOLEAN());\nregisterFunc(new TOLOGICAL(), \"NOTFOUNDASUNKNOWN\");\nregisterFunc(new TOLOWERCASE());\nregisterFunc(new TOUPPERCASE());\nregisterFunc(new SUBSTRING());\nregisterFunc(new SPLIT());\nregisterFunc(new EXISTS());\nregisterFunc(new FuncBooleanBinary(\"AND\", \"and\"));\nregisterFunc(new FuncBooleanBinary(\"OR\", \"or\"));\nregisterFunc(new FuncBooleanBinary(\"XOR\", \"xor\"));\nregisterFunc(new FuncBooleanBinary(\"IMPLIES\", \"implies\"));\nregisterFunc(new EQUALS());\nregisterFunc(new CompareMagnitudes(\"GREATERTHAN\", (cmp) => cmp > 0));\nregisterFunc(new CompareMagnitudes(\"GREATERTHANOREQUAL\", (cmp) => cmp >= 0));\nregisterFunc(new CompareMagnitudes(\"LESSTHAN\", (cmp) => cmp < 0));\nregisterFunc(new CompareMagnitudes(\"LESSTHANOREQUAL\", (cmp) => cmp <= 0));\nregisterFunc(new MatchesPattern(\"CONTAINS\", true, false));\nregisterFunc(new MatchesPattern(\"MATCHES\", true, true));\nregisterFunc(new MatchesPattern(\"REGEXCONTAINS\", false, false));\nregisterFunc(new MatchesPattern(\"REGEXMATCHES\", false, true));\nregisterFunc(new ReplacePattern(\"REPLACE\", true));\nregisterFunc(new ReplacePattern(\"REGEXREPLACE\", false));\n"]}
@@ -0,0 +1,21 @@
1
+ import { FuncArgBase } from "./FuncArgBase.js";
2
+ import { Type, Types } from "../../../type/Types.js";
3
+ import { ExprEvalTypeErrorObj, } from "../../ExprEvalResult.js";
4
+ import { ExprKind } from "../../ExprKind.js";
5
+ export class FuncArgArray extends FuncArgBase {
6
+ constructor(required, name, defaultValue) {
7
+ super(required, name, defaultValue);
8
+ }
9
+ getType() {
10
+ return Types.array(Type.ANY);
11
+ }
12
+ transformForTypeCheck(callingExpr, invocationValue) {
13
+ const result = invocationValue.result;
14
+ const value = result.getValue();
15
+ if (Array.isArray(value)) {
16
+ return invocationValue;
17
+ }
18
+ return new ExprEvalTypeErrorObj(ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be an array, but was ${JSON.stringify(value)}`, value, callingExpr.getTextSpan());
19
+ }
20
+ }
21
+ //# sourceMappingURL=FuncArgArray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/arg/FuncArgArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAGL,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,OAAO,YAAa,SAAQ,WAAuB;IACvD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAyB;QACpE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAES,qBAAqB,CAC7B,WAAyB,EACzB,eAAiD;QAEjD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,eAAe,CAAC;SACxB;QACD,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,SAAS,CAC/D,KAAK,CACN,EAAE,EACH,KAAK,EACL,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;IACJ,CAAC;CACF","file":"expression/function/arg/FuncArgArray.js","sourcesContent":["import { FuncArgBase } from \"./FuncArgBase\";\nimport { ArrayValue } from \"../../../value/ArrayValue\";\nimport { ExprType } from \"../../../type/ExprType\";\nimport { Type, Types } from \"../../../type/Types\";\nimport { FunctionExpr } from \"../FunctionExpr\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue\";\nimport { ExprKind } from \"../../ExprKind\";\n\nexport class FuncArgArray extends FuncArgBase<ArrayValue> {\n constructor(required: boolean, name: string, defaultValue?: ArrayValue) {\n super(required, name, defaultValue);\n }\n\n getType(): ExprType {\n return Types.array(Type.ANY);\n }\n\n protected transformForTypeCheck(\n callingExpr: FunctionExpr,\n invocationValue: ExprEvalSuccess<ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const result = invocationValue.result;\n const value = result.getValue();\n if (Array.isArray(value)) {\n return invocationValue;\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} must be an array, but was ${JSON.stringify(\n value\n )}`,\n value,\n callingExpr.getTextSpan()\n );\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { Func } from "../Func.js";
2
+ import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
3
+ import { Types } from "../../../type/Types.js";
4
+ import { FuncArgNumeric } from "../arg/FuncArgNumeric.js";
5
+ import { FuncArgArray } from "../arg/FuncArgArray.js";
6
+ import { TupleType } from "../../../type/TupleType.js";
7
+ export class AT extends Func {
8
+ constructor() {
9
+ super("AT", [
10
+ new FuncArgArray(true, "input"),
11
+ new FuncArgNumeric(true, "index"),
12
+ ]);
13
+ }
14
+ calculateResult(callingExpr, evaluatedArguments) {
15
+ const inputArray = evaluatedArguments.get("input").getValue();
16
+ const index = evaluatedArguments.get("index").getValue();
17
+ return new ExprEvalSuccessObj(inputArray.at(index.toNumber()));
18
+ }
19
+ getReturnType(argumentTypes) {
20
+ const arrType = argumentTypes[0];
21
+ if (arrType instanceof TupleType) {
22
+ return Types.or(...arrType.getTypes());
23
+ }
24
+ return arrType.getElementType();
25
+ }
26
+ }
27
+ //# sourceMappingURL=AT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/impl/AT.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,MAAM,OAAO,EAAG,SAAQ,IAAI;IAC1B;QACE,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;YAC/B,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IACS,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GACd,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAC/B,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC,QAAQ,EAAE,CAAC;QAC3E,OAAO,IAAI,kBAAkB,CAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAoB,CACnD,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,YAAY,SAAS,EAAE;YAChC,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxC;QACD,OAAQ,OAAqB,CAAC,cAAc,EAAE,CAAC;IACjD,CAAC;CACF","file":"expression/function/impl/AT.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Types } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgNumeric } from \"../arg/FuncArgNumeric\";\nimport { NumericValue } from \"../../../value/NumericValue\";\nimport { FuncArgArray } from \"../arg/FuncArgArray\";\nimport { ArrayValue } from \"../../../value/ArrayValue\";\nimport { TupleType } from \"../../../type/TupleType\";\nimport { ArrayType } from \"../../../type/ArrayType\";\n\nexport class AT extends Func {\n constructor() {\n super(\"AT\", [\n new FuncArgArray(true, \"input\"),\n new FuncArgNumeric(true, \"index\"),\n ]);\n }\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputArray = (\n evaluatedArguments.get(\"input\") as ArrayValue\n ).getValue();\n const index = (evaluatedArguments.get(\"index\") as NumericValue).getValue();\n return new ExprEvalSuccessObj(\n inputArray.at(index.toNumber()) as ExpressionValue\n );\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n const arrType = argumentTypes[0];\n if (arrType instanceof TupleType) {\n return Types.or(...arrType.getTypes());\n }\n return (arrType as ArrayType).getElementType();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/impl/AttributeAccessorFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,OAAO,yBAA0B,SAAQ,IAAI;IAKjD,YAAY,aAAqB,EAAE,UAAoB;QACrD,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE;YACjC,IAAI,OAAO,CAAS,IAAI,EAAE,yBAAyB,CAAC,cAAc,CAAC;SACpE,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB;aACjC,GAAG,CAAC,yBAAyB,CAAC,cAAc,CAAC;aAC7C,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,kBAAkB,CAC1B,SAA4B,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAC/D,CAAC;IACJ,CAAC;;AAzBe,wCAAc,GAAG,WAAW,CAAC","file":"expression/function/impl/AttributeAccessorFunction.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArg } from \"../FuncArg.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { ObjectAccessor } from \"../../../context/ObjectAccessor.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\n\nexport class AttributeAccessorFunction extends Func {\n private readonly attributeName;\n static readonly KEY_OBJECT_REF = \"objectRef\";\n private readonly returnType: ExprType;\n\n constructor(attributeName: string, returnType: ExprType) {\n super(attributeName.toUpperCase(), [\n new FuncArg<string>(true, AttributeAccessorFunction.KEY_OBJECT_REF),\n ]);\n this.attributeName = attributeName;\n this.returnType = returnType;\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return this.returnType;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments\n .get(AttributeAccessorFunction.KEY_OBJECT_REF)\n .getValue();\n return new ExprEvalSuccessObj(\n (objectRef as ObjectAccessor).getAttribute(this.attributeName)\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/function/impl/AttributeAccessorFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAK7E,MAAM,OAAO,yBAA0B,SAAQ,IAAI;IAKjD,YAAY,aAAqB,EAAE,UAAoB;QACrD,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE;YACjC,IAAI,OAAO,CAAS,IAAI,EAAE,yBAAyB,CAAC,cAAc,CAAC;SACpE,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB;aACjC,GAAG,CAAC,yBAAyB,CAAC,cAAc,CAAC;aAC7C,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,kBAAkB,CAC1B,SAA4B,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAC/D,CAAC;IACJ,CAAC;;AAzBe,wCAAc,GAAG,WAAW,CAAC","file":"expression/function/impl/AttributeAccessorFunction.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArg } from \"../FuncArg.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { ObjectAccessor } from \"../../../context/ObjectAccessor.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class AttributeAccessorFunction extends Func {\n private readonly attributeName;\n static readonly KEY_OBJECT_REF = \"objectRef\";\n private readonly returnType: ExprType;\n\n constructor(attributeName: string, returnType: ExprType) {\n super(attributeName.toUpperCase(), [\n new FuncArg<string>(true, AttributeAccessorFunction.KEY_OBJECT_REF),\n ]);\n this.attributeName = attributeName;\n this.returnType = returnType;\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return this.returnType;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments\n .get(AttributeAccessorFunction.KEY_OBJECT_REF)\n .getValue();\n return new ExprEvalSuccessObj(\n (objectRef as ObjectAccessor).getAttribute(this.attributeName)\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/impl/CompareMagnitudes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IAKzC,YAAY,IAAY,EAAE,GAA6B;QACrD,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAChD,IAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC;SAClD,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;IAChC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,QAAQ,EACjB,8CAA8C,EAC9C,IAAI,EACJ,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,QAAQ,EACjB,+CAA+C,EAC/C,KAAK,EACL,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,aAAa;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAzCuB,0BAAQ,GAAG,MAAM,CAAC;AAClB,2BAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/CompareMagnitudes.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalResult,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { isComparable } from \"../../../value/Comparable.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\n\nexport class CompareMagnitudes extends Func {\n private static readonly KEY_LEFT = \"left\";\n private static readonly KEY_RIGHT = \"right\";\n private readonly comparisonFunction: (arg: number) => boolean;\n\n constructor(name: string, cmp: (arg: number) => boolean) {\n super(name, [\n new FuncArgAny(true, CompareMagnitudes.KEY_LEFT),\n new FuncArgAny(true, CompareMagnitudes.KEY_RIGHT),\n ]);\n this.comparisonFunction = cmp;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(CompareMagnitudes.KEY_LEFT);\n const right = evaluatedArguments.get(CompareMagnitudes.KEY_RIGHT);\n if (!isComparable(left)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION,\n \"Cannot compare: left value is not comparable\",\n left,\n callingExpr.getTextSpan()\n );\n }\n if (!isComparable(right)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION,\n \"Cannot compare: right value is not comparable\",\n right,\n callingExpr.getTextSpan()\n );\n }\n // @ts-ignore\n const cmpValue = this.comparisonFunction(left.compareTo(right));\n return new ExprEvalSuccessObj(BooleanValue.of(cmpValue));\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/function/impl/CompareMagnitudes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG9C,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IAKzC,YAAY,IAAY,EAAE,GAA6B;QACrD,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAChD,IAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC;SAClD,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;IAChC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,QAAQ,EACjB,8CAA8C,EAC9C,IAAI,EACJ,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,QAAQ,EACjB,+CAA+C,EAC/C,KAAK,EACL,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,aAAa;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAzCuB,0BAAQ,GAAG,MAAM,CAAC;AAClB,2BAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/CompareMagnitudes.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalResult,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { isComparable } from \"../../../value/Comparable.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class CompareMagnitudes extends Func {\n private static readonly KEY_LEFT = \"left\";\n private static readonly KEY_RIGHT = \"right\";\n private readonly comparisonFunction: (arg: number) => boolean;\n\n constructor(name: string, cmp: (arg: number) => boolean) {\n super(name, [\n new FuncArgAny(true, CompareMagnitudes.KEY_LEFT),\n new FuncArgAny(true, CompareMagnitudes.KEY_RIGHT),\n ]);\n this.comparisonFunction = cmp;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(CompareMagnitudes.KEY_LEFT);\n const right = evaluatedArguments.get(CompareMagnitudes.KEY_RIGHT);\n if (!isComparable(left)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION,\n \"Cannot compare: left value is not comparable\",\n left,\n callingExpr.getTextSpan()\n );\n }\n if (!isComparable(right)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION,\n \"Cannot compare: right value is not comparable\",\n right,\n callingExpr.getTextSpan()\n );\n }\n // @ts-ignore\n const cmpValue = this.comparisonFunction(left.compareTo(right));\n return new ExprEvalSuccessObj(BooleanValue.of(cmpValue));\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/impl/EQUALS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAM9D,MAAM,OAAO,MAAO,SAAQ,IAAI;IAI9B;QACE,KAAK,CAAC,QAAQ,EAAE;YACd,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;YACrC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AArByB,eAAQ,GAAG,MAAM,CAAC;AAClB,gBAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/EQUALS.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\n\nexport class EQUALS extends Func {\n protected static readonly KEY_LEFT = \"left\";\n protected static readonly KEY_RIGHT = \"right\";\n\n constructor() {\n super(\"EQUALS\", [\n new FuncArgAny(true, EQUALS.KEY_LEFT),\n new FuncArgAny(true, EQUALS.KEY_RIGHT),\n ]);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(EQUALS.KEY_LEFT);\n const right = evaluatedArguments.get(EQUALS.KEY_RIGHT);\n return new ExprEvalSuccessObj(BooleanValue.of(left.equals(right)));\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/function/impl/EQUALS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAK9D,MAAM,OAAO,MAAO,SAAQ,IAAI;IAI9B;QACE,KAAK,CAAC,QAAQ,EAAE;YACd,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;YACrC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AArByB,eAAQ,GAAG,MAAM,CAAC;AAClB,gBAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/EQUALS.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class EQUALS extends Func {\n protected static readonly KEY_LEFT = \"left\";\n protected static readonly KEY_RIGHT = \"right\";\n\n constructor() {\n super(\"EQUALS\", [\n new FuncArgAny(true, EQUALS.KEY_LEFT),\n new FuncArgAny(true, EQUALS.KEY_RIGHT),\n ]);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(EQUALS.KEY_LEFT);\n const right = evaluatedArguments.get(EQUALS.KEY_RIGHT);\n return new ExprEvalSuccessObj(BooleanValue.of(left.equals(right)));\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/impl/FuncBooleanBinary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAQ,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IAKzC,YAAY,IAAY,EAAE,UAAkB;QAC1C,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAC7D,IAAI,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC;SAC/D,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;IACpC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAE9C,CAAC;QACjB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAEhD,CAAC;QACjB,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;;AA3BuB,0BAAQ,GAAG,MAAM,CAAC;AAClB,2BAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/FuncBooleanBinary.js","sourcesContent":["import { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { Func } from \"../Func.js\";\nimport { FuncArgBoolean } from \"../arg/FuncArgBoolean.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { Type, Types } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgLogicalOrBoolean } from \"../arg/FuncArgLogicalOrBoolean\";\nimport { Logical, LogicalValue } from \"../../../value/LogicalValue\";\n\nexport class FuncBooleanBinary extends Func {\n private static readonly KEY_LEFT = \"left\";\n private static readonly KEY_RIGHT = \"right\";\n private readonly methodName: string;\n\n constructor(name: string, methodName: string) {\n super(name, [\n new FuncArgLogicalOrBoolean(true, FuncBooleanBinary.KEY_LEFT),\n new FuncArgLogicalOrBoolean(true, FuncBooleanBinary.KEY_RIGHT),\n ]);\n this.methodName = methodName;\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Types.or(...argumentTypes);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(FuncBooleanBinary.KEY_LEFT) as\n | BooleanValue\n | LogicalValue;\n const right = evaluatedArguments.get(FuncBooleanBinary.KEY_RIGHT) as\n | BooleanValue\n | LogicalValue;\n return new ExprEvalSuccessObj(left[this.methodName].call(left, right));\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/function/impl/FuncBooleanBinary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,MAAM,OAAO,iBAAkB,SAAQ,IAAI;IAKzC,YAAY,IAAY,EAAE,UAAkB;QAC1C,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAC7D,IAAI,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC;SAC/D,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;IACpC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAE9C,CAAC;QACjB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAEhD,CAAC;QACjB,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;;AA3BuB,0BAAQ,GAAG,MAAM,CAAC;AAClB,2BAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/FuncBooleanBinary.js","sourcesContent":["import { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { Types } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgLogicalOrBoolean } from \"../arg/FuncArgLogicalOrBoolean\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\n\nexport class FuncBooleanBinary extends Func {\n private static readonly KEY_LEFT = \"left\";\n private static readonly KEY_RIGHT = \"right\";\n private readonly methodName: string;\n\n constructor(name: string, methodName: string) {\n super(name, [\n new FuncArgLogicalOrBoolean(true, FuncBooleanBinary.KEY_LEFT),\n new FuncArgLogicalOrBoolean(true, FuncBooleanBinary.KEY_RIGHT),\n ]);\n this.methodName = methodName;\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Types.or(...argumentTypes);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const left = evaluatedArguments.get(FuncBooleanBinary.KEY_LEFT) as\n | BooleanValue\n | LogicalValue;\n const right = evaluatedArguments.get(FuncBooleanBinary.KEY_RIGHT) as\n | BooleanValue\n | LogicalValue;\n return new ExprEvalSuccessObj(left[this.methodName].call(left, right));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["expression/function/impl/NOT.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,MAAM,OAAO,GAAI,SAAQ,IAAI;IAG3B;QACE,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAE9B,CAAC;QACjB,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;;AAlBuB,WAAO,GAAG,KAAK,CAAC","file":"expression/function/impl/NOT.js","sourcesContent":["import { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { Func } from \"../Func.js\";\nimport { FuncArgBoolean } from \"../arg/FuncArgBoolean.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgLogicalOrBoolean } from \"../arg/FuncArgLogicalOrBoolean\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\n\nexport class NOT extends Func {\n private static readonly KEY_ARG = \"arg\";\n\n constructor() {\n super(\"NOT\", [new FuncArgLogicalOrBoolean(true, NOT.KEY_ARG)]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return argumentTypes[0];\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const arg = evaluatedArguments.get(NOT.KEY_ARG) as\n | BooleanValue\n | LogicalValue;\n return new ExprEvalSuccessObj(arg.not());\n }\n}\n"]}
1
+ {"version":3,"sources":["expression/function/impl/NOT.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,MAAM,OAAO,GAAI,SAAQ,IAAI;IAG3B;QACE,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAE9B,CAAC;QACjB,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;;AAlBuB,WAAO,GAAG,KAAK,CAAC","file":"expression/function/impl/NOT.js","sourcesContent":["import { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgLogicalOrBoolean } from \"../arg/FuncArgLogicalOrBoolean\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\n\nexport class NOT extends Func {\n private static readonly KEY_ARG = \"arg\";\n\n constructor() {\n super(\"NOT\", [new FuncArgLogicalOrBoolean(true, NOT.KEY_ARG)]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return argumentTypes[0];\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const arg = evaluatedArguments.get(NOT.KEY_ARG) as\n | BooleanValue\n | LogicalValue;\n return new ExprEvalSuccessObj(arg.not());\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import { Func } from "../Func.js";
2
+ import { FuncArgString } from "../arg/FuncArgString.js";
3
+ import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
4
+ import { StringValue } from "../../../value/StringValue.js";
5
+ import { Type, Types } from "../../../type/Types.js";
6
+ import { FuncArgNumeric } from "../arg/FuncArgNumeric.js";
7
+ import { ArrayValue } from "../../../value/ArrayValue.js";
8
+ export class SPLIT extends Func {
9
+ constructor() {
10
+ super("SPLIT", [
11
+ new FuncArgString(true, "input"),
12
+ new FuncArgString(true, "separator"),
13
+ new FuncArgNumeric(false, "limit"),
14
+ ]);
15
+ }
16
+ calculateResult(callingExpr, evaluatedArguments) {
17
+ const inputString = evaluatedArguments.get("input").getValue();
18
+ const separator = evaluatedArguments.get("separator").getValue();
19
+ let result;
20
+ if (!evaluatedArguments.has("limit")) {
21
+ result = inputString.split(separator);
22
+ }
23
+ else {
24
+ let limit = evaluatedArguments.get("limit").getValue();
25
+ result = inputString.split(separator, limit.toNumber());
26
+ }
27
+ return new ExprEvalSuccessObj(ArrayValue.of(result.map((x) => StringValue.of(x))));
28
+ }
29
+ getReturnType(argumentTypes) {
30
+ return Types.array(Type.STRING);
31
+ }
32
+ }
33
+ //# sourceMappingURL=SPLIT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["expression/function/impl/SPLIT.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,KAAM,SAAQ,IAAI;IAC7B;QACE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAChC,IAAI,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;YACpC,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IACS,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,WAAW,GACf,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAC/B,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GACb,kBAAkB,CAAC,GAAG,CAAC,WAAW,CACnC,CAAC,QAAQ,EAAE,CAAC;QACb,IAAI,MAAM,CAAC;QACX,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACpC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SACvC;aAAM;YACL,IAAI,KAAK,GAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,kBAAkB,CAC3B,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,aAAyB;QAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF","file":"expression/function/impl/SPLIT.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Type, Types } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { FuncArgNumeric } from \"../arg/FuncArgNumeric\";\nimport { NumericValue } from \"../../../value/NumericValue\";\nimport { ArrayValue } from \"../../../value/ArrayValue\";\n\nexport class SPLIT extends Func {\n constructor() {\n super(\"SPLIT\", [\n new FuncArgString(true, \"input\"),\n new FuncArgString(true, \"separator\"),\n new FuncArgNumeric(false, \"limit\"),\n ]);\n }\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputString = (\n evaluatedArguments.get(\"input\") as StringValue\n ).getValue();\n const separator = (\n evaluatedArguments.get(\"separator\") as StringValue\n ).getValue();\n let result;\n if (!evaluatedArguments.has(\"limit\")) {\n result = inputString.split(separator);\n } else {\n let limit = (evaluatedArguments.get(\"limit\") as NumericValue).getValue();\n result = inputString.split(separator, limit.toNumber());\n }\n return new ExprEvalSuccessObj(\n ArrayValue.of(result.map((x) => StringValue.of(x)))\n );\n }\n\n public getReturnType(argumentTypes: ExprType[]): ExprType {\n return Types.array(Type.STRING);\n }\n}\n"]}