ifc-expressions 2.0.1-beta.6 → 2.0.1-beta.7
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/compiler/TypeManager.js +6 -0
- package/dist/cjs/compiler/TypeManager.js.map +1 -1
- package/dist/cjs/expression/function/IfcExpressionFunctions.js +16 -2
- package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/cjs/expression/function/arg/FuncArgRegexFlag.js +29 -0
- package/dist/cjs/expression/function/arg/FuncArgRegexFlag.js.map +1 -0
- package/dist/cjs/expression/function/impl/ApplyRegex.js +7 -1
- package/dist/cjs/expression/function/impl/ApplyRegex.js.map +1 -1
- package/dist/cjs/expression/function/impl/MatchesPattern.js +10 -2
- package/dist/cjs/expression/function/impl/MatchesPattern.js.map +1 -1
- package/dist/cjs/expression/function/impl/ReplacePattern.js +10 -2
- package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -1
- package/dist/cjs/expression/function/impl/TOBOOLEAN.js +72 -0
- package/dist/cjs/expression/function/impl/TOBOOLEAN.js.map +1 -0
- package/dist/cjs/expression/function/impl/TONUMERIC.js +52 -0
- package/dist/cjs/expression/function/impl/TONUMERIC.js.map +1 -0
- package/dist/cjs/value/LogicalValue.js +3 -2
- package/dist/cjs/value/LogicalValue.js.map +1 -1
- package/dist/compiler/TypeManager.d.ts +2 -0
- package/dist/expression/function/arg/FuncArgRegexFlag.d.ts +9 -0
- package/dist/expression/function/impl/ApplyRegex.d.ts +2 -0
- package/dist/expression/function/impl/TOBOOLEAN.d.ts +12 -0
- package/dist/expression/function/impl/TONUMERIC.d.ts +12 -0
- package/dist/mjs/compiler/TypeManager.js +6 -0
- package/dist/mjs/compiler/TypeManager.js.map +1 -1
- package/dist/mjs/expression/function/IfcExpressionFunctions.js +16 -2
- package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
- package/dist/mjs/expression/function/arg/FuncArgRegexFlag.js +25 -0
- package/dist/mjs/expression/function/arg/FuncArgRegexFlag.js.map +1 -0
- package/dist/mjs/expression/function/impl/ApplyRegex.js +7 -1
- package/dist/mjs/expression/function/impl/ApplyRegex.js.map +1 -1
- package/dist/mjs/expression/function/impl/MatchesPattern.js +10 -2
- package/dist/mjs/expression/function/impl/MatchesPattern.js.map +1 -1
- package/dist/mjs/expression/function/impl/ReplacePattern.js +10 -2
- package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -1
- package/dist/mjs/expression/function/impl/TOBOOLEAN.js +68 -0
- package/dist/mjs/expression/function/impl/TOBOOLEAN.js.map +1 -0
- package/dist/mjs/expression/function/impl/TONUMERIC.js +48 -0
- package/dist/mjs/expression/function/impl/TONUMERIC.js.map +1 -0
- package/dist/mjs/value/LogicalValue.js +3 -2
- package/dist/mjs/value/LogicalValue.js.map +1 -1
- package/dist/value/LogicalValue.d.ts +1 -0
- package/package.json +1 -1
|
@@ -49,9 +49,15 @@ class TypeManager {
|
|
|
49
49
|
isBoolean(...ctxs) {
|
|
50
50
|
return this.isType(Types_js_1.Type.BOOLEAN, ...ctxs);
|
|
51
51
|
}
|
|
52
|
+
isLogical(...ctxs) {
|
|
53
|
+
return this.isType(Types_js_1.Type.LOGICAL, ...ctxs);
|
|
54
|
+
}
|
|
52
55
|
overlapsWithBoolean(...ctxs) {
|
|
53
56
|
return this.overlapsWith(Types_js_1.Type.BOOLEAN, ...ctxs);
|
|
54
57
|
}
|
|
58
|
+
overlapsWithLogical(...ctxs) {
|
|
59
|
+
return this.overlapsWith(Types_js_1.Type.LOGICAL, ...ctxs);
|
|
60
|
+
}
|
|
55
61
|
isNumeric(...ctxs) {
|
|
56
62
|
return this.isType(Types_js_1.Type.NUMERIC, ...ctxs);
|
|
57
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/compiler/TypeManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/compiler/TypeManager.ts"],"names":[],"mappings":"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","file":"compiler/TypeManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class TypeManager {\n private readonly types = new Map<ParserRuleContext, ExprType>();\n\n constructor() {}\n\n public setType(parserRuleContext: ParserRuleContext, type: ExprType) {\n this.types.set(parserRuleContext, type);\n }\n\n public getType(parserRuleContext: ParserRuleContext): ExprType {\n return this.types.get(parserRuleContext);\n }\n\n public copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext) {\n const theType = this.types.get(from as ParserRuleContext);\n this.types.set(ctx, theType);\n }\n\n public requireString(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.STRING,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type string, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireBoolean(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.BOOLEAN,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type boolean, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireNumeric(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.NUMERIC,\n actualType,\n () =>\n new ExpressionTypeError(\n `expected type numeric, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext) {\n Types.requireTypesOverlap(\n this.types.get(ctxA),\n this.types.get(ctxB),\n () =>\n new ExpressionTypeError(\n `Types ${this.types.get(ctxA).getName()} and ${this.types\n .get(ctxB)\n .getName()} are required to overlap but they don't.`,\n ctxA\n )\n );\n }\n\n public isType(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => Types.isType(this.types.get(ctx), type));\n }\n\n public overlapsWith(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => type.overlapsWith(this.types.get(ctx)));\n }\n\n public isString(...ctxs) {\n return this.isType(Type.STRING, ...ctxs);\n }\n\n public overlapsWithString(...ctxs) {\n return this.overlapsWith(Type.STRING, ...ctxs);\n }\n\n public isBoolean(...ctxs) {\n return this.isType(Type.BOOLEAN, ...ctxs);\n }\n\n public isLogical(...ctxs) {\n return this.isType(Type.LOGICAL, ...ctxs);\n }\n\n public overlapsWithBoolean(...ctxs) {\n return this.overlapsWith(Type.BOOLEAN, ...ctxs);\n }\n\n public overlapsWithLogical(...ctxs) {\n return this.overlapsWith(Type.LOGICAL, ...ctxs);\n }\n\n public isNumeric(...ctxs) {\n return this.isType(Type.NUMERIC, ...ctxs);\n }\n\n public overlapsWithNumeric(...ctxs) {\n return this.overlapsWith(Type.NUMERIC, ...ctxs);\n }\n}\n"]}
|
|
@@ -19,9 +19,21 @@ const EQUALS_js_1 = require("./impl/EQUALS.js");
|
|
|
19
19
|
const CompareMagnitudes_js_1 = require("./impl/CompareMagnitudes.js");
|
|
20
20
|
const ReplacePattern_js_1 = require("./impl/ReplacePattern.js");
|
|
21
21
|
const IF_js_1 = require("./impl/IF.js");
|
|
22
|
+
const TONUMERIC_js_1 = require("./impl/TONUMERIC.js");
|
|
23
|
+
const IfcExpressionFunctionConfigException_js_1 = require("../../error/IfcExpressionFunctionConfigException.js");
|
|
24
|
+
const TOBOOLEAN_js_1 = require("./impl/TOBOOLEAN.js");
|
|
22
25
|
const builtinFunctions = new Map();
|
|
23
|
-
function
|
|
24
|
-
builtinFunctions.
|
|
26
|
+
function registerOrDie(fnKey, func) {
|
|
27
|
+
if (builtinFunctions.has(fnKey)) {
|
|
28
|
+
throw new IfcExpressionFunctionConfigException_js_1.IfcExpressionFunctionConfigException(`cannot register function with name '${fnKey}': name already in use`);
|
|
29
|
+
}
|
|
30
|
+
builtinFunctions.set(fnKey, func);
|
|
31
|
+
}
|
|
32
|
+
function registerFunc(func, ...aliases) {
|
|
33
|
+
const fnKey = func.getName();
|
|
34
|
+
const keys = [...aliases];
|
|
35
|
+
keys.unshift(fnKey);
|
|
36
|
+
keys.forEach((key) => registerOrDie(IfcExpressionFunctions.normalizeName(key), func));
|
|
25
37
|
}
|
|
26
38
|
class IfcExpressionFunctions {
|
|
27
39
|
static normalizeName(name) {
|
|
@@ -58,6 +70,8 @@ registerFunc(new PROPERTY_js_1.PROPERTY());
|
|
|
58
70
|
registerFunc(new TYPE_js_1.TYPE());
|
|
59
71
|
registerFunc(new NOT_js_1.NOT());
|
|
60
72
|
registerFunc(new TOSTRING_js_1.TOSTRING());
|
|
73
|
+
registerFunc(new TONUMERIC_js_1.TONUMERIC(), "TONUMBER");
|
|
74
|
+
registerFunc(new TOBOOLEAN_js_1.TOBOOLEAN());
|
|
61
75
|
registerFunc(new EXISTS_js_1.EXISTS());
|
|
62
76
|
registerFunc(new FuncBooleanBinary_js_1.FuncBooleanBinary("AND", (left, right) => left && right));
|
|
63
77
|
registerFunc(new FuncBooleanBinary_js_1.FuncBooleanBinary("OR", (left, right) => left || right));
|
|
@@ -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;
|
|
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\";\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 EXISTS());\nregisterFunc(new FuncBooleanBinary(\"AND\", (left, right) => left && right));\nregisterFunc(new FuncBooleanBinary(\"OR\", (left, right) => left || right));\nregisterFunc(\n new FuncBooleanBinary(\"XOR\", (left, right) => (left ? !right : right))\n);\nregisterFunc(new FuncBooleanBinary(\"IMPLIES\", (left, right) => !left || right));\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,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FuncArgRegexFlag = void 0;
|
|
4
|
+
const FuncArgString_js_1 = require("./FuncArgString.js");
|
|
5
|
+
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
|
|
6
|
+
const ExprKind_js_1 = require("../../ExprKind.js");
|
|
7
|
+
const IfcExpressionUtils_js_1 = require("../../../util/IfcExpressionUtils.js");
|
|
8
|
+
class FuncArgRegexFlag extends FuncArgString_js_1.FuncArgString {
|
|
9
|
+
constructor(required, name, defaultValue) {
|
|
10
|
+
super(required, name, defaultValue);
|
|
11
|
+
}
|
|
12
|
+
transformForTypeCheck(callingExpr, invocationValue) {
|
|
13
|
+
const val = super.transformForTypeCheck(callingExpr, invocationValue);
|
|
14
|
+
if ((0, ExprEvalResult_js_1.isExprEvalError)(val)) {
|
|
15
|
+
return val;
|
|
16
|
+
}
|
|
17
|
+
const stringValue = val.result.getValue();
|
|
18
|
+
if ((0, IfcExpressionUtils_js_1.isNullish)(stringValue.match(/^[imguv]*$/)) || // allowed flags not found
|
|
19
|
+
!(0, IfcExpressionUtils_js_1.isNullish)(stringValue.match(/^.*([imguv]).*\1.*$/))) {
|
|
20
|
+
/* duplicated flags found */ return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} is a possibly empty collection of 'flags' for a javascript ` +
|
|
21
|
+
`regular expression. Order does not matter, duplicate flags are not allowed. ` +
|
|
22
|
+
`The flags are: 'g','i','m','s','u' and 'v'. The provided value, '${stringValue}' is not allowed. ` +
|
|
23
|
+
`By the way the default value is '${this.defaultValue.getValue()}'`, callingExpr.getTextSpan());
|
|
24
|
+
}
|
|
25
|
+
return val;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.FuncArgRegexFlag = FuncArgRegexFlag;
|
|
29
|
+
//# sourceMappingURL=FuncArgRegexFlag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/arg/FuncArgRegexFlag.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AAEnD,+DAKiC;AAGjC,mDAA6C;AAC7C,+EAAgE;AAEhE,MAAa,gBAAiB,SAAQ,gCAAa;IACjD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAyB;QACpE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAES,qBAAqB,CAC7B,WAAyB,EACzB,eAAiD;QAEjD,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,IAAA,mCAAe,EAAC,GAAG,CAAC,EAAE;YACxB,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAY,CAAC;QACpD,IACE,IAAA,iCAAS,EAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,0BAA0B;YACxE,CAAC,IAAA,iCAAS,EAAC,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EACpD;YACA,4BAA4B,CAAC,OAAO,IAAI,wCAAoB,CAC1D,sBAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,8DAA8D;gBACjF,8EAA8E;gBAC9E,oEAAoE,WAAW,oBAAoB;gBACnG,oCAAoC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EACrE,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA7BD,4CA6BC","file":"expression/function/arg/FuncArgRegexFlag.js","sourcesContent":["import { FuncArgString } from \"./FuncArgString\";\nimport { StringValue } from \"../../../value/StringValue\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n isExprEvalError,\n} from \"../../ExprEvalResult\";\nimport { FunctionExpr } from \"../FunctionExpr\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue\";\nimport { ExprKind } from \"../../ExprKind\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils\";\n\nexport class FuncArgRegexFlag extends FuncArgString {\n constructor(required: boolean, name: string, defaultValue: StringValue) {\n super(required, name, defaultValue);\n }\n\n protected transformForTypeCheck(\n callingExpr: FunctionExpr,\n invocationValue: ExprEvalSuccess<ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const val = super.transformForTypeCheck(callingExpr, invocationValue);\n if (isExprEvalError(val)) {\n return val;\n }\n const stringValue = val.result.getValue() as string;\n if (\n isNullish(stringValue.match(/^[imguv]*$/)) || // allowed flags not found\n !isNullish(stringValue.match(/^.*([imguv]).*\\1.*$/))\n ) {\n /* duplicated flags found */ return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} is a possibly empty collection of 'flags' for a javascript ` +\n `regular expression. Order does not matter, duplicate flags are not allowed. ` +\n `The flags are: 'g','i','m','s','u' and 'v'. The provided value, '${stringValue}' is not allowed. ` +\n `By the way the default value is '${this.defaultValue.getValue()}'`,\n callingExpr.getTextSpan()\n );\n }\n return val;\n }\n}\n"]}
|
|
@@ -7,6 +7,8 @@ const FuncArgSimpleRegex_js_1 = require("../arg/FuncArgSimpleRegex.js");
|
|
|
7
7
|
const FuncArgRegex_js_1 = require("../arg/FuncArgRegex.js");
|
|
8
8
|
const FuncArgBoolean_js_1 = require("../arg/FuncArgBoolean.js");
|
|
9
9
|
const BooleanValue_js_1 = require("../../../value/BooleanValue.js");
|
|
10
|
+
const StringValue_js_1 = require("../../../value/StringValue.js");
|
|
11
|
+
const FuncArgRegexFlag_js_1 = require("../arg/FuncArgRegexFlag.js");
|
|
10
12
|
class ApplyRegex extends Func_js_1.Func {
|
|
11
13
|
constructor(name, simplePattern, requireFullMatch) {
|
|
12
14
|
super(name, [
|
|
@@ -14,13 +16,17 @@ class ApplyRegex extends Func_js_1.Func {
|
|
|
14
16
|
simplePattern
|
|
15
17
|
? new FuncArgSimpleRegex_js_1.FuncArgSimpleRegex(true, ApplyRegex.KEY_PATTERN)
|
|
16
18
|
: new FuncArgRegex_js_1.FuncArgRegex(true, ApplyRegex.KEY_PATTERN),
|
|
17
|
-
|
|
19
|
+
simplePattern
|
|
20
|
+
? new FuncArgBoolean_js_1.FuncArgBoolean(false, ApplyRegex.KEY_CASE_INSENSITIVE, BooleanValue_js_1.BooleanValue.of(false))
|
|
21
|
+
: new FuncArgRegexFlag_js_1.FuncArgRegexFlag(false, ApplyRegex.KEY_FLAGS, new StringValue_js_1.StringValue("gim")),
|
|
18
22
|
]);
|
|
19
23
|
this.requireFullMatch = requireFullMatch;
|
|
24
|
+
this.simplePattern = simplePattern;
|
|
20
25
|
}
|
|
21
26
|
}
|
|
22
27
|
exports.ApplyRegex = ApplyRegex;
|
|
23
28
|
ApplyRegex.KEY_INPUT = "input";
|
|
24
29
|
ApplyRegex.KEY_PATTERN = "pattern";
|
|
25
30
|
ApplyRegex.KEY_CASE_INSENSITIVE = "caseInsensitive";
|
|
31
|
+
ApplyRegex.KEY_FLAGS = "flags";
|
|
26
32
|
//# sourceMappingURL=ApplyRegex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/ApplyRegex.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8DAAwD;AACxD,wEAAkE;AAClE,4DAAsD;AACtD,gEAA0D;AAC1D,oEAA8D;AAE9D,MAAsB,UAAW,SAAQ,cAAI;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/ApplyRegex.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8DAAwD;AACxD,wEAAkE;AAClE,4DAAsD;AACtD,gEAA0D;AAC1D,oEAA8D;AAC9D,kEAA4D;AAC5D,oEAA8D;AAE9D,MAAsB,UAAW,SAAQ,cAAI;IAS3C,YACE,IAAY,EACZ,aAAsB,EACtB,gBAAyB;QAEzB,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,gCAAa,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;YAC7C,aAAa;gBACX,CAAC,CAAC,IAAI,0CAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;gBACtD,CAAC,CAAC,IAAI,8BAAY,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;YAClD,aAAa;gBACX,CAAC,CAAC,IAAI,kCAAc,CAChB,KAAK,EACL,UAAU,CAAC,oBAAoB,EAC/B,8BAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CACvB;gBACH,CAAC,CAAC,IAAI,sCAAgB,CAClB,KAAK,EACL,UAAU,CAAC,SAAS,EACpB,IAAI,4BAAW,CAAC,KAAK,CAAC,CACvB;SACN,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;;AAjCH,gCAkCC;AAjC2B,oBAAS,GAAG,OAAO,CAAC;AACpB,sBAAW,GAAG,SAAS,CAAC;AACxB,+BAAoB,GAAG,iBAAiB,CAAC;AACzC,oBAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/ApplyRegex.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { FuncArgSimpleRegex } from \"../arg/FuncArgSimpleRegex.js\";\nimport { FuncArgRegex } from \"../arg/FuncArgRegex.js\";\nimport { FuncArgBoolean } from \"../arg/FuncArgBoolean.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { StringValue } from \"../../../value/StringValue\";\nimport { FuncArgRegexFlag } from \"../arg/FuncArgRegexFlag\";\n\nexport abstract class ApplyRegex extends Func {\n protected static readonly KEY_INPUT = \"input\";\n protected static readonly KEY_PATTERN = \"pattern\";\n protected static readonly KEY_CASE_INSENSITIVE = \"caseInsensitive\";\n protected static readonly KEY_FLAGS = \"flags\";\n\n protected readonly requireFullMatch: boolean;\n protected readonly simplePattern: boolean;\n\n protected constructor(\n name: string,\n simplePattern: boolean,\n requireFullMatch: boolean\n ) {\n super(name, [\n new FuncArgString(true, ApplyRegex.KEY_INPUT),\n simplePattern\n ? new FuncArgSimpleRegex(true, ApplyRegex.KEY_PATTERN)\n : new FuncArgRegex(true, ApplyRegex.KEY_PATTERN),\n simplePattern\n ? new FuncArgBoolean(\n false,\n ApplyRegex.KEY_CASE_INSENSITIVE,\n BooleanValue.of(false)\n )\n : new FuncArgRegexFlag(\n false,\n ApplyRegex.KEY_FLAGS,\n new StringValue(\"gim\")\n ),\n ]);\n this.requireFullMatch = requireFullMatch;\n this.simplePattern = simplePattern;\n }\n}\n"]}
|
|
@@ -20,8 +20,16 @@ class MatchesPattern extends ApplyRegex_js_1.ApplyRegex {
|
|
|
20
20
|
if (pattern.length === 0) {
|
|
21
21
|
return new ExprEvalResult_js_1.ExprEvalSuccessObj(BooleanValue_js_1.BooleanValue.of(false));
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
let flags = "m"; // default for simple pattern
|
|
24
|
+
if (this.simplePattern) {
|
|
25
|
+
const caseSensitive = evaluatedArguments.get(MatchesPattern.KEY_CASE_INSENSITIVE);
|
|
26
|
+
if (caseSensitive) {
|
|
27
|
+
flags = "im";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
flags = evaluatedArguments.get(MatchesPattern.KEY_FLAGS).getValue();
|
|
32
|
+
}
|
|
25
33
|
const regex = new RegExp(pattern, flags);
|
|
26
34
|
const input = inputValue.getValue();
|
|
27
35
|
const matches = input.match(regex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/MatchesPattern.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAE7C,+DAA6E;AAE7E,oEAA8D;AAC9D,+EAAgE;AAChE,qDAA8C;AAI9C,MAAa,cAAe,SAAQ,0BAAU;IAC5C,YAAY,IAAY,EAAE,aAAsB,EAAE,gBAAyB;QACzE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,cAAc,CAAC,oBAAoB,CACpC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/MatchesPattern.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAE7C,+DAA6E;AAE7E,oEAA8D;AAC9D,+EAAgE;AAChE,qDAA8C;AAI9C,MAAa,cAAe,SAAQ,0BAAU;IAC5C,YAAY,IAAY,EAAE,aAAsB,EAAE,gBAAyB;QACzE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,6BAA6B;QAC9C,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,cAAc,CAAC,oBAAoB,CACpC,CAAC;YACF,IAAI,aAAa,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC;aACd;SACF;aAAM;YACL,KAAK,GACH,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAChD,CAAC,QAAQ,EAAE,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAI,UAA0B,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAA,iCAAS,EAAC,OAAO,CAAC,EAAE;YACtB,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,sCAAkB,CAAC,8BAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;CACF;AA3CD,wCA2CC","file":"expression/function/impl/MatchesPattern.js","sourcesContent":["import { ApplyRegex } from \"./ApplyRegex.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class MatchesPattern extends ApplyRegex {\n constructor(name: string, simplePattern: boolean, requireFullMatch: boolean) {\n super(name, simplePattern, requireFullMatch);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputValue = evaluatedArguments.get(MatchesPattern.KEY_INPUT);\n const patternValue = evaluatedArguments.get(MatchesPattern.KEY_PATTERN);\n const pattern = (patternValue as StringValue).getValue();\n if (pattern.length === 0) {\n return new ExprEvalSuccessObj(BooleanValue.of(false));\n }\n let flags = \"m\"; // default for simple pattern\n if (this.simplePattern) {\n const caseSensitive = evaluatedArguments.get(\n MatchesPattern.KEY_CASE_INSENSITIVE\n );\n if (caseSensitive) {\n flags = \"im\";\n }\n } else {\n flags = (\n evaluatedArguments.get(MatchesPattern.KEY_FLAGS) as StringValue\n ).getValue();\n }\n const regex = new RegExp(pattern, flags);\n const input = (inputValue as StringValue).getValue();\n const matches = input.match(regex);\n if (isNullish(matches)) {\n return new ExprEvalSuccessObj(BooleanValue.of(false));\n }\n if (this.requireFullMatch) {\n return new ExprEvalSuccessObj(BooleanValue.of(matches[0] === input));\n }\n return new ExprEvalSuccessObj(BooleanValue.of(true));\n }\n}\n"]}
|
|
@@ -26,8 +26,16 @@ class ReplacePattern extends ApplyRegex_js_1.ApplyRegex {
|
|
|
26
26
|
if (pattern.length === 0) {
|
|
27
27
|
return new ExprEvalResult_js_1.ExprEvalSuccessObj(inputValue);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
let flags = "mg";
|
|
30
|
+
if (this.simplePattern) {
|
|
31
|
+
const caseSensitive = evaluatedArguments.get(MatchesPattern_js_1.MatchesPattern.KEY_CASE_INSENSITIVE);
|
|
32
|
+
if (caseSensitive.getValue()) {
|
|
33
|
+
flags = "img";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
flags = evaluatedArguments.get(ReplacePattern.KEY_FLAGS).getValue();
|
|
38
|
+
}
|
|
31
39
|
const regex = new RegExp(pattern, flags);
|
|
32
40
|
const input = inputValue.getValue();
|
|
33
41
|
const replace = replaceValue.getValue();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/ReplacePattern.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAE7C,+DAA6E;AAC7E,kEAA4D;AAC5D,qDAA8C;AAC9C,8DAAwD;AACxD,4DAAsD;AACtD,2DAAqD;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/ReplacePattern.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAE7C,+DAA6E;AAC7E,kEAA4D;AAC5D,qDAA8C;AAC9C,8DAAwD;AACxD,4DAAsD;AACtD,2DAAqD;AAKrD,MAAa,cAAe,SAAQ,0BAAU;IAG5C,YAAY,IAAY,EAAE,aAAsB;QAC9C,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,CAAC,EACD,CAAC,EACD,aAAa;YACX,CAAC,CAAC,IAAI,gCAAa,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC;YACrD,CAAC,CAAC,IAAI,8BAAY,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,kCAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,kCAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,sCAAkB,CAAC,UAAU,CAAC,CAAC;SAC3C;QACD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,kCAAc,CAAC,oBAAoB,CACpC,CAAC;YACF,IAAK,aAA8B,CAAC,QAAQ,EAAE,EAAE;gBAC9C,KAAK,GAAG,KAAK,CAAC;aACf;SACF;aAAM;YACL,KAAK,GACH,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAChD,CAAC,QAAQ,EAAE,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAI,UAA0B,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,sCAAkB,CAAC,4BAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;;AA/CH,wCAgDC;AA/CyB,0BAAW,GAAG,cAAc,CAAC","file":"expression/function/impl/ReplacePattern.js","sourcesContent":["import { ApplyRegex } from \"./ApplyRegex.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { FuncArgRegex } from \"../arg/FuncArgRegex.js\";\nimport { MatchesPattern } from \"./MatchesPattern.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue\";\n\nexport class ReplacePattern extends ApplyRegex {\n private static readonly KEY_REPLACE = \"replaceValue\";\n\n constructor(name: string, simplePattern: boolean) {\n super(name, simplePattern, false);\n this.formalArguments.splice(\n 2,\n 0,\n simplePattern\n ? new FuncArgString(true, ReplacePattern.KEY_REPLACE)\n : new FuncArgRegex(true, ReplacePattern.KEY_REPLACE)\n );\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.STRING;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputValue = evaluatedArguments.get(MatchesPattern.KEY_INPUT);\n const patternValue = evaluatedArguments.get(MatchesPattern.KEY_PATTERN);\n const replaceValue = evaluatedArguments.get(ReplacePattern.KEY_REPLACE);\n const pattern = (patternValue as StringValue).getValue();\n if (pattern.length === 0) {\n return new ExprEvalSuccessObj(inputValue);\n }\n let flags = \"mg\";\n if (this.simplePattern) {\n const caseSensitive = evaluatedArguments.get(\n MatchesPattern.KEY_CASE_INSENSITIVE\n );\n if ((caseSensitive as BooleanValue).getValue()) {\n flags = \"img\";\n }\n } else {\n flags = (\n evaluatedArguments.get(ReplacePattern.KEY_FLAGS) as StringValue\n ).getValue();\n }\n const regex = new RegExp(pattern, flags);\n const input = (inputValue as StringValue).getValue();\n const replace = (replaceValue as StringValue).getValue();\n const result = input.replace(regex, replace);\n return new ExprEvalSuccessObj(StringValue.of(result));\n }\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOBOOLEAN = void 0;
|
|
4
|
+
const Func_js_1 = require("../Func.js");
|
|
5
|
+
const FuncArgAny_js_1 = require("../arg/FuncArgAny.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 NumericValue_js_1 = require("../../../value/NumericValue.js");
|
|
10
|
+
const BooleanValue_js_1 = require("../../../value/BooleanValue.js");
|
|
11
|
+
const LogicalValue_js_1 = require("../../../value/LogicalValue.js");
|
|
12
|
+
const ReferenceValue_js_1 = require("../../../value/ReferenceValue.js");
|
|
13
|
+
class TOBOOLEAN extends Func_js_1.Func {
|
|
14
|
+
constructor() {
|
|
15
|
+
super("TOBOOLEAN", [new FuncArgAny_js_1.FuncArgAny(true, "object")]);
|
|
16
|
+
}
|
|
17
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
18
|
+
const val = evaluatedArguments.get("object");
|
|
19
|
+
try {
|
|
20
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(BooleanValue_js_1.BooleanValue.of(this.convert(val)));
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalResult_js_1.ExprEvalStatus.ERROR, `Cannot convert ${val.getValue()} to boolean: ${e.message}`, this.name, callingExpr.getTextSpan());
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
convert(value) {
|
|
27
|
+
if (value instanceof BooleanValue_js_1.BooleanValue) {
|
|
28
|
+
return value.getValue();
|
|
29
|
+
}
|
|
30
|
+
if (value instanceof StringValue_js_1.StringValue || value instanceof ReferenceValue_js_1.ReferenceValue) {
|
|
31
|
+
switch (value.getValue()) {
|
|
32
|
+
case "TRUE":
|
|
33
|
+
case "true":
|
|
34
|
+
case "1":
|
|
35
|
+
return true;
|
|
36
|
+
case "FALSE":
|
|
37
|
+
case "false":
|
|
38
|
+
case "0":
|
|
39
|
+
return false;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Not a boolean value: ${value.getValue()}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (value instanceof NumericValue_js_1.NumericValue) {
|
|
45
|
+
const val = value.getValue();
|
|
46
|
+
if (val.isZero()) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (val.toNumber() === 1) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
throw new Error("Can only convert 0 or 1 to boolean");
|
|
53
|
+
}
|
|
54
|
+
if (value instanceof LogicalValue_js_1.LogicalValue) {
|
|
55
|
+
const val = value.getValue();
|
|
56
|
+
if (val === true) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
if (val === false) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
throw new Error("Can only convert 0 or 1 to boolean");
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`numeric conversion not implemented for type ${value.constructor.name}`);
|
|
65
|
+
}
|
|
66
|
+
getReturnType(argumentTypes) {
|
|
67
|
+
return Types_js_1.Type.STRING;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.TOBOOLEAN = TOBOOLEAN;
|
|
71
|
+
TOBOOLEAN.KEY_OBJECT = "object";
|
|
72
|
+
//# sourceMappingURL=TOBOOLEAN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TOBOOLEAN.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAMiC;AACjC,kEAA4D;AAE5D,qDAA8C;AAE9C,oEAA8D;AAE9D,oEAA8D;AAC9D,oEAA8D;AAC9D,wEAAkE;AAGlE,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,MAAM,CAAC;IACrB,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 ExprEvalWrongFunctionArgumentTypeErrorObj,\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\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils\";\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.STRING;\n }\n}\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TONUMERIC = void 0;
|
|
4
|
+
const Func_js_1 = require("../Func.js");
|
|
5
|
+
const FuncArgAny_js_1 = require("../arg/FuncArgAny.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 NumericValue_js_1 = require("../../../value/NumericValue.js");
|
|
10
|
+
const decimal_js_1 = require("decimal.js");
|
|
11
|
+
const BooleanValue_js_1 = require("../../../value/BooleanValue.js");
|
|
12
|
+
const LogicalValue_js_1 = require("../../../value/LogicalValue.js");
|
|
13
|
+
const ReferenceValue_js_1 = require("../../../value/ReferenceValue.js");
|
|
14
|
+
class TONUMERIC extends Func_js_1.Func {
|
|
15
|
+
constructor() {
|
|
16
|
+
super("TONUMERIC", [new FuncArgAny_js_1.FuncArgAny(true, "object")]);
|
|
17
|
+
}
|
|
18
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
19
|
+
const val = evaluatedArguments.get("object");
|
|
20
|
+
try {
|
|
21
|
+
return new ExprEvalResult_js_1.ExprEvalSuccessObj(NumericValue_js_1.NumericValue.of(this.convert(val)));
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalResult_js_1.ExprEvalStatus.MATH_ERROR, `Cannot convert ${val.getValue()} to numeric: ${e.message}`, this.name, callingExpr.getTextSpan());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
convert(value) {
|
|
28
|
+
if (value instanceof BooleanValue_js_1.BooleanValue) {
|
|
29
|
+
return value.getValue() ? new decimal_js_1.Decimal(1) : new decimal_js_1.Decimal(0);
|
|
30
|
+
}
|
|
31
|
+
if (value instanceof StringValue_js_1.StringValue || value instanceof ReferenceValue_js_1.ReferenceValue) {
|
|
32
|
+
return new decimal_js_1.Decimal(value.getValue());
|
|
33
|
+
}
|
|
34
|
+
if (value instanceof NumericValue_js_1.NumericValue) {
|
|
35
|
+
return value.getValue();
|
|
36
|
+
}
|
|
37
|
+
if (value instanceof LogicalValue_js_1.LogicalValue) {
|
|
38
|
+
return value.getValue() === "UNKNOWN"
|
|
39
|
+
? new decimal_js_1.Decimal(-1)
|
|
40
|
+
: value.getValue()
|
|
41
|
+
? new decimal_js_1.Decimal(1)
|
|
42
|
+
: new decimal_js_1.Decimal(0);
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`numeric conversion not implemented for type ${value.constructor.name}`);
|
|
45
|
+
}
|
|
46
|
+
getReturnType(argumentTypes) {
|
|
47
|
+
return Types_js_1.Type.STRING;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.TONUMERIC = TONUMERIC;
|
|
51
|
+
TONUMERIC.KEY_OBJECT = "object";
|
|
52
|
+
//# sourceMappingURL=TONUMERIC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TONUMERIC.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,wDAAkD;AAElD,+DAMiC;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,MAAM,CAAC;IACrB,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 ExprEvalWrongFunctionArgumentTypeErrorObj,\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.STRING;\n }\n}\n"]}
|
|
@@ -20,7 +20,7 @@ class LogicalValue {
|
|
|
20
20
|
return Types_js_1.Type.LOGICAL;
|
|
21
21
|
}
|
|
22
22
|
toString() {
|
|
23
|
-
return this.logicalValue ===
|
|
23
|
+
return this.logicalValue === LogicalValue.UNKNOWN
|
|
24
24
|
? "UNKNOWN"
|
|
25
25
|
: this.logicalValue
|
|
26
26
|
? "TRUE"
|
|
@@ -29,8 +29,9 @@ class LogicalValue {
|
|
|
29
29
|
static isLogicalValueType(arg) {
|
|
30
30
|
return ((typeof arg.logicalValue !== "undefined" &&
|
|
31
31
|
typeof arg.logicalValue === "boolean") ||
|
|
32
|
-
arg.logicalValue ===
|
|
32
|
+
arg.logicalValue === LogicalValue.UNKNOWN);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.LogicalValue = LogicalValue;
|
|
36
|
+
LogicalValue.UNKNOWN = "UNKNOWN";
|
|
36
37
|
//# sourceMappingURL=LogicalValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/value/LogicalValue.ts"],"names":[],"mappings":";;;AAEA,+CAAwC;AAExC,MAAa,YAAY;
|
|
1
|
+
{"version":3,"sources":["../../src/value/LogicalValue.ts"],"names":[],"mappings":";;;AAEA,+CAAwC;AAExC,MAAa,YAAY;IAIvB,YAAY,KAA0B;QACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAA0B;QACzC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO;YAC/C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,OAAO,CACL,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,WAAW;YACtC,OAAO,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;YACxC,GAAG,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAC1C,CAAC;IACJ,CAAC;;AAzCH,oCA0CC;AAzCwB,oBAAO,GAAG,SAAS,CAAC","file":"value/LogicalValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\n\nexport class LogicalValue implements Value<boolean | \"UNKNOWN\"> {\n public static readonly UNKNOWN = \"UNKNOWN\";\n private readonly logicalValue: boolean | \"UNKNOWN\";\n\n constructor(value: boolean | \"UNKNOWN\") {\n this.logicalValue = value;\n }\n\n public static of(value: boolean | \"UNKNOWN\"): LogicalValue {\n return new LogicalValue(value);\n }\n\n getValue(): boolean | \"UNKNOWN\" {\n return this.logicalValue;\n }\n\n equals(other: Value<any>): boolean {\n return (\n LogicalValue.isLogicalValueType(other) &&\n other.logicalValue === this.logicalValue\n );\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n\n toString(): string {\n return this.logicalValue === LogicalValue.UNKNOWN\n ? \"UNKNOWN\"\n : this.logicalValue\n ? \"TRUE\"\n : \"FALSE\";\n }\n\n public static isLogicalValueType(arg: any): arg is LogicalValueType {\n return (\n (typeof arg.logicalValue !== \"undefined\" &&\n typeof arg.logicalValue === \"boolean\") ||\n arg.logicalValue === LogicalValue.UNKNOWN\n );\n }\n}\n\nexport type LogicalValueType = {\n logicalValue: boolean | \"UNKNOWN\";\n};\n"]}
|
|
@@ -15,7 +15,9 @@ export declare class TypeManager {
|
|
|
15
15
|
isString(...ctxs: any[]): boolean;
|
|
16
16
|
overlapsWithString(...ctxs: any[]): boolean;
|
|
17
17
|
isBoolean(...ctxs: any[]): boolean;
|
|
18
|
+
isLogical(...ctxs: any[]): boolean;
|
|
18
19
|
overlapsWithBoolean(...ctxs: any[]): boolean;
|
|
20
|
+
overlapsWithLogical(...ctxs: any[]): boolean;
|
|
19
21
|
isNumeric(...ctxs: any[]): boolean;
|
|
20
22
|
overlapsWithNumeric(...ctxs: any[]): boolean;
|
|
21
23
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FuncArgString } from "./FuncArgString.js";
|
|
2
|
+
import { StringValue } from "../../../value/StringValue.js";
|
|
3
|
+
import { ExprEvalResult, ExprEvalSuccess } from "../../ExprEvalResult.js";
|
|
4
|
+
import { FunctionExpr } from "../FunctionExpr.js";
|
|
5
|
+
import { ExpressionValue } from "../../../value/ExpressionValue.js";
|
|
6
|
+
export declare class FuncArgRegexFlag extends FuncArgString {
|
|
7
|
+
constructor(required: boolean, name: string, defaultValue: StringValue);
|
|
8
|
+
protected transformForTypeCheck(callingExpr: FunctionExpr, invocationValue: ExprEvalSuccess<ExpressionValue>): ExprEvalResult<ExpressionValue>;
|
|
9
|
+
}
|
|
@@ -3,6 +3,8 @@ export declare abstract class ApplyRegex extends Func {
|
|
|
3
3
|
protected static readonly KEY_INPUT = "input";
|
|
4
4
|
protected static readonly KEY_PATTERN = "pattern";
|
|
5
5
|
protected static readonly KEY_CASE_INSENSITIVE = "caseInsensitive";
|
|
6
|
+
protected static readonly KEY_FLAGS = "flags";
|
|
6
7
|
protected readonly requireFullMatch: boolean;
|
|
8
|
+
protected readonly simplePattern: boolean;
|
|
7
9
|
protected constructor(name: string, simplePattern: boolean, requireFullMatch: boolean);
|
|
8
10
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 TOBOOLEAN extends Func {
|
|
7
|
+
private static readonly KEY_OBJECT;
|
|
8
|
+
constructor();
|
|
9
|
+
protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
|
|
10
|
+
private convert;
|
|
11
|
+
getReturnType(argumentTypes: Array<ExprType>): ExprType;
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 TONUMERIC extends Func {
|
|
7
|
+
private static readonly KEY_OBJECT;
|
|
8
|
+
constructor();
|
|
9
|
+
protected calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
|
|
10
|
+
private convert;
|
|
11
|
+
getReturnType(argumentTypes: Array<ExprType>): ExprType;
|
|
12
|
+
}
|
|
@@ -46,9 +46,15 @@ export class TypeManager {
|
|
|
46
46
|
isBoolean(...ctxs) {
|
|
47
47
|
return this.isType(Type.BOOLEAN, ...ctxs);
|
|
48
48
|
}
|
|
49
|
+
isLogical(...ctxs) {
|
|
50
|
+
return this.isType(Type.LOGICAL, ...ctxs);
|
|
51
|
+
}
|
|
49
52
|
overlapsWithBoolean(...ctxs) {
|
|
50
53
|
return this.overlapsWith(Type.BOOLEAN, ...ctxs);
|
|
51
54
|
}
|
|
55
|
+
overlapsWithLogical(...ctxs) {
|
|
56
|
+
return this.overlapsWith(Type.LOGICAL, ...ctxs);
|
|
57
|
+
}
|
|
52
58
|
isNumeric(...ctxs) {
|
|
53
59
|
return this.isType(Type.NUMERIC, ...ctxs);
|
|
54
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["compiler/TypeManager.ts"],"names":[],"mappings":"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","file":"compiler/TypeManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class TypeManager {\n private readonly types = new Map<ParserRuleContext, ExprType>();\n\n constructor() {}\n\n public setType(parserRuleContext: ParserRuleContext, type: ExprType) {\n this.types.set(parserRuleContext, type);\n }\n\n public getType(parserRuleContext: ParserRuleContext): ExprType {\n return this.types.get(parserRuleContext);\n }\n\n public copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext) {\n const theType = this.types.get(from as ParserRuleContext);\n this.types.set(ctx, theType);\n }\n\n public requireString(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.STRING,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type string, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireBoolean(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.BOOLEAN,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type boolean, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireNumeric(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.NUMERIC,\n actualType,\n () =>\n new ExpressionTypeError(\n `expected type numeric, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext) {\n Types.requireTypesOverlap(\n this.types.get(ctxA),\n this.types.get(ctxB),\n () =>\n new ExpressionTypeError(\n `Types ${this.types.get(ctxA).getName()} and ${this.types\n .get(ctxB)\n .getName()} are required to overlap but they don't.`,\n ctxA\n )\n );\n }\n\n public isType(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => Types.isType(this.types.get(ctx), type));\n }\n\n public overlapsWith(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => type.overlapsWith(this.types.get(ctx)));\n }\n\n public isString(...ctxs) {\n return this.isType(Type.STRING, ...ctxs);\n }\n\n public overlapsWithString(...ctxs) {\n return this.overlapsWith(Type.STRING, ...ctxs);\n }\n\n public isBoolean(...ctxs) {\n return this.isType(Type.BOOLEAN, ...ctxs);\n }\n\n public overlapsWithBoolean(...ctxs) {\n return this.overlapsWith(Type.BOOLEAN, ...ctxs);\n }\n\n public isNumeric(...ctxs) {\n return this.isType(Type.NUMERIC, ...ctxs);\n }\n\n public overlapsWithNumeric(...ctxs) {\n return this.overlapsWith(Type.NUMERIC, ...ctxs);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["compiler/TypeManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,MAAM,OAAO,WAAW;IAGtB;QAFiB,UAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEjD,CAAC;IAET,OAAO,CAAC,iBAAoC,EAAE,IAAc;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEM,OAAO,CAAC,iBAAoC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IAEM,YAAY,CAAC,GAAsB,EAAE,IAAuB;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAyB,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEM,aAAa,CAAC,GAAsB;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAwB,CAAC,CAAC;QAC5D,KAAK,CAAC,2BAA2B,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAwB,CAAC,EACxC,GAAG,EAAE,CACH,IAAI,mBAAmB,CACrB,wCAAwC,UAAU,CAAC,OAAO,EAAE,EAAE,EAC9D,GAAG,CACJ,CACJ,CAAC;IACJ,CAAC;IAEM,cAAc,CAAC,GAAsB;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAwB,CAAC,CAAC;QAC5D,KAAK,CAAC,2BAA2B,CAC/B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAwB,CAAC,EACxC,GAAG,EAAE,CACH,IAAI,mBAAmB,CACrB,yCAAyC,UAAU,CAAC,OAAO,EAAE,EAAE,EAC/D,GAAG,CACJ,CACJ,CAAC;IACJ,CAAC;IAEM,cAAc,CAAC,GAAsB;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAwB,CAAC,CAAC;QAC5D,KAAK,CAAC,2BAA2B,CAC/B,IAAI,CAAC,OAAO,EACZ,UAAU,EACV,GAAG,EAAE,CACH,IAAI,mBAAmB,CACrB,yCAAyC,UAAU,CAAC,OAAO,EAAE,EAAE,EAC/D,GAAG,CACJ,CACJ,CAAC;IACJ,CAAC;IAEM,mBAAmB,CAAC,IAAuB,EAAE,IAAuB;QACzE,KAAK,CAAC,mBAAmB,CACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,GAAG,EAAE,CACH,IAAI,mBAAmB,CACrB,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK;aACtD,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,EAAE,0CAA0C,EACtD,IAAI,CACL,CACJ,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,IAAc,EAAE,GAAG,IAAI;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,YAAY,CAAC,IAAc,EAAE,GAAG,IAAI;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAEM,QAAQ,CAAC,GAAG,IAAI;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,kBAAkB,CAAC,GAAG,IAAI;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IAEM,SAAS,CAAC,GAAG,IAAI;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,SAAS,CAAC,GAAG,IAAI;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,mBAAmB,CAAC,GAAG,IAAI;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAEM,mBAAmB,CAAC,GAAG,IAAI;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAEM,SAAS,CAAC,GAAG,IAAI;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,mBAAmB,CAAC,GAAG,IAAI;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;CACF","file":"compiler/TypeManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class TypeManager {\n private readonly types = new Map<ParserRuleContext, ExprType>();\n\n constructor() {}\n\n public setType(parserRuleContext: ParserRuleContext, type: ExprType) {\n this.types.set(parserRuleContext, type);\n }\n\n public getType(parserRuleContext: ParserRuleContext): ExprType {\n return this.types.get(parserRuleContext);\n }\n\n public copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext) {\n const theType = this.types.get(from as ParserRuleContext);\n this.types.set(ctx, theType);\n }\n\n public requireString(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.STRING,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type string, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireBoolean(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.BOOLEAN,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type boolean, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireNumeric(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.NUMERIC,\n actualType,\n () =>\n new ExpressionTypeError(\n `expected type numeric, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext) {\n Types.requireTypesOverlap(\n this.types.get(ctxA),\n this.types.get(ctxB),\n () =>\n new ExpressionTypeError(\n `Types ${this.types.get(ctxA).getName()} and ${this.types\n .get(ctxB)\n .getName()} are required to overlap but they don't.`,\n ctxA\n )\n );\n }\n\n public isType(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => Types.isType(this.types.get(ctx), type));\n }\n\n public overlapsWith(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => type.overlapsWith(this.types.get(ctx)));\n }\n\n public isString(...ctxs) {\n return this.isType(Type.STRING, ...ctxs);\n }\n\n public overlapsWithString(...ctxs) {\n return this.overlapsWith(Type.STRING, ...ctxs);\n }\n\n public isBoolean(...ctxs) {\n return this.isType(Type.BOOLEAN, ...ctxs);\n }\n\n public isLogical(...ctxs) {\n return this.isType(Type.LOGICAL, ...ctxs);\n }\n\n public overlapsWithBoolean(...ctxs) {\n return this.overlapsWith(Type.BOOLEAN, ...ctxs);\n }\n\n public overlapsWithLogical(...ctxs) {\n return this.overlapsWith(Type.LOGICAL, ...ctxs);\n }\n\n public isNumeric(...ctxs) {\n return this.isType(Type.NUMERIC, ...ctxs);\n }\n\n public overlapsWithNumeric(...ctxs) {\n return this.overlapsWith(Type.NUMERIC, ...ctxs);\n }\n}\n"]}
|
|
@@ -16,9 +16,21 @@ import { EQUALS } from "./impl/EQUALS.js";
|
|
|
16
16
|
import { CompareMagnitudes } from "./impl/CompareMagnitudes.js";
|
|
17
17
|
import { ReplacePattern } from "./impl/ReplacePattern.js";
|
|
18
18
|
import { IF } from "./impl/IF.js";
|
|
19
|
+
import { TONUMERIC } from "./impl/TONUMERIC.js";
|
|
20
|
+
import { IfcExpressionFunctionConfigException } from "../../error/IfcExpressionFunctionConfigException.js";
|
|
21
|
+
import { TOBOOLEAN } from "./impl/TOBOOLEAN.js";
|
|
19
22
|
const builtinFunctions = new Map();
|
|
20
|
-
function
|
|
21
|
-
builtinFunctions.
|
|
23
|
+
function registerOrDie(fnKey, func) {
|
|
24
|
+
if (builtinFunctions.has(fnKey)) {
|
|
25
|
+
throw new IfcExpressionFunctionConfigException(`cannot register function with name '${fnKey}': name already in use`);
|
|
26
|
+
}
|
|
27
|
+
builtinFunctions.set(fnKey, func);
|
|
28
|
+
}
|
|
29
|
+
function registerFunc(func, ...aliases) {
|
|
30
|
+
const fnKey = func.getName();
|
|
31
|
+
const keys = [...aliases];
|
|
32
|
+
keys.unshift(fnKey);
|
|
33
|
+
keys.forEach((key) => registerOrDie(IfcExpressionFunctions.normalizeName(key), func));
|
|
22
34
|
}
|
|
23
35
|
export class IfcExpressionFunctions {
|
|
24
36
|
static normalizeName(name) {
|
|
@@ -54,6 +66,8 @@ registerFunc(new PROPERTY());
|
|
|
54
66
|
registerFunc(new TYPE());
|
|
55
67
|
registerFunc(new NOT());
|
|
56
68
|
registerFunc(new TOSTRING());
|
|
69
|
+
registerFunc(new TONUMERIC(), "TONUMBER");
|
|
70
|
+
registerFunc(new TOBOOLEAN());
|
|
57
71
|
registerFunc(new EXISTS());
|
|
58
72
|
registerFunc(new FuncBooleanBinary("AND", (left, right) => left && right));
|
|
59
73
|
registerFunc(new FuncBooleanBinary("OR", (left, right) => left || right));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/IfcExpressionFunctions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;
|
|
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\";\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 EXISTS());\nregisterFunc(new FuncBooleanBinary(\"AND\", (left, right) => left && right));\nregisterFunc(new FuncBooleanBinary(\"OR\", (left, right) => left || right));\nregisterFunc(\n new FuncBooleanBinary(\"XOR\", (left, right) => (left ? !right : right))\n);\nregisterFunc(new FuncBooleanBinary(\"IMPLIES\", (left, right) => !left || right));\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
|
+
import { FuncArgString } from "./FuncArgString.js";
|
|
2
|
+
import { ExprEvalTypeErrorObj, isExprEvalError, } from "../../ExprEvalResult.js";
|
|
3
|
+
import { ExprKind } from "../../ExprKind.js";
|
|
4
|
+
import { isNullish } from "../../../util/IfcExpressionUtils.js";
|
|
5
|
+
export class FuncArgRegexFlag extends FuncArgString {
|
|
6
|
+
constructor(required, name, defaultValue) {
|
|
7
|
+
super(required, name, defaultValue);
|
|
8
|
+
}
|
|
9
|
+
transformForTypeCheck(callingExpr, invocationValue) {
|
|
10
|
+
const val = super.transformForTypeCheck(callingExpr, invocationValue);
|
|
11
|
+
if (isExprEvalError(val)) {
|
|
12
|
+
return val;
|
|
13
|
+
}
|
|
14
|
+
const stringValue = val.result.getValue();
|
|
15
|
+
if (isNullish(stringValue.match(/^[imguv]*$/)) || // allowed flags not found
|
|
16
|
+
!isNullish(stringValue.match(/^.*([imguv]).*\1.*$/))) {
|
|
17
|
+
/* duplicated flags found */ return new ExprEvalTypeErrorObj(ExprKind.FUNCTION_ARGUMENTS, `Argument ${this.name} is a possibly empty collection of 'flags' for a javascript ` +
|
|
18
|
+
`regular expression. Order does not matter, duplicate flags are not allowed. ` +
|
|
19
|
+
`The flags are: 'g','i','m','s','u' and 'v'. The provided value, '${stringValue}' is not allowed. ` +
|
|
20
|
+
`By the way the default value is '${this.defaultValue.getValue()}'`, callingExpr.getTextSpan());
|
|
21
|
+
}
|
|
22
|
+
return val;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=FuncArgRegexFlag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["expression/function/arg/FuncArgRegexFlag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAGL,oBAAoB,EACpB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD,YAAY,QAAiB,EAAE,IAAY,EAAE,YAAyB;QACpE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IAES,qBAAqB,CAC7B,WAAyB,EACzB,eAAiD;QAEjD,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;YACxB,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAY,CAAC;QACpD,IACE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,0BAA0B;YACxE,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EACpD;YACA,4BAA4B,CAAC,OAAO,IAAI,oBAAoB,CAC1D,QAAQ,CAAC,kBAAkB,EAC3B,YAAY,IAAI,CAAC,IAAI,8DAA8D;gBACjF,8EAA8E;gBAC9E,oEAAoE,WAAW,oBAAoB;gBACnG,oCAAoC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EACrE,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF","file":"expression/function/arg/FuncArgRegexFlag.js","sourcesContent":["import { FuncArgString } from \"./FuncArgString\";\nimport { StringValue } from \"../../../value/StringValue\";\nimport {\n ExprEvalResult,\n ExprEvalSuccess,\n ExprEvalTypeErrorObj,\n isExprEvalError,\n} from \"../../ExprEvalResult\";\nimport { FunctionExpr } from \"../FunctionExpr\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue\";\nimport { ExprKind } from \"../../ExprKind\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils\";\n\nexport class FuncArgRegexFlag extends FuncArgString {\n constructor(required: boolean, name: string, defaultValue: StringValue) {\n super(required, name, defaultValue);\n }\n\n protected transformForTypeCheck(\n callingExpr: FunctionExpr,\n invocationValue: ExprEvalSuccess<ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const val = super.transformForTypeCheck(callingExpr, invocationValue);\n if (isExprEvalError(val)) {\n return val;\n }\n const stringValue = val.result.getValue() as string;\n if (\n isNullish(stringValue.match(/^[imguv]*$/)) || // allowed flags not found\n !isNullish(stringValue.match(/^.*([imguv]).*\\1.*$/))\n ) {\n /* duplicated flags found */ return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Argument ${this.name} is a possibly empty collection of 'flags' for a javascript ` +\n `regular expression. Order does not matter, duplicate flags are not allowed. ` +\n `The flags are: 'g','i','m','s','u' and 'v'. The provided value, '${stringValue}' is not allowed. ` +\n `By the way the default value is '${this.defaultValue.getValue()}'`,\n callingExpr.getTextSpan()\n );\n }\n return val;\n }\n}\n"]}
|
|
@@ -4,6 +4,8 @@ import { FuncArgSimpleRegex } from "../arg/FuncArgSimpleRegex.js";
|
|
|
4
4
|
import { FuncArgRegex } from "../arg/FuncArgRegex.js";
|
|
5
5
|
import { FuncArgBoolean } from "../arg/FuncArgBoolean.js";
|
|
6
6
|
import { BooleanValue } from "../../../value/BooleanValue.js";
|
|
7
|
+
import { StringValue } from "../../../value/StringValue.js";
|
|
8
|
+
import { FuncArgRegexFlag } from "../arg/FuncArgRegexFlag.js";
|
|
7
9
|
export class ApplyRegex extends Func {
|
|
8
10
|
constructor(name, simplePattern, requireFullMatch) {
|
|
9
11
|
super(name, [
|
|
@@ -11,12 +13,16 @@ export class ApplyRegex extends Func {
|
|
|
11
13
|
simplePattern
|
|
12
14
|
? new FuncArgSimpleRegex(true, ApplyRegex.KEY_PATTERN)
|
|
13
15
|
: new FuncArgRegex(true, ApplyRegex.KEY_PATTERN),
|
|
14
|
-
|
|
16
|
+
simplePattern
|
|
17
|
+
? new FuncArgBoolean(false, ApplyRegex.KEY_CASE_INSENSITIVE, BooleanValue.of(false))
|
|
18
|
+
: new FuncArgRegexFlag(false, ApplyRegex.KEY_FLAGS, new StringValue("gim")),
|
|
15
19
|
]);
|
|
16
20
|
this.requireFullMatch = requireFullMatch;
|
|
21
|
+
this.simplePattern = simplePattern;
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
ApplyRegex.KEY_INPUT = "input";
|
|
20
25
|
ApplyRegex.KEY_PATTERN = "pattern";
|
|
21
26
|
ApplyRegex.KEY_CASE_INSENSITIVE = "caseInsensitive";
|
|
27
|
+
ApplyRegex.KEY_FLAGS = "flags";
|
|
22
28
|
//# sourceMappingURL=ApplyRegex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/impl/ApplyRegex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,OAAgB,UAAW,SAAQ,IAAI;
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/ApplyRegex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,OAAgB,UAAW,SAAQ,IAAI;IAS3C,YACE,IAAY,EACZ,aAAsB,EACtB,gBAAyB;QAEzB,KAAK,CAAC,IAAI,EAAE;YACV,IAAI,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;YAC7C,aAAa;gBACX,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;gBACtD,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;YAClD,aAAa;gBACX,CAAC,CAAC,IAAI,cAAc,CAChB,KAAK,EACL,UAAU,CAAC,oBAAoB,EAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CACvB;gBACH,CAAC,CAAC,IAAI,gBAAgB,CAClB,KAAK,EACL,UAAU,CAAC,SAAS,EACpB,IAAI,WAAW,CAAC,KAAK,CAAC,CACvB;SACN,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;;AAhCyB,oBAAS,GAAG,OAAO,CAAC;AACpB,sBAAW,GAAG,SAAS,CAAC;AACxB,+BAAoB,GAAG,iBAAiB,CAAC;AACzC,oBAAS,GAAG,OAAO,CAAC","file":"expression/function/impl/ApplyRegex.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { FuncArgSimpleRegex } from \"../arg/FuncArgSimpleRegex.js\";\nimport { FuncArgRegex } from \"../arg/FuncArgRegex.js\";\nimport { FuncArgBoolean } from \"../arg/FuncArgBoolean.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { StringValue } from \"../../../value/StringValue\";\nimport { FuncArgRegexFlag } from \"../arg/FuncArgRegexFlag\";\n\nexport abstract class ApplyRegex extends Func {\n protected static readonly KEY_INPUT = \"input\";\n protected static readonly KEY_PATTERN = \"pattern\";\n protected static readonly KEY_CASE_INSENSITIVE = \"caseInsensitive\";\n protected static readonly KEY_FLAGS = \"flags\";\n\n protected readonly requireFullMatch: boolean;\n protected readonly simplePattern: boolean;\n\n protected constructor(\n name: string,\n simplePattern: boolean,\n requireFullMatch: boolean\n ) {\n super(name, [\n new FuncArgString(true, ApplyRegex.KEY_INPUT),\n simplePattern\n ? new FuncArgSimpleRegex(true, ApplyRegex.KEY_PATTERN)\n : new FuncArgRegex(true, ApplyRegex.KEY_PATTERN),\n simplePattern\n ? new FuncArgBoolean(\n false,\n ApplyRegex.KEY_CASE_INSENSITIVE,\n BooleanValue.of(false)\n )\n : new FuncArgRegexFlag(\n false,\n ApplyRegex.KEY_FLAGS,\n new StringValue(\"gim\")\n ),\n ]);\n this.requireFullMatch = requireFullMatch;\n this.simplePattern = simplePattern;\n }\n}\n"]}
|
|
@@ -17,8 +17,16 @@ export class MatchesPattern extends ApplyRegex {
|
|
|
17
17
|
if (pattern.length === 0) {
|
|
18
18
|
return new ExprEvalSuccessObj(BooleanValue.of(false));
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
let flags = "m"; // default for simple pattern
|
|
21
|
+
if (this.simplePattern) {
|
|
22
|
+
const caseSensitive = evaluatedArguments.get(MatchesPattern.KEY_CASE_INSENSITIVE);
|
|
23
|
+
if (caseSensitive) {
|
|
24
|
+
flags = "im";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
flags = evaluatedArguments.get(MatchesPattern.KEY_FLAGS).getValue();
|
|
29
|
+
}
|
|
22
30
|
const regex = new RegExp(pattern, flags);
|
|
23
31
|
const input = inputValue.getValue();
|
|
24
32
|
const matches = input.match(regex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/impl/MatchesPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,IAAY,EAAE,aAAsB,EAAE,gBAAyB;QACzE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,cAAc,CAAC,oBAAoB,CACpC,CAAC;
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/MatchesPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,IAAY,EAAE,aAAsB,EAAE,gBAAyB;QACzE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,6BAA6B;QAC9C,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,cAAc,CAAC,oBAAoB,CACpC,CAAC;YACF,IAAI,aAAa,EAAE;gBACjB,KAAK,GAAG,IAAI,CAAC;aACd;SACF;aAAM;YACL,KAAK,GACH,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAChD,CAAC,QAAQ,EAAE,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAI,UAA0B,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;YACtB,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;CACF","file":"expression/function/impl/MatchesPattern.js","sourcesContent":["import { ApplyRegex } from \"./ApplyRegex.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue.js\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class MatchesPattern extends ApplyRegex {\n constructor(name: string, simplePattern: boolean, requireFullMatch: boolean) {\n super(name, simplePattern, requireFullMatch);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.BOOLEAN;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputValue = evaluatedArguments.get(MatchesPattern.KEY_INPUT);\n const patternValue = evaluatedArguments.get(MatchesPattern.KEY_PATTERN);\n const pattern = (patternValue as StringValue).getValue();\n if (pattern.length === 0) {\n return new ExprEvalSuccessObj(BooleanValue.of(false));\n }\n let flags = \"m\"; // default for simple pattern\n if (this.simplePattern) {\n const caseSensitive = evaluatedArguments.get(\n MatchesPattern.KEY_CASE_INSENSITIVE\n );\n if (caseSensitive) {\n flags = \"im\";\n }\n } else {\n flags = (\n evaluatedArguments.get(MatchesPattern.KEY_FLAGS) as StringValue\n ).getValue();\n }\n const regex = new RegExp(pattern, flags);\n const input = (inputValue as StringValue).getValue();\n const matches = input.match(regex);\n if (isNullish(matches)) {\n return new ExprEvalSuccessObj(BooleanValue.of(false));\n }\n if (this.requireFullMatch) {\n return new ExprEvalSuccessObj(BooleanValue.of(matches[0] === input));\n }\n return new ExprEvalSuccessObj(BooleanValue.of(true));\n }\n}\n"]}
|
|
@@ -23,8 +23,16 @@ export class ReplacePattern extends ApplyRegex {
|
|
|
23
23
|
if (pattern.length === 0) {
|
|
24
24
|
return new ExprEvalSuccessObj(inputValue);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
let flags = "mg";
|
|
27
|
+
if (this.simplePattern) {
|
|
28
|
+
const caseSensitive = evaluatedArguments.get(MatchesPattern.KEY_CASE_INSENSITIVE);
|
|
29
|
+
if (caseSensitive.getValue()) {
|
|
30
|
+
flags = "img";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
flags = evaluatedArguments.get(ReplacePattern.KEY_FLAGS).getValue();
|
|
35
|
+
}
|
|
28
36
|
const regex = new RegExp(pattern, flags);
|
|
29
37
|
const input = inputValue.getValue();
|
|
30
38
|
const replace = replaceValue.getValue();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/impl/ReplacePattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/ReplacePattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,MAAM,OAAO,cAAe,SAAQ,UAAU;IAG5C,YAAY,IAAY,EAAE,aAAsB;QAC9C,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,CAAC,EACD,CAAC,EACD,aAAa;YACX,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC;YACrD,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;SAC3C;QACD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,cAAc,CAAC,oBAAoB,CACpC,CAAC;YACF,IAAK,aAA8B,CAAC,QAAQ,EAAE,EAAE;gBAC9C,KAAK,GAAG,KAAK,CAAC;aACf;SACF;aAAM;YACL,KAAK,GACH,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAChD,CAAC,QAAQ,EAAE,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAI,UAA0B,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,OAAO,GAAI,YAA4B,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;;AA9CuB,0BAAW,GAAG,cAAc,CAAC","file":"expression/function/impl/ReplacePattern.js","sourcesContent":["import { ApplyRegex } from \"./ApplyRegex.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport { ExprEvalResult, ExprEvalSuccessObj } from \"../../ExprEvalResult.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { Type } from \"../../../type/Types.js\";\nimport { FuncArgString } from \"../arg/FuncArgString.js\";\nimport { FuncArgRegex } from \"../arg/FuncArgRegex.js\";\nimport { MatchesPattern } from \"./MatchesPattern.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\nimport { BooleanValue } from \"../../../value/BooleanValue\";\n\nexport class ReplacePattern extends ApplyRegex {\n private static readonly KEY_REPLACE = \"replaceValue\";\n\n constructor(name: string, simplePattern: boolean) {\n super(name, simplePattern, false);\n this.formalArguments.splice(\n 2,\n 0,\n simplePattern\n ? new FuncArgString(true, ReplacePattern.KEY_REPLACE)\n : new FuncArgRegex(true, ReplacePattern.KEY_REPLACE)\n );\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.STRING;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const inputValue = evaluatedArguments.get(MatchesPattern.KEY_INPUT);\n const patternValue = evaluatedArguments.get(MatchesPattern.KEY_PATTERN);\n const replaceValue = evaluatedArguments.get(ReplacePattern.KEY_REPLACE);\n const pattern = (patternValue as StringValue).getValue();\n if (pattern.length === 0) {\n return new ExprEvalSuccessObj(inputValue);\n }\n let flags = \"mg\";\n if (this.simplePattern) {\n const caseSensitive = evaluatedArguments.get(\n MatchesPattern.KEY_CASE_INSENSITIVE\n );\n if ((caseSensitive as BooleanValue).getValue()) {\n flags = \"img\";\n }\n } else {\n flags = (\n evaluatedArguments.get(ReplacePattern.KEY_FLAGS) as StringValue\n ).getValue();\n }\n const regex = new RegExp(pattern, flags);\n const input = (inputValue as StringValue).getValue();\n const replace = (replaceValue as StringValue).getValue();\n const result = input.replace(regex, replace);\n return new ExprEvalSuccessObj(StringValue.of(result));\n }\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Func } from "../Func.js";
|
|
2
|
+
import { FuncArgAny } from "../arg/FuncArgAny.js";
|
|
3
|
+
import { ExprEvalFunctionEvaluationErrorObj, ExprEvalStatus, ExprEvalSuccessObj, } from "../../ExprEvalResult.js";
|
|
4
|
+
import { StringValue } from "../../../value/StringValue.js";
|
|
5
|
+
import { Type } from "../../../type/Types.js";
|
|
6
|
+
import { NumericValue } from "../../../value/NumericValue.js";
|
|
7
|
+
import { BooleanValue } from "../../../value/BooleanValue.js";
|
|
8
|
+
import { LogicalValue } from "../../../value/LogicalValue.js";
|
|
9
|
+
import { ReferenceValue } from "../../../value/ReferenceValue.js";
|
|
10
|
+
export class TOBOOLEAN extends Func {
|
|
11
|
+
constructor() {
|
|
12
|
+
super("TOBOOLEAN", [new FuncArgAny(true, "object")]);
|
|
13
|
+
}
|
|
14
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
15
|
+
const val = evaluatedArguments.get("object");
|
|
16
|
+
try {
|
|
17
|
+
return new ExprEvalSuccessObj(BooleanValue.of(this.convert(val)));
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return new ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalStatus.ERROR, `Cannot convert ${val.getValue()} to boolean: ${e.message}`, this.name, callingExpr.getTextSpan());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
convert(value) {
|
|
24
|
+
if (value instanceof BooleanValue) {
|
|
25
|
+
return value.getValue();
|
|
26
|
+
}
|
|
27
|
+
if (value instanceof StringValue || value instanceof ReferenceValue) {
|
|
28
|
+
switch (value.getValue()) {
|
|
29
|
+
case "TRUE":
|
|
30
|
+
case "true":
|
|
31
|
+
case "1":
|
|
32
|
+
return true;
|
|
33
|
+
case "FALSE":
|
|
34
|
+
case "false":
|
|
35
|
+
case "0":
|
|
36
|
+
return false;
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`Not a boolean value: ${value.getValue()}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (value instanceof NumericValue) {
|
|
42
|
+
const val = value.getValue();
|
|
43
|
+
if (val.isZero()) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (val.toNumber() === 1) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
throw new Error("Can only convert 0 or 1 to boolean");
|
|
50
|
+
}
|
|
51
|
+
if (value instanceof LogicalValue) {
|
|
52
|
+
const val = value.getValue();
|
|
53
|
+
if (val === true) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (val === false) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
throw new Error("Can only convert 0 or 1 to boolean");
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`numeric conversion not implemented for type ${value.constructor.name}`);
|
|
62
|
+
}
|
|
63
|
+
getReturnType(argumentTypes) {
|
|
64
|
+
return Type.STRING;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
TOBOOLEAN.KEY_OBJECT = "object";
|
|
68
|
+
//# sourceMappingURL=TOBOOLEAN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/TOBOOLEAN.ts"],"names":[],"mappings":"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","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 ExprEvalWrongFunctionArgumentTypeErrorObj,\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\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils\";\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.STRING;\n }\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Func } from "../Func.js";
|
|
2
|
+
import { FuncArgAny } from "../arg/FuncArgAny.js";
|
|
3
|
+
import { ExprEvalFunctionEvaluationErrorObj, ExprEvalStatus, ExprEvalSuccessObj, } from "../../ExprEvalResult.js";
|
|
4
|
+
import { StringValue } from "../../../value/StringValue.js";
|
|
5
|
+
import { Type } from "../../../type/Types.js";
|
|
6
|
+
import { NumericValue } from "../../../value/NumericValue.js";
|
|
7
|
+
import { Decimal } from "decimal.js";
|
|
8
|
+
import { BooleanValue } from "../../../value/BooleanValue.js";
|
|
9
|
+
import { LogicalValue } from "../../../value/LogicalValue.js";
|
|
10
|
+
import { ReferenceValue } from "../../../value/ReferenceValue.js";
|
|
11
|
+
export class TONUMERIC extends Func {
|
|
12
|
+
constructor() {
|
|
13
|
+
super("TONUMERIC", [new FuncArgAny(true, "object")]);
|
|
14
|
+
}
|
|
15
|
+
calculateResult(callingExpr, evaluatedArguments) {
|
|
16
|
+
const val = evaluatedArguments.get("object");
|
|
17
|
+
try {
|
|
18
|
+
return new ExprEvalSuccessObj(NumericValue.of(this.convert(val)));
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
return new ExprEvalFunctionEvaluationErrorObj(callingExpr.getKind(), ExprEvalStatus.MATH_ERROR, `Cannot convert ${val.getValue()} to numeric: ${e.message}`, this.name, callingExpr.getTextSpan());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
convert(value) {
|
|
25
|
+
if (value instanceof BooleanValue) {
|
|
26
|
+
return value.getValue() ? new Decimal(1) : new Decimal(0);
|
|
27
|
+
}
|
|
28
|
+
if (value instanceof StringValue || value instanceof ReferenceValue) {
|
|
29
|
+
return new Decimal(value.getValue());
|
|
30
|
+
}
|
|
31
|
+
if (value instanceof NumericValue) {
|
|
32
|
+
return value.getValue();
|
|
33
|
+
}
|
|
34
|
+
if (value instanceof LogicalValue) {
|
|
35
|
+
return value.getValue() === "UNKNOWN"
|
|
36
|
+
? new Decimal(-1)
|
|
37
|
+
: value.getValue()
|
|
38
|
+
? new Decimal(1)
|
|
39
|
+
: new Decimal(0);
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`numeric conversion not implemented for type ${value.constructor.name}`);
|
|
42
|
+
}
|
|
43
|
+
getReturnType(argumentTypes) {
|
|
44
|
+
return Type.STRING;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
TONUMERIC.KEY_OBJECT = "object";
|
|
48
|
+
//# sourceMappingURL=TONUMERIC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/TONUMERIC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EACL,kCAAkC,EAElC,cAAc,EACd,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,OAAO,SAAU,SAAQ,IAAI;IAEjC;QACE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,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,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,kCAAkC,CAC3C,WAAW,CAAC,OAAO,EAAE,EACrB,cAAc,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,YAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;SAC3D;QACD,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,YAAY,cAAc,EAAE;YACnE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtC;QACD,IAAI,KAAK,YAAY,YAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACzB;QACD,IAAI,KAAK,YAAY,YAAY,EAAE;YACjC,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,SAAS;gBACnC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAClB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;oBAChB,CAAC,CAAC,IAAI,OAAO,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,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AA/CuB,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 ExprEvalWrongFunctionArgumentTypeErrorObj,\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.STRING;\n }\n}\n"]}
|
|
@@ -17,7 +17,7 @@ export class LogicalValue {
|
|
|
17
17
|
return Type.LOGICAL;
|
|
18
18
|
}
|
|
19
19
|
toString() {
|
|
20
|
-
return this.logicalValue ===
|
|
20
|
+
return this.logicalValue === LogicalValue.UNKNOWN
|
|
21
21
|
? "UNKNOWN"
|
|
22
22
|
: this.logicalValue
|
|
23
23
|
? "TRUE"
|
|
@@ -26,7 +26,8 @@ export class LogicalValue {
|
|
|
26
26
|
static isLogicalValueType(arg) {
|
|
27
27
|
return ((typeof arg.logicalValue !== "undefined" &&
|
|
28
28
|
typeof arg.logicalValue === "boolean") ||
|
|
29
|
-
arg.logicalValue ===
|
|
29
|
+
arg.logicalValue === LogicalValue.UNKNOWN);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
LogicalValue.UNKNOWN = "UNKNOWN";
|
|
32
33
|
//# sourceMappingURL=LogicalValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["value/LogicalValue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"sources":["value/LogicalValue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,OAAO,YAAY;IAIvB,YAAY,KAA0B;QACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAA0B;QACzC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO;YAC/C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,OAAO,CACL,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,WAAW;YACtC,OAAO,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;YACxC,GAAG,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAC1C,CAAC;IACJ,CAAC;;AAxCsB,oBAAO,GAAG,SAAS,CAAC","file":"value/LogicalValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\n\nexport class LogicalValue implements Value<boolean | \"UNKNOWN\"> {\n public static readonly UNKNOWN = \"UNKNOWN\";\n private readonly logicalValue: boolean | \"UNKNOWN\";\n\n constructor(value: boolean | \"UNKNOWN\") {\n this.logicalValue = value;\n }\n\n public static of(value: boolean | \"UNKNOWN\"): LogicalValue {\n return new LogicalValue(value);\n }\n\n getValue(): boolean | \"UNKNOWN\" {\n return this.logicalValue;\n }\n\n equals(other: Value<any>): boolean {\n return (\n LogicalValue.isLogicalValueType(other) &&\n other.logicalValue === this.logicalValue\n );\n }\n\n getType(): ExprType {\n return Type.LOGICAL;\n }\n\n toString(): string {\n return this.logicalValue === LogicalValue.UNKNOWN\n ? \"UNKNOWN\"\n : this.logicalValue\n ? \"TRUE\"\n : \"FALSE\";\n }\n\n public static isLogicalValueType(arg: any): arg is LogicalValueType {\n return (\n (typeof arg.logicalValue !== \"undefined\" &&\n typeof arg.logicalValue === \"boolean\") ||\n arg.logicalValue === LogicalValue.UNKNOWN\n );\n }\n}\n\nexport type LogicalValueType = {\n logicalValue: boolean | \"UNKNOWN\";\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Value } from "./Value.js";
|
|
2
2
|
import { ExprType } from "../type/ExprType.js";
|
|
3
3
|
export declare class LogicalValue implements Value<boolean | "UNKNOWN"> {
|
|
4
|
+
static readonly UNKNOWN = "UNKNOWN";
|
|
4
5
|
private readonly logicalValue;
|
|
5
6
|
constructor(value: boolean | "UNKNOWN");
|
|
6
7
|
static of(value: boolean | "UNKNOWN"): LogicalValue;
|