ifc-expressions 2.2.0-beta.0 → 2.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/IfcExpression.d.ts +6 -1
  2. package/dist/cjs/IfcExpression.js +11 -1
  3. package/dist/cjs/IfcExpression.js.map +1 -1
  4. package/dist/cjs/value/IfcDateTimeValue.js +34 -21
  5. package/dist/cjs/value/IfcDateTimeValue.js.map +1 -1
  6. package/dist/cjs/value/IfcDateValue.js +13 -6
  7. package/dist/cjs/value/IfcDateValue.js.map +1 -1
  8. package/dist/cjs/value/IfcDurationValue.js +1 -1
  9. package/dist/cjs/value/IfcDurationValue.js.map +1 -1
  10. package/dist/cjs/value/IfcTimeValue.js +9 -6
  11. package/dist/cjs/value/IfcTimeValue.js.map +1 -1
  12. package/dist/cjs/value/Value.js.map +1 -1
  13. package/dist/cjs/value/{NonBoxedValueTypes.js → ValueType.js} +1 -1
  14. package/dist/cjs/value/ValueType.js.map +1 -0
  15. package/dist/mjs/IfcExpression.js +6 -1
  16. package/dist/mjs/IfcExpression.js.map +1 -1
  17. package/dist/mjs/value/IfcDateTimeValue.js +34 -21
  18. package/dist/mjs/value/IfcDateTimeValue.js.map +1 -1
  19. package/dist/mjs/value/IfcDateValue.js +13 -6
  20. package/dist/mjs/value/IfcDateValue.js.map +1 -1
  21. package/dist/mjs/value/IfcDurationValue.js +1 -1
  22. package/dist/mjs/value/IfcDurationValue.js.map +1 -1
  23. package/dist/mjs/value/IfcTimeValue.js +9 -6
  24. package/dist/mjs/value/IfcTimeValue.js.map +1 -1
  25. package/dist/mjs/value/Value.js.map +1 -1
  26. package/dist/mjs/value/ValueType.js +2 -0
  27. package/dist/mjs/value/ValueType.js.map +1 -0
  28. package/dist/value/IfcDateTimeValue.d.ts +4 -1
  29. package/dist/value/IfcDateValue.d.ts +2 -0
  30. package/dist/value/IfcTimeValue.d.ts +2 -0
  31. package/dist/value/Value.d.ts +2 -2
  32. package/dist/value/{NonBoxedValueTypes.d.ts → ValueType.d.ts} +1 -1
  33. package/package.json +1 -1
  34. package/dist/cjs/value/NonBoxedValueTypes.js.map +0 -1
  35. package/dist/mjs/value/NonBoxedValueTypes.js +0 -2
  36. package/dist/mjs/value/NonBoxedValueTypes.js.map +0 -1
@@ -26,7 +26,12 @@ import { ExprKind } from "./expression/ExprKind.js";
26
26
  import { TypeManager } from "./compiler/TypeManager.js";
27
27
  import { ExprToTextInputLinker } from "./compiler/ExprToTextInputLinker.js";
28
28
  import { ExprFacade } from "./expression/ExprFacade.js";
29
- export { IfcElementAccessor, IfcExpressionContext, Value, StringValue, BooleanValue, LogicalValue, NumericValue, ExpressionValue, ReferenceValue, IfcPropertySetAccessor, IfcPropertyAccessor, IfcRootObjectAccessor, IfcTypeObjectAccessor, NamedObjectAccessor, ObjectAccessor, Expr, ExprCompiler, ExprKind, IfcExpressionEvaluationException, IfcExpressionErrorListener, IfcExpressionVisitor, isPresent, isNullish, ExprEvalResult, ExprEvalError, isExprEvalError, isExprEvalSuccess, ExprToTextInputLinker, ExprFacade, };
29
+ import { IfcDurationValue } from "./value/IfcDurationValue.js";
30
+ import { IfcDateValue } from "./value/IfcDateValue.js";
31
+ import { IfcDateTimeValue } from "./value/IfcDateTimeValue.js";
32
+ import { IfcTimeValue } from "./value/IfcTimeValue.js";
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, };
30
35
  export type { BoxedValueTypes };
