@itwin/core-quantity 4.10.0-dev.2 → 4.10.0-dev.20
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 +28 -1
- package/lib/cjs/Constants.js.map +1 -1
- package/lib/cjs/Exception.d.ts +2 -1
- package/lib/cjs/Exception.d.ts.map +1 -1
- package/lib/cjs/Exception.js +1 -0
- package/lib/cjs/Exception.js.map +1 -1
- package/lib/cjs/Formatter/Format.d.ts +5 -2
- package/lib/cjs/Formatter/Format.d.ts.map +1 -1
- package/lib/cjs/Formatter/Format.js +18 -24
- package/lib/cjs/Formatter/Format.js.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.d.ts +17 -1
- package/lib/cjs/Formatter/FormatEnums.d.ts.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.js +33 -1
- package/lib/cjs/Formatter/FormatEnums.js.map +1 -1
- package/lib/cjs/Formatter/Formatter.d.ts +1 -0
- package/lib/cjs/Formatter/Formatter.d.ts.map +1 -1
- package/lib/cjs/Formatter/Formatter.js +70 -22
- package/lib/cjs/Formatter/Formatter.js.map +1 -1
- package/lib/cjs/Formatter/FormatterSpec.js.map +1 -1
- package/lib/cjs/Formatter/Interfaces.d.ts +2 -0
- package/lib/cjs/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/cjs/Formatter/Interfaces.js.map +1 -1
- package/lib/cjs/Interfaces.d.ts +13 -0
- package/lib/cjs/Interfaces.d.ts.map +1 -1
- package/lib/cjs/Interfaces.js +11 -0
- package/lib/cjs/Interfaces.js.map +1 -1
- package/lib/cjs/Parser.d.ts +2 -0
- package/lib/cjs/Parser.d.ts.map +1 -1
- package/lib/cjs/Parser.js +65 -16
- package/lib/cjs/Parser.js.map +1 -1
- package/lib/cjs/ParserSpec.js.map +1 -1
- package/lib/cjs/Quantity.d.ts +14 -0
- package/lib/cjs/Quantity.d.ts.map +1 -1
- package/lib/cjs/Quantity.js +40 -2
- 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 +2 -1
- package/lib/esm/Exception.d.ts.map +1 -1
- package/lib/esm/Exception.js +1 -0
- package/lib/esm/Exception.js.map +1 -1
- package/lib/esm/Formatter/Format.d.ts +5 -2
- package/lib/esm/Formatter/Format.d.ts.map +1 -1
- package/lib/esm/Formatter/Format.js +19 -25
- package/lib/esm/Formatter/Format.js.map +1 -1
- package/lib/esm/Formatter/FormatEnums.d.ts +17 -1
- package/lib/esm/Formatter/FormatEnums.d.ts.map +1 -1
- package/lib/esm/Formatter/FormatEnums.js +31 -0
- package/lib/esm/Formatter/FormatEnums.js.map +1 -1
- package/lib/esm/Formatter/Formatter.d.ts +1 -0
- package/lib/esm/Formatter/Formatter.d.ts.map +1 -1
- package/lib/esm/Formatter/Formatter.js +72 -24
- package/lib/esm/Formatter/Formatter.js.map +1 -1
- package/lib/esm/Formatter/FormatterSpec.js.map +1 -1
- package/lib/esm/Formatter/Interfaces.d.ts +2 -0
- package/lib/esm/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/esm/Formatter/Interfaces.js.map +1 -1
- package/lib/esm/Interfaces.d.ts +13 -0
- package/lib/esm/Interfaces.d.ts.map +1 -1
- package/lib/esm/Interfaces.js +10 -1
- package/lib/esm/Interfaces.js.map +1 -1
- package/lib/esm/Parser.d.ts +2 -0
- package/lib/esm/Parser.d.ts.map +1 -1
- package/lib/esm/Parser.js +66 -17
- package/lib/esm/Parser.js.map +1 -1
- package/lib/esm/ParserSpec.js.map +1 -1
- package/lib/esm/Quantity.d.ts +14 -0
- package/lib/esm/Quantity.d.ts.map +1 -1
- package/lib/esm/Quantity.js +37 -1
- 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 +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
# Change Log - @itwin/core-quantity
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 09 Oct 2024 20:23:41 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.9.4
|
|
6
|
+
Wed, 09 Oct 2024 20:22:04 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 4.9.3
|
|
11
|
+
Thu, 03 Oct 2024 19:15:45 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
14
|
+
|
|
15
|
+
## 4.9.2
|
|
16
|
+
Wed, 02 Oct 2024 15:14:43 GMT
|
|
17
|
+
|
|
18
|
+
_Version update only_
|
|
19
|
+
|
|
20
|
+
## 4.9.1
|
|
21
|
+
Wed, 25 Sep 2024 20:10:58 GMT
|
|
22
|
+
|
|
23
|
+
_Version update only_
|
|
24
|
+
|
|
25
|
+
## 4.9.0
|
|
26
|
+
Mon, 23 Sep 2024 13:44:01 GMT
|
|
27
|
+
|
|
28
|
+
### Updates
|
|
29
|
+
|
|
30
|
+
- Bearing and Azimuth format support
|
|
4
31
|
|
|
5
32
|
## 4.8.7
|
|
6
33
|
Fri, 13 Sep 2024 15:11:17 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
|
@@ -17,7 +17,8 @@ export declare enum QuantityStatus {
|
|
|
17
17
|
UnknownUnit = 35045,
|
|
18
18
|
UnableToConvertParseTokensToQuantity = 35046,
|
|
19
19
|
UnsupportedUnit = 35047,
|
|
20
|
-
MissingRequiredProperty = 35048
|
|
20
|
+
MissingRequiredProperty = 35048,
|
|
21
|
+
InvertingZero = 35049
|
|
21
22
|
}
|
|
22
23
|
/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.
|
|
23
24
|
* @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;IAC9D,eAAe,QAA0B;IACzC,uBAAuB,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;IACjD,aAAa,QAA2B;CACzC;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
|
@@ -26,6 +26,7 @@ var QuantityStatus;
|
|
|
26
26
|
QuantityStatus[QuantityStatus["UnableToConvertParseTokensToQuantity"] = 35046] = "UnableToConvertParseTokensToQuantity";
|
|
27
27
|
QuantityStatus[QuantityStatus["UnsupportedUnit"] = 35047] = "UnsupportedUnit";
|
|
28
28
|
QuantityStatus[QuantityStatus["MissingRequiredProperty"] = 35048] = "MissingRequiredProperty";
|
|
29
|
+
QuantityStatus[QuantityStatus["InvertingZero"] = 35049] = "InvertingZero";
|
|
29
30
|
})(QuantityStatus || (exports.QuantityStatus = QuantityStatus = {}));
|
|
30
31
|
/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.
|
|
31
32
|
* @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,cAaX;AAbD,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;IACjD,yEAAwC,CAAA;AAC1C,CAAC,EAbW,cAAc,8BAAd,cAAc,QAazB;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 InvertingZero = QUANTITY_ERROR_BASE + 10,\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"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Quantity
|
|
3
3
|
*/
|
|
4
4
|
import { UnitProps, UnitsProvider } from "../Interfaces";
|
|
5
|
-
import { DecimalPrecision, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from "./FormatEnums";
|
|
5
|
+
import { DecimalPrecision, FormatTraits, FormatType, FractionalPrecision, RatioType, ScientificType, ShowSignOption } from "./FormatEnums";
|
|
6
6
|
import { CloneOptions, FormatProps } from "./Interfaces";
|
|
7
7
|
/** A base Format class with shared properties and functionality between quantity and ecschema-metadata Format classes
|
|
8
8
|
* @beta
|
|
@@ -23,6 +23,7 @@ export declare class BaseFormat {
|
|
|
23
23
|
protected _minWidth?: number;
|
|
24
24
|
protected _scientificType?: ScientificType;
|
|
25
25
|
protected _stationOffsetSize?: number;
|
|
26
|
+
protected _ratioType?: RatioType;
|
|
26
27
|
protected _azimuthBase?: number;
|
|
27
28
|
protected _azimuthBaseUnit?: UnitProps;
|
|
28
29
|
protected _azimuthCounterClockwise?: boolean;
|
|
@@ -40,6 +41,8 @@ export declare class BaseFormat {
|
|
|
40
41
|
set minWidth(minWidth: number | undefined);
|
|
41
42
|
get scientificType(): ScientificType | undefined;
|
|
42
43
|
set scientificType(scientificType: ScientificType | undefined);
|
|
44
|
+
get ratioType(): RatioType | undefined;
|
|
45
|
+
set ratioType(ratioType: RatioType | undefined);
|
|
43
46
|
get showSignOption(): ShowSignOption;
|
|
44
47
|
set showSignOption(showSignOption: ShowSignOption);
|
|
45
48
|
get decimalSeparator(): string;
|
|
@@ -67,7 +70,7 @@ export declare class BaseFormat {
|
|
|
67
70
|
set azimuthBaseUnit(azimuthBaseUnit: UnitProps | undefined);
|
|
68
71
|
get azimuthCounterClockwise(): boolean | undefined;
|
|
69
72
|
set azimuthCounterClockwise(azimuthCounterClockwise: boolean | undefined);
|
|
70
|
-
get
|
|
73
|
+
get azimuthClockwiseOrDefault(): boolean;
|
|
71
74
|
get revolutionUnit(): UnitProps | undefined;
|
|
72
75
|
set revolutionUnit(revolutionUnit: UnitProps | undefined);
|
|
73
76
|
/** 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. */
|
|
@@ -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,EACL,gBAAgB,EAAE,YAAY,EAAuB,UAAU,EAAsB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,8 @@ class BaseFormat {
|
|
|
45
45
|
set minWidth(minWidth) { this._minWidth = minWidth; }
|
|
46
46
|
get scientificType() { return this._scientificType; }
|
|
47
47
|
set scientificType(scientificType) { this._scientificType = scientificType; }
|
|
48
|
+
get ratioType() { return this._ratioType; }
|
|
49
|
+
set ratioType(ratioType) { this._ratioType = ratioType; }
|
|
48
50
|
get showSignOption() { return this._showSignOption; }
|
|
49
51
|
set showSignOption(showSignOption) { this._showSignOption = showSignOption; }
|
|
50
52
|
get decimalSeparator() { return this._decimalSeparator; }
|
|
@@ -73,7 +75,7 @@ class BaseFormat {
|
|
|
73
75
|
set azimuthBaseUnit(azimuthBaseUnit) { this._azimuthBaseUnit = azimuthBaseUnit; }
|
|
74
76
|
get azimuthCounterClockwise() { return this._azimuthCounterClockwise; }
|
|
75
77
|
set azimuthCounterClockwise(azimuthCounterClockwise) { this._azimuthCounterClockwise = azimuthCounterClockwise; }
|
|
76
|
-
get
|
|
78
|
+
get azimuthClockwiseOrDefault() { return !this._azimuthCounterClockwise; }
|
|
77
79
|
get revolutionUnit() { return this._revolutionUnit; }
|
|
78
80
|
set revolutionUnit(revolutionUnit) { this._revolutionUnit = revolutionUnit; }
|
|
79
81
|
/** 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. */
|
|
@@ -100,6 +102,11 @@ class BaseFormat {
|
|
|
100
102
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Scientific' type therefore the attribute 'scientificType' is required.`);
|
|
101
103
|
this._scientificType = (0, FormatEnums_1.parseScientificType)(formatProps.scientificType, this.name);
|
|
102
104
|
}
|
|
105
|
+
if (this.type === FormatEnums_1.FormatType.Ratio) {
|
|
106
|
+
if (undefined === formatProps.ratioType)
|
|
107
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);
|
|
108
|
+
this._ratioType = (0, FormatEnums_1.parseRatioType)(formatProps.ratioType, this.name);
|
|
109
|
+
}
|
|
103
110
|
if (undefined !== formatProps.roundFactor) { // optional; default is 0.0
|
|
104
111
|
if (typeof (formatProps.roundFactor) !== "number")
|
|
105
112
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'roundFactor' attribute. It should be of type 'number'.`);
|
|
@@ -227,6 +234,7 @@ class Format extends BaseFormat {
|
|
|
227
234
|
newFormat._azimuthBase = this._azimuthBase;
|
|
228
235
|
newFormat._azimuthBaseUnit = this._azimuthBaseUnit;
|
|
229
236
|
newFormat._azimuthCounterClockwise = this._azimuthCounterClockwise;
|
|
237
|
+
newFormat._ratioType = this._ratioType;
|
|
230
238
|
newFormat._revolutionUnit = this._revolutionUnit;
|
|
231
239
|
newFormat._customProps = this._customProps;
|
|
232
240
|
this._units && (newFormat._units = [...this._units]);
|
|
@@ -349,28 +357,7 @@ class Format extends BaseFormat {
|
|
|
349
357
|
}
|
|
350
358
|
const azimuthBaseUnit = this.azimuthBaseUnit ? this.azimuthBaseUnit.name : undefined;
|
|
351
359
|
const revolutionUnit = this.revolutionUnit ? this.revolutionUnit.name : undefined;
|
|
352
|
-
|
|
353
|
-
return {
|
|
354
|
-
type: (0, FormatEnums_1.formatTypeToString)(this.type),
|
|
355
|
-
precision: this.precision,
|
|
356
|
-
roundFactor: this.roundFactor,
|
|
357
|
-
minWidth: this.minWidth,
|
|
358
|
-
showSignOption: (0, FormatEnums_1.showSignOptionToString)(this.showSignOption),
|
|
359
|
-
formatTraits: (0, FormatEnums_1.formatTraitsToArray)(this.formatTraits),
|
|
360
|
-
decimalSeparator: this.decimalSeparator,
|
|
361
|
-
thousandSeparator: this.thousandSeparator,
|
|
362
|
-
uomSeparator: this.uomSeparator,
|
|
363
|
-
scientificType: this.scientificType ? (0, FormatEnums_1.scientificTypeToString)(this.scientificType) : undefined,
|
|
364
|
-
stationOffsetSize: this.stationOffsetSize,
|
|
365
|
-
stationSeparator: this.stationSeparator,
|
|
366
|
-
azimuthBase: this.azimuthBase,
|
|
367
|
-
azimuthBaseUnit,
|
|
368
|
-
azimuthCounterClockwise: this.azimuthCounterClockwise,
|
|
369
|
-
revolutionUnit,
|
|
370
|
-
composite,
|
|
371
|
-
custom: this.customProps,
|
|
372
|
-
};
|
|
373
|
-
return {
|
|
360
|
+
const baseFormatProps = {
|
|
374
361
|
type: (0, FormatEnums_1.formatTypeToString)(this.type),
|
|
375
362
|
precision: this.precision,
|
|
376
363
|
roundFactor: this.roundFactor,
|
|
@@ -380,7 +367,8 @@ class Format extends BaseFormat {
|
|
|
380
367
|
decimalSeparator: this.decimalSeparator,
|
|
381
368
|
thousandSeparator: this.thousandSeparator,
|
|
382
369
|
uomSeparator: this.uomSeparator,
|
|
383
|
-
scientificType: this.scientificType ? (0, FormatEnums_1.scientificTypeToString)(this.scientificType) : undefined,
|
|
370
|
+
scientificType: this.scientificType !== undefined ? (0, FormatEnums_1.scientificTypeToString)(this.scientificType) : undefined,
|
|
371
|
+
ratioType: this.ratioType,
|
|
384
372
|
stationOffsetSize: this.stationOffsetSize,
|
|
385
373
|
stationSeparator: this.stationSeparator,
|
|
386
374
|
azimuthBase: this.azimuthBase,
|
|
@@ -389,6 +377,12 @@ class Format extends BaseFormat {
|
|
|
389
377
|
revolutionUnit,
|
|
390
378
|
composite,
|
|
391
379
|
};
|
|
380
|
+
if (this.customProps)
|
|
381
|
+
return {
|
|
382
|
+
...baseFormatProps,
|
|
383
|
+
custom: this.customProps,
|
|
384
|
+
};
|
|
385
|
+
return baseFormatProps;
|
|
392
386
|
}
|
|
393
387
|
}
|
|
394
388
|
exports.Format = Format;
|
|
@@ -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 {\r\n DecimalPrecision, FormatTraits, formatTraitsToArray, FormatType, formatTypeToString, FractionalPrecision,\r\n getTraitString, parseFormatTrait, parseFormatType, parsePrecision, parseScientificType, parseShowSignOption, ScientificType,\r\n scientificTypeToString, ShowSignOption, showSignOptionToString,\r\n} 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 _azimuthBase?: number; // value always clockwise from north\r\n protected _azimuthBaseUnit?: UnitProps; // unit for azimuthBase value\r\n protected _azimuthCounterClockwise?: boolean; // if set to true, azimuth values are returned counter-clockwise from base\r\n protected _revolutionUnit?: UnitProps; // unit that represents a revolution, required for bearing or azimuth types\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 public get spacerOrDefault(): string { return 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 // default \"north\" is applied by the formatter (quarter rotation counter clockwise from east, the value depends on the units used)\r\n public get azimuthBase(): number | undefined { return this._azimuthBase; }\r\n public set azimuthBase(azimuthBase: number | undefined) { this._azimuthBase = azimuthBase; }\r\n\r\n public get azimuthBaseUnit(): UnitProps | undefined { return this._azimuthBaseUnit; }\r\n public set azimuthBaseUnit(azimuthBaseUnit: UnitProps | undefined) { this._azimuthBaseUnit = azimuthBaseUnit; }\r\n\r\n public get azimuthCounterClockwise(): boolean | undefined { return this._azimuthCounterClockwise; }\r\n public set azimuthCounterClockwise(azimuthCounterClockwise: boolean | undefined) { this._azimuthCounterClockwise = azimuthCounterClockwise; }\r\n public get azimuthCounterClockwiseOrDefault(): boolean { return this._azimuthCounterClockwise ?? false; }\r\n\r\n public get revolutionUnit(): UnitProps | undefined { return this._revolutionUnit; }\r\n public set revolutionUnit(revolutionUnit: UnitProps | undefined) { this._revolutionUnit = revolutionUnit; }\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.azimuthBase) { // optional; default is a quarter rotation (90 degrees) which represents north\r\n if (typeof (formatProps.azimuthBase) !== \"number\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBase' attribute. It should be of type 'number'.`);\r\n this._azimuthBase = formatProps.azimuthBase;\r\n }\r\n\r\n if (undefined !== formatProps.azimuthCounterClockwise) { // optional; default is false\r\n if (typeof (formatProps.azimuthCounterClockwise) !== \"boolean\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthCounterClockwise' attribute. It should be of type 'boolean'.`);\r\n this._azimuthCounterClockwise = formatProps.azimuthCounterClockwise;\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._azimuthBase = this._azimuthBase;\r\n newFormat._azimuthBaseUnit = this._azimuthBaseUnit;\r\n newFormat._azimuthCounterClockwise = this._azimuthCounterClockwise;\r\n newFormat._revolutionUnit = this._revolutionUnit;\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 if(this.type === FormatType.Azimuth || this.type === FormatType.Bearing) {\r\n // these units cannot be loaded from loadFormatProperties() because they require an async call, and the method signature is already public\r\n\r\n if (undefined !== jsonObj.azimuthBaseUnit) {\r\n if (typeof (jsonObj.azimuthBaseUnit) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBaseUnit' attribute. It should be of type 'string'.`);\r\n\r\n const baseUnit: UnitProps = await unitsProvider.findUnitByName(jsonObj.azimuthBaseUnit);\r\n if (!baseUnit || !baseUnit.isValid)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.azimuthBaseUnit}' for azimuthBaseUnit in Format '${this.name}'.`);\r\n\r\n this._azimuthBaseUnit = baseUnit;\r\n }\r\n\r\n if (undefined !== jsonObj.revolutionUnit) {\r\n if (typeof (jsonObj.revolutionUnit) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'revolutionUnit' attribute. It should be of type 'string'.`);\r\n\r\n const revolutionUnit: UnitProps = await unitsProvider.findUnitByName(jsonObj.revolutionUnit);\r\n if (!revolutionUnit || !revolutionUnit.isValid)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${jsonObj.revolutionUnit}' for revolutionUnit in Format '${this.name}'.`);\r\n\r\n this._revolutionUnit = revolutionUnit;\r\n }\r\n\r\n if (this._revolutionUnit === undefined)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);\r\n if (this._azimuthBase !== undefined && this._azimuthBaseUnit === undefined)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);\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 const azimuthBaseUnit = this.azimuthBaseUnit ? this.azimuthBaseUnit.name : undefined;\r\n const revolutionUnit = this.revolutionUnit ? this.revolutionUnit.name : undefined;\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 azimuthBase: this.azimuthBase,\r\n azimuthBaseUnit,\r\n azimuthCounterClockwise: this.azimuthCounterClockwise,\r\n revolutionUnit,\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 azimuthBase: this.azimuthBase,\r\n azimuthBaseUnit,\r\n azimuthCounterClockwise: this.azimuthCounterClockwise,\r\n revolutionUnit,\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, parseRatioType, parseScientificType, parseShowSignOption,\n RatioType, ScientificType, scientificTypeToString,\n 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 _ratioType?: RatioType; // required if type is ratio; options: oneToN, NToOne, ValueBased, useGreatestCommonDivisor\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 ratioType(): RatioType | undefined { return this._ratioType; }\n public set ratioType(ratioType: RatioType | undefined) { this._ratioType = ratioType; }\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 azimuthClockwiseOrDefault(): boolean { return !this._azimuthCounterClockwise; }\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 (this.type === FormatType.Ratio){\n if (undefined === formatProps.ratioType)\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);\n\n this._ratioType = parseRatioType(formatProps.ratioType, 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._ratioType = this._ratioType;\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 const baseFormatProps: FormatProps = {\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 !== undefined ? scientificTypeToString(this.scientificType) : undefined,\n ratioType: this.ratioType,\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 if (this.customProps)\n return {\n ...baseFormatProps,\n custom: this.customProps,\n } as CustomFormatProps;\n\n return baseFormatProps;\n }\n}\n"]}
|
|
@@ -89,7 +89,9 @@ export declare enum FormatType {
|
|
|
89
89
|
/** Bearing angle e.g. N05:00:00E. Requires provided quantities to be of the angle phenomenon */
|
|
90
90
|
Bearing = 4,
|
|
91
91
|
/** Azimuth angle e.g. 45°30'00". Requires provided quantities to be of the angle phenomenon */
|
|
92
|
-
Azimuth = 5
|
|
92
|
+
Azimuth = 5,
|
|
93
|
+
/** Ratio display e,g. 1:2 or 0.3:1. */
|
|
94
|
+
Ratio = 6
|
|
93
95
|
}
|
|
94
96
|
/** required if type is scientific
|
|
95
97
|
* @beta */
|
|
@@ -99,6 +101,18 @@ export declare enum ScientificType {
|
|
|
99
101
|
/** Zero value left of decimal point (ie 0.12345e4) */
|
|
100
102
|
ZeroNormalized = 1
|
|
101
103
|
}
|
|
104
|
+
/** required if type is ratio
|
|
105
|
+
* @beta */
|
|
106
|
+
export declare enum RatioType {
|
|
107
|
+
/** One to N ratio (ie 1:N) */
|
|
108
|
+
OneToN = "OneToN",
|
|
109
|
+
/** N to One ratio (ie N:1) */
|
|
110
|
+
NToOne = "NToOne",
|
|
111
|
+
/** the lesser value scales to 1. e.g. input 0.5 turns into 2:1 | input 2 turns into 1:2 */
|
|
112
|
+
ValueBased = "ValueBased",
|
|
113
|
+
/** scales the input ratio to its simplest integer form using the greatest common divisor (GCD) of the values. e.g. 0.3 turns into 3:10 */
|
|
114
|
+
UseGreatestCommonDivisor = "UseGreatestCommonDivisor"
|
|
115
|
+
}
|
|
102
116
|
/** Determines how the sign of values are displayed
|
|
103
117
|
* @beta */
|
|
104
118
|
export declare enum ShowSignOption {
|
|
@@ -115,6 +129,8 @@ export declare enum ShowSignOption {
|
|
|
115
129
|
export declare function parseScientificType(scientificType: string, formatName: string): ScientificType;
|
|
116
130
|
/** @beta */
|
|
117
131
|
export declare function scientificTypeToString(scientificType: ScientificType): string;
|
|
132
|
+
/** @beta */
|
|
133
|
+
export declare function parseRatioType(ratioType: string, formatName: string): RatioType;
|
|
118
134
|
/** @beta */
|
|
119
135
|
export declare function parseShowSignOption(showSignOption: string, formatName: string): ShowSignOption;
|
|
120
136
|
/** @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,IAAI;IACjB,mDAAmD;IACnD,WAAW,IAAS;IACpB,6FAA6F;IAC7F,cAAc,IAAS;IACvB,iDAAiD;IACjD,SAAS,IAAS;IAClB,iEAAiE;IACjE,gBAAgB,IAAS;IACzB,kDAAkD;IAClD,aAAa,KAAS;IACtB,2DAA2D;IAC3D,YAAY,KAAS;IACrB,uCAAuC;IACvC,aAAa,KAAS;IACtB,4CAA4C;IAC5C,gBAAgB,MAAS;IACzB,6CAA6C;IAC7C,gBAAgB,MAAS;IACzB,8IAA8I;IAC9I,oBAAoB,MAAS;CAC9B;AAED;WACW;AACX,oBAAY,mBAAmB;IAC7B,GAAG,IAAI;IACP,GAAG,IAAI;IACP,IAAI,IAAI;IACR,KAAK,IAAI;IACT,OAAO,KAAK;IACZ,SAAS,KAAK;IACd,SAAS,KAAK;IACd,qBAAqB,MAAM;IAC3B,kBAAkB,MAAM;CACzB;AAED;WACW;AACX,oBAAY,gBAAgB;IAC1B,IAAI,IAAI;IACR,GAAG,IAAI;IACP,GAAG,IAAI;IACP,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,GAAG,IAAI;IACP,KAAK,IAAI;IACT,KAAK,IAAI;IACT,IAAI,IAAI;IACR,GAAG,KAAK;IACR,MAAM,KAAK;IACX,MAAM,KAAK;CACZ;AAED;YACY;AACZ,oBAAY,UAAU;IACpB,iCAAiC;IACjC,OAAO,IAAA;IACP,oCAAoC;IACpC,UAAU,IAAA;IACV,sCAAsC;IACtC,UAAU,IAAA;IACV,8CAA8C;IAC9C,OAAO,IAAA;IACP,gGAAgG;IAChG,OAAO,IAAA;IACP,+FAA+F;IAC/F,OAAO,IAAA;
|
|
1
|
+
{"version":3,"file":"FormatEnums.d.ts","sourceRoot":"","sources":["../../../src/Formatter/FormatEnums.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module Quantity
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.parsePrecision = exports.parseFractionalPrecision = exports.parseDecimalPrecision = exports.formatTypeToString = exports.parseFormatType = exports.formatTraitsToArray = exports.getTraitString = exports.parseFormatTrait = exports.showSignOptionToString = exports.parseShowSignOption = exports.scientificTypeToString = exports.parseScientificType = exports.ShowSignOption = exports.ScientificType = exports.FormatType = exports.DecimalPrecision = exports.FractionalPrecision = exports.FormatTraits = exports.getItemNamesFromFormatString = exports.formatStringRgx = void 0;
|
|
10
|
+
exports.parsePrecision = exports.parseFractionalPrecision = exports.parseDecimalPrecision = exports.formatTypeToString = exports.parseFormatType = exports.formatTraitsToArray = exports.getTraitString = exports.parseFormatTrait = exports.showSignOptionToString = exports.parseShowSignOption = exports.parseRatioType = exports.scientificTypeToString = exports.parseScientificType = exports.ShowSignOption = exports.RatioType = exports.ScientificType = exports.FormatType = exports.DecimalPrecision = exports.FractionalPrecision = exports.FormatTraits = exports.getItemNamesFromFormatString = exports.formatStringRgx = void 0;
|
|
11
11
|
const Exception_1 = require("../Exception");
|
|
12
12
|
/** The regular expression to parse [format strings]($docs/bis/ec/kindofquantity.md#format-string)
|
|
13
13
|
* provided in serialized formats as well as the full name of an [[OverrideFormat]].
|
|
@@ -114,6 +114,8 @@ var FormatType;
|
|
|
114
114
|
FormatType[FormatType["Bearing"] = 4] = "Bearing";
|
|
115
115
|
/** Azimuth angle e.g. 45°30'00". Requires provided quantities to be of the angle phenomenon */
|
|
116
116
|
FormatType[FormatType["Azimuth"] = 5] = "Azimuth";
|
|
117
|
+
/** Ratio display e,g. 1:2 or 0.3:1. */
|
|
118
|
+
FormatType[FormatType["Ratio"] = 6] = "Ratio";
|
|
117
119
|
})(FormatType || (exports.FormatType = FormatType = {}));
|
|
118
120
|
/** required if type is scientific
|
|
119
121
|
* @beta */
|
|
@@ -124,6 +126,19 @@ var ScientificType;
|
|
|
124
126
|
/** Zero value left of decimal point (ie 0.12345e4) */
|
|
125
127
|
ScientificType[ScientificType["ZeroNormalized"] = 1] = "ZeroNormalized";
|
|
126
128
|
})(ScientificType || (exports.ScientificType = ScientificType = {}));
|
|
129
|
+
/** required if type is ratio
|
|
130
|
+
* @beta */
|
|
131
|
+
var RatioType;
|
|
132
|
+
(function (RatioType) {
|
|
133
|
+
/** One to N ratio (ie 1:N) */
|
|
134
|
+
RatioType["OneToN"] = "OneToN";
|
|
135
|
+
/** N to One ratio (ie N:1) */
|
|
136
|
+
RatioType["NToOne"] = "NToOne";
|
|
137
|
+
/** the lesser value scales to 1. e.g. input 0.5 turns into 2:1 | input 2 turns into 1:2 */
|
|
138
|
+
RatioType["ValueBased"] = "ValueBased";
|
|
139
|
+
/** scales the input ratio to its simplest integer form using the greatest common divisor (GCD) of the values. e.g. 0.3 turns into 3:10 */
|
|
140
|
+
RatioType["UseGreatestCommonDivisor"] = "UseGreatestCommonDivisor";
|
|
141
|
+
})(RatioType || (exports.RatioType = RatioType = {}));
|
|
127
142
|
/** Determines how the sign of values are displayed
|
|
128
143
|
* @beta */
|
|
129
144
|
var ShowSignOption;
|
|
@@ -153,6 +168,20 @@ function scientificTypeToString(scientificType) {
|
|
|
153
168
|
return (scientificType === ScientificType.Normalized) ? "Normalized" : "ZeroNormalized";
|
|
154
169
|
}
|
|
155
170
|
exports.scientificTypeToString = scientificTypeToString;
|
|
171
|
+
/** @beta */
|
|
172
|
+
function parseRatioType(ratioType, formatName) {
|
|
173
|
+
const normalizedValue = ratioType.toLowerCase();
|
|
174
|
+
for (const key in RatioType) {
|
|
175
|
+
if (RatioType.hasOwnProperty(key)) {
|
|
176
|
+
const enumValue = RatioType[key];
|
|
177
|
+
if (enumValue.toLowerCase() === normalizedValue) {
|
|
178
|
+
return enumValue;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'ratioType' attribute.`);
|
|
183
|
+
}
|
|
184
|
+
exports.parseRatioType = parseRatioType;
|
|
156
185
|
/** @beta */
|
|
157
186
|
function parseShowSignOption(showSignOption, formatName) {
|
|
158
187
|
switch (showSignOption.toLowerCase()) {
|
|
@@ -255,6 +284,7 @@ function parseFormatType(jsonObjType, formatName) {
|
|
|
255
284
|
case "fractional": return FormatType.Fractional;
|
|
256
285
|
case "bearing": return FormatType.Bearing;
|
|
257
286
|
case "azimuth": return FormatType.Azimuth;
|
|
287
|
+
case "ratio": return FormatType.Ratio;
|
|
258
288
|
default:
|
|
259
289
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'type' attribute.`);
|
|
260
290
|
}
|
|
@@ -269,6 +299,7 @@ function formatTypeToString(type) {
|
|
|
269
299
|
case FormatType.Fractional: return "Fractional";
|
|
270
300
|
case FormatType.Bearing: return "Bearing";
|
|
271
301
|
case FormatType.Azimuth: return "Azimuth";
|
|
302
|
+
case FormatType.Ratio: return "Ratio";
|
|
272
303
|
}
|
|
273
304
|
}
|
|
274
305
|
exports.formatTypeToString = formatTypeToString;
|
|
@@ -316,6 +347,7 @@ function parsePrecision(precision, type, formatName) {
|
|
|
316
347
|
case FormatType.Decimal:
|
|
317
348
|
case FormatType.Scientific:
|
|
318
349
|
case FormatType.Station:
|
|
350
|
+
case FormatType.Ratio:
|
|
319
351
|
case FormatType.Bearing:
|
|
320
352
|
case FormatType.Azimuth:
|
|
321
353
|
return parseDecimalPrecision(precision, formatName);
|