@itwin/core-quantity 4.9.0-dev.8 → 4.10.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -1
- package/lib/cjs/Constants.js.map +1 -1
- package/lib/cjs/Exception.d.ts +3 -1
- package/lib/cjs/Exception.d.ts.map +1 -1
- package/lib/cjs/Exception.js +2 -0
- package/lib/cjs/Exception.js.map +1 -1
- package/lib/cjs/Formatter/Format.d.ts +14 -0
- package/lib/cjs/Formatter/Format.d.ts.map +1 -1
- package/lib/cjs/Formatter/Format.js +58 -0
- package/lib/cjs/Formatter/Format.js.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.d.ts +5 -1
- package/lib/cjs/Formatter/FormatEnums.d.ts.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.js +10 -0
- package/lib/cjs/Formatter/FormatEnums.js.map +1 -1
- package/lib/cjs/Formatter/Formatter.d.ts +4 -0
- package/lib/cjs/Formatter/Formatter.d.ts.map +1 -1
- package/lib/cjs/Formatter/Formatter.js +114 -13
- package/lib/cjs/Formatter/Formatter.js.map +1 -1
- package/lib/cjs/Formatter/FormatterSpec.d.ts +8 -2
- package/lib/cjs/Formatter/FormatterSpec.d.ts.map +1 -1
- package/lib/cjs/Formatter/FormatterSpec.js +26 -2
- package/lib/cjs/Formatter/FormatterSpec.js.map +1 -1
- package/lib/cjs/Formatter/Interfaces.d.ts +11 -0
- package/lib/cjs/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/cjs/Formatter/Interfaces.js.map +1 -1
- package/lib/cjs/Interfaces.js.map +1 -1
- package/lib/cjs/Parser.d.ts +7 -1
- package/lib/cjs/Parser.d.ts.map +1 -1
- package/lib/cjs/Parser.js +158 -4
- package/lib/cjs/Parser.js.map +1 -1
- package/lib/cjs/ParserSpec.d.ts +5 -1
- package/lib/cjs/ParserSpec.d.ts.map +1 -1
- package/lib/cjs/ParserSpec.js +20 -1
- package/lib/cjs/ParserSpec.js.map +1 -1
- package/lib/cjs/Quantity.d.ts +9 -0
- package/lib/cjs/Quantity.d.ts.map +1 -1
- package/lib/cjs/Quantity.js +15 -1
- package/lib/cjs/Quantity.js.map +1 -1
- package/lib/cjs/Unit.js.map +1 -1
- package/lib/cjs/core-quantity.js.map +1 -1
- package/lib/esm/Constants.js.map +1 -1
- package/lib/esm/Exception.d.ts +3 -1
- package/lib/esm/Exception.d.ts.map +1 -1
- package/lib/esm/Exception.js +2 -0
- package/lib/esm/Exception.js.map +1 -1
- package/lib/esm/Formatter/Format.d.ts +14 -0
- package/lib/esm/Formatter/Format.d.ts.map +1 -1
- package/lib/esm/Formatter/Format.js +59 -1
- package/lib/esm/Formatter/Format.js.map +1 -1
- package/lib/esm/Formatter/FormatEnums.d.ts +5 -1
- package/lib/esm/Formatter/FormatEnums.d.ts.map +1 -1
- package/lib/esm/Formatter/FormatEnums.js +10 -0
- package/lib/esm/Formatter/FormatEnums.js.map +1 -1
- package/lib/esm/Formatter/Formatter.d.ts +4 -0
- package/lib/esm/Formatter/Formatter.d.ts.map +1 -1
- package/lib/esm/Formatter/Formatter.js +114 -13
- package/lib/esm/Formatter/Formatter.js.map +1 -1
- package/lib/esm/Formatter/FormatterSpec.d.ts +8 -2
- package/lib/esm/Formatter/FormatterSpec.d.ts.map +1 -1
- package/lib/esm/Formatter/FormatterSpec.js +26 -2
- package/lib/esm/Formatter/FormatterSpec.js.map +1 -1
- package/lib/esm/Formatter/Interfaces.d.ts +11 -0
- package/lib/esm/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/esm/Formatter/Interfaces.js.map +1 -1
- package/lib/esm/Interfaces.js.map +1 -1
- package/lib/esm/Parser.d.ts +7 -1
- package/lib/esm/Parser.d.ts.map +1 -1
- package/lib/esm/Parser.js +158 -4
- package/lib/esm/Parser.js.map +1 -1
- package/lib/esm/ParserSpec.d.ts +5 -1
- package/lib/esm/ParserSpec.d.ts.map +1 -1
- package/lib/esm/ParserSpec.js +20 -1
- package/lib/esm/ParserSpec.js.map +1 -1
- package/lib/esm/Quantity.d.ts +9 -0
- package/lib/esm/Quantity.d.ts.map +1 -1
- package/lib/esm/Quantity.js +13 -0
- package/lib/esm/Quantity.js.map +1 -1
- package/lib/esm/Unit.js.map +1 -1
- package/lib/esm/core-quantity.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
# Change Log - @itwin/core-quantity
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Fri, 13 Sep 2024 15:12:41 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.8.7
|
|
6
|
+
Fri, 13 Sep 2024 15:11:17 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 4.8.6
|
|
11
|
+
Fri, 06 Sep 2024 05:06:49 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
14
|
+
|
|
15
|
+
## 4.8.5
|
|
16
|
+
Wed, 28 Aug 2024 17:27:23 GMT
|
|
17
|
+
|
|
18
|
+
_Version update only_
|
|
19
|
+
|
|
20
|
+
## 4.8.4
|
|
21
|
+
Thu, 22 Aug 2024 17:37:06 GMT
|
|
22
|
+
|
|
23
|
+
_Version update only_
|
|
24
|
+
|
|
25
|
+
## 4.8.3
|
|
26
|
+
Fri, 16 Aug 2024 18:18:14 GMT
|
|
27
|
+
|
|
28
|
+
_Version update only_
|
|
29
|
+
|
|
30
|
+
## 4.8.2
|
|
31
|
+
Thu, 15 Aug 2024 15:33:49 GMT
|
|
32
|
+
|
|
33
|
+
_Version update only_
|
|
4
34
|
|
|
5
35
|
## 4.8.1
|
|
6
36
|
Mon, 12 Aug 2024 14:05:54 GMT
|
package/lib/cjs/Constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,yDAAyD;AAEzD;;GAEG;AACH,MAAa,iBAAiB;IAoB5B,2DAA2D;IACpD,MAAM,KAAK,8BAA8B;QAC9C,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;QAErD,iBAAiB,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;IACrD,CAAC;IAED,4DAA4D;IACrD,MAAM,KAAK,+BAA+B;QAC/C,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzD,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;QAEtD,iBAAiB,CAAC,0BAA0B,GAAG,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;IACtD,CAAC;;AA5CH,8CA6CC;AA5CwB,4BAAU,GAAG,EAAE,CAAC;AAChB,4BAAU,GAAG,EAAE,CAAC;AAChB,6BAAW,GAAG,EAAE,CAAC;AACjB,2BAAS,GAAG,EAAE,CAAC;AACf,4BAAU,GAAG,EAAE,CAAC;AAChB,6BAAW,GAAG,EAAE,CAAC;AACjB,4BAAU,GAAG,EAAE,CAAC;AAChB,qCAAmB,GAAG,IAAI,CAAC;AAC3B,qCAAmB,GAAG,IAAI,CAAC;AAC3B,kCAAgB,GAAG,GAAG,CAAC;AACvB,+BAAa,GAAG,GAAG,CAAC;AACpB,oCAAkB,GAAG,GAAG,CAAC;AACzB,iCAAe,GAAG,EAAE,CAAC;AACrB,iCAAe,GAAG,EAAE,CAAC;AACrB,8BAAY,GAAG,EAAE,CAAC;AAClB,8BAAY,GAAG,GAAG,CAAC;AAC3B,2CAAyB,GAAG,EAAE,CAAC;AAC/B,4CAA0B,GAAG,EAAE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,yDAAyD;AAEzD;;GAEG;AACH,MAAa,iBAAiB;IAoB5B,2DAA2D;IACpD,MAAM,KAAK,8BAA8B;QAC9C,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;QAErD,iBAAiB,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;IACrD,CAAC;IAED,4DAA4D;IACrD,MAAM,KAAK,+BAA+B;QAC/C,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzD,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;QAEtD,iBAAiB,CAAC,0BAA0B,GAAG,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;IACtD,CAAC;;AA5CH,8CA6CC;AA5CwB,4BAAU,GAAG,EAAE,CAAC;AAChB,4BAAU,GAAG,EAAE,CAAC;AAChB,6BAAW,GAAG,EAAE,CAAC;AACjB,2BAAS,GAAG,EAAE,CAAC;AACf,4BAAU,GAAG,EAAE,CAAC;AAChB,6BAAW,GAAG,EAAE,CAAC;AACjB,4BAAU,GAAG,EAAE,CAAC;AAChB,qCAAmB,GAAG,IAAI,CAAC;AAC3B,qCAAmB,GAAG,IAAI,CAAC;AAC3B,kCAAgB,GAAG,GAAG,CAAC;AACvB,+BAAa,GAAG,GAAG,CAAC;AACpB,oCAAkB,GAAG,GAAG,CAAC;AACzB,iCAAe,GAAG,EAAE,CAAC;AACrB,iCAAe,GAAG,EAAE,CAAC;AACrB,8BAAY,GAAG,EAAE,CAAC;AAClB,8BAAY,GAAG,GAAG,CAAC;AAC3B,2CAAyB,GAAG,EAAE,CAAC;AAC/B,4CAA0B,GAAG,EAAE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/** Constants used internally for both formatting and parsing.\n * @internal\n */\nexport class QuantityConstants {\n public static readonly CHAR_COMMA = 44;\n public static readonly CHAR_SPACE = 32;\n public static readonly CHAR_NUMBER = 35;\n public static readonly CHAR_PLUS = 43;\n public static readonly CHAR_MINUS = 45;\n public static readonly CHAR_PERIOD = 46;\n public static readonly CHAR_SLASH = 47;\n public static readonly CHAR_DIVISION_SLASH = 8725;\n public static readonly CHAR_FRACTION_SLASH = 8260;\n public static readonly CHAR_ONE_QUARTER = 188;\n public static readonly CHAR_ONE_HALF = 189;\n public static readonly CHAR_THREE_QUARTER = 190;\n public static readonly CHAR_DIGIT_ZERO = 48;\n public static readonly CHAR_DIGIT_NINE = 57;\n public static readonly CHAR_UPPER_E = 69;\n public static readonly CHAR_LOWER_E = 101;\n private static _LOCALE_DECIMAL_SEPARATOR = \"\";\n private static _LOCALE_THOUSAND_SEPARATOR = \"\";\n\n /** Return the decimal separator for the current locale. */\n public static get LocaleSpecificDecimalSeparator(): string {\n if (QuantityConstants._LOCALE_DECIMAL_SEPARATOR.length > 0)\n return QuantityConstants._LOCALE_DECIMAL_SEPARATOR;\n\n QuantityConstants._LOCALE_DECIMAL_SEPARATOR = \".\";\n const matches = (12345.6789).toLocaleString().match(/345(.*)67/);\n if (matches && matches.length > 1)\n QuantityConstants._LOCALE_DECIMAL_SEPARATOR = matches[1];\n\n return QuantityConstants._LOCALE_DECIMAL_SEPARATOR;\n }\n\n /** Return the thousand separator for the current locale. */\n public static get LocaleSpecificThousandSeparator(): string {\n if (QuantityConstants._LOCALE_THOUSAND_SEPARATOR.length > 0)\n return QuantityConstants._LOCALE_THOUSAND_SEPARATOR;\n\n QuantityConstants._LOCALE_THOUSAND_SEPARATOR = \",\";\n const matches = (12345.6789).toLocaleString().match(/12(.*)345/);\n if (matches && matches.length > 0)\n QuantityConstants._LOCALE_THOUSAND_SEPARATOR = matches[1];\n\n return QuantityConstants._LOCALE_THOUSAND_SEPARATOR;\n }\n}\n"]}
|
package/lib/cjs/Exception.d.ts
CHANGED
|
@@ -15,7 +15,9 @@ export declare enum QuantityStatus {
|
|
|
15
15
|
NoValueOrUnitFoundInString = 35043,
|
|
16
16
|
UnitLabelSuppliedButNotMatched = 35044,
|
|
17
17
|
UnknownUnit = 35045,
|
|
18
|
-
UnableToConvertParseTokensToQuantity = 35046
|
|
18
|
+
UnableToConvertParseTokensToQuantity = 35046,
|
|
19
|
+
UnsupportedUnit = 35047,
|
|
20
|
+
MissingRequiredProperty = 35048
|
|
19
21
|
}
|
|
20
22
|
/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.
|
|
21
23
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exception.d.ts","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,oBAAY,cAAc;IACxB,mBAAmB,QAAS;IAC5B,OAAO,IAAI;IACX,WAAW,QAA0B;IACrC,sBAAsB,QAA0B;IAChD,2BAA2B,QAA0B;IACrD,0BAA0B,QAA0B;IACpD,8BAA8B,QAA0B;IACxD,WAAW,QAA0B;IACrC,oCAAoC,QAA0B;
|
|
1
|
+
{"version":3,"file":"Exception.d.ts","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,oBAAY,cAAc;IACxB,mBAAmB,QAAS;IAC5B,OAAO,IAAI;IACX,WAAW,QAA0B;IACrC,sBAAsB,QAA0B;IAChD,2BAA2B,QAA0B;IACrD,0BAA0B,QAA0B;IACpD,8BAA8B,QAA0B;IACxD,WAAW,QAA0B;IACrC,oCAAoC,QAA0B;IAC9D,eAAe,QAA0B;IACzC,uBAAuB,QAA0B;CAClD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;aACD,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAIlF"}
|
package/lib/cjs/Exception.js
CHANGED
|
@@ -24,6 +24,8 @@ var QuantityStatus;
|
|
|
24
24
|
QuantityStatus[QuantityStatus["UnitLabelSuppliedButNotMatched"] = 35044] = "UnitLabelSuppliedButNotMatched";
|
|
25
25
|
QuantityStatus[QuantityStatus["UnknownUnit"] = 35045] = "UnknownUnit";
|
|
26
26
|
QuantityStatus[QuantityStatus["UnableToConvertParseTokensToQuantity"] = 35046] = "UnableToConvertParseTokensToQuantity";
|
|
27
|
+
QuantityStatus[QuantityStatus["UnsupportedUnit"] = 35047] = "UnsupportedUnit";
|
|
28
|
+
QuantityStatus[QuantityStatus["MissingRequiredProperty"] = 35048] = "MissingRequiredProperty";
|
|
27
29
|
})(QuantityStatus || (exports.QuantityStatus = QuantityStatus = {}));
|
|
28
30
|
/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.
|
|
29
31
|
* @beta
|
package/lib/cjs/Exception.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exception.js","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA2D;AAE3D;;;GAGG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"Exception.js","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA2D;AAE3D;;;GAGG;AACH,IAAY,cAYX;AAZD,WAAY,cAAc;IACxB,qFAA4B,CAAA;IAC5B,yDAAW,CAAA;IACX,qEAAqC,CAAA;IACrC,2FAAgD,CAAA;IAChD,qGAAqD,CAAA;IACrD,mGAAoD,CAAA;IACpD,2GAAwD,CAAA;IACxD,qEAAqC,CAAA;IACrC,uHAA8D,CAAA;IAC9D,6EAAyC,CAAA;IACzC,6FAAiD,CAAA;AACnD,CAAC,EAZW,cAAc,8BAAd,cAAc,QAYzB;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,2BAAY;IAC7C,YAA4C,WAAmB,EAAE,OAAgB;QAC/E,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QADc,gBAAW,GAAX,WAAW,CAAQ;QAE7D,IAAA,qBAAM,EAAC,WAAW,KAAK,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;CACF;AALD,sCAKC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Quantity\n */\n\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\n\n/**\n * Status codes used during Quantity parsing and formatting processing.\n * @beta\n */\nexport enum QuantityStatus {\n QUANTITY_ERROR_BASE = 0x88DF,\n Success = 0,\n InvalidJson = QUANTITY_ERROR_BASE + 1,\n InvalidCompositeFormat = QUANTITY_ERROR_BASE + 2,\n UnableToGenerateParseTokens = QUANTITY_ERROR_BASE + 3,\n NoValueOrUnitFoundInString = QUANTITY_ERROR_BASE + 4,\n UnitLabelSuppliedButNotMatched = QUANTITY_ERROR_BASE + 5,\n UnknownUnit = QUANTITY_ERROR_BASE + 6,\n UnableToConvertParseTokensToQuantity = QUANTITY_ERROR_BASE + 7,\n UnsupportedUnit = QUANTITY_ERROR_BASE + 8,\n MissingRequiredProperty = QUANTITY_ERROR_BASE + 9,\n}\n\n/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.\n * @beta\n */\nexport class QuantityError extends BentleyError {\n public constructor(public override readonly errorNumber: number, message?: string) {\n super(errorNumber, message);\n assert(errorNumber !== QuantityStatus.Success, message);\n }\n}\n"]}
|
|
@@ -23,6 +23,10 @@ export declare class BaseFormat {
|
|
|
23
23
|
protected _minWidth?: number;
|
|
24
24
|
protected _scientificType?: ScientificType;
|
|
25
25
|
protected _stationOffsetSize?: number;
|
|
26
|
+
protected _azimuthBase?: number;
|
|
27
|
+
protected _azimuthBaseUnit?: UnitProps;
|
|
28
|
+
protected _azimuthCounterClockwise?: boolean;
|
|
29
|
+
protected _revolutionUnit?: UnitProps;
|
|
26
30
|
protected _allowMathematicOperations: boolean;
|
|
27
31
|
constructor(name: string);
|
|
28
32
|
get name(): string;
|
|
@@ -54,8 +58,18 @@ export declare class BaseFormat {
|
|
|
54
58
|
set formatTraits(formatTraits: FormatTraits);
|
|
55
59
|
get spacer(): string | undefined;
|
|
56
60
|
set spacer(spacer: string | undefined);
|
|
61
|
+
get spacerOrDefault(): string;
|
|
57
62
|
get includeZero(): boolean | undefined;
|
|
58
63
|
set includeZero(includeZero: boolean | undefined);
|
|
64
|
+
get azimuthBase(): number | undefined;
|
|
65
|
+
set azimuthBase(azimuthBase: number | undefined);
|
|
66
|
+
get azimuthBaseUnit(): UnitProps | undefined;
|
|
67
|
+
set azimuthBaseUnit(azimuthBaseUnit: UnitProps | undefined);
|
|
68
|
+
get azimuthCounterClockwise(): boolean | undefined;
|
|
69
|
+
set azimuthCounterClockwise(azimuthCounterClockwise: boolean | undefined);
|
|
70
|
+
get azimuthCounterClockwiseOrDefault(): boolean;
|
|
71
|
+
get revolutionUnit(): UnitProps | undefined;
|
|
72
|
+
set revolutionUnit(revolutionUnit: UnitProps | undefined);
|
|
59
73
|
/** This method parses input string that is typically extracted for persisted JSON data and validates that the string is a valid FormatType. Throws exception if not valid. */
|
|
60
74
|
parseFormatTraits(formatTraitsFromJson: string | string[]): void;
|
|
61
75
|
/** This method returns true if the formatTrait is set in this Format object. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,8 +63,19 @@ class BaseFormat {
|
|
|
63
63
|
set formatTraits(formatTraits) { this._formatTraits = formatTraits; }
|
|
64
64
|
get spacer() { return this._spacer; }
|
|
65
65
|
set spacer(spacer) { this._spacer = spacer ?? this._spacer; }
|
|
66
|
+
get spacerOrDefault() { return this._spacer ?? " "; }
|
|
66
67
|
get includeZero() { return this._includeZero; }
|
|
67
68
|
set includeZero(includeZero) { this._includeZero = includeZero ?? this._includeZero; }
|
|
69
|
+
// default "north" is applied by the formatter (quarter rotation counter clockwise from east, the value depends on the units used)
|
|
70
|
+
get azimuthBase() { return this._azimuthBase; }
|
|
71
|
+
set azimuthBase(azimuthBase) { this._azimuthBase = azimuthBase; }
|
|
72
|
+
get azimuthBaseUnit() { return this._azimuthBaseUnit; }
|
|
73
|
+
set azimuthBaseUnit(azimuthBaseUnit) { this._azimuthBaseUnit = azimuthBaseUnit; }
|
|
74
|
+
get azimuthCounterClockwise() { return this._azimuthCounterClockwise; }
|
|
75
|
+
set azimuthCounterClockwise(azimuthCounterClockwise) { this._azimuthCounterClockwise = azimuthCounterClockwise; }
|
|
76
|
+
get azimuthCounterClockwiseOrDefault() { return this._azimuthCounterClockwise ?? false; }
|
|
77
|
+
get revolutionUnit() { return this._revolutionUnit; }
|
|
78
|
+
set revolutionUnit(revolutionUnit) { this._revolutionUnit = revolutionUnit; }
|
|
68
79
|
/** This method parses input string that is typically extracted for persisted JSON data and validates that the string is a valid FormatType. Throws exception if not valid. */
|
|
69
80
|
parseFormatTraits(formatTraitsFromJson) {
|
|
70
81
|
const formatTraits = (Array.isArray(formatTraitsFromJson)) ? formatTraitsFromJson : formatTraitsFromJson.split(/,|;|\|/);
|
|
@@ -143,6 +154,16 @@ class BaseFormat {
|
|
|
143
154
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationSeparator' attribute. It should be an empty or one character string.`);
|
|
144
155
|
this._stationSeparator = formatProps.stationSeparator;
|
|
145
156
|
}
|
|
157
|
+
if (undefined !== formatProps.azimuthBase) { // optional; default is a quarter rotation (90 degrees) which represents north
|
|
158
|
+
if (typeof (formatProps.azimuthBase) !== "number")
|
|
159
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBase' attribute. It should be of type 'number'.`);
|
|
160
|
+
this._azimuthBase = formatProps.azimuthBase;
|
|
161
|
+
}
|
|
162
|
+
if (undefined !== formatProps.azimuthCounterClockwise) { // optional; default is false
|
|
163
|
+
if (typeof (formatProps.azimuthCounterClockwise) !== "boolean")
|
|
164
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthCounterClockwise' attribute. It should be of type 'boolean'.`);
|
|
165
|
+
this._azimuthCounterClockwise = formatProps.azimuthCounterClockwise;
|
|
166
|
+
}
|
|
146
167
|
if (undefined !== formatProps.allowMathematicOperations) { // optional; default is false
|
|
147
168
|
if (typeof (formatProps.allowMathematicOperations) !== "boolean")
|
|
148
169
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'allowMathematicOperations' attribute. It should be of type 'boolean'.`);
|
|
@@ -203,6 +224,10 @@ class Format extends BaseFormat {
|
|
|
203
224
|
newFormat._formatTraits = this._formatTraits;
|
|
204
225
|
newFormat._spacer = this._spacer;
|
|
205
226
|
newFormat._includeZero = this._includeZero;
|
|
227
|
+
newFormat._azimuthBase = this._azimuthBase;
|
|
228
|
+
newFormat._azimuthBaseUnit = this._azimuthBaseUnit;
|
|
229
|
+
newFormat._azimuthCounterClockwise = this._azimuthCounterClockwise;
|
|
230
|
+
newFormat._revolutionUnit = this._revolutionUnit;
|
|
206
231
|
newFormat._customProps = this._customProps;
|
|
207
232
|
this._units && (newFormat._units = [...this._units]);
|
|
208
233
|
if (newFormat._units) {
|
|
@@ -274,6 +299,29 @@ class Format extends BaseFormat {
|
|
|
274
299
|
if (undefined === this.units || this.units.length === 0)
|
|
275
300
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with no valid 'units'`);
|
|
276
301
|
}
|
|
302
|
+
if (this.type === FormatEnums_1.FormatType.Azimuth || this.type === FormatEnums_1.FormatType.Bearing) {
|
|
303
|
+
// these units cannot be loaded from loadFormatProperties() because they require an async call, and the method signature is already public
|
|
304
|
+
if (undefined !== jsonObj.azimuthBaseUnit) {
|
|
305
|
+
if (typeof (jsonObj.azimuthBaseUnit) !== "string")
|
|
306
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBaseUnit' attribute. It should be of type 'string'.`);
|
|
307
|
+
const baseUnit = await unitsProvider.findUnitByName(jsonObj.azimuthBaseUnit);
|
|
308
|
+
if (!baseUnit || !baseUnit.isValid)
|
|
309
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.azimuthBaseUnit}' for azimuthBaseUnit in Format '${this.name}'.`);
|
|
310
|
+
this._azimuthBaseUnit = baseUnit;
|
|
311
|
+
}
|
|
312
|
+
if (undefined !== jsonObj.revolutionUnit) {
|
|
313
|
+
if (typeof (jsonObj.revolutionUnit) !== "string")
|
|
314
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'revolutionUnit' attribute. It should be of type 'string'.`);
|
|
315
|
+
const revolutionUnit = await unitsProvider.findUnitByName(jsonObj.revolutionUnit);
|
|
316
|
+
if (!revolutionUnit || !revolutionUnit.isValid)
|
|
317
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.revolutionUnit}' for revolutionUnit in Format '${this.name}'.`);
|
|
318
|
+
this._revolutionUnit = revolutionUnit;
|
|
319
|
+
}
|
|
320
|
+
if (this._revolutionUnit === undefined)
|
|
321
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);
|
|
322
|
+
if (this._azimuthBase !== undefined && this._azimuthBaseUnit === undefined)
|
|
323
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);
|
|
324
|
+
}
|
|
277
325
|
}
|
|
278
326
|
/** Create a Format from FormatProps */
|
|
279
327
|
static async createFromJSON(name, unitsProvider, formatProps) {
|
|
@@ -299,6 +347,8 @@ class Format extends BaseFormat {
|
|
|
299
347
|
units,
|
|
300
348
|
};
|
|
301
349
|
}
|
|
350
|
+
const azimuthBaseUnit = this.azimuthBaseUnit ? this.azimuthBaseUnit.name : undefined;
|
|
351
|
+
const revolutionUnit = this.revolutionUnit ? this.revolutionUnit.name : undefined;
|
|
302
352
|
if (this.customProps)
|
|
303
353
|
return {
|
|
304
354
|
type: (0, FormatEnums_1.formatTypeToString)(this.type),
|
|
@@ -313,6 +363,10 @@ class Format extends BaseFormat {
|
|
|
313
363
|
scientificType: this.scientificType ? (0, FormatEnums_1.scientificTypeToString)(this.scientificType) : undefined,
|
|
314
364
|
stationOffsetSize: this.stationOffsetSize,
|
|
315
365
|
stationSeparator: this.stationSeparator,
|
|
366
|
+
azimuthBase: this.azimuthBase,
|
|
367
|
+
azimuthBaseUnit,
|
|
368
|
+
azimuthCounterClockwise: this.azimuthCounterClockwise,
|
|
369
|
+
revolutionUnit,
|
|
316
370
|
composite,
|
|
317
371
|
custom: this.customProps,
|
|
318
372
|
};
|
|
@@ -329,6 +383,10 @@ class Format extends BaseFormat {
|
|
|
329
383
|
scientificType: this.scientificType ? (0, FormatEnums_1.scientificTypeToString)(this.scientificType) : undefined,
|
|
330
384
|
stationOffsetSize: this.stationOffsetSize,
|
|
331
385
|
stationSeparator: this.stationSeparator,
|
|
386
|
+
azimuthBase: this.azimuthBase,
|
|
387
|
+
azimuthBaseUnit,
|
|
388
|
+
azimuthCounterClockwise: this.azimuthCounterClockwise,
|
|
389
|
+
revolutionUnit,
|
|
332
390
|
composite,
|
|
333
391
|
};
|
|
334
392
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Format.js","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Quantity\r\n */\r\n\r\nimport { QuantityConstants } from \"../Constants\";\r\nimport { QuantityError, QuantityStatus } from \"../Exception\";\r\nimport { UnitProps, UnitsProvider } from \"../Interfaces\";\r\nimport { DecimalPrecision, FormatTraits, formatTraitsToArray, FormatType, formatTypeToString, FractionalPrecision,\r\n getTraitString, parseFormatTrait, parseFormatType, parsePrecision, parseScientificType, parseShowSignOption, ScientificType,\r\n scientificTypeToString, ShowSignOption, showSignOptionToString } from \"./FormatEnums\";\r\nimport { CloneOptions, CustomFormatProps, FormatProps, isCustomFormatProps } from \"./Interfaces\";\r\n\r\n// cSpell:ignore ZERONORMALIZED, nosign, onlynegative, signalways, negativeparentheses\r\n// cSpell:ignore trailzeroes, keepsinglezero, zeroempty, keepdecimalpoint, applyrounding, fractiondash, showunitlabel, prependunitlabel, exponentonlynegative\r\n\r\n/** A base Format class with shared properties and functionality between quantity and ecschema-metadata Format classes\r\n * @beta\r\n */\r\nexport class BaseFormat {\r\n private _name = \"\";\r\n protected _roundFactor: number = 0.0;\r\n protected _type: FormatType = FormatType.Decimal; // required; options are decimal, fractional, scientific, station\r\n protected _precision: number = DecimalPrecision.Six; // required\r\n protected _showSignOption: ShowSignOption = ShowSignOption.OnlyNegative; // options: noSign, onlyNegative, signAlways, negativeParentheses\r\n protected _decimalSeparator: string = QuantityConstants.LocaleSpecificDecimalSeparator;\r\n protected _thousandSeparator: string = QuantityConstants.LocaleSpecificThousandSeparator;\r\n protected _uomSeparator = \" \"; // optional; default is \" \"; defined separator between magnitude and the unit\r\n protected _stationSeparator = \"+\"; // optional; default is \"+\"\r\n protected _formatTraits: FormatTraits = FormatTraits.Uninitialized;\r\n protected _spacer: string = \" \"; // optional; default is \" \"\r\n protected _includeZero: boolean = true; // optional; default is true\r\n protected _minWidth?: number; // optional; positive int\r\n protected _scientificType?: ScientificType; // required if type is scientific; options: normalized, zeroNormalized\r\n protected _stationOffsetSize?: number; // required when type is station; positive integer > 0\r\n protected _allowMathematicOperations: boolean = false; // optional; enables calculating mathematic operations like addition and subtraction; default is false.\r\n\r\n constructor(name: string) {\r\n this._name = name;\r\n }\r\n\r\n public get name(): string { return this._name; }\r\n\r\n public get roundFactor(): number { return this._roundFactor; }\r\n public set roundFactor(roundFactor: number) { this._roundFactor = roundFactor; }\r\n\r\n public get type(): FormatType { return this._type; }\r\n public set type(formatType: FormatType) { this._type = formatType; }\r\n\r\n public get precision(): DecimalPrecision | FractionalPrecision { return this._precision; }\r\n public set precision(precision: DecimalPrecision | FractionalPrecision) { this._precision = precision; }\r\n\r\n public get minWidth(): number | undefined { return this._minWidth; }\r\n public set minWidth(minWidth: number | undefined) { this._minWidth = minWidth; }\r\n\r\n public get scientificType(): ScientificType | undefined { return this._scientificType; }\r\n public set scientificType(scientificType: ScientificType | undefined) { this._scientificType = scientificType; }\r\n\r\n public get showSignOption(): ShowSignOption { return this._showSignOption; }\r\n public set showSignOption(showSignOption: ShowSignOption) { this._showSignOption = showSignOption; }\r\n\r\n public get decimalSeparator(): string { return this._decimalSeparator; }\r\n public set decimalSeparator(decimalSeparator: string) { this._decimalSeparator = decimalSeparator; }\r\n\r\n public get thousandSeparator(): string { return this._thousandSeparator; }\r\n public set thousandSeparator(thousandSeparator: string) { this._thousandSeparator = thousandSeparator; }\r\n\r\n public get uomSeparator(): string { return this._uomSeparator; }\r\n public set uomSeparator(uomSeparator: string) { this._uomSeparator = uomSeparator; }\r\n\r\n public get stationSeparator(): string { return this._stationSeparator; }\r\n public set stationSeparator(stationSeparator: string) { this._stationSeparator = stationSeparator; }\r\n\r\n public get stationOffsetSize(): number | undefined { return this._stationOffsetSize; }\r\n public set stationOffsetSize(stationOffsetSize: number | undefined) {stationOffsetSize = this._stationOffsetSize = stationOffsetSize; }\r\n\r\n public get allowMathematicOperations(): boolean { return this._allowMathematicOperations; }\r\n public set allowMathematicOperations(allowMathematicOperations: boolean) { this._allowMathematicOperations = allowMathematicOperations; }\r\n\r\n public get formatTraits(): FormatTraits { return this._formatTraits; }\r\n public set formatTraits(formatTraits: FormatTraits) { this._formatTraits = formatTraits; }\r\n\r\n public get spacer(): string | undefined { return this._spacer; }\r\n public set spacer(spacer: string | undefined) { this._spacer = spacer ?? this._spacer; }\r\n\r\n public get includeZero(): boolean | undefined { return this._includeZero; }\r\n public set includeZero(includeZero: boolean | undefined) { this._includeZero = includeZero ?? this._includeZero; }\r\n\r\n /** This method parses input string that is typically extracted for persisted JSON data and validates that the string is a valid FormatType. Throws exception if not valid. */\r\n public parseFormatTraits(formatTraitsFromJson: string | string[]) {\r\n const formatTraits = (Array.isArray(formatTraitsFromJson)) ? formatTraitsFromJson : formatTraitsFromJson.split(/,|;|\\|/);\r\n formatTraits.forEach((formatTraitsString: string) => { // for each element in the string array\r\n const formatTrait = parseFormatTrait(formatTraitsString, this.name);\r\n this._formatTraits = this.formatTraits | formatTrait;\r\n });\r\n }\r\n\r\n /** This method returns true if the formatTrait is set in this Format object. */\r\n public hasFormatTraitSet(formatTrait: FormatTraits): boolean {\r\n return (this._formatTraits & formatTrait) === formatTrait;\r\n }\r\n\r\n public loadFormatProperties(formatProps: FormatProps) {\r\n this._type = parseFormatType(formatProps.type, this.name);\r\n\r\n if (formatProps.precision !== undefined) {\r\n if (!Number.isInteger(formatProps.precision)) // mut be an integer\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'precision' attribute. It should be an integer.`);\r\n\r\n this._precision = parsePrecision(formatProps.precision, this._type, this.name);\r\n }\r\n if (this.type === FormatType.Scientific) {\r\n if (undefined === formatProps.scientificType) // if format type is scientific and scientific type is undefined, throw\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Scientific' type therefore the attribute 'scientificType' is required.`);\r\n\r\n this._scientificType = parseScientificType(formatProps.scientificType, this.name);\r\n }\r\n\r\n if (undefined !== formatProps.roundFactor) { // optional; default is 0.0\r\n if (typeof (formatProps.roundFactor) !== \"number\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'roundFactor' attribute. It should be of type 'number'.`);\r\n if (formatProps.roundFactor !== this.roundFactor) // if roundFactor isn't default value of 0.0, reassign roundFactor variable\r\n this._roundFactor = formatProps.roundFactor;\r\n }\r\n\r\n if (undefined !== formatProps.minWidth) { // optional\r\n if (!Number.isInteger(formatProps.minWidth) || formatProps.minWidth < 0) // must be a positive int\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'minWidth' attribute. It should be a positive integer.`);\r\n this._minWidth = formatProps.minWidth;\r\n }\r\n if (FormatType.Station === this.type) {\r\n if (undefined === formatProps.stationOffsetSize)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Station' type therefore the attribute 'stationOffsetSize' is required.`);\r\n if (!Number.isInteger(formatProps.stationOffsetSize) || formatProps.stationOffsetSize < 0) // must be a positive int > 0\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationOffsetSize' attribute. It should be a positive integer.`);\r\n this._stationOffsetSize = formatProps.stationOffsetSize;\r\n }\r\n\r\n if (undefined !== formatProps.showSignOption) { // optional; default is \"onlyNegative\"\r\n this._showSignOption = parseShowSignOption(formatProps.showSignOption, this.name);\r\n }\r\n\r\n if (undefined !== formatProps.formatTraits && formatProps.formatTraits.length !== 0) { // FormatTraits is optional\r\n if (!Array.isArray(formatProps.formatTraits) && typeof (formatProps.formatTraits) !== \"string\") // must be either an array of strings or a string\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'formatTraits' attribute. It should be of type 'string' or 'string[]'.`);\r\n this.parseFormatTraits(formatProps.formatTraits); // check that all of the options for formatTraits are valid. If now, throw\r\n }\r\n\r\n if (undefined !== formatProps.decimalSeparator) { // optional\r\n if (typeof (formatProps.decimalSeparator) !== \"string\") // not a string or not a one character string\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.decimalSeparator.length > 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be an empty or one character string.`);\r\n this._decimalSeparator = formatProps.decimalSeparator;\r\n }\r\n\r\n if (undefined !== formatProps.thousandSeparator) { // optional\r\n if (typeof (formatProps.thousandSeparator) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'thousandSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.thousandSeparator.length > 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'thousandSeparator' attribute. It should be an empty or one character string.`);\r\n this._thousandSeparator = formatProps.thousandSeparator;\r\n }\r\n\r\n if (undefined !== formatProps.uomSeparator) { // optional; default is \" \"\r\n if (typeof (formatProps.uomSeparator) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'uomSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.uomSeparator.length < 0 || formatProps.uomSeparator.length > 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'uomSeparator' attribute. It should be an empty or one character string.`);\r\n this._uomSeparator = formatProps.uomSeparator;\r\n }\r\n\r\n if (undefined !== formatProps.stationSeparator) { // optional; default is \"+\"\r\n if (typeof (formatProps.stationSeparator) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.stationSeparator.length > 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationSeparator' attribute. It should be an empty or one character string.`);\r\n this._stationSeparator = formatProps.stationSeparator;\r\n }\r\n\r\n if (undefined !== formatProps.allowMathematicOperations) { // optional; default is false\r\n if (typeof (formatProps.allowMathematicOperations) !== \"boolean\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'allowMathematicOperations' attribute. It should be of type 'boolean'.`);\r\n this._allowMathematicOperations = formatProps.allowMathematicOperations;\r\n }\r\n }\r\n}\r\n\r\n/** A class used to define the specifications for formatting quantity values. This class is typically loaded by reading [[FormatProps]].\r\n * @beta\r\n */\r\nexport class Format extends BaseFormat {\r\n protected _units?: Array<[UnitProps, string | undefined]>;\r\n protected _customProps?: any; // used by custom formatters and parsers\r\n\r\n /** Constructor\r\n * @param name The name of a format specification. TODO: make optional or remove\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n }\r\n\r\n public get units(): Array<[UnitProps, string | undefined]> | undefined { return this._units; }\r\n public get hasUnits(): boolean { return this._units !== undefined && this._units.length > 0; }\r\n public get customProps(): any { return this._customProps; }\r\n\r\n public static isFormatTraitSetInProps(formatProps: FormatProps, trait: FormatTraits) {\r\n if (!formatProps.formatTraits)\r\n return false;\r\n const formatTraits = Array.isArray(formatProps.formatTraits) ? formatProps.formatTraits : formatProps.formatTraits.split(/,|;|\\|/);\r\n const traitStr = getTraitString(trait);\r\n return formatTraits.find((traitEntry) => traitStr === traitEntry) ? true : false;\r\n }\r\n\r\n private async createUnit(unitsProvider: UnitsProvider, name: string, label?: string): Promise<void> {\r\n if (name === undefined || typeof (name) !== \"string\" || (label !== undefined && typeof (label) !== \"string\")) // throws if name is undefined or name isn't a string or if label is defined and isn't a string\r\n throw new QuantityError(QuantityStatus.InvalidJson, `This Composite has a unit with an invalid 'name' or 'label' attribute.`);\r\n for (const unit of this.units!) {\r\n const unitObj = unit[0].name;\r\n if (unitObj.toLowerCase() === name.toLowerCase()) // duplicate names are not allowed\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The unit ${unitObj} has a duplicate name.`);\r\n }\r\n const newUnit: UnitProps = await unitsProvider.findUnitByName(name);\r\n if (!newUnit || !newUnit.isValid)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${name}'.`);\r\n this.units!.push([newUnit, label]);\r\n }\r\n\r\n /**\r\n * Clone Format\r\n */\r\n public clone(options?: CloneOptions): Format {\r\n const newFormat = new Format(this.name);\r\n newFormat._roundFactor = this._roundFactor;\r\n newFormat._type = this._type;\r\n newFormat._precision = this._precision;\r\n newFormat._minWidth = this._minWidth;\r\n newFormat._scientificType = this._scientificType;\r\n newFormat._showSignOption = this._showSignOption;\r\n newFormat._decimalSeparator = this._decimalSeparator;\r\n newFormat._thousandSeparator = this._thousandSeparator;\r\n newFormat._uomSeparator = this._uomSeparator;\r\n newFormat._stationSeparator = this._stationSeparator;\r\n newFormat._stationOffsetSize = this._stationOffsetSize;\r\n newFormat._formatTraits = this._formatTraits;\r\n newFormat._spacer = this._spacer;\r\n newFormat._includeZero = this._includeZero;\r\n newFormat._customProps = this._customProps;\r\n this._units && (newFormat._units = [...this._units]);\r\n\r\n if (newFormat._units) {\r\n if (options?.showOnlyPrimaryUnit) {\r\n if (newFormat._units.length > 1)\r\n newFormat._units.length = 1;\r\n }\r\n }\r\n\r\n if (undefined !== options?.traits)\r\n newFormat._formatTraits = options?.traits;\r\n\r\n if (undefined !== options?.type)\r\n newFormat._type = options.type;\r\n\r\n if (undefined !== options?.precision) {\r\n // ensure specified precision is valid\r\n const precision = parsePrecision(options?.precision, newFormat._type, newFormat.name);\r\n newFormat._precision = precision;\r\n }\r\n\r\n if (undefined !== options?.primaryUnit) {\r\n if (options.primaryUnit.unit) {\r\n const newUnits = new Array<[UnitProps, string | undefined]>();\r\n newUnits.push([options.primaryUnit.unit, options.primaryUnit.label]);\r\n newFormat._units = newUnits;\r\n } else if (options.primaryUnit.label && newFormat._units?.length) {\r\n // update label only\r\n newFormat._units[0][1] = options.primaryUnit.label;\r\n }\r\n }\r\n return newFormat;\r\n }\r\n\r\n /**\r\n * Populates this Format with the values from the provided.\r\n */\r\n public async fromJSON(unitsProvider: UnitsProvider, jsonObj: FormatProps): Promise<void> {\r\n this.loadFormatProperties(jsonObj);\r\n\r\n if (isCustomFormatProps(jsonObj))\r\n this._customProps = jsonObj.custom;\r\n\r\n if (undefined !== jsonObj.composite) { // optional\r\n this._units = new Array<[UnitProps, string | undefined]>();\r\n if (jsonObj.composite.includeZero !== undefined) {\r\n if (typeof (jsonObj.composite.includeZero) !== \"boolean\") // includeZero must be a boolean IF it is defined\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'includeZero' attribute. It should be of type 'boolean'.`);\r\n this._includeZero = jsonObj.composite.includeZero;\r\n }\r\n if (jsonObj.composite.spacer !== undefined) { // spacer must be a string IF it is defined\r\n if (typeof (jsonObj.composite.spacer) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It must be of type 'string'.`);\r\n if (jsonObj.composite.spacer.length > 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);\r\n this._spacer = jsonObj.composite.spacer;\r\n }\r\n if (jsonObj.composite.units !== undefined) { // if composite is defined, it must be an array with 1-4 units\r\n if (!Array.isArray(jsonObj.composite.units)) { // must be an array\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'units' attribute. It must be of type 'array'`);\r\n }\r\n if (jsonObj.composite.units.length > 0 && jsonObj.composite.units.length <= 4) { // Composite requires 1-4 units\r\n try {\r\n const createUnitPromises: Array<Promise<void>> = [];\r\n for (const unit of jsonObj.composite.units) {\r\n createUnitPromises.push(this.createUnit(unitsProvider, unit.name, unit.label));\r\n }\r\n\r\n await Promise.all(createUnitPromises);\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n }\r\n if (undefined === this.units || this.units.length === 0)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with no valid 'units'`);\r\n }\r\n }\r\n\r\n /** Create a Format from FormatProps */\r\n public static async createFromJSON(name: string, unitsProvider: UnitsProvider, formatProps: FormatProps) {\r\n const actualFormat = new Format(name);\r\n await actualFormat.fromJSON(unitsProvider, formatProps);\r\n return actualFormat;\r\n }\r\n\r\n /**\r\n * Returns a JSON object that contain the specification for this Format.\r\n */\r\n public toJSON(): FormatProps {\r\n let composite;\r\n if (this.units) {\r\n const units = this.units.map((value) => {\r\n if (undefined !== value[1])\r\n return { name: value[0].name, label: value[1] };\r\n else\r\n return { name: value[0].name };\r\n });\r\n\r\n composite = {\r\n spacer: this.spacer,\r\n includeZero: this.includeZero,\r\n units,\r\n };\r\n }\r\n\r\n if (this.customProps)\r\n return {\r\n type: formatTypeToString(this.type),\r\n precision: this.precision,\r\n roundFactor: this.roundFactor,\r\n minWidth: this.minWidth,\r\n showSignOption: showSignOptionToString(this.showSignOption),\r\n formatTraits: formatTraitsToArray(this.formatTraits),\r\n decimalSeparator: this.decimalSeparator,\r\n thousandSeparator: this.thousandSeparator,\r\n uomSeparator: this.uomSeparator,\r\n scientificType: this.scientificType ? scientificTypeToString(this.scientificType) : undefined,\r\n stationOffsetSize: this.stationOffsetSize,\r\n stationSeparator: this.stationSeparator,\r\n composite,\r\n custom: this.customProps,\r\n } as CustomFormatProps;\r\n\r\n return {\r\n type: formatTypeToString(this.type),\r\n precision: this.precision,\r\n roundFactor: this.roundFactor,\r\n minWidth: this.minWidth,\r\n showSignOption: showSignOptionToString(this.showSignOption),\r\n formatTraits: formatTraitsToArray(this.formatTraits),\r\n decimalSeparator: this.decimalSeparator,\r\n thousandSeparator: this.thousandSeparator,\r\n uomSeparator: this.uomSeparator,\r\n scientificType: this.scientificType ? scientificTypeToString(this.scientificType) : undefined,\r\n stationOffsetSize: this.stationOffsetSize,\r\n stationSeparator: this.stationSeparator,\r\n composite,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Format.js","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Quantity\n */\n\nimport { QuantityConstants } from \"../Constants\";\nimport { QuantityError, QuantityStatus } from \"../Exception\";\nimport { UnitProps, UnitsProvider } from \"../Interfaces\";\nimport {\n DecimalPrecision, FormatTraits, formatTraitsToArray, FormatType, formatTypeToString, FractionalPrecision,\n getTraitString, parseFormatTrait, parseFormatType, parsePrecision, parseScientificType, parseShowSignOption, ScientificType,\n scientificTypeToString, ShowSignOption, showSignOptionToString,\n} from \"./FormatEnums\";\nimport { CloneOptions, CustomFormatProps, FormatProps, isCustomFormatProps } from \"./Interfaces\";\n\n// cSpell:ignore ZERONORMALIZED, nosign, onlynegative, signalways, negativeparentheses\n// cSpell:ignore trailzeroes, keepsinglezero, zeroempty, keepdecimalpoint, applyrounding, fractiondash, showunitlabel, prependunitlabel, exponentonlynegative\n\n/** A base Format class with shared properties and functionality between quantity and ecschema-metadata Format classes\n * @beta\n */\nexport class BaseFormat {\n private _name = \"\";\n protected _roundFactor: number = 0.0;\n protected _type: FormatType = FormatType.Decimal; // required; options are decimal, fractional, scientific, station\n protected _precision: number = DecimalPrecision.Six; // required\n protected _showSignOption: ShowSignOption = ShowSignOption.OnlyNegative; // options: noSign, onlyNegative, signAlways, negativeParentheses\n protected _decimalSeparator: string = QuantityConstants.LocaleSpecificDecimalSeparator;\n protected _thousandSeparator: string = QuantityConstants.LocaleSpecificThousandSeparator;\n protected _uomSeparator = \" \"; // optional; default is \" \"; defined separator between magnitude and the unit\n protected _stationSeparator = \"+\"; // optional; default is \"+\"\n protected _formatTraits: FormatTraits = FormatTraits.Uninitialized;\n protected _spacer: string = \" \"; // optional; default is \" \"\n protected _includeZero: boolean = true; // optional; default is true\n protected _minWidth?: number; // optional; positive int\n protected _scientificType?: ScientificType; // required if type is scientific; options: normalized, zeroNormalized\n protected _stationOffsetSize?: number; // required when type is station; positive integer > 0\n protected _azimuthBase?: number; // value always clockwise from north\n protected _azimuthBaseUnit?: UnitProps; // unit for azimuthBase value\n protected _azimuthCounterClockwise?: boolean; // if set to true, azimuth values are returned counter-clockwise from base\n protected _revolutionUnit?: UnitProps; // unit that represents a revolution, required for bearing or azimuth types\n protected _allowMathematicOperations: boolean = false; // optional; enables calculating mathematic operations like addition and subtraction; default is false.\n\n constructor(name: string) {\n this._name = name;\n }\n\n public get name(): string { return this._name; }\n\n public get roundFactor(): number { return this._roundFactor; }\n public set roundFactor(roundFactor: number) { this._roundFactor = roundFactor; }\n\n public get type(): FormatType { return this._type; }\n public set type(formatType: FormatType) { this._type = formatType; }\n\n public get precision(): DecimalPrecision | FractionalPrecision { return this._precision; }\n public set precision(precision: DecimalPrecision | FractionalPrecision) { this._precision = precision; }\n\n public get minWidth(): number | undefined { return this._minWidth; }\n public set minWidth(minWidth: number | undefined) { this._minWidth = minWidth; }\n\n public get scientificType(): ScientificType | undefined { return this._scientificType; }\n public set scientificType(scientificType: ScientificType | undefined) { this._scientificType = scientificType; }\n\n public get showSignOption(): ShowSignOption { return this._showSignOption; }\n public set showSignOption(showSignOption: ShowSignOption) { this._showSignOption = showSignOption; }\n\n public get decimalSeparator(): string { return this._decimalSeparator; }\n public set decimalSeparator(decimalSeparator: string) { this._decimalSeparator = decimalSeparator; }\n\n public get thousandSeparator(): string { return this._thousandSeparator; }\n public set thousandSeparator(thousandSeparator: string) { this._thousandSeparator = thousandSeparator; }\n\n public get uomSeparator(): string { return this._uomSeparator; }\n public set uomSeparator(uomSeparator: string) { this._uomSeparator = uomSeparator; }\n\n public get stationSeparator(): string { return this._stationSeparator; }\n public set stationSeparator(stationSeparator: string) { this._stationSeparator = stationSeparator; }\n\n public get stationOffsetSize(): number | undefined { return this._stationOffsetSize; }\n public set stationOffsetSize(stationOffsetSize: number | undefined) { stationOffsetSize = this._stationOffsetSize = stationOffsetSize; }\n\n public get allowMathematicOperations(): boolean { return this._allowMathematicOperations; }\n public set allowMathematicOperations(allowMathematicOperations: boolean) { this._allowMathematicOperations = allowMathematicOperations; }\n\n public get formatTraits(): FormatTraits { return this._formatTraits; }\n public set formatTraits(formatTraits: FormatTraits) { this._formatTraits = formatTraits; }\n\n public get spacer(): string | undefined { return this._spacer; }\n public set spacer(spacer: string | undefined) { this._spacer = spacer ?? this._spacer; }\n public get spacerOrDefault(): string { return this._spacer ?? \" \"; }\n\n public get includeZero(): boolean | undefined { return this._includeZero; }\n public set includeZero(includeZero: boolean | undefined) { this._includeZero = includeZero ?? this._includeZero; }\n\n // default \"north\" is applied by the formatter (quarter rotation counter clockwise from east, the value depends on the units used)\n public get azimuthBase(): number | undefined { return this._azimuthBase; }\n public set azimuthBase(azimuthBase: number | undefined) { this._azimuthBase = azimuthBase; }\n\n public get azimuthBaseUnit(): UnitProps | undefined { return this._azimuthBaseUnit; }\n public set azimuthBaseUnit(azimuthBaseUnit: UnitProps | undefined) { this._azimuthBaseUnit = azimuthBaseUnit; }\n\n public get azimuthCounterClockwise(): boolean | undefined { return this._azimuthCounterClockwise; }\n public set azimuthCounterClockwise(azimuthCounterClockwise: boolean | undefined) { this._azimuthCounterClockwise = azimuthCounterClockwise; }\n public get azimuthCounterClockwiseOrDefault(): boolean { return this._azimuthCounterClockwise ?? false; }\n\n public get revolutionUnit(): UnitProps | undefined { return this._revolutionUnit; }\n public set revolutionUnit(revolutionUnit: UnitProps | undefined) { this._revolutionUnit = revolutionUnit; }\n\n /** This method parses input string that is typically extracted for persisted JSON data and validates that the string is a valid FormatType. Throws exception if not valid. */\n public parseFormatTraits(formatTraitsFromJson: string | string[]) {\n const formatTraits = (Array.isArray(formatTraitsFromJson)) ? formatTraitsFromJson : formatTraitsFromJson.split(/,|;|\\|/);\n formatTraits.forEach((formatTraitsString: string) => { // for each element in the string array\n const formatTrait = parseFormatTrait(formatTraitsString, this.name);\n this._formatTraits = this.formatTraits | formatTrait;\n });\n }\n\n /** This method returns true if the formatTrait is set in this Format object. */\n public hasFormatTraitSet(formatTrait: FormatTraits): boolean {\n return (this._formatTraits & formatTrait) === formatTrait;\n }\n\n public loadFormatProperties(formatProps: FormatProps) {\n this._type = parseFormatType(formatProps.type, this.name);\n\n if (formatProps.precision !== undefined) {\n if (!Number.isInteger(formatProps.precision)) // mut be an integer\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'precision' attribute. It should be an integer.`);\n\n this._precision = parsePrecision(formatProps.precision, this._type, this.name);\n }\n if (this.type === FormatType.Scientific) {\n if (undefined === formatProps.scientificType) // if format type is scientific and scientific type is undefined, throw\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Scientific' type therefore the attribute 'scientificType' is required.`);\n\n this._scientificType = parseScientificType(formatProps.scientificType, this.name);\n }\n\n if (undefined !== formatProps.roundFactor) { // optional; default is 0.0\n if (typeof (formatProps.roundFactor) !== \"number\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'roundFactor' attribute. It should be of type 'number'.`);\n if (formatProps.roundFactor !== this.roundFactor) // if roundFactor isn't default value of 0.0, reassign roundFactor variable\n this._roundFactor = formatProps.roundFactor;\n }\n\n if (undefined !== formatProps.minWidth) { // optional\n if (!Number.isInteger(formatProps.minWidth) || formatProps.minWidth < 0) // must be a positive int\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'minWidth' attribute. It should be a positive integer.`);\n this._minWidth = formatProps.minWidth;\n }\n if (FormatType.Station === this.type) {\n if (undefined === formatProps.stationOffsetSize)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Station' type therefore the attribute 'stationOffsetSize' is required.`);\n if (!Number.isInteger(formatProps.stationOffsetSize) || formatProps.stationOffsetSize < 0) // must be a positive int > 0\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationOffsetSize' attribute. It should be a positive integer.`);\n this._stationOffsetSize = formatProps.stationOffsetSize;\n }\n\n if (undefined !== formatProps.showSignOption) { // optional; default is \"onlyNegative\"\n this._showSignOption = parseShowSignOption(formatProps.showSignOption, this.name);\n }\n\n if (undefined !== formatProps.formatTraits && formatProps.formatTraits.length !== 0) { // FormatTraits is optional\n if (!Array.isArray(formatProps.formatTraits) && typeof (formatProps.formatTraits) !== \"string\") // must be either an array of strings or a string\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'formatTraits' attribute. It should be of type 'string' or 'string[]'.`);\n this.parseFormatTraits(formatProps.formatTraits); // check that all of the options for formatTraits are valid. If now, throw\n }\n\n if (undefined !== formatProps.decimalSeparator) { // optional\n if (typeof (formatProps.decimalSeparator) !== \"string\") // not a string or not a one character string\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be of type 'string'.`);\n if (formatProps.decimalSeparator.length > 1)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be an empty or one character string.`);\n this._decimalSeparator = formatProps.decimalSeparator;\n }\n\n if (undefined !== formatProps.thousandSeparator) { // optional\n if (typeof (formatProps.thousandSeparator) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'thousandSeparator' attribute. It should be of type 'string'.`);\n if (formatProps.thousandSeparator.length > 1)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'thousandSeparator' attribute. It should be an empty or one character string.`);\n this._thousandSeparator = formatProps.thousandSeparator;\n }\n\n if (undefined !== formatProps.uomSeparator) { // optional; default is \" \"\n if (typeof (formatProps.uomSeparator) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'uomSeparator' attribute. It should be of type 'string'.`);\n if (formatProps.uomSeparator.length < 0 || formatProps.uomSeparator.length > 1)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'uomSeparator' attribute. It should be an empty or one character string.`);\n this._uomSeparator = formatProps.uomSeparator;\n }\n\n if (undefined !== formatProps.stationSeparator) { // optional; default is \"+\"\n if (typeof (formatProps.stationSeparator) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationSeparator' attribute. It should be of type 'string'.`);\n if (formatProps.stationSeparator.length > 1)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationSeparator' attribute. It should be an empty or one character string.`);\n this._stationSeparator = formatProps.stationSeparator;\n }\n\n if (undefined !== formatProps.azimuthBase) { // optional; default is a quarter rotation (90 degrees) which represents north\n if (typeof (formatProps.azimuthBase) !== \"number\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBase' attribute. It should be of type 'number'.`);\n this._azimuthBase = formatProps.azimuthBase;\n }\n\n if (undefined !== formatProps.azimuthCounterClockwise) { // optional; default is false\n if (typeof (formatProps.azimuthCounterClockwise) !== \"boolean\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthCounterClockwise' attribute. It should be of type 'boolean'.`);\n this._azimuthCounterClockwise = formatProps.azimuthCounterClockwise;\n }\n if (undefined !== formatProps.allowMathematicOperations) { // optional; default is false\n if (typeof (formatProps.allowMathematicOperations) !== \"boolean\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'allowMathematicOperations' attribute. It should be of type 'boolean'.`);\n this._allowMathematicOperations = formatProps.allowMathematicOperations;\n }\n }\n}\n\n/** A class used to define the specifications for formatting quantity values. This class is typically loaded by reading [[FormatProps]].\n * @beta\n */\nexport class Format extends BaseFormat {\n protected _units?: Array<[UnitProps, string | undefined]>;\n protected _customProps?: any; // used by custom formatters and parsers\n\n /** Constructor\n * @param name The name of a format specification. TODO: make optional or remove\n */\n constructor(name: string) {\n super(name);\n }\n\n public get units(): Array<[UnitProps, string | undefined]> | undefined { return this._units; }\n public get hasUnits(): boolean { return this._units !== undefined && this._units.length > 0; }\n public get customProps(): any { return this._customProps; }\n\n public static isFormatTraitSetInProps(formatProps: FormatProps, trait: FormatTraits) {\n if (!formatProps.formatTraits)\n return false;\n const formatTraits = Array.isArray(formatProps.formatTraits) ? formatProps.formatTraits : formatProps.formatTraits.split(/,|;|\\|/);\n const traitStr = getTraitString(trait);\n return formatTraits.find((traitEntry) => traitStr === traitEntry) ? true : false;\n }\n\n private async createUnit(unitsProvider: UnitsProvider, name: string, label?: string): Promise<void> {\n if (name === undefined || typeof (name) !== \"string\" || (label !== undefined && typeof (label) !== \"string\")) // throws if name is undefined or name isn't a string or if label is defined and isn't a string\n throw new QuantityError(QuantityStatus.InvalidJson, `This Composite has a unit with an invalid 'name' or 'label' attribute.`);\n for (const unit of this.units!) {\n const unitObj = unit[0].name;\n if (unitObj.toLowerCase() === name.toLowerCase()) // duplicate names are not allowed\n throw new QuantityError(QuantityStatus.InvalidJson, `The unit ${unitObj} has a duplicate name.`);\n }\n const newUnit: UnitProps = await unitsProvider.findUnitByName(name);\n if (!newUnit || !newUnit.isValid)\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${name}'.`);\n this.units!.push([newUnit, label]);\n }\n\n /**\n * Clone Format\n */\n public clone(options?: CloneOptions): Format {\n const newFormat = new Format(this.name);\n newFormat._roundFactor = this._roundFactor;\n newFormat._type = this._type;\n newFormat._precision = this._precision;\n newFormat._minWidth = this._minWidth;\n newFormat._scientificType = this._scientificType;\n newFormat._showSignOption = this._showSignOption;\n newFormat._decimalSeparator = this._decimalSeparator;\n newFormat._thousandSeparator = this._thousandSeparator;\n newFormat._uomSeparator = this._uomSeparator;\n newFormat._stationSeparator = this._stationSeparator;\n newFormat._stationOffsetSize = this._stationOffsetSize;\n newFormat._formatTraits = this._formatTraits;\n newFormat._spacer = this._spacer;\n newFormat._includeZero = this._includeZero;\n newFormat._azimuthBase = this._azimuthBase;\n newFormat._azimuthBaseUnit = this._azimuthBaseUnit;\n newFormat._azimuthCounterClockwise = this._azimuthCounterClockwise;\n newFormat._revolutionUnit = this._revolutionUnit;\n newFormat._customProps = this._customProps;\n this._units && (newFormat._units = [...this._units]);\n\n if (newFormat._units) {\n if (options?.showOnlyPrimaryUnit) {\n if (newFormat._units.length > 1)\n newFormat._units.length = 1;\n }\n }\n\n if (undefined !== options?.traits)\n newFormat._formatTraits = options?.traits;\n\n if (undefined !== options?.type)\n newFormat._type = options.type;\n\n if (undefined !== options?.precision) {\n // ensure specified precision is valid\n const precision = parsePrecision(options?.precision, newFormat._type, newFormat.name);\n newFormat._precision = precision;\n }\n\n if (undefined !== options?.primaryUnit) {\n if (options.primaryUnit.unit) {\n const newUnits = new Array<[UnitProps, string | undefined]>();\n newUnits.push([options.primaryUnit.unit, options.primaryUnit.label]);\n newFormat._units = newUnits;\n } else if (options.primaryUnit.label && newFormat._units?.length) {\n // update label only\n newFormat._units[0][1] = options.primaryUnit.label;\n }\n }\n return newFormat;\n }\n\n /**\n * Populates this Format with the values from the provided.\n */\n public async fromJSON(unitsProvider: UnitsProvider, jsonObj: FormatProps): Promise<void> {\n this.loadFormatProperties(jsonObj);\n\n if (isCustomFormatProps(jsonObj))\n this._customProps = jsonObj.custom;\n\n if (undefined !== jsonObj.composite) { // optional\n this._units = new Array<[UnitProps, string | undefined]>();\n if (jsonObj.composite.includeZero !== undefined) {\n if (typeof (jsonObj.composite.includeZero) !== \"boolean\") // includeZero must be a boolean IF it is defined\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'includeZero' attribute. It should be of type 'boolean'.`);\n this._includeZero = jsonObj.composite.includeZero;\n }\n if (jsonObj.composite.spacer !== undefined) { // spacer must be a string IF it is defined\n if (typeof (jsonObj.composite.spacer) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It must be of type 'string'.`);\n if (jsonObj.composite.spacer.length > 1)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);\n this._spacer = jsonObj.composite.spacer;\n }\n if (jsonObj.composite.units !== undefined) { // if composite is defined, it must be an array with 1-4 units\n if (!Array.isArray(jsonObj.composite.units)) { // must be an array\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'units' attribute. It must be of type 'array'`);\n }\n if (jsonObj.composite.units.length > 0 && jsonObj.composite.units.length <= 4) { // Composite requires 1-4 units\n try {\n const createUnitPromises: Array<Promise<void>> = [];\n for (const unit of jsonObj.composite.units) {\n createUnitPromises.push(this.createUnit(unitsProvider, unit.name, unit.label));\n }\n\n await Promise.all(createUnitPromises);\n } catch (e) {\n throw e;\n }\n }\n }\n if (undefined === this.units || this.units.length === 0)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with no valid 'units'`);\n }\n\n if(this.type === FormatType.Azimuth || this.type === FormatType.Bearing) {\n // these units cannot be loaded from loadFormatProperties() because they require an async call, and the method signature is already public\n\n if (undefined !== jsonObj.azimuthBaseUnit) {\n if (typeof (jsonObj.azimuthBaseUnit) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBaseUnit' attribute. It should be of type 'string'.`);\n\n const baseUnit: UnitProps = await unitsProvider.findUnitByName(jsonObj.azimuthBaseUnit);\n if (!baseUnit || !baseUnit.isValid)\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.azimuthBaseUnit}' for azimuthBaseUnit in Format '${this.name}'.`);\n\n this._azimuthBaseUnit = baseUnit;\n }\n\n if (undefined !== jsonObj.revolutionUnit) {\n if (typeof (jsonObj.revolutionUnit) !== \"string\")\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'revolutionUnit' attribute. It should be of type 'string'.`);\n\n const revolutionUnit: UnitProps = await unitsProvider.findUnitByName(jsonObj.revolutionUnit);\n if (!revolutionUnit || !revolutionUnit.isValid)\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.revolutionUnit}' for revolutionUnit in Format '${this.name}'.`);\n\n this._revolutionUnit = revolutionUnit;\n }\n\n if (this._revolutionUnit === undefined)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);\n if (this._azimuthBase !== undefined && this._azimuthBaseUnit === undefined)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);\n }\n }\n\n /** Create a Format from FormatProps */\n public static async createFromJSON(name: string, unitsProvider: UnitsProvider, formatProps: FormatProps) {\n const actualFormat = new Format(name);\n await actualFormat.fromJSON(unitsProvider, formatProps);\n return actualFormat;\n }\n\n /**\n * Returns a JSON object that contain the specification for this Format.\n */\n public toJSON(): FormatProps {\n let composite;\n if (this.units) {\n const units = this.units.map((value) => {\n if (undefined !== value[1])\n return { name: value[0].name, label: value[1] };\n else\n return { name: value[0].name };\n });\n\n composite = {\n spacer: this.spacer,\n includeZero: this.includeZero,\n units,\n };\n }\n\n const azimuthBaseUnit = this.azimuthBaseUnit ? this.azimuthBaseUnit.name : undefined;\n const revolutionUnit = this.revolutionUnit ? this.revolutionUnit.name : undefined;\n\n if (this.customProps)\n return {\n type: formatTypeToString(this.type),\n precision: this.precision,\n roundFactor: this.roundFactor,\n minWidth: this.minWidth,\n showSignOption: showSignOptionToString(this.showSignOption),\n formatTraits: formatTraitsToArray(this.formatTraits),\n decimalSeparator: this.decimalSeparator,\n thousandSeparator: this.thousandSeparator,\n uomSeparator: this.uomSeparator,\n scientificType: this.scientificType ? scientificTypeToString(this.scientificType) : undefined,\n stationOffsetSize: this.stationOffsetSize,\n stationSeparator: this.stationSeparator,\n azimuthBase: this.azimuthBase,\n azimuthBaseUnit,\n azimuthCounterClockwise: this.azimuthCounterClockwise,\n revolutionUnit,\n composite,\n custom: this.customProps,\n } as CustomFormatProps;\n\n return {\n type: formatTypeToString(this.type),\n precision: this.precision,\n roundFactor: this.roundFactor,\n minWidth: this.minWidth,\n showSignOption: showSignOptionToString(this.showSignOption),\n formatTraits: formatTraitsToArray(this.formatTraits),\n decimalSeparator: this.decimalSeparator,\n thousandSeparator: this.thousandSeparator,\n uomSeparator: this.uomSeparator,\n scientificType: this.scientificType ? scientificTypeToString(this.scientificType) : undefined,\n stationOffsetSize: this.stationOffsetSize,\n stationSeparator: this.stationSeparator,\n azimuthBase: this.azimuthBase,\n azimuthBaseUnit,\n azimuthCounterClockwise: this.azimuthCounterClockwise,\n revolutionUnit,\n composite,\n };\n }\n}\n"]}
|
|
@@ -85,7 +85,11 @@ export declare enum FormatType {
|
|
|
85
85
|
/** Scientific Notation (ie 1.04e3) */
|
|
86
86
|
Scientific = 2,
|
|
87
87
|
/** Civil Engineering Stationing (ie 1+00). */
|
|
88
|
-
Station = 3
|
|
88
|
+
Station = 3,
|
|
89
|
+
/** Bearing angle e.g. N05:00:00E. Requires provided quantities to be of the angle phenomenon */
|
|
90
|
+
Bearing = 4,
|
|
91
|
+
/** Azimuth angle e.g. 45°30'00". Requires provided quantities to be of the angle phenomenon */
|
|
92
|
+
Azimuth = 5
|
|
89
93
|
}
|
|
90
94
|
/** required if type is scientific
|
|
91
95
|
* @beta */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormatEnums.d.ts","sourceRoot":"","sources":["../../../src/Formatter/FormatEnums.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,QAAiK,CAAC;AAE9L,gBAAgB;AAChB,wBAAiB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAWpF;AACD,YAAY;AACZ,oBAAY,YAAY;IACtB,aAAa,
|
|
1
|
+
{"version":3,"file":"FormatEnums.d.ts","sourceRoot":"","sources":["../../../src/Formatter/FormatEnums.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,6 +110,10 @@ var FormatType;
|
|
|
110
110
|
FormatType[FormatType["Scientific"] = 2] = "Scientific";
|
|
111
111
|
/** Civil Engineering Stationing (ie 1+00). */
|
|
112
112
|
FormatType[FormatType["Station"] = 3] = "Station";
|
|
113
|
+
/** Bearing angle e.g. N05:00:00E. Requires provided quantities to be of the angle phenomenon */
|
|
114
|
+
FormatType[FormatType["Bearing"] = 4] = "Bearing";
|
|
115
|
+
/** Azimuth angle e.g. 45°30'00". Requires provided quantities to be of the angle phenomenon */
|
|
116
|
+
FormatType[FormatType["Azimuth"] = 5] = "Azimuth";
|
|
113
117
|
})(FormatType || (exports.FormatType = FormatType = {}));
|
|
114
118
|
/** required if type is scientific
|
|
115
119
|
* @beta */
|
|
@@ -249,6 +253,8 @@ function parseFormatType(jsonObjType, formatName) {
|
|
|
249
253
|
case "scientific": return FormatType.Scientific;
|
|
250
254
|
case "station": return FormatType.Station;
|
|
251
255
|
case "fractional": return FormatType.Fractional;
|
|
256
|
+
case "bearing": return FormatType.Bearing;
|
|
257
|
+
case "azimuth": return FormatType.Azimuth;
|
|
252
258
|
default:
|
|
253
259
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'type' attribute.`);
|
|
254
260
|
}
|
|
@@ -261,6 +267,8 @@ function formatTypeToString(type) {
|
|
|
261
267
|
case FormatType.Scientific: return "Scientific";
|
|
262
268
|
case FormatType.Station: return "Station";
|
|
263
269
|
case FormatType.Fractional: return "Fractional";
|
|
270
|
+
case FormatType.Bearing: return "Bearing";
|
|
271
|
+
case FormatType.Azimuth: return "Azimuth";
|
|
264
272
|
}
|
|
265
273
|
}
|
|
266
274
|
exports.formatTypeToString = formatTypeToString;
|
|
@@ -308,6 +316,8 @@ function parsePrecision(precision, type, formatName) {
|
|
|
308
316
|
case FormatType.Decimal:
|
|
309
317
|
case FormatType.Scientific:
|
|
310
318
|
case FormatType.Station:
|
|
319
|
+
case FormatType.Bearing:
|
|
320
|
+
case FormatType.Azimuth:
|
|
311
321
|
return parseDecimalPrecision(precision, formatName);
|
|
312
322
|
case FormatType.Fractional:
|
|
313
323
|
return parseFractionalPrecision(precision, formatName);
|