31
36
  export declare class IfcExpressionParseResult {
32
37
  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.ReferenceValue = exports.NumericValue = exports.LogicalValue = exports.BooleanValue = exports.StringValue = exports.IfcElementAccessor = void 0;
6
+ exports.IfcExpression = exports.IfcExpressionParseResult = exports.ExprFacade = exports.ExprToTextInputLinker = exports.isExprEvalSuccess = exports.isExprEvalError = exports.isNullish = exports.isPresent = exports.IfcExpressionVisitor = exports.IfcExpressionErrorListener = exports.IfcExpressionEvaluationException = exports.ExprKind = exports.ExprCompiler = exports.NamedObjectAccessor = exports.IfcTypeObjectAccessor = exports.IfcRootObjectAccessor = exports.IfcPropertyAccessor = exports.IfcPropertySetAccessor = exports.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; } });
@@ -53,6 +53,16 @@ const ExprToTextInputLinker_js_1 = require("./compiler/ExprToTextInputLinker.js"
53
53
  Object.defineProperty(exports, "ExprToTextInputLinker", { enumerable: true, get: function () { return ExprToTextInputLinker_js_1.ExprToTextInputLinker; } });
54
54
  const ExprFacade_js_1 = require("./expression/ExprFacade.js");
55
55
  Object.defineProperty(exports, "ExprFacade", { enumerable: true, get: function () { return ExprFacade_js_1.ExprFacade; } });
56
+ const IfcDurationValue_js_1 = require("./value/IfcDurationValue.js");
57
+ Object.defineProperty(exports, "IfcDurationValue", { enumerable: true, get: function () { return IfcDurationValue_js_1.IfcDurationValue; } });
58
+ const IfcDateValue_js_1 = require("./value/IfcDateValue.js");
59
+ Object.defineProperty(exports, "IfcDateValue", { enumerable: true, get: function () { return IfcDateValue_js_1.IfcDateValue; } });
60
+ const IfcDateTimeValue_js_1 = require("./value/IfcDateTimeValue.js");
61
+ Object.defineProperty(exports, "IfcDateTimeValue", { enumerable: true, get: function () { return IfcDateTimeValue_js_1.IfcDateTimeValue; } });
62
+ const IfcTimeValue_js_1 = require("./value/IfcTimeValue.js");
63
+ Object.defineProperty(exports, "IfcTimeValue", { enumerable: true, get: function () { return IfcTimeValue_js_1.IfcTimeValue; } });
64
+ const IfcTimeStampValue_js_1 = require("./value/IfcTimeStampValue.js");
65
+ Object.defineProperty(exports, "IfcTimeStampValue", { enumerable: true, get: function () { return IfcTimeStampValue_js_1.IfcTimeStampValue; } });
56
66
  class IfcExpressionParseResult {
57
67
  constructor(input, typeManager, exprContext) {
58
68
  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\";\n\nexport {\n IfcElementAccessor,\n IfcExpressionContext,\n Value,\n StringValue,\n BooleanValue,\n LogicalValue,\n NumericValue,\n ExpressionValue,\n ReferenceValue,\n IfcPropertySetAccessor,\n IfcPropertyAccessor,\n IfcRootObjectAccessor,\n IfcTypeObjectAccessor,\n NamedObjectAccessor,\n ObjectAccessor,\n Expr,\n ExprCompiler,\n ExprKind,\n IfcExpressionEvaluationException,\n IfcExpressionErrorListener,\n IfcExpressionVisitor,\n isPresent,\n isNullish,\n ExprEvalResult,\n ExprEvalError,\n isExprEvalError,\n isExprEvalSuccess,\n ExprToTextInputLinker,\n ExprFacade,\n};\n\nexport type { BoxedValueTypes };\n\nexport class IfcExpressionParseResult {\n private readonly _input: string;\n private readonly _typeManager: TypeManager;\n private readonly _parseTree: ParserRuleContext;\n\n constructor(input: string, typeManager: TypeManager, exprContext) {\n this._typeManager = typeManager;\n this._parseTree = exprContext;\n this._input = input;\n }\n\n get typeManager(): TypeManager {\n return this._typeManager;\n }\n\n get parseTree(): ParserRuleContext {\n return this._parseTree;\n }\n\n get input(): string {\n return this._input;\n }\n}\n\nexport class IfcExpression {\n /**\n * Parses the input and returns a parse result, which contains the parse tree, the type information per parse tree node, and the input.\n * @param input\n * @param errorListener\n * @return the parse result, which can subequently be compiled into an Expr using compile().\n */\n public static parse(\n input: string,\n errorListener?: ErrorListener<Token | number>\n ): IfcExpressionParseResult {\n const chars = new CharStream(input); // replace this with a FileStream as required\n const lexer = new IfcExpressionLexer(chars);\n const tokens = new CommonTokenStream(lexer);\n const parser = new IfcExpressionParser(tokens);\n lexer.removeErrorListeners();\n parser.removeErrorListeners();\n const myErrorListener = new IfcExpressionErrorListener();\n if (isPresent(errorListener)) {\n lexer.addErrorListener(errorListener);\n parser.addErrorListener(errorListener);\n }\n lexer.addErrorListener(myErrorListener);\n parser.addErrorListener(myErrorListener);\n let expr;\n expr = parser.expr();\n const validationListener = new IfcExpressionValidationListener();\n if (!myErrorListener.isErrorOccurred()) {\n const walker = new ParseTreeWalker();\n try {\n walker.walk(validationListener, expr);\n } catch (e) {\n if (e instanceof ValidationException) {\n if (errorListener instanceof IfcExpressionErrorListener) {\n errorListener.validationException(e);\n }\n myErrorListener.validationException(e);\n }\n }\n }\n return new IfcExpressionParseResult(\n input,\n validationListener.getTypeManager(),\n expr\n );\n }\n\n /**\n * Compiles the specified parseResult into an Expr.\n * @param parseResult\n * @return the Expression (Expr), which can be evaluated to obtain its result.\n */\n public static compile(\n parseResult: IfcExpressionParseResult\n ): ExprFacade<ExpressionValue> {\n const compiler = new ExprCompiler(parseResult.typeManager);\n const expr = compiler.visit(parseResult.parseTree);\n ExprToTextInputLinker.linkTextToExpressions(\n parseResult.input,\n expr,\n compiler.getExprManager()\n );\n return new ExprFacade(expr);\n }\n\n /**\n * Evaluates the specified input expression and returns the evaluation result. The parse\n * and compile steps are done internally.\n *\n * @param expression: the input expression\n * @param context: the context required for accessing the IFC model\n * @return the result (or an error object).\n */\n public static evaluate(\n expression: string,\n context: IfcExpressionContext = new NopContext()\n ): ExprEvalResult<ExpressionValue> {\n const errorListener = new IfcExpressionErrorListener();\n const parseResult = IfcExpression.parse(expression, errorListener);\n if (errorListener.isErrorOccurred()) {\n return mapException(errorListener.getException());\n }\n const compiledExpression = this.compile(parseResult);\n return compiledExpression.evaluate(context);\n }\n\n public static formatError(input: string, error: ExprEvalError) {\n const lines = [\"** Error **\"];\n if (!isNullish(error[\"textSpan\"])) {\n const span: TextSpan = error[\"textSpan\"];\n const underlined = span.underline(input, \"^\");\n const startString = \"Input: \";\n const indented = this.indent(underlined, startString.length);\n const replaced = startString + indented.substr(startString.length);\n replaced.split(\"\\n\").forEach((line) => lines.push(line));\n }\n lines.push(\"Problem: \" + error.message);\n return lines.join(\"\\n\");\n }\n\n private static indent(s: string, by: number) {\n return s\n .split(\"\\n\")\n .map((line) => \" \".repeat(by) + line)\n .join(\"\\n\");\n }\n\n public static evaluateExpression(\n expr: ExprFacade<ExpressionValue>,\n context: IfcExpressionContext = new NopContext()\n ) {\n return expr.evaluate(context);\n }\n}\n"]}
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"]}
@@ -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;
@@ -121,12 +137,11 @@ class IfcDateTimeValue {
121
137
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.stringRepresentation.match(IfcDateTimeValue.regex))));
122
138
  }
