ifc-expressions 2.0.1-beta.3 → 2.0.1-beta.5
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/IfcExpression.d.ts +4 -3
- package/dist/cjs/IfcExpression.js +6 -11
- package/dist/cjs/IfcExpression.js.map +1 -1
- package/dist/cjs/expression/ExprFacade.js +38 -0
- package/dist/cjs/expression/ExprFacade.js.map +1 -0
- package/dist/cjs/expression/function/impl/PROPERTY.js +1 -1
- package/dist/cjs/expression/function/impl/PROPERTY.js.map +1 -1
- package/dist/cjs/expression/function/impl/TYPE.js +1 -1
- package/dist/cjs/expression/function/impl/TYPE.js.map +1 -1
- package/dist/expression/ExprFacade.d.ts +13 -0
- package/dist/gen/parser/IfcExpressionListener.d.ts +26 -26
- package/dist/gen/parser/IfcExpressionVisitor.d.ts +26 -26
- package/dist/mjs/IfcExpression.js +5 -11
- package/dist/mjs/IfcExpression.js.map +1 -1
- package/dist/mjs/expression/ExprFacade.js +34 -0
- package/dist/mjs/expression/ExprFacade.js.map +1 -0
- package/dist/mjs/expression/function/impl/PROPERTY.js +1 -1
- package/dist/mjs/expression/function/impl/PROPERTY.js.map +1 -1
- package/dist/mjs/expression/function/impl/TYPE.js +1 -1
- package/dist/mjs/expression/function/impl/TYPE.js.map +1 -1
- package/package.json +2 -1
package/dist/IfcExpression.d.ts
CHANGED
|
@@ -25,7 +25,8 @@ import { ExprEvalError, ExprEvalResult, isExprEvalError, isExprEvalSuccess } fro
|
|
|
25
25
|
import { ExprKind } from "./expression/ExprKind.js";
|
|
26
26
|
import { TypeManager } from "./compiler/TypeManager.js";
|
|
27
27
|
import { ExprToTextInputLinker } from "./compiler/ExprToTextInputLinker.js";
|
|
28
|
-
|
|
28
|
+
import { ExprFacade } from "./expression/ExprFacade.js";
|
|
29
|
+
export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
|
|
29
30
|
export type { BoxedValueTypes };
|
|
30
31
|
export declare class IfcExpressionParseResult {
|
|
31
32
|
private readonly _input;
|
|
@@ -49,7 +50,7 @@ export declare class IfcExpression {
|
|
|
49
50
|
* @param parseResult
|
|
50
51
|
* @return the Expression (Expr), which can be evaluated to obtain its result.
|
|
51
52
|
*/
|
|
52
|
-
static compile(parseResult: IfcExpressionParseResult):
|
|
53
|
+
static compile(parseResult: IfcExpressionParseResult): ExprFacade<ExpressionValue>;
|
|
53
54
|
/**
|
|
54
55
|
* Evaluates the specified input expression and returns the evaluation result. The parse
|
|
55
56
|
* and compile steps are done internally.
|
|
@@ -61,5 +62,5 @@ export declare class IfcExpression {
|
|
|
61
62
|
static evaluate(expression: string, context?: IfcExpressionContext): ExprEvalResult<ExpressionValue>;
|
|
62
63
|
static formatError(input: string, error: ExprEvalError): string;
|
|
63
64
|
private static indent;
|
|
64
|
-
static evaluateExpression(expr:
|
|
65
|
+
static evaluateExpression(expr: ExprFacade<ExpressionValue>, context?: IfcExpressionContext): ExprEvalResult<ExpressionValue>;
|
|
65
66
|
}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.IfcExpression = exports.IfcExpressionParseResult = exports.ExprToTextInputLinker = exports.isExprEvalSuccess = exports.isExprEvalError = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprKind = exports.ExprCompiler = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
|
|
6
|
+
exports.IfcExpression = exports.IfcExpressionParseResult = exports.ExprFacade = exports.ExprToTextInputLinker = exports.isExprEvalSuccess = exports.isExprEvalError = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprKind = exports.ExprCompiler = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
|
|
7
7
|
const antlr4_1 = require("antlr4");
|
|
8
8
|
const ExprCompiler_js_1 = require("./compiler/ExprCompiler.js");
|
|
9
9
|
Object.defineProperty(exports, "ExprCompiler", { enumerable: true, get: function () { return ExprCompiler_js_1.ExprCompiler; } });
|
|
@@ -51,6 +51,8 @@ const ExceptionToExprEvalErrorMapper_js_1 = require("./error/ExceptionToExprEval
|
|
|
51
51
|
const NopContext_js_1 = require("./context/NopContext.js");
|
|
52
52
|
const ExprToTextInputLinker_js_1 = require("./compiler/ExprToTextInputLinker.js");
|
|
53
53
|
Object.defineProperty(exports, "ExprToTextInputLinker", { enumerable: true, get: function () { return ExprToTextInputLinker_js_1.ExprToTextInputLinker; } });
|
|
54
|
+
const ExprFacade_js_1 = require("./expression/ExprFacade.js");
|
|
55
|
+
Object.defineProperty(exports, "ExprFacade", { enumerable: true, get: function () { return ExprFacade_js_1.ExprFacade; } });
|
|
54
56
|
class IfcExpressionParseResult {
|
|
55
57
|
constructor(input, typeManager, exprContext) {
|
|
56
58
|
this._typeManager = typeManager;
|
|
@@ -117,7 +119,7 @@ class IfcExpression {
|
|
|
117
119
|
const compiler = new ExprCompiler_js_1.ExprCompiler(parseResult.typeManager);
|
|
118
120
|
const expr = compiler.visit(parseResult.parseTree);
|
|
119
121
|
ExprToTextInputLinker_js_1.ExprToTextInputLinker.linkTextToExpressions(parseResult.input, expr, compiler.getExprManager());
|
|
120
|
-
return expr;
|
|
122
|
+
return new ExprFacade_js_1.ExprFacade(expr);
|
|
121
123
|
}
|
|
122
124
|
/**
|
|
123
125
|
* Evaluates the specified input expression and returns the evaluation result. The parse
|
|
@@ -134,7 +136,7 @@ class IfcExpression {
|
|
|
134
136
|
return (0, ExceptionToExprEvalErrorMapper_js_1.mapException)(errorListener.getException());
|
|
135
137
|
}
|
|
136
138
|
const compiledExpression = this.compile(parseResult);
|
|
137
|
-
return compiledExpression.evaluate(context
|
|
139
|
+
return compiledExpression.evaluate(context);
|
|
138
140
|
}
|
|
139
141
|
static formatError(input, error) {
|
|
140
142
|
const lines = ["** Error **"];
|
|
@@ -156,14 +158,7 @@ class IfcExpression {
|
|
|
156
158
|
.join("\n");
|
|
157
159
|
}
|
|
158
160
|
static evaluateExpression(expr, context = new NopContext_js_1.NopContext()) {
|
|
159
|
-
|
|
160
|
-
// if the expr was created by parsing an input, it has a textSpan set.
|
|
161
|
-
// If the expr was created programmatically, we have to generate its exprString once, which causes its
|
|
162
|
-
// textspan to be set.
|
|
163
|
-
// make sure we know the position
|
|
164
|
-
expr.toExprString();
|
|
165
|
-
}
|
|
166
|
-
return expr.evaluate(context, new Map());
|
|
161
|
+
return expr.evaluate(context);
|
|
167
162
|
}
|
|
168
163
|
}
|
|
169
164
|
exports.IfcExpression = IfcExpression;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): Expr<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return expr;\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context, new Map<string, any>());\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: Expr<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n if (isNullish(expr.getTextSpan())) {\n // if the expr was created by parsing an input, it has a textSpan set.\n // If the expr was created programmatically, we have to generate its exprString once, which causes its\n // textspan to be set.\n // make sure we know the position\n expr.toExprString();\n }\n return expr.evaluate(context, new Map());\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\nimport { ExprFacade } from \"./expression/ExprFacade\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n ExprFacade,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): ExprFacade<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return new ExprFacade(expr);\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context);\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: ExprFacade<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n return expr.evaluate(context);\n }\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExprFacade = void 0;
|
|
4
|
+
const ExprEvalResult_js_1 = require("./ExprEvalResult.js");
|
|
5
|
+
const IfcExpressionUtils_js_1 = require("../util/IfcExpressionUtils.js");
|
|
6
|
+
class ExprFacade {
|
|
7
|
+
constructor(delegate) {
|
|
8
|
+
this.delegate = delegate;
|
|
9
|
+
}
|
|
10
|
+
evaluate(ctx) {
|
|
11
|
+
try {
|
|
12
|
+
let span = this.delegate.getTextSpan();
|
|
13
|
+
if ((0, IfcExpressionUtils_js_1.isNullish)(span)) {
|
|
14
|
+
this.delegate.toExprString();
|
|
15
|
+
}
|
|
16
|
+
return this.delegate.evaluate(ctx, new Map());
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
return new ExprEvalResult_js_1.ExprEvalErrorObj(this.delegate.getKind(), ExprEvalResult_js_1.ExprEvalStatus.ERROR, "Unexpected error occurred during expression evaluation, this is a bug - please report." +
|
|
20
|
+
((0, IfcExpressionUtils_js_1.isNullish)(e.message)
|
|
21
|
+
? ""
|
|
22
|
+
: "\nMessage of caught error is: " + e.message) +
|
|
23
|
+
"\nStacktrace:\n" +
|
|
24
|
+
e.stack, this.delegate.getTextSpan());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
getKind() {
|
|
28
|
+
return this.delegate.getKind();
|
|
29
|
+
}
|
|
30
|
+
getType() {
|
|
31
|
+
return this.delegate.getType();
|
|
32
|
+
}
|
|
33
|
+
toExprString() {
|
|
34
|
+
return this.delegate.toExprString();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.ExprFacade = ExprFacade;
|
|
38
|
+
//# sourceMappingURL=ExprFacade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/expression/ExprFacade.ts"],"names":[],"mappings":";;;AAEA,2DAI6B;AAG7B,yEAA0D;AAE1D,MAAa,UAAU;IAGrB,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,IAAI;YACF,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,IAAA,iCAAS,EAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;aAC9B;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,EAAe,CAAC,CAAC;SAC5D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,oCAAgB,CACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EACvB,kCAAc,CAAC,KAAK,EACpB,wFAAwF;gBACtF,CAAC,IAAA,iCAAS,EAAC,CAAC,CAAC,OAAO,CAAC;oBACnB,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,gCAAgC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACjD,iBAAiB;gBACjB,CAAC,CAAC,KAAK,EACT,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC5B,CAAC;SACH;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;CACF;AAxCD,gCAwCC","file":"expression/ExprFacade.js","sourcesContent":["import { Expr } from \"./Expr.js\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport {\n ExprEvalErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"./ExprEvalResult.js\";\nimport { ExprKind } from \"./ExprKind.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class ExprFacade<T> {\n private readonly delegate: Expr<T>;\n\n constructor(delegate: Expr<T>) {\n this.delegate = delegate;\n }\n\n evaluate(ctx: IfcExpressionContext): ExprEvalResult<T> {\n try {\n let span = this.delegate.getTextSpan();\n if (isNullish(span)) {\n this.delegate.toExprString();\n }\n return this.delegate.evaluate(ctx, new Map<string, any>());\n } catch (e) {\n return new ExprEvalErrorObj(\n this.delegate.getKind(),\n ExprEvalStatus.ERROR,\n \"Unexpected error occurred during expression evaluation, this is a bug - please report.\" +\n (isNullish(e.message)\n ? \"\"\n : \"\\nMessage of caught error is: \" + e.message) +\n \"\\nStacktrace:\\n\" +\n e.stack,\n this.delegate.getTextSpan()\n );\n }\n }\n\n getKind(): ExprKind {\n return this.delegate.getKind();\n }\n\n getType(): ExprType {\n return this.delegate.getType();\n }\n\n toExprString(): string {\n return this.delegate.toExprString();\n }\n}\n"]}
|
|
@@ -34,7 +34,7 @@ class PROPERTY extends Func_js_1.Func {
|
|
|
34
34
|
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Property name must be a string", propertyNameVal, callingExpr.getTextSpan());
|
|
35
35
|
}
|
|
36
36
|
const propertyName = propertyNameVal.stringValue;
|
|
37
|
-
const resultingObjectAccessor = accessorFun(propertyName);
|
|
37
|
+
const resultingObjectAccessor = accessorFun.call(objectRef, propertyName);
|
|
38
38
|
if ((0, IfcExpressionUtils_js_1.isNullish)(resultingObjectAccessor)) {
|
|
39
39
|
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.IFC_PROPERTY_NOT_FOUND, `No ifc property found with name '${propertyName}'`, this.getName(), propertyName, callingExpr.getTextSpan());
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/PROPERTY.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8CAAwC;AAExC,+DAOiC;AACjC,kFAA4E;AAC5E,mDAA6C;AAC7C,8EAAwE;AACxE,kEAA4D;AAC5D,+EAAgE;AAChE,qDAAqD;AAIrD,MAAa,QAAS,SAAQ,cAAI;IAIhC;QACE,KAAK,CAAC,UAAU,EAAE;YAChB,IAAI,gDAAqB,CACvB,IAAI,EACJ,QAAQ,CAAC,cAAc,EACvB,gBAAK,CAAC,EAAE,CACN,eAAI,CAAC,eAAe,EACpB,eAAI,CAAC,oBAAoB,EACzB,eAAI,CAAC,mBAAmB,CACzB,CACF;YACD,IAAI,oBAAO,CAAS,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB;aACjC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;aAC5B,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAC5C,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;YACF,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE;gBACxC,OAAO,IAAI,mEAA+C,CACxD,sBAAQ,CAAC,kBAAkB,EAC3B,2CAA2C,EAC3C,IAAI,CAAC,OAAO,EAAE,EACd,QAAQ,CAAC,iBAAiB,EAC1B,CAAC,EACD,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,IAAI,CAAC,4BAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;gBACnD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,gCAAgC,EAChC,eAAe,EACf,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,MAAM,YAAY,GAAW,eAAe,CAAC,WAAW,CAAC;YACzD,MAAM,uBAAuB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/PROPERTY.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAClC,8CAAwC;AAExC,+DAOiC;AACjC,kFAA4E;AAC5E,mDAA6C;AAC7C,8EAAwE;AACxE,kEAA4D;AAC5D,+EAAgE;AAChE,qDAAqD;AAIrD,MAAa,QAAS,SAAQ,cAAI;IAIhC;QACE,KAAK,CAAC,UAAU,EAAE;YAChB,IAAI,gDAAqB,CACvB,IAAI,EACJ,QAAQ,CAAC,cAAc,EACvB,gBAAK,CAAC,EAAE,CACN,eAAI,CAAC,eAAe,EACpB,eAAI,CAAC,oBAAoB,EACzB,eAAI,CAAC,mBAAmB,CACzB,CACF;YACD,IAAI,oBAAO,CAAS,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB;aACjC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;aAC5B,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAC5C,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;YACF,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE;gBACxC,OAAO,IAAI,mEAA+C,CACxD,sBAAQ,CAAC,kBAAkB,EAC3B,2CAA2C,EAC3C,IAAI,CAAC,OAAO,EAAE,EACd,QAAQ,CAAC,iBAAiB,EAC1B,CAAC,EACD,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,IAAI,CAAC,4BAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;gBACnD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,gCAAgC,EAChC,eAAe,EACf,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,MAAM,YAAY,GAAW,eAAe,CAAC,WAAW,CAAC;YACzD,MAAM,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC1E,IAAI,IAAA,iCAAS,EAAC,uBAAuB,CAAC,EAAE;gBACtC,OAAO,IAAI,oEAAgD,CACzD,sBAAQ,CAAC,QAAQ,EACjB,kCAAc,CAAC,sBAAsB,EACrC,oCAAoC,YAAY,GAAG,EACnD,IAAI,CAAC,OAAO,EAAE,EACd,YAAY,EACZ,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,sCAAkB,CAC3B,4CAAmB,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAChD,CAAC;aACH;SACF;QACD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,6DAA6D,EAC7D,SAAS,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;IACJ,CAAC;;AA5EH,4BA6EC;AA5EiB,uBAAc,GAAG,WAAW,CAAC;AAC7B,0BAAiB,GAAG,cAAc,CAAC","file":"expression/function/impl/PROPERTY.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArg } from \"../FuncArg.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationObjectNotFoundErrorObj,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ObjectAccessorValue } from \"../../../value/ObjectAccessorValue.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { FuncArgObjectAccessor } from \"../arg/FuncArgObjectAccessor.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils.js\";\nimport { Type, Types } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class PROPERTY extends Func {\n static readonly KEY_OBJECT_REF = \"objectRef\";\n static readonly KEY_PROPERTY_NAME = \"propertyName\";\n\n constructor() {\n super(\"PROPERTY\", [\n new FuncArgObjectAccessor(\n true,\n PROPERTY.KEY_OBJECT_REF,\n Types.or(\n Type.IFC_ELEMENT_REF,\n Type.IFC_PROPERTY_SET_REF,\n Type.IFC_TYPE_OBJECT_REF\n )\n ),\n new FuncArg<string>(false, PROPERTY.KEY_PROPERTY_NAME),\n ]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.IFC_PROPERTY_REF;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments\n .get(PROPERTY.KEY_OBJECT_REF)\n .getValue();\n const accessorFun = objectRef[\"getIfcPropertyAccessor\"];\n if (typeof accessorFun === \"function\") {\n const propertyNameVal = evaluatedArguments.get(\n PROPERTY.KEY_PROPERTY_NAME\n );\n if (typeof propertyNameVal === undefined) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Cannot access property: no name specified\",\n this.getName(),\n PROPERTY.KEY_PROPERTY_NAME,\n 1,\n callingExpr.getTextSpan()\n );\n }\n if (!StringValue.isStringValueType(propertyNameVal)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Property name must be a string\",\n propertyNameVal,\n callingExpr.getTextSpan()\n );\n }\n const propertyName: string = propertyNameVal.stringValue;\n const resultingObjectAccessor = accessorFun.call(objectRef, propertyName);\n if (isNullish(resultingObjectAccessor)) {\n return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.IFC_PROPERTY_NOT_FOUND,\n `No ifc property found with name '${propertyName}'`,\n this.getName(),\n propertyName,\n callingExpr.getTextSpan()\n );\n } else {\n return new ExprEvalSuccessObj(\n ObjectAccessorValue.of(resultingObjectAccessor)\n );\n }\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Cannot evaluate function 'property' on the specified object\",\n objectRef,\n callingExpr.getTextSpan()\n );\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ class TYPE extends Func_js_1.Func {
|
|
|
21
21
|
const objectRef = evaluatedArguments.get(TYPE.KEY_OBJECT_REF).getValue();
|
|
22
22
|
const accessorFun = objectRef["getIfcTypeObjectAccessor"];
|
|
23
23
|
if (typeof accessorFun === "function") {
|
|
24
|
-
const resultingObjectAccessor = accessorFun();
|
|
24
|
+
const resultingObjectAccessor = accessorFun.call(objectRef);
|
|
25
25
|
if ((0, IfcExpressionUtils_js_1.isNullish)(resultingObjectAccessor)) {
|
|
26
26
|
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND, `No type object found`, this.getName(), "[Type of IFC element]", callingExpr.getTextSpan());
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/function/impl/TYPE.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC,+DAMiC;AACjC,kFAA4E;AAC5E,mDAA6C;AAC7C,8EAAwE;AACxE,+EAAgE;AAChE,qDAA8C;AAI9C,MAAa,IAAK,SAAQ,cAAI;IAG5B;QACE,KAAK,CAAC,MAAM,EAAE;YACZ,IAAI,gDAAqB,CACvB,IAAI,EACJ,IAAI,CAAC,cAAc,EACnB,eAAI,CAAC,eAAe,CACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,uBAAuB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"sources":["../../src/expression/function/impl/TYPE.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC,+DAMiC;AACjC,kFAA4E;AAC5E,mDAA6C;AAC7C,8EAAwE;AACxE,+EAAgE;AAChE,qDAA8C;AAI9C,MAAa,IAAK,SAAQ,cAAI;IAG5B;QACE,KAAK,CAAC,MAAM,EAAE;YACZ,IAAI,gDAAqB,CACvB,IAAI,EACJ,IAAI,CAAC,cAAc,EACnB,eAAI,CAAC,eAAe,CACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,eAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,IAAA,iCAAS,EAAC,uBAAuB,CAAC,EAAE;gBACtC,OAAO,IAAI,oEAAgD,CACzD,sBAAQ,CAAC,QAAQ,EACjB,kCAAc,CAAC,yBAAyB,EACxC,sBAAsB,EACtB,IAAI,CAAC,OAAO,EAAE,EACd,uBAAuB,EACvB,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,sCAAkB,CAC3B,4CAAmB,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAChD,CAAC;aACH;SACF;QACD,OAAO,IAAI,wCAAoB,CAC7B,sBAAQ,CAAC,kBAAkB,EAC3B,4BAA4B,IAAI,CAAC,OAAO,EAAE,0BAA0B,EACpE,SAAS,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;IACJ,CAAC;;AA9CH,oBA+CC;AA9CiB,mBAAc,GAAG,WAAW,CAAC","file":"expression/function/impl/TYPE.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationObjectNotFoundErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ObjectAccessorValue } from \"../../../value/ObjectAccessorValue.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { FuncArgObjectAccessor } from \"../arg/FuncArgObjectAccessor.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 TYPE extends Func {\n static readonly KEY_OBJECT_REF = \"objectRef\";\n\n constructor() {\n super(\"TYPE\", [\n new FuncArgObjectAccessor(\n true,\n TYPE.KEY_OBJECT_REF,\n Type.IFC_ELEMENT_REF\n ),\n ]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.IFC_TYPE_OBJECT_REF;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments.get(TYPE.KEY_OBJECT_REF).getValue();\n const accessorFun = objectRef[\"getIfcTypeObjectAccessor\"];\n if (typeof accessorFun === \"function\") {\n const resultingObjectAccessor = accessorFun.call(objectRef);\n if (isNullish(resultingObjectAccessor)) {\n return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND,\n `No type object found`,\n this.getName(),\n \"[Type of IFC element]\",\n callingExpr.getTextSpan()\n );\n } else {\n return new ExprEvalSuccessObj(\n ObjectAccessorValue.of(resultingObjectAccessor)\n );\n }\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Cannot evaluate function ${this.getName()} on the specified object`,\n objectRef,\n callingExpr.getTextSpan()\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Expr } from "./Expr.js";
|
|
2
|
+
import { IfcExpressionContext } from "../context/IfcExpressionContext.js";
|
|
3
|
+
import { ExprEvalResult } from "./ExprEvalResult.js";
|
|
4
|
+
import { ExprKind } from "./ExprKind.js";
|
|
5
|
+
import { ExprType } from "../type/ExprType.js";
|
|
6
|
+
export declare class ExprFacade<T> {
|
|
7
|
+
private readonly delegate;
|
|
8
|
+
constructor(delegate: Expr<T>);
|
|
9
|
+
evaluate(ctx: IfcExpressionContext): ExprEvalResult<T>;
|
|
10
|
+
getKind(): ExprKind;
|
|
11
|
+
getType(): ExprType;
|
|
12
|
+
toExprString(): string;
|
|
13
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { ParseTreeListener } from "antlr4";
|
|
2
|
-
import { ExprContext } from "./IfcExpressionParser";
|
|
3
|
-
import { SEComparisonContext } from "./IfcExpressionParser";
|
|
4
|
-
import { SELiteralContext } from "./IfcExpressionParser";
|
|
5
|
-
import { SEParenthesisContext } from "./IfcExpressionParser";
|
|
6
|
-
import { SEMulDivContext } from "./IfcExpressionParser";
|
|
7
|
-
import { SEPowerContext } from "./IfcExpressionParser";
|
|
8
|
-
import { SEBooleanBinaryOpContext } from "./IfcExpressionParser";
|
|
9
|
-
import { SEFunctionCallContext } from "./IfcExpressionParser";
|
|
10
|
-
import { SEArrayExprContext } from "./IfcExpressionParser";
|
|
11
|
-
import { SENotContext } from "./IfcExpressionParser";
|
|
12
|
-
import { SEVariableRefContext } from "./IfcExpressionParser";
|
|
13
|
-
import { SEUnaryMultipleMinusContext } from "./IfcExpressionParser";
|
|
14
|
-
import { SEUnaryMinusContext } from "./IfcExpressionParser";
|
|
15
|
-
import { SEAddSubContext } from "./IfcExpressionParser";
|
|
16
|
-
import { SEMethodCallContext } from "./IfcExpressionParser";
|
|
17
|
-
import { MethodCallChainInnerContext } from "./IfcExpressionParser";
|
|
18
|
-
import { MethodCallChainEndContext } from "./IfcExpressionParser";
|
|
19
|
-
import { FunctionCallContext } from "./IfcExpressionParser";
|
|
20
|
-
import { ExprListContext } from "./IfcExpressionParser";
|
|
21
|
-
import { ArrayExprContext } from "./IfcExpressionParser";
|
|
22
|
-
import { ArrayElementListContext } from "./IfcExpressionParser";
|
|
23
|
-
import { LiteralContext } from "./IfcExpressionParser";
|
|
24
|
-
import { NumLiteralContext } from "./IfcExpressionParser";
|
|
25
|
-
import { StringLiteralContext } from "./IfcExpressionParser";
|
|
26
|
-
import { BooleanLiteralContext } from "./IfcExpressionParser";
|
|
27
|
-
import { VariableRefContext } from "./IfcExpressionParser";
|
|
2
|
+
import { ExprContext } from "./IfcExpressionParser.js";
|
|
3
|
+
import { SEComparisonContext } from "./IfcExpressionParser.js";
|
|
4
|
+
import { SELiteralContext } from "./IfcExpressionParser.js";
|
|
5
|
+
import { SEParenthesisContext } from "./IfcExpressionParser.js";
|
|
6
|
+
import { SEMulDivContext } from "./IfcExpressionParser.js";
|
|
7
|
+
import { SEPowerContext } from "./IfcExpressionParser.js";
|
|
8
|
+
import { SEBooleanBinaryOpContext } from "./IfcExpressionParser.js";
|
|
9
|
+
import { SEFunctionCallContext } from "./IfcExpressionParser.js";
|
|
10
|
+
import { SEArrayExprContext } from "./IfcExpressionParser.js";
|
|
11
|
+
import { SENotContext } from "./IfcExpressionParser.js";
|
|
12
|
+
import { SEVariableRefContext } from "./IfcExpressionParser.js";
|
|
13
|
+
import { SEUnaryMultipleMinusContext } from "./IfcExpressionParser.js";
|
|
14
|
+
import { SEUnaryMinusContext } from "./IfcExpressionParser.js";
|
|
15
|
+
import { SEAddSubContext } from "./IfcExpressionParser.js";
|
|
16
|
+
import { SEMethodCallContext } from "./IfcExpressionParser.js";
|
|
17
|
+
import { MethodCallChainInnerContext } from "./IfcExpressionParser.js";
|
|
18
|
+
import { MethodCallChainEndContext } from "./IfcExpressionParser.js";
|
|
19
|
+
import { FunctionCallContext } from "./IfcExpressionParser.js";
|
|
20
|
+
import { ExprListContext } from "./IfcExpressionParser.js";
|
|
21
|
+
import { ArrayExprContext } from "./IfcExpressionParser.js";
|
|
22
|
+
import { ArrayElementListContext } from "./IfcExpressionParser.js";
|
|
23
|
+
import { LiteralContext } from "./IfcExpressionParser.js";
|
|
24
|
+
import { NumLiteralContext } from "./IfcExpressionParser.js";
|
|
25
|
+
import { StringLiteralContext } from "./IfcExpressionParser.js";
|
|
26
|
+
import { BooleanLiteralContext } from "./IfcExpressionParser.js";
|
|
27
|
+
import { VariableRefContext } from "./IfcExpressionParser.js";
|
|
28
28
|
/**
|
|
29
29
|
* This interface defines a complete listener for a parse tree produced by
|
|
30
30
|
* `IfcExpressionParser`.
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { ParseTreeVisitor } from 'antlr4';
|
|
2
|
-
import { ExprContext } from "./IfcExpressionParser";
|
|
3
|
-
import { SEComparisonContext } from "./IfcExpressionParser";
|
|
4
|
-
import { SELiteralContext } from "./IfcExpressionParser";
|
|
5
|
-
import { SEParenthesisContext } from "./IfcExpressionParser";
|
|
6
|
-
import { SEMulDivContext } from "./IfcExpressionParser";
|
|
7
|
-
import { SEPowerContext } from "./IfcExpressionParser";
|
|
8
|
-
import { SEBooleanBinaryOpContext } from "./IfcExpressionParser";
|
|
9
|
-
import { SEFunctionCallContext } from "./IfcExpressionParser";
|
|
10
|
-
import { SEArrayExprContext } from "./IfcExpressionParser";
|
|
11
|
-
import { SENotContext } from "./IfcExpressionParser";
|
|
12
|
-
import { SEVariableRefContext } from "./IfcExpressionParser";
|
|
13
|
-
import { SEUnaryMultipleMinusContext } from "./IfcExpressionParser";
|
|
14
|
-
import { SEUnaryMinusContext } from "./IfcExpressionParser";
|
|
15
|
-
import { SEAddSubContext } from "./IfcExpressionParser";
|
|
16
|
-
import { SEMethodCallContext } from "./IfcExpressionParser";
|
|
17
|
-
import { MethodCallChainInnerContext } from "./IfcExpressionParser";
|
|
18
|
-
import { MethodCallChainEndContext } from "./IfcExpressionParser";
|
|
19
|
-
import { FunctionCallContext } from "./IfcExpressionParser";
|
|
20
|
-
import { ExprListContext } from "./IfcExpressionParser";
|
|
21
|
-
import { ArrayExprContext } from "./IfcExpressionParser";
|
|
22
|
-
import { ArrayElementListContext } from "./IfcExpressionParser";
|
|
23
|
-
import { LiteralContext } from "./IfcExpressionParser";
|
|
24
|
-
import { NumLiteralContext } from "./IfcExpressionParser";
|
|
25
|
-
import { StringLiteralContext } from "./IfcExpressionParser";
|
|
26
|
-
import { BooleanLiteralContext } from "./IfcExpressionParser";
|
|
27
|
-
import { VariableRefContext } from "./IfcExpressionParser";
|
|
2
|
+
import { ExprContext } from "./IfcExpressionParser.js";
|
|
3
|
+
import { SEComparisonContext } from "./IfcExpressionParser.js";
|
|
4
|
+
import { SELiteralContext } from "./IfcExpressionParser.js";
|
|
5
|
+
import { SEParenthesisContext } from "./IfcExpressionParser.js";
|
|
6
|
+
import { SEMulDivContext } from "./IfcExpressionParser.js";
|
|
7
|
+
import { SEPowerContext } from "./IfcExpressionParser.js";
|
|
8
|
+
import { SEBooleanBinaryOpContext } from "./IfcExpressionParser.js";
|
|
9
|
+
import { SEFunctionCallContext } from "./IfcExpressionParser.js";
|
|
10
|
+
import { SEArrayExprContext } from "./IfcExpressionParser.js";
|
|
11
|
+
import { SENotContext } from "./IfcExpressionParser.js";
|
|
12
|
+
import { SEVariableRefContext } from "./IfcExpressionParser.js";
|
|
13
|
+
import { SEUnaryMultipleMinusContext } from "./IfcExpressionParser.js";
|
|
14
|
+
import { SEUnaryMinusContext } from "./IfcExpressionParser.js";
|
|
15
|
+
import { SEAddSubContext } from "./IfcExpressionParser.js";
|
|
16
|
+
import { SEMethodCallContext } from "./IfcExpressionParser.js";
|
|
17
|
+
import { MethodCallChainInnerContext } from "./IfcExpressionParser.js";
|
|
18
|
+
import { MethodCallChainEndContext } from "./IfcExpressionParser.js";
|
|
19
|
+
import { FunctionCallContext } from "./IfcExpressionParser.js";
|
|
20
|
+
import { ExprListContext } from "./IfcExpressionParser.js";
|
|
21
|
+
import { ArrayExprContext } from "./IfcExpressionParser.js";
|
|
22
|
+
import { ArrayElementListContext } from "./IfcExpressionParser.js";
|
|
23
|
+
import { LiteralContext } from "./IfcExpressionParser.js";
|
|
24
|
+
import { NumLiteralContext } from "./IfcExpressionParser.js";
|
|
25
|
+
import { StringLiteralContext } from "./IfcExpressionParser.js";
|
|
26
|
+
import { BooleanLiteralContext } from "./IfcExpressionParser.js";
|
|
27
|
+
import { VariableRefContext } from "./IfcExpressionParser.js";
|
|
28
28
|
/**
|
|
29
29
|
* This interface defines a complete generic visitor for a parse tree produced
|
|
30
30
|
* by `IfcExpressionParser`.
|
|
@@ -24,7 +24,8 @@ import { ValidationException } from "./error/ValidationException.js";
|
|
|
24
24
|
import { mapException } from "./error/ExceptionToExprEvalErrorMapper.js";
|
|
25
25
|
import { NopContext } from "./context/NopContext.js";
|
|
26
26
|
import { ExprToTextInputLinker } from "./compiler/ExprToTextInputLinker.js";
|
|
27
|
-
|
|
27
|
+
import { ExprFacade } from "./expression/ExprFacade.js";
|
|
28
|
+
export { IfcElementAccessor, StringValue, BooleanValue, LogicalValue, NumericValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
|
|
28
29
|
export class IfcExpressionParseResult {
|
|
29
30
|
constructor(input, typeManager, exprContext) {
|
|
30
31
|
this._typeManager = typeManager;
|
|
@@ -90,7 +91,7 @@ export class IfcExpression {
|
|
|
90
91
|
const compiler = new ExprCompiler(parseResult.typeManager);
|
|
91
92
|
const expr = compiler.visit(parseResult.parseTree);
|
|
92
93
|
ExprToTextInputLinker.linkTextToExpressions(parseResult.input, expr, compiler.getExprManager());
|
|
93
|
-
return expr;
|
|
94
|
+
return new ExprFacade(expr);
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* Evaluates the specified input expression and returns the evaluation result. The parse
|
|
@@ -107,7 +108,7 @@ export class IfcExpression {
|
|
|
107
108
|
return mapException(errorListener.getException());
|
|
108
109
|
}
|
|
109
110
|
const compiledExpression = this.compile(parseResult);
|
|
110
|
-
return compiledExpression.evaluate(context
|
|
111
|
+
return compiledExpression.evaluate(context);
|
|
111
112
|
}
|
|
112
113
|
static formatError(input, error) {
|
|
113
114
|
const lines = ["** Error **"];
|
|
@@ -129,14 +130,7 @@ export class IfcExpression {
|
|
|
129
130
|
.join("\n");
|
|
130
131
|
}
|
|
131
132
|
static evaluateExpression(expr, context = new NopContext()) {
|
|
132
|
-
|
|
133
|
-
// if the expr was created by parsing an input, it has a textSpan set.
|
|
134
|
-
// If the expr was created programmatically, we have to generate its exprString once, which causes its
|
|
135
|
-
// textspan to be set.
|
|
136
|
-
// make sure we know the position
|
|
137
|
-
expr.toExprString();
|
|
138
|
-
}
|
|
139
|
-
return expr.evaluate(context, new Map());
|
|
133
|
+
return expr.evaluate(context);
|
|
140
134
|
}
|
|
141
135
|
}
|
|
142
136
|
//# sourceMappingURL=IfcExpression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): Expr<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return expr;\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context, new Map<string, any>());\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: Expr<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n if (isNullish(expr.getTextSpan())) {\n // if the expr was created by parsing an input, it has a textSpan set.\n // If the expr was created programmatically, we have to generate its exprString once, which causes its\n // textspan to be set.\n // make sure we know the position\n expr.toExprString();\n }\n return expr.evaluate(context, new Map());\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["IfcExpression.ts"],"names":[],"mappings":"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","file":"IfcExpression.js","sourcesContent":["import {\n CharStream,\n CommonTokenStream,\n ErrorListener,\n ParserRuleContext,\n ParseTreeWalker,\n Token,\n} from \"antlr4\";\nimport { ExprCompiler } from \"./compiler/ExprCompiler.js\";\nimport { IfcExpressionErrorListener } from \"./IfcExpressionErrorListener.js\";\nimport { IfcExpressionValidationListener } from \"./compiler/IfcExpressionValidationListener.js\";\n\nimport { isNullish, isPresent } from \"./util/IfcExpressionUtils.js\";\nimport { IfcExpressionContext } from \"./context/IfcExpressionContext.js\";\nimport { Expr } from \"./expression/Expr.js\";\n\nimport { IfcElementAccessor } from \"./context/IfcElementAccessor.js\";\nimport { Value } from \"./value/Value.js\";\nimport { StringValue } from \"./value/StringValue.js\";\nimport { NumericValue } from \"./value/NumericValue.js\";\nimport { BooleanValue } from \"./value/BooleanValue.js\";\nimport { LogicalValue } from \"./value/LogicalValue.js\";\nimport { ReferenceValue } from \"./value/ReferenceValue.js\";\nimport { IfcPropertySetAccessor } from \"./context/IfcPropertySetAccessor.js\";\nimport { IfcPropertyAccessor } from \"./context/IfcPropertyAccessor.js\";\nimport { IfcRootObjectAccessor } from \"./context/IfcRootObjectAccessor.js\";\nimport { IfcTypeObjectAccessor } from \"./context/IfcTypeObjectAccessor.js\";\nimport { NamedObjectAccessor } from \"./context/NamedObjectAccessor.js\";\nimport IfcExpressionParser from \"./gen/parser/IfcExpressionParser.js\";\nimport IfcExpressionVisitor from \"./gen/parser/IfcExpressionVisitor.js\";\nimport IfcExpressionLexer from \"./gen/parser/IfcExpressionLexer.js\";\nimport { ObjectAccessor } from \"./context/ObjectAccessor.js\";\nimport { IfcExpressionEvaluationException } from \"./expression/IfcExpressionEvaluationException.js\";\nimport type { ExpressionValue } from \"./value/ExpressionValue.js\";\nimport type { BoxedValueTypes } from \"./value/BoxedValueTypes.js\";\nimport {\n ExprEvalError,\n ExprEvalResult,\n isExprEvalError,\n isExprEvalSuccess,\n} from \"./expression/ExprEvalResult.js\";\nimport { ExprKind } from \"./expression/ExprKind.js\";\nimport { ValidationException } from \"./error/ValidationException.js\";\nimport { TypeManager } from \"./compiler/TypeManager.js\";\nimport { mapException } from \"./error/ExceptionToExprEvalErrorMapper.js\";\nimport { NopContext } from \"./context/NopContext.js\";\nimport { ExprToTextInputLinker } from \"./compiler/ExprToTextInputLinker.js\";\nimport { TextSpan } from \"./util/TextSpan.js\";\nimport { ExprFacade } from \"./expression/ExprFacade\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n ExprFacade,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): ExprFacade<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return new ExprFacade(expr);\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context);\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: ExprFacade<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n return expr.evaluate(context);\n }\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ExprEvalErrorObj, ExprEvalStatus, } from "./ExprEvalResult.js";
|
|
2
|
+
import { isNullish } from "../util/IfcExpressionUtils.js";
|
|
3
|
+
export class ExprFacade {
|
|
4
|
+
constructor(delegate) {
|
|
5
|
+
this.delegate = delegate;
|
|
6
|
+
}
|
|
7
|
+
evaluate(ctx) {
|
|
8
|
+
try {
|
|
9
|
+
let span = this.delegate.getTextSpan();
|
|
10
|
+
if (isNullish(span)) {
|
|
11
|
+
this.delegate.toExprString();
|
|
12
|
+
}
|
|
13
|
+
return this.delegate.evaluate(ctx, new Map());
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
return new ExprEvalErrorObj(this.delegate.getKind(), ExprEvalStatus.ERROR, "Unexpected error occurred during expression evaluation, this is a bug - please report." +
|
|
17
|
+
(isNullish(e.message)
|
|
18
|
+
? ""
|
|
19
|
+
: "\nMessage of caught error is: " + e.message) +
|
|
20
|
+
"\nStacktrace:\n" +
|
|
21
|
+
e.stack, this.delegate.getTextSpan());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
getKind() {
|
|
25
|
+
return this.delegate.getKind();
|
|
26
|
+
}
|
|
27
|
+
getType() {
|
|
28
|
+
return this.delegate.getType();
|
|
29
|
+
}
|
|
30
|
+
toExprString() {
|
|
31
|
+
return this.delegate.toExprString();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ExprFacade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["expression/ExprFacade.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAEhB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,OAAO,UAAU;IAGrB,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,GAAyB;QAChC,IAAI;YACF,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;aAC9B;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,EAAe,CAAC,CAAC;SAC5D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EACvB,cAAc,CAAC,KAAK,EACpB,wFAAwF;gBACtF,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;oBACnB,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,gCAAgC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACjD,iBAAiB;gBACjB,CAAC,CAAC,KAAK,EACT,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC5B,CAAC;SACH;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;CACF","file":"expression/ExprFacade.js","sourcesContent":["import { Expr } from \"./Expr.js\";\nimport { IfcExpressionContext } from \"../context/IfcExpressionContext.js\";\nimport {\n ExprEvalErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n} from \"./ExprEvalResult.js\";\nimport { ExprKind } from \"./ExprKind.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class ExprFacade<T> {\n private readonly delegate: Expr<T>;\n\n constructor(delegate: Expr<T>) {\n this.delegate = delegate;\n }\n\n evaluate(ctx: IfcExpressionContext): ExprEvalResult<T> {\n try {\n let span = this.delegate.getTextSpan();\n if (isNullish(span)) {\n this.delegate.toExprString();\n }\n return this.delegate.evaluate(ctx, new Map<string, any>());\n } catch (e) {\n return new ExprEvalErrorObj(\n this.delegate.getKind(),\n ExprEvalStatus.ERROR,\n \"Unexpected error occurred during expression evaluation, this is a bug - please report.\" +\n (isNullish(e.message)\n ? \"\"\n : \"\\nMessage of caught error is: \" + e.message) +\n \"\\nStacktrace:\\n\" +\n e.stack,\n this.delegate.getTextSpan()\n );\n }\n }\n\n getKind(): ExprKind {\n return this.delegate.getKind();\n }\n\n getType(): ExprType {\n return this.delegate.getType();\n }\n\n toExprString(): string {\n return this.delegate.toExprString();\n }\n}\n"]}
|
|
@@ -31,7 +31,7 @@ export class PROPERTY extends Func {
|
|
|
31
31
|
return new ExprEvalTypeErrorObj(ExprKind.FUNCTION_ARGUMENTS, "Property name must be a string", propertyNameVal, callingExpr.getTextSpan());
|
|
32
32
|
}
|
|
33
33
|
const propertyName = propertyNameVal.stringValue;
|
|
34
|
-
const resultingObjectAccessor = accessorFun(propertyName);
|
|
34
|
+
const resultingObjectAccessor = accessorFun.call(objectRef, propertyName);
|
|
35
35
|
if (isNullish(resultingObjectAccessor)) {
|
|
36
36
|
return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind.FUNCTION, ExprEvalStatus.IFC_PROPERTY_NOT_FOUND, `No ifc property found with name '${propertyName}'`, this.getName(), propertyName, callingExpr.getTextSpan());
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/impl/PROPERTY.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,gDAAgD,EAChD,+CAA+C,EAE/C,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAIrD,MAAM,OAAO,QAAS,SAAQ,IAAI;IAIhC;QACE,KAAK,CAAC,UAAU,EAAE;YAChB,IAAI,qBAAqB,CACvB,IAAI,EACJ,QAAQ,CAAC,cAAc,EACvB,KAAK,CAAC,EAAE,CACN,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,mBAAmB,CACzB,CACF;YACD,IAAI,OAAO,CAAS,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB;aACjC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;aAC5B,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAC5C,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;YACF,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE;gBACxC,OAAO,IAAI,+CAA+C,CACxD,QAAQ,CAAC,kBAAkB,EAC3B,2CAA2C,EAC3C,IAAI,CAAC,OAAO,EAAE,EACd,QAAQ,CAAC,iBAAiB,EAC1B,CAAC,EACD,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;gBACnD,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,kBAAkB,EAC3B,gCAAgC,EAChC,eAAe,EACf,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;YACD,MAAM,YAAY,GAAW,eAAe,CAAC,WAAW,CAAC;YACzD,MAAM,uBAAuB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/PROPERTY.ts"],"names":[],"mappings":"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","file":"expression/function/impl/PROPERTY.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { FuncArg } from \"../FuncArg.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationObjectNotFoundErrorObj,\n ExprEvalMissingRequiredFunctionArgumentErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ObjectAccessorValue } from \"../../../value/ObjectAccessorValue.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { FuncArgObjectAccessor } from \"../arg/FuncArgObjectAccessor.js\";\nimport { StringValue } from \"../../../value/StringValue.js\";\nimport { isNullish } from \"../../../util/IfcExpressionUtils.js\";\nimport { Type, Types } from \"../../../type/Types.js\";\nimport { ExprType } from \"../../../type/ExprType.js\";\nimport { FunctionExpr } from \"../FunctionExpr.js\";\n\nexport class PROPERTY extends Func {\n static readonly KEY_OBJECT_REF = \"objectRef\";\n static readonly KEY_PROPERTY_NAME = \"propertyName\";\n\n constructor() {\n super(\"PROPERTY\", [\n new FuncArgObjectAccessor(\n true,\n PROPERTY.KEY_OBJECT_REF,\n Types.or(\n Type.IFC_ELEMENT_REF,\n Type.IFC_PROPERTY_SET_REF,\n Type.IFC_TYPE_OBJECT_REF\n )\n ),\n new FuncArg<string>(false, PROPERTY.KEY_PROPERTY_NAME),\n ]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.IFC_PROPERTY_REF;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments\n .get(PROPERTY.KEY_OBJECT_REF)\n .getValue();\n const accessorFun = objectRef[\"getIfcPropertyAccessor\"];\n if (typeof accessorFun === \"function\") {\n const propertyNameVal = evaluatedArguments.get(\n PROPERTY.KEY_PROPERTY_NAME\n );\n if (typeof propertyNameVal === undefined) {\n return new ExprEvalMissingRequiredFunctionArgumentErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Cannot access property: no name specified\",\n this.getName(),\n PROPERTY.KEY_PROPERTY_NAME,\n 1,\n callingExpr.getTextSpan()\n );\n }\n if (!StringValue.isStringValueType(propertyNameVal)) {\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Property name must be a string\",\n propertyNameVal,\n callingExpr.getTextSpan()\n );\n }\n const propertyName: string = propertyNameVal.stringValue;\n const resultingObjectAccessor = accessorFun.call(objectRef, propertyName);\n if (isNullish(resultingObjectAccessor)) {\n return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.IFC_PROPERTY_NOT_FOUND,\n `No ifc property found with name '${propertyName}'`,\n this.getName(),\n propertyName,\n callingExpr.getTextSpan()\n );\n } else {\n return new ExprEvalSuccessObj(\n ObjectAccessorValue.of(resultingObjectAccessor)\n );\n }\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n \"Cannot evaluate function 'property' on the specified object\",\n objectRef,\n callingExpr.getTextSpan()\n );\n }\n}\n"]}
|
|
@@ -18,7 +18,7 @@ export class TYPE extends Func {
|
|
|
18
18
|
const objectRef = evaluatedArguments.get(TYPE.KEY_OBJECT_REF).getValue();
|
|
19
19
|
const accessorFun = objectRef["getIfcTypeObjectAccessor"];
|
|
20
20
|
if (typeof accessorFun === "function") {
|
|
21
|
-
const resultingObjectAccessor = accessorFun();
|
|
21
|
+
const resultingObjectAccessor = accessorFun.call(objectRef);
|
|
22
22
|
if (isNullish(resultingObjectAccessor)) {
|
|
23
23
|
return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind.FUNCTION, ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND, `No type object found`, this.getName(), "[Type of IFC element]", callingExpr.getTextSpan());
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["expression/function/impl/TYPE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EACL,gDAAgD,EAEhD,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,MAAM,OAAO,IAAK,SAAQ,IAAI;IAG5B;QACE,KAAK,CAAC,MAAM,EAAE;YACZ,IAAI,qBAAqB,CACvB,IAAI,EACJ,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,CACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,uBAAuB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"sources":["expression/function/impl/TYPE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EACL,gDAAgD,EAEhD,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,MAAM,OAAO,IAAK,SAAQ,IAAI;IAG5B;QACE,KAAK,CAAC,MAAM,EAAE;YACZ,IAAI,qBAAqB,CACvB,IAAI,EACJ,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,CACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,aAA8B;QAC1C,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAES,eAAe,CACvB,WAAyB,EACzB,kBAAgD;QAEhD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1D,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,uBAAuB,CAAC,EAAE;gBACtC,OAAO,IAAI,gDAAgD,CACzD,QAAQ,CAAC,QAAQ,EACjB,cAAc,CAAC,yBAAyB,EACxC,sBAAsB,EACtB,IAAI,CAAC,OAAO,EAAE,EACd,uBAAuB,EACvB,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,kBAAkB,CAC3B,mBAAmB,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAChD,CAAC;aACH;SACF;QACD,OAAO,IAAI,oBAAoB,CAC7B,QAAQ,CAAC,kBAAkB,EAC3B,4BAA4B,IAAI,CAAC,OAAO,EAAE,0BAA0B,EACpE,SAAS,EACT,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;IACJ,CAAC;;AA7Ce,mBAAc,GAAG,WAAW,CAAC","file":"expression/function/impl/TYPE.js","sourcesContent":["import { Func } from \"../Func.js\";\nimport { ExpressionValue } from \"../../../value/ExpressionValue.js\";\nimport {\n ExprEvalFunctionEvaluationObjectNotFoundErrorObj,\n ExprEvalResult,\n ExprEvalStatus,\n ExprEvalSuccessObj,\n ExprEvalTypeErrorObj,\n} from \"../../ExprEvalResult.js\";\nimport { ObjectAccessorValue } from \"../../../value/ObjectAccessorValue.js\";\nimport { ExprKind } from \"../../ExprKind.js\";\nimport { FuncArgObjectAccessor } from \"../arg/FuncArgObjectAccessor.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 TYPE extends Func {\n static readonly KEY_OBJECT_REF = \"objectRef\";\n\n constructor() {\n super(\"TYPE\", [\n new FuncArgObjectAccessor(\n true,\n TYPE.KEY_OBJECT_REF,\n Type.IFC_ELEMENT_REF\n ),\n ]);\n }\n\n getReturnType(argumentTypes: Array<ExprType>): ExprType {\n return Type.IFC_TYPE_OBJECT_REF;\n }\n\n protected calculateResult(\n callingExpr: FunctionExpr,\n evaluatedArguments: Map<string, ExpressionValue>\n ): ExprEvalResult<ExpressionValue> {\n const objectRef = evaluatedArguments.get(TYPE.KEY_OBJECT_REF).getValue();\n const accessorFun = objectRef[\"getIfcTypeObjectAccessor\"];\n if (typeof accessorFun === \"function\") {\n const resultingObjectAccessor = accessorFun.call(objectRef);\n if (isNullish(resultingObjectAccessor)) {\n return new ExprEvalFunctionEvaluationObjectNotFoundErrorObj(\n ExprKind.FUNCTION,\n ExprEvalStatus.IFC_TYPE_OBJECT_NOT_FOUND,\n `No type object found`,\n this.getName(),\n \"[Type of IFC element]\",\n callingExpr.getTextSpan()\n );\n } else {\n return new ExprEvalSuccessObj(\n ObjectAccessorValue.of(resultingObjectAccessor)\n );\n }\n }\n return new ExprEvalTypeErrorObj(\n ExprKind.FUNCTION_ARGUMENTS,\n `Cannot evaluate function ${this.getName()} on the specified object`,\n objectRef,\n callingExpr.getTextSpan()\n );\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ifc-expressions",
|
|
3
|
-
"version": "2.0.1-beta.
|
|
3
|
+
"version": "2.0.1-beta.5",
|
|
4
4
|
"description": "Parsing and evaluation of IFC expressions",
|
|
5
5
|
"main": "dist/cjs/IfcExpression.js",
|
|
6
6
|
"module": "dist/mjs/IfcExpression.js",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"eslint-config-prettier": "^8.8.0",
|
|
51
51
|
"eslint-plugin-prettier": "^4.2.1",
|
|
52
52
|
"gulp": "^4.0.2",
|
|
53
|
+
"gulp-replace": "^1.1.4",
|
|
53
54
|
"gulp-typescript": "^6.0.0-alpha.1",
|
|
54
55
|
"gulp-uglify": "^3.0.2",
|
|
55
56
|
"jest": "^29.5.0",
|