ifc-expressions 2.3.0-beta.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,13 @@ import { IfcDateValue } from "./value/IfcDateValue.js";
31
31
  import { IfcDateTimeValue } from "./value/IfcDateTimeValue.js";
32
32
  import { IfcTimeValue } from "./value/IfcTimeValue.js";
33
33
  import { IfcTimeStampValue } from "./value/IfcTimeStampValue.js";
34
- export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
34
+ import { ArrayType } from "./type/ArrayType.js";
35
+ import { ExprType } from "./type/ExprType.js";
36
+ import { SimpleType } from "./type/SimpleType.js";
37
+ import { TupleType } from "./type/TupleType.js";
38
+ import { TypeDisjunction } from "./type/TypeDisjunction.js";
39
+ import { Types } from "./type/Types.js";
40
+ export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, ArrayType, ExprType, SimpleType, TupleType, TypeDisjunction, Types, };
35
41
  export type { BoxedValueTypes };
36
42
  export declare class IfcExpressionParseResult {
37
43
  private readonly _input;
@@ -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.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.IfcTimeStampValue = exports.IfcDurationValue = exports.IfcTimeValue = exports.IfcDateTimeValue = exports.IfcDateValue = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
6
+ exports.IfcExpression = exports.IfcExpressionParseResult = exports.Types = exports.TypeDisjunction = exports.TupleType = exports.SimpleType = exports.ArrayType = 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.IfcTimeStampValue = exports.IfcDurationValue = exports.IfcTimeValue = exports.IfcDateTimeValue = exports.IfcDateValue = 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; } });
@@ -63,6 +63,16 @@ const IfcTimeValue_js_1 = require("./value/IfcTimeValue.js");
63
63
  Object.defineProperty(exports, "IfcTimeValue", { enumerable: true, get: function () { return IfcTimeValue_js_1.IfcTimeValue; } });
64
64
  const IfcTimeStampValue_js_1 = require("./value/IfcTimeStampValue.js");
65
65
  Object.defineProperty(exports, "IfcTimeStampValue", { enumerable: true, get: function () { return IfcTimeStampValue_js_1.IfcTimeStampValue; } });