123
139
  static isValidStringRepresentation(str) {
124
- return !(0, IfcExpressionUtils_js_1.isNullish)(str.match(this.regex));
140
+ return this.regex.test(str);
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 !isNullish(str.match(this.regex));\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);
@@ -50,7 +57,7 @@ class IfcDateValue {
50
57
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.stringRepresentation.match(IfcDateValue.regex))));
51
58
  }
52
59
  static isValidStringRepresentation(str) {
53
- return !(0, IfcExpressionUtils_js_1.isNullish)(str.match(this.regex));
60
+ return this.regex.test(str);
54
61
  }
55
62
  equals(other) {
56
63
  return (IfcDateValue.isIfcDateValueType(other) &&
@@ -1 +1 @@
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 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 !isNullish(str.match(this.regex));\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"]}
@@ -97,7 +97,7 @@ class IfcDurationValue {
97
97
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.totalSeconds)));
98
98
  }
99
99
  static isValidStringRepresentation(str) {
100
- return !(0, IfcExpressionUtils_js_1.isNullish)(str.match(this.regex));
100
+ return this.regex.test(str);
101
101
  }
102
102
  equals(other) {
103
103
  return (IfcDurationValue.isIfcDurationValueType(other) &&
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/value/IfcDurationValue.ts"],"names":[],"mappings":"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","file":"value/IfcDurationValue.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 IfcDurationValue\n implements Value<IfcDurationValue>, Comparable<IfcDurationValue>\n{\n private readonly stringRepresentation;\n private static readonly MINUTE = new Decimal(60);\n private static readonly HOUR = IfcDurationValue.MINUTE.mul(60);\n private static readonly DAY = IfcDurationValue.HOUR.mul(24);\n private static readonly WEEK = IfcDurationValue.DAY.mul(7);\n private static readonly YEAR = new Decimal(31557600);\n private static readonly MONTH = IfcDurationValue.YEAR.div(12);\n private readonly years: Decimal;\n private readonly months: Decimal;\n private readonly weeks: Decimal;\n private readonly days: Decimal;\n private readonly hours: Decimal;\n private readonly minutes: Decimal;\n private readonly seconds: Decimal;\n private readonly fractionAsSeconds: Decimal;\n private readonly totalSeconds: Decimal;\n\n private static readonly regex =\n /^P(?!$)(?:(\\d+(?:\\.\\d+(?=Y$))?)Y)?(?:(\\d+(?:\\.\\d+(?=M$))?)M)?(?:(\\d+(?:\\.\\d+(?=W$))?)W)?(?:(\\d+(?:\\.\\d+(?=D$))?)D)?(?:T(?!$)(?:(\\d+(?:\\.\\d+(?=H$))?)H)?(?:(\\d+(?:\\.\\d+(?=M$))?)M)?(?:(\\d+(?:\\.\\d+(?=S$))?)S)?)?$/;\n\n constructor(value: string) {\n const {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n fractionAsSeconds,\n totalSeconds,\n } = IfcDurationValue.parseIfcDuration(value);\n this.years = years;\n this.months = months;\n this.weeks = weeks;\n this.days = days;\n this.hours = hours;\n this.minutes = minutes;\n this.seconds = seconds;\n this.totalSeconds = totalSeconds;\n this.fractionAsSeconds = fractionAsSeconds;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDuration(value: string): {\n years: Decimal;\n months: Decimal;\n weeks: Decimal;\n days: Decimal;\n hours: Decimal;\n minutes: Decimal;\n seconds: Decimal;\n fractionAsSeconds: Decimal;\n totalSeconds: Decimal;\n } {\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 yearsVal,\n monthsVal,\n weeksVal,\n daysVal,\n hoursVal,\n minutesVal,\n secondsVal,\n ] = match;\n var years = new Decimal(isNullish(yearsVal) ? \"0\" : yearsVal);\n var months = new Decimal(isNullish(monthsVal) ? \"0\" : monthsVal);\n var weeks = new Decimal(isNullish(weeksVal) ? \"0\" : weeksVal);\n var days = new Decimal(isNullish(daysVal) ? \"0\" : daysVal);\n var hours = new Decimal(isNullish(hoursVal) ? \"0\" : hoursVal);\n var minutes = new Decimal(isNullish(minutesVal) ? \"0\" : minutesVal);\n var seconds = new Decimal(isNullish(secondsVal) ? \"0\" : secondsVal);\n var fractionAsSeconds = IfcDurationValue.getFractionAsSeconds(\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds\n );\n var totalSeconds = years\n .mul(IfcDurationValue.YEAR)\n .plus(months.mul(IfcDurationValue.MONTH))\n .plus(weeks.mul(IfcDurationValue.WEEK))\n .plus(days.mul(IfcDurationValue.DAY))\n .plus(hours.mul(IfcDurationValue.HOUR))\n .plus(minutes.mul(IfcDurationValue.MINUTE))\n .plus(seconds);\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n fractionAsSeconds,\n totalSeconds,\n };\n }\n\n private static getFractionAsSeconds(\n years: Decimal,\n months: Decimal,\n weeks: Decimal,\n days: Decimal,\n hours: Decimal,\n minutes: Decimal,\n seconds: Decimal\n ) {\n if (!seconds.isZero() && !seconds.isInteger()) {\n return seconds.minus(seconds.divToInt(1));\n }\n if (!minutes.isZero() && !minutes.isInteger()) {\n return minutes.minus(minutes.divToInt(1)).times(IfcDurationValue.MINUTE);\n }\n if (!hours.isZero() && !hours.isInteger()) {\n return hours.minus(hours.divToInt(1)).times(IfcDurationValue.HOUR);\n }\n if (!days.isZero() && !days.isInteger()) {\n return days.minus(days.divToInt(1)).times(IfcDurationValue.DAY);\n }\n if (!weeks.isZero() && !weeks.isInteger()) {\n return weeks.minus(weeks.divToInt(1)).times(IfcDurationValue.WEEK);\n }\n if (!months.isZero() && !months.isInteger()) {\n return months.minus(months.divToInt(1)).times(IfcDurationValue.MONTH);\n }\n if (!years.isZero() && !years.isInteger()) {\n return years.minus(years.divToInt(1)).times(IfcDurationValue.YEAR);\n }\n return new Decimal(0);\n }\n\n public static of(value: string): IfcDurationValue {\n return new IfcDurationValue(value);\n }\n\n getValue(): IfcDurationValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DURATION;\n }\n\n static isIfcDurationValueType(arg: any): arg is IfcDurationValue {\n return (\n arg instanceof IfcDurationValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDurationValue.regex)) &&\n !isNullish(arg.totalSeconds))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return !isNullish(str.match(this.regex));\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDurationValue.isIfcDurationValueType(other) &&\n this.totalSeconds.eq(other.totalSeconds)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDurationValue): number {\n var diff = this.totalSeconds.minus(other.totalSeconds);\n return Decimal.sign(diff);\n }\n\n getYears() {\n return this.years;\n }\n getMonths() {\n return this.months;\n }\n getWeeks() {\n return this.weeks;\n }\n getDays() {\n return this.days;\n }\n getHours() {\n return this.hours;\n }\n getMinutes() {\n return this.minutes;\n }\n getSeconds() {\n return this.seconds;\n }\n getTotalSeconds() {\n return this.totalSeconds;\n }\n getFractionAsSeconds() {\n return this.fractionAsSeconds;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/value/IfcDurationValue.ts"],"names":[],"mappings":"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","file":"value/IfcDurationValue.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 IfcDurationValue\n implements Value<IfcDurationValue>, Comparable<IfcDurationValue>\n{\n private readonly stringRepresentation;\n private static readonly MINUTE = new Decimal(60);\n private static readonly HOUR = IfcDurationValue.MINUTE.mul(60);\n private static readonly DAY = IfcDurationValue.HOUR.mul(24);\n private static readonly WEEK = IfcDurationValue.DAY.mul(7);\n private static readonly YEAR = new Decimal(31557600);\n private static readonly MONTH = IfcDurationValue.YEAR.div(12);\n private readonly years: Decimal;\n private readonly months: Decimal;\n private readonly weeks: Decimal;\n private readonly days: Decimal;\n private readonly hours: Decimal;\n private readonly minutes: Decimal;\n private readonly seconds: Decimal;\n private readonly fractionAsSeconds: Decimal;\n private readonly totalSeconds: Decimal;\n\n private static readonly regex =\n /^P(?!$)(?:(\\d+(?:\\.\\d+(?=Y$))?)Y)?(?:(\\d+(?:\\.\\d+(?=M$))?)M)?(?:(\\d+(?:\\.\\d+(?=W$))?)W)?(?:(\\d+(?:\\.\\d+(?=D$))?)D)?(?:T(?!$)(?:(\\d+(?:\\.\\d+(?=H$))?)H)?(?:(\\d+(?:\\.\\d+(?=M$))?)M)?(?:(\\d+(?:\\.\\d+(?=S$))?)S)?)?$/;\n\n constructor(value: string) {\n const {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n fractionAsSeconds,\n totalSeconds,\n } = IfcDurationValue.parseIfcDuration(value);\n this.years = years;\n this.months = months;\n this.weeks = weeks;\n this.days = days;\n this.hours = hours;\n this.minutes = minutes;\n this.seconds = seconds;\n this.totalSeconds = totalSeconds;\n this.fractionAsSeconds = fractionAsSeconds;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDuration(value: string): {\n years: Decimal;\n months: Decimal;\n weeks: Decimal;\n days: Decimal;\n hours: Decimal;\n minutes: Decimal;\n seconds: Decimal;\n fractionAsSeconds: Decimal;\n totalSeconds: Decimal;\n } {\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 yearsVal,\n monthsVal,\n weeksVal,\n daysVal,\n hoursVal,\n minutesVal,\n secondsVal,\n ] = match;\n var years = new Decimal(isNullish(yearsVal) ? \"0\" : yearsVal);\n var months = new Decimal(isNullish(monthsVal) ? \"0\" : monthsVal);\n var weeks = new Decimal(isNullish(weeksVal) ? \"0\" : weeksVal);\n var days = new Decimal(isNullish(daysVal) ? \"0\" : daysVal);\n var hours = new Decimal(isNullish(hoursVal) ? \"0\" : hoursVal);\n var minutes = new Decimal(isNullish(minutesVal) ? \"0\" : minutesVal);\n var seconds = new Decimal(isNullish(secondsVal) ? \"0\" : secondsVal);\n var fractionAsSeconds = IfcDurationValue.getFractionAsSeconds(\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds\n );\n var totalSeconds = years\n .mul(IfcDurationValue.YEAR)\n .plus(months.mul(IfcDurationValue.MONTH))\n .plus(weeks.mul(IfcDurationValue.WEEK))\n .plus(days.mul(IfcDurationValue.DAY))\n .plus(hours.mul(IfcDurationValue.HOUR))\n .plus(minutes.mul(IfcDurationValue.MINUTE))\n .plus(seconds);\n return {\n years,\n months,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n fractionAsSeconds,\n totalSeconds,\n };\n }\n\n private static getFractionAsSeconds(\n years: Decimal,\n months: Decimal,\n weeks: Decimal,\n days: Decimal,\n hours: Decimal,\n minutes: Decimal,\n seconds: Decimal\n ) {\n if (!seconds.isZero() && !seconds.isInteger()) {\n return seconds.minus(seconds.divToInt(1));\n }\n if (!minutes.isZero() && !minutes.isInteger()) {\n return minutes.minus(minutes.divToInt(1)).times(IfcDurationValue.MINUTE);\n }\n if (!hours.isZero() && !hours.isInteger()) {\n return hours.minus(hours.divToInt(1)).times(IfcDurationValue.HOUR);\n }\n if (!days.isZero() && !days.isInteger()) {\n return days.minus(days.divToInt(1)).times(IfcDurationValue.DAY);\n }\n if (!weeks.isZero() && !weeks.isInteger()) {\n return weeks.minus(weeks.divToInt(1)).times(IfcDurationValue.WEEK);\n }\n if (!months.isZero() && !months.isInteger()) {\n return months.minus(months.divToInt(1)).times(IfcDurationValue.MONTH);\n }\n if (!years.isZero() && !years.isInteger()) {\n return years.minus(years.divToInt(1)).times(IfcDurationValue.YEAR);\n }\n return new Decimal(0);\n }\n\n public static of(value: string): IfcDurationValue {\n return new IfcDurationValue(value);\n }\n\n getValue(): IfcDurationValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DURATION;\n }\n\n static isIfcDurationValueType(arg: any): arg is IfcDurationValue {\n return (\n arg instanceof IfcDurationValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDurationValue.regex)) &&\n !isNullish(arg.totalSeconds))\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 IfcDurationValue.isIfcDurationValueType(other) &&\n this.totalSeconds.eq(other.totalSeconds)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDurationValue): number {\n var diff = this.totalSeconds.minus(other.totalSeconds);\n return Decimal.sign(diff);\n }\n\n getYears() {\n return this.years;\n }\n getMonths() {\n return this.months;\n }\n getWeeks() {\n return this.weeks;\n }\n getDays() {\n return this.days;\n }\n getHours() {\n return this.hours;\n }\n getMinutes() {\n return this.minutes;\n }\n getSeconds() {\n return this.seconds;\n }\n getTotalSeconds() {\n return this.totalSeconds;\n }\n getFractionAsSeconds() {\n return this.fractionAsSeconds;\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) {
@@ -63,7 +66,7 @@ class IfcTimeValue {
63
66
  !(0, IfcExpressionUtils_js_1.isNullish)(arg.stringRepresentation.match(IfcTimeValue.regex))));
64
67
  }
65
68
  static isValidStringRepresentation(str) {
66
- return !(0, IfcExpressionUtils_js_1.isNullish)(str.match(this.regex));
69
+ return this.regex.test(str);
67
70
  }
68
71
  equals(other) {
69
72
  return (IfcTimeValue.isIfcTimeValueType(other) &&
@@ -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,CAAC,IAAA,iCAAS,EAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,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 !isNullish(str.match(this.regex));\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":";;;;;;AAGA,+CAAwC;AACxC,yEAA0D;AAC1D,kFAA4E;AAC5E,4DAAiC;AAEjC,MAAa,YAAY;IAavB,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,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAa;QAOtC,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,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,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,MAAM,cAAc,GAAG,IAAA,iCAAS,EAAC,eAAe,CAAC;YAC/C,CAAC,CAAC,IAAI,oBAAO,CAAC,GAAG,CAAC;YAClB,CAAC,CAAC,IAAI,oBAAO,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,+BAA+B;QACvE,MAAM,gBAAgB,GAAG,IAAA,iCAAS,EAAC,YAAY,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,YAAY,KAAK,GAAG;gBACtB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,MAAM,qBAAqB,GACzB,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAClE,MAAM,uBAAuB,GAC3B,gBAAgB;YAChB,CAAC,IAAA,iCAAS,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAA,iCAAS,EAAC,aAAa,CAAC,CAAC;QACzC,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;YACvB,OAAO;SACR,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;;AA5HH,oCA6HC;AAnHyB,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 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"]}