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.
- package/dist/cjs/error/MissingFunctionArgumentException.js.map +1 -1
- package/dist/cjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
- package/dist/cjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
- package/dist/cjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
- package/dist/cjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
- package/dist/cjs/expression/boolean/NotExpr.js.map +1 -1
- package/dist/cjs/expression/function/Func.js +4 -0
- package/dist/cjs/expression/function/Func.js.map +1 -1
- package/dist/cjs/expression/function/IfcExpressionFunctions.js +10 -0
- package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/cjs/expression/function/arg/FuncArgArray.js +25 -0
- package/dist/cjs/expression/function/arg/FuncArgArray.js.map +1 -0
- package/dist/cjs/expression/function/impl/AT.js +31 -0
- package/dist/cjs/expression/function/impl/AT.js.map +1 -0
- package/dist/cjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -1
- package/dist/cjs/expression/function/impl/CompareMagnitudes.js.map +1 -1
- package/dist/cjs/expression/function/impl/EQUALS.js.map +1 -1
- package/dist/cjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
- package/dist/cjs/expression/function/impl/NOT.js.map +1 -1
- package/dist/cjs/expression/function/impl/SPLIT.js +37 -0
- package/dist/cjs/expression/function/impl/SPLIT.js.map +1 -0
- package/dist/cjs/expression/function/impl/SUBSTRING.js +36 -0
- package/dist/cjs/expression/function/impl/SUBSTRING.js.map +1 -0
- package/dist/cjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
- package/dist/cjs/expression/function/impl/TOLOGICAL.js.map +1 -1
- package/dist/cjs/expression/function/impl/TOLOWERCASE.js +23 -0
- package/dist/cjs/expression/function/impl/TOLOWERCASE.js.map +1 -0
- package/dist/cjs/expression/function/impl/TONUMERIC.js.map +1 -1
- package/dist/cjs/expression/function/impl/TOUPPERCASE.js +23 -0
- package/dist/cjs/expression/function/impl/TOUPPERCASE.js.map +1 -0
- package/dist/cjs/util/TextSpan.js.map +1 -1
- package/dist/expression/function/arg/FuncArgArray.d.ts +11 -0
- package/dist/expression/function/impl/AT.d.ts +10 -0
- package/dist/expression/function/impl/SPLIT.d.ts +10 -0
- package/dist/expression/function/impl/SUBSTRING.d.ts +10 -0
- package/dist/expression/function/impl/TOLOWERCASE.d.ts +10 -0
- package/dist/expression/function/impl/TOUPPERCASE.d.ts +10 -0
- package/dist/mjs/error/MissingFunctionArgumentException.js.map +1 -1
- package/dist/mjs/error/mapper/MissingFunctionArgumentExceptionMapper.js.map +1 -1
- package/dist/mjs/error/mapper/SpuriousFunctionArgumentExceptionMapper.js.map +1 -1
- package/dist/mjs/expression/boolean/BinaryBooleanOpExpr.js.map +1 -1
- package/dist/mjs/expression/boolean/LogicalLiteralExpr.js.map +1 -1
- package/dist/mjs/expression/boolean/NotExpr.js.map +1 -1
- package/dist/mjs/expression/function/Func.js +4 -0
- package/dist/mjs/expression/function/Func.js.map +1 -1
- package/dist/mjs/expression/function/IfcExpressionFunctions.js +10 -0
- package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/mjs/expression/function/arg/FuncArgArray.js +21 -0
- package/dist/mjs/expression/function/arg/FuncArgArray.js.map +1 -0
- package/dist/mjs/expression/function/impl/AT.js +27 -0
- package/dist/mjs/expression/function/impl/AT.js.map +1 -0
- package/dist/mjs/expression/function/impl/AttributeAccessorFunction.js.map +1 -1
- package/dist/mjs/expression/function/impl/CompareMagnitudes.js.map +1 -1
- package/dist/mjs/expression/function/impl/EQUALS.js.map +1 -1
- package/dist/mjs/expression/function/impl/FuncBooleanBinary.js.map +1 -1
- package/dist/mjs/expression/function/impl/NOT.js.map +1 -1
- package/dist/mjs/expression/function/impl/SPLIT.js +33 -0
- package/dist/mjs/expression/function/impl/SPLIT.js.map +1 -0
- package/dist/mjs/expression/function/impl/SUBSTRING.js +32 -0
- package/dist/mjs/expression/function/impl/SUBSTRING.js.map +1 -0
- package/dist/mjs/expression/function/impl/TOBOOLEAN.js.map +1 -1
- package/dist/mjs/expression/function/impl/TOLOGICAL.js.map +1 -1
- package/dist/mjs/expression/function/impl/TOLOWERCASE.js +19 -0
- package/dist/mjs/expression/function/impl/TOLOWERCASE.js.map +1 -0
- package/dist/mjs/expression/function/impl/TONUMERIC.js.map +1 -1
- package/dist/mjs/expression/function/impl/TOUPPERCASE.js +19 -0
- package/dist/mjs/expression/function/impl/TOUPPERCASE.js.map +1 -0
- package/dist/mjs/util/TextSpan.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/MissingFunctionArgumentException.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/error/MissingFunctionArgumentException.ts"],"names":[],"mappings":";;;AAAA,iFAA2E;AAC3E,yEAA0D;AAE1D,MAAa,gCAAiC,SAAQ,wDAAyB;IAC7E,YACE,YAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,GAAG,EACH,OAAgB;QAEhB,KAAK,CACH,IAAA,iCAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAC1D,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAhBD,4EAgBC","file":"error/MissingFunctionArgumentException.js","sourcesContent":["import { FunctionArgumentException } from \"./FunctionArgumentException\";\nimport { isNullish } from \"../util/IfcExpressionUtils\";\n\nexport class MissingFunctionArgumentException extends FunctionArgumentException {\n constructor(\n functionName: string,\n argumentName: string,\n index: number,\n ctx,\n message?: string\n ) {\n super(\n isNullish(message) ? \"Required argument missing\" : message,\n functionName,\n argumentName,\n index,\n ctx\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/mapper/MissingFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"sources":["../../src/error/mapper/MissingFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,0EAG4C;AAE5C,wDAAkD;AAElD,MAAa,sCAAsC;IAGjD,YAAY,CAAC,SAA2C;QACtD,OAAO,IAAI,2DAAuC,CAChD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,sBAAQ,CAAC,EAAE,CACT,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,GAAG,CAAC,EACxB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,QAAQ,GAAG,CAAC,CACvB,CACF,CAAC;IACJ,CAAC;CACF;AAjBD,wFAiBC","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":["../../src/error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"sources":["../../src/error/mapper/SpuriousFunctionArgumentExceptionMapper.ts"],"names":[],"mappings":";;;AACA,0EAG4C;AAC5C,wDAAkD;AAGlD,MAAa,uCAAuC;IAGlD,YAAY,CAAC,SAA4C;QACvD,OAAO,IAAI,4DAAwC,CACjD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,KAAK,EACf,sBAAQ,CAAC,EAAE,CACT,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,GAAG,CAAC,EACxB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,QAAQ,GAAG,CAAC,CACvB,CACF,CAAC;IACJ,CAAC;CACF;AAjBD,0FAiBC","file":"error/mapper/SpuriousFunctionArgumentExceptionMapper.js","sourcesContent":["import { ExceptionToExprEvalErrorMapper } from \"../ExceptionToExprEvalErrorMapper.js\";\nimport {\n ExprEvalError,\n ExprEvalSpuriousFunctionArgumentErrorObj,\n} from \"../../expression/ExprEvalResult.js\";\nimport { TextSpan } from \"../../util/TextSpan.js\";\nimport { SpuriousFunctionArgumentException } from \"../SpuriousFunctionArgumentException\";\n\nexport class SpuriousFunctionArgumentExceptionMapper\n implements ExceptionToExprEvalErrorMapper<SpuriousFunctionArgumentException>\n{\n mapException(exception: SpuriousFunctionArgumentException): ExprEvalError {\n return new ExprEvalSpuriousFunctionArgumentErrorObj(\n exception.message,\n exception.functionName,\n exception.argumentName,\n exception.index,\n TextSpan.of(\n exception.fromLine,\n exception.fromColumn + 1,\n exception.toLine,\n exception.toColumn + 1\n )\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAKpC,kDAAkD;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/boolean/BinaryBooleanOpExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAKpC,kDAAkD;AAIlD,MAAsB,mBAAoB,SAAQ,gBAIjD;IAGC,YACE,IAAc,EACd,MAAc,EACd,IAAuC,EACvC,KAAwC;QAExC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,WAAwC,EACxC,YAAyC;QAEzC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,IACE,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,gBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EACrC;YACA,OAAO,eAAI,CAAC,OAAO,CAAC;SACrB;QACD,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAnCD,kDAmCC","file":"expression/boolean/BinaryBooleanOpExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr2 } from \"../Expr2.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Expr } from \"../Expr.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { Type, Types } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\n\nexport abstract class BinaryBooleanOpExpr extends Expr2<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n private readonly method: string;\n\n constructor(\n kind: ExprKind,\n method: string,\n left: Expr<BooleanValue | LogicalValue>,\n right: Expr<BooleanValue | LogicalValue>\n ) {\n super(kind, left, right);\n this.method = method;\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n leftOperand: BooleanValue | LogicalValue,\n rightOperand: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return leftOperand[this.method].call(leftOperand, rightOperand);\n }\n\n getType(): ExprType {\n if (\n Types.isLogical(this.left.getType()) ||\n Types.isLogical(this.right.getType())\n ) {\n return Type.LOGICAL;\n }\n return Type.BOOLEAN;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":";;;AAAA,sDAAgD;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/boolean/LogicalLiteralExpr.ts"],"names":[],"mappings":";;;AAAA,sDAAgD;AAChD,gDAA0C;AAG1C,kDAA2C;AAG3C,iEAAoE;AAEpE,MAAa,kBAAmB,SAAQ,4BAAkC;IACxE,YAAY,KAAc;QACxB,KAAK,CAAC,sBAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAES,eAAe,CACvB,GAAyB;QAEzB,OAAO,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,8BAAY,CAAC,aAAa;gBAC7B,OAAO,CAAC,YAAY,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,IAAI;gBACP,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACpE,CAAC;SACL;IACH,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAhCD,gDAgCC","file":"expression/boolean/LogicalLiteralExpr.js","sourcesContent":["import { LiteralExpr } from \"../LiteralExpr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { Type } from \"../../type/Types.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { Logical, LogicalValue } from \"../../value/LogicalValue\";\n\nexport class LogicalLiteralExpr extends LiteralExpr<Logical, LogicalValue> {\n constructor(value: Logical) {\n super(ExprKind.LOGICAL_LITERAL, value);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext\n ): ExprEvalError | LogicalValue {\n return LogicalValue.of(this.value);\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n switch (this.value) {\n case LogicalValue.UNKNOWN_VALUE:\n builder.appendString(LogicalValue.UNKNOWN_VALUE);\n break;\n case true:\n builder.appendString(\"TRUE\");\n break;\n case false:\n builder.appendString(\"FALSE\");\n break;\n default:\n throw new Error(\n \"Cannot build exprString for logical value \" + JSON.stringify(this)\n );\n }\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/boolean/NotExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAEpC,gDAA0C;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/boolean/NotExpr.ts"],"names":[],"mappings":";;;AACA,0CAAoC;AAEpC,gDAA0C;AAO1C,MAAa,OAAQ,SAAQ,gBAG5B;IACC,YAAY,GAAsC;QAChD,KAAK,CAAC,sBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAES,eAAe,CACvB,GAAyB,EACzB,QAA0B,EAC1B,mBAAgD;QAEhD,OAAO,mBAAmB,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAES,eAAe,CAAC,OAA0B;QAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF;AAvBD,0BAuBC","file":"expression/boolean/NotExpr.js","sourcesContent":["import { BooleanValue } from \"../../value/BooleanValue.js\";\nimport { Expr1 } from \"../Expr1.js\";\nimport { Expr } from \"../Expr.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { ExprEvalError } from \"../ExprEvalResult.js\";\nimport { IfcExpressionContext } from \"../../context/IfcExpressionContext.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ExprStringBuilder } from \"../ExprStringBuilder.js\";\nimport { LogicalValue } from \"../../value/LogicalValue\";\n\nexport class NotExpr extends Expr1<\n BooleanValue | LogicalValue,\n BooleanValue | LogicalValue\n> {\n constructor(sub: Expr<BooleanValue | LogicalValue>) {\n super(ExprKind.NOT, sub);\n }\n\n protected calculateResult(\n ctx: IfcExpressionContext,\n localCtx: Map<string, any>,\n subExpressionResult: BooleanValue | LogicalValue\n ): ExprEvalError | BooleanValue | LogicalValue {\n return subExpressionResult.not();\n }\n\n protected buildExprString(builder: ExprStringBuilder) {\n builder.appendString(\"!\").appendExpr(this.sub);\n }\n\n getType(): ExprType {\n return this.sub.getType();\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ const ExprKind_js_1 = require("../ExprKind.js");
|
|
|
8
8
|
const Types_js_1 = require("../../type/Types.js");
|
|
9
9
|
const MissingFunctionArgumentException_js_1 = require("../../error/MissingFunctionArgumentException.js");
|
|
10
10
|
const WrongFunctionArgumentTypeException_js_1 = require("../../error/WrongFunctionArgumentTypeException.js");
|
|
11
|
+
const SpuriousFunctionArgumentException_js_1 = require("../../error/SpuriousFunctionArgumentException.js");
|
|
11
12
|
class Func {
|
|
12
13
|
constructor(name, args) {
|
|
13
14
|
this.name = name;
|
|
@@ -24,6 +25,9 @@ class Func {
|
|
|
24
25
|
checkArgumentTypes(providedArgumentTypes, ctx) {
|
|
25
26
|
const numProvided = providedArgumentTypes.length;
|
|
26
27
|
if (!(0, IfcExpressionUtils_js_1.isNullish)(this.formalArguments)) {
|
|
28
|
+
if (numProvided > this.formalArguments.length) {
|
|
29
|
+
throw new SpuriousFunctionArgumentException_js_1.SpuriousFunctionArgumentException(this.name, "[unexpected argument]", this.formalArguments.length, ctx, `Function expects (at most) ${this.formalArguments.length} arguments`);
|
|
30
|
+
}
|
|
27
31
|
for (let i = 0; i < this.formalArguments.length; i++) {
|
|
28
32
|
const currentArg = this.formalArguments[i];
|
|
29
33
|
if (numProvided > i) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/Func.ts"],"names":[],"mappings":"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","file":"expression/function/Func.js","sourcesContent":["import { ExpressionValue } from \"../../value/ExpressionValue.js\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { FuncArg } from \"./FuncArg.js\";\nimport {\n ExprEvalError,\n 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":["../../src/expression/function/Func.ts"],"names":[],"mappings":"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","file":"expression/function/Func.js","sourcesContent":["import { ExpressionValue } from \"../../value/ExpressionValue.js\";\nimport { IfcExpressionFunctionConfigException } from \"../../error/IfcExpressionFunctionConfigException.js\";\nimport { isNullish } from \"../../util/IfcExpressionUtils.js\";\nimport { FuncArg } from \"./FuncArg.js\";\nimport {\n ExprEvalError,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"../ExprEvalResult.js\";\nimport { ExprKind } from \"../ExprKind.js\";\nimport { Types } from \"../../type/Types.js\";\nimport { MissingFunctionArgumentException } from \"../../error/MissingFunctionArgumentException.js\";\nimport { WrongFunctionArgumentTypeException } from \"../../error/WrongFunctionArgumentTypeException.js\";\nimport { ExprType } from \"../../type/ExprType.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { FunctionExpr } from \"./FunctionExpr.js\";\nimport { Expr } from \"../Expr\";\nimport { SpuriousFunctionArgumentException } from \"../../error/SpuriousFunctionArgumentException\";\n\nexport abstract class Func {\n protected name: string;\n protected formalArguments: Array<FuncArg<unknown>>;\n\n protected constructor(name: string, args: Array<FuncArg<unknown>>) {\n this.name = name;\n if (isNullish(this.name)) {\n throw new IfcExpressionFunctionConfigException(\n \"Function must have a name\"\n );\n }\n this.formalArguments = args;\n this.checkArgs(args);\n }\n\n public abstract getReturnType(argumentTypes: Array<ExprType>): ExprType;\n\n public checkArgumentsAndGetReturnType(\n argumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): ExprType {\n this.checkArgumentTypes(argumentTypes, ctx);\n return this.getReturnType(argumentTypes.map((t) => t[1]));\n }\n\n protected checkArgumentTypes(\n providedArgumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx\n ): void {\n const numProvided = providedArgumentTypes.length;\n if (!isNullish(this.formalArguments)) {\n if (numProvided > this.formalArguments.length) {\n throw new SpuriousFunctionArgumentException(\n this.name,\n \"[unexpected argument]\",\n this.formalArguments.length,\n ctx,\n `Function expects (at most) ${this.formalArguments.length} arguments`\n );\n }\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n Types.requireWeakIsAssignableFrom(\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n () =>\n new WrongFunctionArgumentTypeException(\n this.name,\n this.formalArguments[i].name,\n this.formalArguments[i].getType(),\n providedArgumentTypes[i][1],\n i,\n providedArgumentTypes[i][0]\n )\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n //should be fine.\n }\n if (currentArg.required) {\n throw new MissingFunctionArgumentException(\n this.name,\n currentArg.name,\n i,\n ctx\n );\n }\n }\n }\n }\n }\n\n public getName(): string {\n return this.name;\n }\n\n public evaluate(\n callingExpr: FunctionExpr,\n funcArgs: Array<ExprEvalResult<ExpressionValue>>\n ): ExprEvalResult<ExpressionValue> {\n const evaluatedArguments = this.getArgumentValues(callingExpr, funcArgs);\n if (isExprEvalError(evaluatedArguments)) {\n return evaluatedArguments;\n }\n const argumentsReadyForUse = new Map<string, ExpressionValue>();\n for (const [argName, argValue] of evaluatedArguments.entries()) {\n if (isExprEvalError(argValue)) {\n return argValue;\n }\n argumentsReadyForUse.set(argName, argValue.result);\n }\n return this.calculateResult(callingExpr, argumentsReadyForUse);\n }\n\n /**\n * Subclasses must provide the funcation evaluation code here.\n * @param evaluatedArguments\n * @protected\n */\n protected abstract calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue>;\n\n /**\n * Override to transform individual arguments if needed. After this step, if any of the ExprEvalResult objects in the\n * returned array is an ExprEvalError, the function evaluation fails.\n * @param evaluatedArguments\n * @protected\n */\n protected transformArguments(\n callingExpr: Expr<any>,\n evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>\n ): void {}\n\n /**\n * Gets the argument values from the list of provided arguments in the form of 'name' -> ExprEvalResult (which may contain errors).\n * Generates an error if a required value is missing.\n * @param provided\n * @protected\n */\n protected getArgumentValues(\n callingExpr: FunctionExpr,\n provided: Array<ExprEvalResult<ExpressionValue>>\n ): Map<string, ExprEvalResult<ExpressionValue>> | ExprEvalError {\n const result = new Map<string, ExprEvalResult<ExpressionValue>>();\n const numProvided = provided.length;\n if (!isNullish(this.formalArguments)) {\n for (let i = 0; i < this.formalArguments.length; i++) {\n const currentArg: FuncArg<unknown> = this.formalArguments[i];\n if (numProvided > i) {\n result.set(\n currentArg.name,\n currentArg.transformValue(callingExpr, provided[i])\n );\n } else {\n if (currentArg.hasDefaultValue()) {\n result.set(\n currentArg.name,\n new ExprEvalSuccessObj(currentArg.defaultValue as ExpressionValue)\n );\n }\n if (currentArg.required) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Required argument ${currentArg.name}, expected at position ${i} (starting at 0), is missing`,\n this.name,\n currentArg.name,\n i,\n callingExpr.getTextSpan()\n );\n }\n }\n }\n }\n this.transformArguments(callingExpr, result);\n return result;\n }\n\n private checkArgs(args: Array<FuncArg<unknown>>): void {\n if (!Array.isArray(this.formalArguments)) {\n throw new IfcExpressionFunctionConfigException(\n \"Formal function arguments is not an array\"\n );\n }\n let optionalArgsReached: boolean = false;\n const names = new Set<string>();\n for (let i = 0; i < this.formalArguments.length; i++) {\n if (names.has(this.formalArguments[i].name)) {\n throw new IfcExpressionFunctionConfigException(\n `Duplicate argument name '${this.formalArguments[i].name}'.`\n );\n }\n if (optionalArgsReached) {\n if (this.formalArguments[i].required) {\n throw new IfcExpressionFunctionConfigException(\n `Optional arguments must follow required ones. Argument '${this.formalArguments[i].name}' is required but follows an optional one`\n );\n }\n } else {\n if (!this.formalArguments[i].required) {\n optionalArgsReached = true;\n }\n }\n }\n }\n}\n"]}
|
|
@@ -23,6 +23,11 @@ const TONUMERIC_js_1 = require("./impl/TONUMERIC.js");
|
|
|
23
23
|
const IfcExpressionFunctionConfigException_js_1 = require("../../error/IfcExpressionFunctionConfigException.js");
|
|
24
24
|
const TOBOOLEAN_js_1 = require("./impl/TOBOOLEAN.js");
|
|
25
25
|
const TOLOGICAL_js_1 = require("./impl/TOLOGICAL.js");
|
|
26
|
+
const TOLOWERCASE_js_1 = require("./impl/TOLOWERCASE.js");
|
|
27
|
+
const TOUPPERCASE_js_1 = require("./impl/TOUPPERCASE.js");
|
|
28
|
+
const SUBSTRING_js_1 = require("./impl/SUBSTRING.js");
|
|
29
|
+
const SPLIT_js_1 = require("./impl/SPLIT.js");
|
|
30
|
+
const AT_js_1 = require("./impl/AT.js");
|
|
26
31
|
const builtinFunctions = new Map();
|
|
27
32
|
function registerOrDie(fnKey, func) {
|
|
28
33
|
if (builtinFunctions.has(fnKey)) {
|
|
@@ -59,6 +64,7 @@ class IfcExpressionFunctions {
|
|
|
59
64
|
exports.IfcExpressionFunctions = IfcExpressionFunctions;
|
|
60
65
|
registerFunc(new MAP_js_1.MAP());
|
|
61
66
|
registerFunc(new CHOOSE_js_1.CHOOSE());
|
|
67
|
+
registerFunc(new AT_js_1.AT());
|
|
62
68
|
registerFunc(new IF_js_1.IF());
|
|
63
69
|
registerFunc(new ROUND_js_1.ROUND());
|
|
64
70
|
registerFunc(new AttributeAccessorFunction_js_1.AttributeAccessorFunction("name", Types_js_1.Type.STRING));
|
|
@@ -74,6 +80,10 @@ registerFunc(new TOSTRING_js_1.TOSTRING());
|
|
|
74
80
|
registerFunc(new TONUMERIC_js_1.TONUMERIC(), "TONUMBER");
|
|
75
81
|
registerFunc(new TOBOOLEAN_js_1.TOBOOLEAN());
|
|
76
82
|
registerFunc(new TOLOGICAL_js_1.TOLOGICAL(), "NOTFOUNDASUNKNOWN");
|
|
83
|
+
registerFunc(new TOLOWERCASE_js_1.TOLOWERCASE());
|
|
84
|
+
registerFunc(new TOUPPERCASE_js_1.TOUPPERCASE());
|
|
85
|
+
registerFunc(new SUBSTRING_js_1.SUBSTRING());
|
|
86
|
+
registerFunc(new SPLIT_js_1.SPLIT());
|
|
77
87
|
registerFunc(new EXISTS_js_1.EXISTS());
|
|
78
88
|
registerFunc(new FuncBooleanBinary_js_1.FuncBooleanBinary("AND", "and"));
|
|
79
89
|
registerFunc(new FuncBooleanBinary_js_1.FuncBooleanBinary("OR", "or"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":";;;AACA,4EAA6D;AAC7D,0CAAoC;AACpC,8CAAwC;AACxC,sFAAgF;AAChF,0DAAoD;AACpD,oDAA8C;AAC9C,4CAAsC;AACtC,sEAAgE;AAChE,0CAAoC;AACpC,gDAA0C;AAC1C,gEAA0D;AAC1D,kDAAkD;AAClD,oDAA8C;AAC9C,gDAA0C;AAC1C,gDAA0C;AAC1C,sEAAgE;AAChE,gEAA0D;AAC1D,wCAAkC;AAClC,sDAAgD;AAChD,iHAA2G;AAC3G,sDAAgD;AAChD,sDAAgD;
|
|
1
|
+
{"version":3,"sources":["../../src/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,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FuncArgArray = void 0;
|
|
4
|
+
const FuncArgBase_js_1 = require("./FuncArgBase.js");
|
|
5
|
+
const Types_js_1 = require("../../../type/Types.js");
|
|
6
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
7
|
+
const ExprKind_js_1 = require("../../ExprKind.js");
|
|
8
|
+
class FuncArgArray extends FuncArgBase_js_1.FuncArgBase {
|
|
9
|
+
constructor(required, name, defaultValue) {
|
|
10
|
+
super(required, name, defaultValue);
|
|
11
|
+
}
|
|
12
|
+
getType() {
|
|
13
|
+
return Types_js_1.Types.array(Types_js_1.Type.ANY);
|
|
14
|
+
}
|
|
15
|
+
transformForTypeCheck(callingExpr, invocationValue) {
|
|
16
|
+
const result = invocationValue.result;
|
|
17
|
+
const value = result.getValue();
|
|
18
|
+
if (Array.isArray(value)) {
|
|
19
|
+
return invocationValue;
|
|
20
|
+
}
|
|
21
|
+
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} must be an array, but was ${JSON.stringify(value)}`, value, callingExpr.getTextSpan());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.FuncArgArray = FuncArgArray;
|
|
25
|
+
//# sourceMappingURL=FuncArgArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/arg/FuncArgArray.ts"],"names":[],"mappings":";;;AAAA,qDAA+C;AAG/C,qDAAqD;AAErD,+DAIiC;AAEjC,mDAA6C;AAE7C,MAAa,YAAa,SAAQ,4BAAuB;IACvD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAyB;QACpE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,gBAAK,CAAC,KAAK,CAAC,eAAI,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,wCAAoB,CAC7B,sBAAQ,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;AA3BD,oCA2BC","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,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AT = void 0;
|
|
4
|
+
const Func_js_1 = require("../Func.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
const Types_js_1 = require("../../../type/Types.js");
|
|
7
|
+
const FuncArgNumeric_js_1 = require("../arg/FuncArgNumeric.js");
|
|
8
|
+
const FuncArgArray_js_1 = require("../arg/FuncArgArray.js");
|
|
9
|
+
const TupleType_js_1 = require("../../../type/TupleType.js");
|
|
10
|
+
class AT extends Func_js_1.Func {
|
|
11
|
+
constructor() {
|
|
12
|
+
super("AT", [
|
|
13
|
+
new FuncArgArray_js_1.FuncArgArray(true, "input"),
|
|
14
|
+
new FuncArgNumeric_js_1.FuncArgNumeric(true, "index"),
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
17
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
18
|
+
const inputArray = evaluatedArguments.get("input").getValue();
|
|
19
|
+
const index = evaluatedArguments.get("index").getValue();
|
|
20
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(inputArray.at(index.toNumber()));
|
|
21
|
+
}
|
|
22
|
+
getReturnType(argumentTypes) {
|
|
23
|
+
const arrType = argumentTypes[0];
|
|
24
|
+
if (arrType instanceof TupleType_js_1.TupleType) {
|
|
25
|
+
return Types_js_1.Types.or(...arrType.getTypes());
|
|
26
|
+
}
|
|
27
|
+
return arrType.getElementType();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.AT = AT;
|
|
31
|
+
//# sourceMappingURL=AT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/AT.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC,+DAA6E;AAE7E,qDAA+C;AAE/C,gEAA0D;AAE1D,4DAAsD;AAEtD,6DAAuD;AAGvD,MAAa,EAAG,SAAQ,cAAI;IAC1B;QACE,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,8BAAY,CAAC,IAAI,EAAE,OAAO,CAAC;YAC/B,IAAI,kCAAc,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,sCAAkB,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,wBAAS,EAAE;YAChC,OAAO,gBAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxC;QACD,OAAQ,OAAqB,CAAC,cAAc,EAAE,CAAC;IACjD,CAAC;CACF;AA3BD,gBA2BC","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":["../../src/expression/function/impl/AttributeAccessorFunction.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8CAAwC;AAExC,+DAA6E;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/AttributeAccessorFunction.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8CAAwC;AAExC,+DAA6E;AAK7E,MAAa,yBAA0B,SAAQ,cAAI;IAKjD,YAAY,aAAqB,EAAE,UAAoB;QACrD,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE;YACjC,IAAI,oBAAO,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,sCAAkB,CAC1B,SAA4B,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAC/D,CAAC;IACJ,CAAC;;AA3BH,8DA4BC;AA1BiB,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":["../../src/expression/function/impl/CompareMagnitudes.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAIiC;AACjC,gEAA4D;AAC5D,mDAA6C;AAC7C,oEAA8D;AAE9D,qDAA8C;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/CompareMagnitudes.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAIiC;AACjC,gEAA4D;AAC5D,mDAA6C;AAC7C,oEAA8D;AAE9D,qDAA8C;AAG9C,MAAa,iBAAkB,SAAQ,cAAI;IAKzC,YAAY,IAAY,EAAE,GAA6B;QACrD,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,0BAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAChD,IAAI,0BAAU,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,IAAA,4BAAY,EAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,QAAQ,EACjB,8CAA8C,EAC9C,IAAI,EACJ,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,IAAI,CAAC,IAAA,4BAAY,EAAC,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,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,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AA1CH,8CA2CC;AA1CyB,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":["../../src/expression/function/impl/EQUALS.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAClD,qDAA8C;AAC9C,+DAA6E;AAC7E,oEAA8D;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/EQUALS.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAClD,qDAA8C;AAC9C,+DAA6E;AAC7E,oEAA8D;AAK9D,MAAa,MAAO,SAAQ,cAAI;IAI9B;QACE,KAAK,CAAC,QAAQ,EAAE;YACd,IAAI,0BAAU,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;YACrC,IAAI,0BAAU,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,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAtBH,wBAuBC;AAtB2B,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":["../../src/expression/function/impl/FuncBooleanBinary.ts"],"names":[],"mappings":";;;AACA,wCAAkC;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/FuncBooleanBinary.ts"],"names":[],"mappings":";;;AACA,wCAAkC;AAElC,+DAA6E;AAC7E,qDAA+C;AAG/C,kFAA4E;AAG5E,MAAa,iBAAkB,SAAQ,cAAI;IAKzC,YAAY,IAAY,EAAE,UAAkB;QAC1C,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,oDAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAC7D,IAAI,oDAAuB,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,gBAAK,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,sCAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;;AA5BH,8CA6BC;AA5ByB,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":["../../src/expression/function/impl/NOT.ts"],"names":[],"mappings":";;;AACA,wCAAkC;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/NOT.ts"],"names":[],"mappings":";;;AACA,wCAAkC;AAElC,+DAA6E;AAG7E,kFAA4E;AAG5E,MAAa,GAAI,SAAQ,cAAI;IAG3B;QACE,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,oDAAuB,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,sCAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;;AAnBH,kBAoBC;AAnByB,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,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SPLIT = 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
|
+
const FuncArgNumeric_js_1 = require("../arg/FuncArgNumeric.js");
|
|
10
|
+
const ArrayValue_js_1 = require("../../../value/ArrayValue.js");
|
|
11
|
+
class SPLIT extends Func_js_1.Func {
|
|
12
|
+
constructor() {
|
|
13
|
+
super("SPLIT", [
|
|
14
|
+
new FuncArgString_js_1.FuncArgString(true, "input"),
|
|
15
|
+
new FuncArgString_js_1.FuncArgString(true, "separator"),
|
|
16
|
+
new FuncArgNumeric_js_1.FuncArgNumeric(false, "limit"),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
20
|
+
const inputString = evaluatedArguments.get("input").getValue();
|
|
21
|
+
const separator = evaluatedArguments.get("separator").getValue();
|
|
22
|
+
let result;
|
|
23
|
+
if (!evaluatedArguments.has("limit")) {
|
|
24
|
+
result = inputString.split(separator);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
let limit = evaluatedArguments.get("limit").getValue();
|
|
28
|
+
result = inputString.split(separator, limit.toNumber());
|
|
29
|
+
}
|
|
30
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(ArrayValue_js_1.ArrayValue.of(result.map((x) => StringValue_js_1.StringValue.of(x))));
|
|
31
|
+
}
|
|
32
|
+
getReturnType(argumentTypes) {
|
|
33
|
+
return Types_js_1.Types.array(Types_js_1.Type.STRING);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.SPLIT = SPLIT;
|
|
37
|
+
//# sourceMappingURL=SPLIT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/SPLIT.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8DAAwD;AAExD,+DAA6E;AAC7E,kEAA4D;AAE5D,qDAAqD;AAErD,gEAA0D;AAE1D,gEAA0D;AAE1D,MAAa,KAAM,SAAQ,cAAI;IAC7B;QACE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,gCAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAChC,IAAI,gCAAa,CAAC,IAAI,EAAE,WAAW,CAAC;YACpC,IAAI,kCAAc,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,sCAAkB,CAC3B,0BAAU,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,4BAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,aAAyB;QAC5C,OAAO,gBAAK,CAAC,KAAK,CAAC,eAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AAjCD,sBAiCC","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"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUBSTRING = 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
|
+
const FuncArgNumeric_js_1 = require("../arg/FuncArgNumeric.js");
|
|
10
|
+
class SUBSTRING extends Func_js_1.Func {
|
|
11
|
+
constructor() {
|
|
12
|
+
super("SUBSTRING", [
|
|
13
|
+
new FuncArgString_js_1.FuncArgString(true, "input"),
|
|
14
|
+
new FuncArgNumeric_js_1.FuncArgNumeric(true, "fromIncl"),
|
|
15
|
+
new FuncArgNumeric_js_1.FuncArgNumeric(false, "toExcl"),
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
19
|
+
const inputString = evaluatedArguments.get("input").getValue();
|
|
20
|
+
const fromIncl = evaluatedArguments.get("fromIncl").getValue();
|
|
21
|
+
let result;
|
|
22
|
+
if (evaluatedArguments.has("toExcl")) {
|
|
23
|
+
const toExcl = evaluatedArguments.get("toExcl").getValue();
|
|
24
|
+
result = inputString.substring(fromIncl.toNumber(), toExcl.toNumber());
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
result = inputString.substring(fromIncl.toNumber());
|
|
28
|
+
}
|
|
29
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(StringValue_js_1.StringValue.of(result));
|
|
30
|
+
}
|
|
31
|
+
getReturnType(argumentTypes) {
|
|
32
|
+
return Types_js_1.Type.STRING;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.SUBSTRING = SUBSTRING;
|
|
36
|
+
//# sourceMappingURL=SUBSTRING.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/SUBSTRING.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8DAAwD;AAExD,+DAA6E;AAC7E,kEAA4D;AAE5D,qDAA8C;AAE9C,gEAA0D;AAG1D,MAAa,SAAU,SAAQ,cAAI;IACjC;QACE,KAAK,CAAC,WAAW,EAAE;YACjB,IAAI,gCAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAChC,IAAI,kCAAc,CAAC,IAAI,EAAE,UAAU,CAAC;YACpC,IAAI,kCAAc,CAAC,KAAK,EAAE,QAAQ,CAAC;SACpC,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,QAAQ,GACZ,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAClC,CAAC,QAAQ,EAAE,CAAC;QACb,IAAI,MAAM,CAAC;QACX,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpC,MAAM,MAAM,GACV,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAChC,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxE;aAAM;YACL,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrD;QACD,OAAO,IAAI,sCAAkB,CAAC,4BAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,aAAa,CAAC,aAAyB;QAC5C,OAAO,eAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAjCD,8BAiCC","file":"expression/function/impl/SUBSTRING.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\";\nimport { FuncArgNumeric } from \"../arg/FuncArgNumeric\";\nimport { NumericValue } from \"../../../value/NumericValue\";\n\nexport class SUBSTRING extends Func {\n constructor() {\n super(\"SUBSTRING\", [\n new FuncArgString(true, \"input\"),\n new FuncArgNumeric(true, \"fromIncl\"),\n new FuncArgNumeric(false, \"toExcl\"),\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 fromIncl = (\n evaluatedArguments.get(\"fromIncl\") as NumericValue\n ).getValue();\n let result;\n if (evaluatedArguments.has(\"toExcl\")) {\n const toExcl = (\n evaluatedArguments.get(\"toExcl\") as NumericValue\n ).getValue();\n result = inputString.substring(fromIncl.toNumber(), toExcl.toNumber());\n } else {\n result = inputString.substring(fromIncl.toNumber());\n }\n return new ExprEvalSuccessObj(StringValue.of(result));\n }\n\n public getReturnType(argumentTypes: ExprType[]): ExprType {\n return Type.STRING;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/TOBOOLEAN.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TOBOOLEAN.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAKiC;AACjC,kEAA4D;AAE5D,qDAA8C;AAE9C,oEAA8D;AAE9D,oEAA8D;AAC9D,oEAA8D;AAC9D,wEAAkE;AAElE,MAAa,SAAU,SAAQ,cAAI;IAEjC;QACE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,0BAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI;YACF,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,sDAAkC,CAC3C,WAAW,CAAC,OAAO,EAAE,EACrB,kCAAc,CAAC,KAAK,EACpB,kBAAkB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAC3D,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;IACH,CAAC;IAEO,OAAO,CAAC,KAAsB;QACpC,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACzB;QACD,IAAI,KAAK,YAAY,4BAAW,IAAI,KAAK,YAAY,kCAAc,EAAE;YACnE,QAAQ,KAAK,CAAC,QAAQ,EAAE,EAAE;gBACxB,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC;gBACZ,KAAK,GAAG;oBACN,OAAO,IAAI,CAAC;gBACd,KAAK,OAAO,CAAC;gBACb,KAAK,OAAO,CAAC;gBACb,KAAK,GAAG;oBACN,OAAO,KAAK,CAAC;gBACf;oBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aAC/D;SACF;QACD,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,MAAM,GAAG,GAAY,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE;gBAChB,OAAO,KAAK,CAAC;aACd;YACD,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC;aACb;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,OAAO,KAAK,CAAC;aACd;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,MAAM,IAAI,KAAK,CACb,+CAA+C,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CACxE,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AArEH,8BAsEC;AArEyB,oBAAU,GAAG,QAAQ,CAAC","file":"expression/function/impl/TOBOOLEAN.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n} 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\";\nimport { NumericValue } from \"../../../value/NumericValue\";\nimport { Decimal } from \"decimal.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\nimport { ReferenceValue } from \"../../../value/ReferenceValue\";\n\nexport class TOBOOLEAN extends Func {\n private static readonly KEY_OBJECT = \"object\";\n constructor() {\n super(\"TOBOOLEAN\", [new FuncArgAny(true, \"object\")]);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const val = evaluatedArguments.get(\"object\");\n try {\n return new ExprEvalSuccessObj(BooleanValue.of(this.convert(val)));\n } catch (e) {\n return new ExprEvalFunctionEvaluationErrorObj(\n callingExpr.getKind(),\n ExprEvalStatus.ERROR,\n `Cannot convert ${val.getValue()} to boolean: ${e.message}`,\n this.name,\n callingExpr.getTextSpan()\n );\n }\n }\n\n private convert(value: ExpressionValue): boolean {\n if (value instanceof BooleanValue) {\n return value.getValue();\n }\n if (value instanceof StringValue || value instanceof ReferenceValue) {\n switch (value.getValue()) {\n case \"TRUE\":\n case \"true\":\n case \"1\":\n return true;\n case \"FALSE\":\n case \"false\":\n case \"0\":\n return false;\n default:\n throw new Error(`Not a boolean value: ${value.getValue()}`);\n }\n }\n if (value instanceof NumericValue) {\n const val: Decimal = value.getValue();\n if (val.isZero()) {\n return false;\n }\n if (val.toNumber() === 1) {\n return true;\n }\n throw new Error(\"Can only convert 0 or 1 to boolean\");\n }\n if (value instanceof LogicalValue) {\n const val = value.getValue();\n if (val === true) {\n return true;\n }\n if (val === false) {\n return false;\n }\n throw new Error(\"Can only convert 0 or 1 to boolean\");\n }\n throw new Error(\n `numeric conversion not implemented for type ${value.constructor.name}`\n );\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/TOLOGICAL.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC,+DAMiC;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TOLOGICAL.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC,+DAMiC;AAEjC,qDAA8C;AAE9C,oEAA8D;AAC9D,gEAA0D;AAG1D,MAAa,SAAU,SAAQ,cAAI;IAEjC;QACE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,kCAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAES,kBAAkB,CAC1B,WAAsB,EACtB,kBAAgE;QAEhE,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,IAAA,mCAAe,EAAC,GAAG,CAAC,EAAE;YACxB,IAAI,GAAG,CAAC,MAAM,KAAK,kCAAc,CAAC,sBAAsB,EAAE;gBACxD,kBAAkB,CAAC,GAAG,CACpB,SAAS,CAAC,UAAU,EACpB,IAAI,sCAAkB,CAAC,8BAAY,CAAC,OAAO,EAAE,CAAC,CAC/C,CAAC;aACH;SACF;aAAM;YACL,kBAAkB,CAAC,GAAG,CACpB,SAAS,CAAC,UAAU,EACpB,IAAI,sCAAkB,CACpB,8BAAY,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAa,CAAC,CAClD,CACF,CAAC;SACH;IACH,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI;YACF,OAAO,IAAI,sCAAkB,CAAC,GAAG,CAAC,CAAC;SACpC;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,sDAAkC,CAC3C,WAAW,CAAC,OAAO,EAAE,EACrB,kCAAc,CAAC,KAAK,EACpB,kBAAkB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAC3D,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;IACH,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAhDH,8BAiDC;AAhDyB,oBAAU,GAAG,QAAQ,CAAC","file":"expression/function/impl/TOLOGICAL.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n isExprEvalError,\n} from \"../../ExprEvalResult.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\nimport { FuncArgBoolean } from \"../arg/FuncArgBoolean\";\nimport { Expr } from \"../../Expr\";\n\nexport class TOLOGICAL extends Func {\n private static readonly KEY_OBJECT = \"object\";\n constructor() {\n super(\"TOLOGICAL\", [new FuncArgBoolean(true, \"object\")]);\n }\n\n protected transformArguments(\n callingExpr: Expr<any>,\n evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>\n ) {\n const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT);\n if (isExprEvalError(val)) {\n if (val.status === ExprEvalStatus.IFC_PROPERTY_NOT_FOUND) {\n evaluatedArguments.set(\n TOLOGICAL.KEY_OBJECT,\n new ExprEvalSuccessObj(LogicalValue.unknown())\n );\n }\n } else {\n evaluatedArguments.set(\n TOLOGICAL.KEY_OBJECT,\n new ExprEvalSuccessObj(\n LogicalValue.of(val.result.getValue() as boolean)\n )\n );\n }\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const val = evaluatedArguments.get(TOLOGICAL.KEY_OBJECT);\n try {\n return new ExprEvalSuccessObj(val);\n } catch (e) {\n return new ExprEvalFunctionEvaluationErrorObj(\n callingExpr.getKind(),\n ExprEvalStatus.ERROR,\n `Cannot convert ${val.getValue()} to boolean: ${e.message}`,\n this.name,\n callingExpr.getTextSpan()\n );\n }\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.LOGICAL;\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOLOWERCASE = 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 TOLOWERCASE extends Func_js_1.Func {
|
|
10
|
+
constructor() {
|
|
11
|
+
super("TOLOWERCASE", [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
|
+
.toLowerCase()));
|
|
17
|
+
}
|
|
18
|
+
getReturnType(argumentTypes) {
|
|
19
|
+
return Types_js_1.Type.STRING;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.TOLOWERCASE = TOLOWERCASE;
|
|
23
|
+
//# sourceMappingURL=TOLOWERCASE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TOLOWERCASE.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/TOLOWERCASE.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 TOLOWERCASE extends Func {\n constructor() {\n super(\"TOLOWERCASE\", [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 .toLowerCase()\n )\n );\n }\n\n public getReturnType(argumentTypes: ExprType[]): ExprType {\n return Type.STRING;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/TONUMERIC.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TONUMERIC.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAKiC;AACjC,kEAA4D;AAE5D,qDAA8C;AAE9C,oEAA8D;AAC9D,2CAAqC;AACrC,oEAA8D;AAC9D,oEAA8D;AAC9D,wEAAkE;AAElE,MAAa,SAAU,SAAQ,cAAI;IAEjC;QACE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,0BAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI;YACF,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,sDAAkC,CAC3C,WAAW,CAAC,OAAO,EAAE,EACrB,kCAAc,CAAC,UAAU,EACzB,kBAAkB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAC3D,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;IACH,CAAC;IAEO,OAAO,CAAC,KAAsB;QACpC,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC;SAC3D;QACD,IAAI,KAAK,YAAY,4BAAW,IAAI,KAAK,YAAY,kCAAc,EAAE;YACnE,OAAO,IAAI,oBAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtC;QACD,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACzB;QACD,IAAI,KAAK,YAAY,8BAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,SAAS;gBACnC,CAAC,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAClB,CAAC,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC;oBAChB,CAAC,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC;SACpB;QACD,MAAM,IAAI,KAAK,CACb,+CAA+C,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CACxE,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAhDH,8BAiDC;AAhDyB,oBAAU,GAAG,QAAQ,CAAC","file":"expression/function/impl/TONUMERIC.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgAny } from \"../arg/FuncArgAny.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n} 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\";\nimport { NumericValue } from \"../../../value/NumericValue\";\nimport { Decimal } from \"decimal.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue\";\nimport { LogicalValue } from \"../../../value/LogicalValue\";\nimport { ReferenceValue } from \"../../../value/ReferenceValue\";\n\nexport class TONUMERIC extends Func {\n private static readonly KEY_OBJECT = \"object\";\n constructor() {\n super(\"TONUMERIC\", [new FuncArgAny(true, \"object\")]);\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const val = evaluatedArguments.get(\"object\");\n try {\n return new ExprEvalSuccessObj(NumericValue.of(this.convert(val)));\n } catch (e) {\n return new ExprEvalFunctionEvaluationErrorObj(\n callingExpr.getKind(),\n ExprEvalStatus.MATH_ERROR,\n `Cannot convert ${val.getValue()} to numeric: ${e.message}`,\n this.name,\n callingExpr.getTextSpan()\n );\n }\n }\n\n private convert(value: ExpressionValue): Decimal {\n if (value instanceof BooleanValue) {\n return value.getValue() ? new Decimal(1) : new Decimal(0);\n }\n if (value instanceof StringValue || value instanceof ReferenceValue) {\n return new Decimal(value.getValue());\n }\n if (value instanceof NumericValue) {\n return value.getValue();\n }\n if (value instanceof LogicalValue) {\n return value.getValue() === \"UNKNOWN\"\n ? new Decimal(-1)\n : value.getValue()\n ? new Decimal(1)\n : new Decimal(0);\n }\n throw new Error(\n `numeric conversion not implemented for type ${value.constructor.name}`\n );\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.NUMERIC;\n }\n}\n"]}
|