66
+ const ArrayType_js_1 = require("./type/ArrayType.js");
67
+ Object.defineProperty(exports, "ArrayType", { enumerable: true, get: function () { return ArrayType_js_1.ArrayType; } });
68
+ const SimpleType_js_1 = require("./type/SimpleType.js");
69
+ Object.defineProperty(exports, "SimpleType", { enumerable: true, get: function () { return SimpleType_js_1.SimpleType; } });
70
+ const TupleType_js_1 = require("./type/TupleType.js");
71
+ Object.defineProperty(exports, "TupleType", { enumerable: true, get: function () { return TupleType_js_1.TupleType; } });
72
+ const TypeDisjunction_js_1 = require("./type/TypeDisjunction.js");
73
+ Object.defineProperty(exports, "TypeDisjunction", { enumerable: true, get: function () { return TypeDisjunction_js_1.TypeDisjunction; } });
74
+ const Types_js_1 = require("./type/Types.js");
75
+ Object.defineProperty(exports, "Types", { enumerable: true, get: function () { return Types_js_1.Types; } });
66
76
  class IfcExpressionParseResult {
67
77
  constructor(input, typeManager, exprContext) {
68
78
  this._typeManager = typeManager;
@@ -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\";\nimport { ExprFacade } from \"./expression/ExprFacade.js\";\nimport { IfcDurationValue } from \"./value/IfcDurationValue\";\nimport { IfcDateValue } from \"./value/IfcDateValue.js\";\nimport { IfcDateTimeValue } from \"./value/IfcDateTimeValue.js\";\nimport { IfcTimeValue } from \"./value/IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./value/IfcTimeStampValue.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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"]}
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.js\";\nimport { IfcDurationValue } from \"./value/IfcDurationValue\";\nimport { IfcDateValue } from \"./value/IfcDateValue.js\";\nimport { IfcDateTimeValue } from \"./value/IfcDateTimeValue.js\";\nimport { IfcTimeValue } from \"./value/IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./value/IfcTimeStampValue.js\";\nimport { ArrayType } from \"./type/ArrayType.js\";\nimport { ExprType } from \"./type/ExprType.js\";\nimport { SimpleType } from \"./type/SimpleType.js\";\nimport { TupleType } from \"./type/TupleType.js\";\nimport { TypeDisjunction } from \"./type/TypeDisjunction.js\";\nimport { Types } from \"./type/Types.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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 ArrayType,\n ExprType,\n SimpleType,\n TupleType,\n TypeDisjunction,\n Types,\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,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E = exports.Types = exports.TypeDisjunction = exports.TupleType = exports.SimpleType = exports.ArrayType = 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.IfcTimeStampValue = exports.IfcDurationValue = exports.IfcTimeValue = exports.IfcDateTimeValue = exports.IfcDateValue = exports.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = exports.IfcExpressionParseResult = exports.IfcExpression = void 0;
4
+ var IfcExpression_js_1 = require("./IfcExpression.js");
5
+ Object.defineProperty(exports, "IfcExpression", { enumerable: true, get: function () { return IfcExpression_js_1.IfcExpression; } });
6
+ Object.defineProperty(exports, "IfcExpressionParseResult", { enumerable: true, get: function () { return IfcExpression_js_1.IfcExpressionParseResult; } });
7
+ Object.defineProperty(exports, "IfcElementAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcElementAccessor; } });
8
+ Object.defineProperty(exports, "StringValue", { enumerable: true, get: function () { return IfcExpression_js_1.StringValue; } });
9
+ Object.defineProperty(exports, "BooleanValue", { enumerable: true, get: function () { return IfcExpression_js_1.BooleanValue; } });
10
+ Object.defineProperty(exports, "LogicalValue", { enumerable: true, get: function () { return IfcExpression_js_1.LogicalValue; } });
11
+ Object.defineProperty(exports, "NumericValue", { enumerable: true, get: function () { return IfcExpression_js_1.NumericValue; } });
12
+ Object.defineProperty(exports, "ReferenceValue", { enumerable: true, get: function () { return IfcExpression_js_1.ReferenceValue; } });
13
+ Object.defineProperty(exports, "IfcDateValue", { enumerable: true, get: function () { return IfcExpression_js_1.IfcDateValue; } });
14
+ Object.defineProperty(exports, "IfcDateTimeValue", { enumerable: true, get: function () { return IfcExpression_js_1.IfcDateTimeValue; } });
15
+ Object.defineProperty(exports, "IfcTimeValue", { enumerable: true, get: function () { return IfcExpression_js_1.IfcTimeValue; } });
16
+ Object.defineProperty(exports, "IfcDurationValue", { enumerable: true, get: function () { return IfcExpression_js_1.IfcDurationValue; } });
17
+ Object.defineProperty(exports, "IfcTimeStampValue", { enumerable: true, get: function () { return IfcExpression_js_1.IfcTimeStampValue; } });
18
+ Object.defineProperty(exports, "IfcPropertySetAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcPropertySetAccessor; } });
19
+ Object.defineProperty(exports, "IfcPropertyAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcPropertyAccessor; } });
20
+ Object.defineProperty(exports, "IfcRootObjectAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcRootObjectAccessor; } });
21
+ Object.defineProperty(exports, "IfcTypeObjectAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcTypeObjectAccessor; } });
22
+ Object.defineProperty(exports, "NamedObjectAccessor", { enumerable: true, get: function () { return IfcExpression_js_1.NamedObjectAccessor; } });
23
+ Object.defineProperty(exports, "ExprCompiler", { enumerable: true, get: function () { return IfcExpression_js_1.ExprCompiler; } });
24
+ Object.defineProperty(exports, "ExprKind", { enumerable: true, get: function () { return IfcExpression_js_1.ExprKind; } });
25
+ Object.defineProperty(exports, "IfcExpressionEvaluationException", { enumerable: true, get: function () { return IfcExpression_js_1.IfcExpressionEvaluationException; } });
26
+ Object.defineProperty(exports, "IfcExpressionErrorListener", { enumerable: true, get: function () { return IfcExpression_js_1.IfcExpressionErrorListener; } });
27
+ Object.defineProperty(exports, "IfcExpressionVisitor", { enumerable: true, get: function () { return IfcExpression_js_1.IfcExpressionVisitor; } });
28
+ Object.defineProperty(exports, "isPresent", { enumerable: true, get: function () { return IfcExpression_js_1.isPresent; } });
29
+ Object.defineProperty(exports, "isNullish", { enumerable: true, get: function () { return IfcExpression_js_1.isNullish; } });
30
+ Object.defineProperty(exports, "isExprEvalError", { enumerable: true, get: function () { return IfcExpression_js_1.isExprEvalError; } });
31
+ Object.defineProperty(exports, "isExprEvalSuccess", { enumerable: true, get: function () { return IfcExpression_js_1.isExprEvalSuccess; } });
32
+ Object.defineProperty(exports, "ExprToTextInputLinker", { enumerable: true, get: function () { return IfcExpression_js_1.ExprToTextInputLinker; } });
33
+ Object.defineProperty(exports, "ExprFacade", { enumerable: true, get: function () { return IfcExpression_js_1.ExprFacade; } });
34
+ Object.defineProperty(exports, "ArrayType", { enumerable: true, get: function () { return IfcExpression_js_1.ArrayType; } });
35
+ Object.defineProperty(exports, "SimpleType", { enumerable: true, get: function () { return IfcExpression_js_1.SimpleType; } });
36
+ Object.defineProperty(exports, "TupleType", { enumerable: true, get: function () { return IfcExpression_js_1.TupleType; } });
37
+ Object.defineProperty(exports, "TypeDisjunction", { enumerable: true, get: function () { return IfcExpression_js_1.TypeDisjunction; } });
38
+ Object.defineProperty(exports, "Types", { enumerable: true, get: function () { return IfcExpression_js_1.Types; } });
39
+ var E_js_1 = require("./E.js");
40
+ Object.defineProperty(exports, "E", { enumerable: true, get: function () { return E_js_1.E; } });
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uDA2C4B;AA1C1B,iHAAA,aAAa,OAAA;AACb,4HAAA,wBAAwB,OAAA;AACxB,sHAAA,kBAAkB,OAAA;AAGlB,+GAAA,WAAW,OAAA;AACX,gHAAA,YAAY,OAAA;AACZ,gHAAA,YAAY,OAAA;AACZ,gHAAA,YAAY,OAAA;AAEZ,kHAAA,cAAc,OAAA;AACd,gHAAA,YAAY,OAAA;AACZ,oHAAA,gBAAgB,OAAA;AAChB,gHAAA,YAAY,OAAA;AACZ,oHAAA,gBAAgB,OAAA;AAChB,qHAAA,iBAAiB,OAAA;AACjB,0HAAA,sBAAsB,OAAA;AACtB,uHAAA,mBAAmB,OAAA;AACnB,yHAAA,qBAAqB,OAAA;AACrB,yHAAA,qBAAqB,OAAA;AACrB,uHAAA,mBAAmB,OAAA;AAGnB,gHAAA,YAAY,OAAA;AACZ,4GAAA,QAAQ,OAAA;AACR,oIAAA,gCAAgC,OAAA;AAChC,8HAAA,0BAA0B,OAAA;AAC1B,wHAAA,oBAAoB,OAAA;AACpB,6GAAA,SAAS,OAAA;AACT,6GAAA,SAAS,OAAA;AAGT,mHAAA,eAAe,OAAA;AACf,qHAAA,iBAAiB,OAAA;AACjB,yHAAA,qBAAqB,OAAA;AACrB,8GAAA,UAAU,OAAA;AAEV,6GAAA,SAAS,OAAA;AACT,8GAAA,UAAU,OAAA;AACV,6GAAA,SAAS,OAAA;AACT,mHAAA,eAAe,OAAA;AACf,yGAAA,KAAK,OAAA;AAKP,+BAA2B;AAAlB,yFAAA,CAAC,OAAA","file":"index.js","sourcesContent":["export {\n IfcExpression,\n IfcExpressionParseResult,\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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 ExprType,\n ArrayType,\n SimpleType,\n TupleType,\n TypeDisjunction,\n Types,\n} from \"./IfcExpression.js\";\n\nexport type { BoxedValueTypes } from \"./IfcExpression.js\";\n\nexport { E } from \"./E.js\";\n"]}
@@ -15,32 +15,36 @@ class IfcDateTimeValue {
15
15
  constructor(value) {
16
16
  if (typeof value === "string") {
17
17
  var parsed = IfcDateTimeValue.parseIfcDate(value);
18
- this.utcDateValue = parsed.utcDate;
18
+ this.utcDate = parsed.utcDate;
19
19
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
20
20
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
21
21
  this.secondFraction = parsed.secondFraction;
22
+ this.isLocal = parsed.isLocal;
22
23
  }
23
24
  else if (typeof value === "number" || value instanceof decimal_js_1.default) {
24
25
  let timeStampSeconds = value;
25
26
  if (value instanceof decimal_js_1.default) {
26
27
  timeStampSeconds = value.round().toNumber();
27
28
  }
28
- this.utcDateValue = new Date(timeStampSeconds);
29
+ this.utcDate = new Date(timeStampSeconds);
29
30
  this.originalTimeZoneHours = 0;
30
31
  this.originalTimeZoneMinutes = 0;
31
32
  this.secondFraction = new decimal_js_1.default(0);
33
+ this.isLocal = false;
32
34
  }
33
35
  else if (value instanceof IfcDateTimeValue) {
34
- this.utcDateValue = value.utcDateValue;
36
+ this.utcDate = value.utcDate;
35
37
  this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
36
38
  this.originalTimeZoneHours = value.originalTimeZoneHours;
37
39
  this.secondFraction = value.secondFraction;
40
+ this.isLocal = value.isLocal;
38
41
  }
39
42
  else if (isParsedIfcDateTimeValue(value)) {
40
- this.utcDateValue = value.utcDate;
43
+ this.utcDate = value.utcDate;
41
44
  this.secondFraction = value.secondFraction;
42
45
  this.originalTimeZoneHours = value.originalTimeZoneHours;
43
46
  this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
47
+ this.isLocal = value.isLocal;
44
48
  }
45
49
  this.stringRepresentation = this.toCanonicalString();
46
50
  }
@@ -58,18 +62,19 @@ class IfcDateTimeValue {
58
62
  utcDate.setUTCHours(Number.parseInt(hours));
59
63
  utcDate.setUTCMinutes(Number.parseInt(minutes));
60
64
  utcDate.setUTCSeconds(Number.parseInt(seconds));
61
- var secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
65
+ const secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
62
66
  ? new decimal_js_1.default("0")
63
67
  : new decimal_js_1.default("0" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)
64
- var originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
68
+ const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
65
69
  ? 0
66
70
  : timeZoneSign === "+"
67
71
  ? 1
68
72
  : -1;
69
- var originalTimeZoneHours = originalZoneSign *
73
+ const originalTimeZoneHours = originalZoneSign *
70
74
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
71
- var originalTimeZoneMinutes = originalZoneSign *
75
+ const originalTimeZoneMinutes = originalZoneSign *
72
76
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
77
+ const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
73
78
  utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
74
79
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
75
80
  return {
@@ -77,6 +82,7 @@ class IfcDateTimeValue {
77
82
  secondFraction,
78
83
  originalTimeZoneHours,
79
84
  originalTimeZoneMinutes,
85
+ isLocal,
80
86
  };
81
87
  }
82
88
  static of(value) {
@@ -88,15 +94,18 @@ class IfcDateTimeValue {
88
94
  : this.secondFraction.isZero()
89
95
  ? ""
90
96
  : this.secondFraction.toString().substring(1);
91
- return `${this.pad00(this.utcDateValue.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;
97
+ return `${this.pad00(this.utcDate.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;
92
98
  }
93
99
  pad00(num) {
94
100
  return ("" + num).padStart(2, "0");
95
101
  }
96
102
  getDateAsString() {
97
- return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(this.utcDateValue.getUTCMonth() + 1)}-${this.pad00(this.utcDateValue.getUTCDate())}`;
103
+ return `${this.utcDate.getUTCFullYear()}-${this.pad00(this.utcDate.getUTCMonth() + 1)}-${this.pad00(this.utcDate.getUTCDate())}`;
98
104
  }
99
105
  getTimeZoneAsString() {
106
+ if (this.isLocal) {
107
+ return "";
108
+ }
100
109
  if (this.originalTimeZoneMinutes === 0 &&
101
110
  this.originalTimeZoneHours === 0) {
102
111
  return "Z";
@@ -107,7 +116,14 @@ class IfcDateTimeValue {
107
116
  return `${sign}${this.pad00(Math.abs(this.originalTimeZoneHours))}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;
108
117
  }
109
118
  getTimeStampSeconds() {
110
- return new decimal_js_1.default(this.utcDateValue.getTime()).divToInt(1000);
119
+ const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
120
+ return new decimal_js_1.default(this.utcDate.getTime()).divToInt(1000).minus(offset);
121
+ }
122
+ getTime() {
123
+ const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
124
+ return new decimal_js_1.default(this.utcDate.getTime())
125
+ .minus(offset)
126
+ .plus(this.secondFraction);
111
127
  }
112
128
  getValue() {
113
129
  return this;
@@ -125,8 +141,7 @@ class IfcDateTimeValue {
125
141
  }
126
142
  equals(other) {
127
143
  return (IfcDateTimeValue.isIfcDateTimeValueType(other) &&
128
- this.utcDateValue.getTime() === other.utcDateValue.getTime() &&
129
- this.secondFraction.eq(other.secondFraction));
144
+ this.getTime().eq(other.getTime()));
130
145
  }
131
146
  toCanonicalString() {
132
147
  return (this.getDateAsString() +
@@ -138,11 +153,7 @@ class IfcDateTimeValue {
138
153
  return this.stringRepresentation;
139
154
  }
140
155
  compareTo(other) {
141
- var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();
142
- if (diff != 0) {
143
- return diff;
144
- }
145
- return decimal_js_1.default.sign(this.secondFraction.minus(other.secondFraction));
156
+ return decimal_js_1.default.sign(this.getTime().minus(other.getTime()));
146
157
  }
147
158
  static ofTimeStampSeconds(timeStampSeconds) {
148
159
  var timeStampMillis = timeStampSeconds;
@@ -162,7 +173,7 @@ class IfcDateTimeValue {
162
173
  return IfcTimeStampValue_js_1.IfcTimeStampValue.of(this.getTimeStampSeconds());
163
174
  }
164
175
  addDuration(duration) {
165
- const resultDate = new Date(this.utcDateValue.getTime());
176
+ const resultDate = new Date(this.utcDate.getTime());
166
177
  const accumulatedFractions = this.secondFraction.add(duration.getFractionAsSeconds());
167
178
  const newSecondFraction = accumulatedFractions.minus(accumulatedFractions.divToInt(1));
168
179
  resultDate.setUTCSeconds(resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber());
@@ -179,6 +190,7 @@ class IfcDateTimeValue {
179
190
  secondFraction: newSecondFraction,
180
191
  originalTimeZoneHours: this.originalTimeZoneHours,
181
192
  originalTimeZoneMinutes: this.originalTimeZoneMinutes,
193
+ isLocal: this.isLocal,
182
194
  });
183
195
  }
184
196
  }
@@ -188,7 +200,8 @@ function isParsedIfcDateTimeValue(arg) {
188
200
  return (!(0, IfcExpressionUtils_js_1.isNullish)(arg.utcDate) &&
189
201
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.secondFraction) &&
190
202
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneHours) &&
191
- !(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneMinutes));
203
+ !(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneMinutes) &&
204
+ !(0, IfcExpressionUtils_js_1.isNullish)(arg.isLocal));
192
205
  }
193
206
  exports.isParsedIfcDateTimeValue = isParsedIfcDateTimeValue;
194
207
  //# sourceMappingURL=IfcDateTimeValue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDateValue = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDateValue = value.utcDateValue;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDateValue = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDateValue.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(\n this.utcDateValue.getUTCMonth() + 1\n )}-${this.pad00(this.utcDateValue.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n return new Decimal(this.utcDateValue.getTime()).divToInt(1000);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n return Decimal.sign(this.secondFraction.minus(other.secondFraction));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDateValue.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes)\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDate: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDate = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDate = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n this.isLocal = false;\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDate = value.utcDate;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n this.isLocal = value.isLocal;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDate = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.isLocal = value.isLocal;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDate.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDate.getUTCFullYear()}-${this.pad00(\n this.utcDate.getUTCMonth() + 1\n )}-${this.pad00(this.utcDate.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (this.isLocal) {\n return \"\";\n }\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);\n }\n\n private getTime(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime())\n .minus(offset)\n .plus(this.secondFraction);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.getTime().eq(other.getTime())\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n return Decimal.sign(this.getTime().minus(other.getTime()));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDate.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n isLocal: this.isLocal,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes) &&\n !isNullish(arg.isLocal)\n );\n}\n"]}
@@ -10,6 +10,7 @@ class IfcDateValue {
10
10
  this.utcDateValue = parsed.utcDate;
11
11
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
12
12
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
13
+ this.isLocal = parsed.isLocal;
13
14
  this.stringRepresentation = value;
14
15
  }
15
16
  static parseIfcDate(value) {
@@ -18,22 +19,28 @@ class IfcDateValue {
18
19
  throw new DateFormatException_js_1.DateFormatException("Not an IfcDate: " + value);
19
20
  }
20
21
  let [wholeString, year, month, day, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
21
- var utcDate = new Date(0);
22
+ const utcDate = new Date(0);
22
23
  utcDate.setUTCFullYear(Number.parseInt(year));
23
24
  utcDate.setUTCMonth(Number.parseInt(month) - 1);
24
25
  utcDate.setUTCDate(Number.parseInt(day));
25
- var originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
26
+ const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
26
27
  ? 0
27
28
  : timeZoneSign === "+"
28
29
  ? -1
29
30
  : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC
30
- var originalTimeZoneHours = originalZoneSign *
31
+ const originalTimeZoneHours = originalZoneSign *
31
32
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
32
- var originalTimeZoneMinutes = originalZoneSign *
33
+ const originalTimeZoneMinutes = originalZoneSign *
33
34
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
35
+ const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
34
36
  utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);
35
37
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);
36
- return { utcDate: utcDate, originalTimeZoneHours, originalTimeZoneMinutes };
38
+ return {
39
+ utcDate: utcDate,
40
+ originalTimeZoneHours,
41
+ originalTimeZoneMinutes,
42
+ isLocal,
43
+ };
37
44
  }
38
45
  static of(value) {
39
46
  return new IfcDateValue(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/IfcDateValue.ts"],"names":[],"mappings":";;;AAGA,+CAAwC;AACxC,yEAA0D;AAC1D,kFAA4E;AAE5E,MAAa,YAAY;IAUvB,YAAY,KAAa;QACvB,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC1D,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;QAC9D,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAa;QAKtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAA,iCAAS,EAAC,KAAK,CAAC,EAAE;YACpB,MAAM,IAAI,4CAAmB,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC;SAC3D;QACD,IAAI,CACF,WAAW,EACX,IAAI,EACJ,KAAK,EACL,GAAG,EACH,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EAChB,GAAG,KAAK,CAAC;QACV,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,gBAAgB,GAAG,IAAA,iCAAS,EAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,YAAY,KAAK,GAAG;gBACtB,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+EAA+E;QACvF,IAAI,qBAAqB,GACvB,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAClE,IAAI,uBAAuB,GACzB,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,qBAAqB,CAAC,CAAC;QACnE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,uBAAuB,CAAC,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,CAAC;IAC9E,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAAa;QAC5B,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QAChC,OAAO,CACL,GAAG,YAAY,YAAY;YAC3B,CAAC,CAAC,IAAA,iCAAS,EAAC,GAAG,CAAC,oBAAoB,CAAC;gBACnC,CAAC,IAAA,iCAAS,EAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,GAAW;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAC7D,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,KAAmB;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IACpE,CAAC;;AA9FH,oCA+FC;AAxFyB,kBAAK,GAC3B,8HAA8H,CAAC","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return { utcDate: utcDate, originalTimeZoneHours, originalTimeZoneMinutes };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/value/IfcDateValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return {\n utcDate: utcDate,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
@@ -15,6 +15,7 @@ class IfcTimeValue {
15
15
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
16
16
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
17
17
  this.secondFraction = parsed.secondFraction;
18
+ this.isLocal = parsed.isLocal;
18
19
  this.stringRepresentation = value;
19
20
  }
20
21
  static parseIfcDate(value) {
@@ -23,22 +24,23 @@ class IfcTimeValue {
23
24
  throw new DateFormatException_js_1.DateFormatException("Not an IfcTime: " + value);
24
25
  }
25
26
  let [wholeString, hours, minutes, seconds, fractionSeconds, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
26
- var utcDate = new Date(0);
27
+ const utcDate = new Date(0);
27
28
  utcDate.setUTCHours(Number.parseInt(hours));
28
29
  utcDate.setUTCMinutes(Number.parseInt(minutes));
29
30
  utcDate.setUTCSeconds(Number.parseInt(seconds));
30
- var secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
31
+ const secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
31
32
  ? new decimal_js_1.default("0")
32
33
  : new decimal_js_1.default("0" + fractionSeconds); //arbitrary precision fractions
33
- var originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
34
+ const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
34
35
  ? 0
35
36
  : timeZoneSign === "+"
36
37
  ? 1
37
38
  : -1;
38
- var originalTimeZoneHours = originalZoneSign *
39
+ const originalTimeZoneHours = originalZoneSign *
39
40
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
40
- var originalTimeZoneMinutes = originalZoneSign *
41
+ const originalTimeZoneMinutes = originalZoneSign *
41
42
  ((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
43
+ const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
42
44
  utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
43
45
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
44
46
  return {
@@ -46,6 +48,7 @@ class IfcTimeValue {
46
48
  secondFraction,
47
49
  originalTimeZoneHours,
48
50
  originalTimeZoneMinutes,
51
+ isLocal,
49
52
  };
50
53
  }
51
54
  static of(value) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/IfcTimeValue.ts"],"names":[],"mappings":";;;;;;AAGA,+CAAwC;AACxC,yEAA0D;AAC1D,kFAA4E;AAC5E,4DAAiC;AAEjC,MAAa,YAAY;IAWvB,YAAY,KAAa;QACvB,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC1D,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAa;QAMtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAA,iCAAS,EAAC,KAAK,CAAC,EAAE;YACpB,MAAM,IAAI,4CAAmB,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC;SAC3D;QACD,IAAI,CACF,WAAW,EACX,KAAK,EACL,OAAO,EACP,OAAO,EACP,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EAChB,GAAG,KAAK,CAAC;QACV,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,IAAI,cAAc,GAAG,IAAA,iCAAS,EAAC,eAAe,CAAC;YAC7C,CAAC,CAAC,IAAI,oBAAO,CAAC,GAAG,CAAC;YAClB,CAAC,CAAC,IAAI,oBAAO,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,+BAA+B;QACvE,IAAI,gBAAgB,GAAG,IAAA,iCAAS,EAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,YAAY,KAAK,GAAG;gBACtB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,IAAI,qBAAqB,GACvB,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAClE,IAAI,uBAAuB,GACzB,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,qBAAqB,CAAC,CAAC;QACnE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,uBAAuB,CAAC,CAAC;QACzE,OAAO;YACL,OAAO;YACP,cAAc;YACd,qBAAqB;YACrB,uBAAuB;SACxB,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,KAAa;QAC5B,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,eAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QAChC,OAAO,CACL,GAAG,YAAY,YAAY;YAC3B,CAAC,CAAC,IAAA,iCAAS,EAAC,GAAG,CAAC,oBAAoB,CAAC;gBACnC,CAAC,IAAA,iCAAS,EAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,GAAW;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE;YAC5D,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAC7C,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,KAAmB;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACtE,IAAI,IAAI,IAAI,CAAC,EAAE;YACb,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;YAClB,OAAO,CAAC,CAAC;SACV;QACD,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACf,OAAO,CAAC,CAAC,CAAC;SACX;QACD,OAAO,CAAC,CAAC;IACX,CAAC;;AAtHH,oCAuHC;AA/GyB,kBAAK,GAC3B,oHAAoH,CAAC","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/value/IfcTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { IfcExpression, IfcExpressionParseResult, IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, ExprType, ArrayType, SimpleType, TupleType, TypeDisjunction, Types, } from "./IfcExpression.js";
2
+ export type { BoxedValueTypes } from "./IfcExpression.js";
3
+ export { E } from "./E.js";
@@ -30,7 +30,12 @@ import { IfcDateValue } from "./value/IfcDateValue.js";
30
30
  import { IfcDateTimeValue } from "./value/IfcDateTimeValue.js";
31
31
  import { IfcTimeValue } from "./value/IfcTimeValue.js";
32
32
  import { IfcTimeStampValue } from "./value/IfcTimeStampValue.js";
33
- export { IfcElementAccessor, StringValue, BooleanValue, LogicalValue, NumericValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
33
+ import { ArrayType } from "./type/ArrayType.js";
34
+ import { SimpleType } from "./type/SimpleType.js";
35
+ import { TupleType } from "./type/TupleType.js";
36
+ import { TypeDisjunction } from "./type/TypeDisjunction.js";
37
+ import { Types } from "./type/Types.js";
38
+ export { IfcElementAccessor, StringValue, BooleanValue, LogicalValue, NumericValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, ArrayType, SimpleType, TupleType, TypeDisjunction, Types, };
34
39
  export class IfcExpressionParseResult {
35
40
  constructor(input, typeManager, exprContext) {
36
41
  this._typeManager = typeManager;
@@ -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\";\nimport { ExprFacade } from \"./expression/ExprFacade.js\";\nimport { IfcDurationValue } from \"./value/IfcDurationValue\";\nimport { IfcDateValue } from \"./value/IfcDateValue.js\";\nimport { IfcDateTimeValue } from \"./value/IfcDateTimeValue.js\";\nimport { IfcTimeValue } from \"./value/IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./value/IfcTimeStampValue.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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"]}
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.js\";\nimport { IfcDurationValue } from \"./value/IfcDurationValue\";\nimport { IfcDateValue } from \"./value/IfcDateValue.js\";\nimport { IfcDateTimeValue } from \"./value/IfcDateTimeValue.js\";\nimport { IfcTimeValue } from \"./value/IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./value/IfcTimeStampValue.js\";\nimport { ArrayType } from \"./type/ArrayType.js\";\nimport { ExprType } from \"./type/ExprType.js\";\nimport { SimpleType } from \"./type/SimpleType.js\";\nimport { TupleType } from \"./type/TupleType.js\";\nimport { TypeDisjunction } from \"./type/TypeDisjunction.js\";\nimport { Types } from \"./type/Types.js\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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 ArrayType,\n ExprType,\n SimpleType,\n TupleType,\n TypeDisjunction,\n Types,\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,3 @@
1
+ export { IfcExpression, IfcExpressionParseResult, IfcElementAccessor, StringValue, BooleanValue, LogicalValue, NumericValue, ReferenceValue, IfcDateValue, IfcDateTimeValue, IfcTimeValue, IfcDurationValue, IfcTimeStampValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, ArrayType, SimpleType, TupleType, TypeDisjunction, Types, } from "./IfcExpression.js";
2
+ export { E } from "./E.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,kBAAkB,EAGlB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EAEZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EAGnB,YAAY,EACZ,QAAQ,EACR,gCAAgC,EAChC,0BAA0B,EAC1B,oBAAoB,EACpB,SAAS,EACT,SAAS,EAGT,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EAEV,SAAS,EACT,UAAU,EACV,SAAS,EACT,eAAe,EACf,KAAK,GACN,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC","file":"index.js","sourcesContent":["export {\n IfcExpression,\n IfcExpressionParseResult,\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcDateValue,\n IfcDateTimeValue,\n IfcTimeValue,\n IfcDurationValue,\n IfcTimeStampValue,\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 ExprType,\n ArrayType,\n SimpleType,\n TupleType,\n TypeDisjunction,\n Types,\n} from \"./IfcExpression.js\";\n\nexport type { BoxedValueTypes } from \"./IfcExpression.js\";\n\nexport { E } from \"./E.js\";\n"]}
@@ -9,32 +9,36 @@ export class IfcDateTimeValue {
9
9
  constructor(value) {
10
10
  if (typeof value === "string") {
11
11
  var parsed = IfcDateTimeValue.parseIfcDate(value);
12
- this.utcDateValue = parsed.utcDate;
12
+ this.utcDate = parsed.utcDate;
13
13
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
14
14
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
15
15
  this.secondFraction = parsed.secondFraction;
16
+ this.isLocal = parsed.isLocal;
16
17
  }
17
18
  else if (typeof value === "number" || value instanceof Decimal) {
18
19
  let timeStampSeconds = value;
19
20
  if (value instanceof Decimal) {
20
21
  timeStampSeconds = value.round().toNumber();
21
22
  }
22
- this.utcDateValue = new Date(timeStampSeconds);
23
+ this.utcDate = new Date(timeStampSeconds);
23
24
  this.originalTimeZoneHours = 0;
24
25
  this.originalTimeZoneMinutes = 0;
25
26
  this.secondFraction = new Decimal(0);
27
+ this.isLocal = false;
26
28
  }
27
29
  else if (value instanceof IfcDateTimeValue) {
28
- this.utcDateValue = value.utcDateValue;
30
+ this.utcDate = value.utcDate;
29
31
  this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
30
32
  this.originalTimeZoneHours = value.originalTimeZoneHours;
31
33
  this.secondFraction = value.secondFraction;
34
+ this.isLocal = value.isLocal;
32
35
  }
33
36
  else if (isParsedIfcDateTimeValue(value)) {
34
- this.utcDateValue = value.utcDate;
37
+ this.utcDate = value.utcDate;
35
38
  this.secondFraction = value.secondFraction;
36
39
  this.originalTimeZoneHours = value.originalTimeZoneHours;
37
40
  this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
41
+ this.isLocal = value.isLocal;
38
42
  }
39
43
  this.stringRepresentation = this.toCanonicalString();
40
44
  }
@@ -52,18 +56,19 @@ export class IfcDateTimeValue {
52
56
  utcDate.setUTCHours(Number.parseInt(hours));
53
57
  utcDate.setUTCMinutes(Number.parseInt(minutes));
54
58
  utcDate.setUTCSeconds(Number.parseInt(seconds));
55
- var secondFraction = isNullish(fractionSeconds)
59
+ const secondFraction = isNullish(fractionSeconds)
56
60
  ? new Decimal("0")
57
61
  : new Decimal("0" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)
58
- var originalZoneSign = isNullish(timeZoneSign)
62
+ const originalZoneSign = isNullish(timeZoneSign)
59
63
  ? 0
60
64
  : timeZoneSign === "+"
61
65
  ? 1
62
66
  : -1;
63
- var originalTimeZoneHours = originalZoneSign *
67
+ const originalTimeZoneHours = originalZoneSign *
64
68
  (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
65
- var originalTimeZoneMinutes = originalZoneSign *
69
+ const originalTimeZoneMinutes = originalZoneSign *
66
70
  (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
71
+ const isLocal = isNullish(timeZoneWhole);
67
72
  utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
68
73
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
69
74
  return {
@@ -71,6 +76,7 @@ export class IfcDateTimeValue {
71
76
  secondFraction,
72
77
  originalTimeZoneHours,
73
78
  originalTimeZoneMinutes,
79
+ isLocal,
74
80
  };
75
81
  }
76
82
  static of(value) {
@@ -82,15 +88,18 @@ export class IfcDateTimeValue {
82
88
  : this.secondFraction.isZero()
83
89
  ? ""
84
90
  : this.secondFraction.toString().substring(1);
85
- return `${this.pad00(this.utcDateValue.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;
91
+ return `${this.pad00(this.utcDate.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;
86
92
  }
87
93
  pad00(num) {
88
94
  return ("" + num).padStart(2, "0");
89
95
  }
90
96
  getDateAsString() {
91
- return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(this.utcDateValue.getUTCMonth() + 1)}-${this.pad00(this.utcDateValue.getUTCDate())}`;
97
+ return `${this.utcDate.getUTCFullYear()}-${this.pad00(this.utcDate.getUTCMonth() + 1)}-${this.pad00(this.utcDate.getUTCDate())}`;
92
98
  }
93
99
  getTimeZoneAsString() {
100
+ if (this.isLocal) {
101
+ return "";
102
+ }
94
103
  if (this.originalTimeZoneMinutes === 0 &&
95
104
  this.originalTimeZoneHours === 0) {
96
105
  return "Z";
@@ -101,7 +110,14 @@ export class IfcDateTimeValue {
101
110
  return `${sign}${this.pad00(Math.abs(this.originalTimeZoneHours))}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;
102
111
  }
103
112
  getTimeStampSeconds() {
104
- return new Decimal(this.utcDateValue.getTime()).divToInt(1000);
113
+ const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
114
+ return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);
115
+ }
116
+ getTime() {
117
+ const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
118
+ return new Decimal(this.utcDate.getTime())
119
+ .minus(offset)
120
+ .plus(this.secondFraction);
105
121
  }
106
122
  getValue() {
107
123
  return this;
@@ -119,8 +135,7 @@ export class IfcDateTimeValue {
119
135
  }
120
136
  equals(other) {
121
137
  return (IfcDateTimeValue.isIfcDateTimeValueType(other) &&
122
- this.utcDateValue.getTime() === other.utcDateValue.getTime() &&
123
- this.secondFraction.eq(other.secondFraction));
138
+ this.getTime().eq(other.getTime()));
124
139
  }
125
140
  toCanonicalString() {
126
141
  return (this.getDateAsString() +
@@ -132,11 +147,7 @@ export class IfcDateTimeValue {
132
147
  return this.stringRepresentation;
133
148
  }
134
149
  compareTo(other) {
135
- var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();
136
- if (diff != 0) {
137
- return diff;
138
- }
139
- return Decimal.sign(this.secondFraction.minus(other.secondFraction));
150
+ return Decimal.sign(this.getTime().minus(other.getTime()));
140
151
  }
141
152
  static ofTimeStampSeconds(timeStampSeconds) {
142
153
  var timeStampMillis = timeStampSeconds;
@@ -156,7 +167,7 @@ export class IfcDateTimeValue {
156
167
  return IfcTimeStampValue.of(this.getTimeStampSeconds());
157
168
  }
158
169
  addDuration(duration) {
159
- const resultDate = new Date(this.utcDateValue.getTime());
170
+ const resultDate = new Date(this.utcDate.getTime());
160
171
  const accumulatedFractions = this.secondFraction.add(duration.getFractionAsSeconds());
161
172
  const newSecondFraction = accumulatedFractions.minus(accumulatedFractions.divToInt(1));
162
173
  resultDate.setUTCSeconds(resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber());
@@ -173,6 +184,7 @@ export class IfcDateTimeValue {
173
184
  secondFraction: newSecondFraction,
174
185
  originalTimeZoneHours: this.originalTimeZoneHours,
175
186
  originalTimeZoneMinutes: this.originalTimeZoneMinutes,
187
+ isLocal: this.isLocal,
176
188
  });
177
189
  }
178
190
  }
@@ -181,6 +193,7 @@ export function isParsedIfcDateTimeValue(arg) {
181
193
  return (!isNullish(arg.utcDate) &&
182
194
  !isNullish(arg.secondFraction) &&
183
195
  !isNullish(arg.originalTimeZoneHours) &&
184
- !isNullish(arg.originalTimeZoneMinutes));
196
+ !isNullish(arg.originalTimeZoneMinutes) &&
197
+ !isNullish(arg.isLocal));
185
198
  }
186
199
  //# sourceMappingURL=IfcDateTimeValue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDateValue = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDateValue = value.utcDateValue;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDateValue = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDateValue.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(\n this.utcDateValue.getUTCMonth() + 1\n )}-${this.pad00(this.utcDateValue.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n return new Decimal(this.utcDateValue.getTime()).divToInt(1000);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n return Decimal.sign(this.secondFraction.minus(other.secondFraction));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDateValue.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes)\n );\n}\n"]}
1
+ {"version":3,"sources":["value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDate: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDate = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDate = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n this.isLocal = false;\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDate = value.utcDate;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n this.isLocal = value.isLocal;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDate = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.isLocal = value.isLocal;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDate.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDate.getUTCFullYear()}-${this.pad00(\n this.utcDate.getUTCMonth() + 1\n )}-${this.pad00(this.utcDate.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (this.isLocal) {\n return \"\";\n }\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);\n }\n\n private getTime(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime())\n .minus(offset)\n .plus(this.secondFraction);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.getTime().eq(other.getTime())\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n return Decimal.sign(this.getTime().minus(other.getTime()));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDate.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n isLocal: this.isLocal,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes) &&\n !isNullish(arg.isLocal)\n );\n}\n"]}
@@ -7,6 +7,7 @@ export class IfcDateValue {
7
7
  this.utcDateValue = parsed.utcDate;
8
8
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
9
9
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
10
+ this.isLocal = parsed.isLocal;
10
11
  this.stringRepresentation = value;
11
12
  }
12
13
  static parseIfcDate(value) {
@@ -15,22 +16,28 @@ export class IfcDateValue {
15
16
  throw new DateFormatException("Not an IfcDate: " + value);
16
17
  }
17
18
  let [wholeString, year, month, day, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
18
- var utcDate = new Date(0);
19
+ const utcDate = new Date(0);
19
20
  utcDate.setUTCFullYear(Number.parseInt(year));
20
21
  utcDate.setUTCMonth(Number.parseInt(month) - 1);
21
22
  utcDate.setUTCDate(Number.parseInt(day));
22
- var originalZoneSign = isNullish(timeZoneSign)
23
+ const originalZoneSign = isNullish(timeZoneSign)
23
24
  ? 0
24
25
  : timeZoneSign === "+"
25
26
  ? -1
26
27
  : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC
27
- var originalTimeZoneHours = originalZoneSign *
28
+ const originalTimeZoneHours = originalZoneSign *
28
29
  (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
29
- var originalTimeZoneMinutes = originalZoneSign *
30
+ const originalTimeZoneMinutes = originalZoneSign *
30
31
  (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
32
+ const isLocal = isNullish(timeZoneWhole);
31
33
  utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);
32
34
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);
33
- return { utcDate: utcDate, originalTimeZoneHours, originalTimeZoneMinutes };
35
+ return {
36
+ utcDate: utcDate,
37
+ originalTimeZoneHours,
38
+ originalTimeZoneMinutes,
39
+ isLocal,
40
+ };
34
41
  }
35
42
  static of(value) {
36
43
  return new IfcDateValue(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["value/IfcDateValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return { utcDate: utcDate, originalTimeZoneHours, originalTimeZoneMinutes };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
1
+ {"version":3,"sources":["value/IfcDateValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return {\n utcDate: utcDate,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
@@ -9,6 +9,7 @@ export class IfcTimeValue {
9
9
  this.originalTimeZoneHours = parsed.originalTimeZoneHours;
10
10
  this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
11
11
  this.secondFraction = parsed.secondFraction;
12
+ this.isLocal = parsed.isLocal;
12
13
  this.stringRepresentation = value;
13
14
  }
14
15
  static parseIfcDate(value) {
@@ -17,22 +18,23 @@ export class IfcTimeValue {
17
18
  throw new DateFormatException("Not an IfcTime: " + value);
18
19
  }
19
20
  let [wholeString, hours, minutes, seconds, fractionSeconds, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
20
- var utcDate = new Date(0);
21
+ const utcDate = new Date(0);
21
22
  utcDate.setUTCHours(Number.parseInt(hours));
22
23
  utcDate.setUTCMinutes(Number.parseInt(minutes));
23
24
  utcDate.setUTCSeconds(Number.parseInt(seconds));
24
- var secondFraction = isNullish(fractionSeconds)
25
+ const secondFraction = isNullish(fractionSeconds)
25
26
  ? new Decimal("0")
26
27
  : new Decimal("0" + fractionSeconds); //arbitrary precision fractions
27
- var originalZoneSign = isNullish(timeZoneSign)
28
+ const originalZoneSign = isNullish(timeZoneSign)
28
29
  ? 0
29
30
  : timeZoneSign === "+"
30
31
  ? 1
31
32
  : -1;
32
- var originalTimeZoneHours = originalZoneSign *
33
+ const originalTimeZoneHours = originalZoneSign *
33
34
  (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
34
- var originalTimeZoneMinutes = originalZoneSign *
35
+ const originalTimeZoneMinutes = originalZoneSign *
35
36
  (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
37
+ const isLocal = isNullish(timeZoneWhole);
36
38
  utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
37
39
  utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
38
40
  return {
@@ -40,6 +42,7 @@ export class IfcTimeValue {
40
42
  secondFraction,
41
43
  originalTimeZoneHours,
42
44
  originalTimeZoneMinutes,
45
+ isLocal,
43
46
  };
44
47
  }
45
48
  static of(value) {
@@ -1 +1 @@
1
- {"version":3,"sources":["value/IfcTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
1
+ {"version":3,"sources":["value/IfcTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
@@ -7,10 +7,11 @@ import { IfcTimeValue } from "./IfcTimeValue.js";
7
7
  import { IfcTimeStampValue } from "./IfcTimeStampValue.js";
8
8
  import { IfcDurationValue } from "./IfcDurationValue.js";
9
9
  export declare class IfcDateTimeValue implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue> {
10
- private readonly utcDateValue;
10
+ private readonly utcDate;
11
11
  private readonly stringRepresentation;
12
12
  private readonly originalTimeZoneHours;
13
13
  private readonly originalTimeZoneMinutes;
14
+ private readonly isLocal;
14
15
  private readonly secondFraction;
15
16
  private static readonly regex;
16
17
  constructor(value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue);
@@ -21,6 +22,7 @@ export declare class IfcDateTimeValue implements Value<IfcDateTimeValue>, Compar
21
22
  private getDateAsString;
22
23
  getTimeZoneAsString(): String;
23
24
  private getTimeStampSeconds;
25
+ private getTime;
24
26
  getValue(): IfcDateTimeValue;
25
27
  getType(): ExprType;
26
28
  static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue;
@@ -40,5 +42,6 @@ export type ParsedIfcDateTimeValue = {
40
42
  secondFraction: Decimal;
41
43
  originalTimeZoneHours?: number;
42
44
  originalTimeZoneMinutes?: number;
45
+ isLocal: boolean;
43
46
  };
44
47
  export declare function isParsedIfcDateTimeValue(arg: any): arg is ParsedIfcDateTimeValue;
@@ -6,12 +6,14 @@ export declare class IfcDateValue implements Value<IfcDateValue>, Comparable<Ifc
6
6
  private readonly stringRepresentation;
7
7
  private readonly originalTimeZoneHours;
8
8
  private readonly originalTimeZoneMinutes;
9
+ private readonly isLocal;
9
10
  private static readonly regex;
10
11
  constructor(value: string);
11
12
  static parseIfcDate(value: string): {
12
13
  utcDate: Date;
13
14
  originalTimeZoneHours?: number;
14
15
  originalTimeZoneMinutes?: number;
16
+ isLocal: boolean;
15
17
  };
16
18
  static of(value: string): IfcDateValue;
17
19
  getValue(): IfcDateValue;
@@ -7,6 +7,7 @@ export declare class IfcTimeValue implements Value<IfcTimeValue>, Comparable<Ifc
7
7
  private readonly stringRepresentation;
8
8
  private readonly originalTimeZoneHours;
9
9
  private readonly originalTimeZoneMinutes;
10
+ private readonly isLocal;
10
11
  private readonly secondFraction;
11
12
  private static readonly regex;
12
13
  constructor(value: string);
@@ -15,6 +16,7 @@ export declare class IfcTimeValue implements Value<IfcTimeValue>, Comparable<Ifc
15
16
  secondFraction: Decimal;
16
17
  originalTimeZoneHours?: number;
17
18
  originalTimeZoneMinutes?: number;
19
+ isLocal: boolean;
18
20
  };
19
21
  static of(value: string): IfcTimeValue;
20
22
  getValue(): IfcTimeValue;
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "ifc-expressions",
3
- "version": "2.3.0-beta.0",
3
+ "version": "2.3.0",
4
4
  "description": "Parsing and evaluation of IFC expressions",
5
5
  "main": "dist/cjs/IfcExpression.js",
6
6
  "module": "dist/mjs/IfcExpression.js",
7
7
  "exports": {
8
8
  ".": {
9
- "import": "./dist/mjs/IfcExpression.js",
10
- "require": "./dist/cjs/IfcExpression.js"
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/mjs/index.js",
11
+ "require": "./dist/cjs/index.js"
11
12
  }
12
13
  },
13
14
  "license": "Apache-2.0",
14
- "types": "./dist/IfcExpression.d.ts",
15
+ "types": "./dist/index.d.ts",
15
16
  "files": [
16
17
  "./dist/**/*",
17
18
  "./dist/*"
@@ -32,10 +33,9 @@
32
33
  "check": "npm run format-check && npm run lint"
33
34
  },
34
35
  "keywords": [
35
- "MMS",
36
+ "IFC",
36
37
  "Expressions",
37
38
  "BIM",
38
- "Merkmalservice",
39
39
  "Formula"
40
40
  ],
41
41
  "dependencies": {