@itwin/core-quantity 5.7.0-dev.4 → 5.7.0-dev.6
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/lib/cjs/Formatter/Format.d.ts.map +1 -1
- package/lib/cjs/Formatter/Format.js +20 -21
- package/lib/cjs/Formatter/Format.js.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.d.ts +1 -1
- package/lib/cjs/Formatter/FormatEnums.js +1 -1
- package/lib/cjs/Formatter/FormatEnums.js.map +1 -1
- package/lib/cjs/Formatter/Interfaces.d.ts +18 -5
- package/lib/cjs/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/cjs/Formatter/Interfaces.js.map +1 -1
- package/lib/esm/Formatter/Format.d.ts.map +1 -1
- package/lib/esm/Formatter/Format.js +20 -21
- package/lib/esm/Formatter/Format.js.map +1 -1
- package/lib/esm/Formatter/FormatEnums.d.ts +1 -1
- package/lib/esm/Formatter/FormatEnums.js +1 -1
- package/lib/esm/Formatter/FormatEnums.js.map +1 -1
- package/lib/esm/Formatter/Interfaces.d.ts +18 -5
- package/lib/esm/Formatter/Interfaces.d.ts.map +1 -1
- package/lib/esm/Formatter/Interfaces.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Formatter/Format.ts"],"names":[],"mappings":"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
|
|
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,EAAE,mBAAmB,EAEpF,eAAe,EAAE,SAAS,EAC1B,cAAc,EACd,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAA0B,MAAM,cAAc,CAAC;AAKtG;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAM;IACnB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAO;IACrC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAsB;IACjD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,eAAe,EAAE,cAAc,CAA+B;IACxE,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAoD;IACvF,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAqD;IACzF,SAAS,CAAC,aAAa,SAAO;IAC9B,SAAS,CAAC,iBAAiB,SAAO;IAClC,SAAS,CAAC,aAAa,EAAE,YAAY,CAA8B;IACnE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAO;IAChC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAQ;IACvC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAC3C,SAAS,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IACjC,SAAS,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IAC7C,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IACvC,SAAS,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC7C,SAAS,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC;IACtC,SAAS,CAAC,0BAA0B,EAAE,OAAO,CAAS;gBAE1C,IAAI,EAAE,MAAM;IAIxB,IAAW,IAAI,IAAI,MAAM,CAAuB;IAEhD,IAAW,WAAW,IAAI,MAAM,CAA8B;IAC9D,IAAW,WAAW,CAAC,WAAW,EAAE,MAAM,EAAsC;IAEhF,IAAW,IAAI,IAAI,UAAU,CAAuB;IACpD,IAAW,IAAI,CAAC,UAAU,EAAE,UAAU,EAA8B;IAEpE,IAAW,SAAS,IAAI,gBAAgB,GAAG,mBAAmB,CAA4B;IAC1F,IAAW,SAAS,CAAC,SAAS,EAAE,gBAAgB,GAAG,mBAAmB,EAAkC;IAExG,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAA2B;IACpE,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAgC;IAEhF,IAAW,cAAc,IAAI,cAAc,GAAG,SAAS,CAAiC;IACxF,IAAW,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,SAAS,EAA4C;IAEhH,IAAW,SAAS,IAAI,SAAS,GAAG,SAAS,CAA4B;IACzE,IAAW,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAkC;IAEvF,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAAkC;IAC3F,IAAW,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,SAAS,EAA8C;IAErH,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAAiC;IAChF,IAAW,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAA4C;IAExG,IAAW,cAAc,IAAI,cAAc,CAAiC;IAC5E,IAAW,cAAc,CAAC,cAAc,EAAE,cAAc,EAA4C;IAEpG,IAAW,gBAAgB,IAAI,MAAM,CAAmC;IACxE,IAAW,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAgD;IAEpG,IAAW,iBAAiB,IAAI,MAAM,CAAoC;IAC1E,IAAW,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAkD;IAExG,IAAW,YAAY,IAAI,MAAM,CAA+B;IAChE,IAAW,YAAY,CAAC,YAAY,EAAE,MAAM,EAAwC;IAEpF,IAAW,gBAAgB,IAAI,MAAM,CAAmC;IACxE,IAAW,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAgD;IAEpG,IAAW,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAAoC;IACtF,IAAW,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EAAsE;IAExI;;OAEG;IACH,IAAW,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEjD;IACD,IAAW,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EAEjE;IAED,IAAW,yBAAyB,IAAI,OAAO,CAA4C;IAC3F,IAAW,yBAAyB,CAAC,yBAAyB,EAAE,OAAO,EAAkE;IAEzI,IAAW,YAAY,IAAI,YAAY,CAA+B;IACtE,IAAW,YAAY,CAAC,YAAY,EAAE,YAAY,EAAwC;IAE1F,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAAyB;IAChE,IAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAA4C;IACxF,IAAW,eAAe,IAAI,MAAM,CAAgC;IAEpE,IAAW,WAAW,IAAI,OAAO,GAAG,SAAS,CAA8B;IAC3E,IAAW,WAAW,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,EAA2D;IAGlH,IAAW,WAAW,IAAI,MAAM,GAAG,SAAS,CAA8B;IAC1E,IAAW,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAsC;IAE5F,IAAW,eAAe,IAAI,SAAS,GAAG,SAAS,CAAkC;IACrF,IAAW,eAAe,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,EAA8C;IAE/G,IAAW,uBAAuB,IAAI,OAAO,GAAG,SAAS,CAA0C;IACnG,IAAW,uBAAuB,CAAC,uBAAuB,EAAE,OAAO,GAAG,SAAS,EAA8D;IAC7I,IAAW,yBAAyB,IAAI,OAAO,CAA2C;IAE1F,IAAW,cAAc,IAAI,SAAS,GAAG,SAAS,CAAiC;IACnF,IAAW,cAAc,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,EAA4C;IAE3G,8KAA8K;IACvK,iBAAiB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,EAAE;IAQhE,gFAAgF;IACzE,iBAAiB,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO;IAIrD,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB;CA4H3E;AAED;;GAEG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1D,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC;IAE7B;;OAEG;gBACS,IAAI,EAAE,MAAM;IAIxB,IAAW,KAAK,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAwB;IAC9F,IAAW,QAAQ,IAAI,OAAO,CAAgE;IAC9F,IAAW,WAAW,IAAI,GAAG,CAA8B;WAE7C,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IAQnF;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IA2D5C;;OAEG;IACU,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjF,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IA+DhE,uCAAuC;WACnB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW;WAMzF,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB;IAMxF;;OAEG;IACI,MAAM,IAAI,WAAW;IAerB,mBAAmB,IAAI,mBAAmB;CA+ClD"}
|
|
@@ -116,12 +116,12 @@ class BaseFormat {
|
|
|
116
116
|
loadFormatProperties(formatProps) {
|
|
117
117
|
this._type = (0, FormatEnums_1.parseFormatType)(formatProps.type, this.name);
|
|
118
118
|
if (formatProps.precision !== undefined) {
|
|
119
|
-
if (!Number.isInteger(formatProps.precision))
|
|
119
|
+
if (!Number.isInteger(formatProps.precision))
|
|
120
120
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'precision' attribute. It should be an integer.`);
|
|
121
121
|
this._precision = (0, FormatEnums_1.parsePrecision)(formatProps.precision, this._type, this.name);
|
|
122
122
|
}
|
|
123
123
|
if (this.type === FormatEnums_1.FormatType.Scientific) {
|
|
124
|
-
if (undefined === formatProps.scientificType)
|
|
124
|
+
if (undefined === formatProps.scientificType)
|
|
125
125
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Scientific' type therefore the attribute 'scientificType' is required.`);
|
|
126
126
|
this._scientificType = (0, FormatEnums_1.parseScientificType)(formatProps.scientificType, this.name);
|
|
127
127
|
}
|
|
@@ -129,7 +129,7 @@ class BaseFormat {
|
|
|
129
129
|
if (undefined === formatProps.ratioType)
|
|
130
130
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);
|
|
131
131
|
this._ratioType = (0, FormatEnums_1.parseRatioType)(formatProps.ratioType, this.name);
|
|
132
|
-
if (undefined !== formatProps.ratioSeparator) {
|
|
132
|
+
if (undefined !== formatProps.ratioSeparator) { // optional; default is 0.0
|
|
133
133
|
if (typeof (formatProps.ratioSeparator) !== "string")
|
|
134
134
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be of type 'string'.`);
|
|
135
135
|
if (formatProps.ratioSeparator.length !== 1)
|
|
@@ -146,25 +146,24 @@ class BaseFormat {
|
|
|
146
146
|
this._ratioFormatType = FormatEnums_1.RatioFormatType.Decimal; // Apply default
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
if (undefined !== formatProps.roundFactor) {
|
|
149
|
+
if (undefined !== formatProps.roundFactor) {
|
|
150
150
|
if (typeof (formatProps.roundFactor) !== "number")
|
|
151
151
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'roundFactor' attribute. It should be of type 'number'.`);
|
|
152
152
|
if (formatProps.roundFactor !== this.roundFactor) // if roundFactor isn't default value of 0.0, reassign roundFactor variable
|
|
153
153
|
this._roundFactor = formatProps.roundFactor;
|
|
154
154
|
}
|
|
155
|
-
if (undefined !== formatProps.minWidth) {
|
|
156
|
-
if (!Number.isInteger(formatProps.minWidth) || formatProps.minWidth < 0)
|
|
155
|
+
if (undefined !== formatProps.minWidth) {
|
|
156
|
+
if (!Number.isInteger(formatProps.minWidth) || formatProps.minWidth < 0)
|
|
157
157
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'minWidth' attribute. It should be a positive integer.`);
|
|
158
158
|
this._minWidth = formatProps.minWidth;
|
|
159
159
|
}
|
|
160
160
|
if (FormatEnums_1.FormatType.Station === this.type) {
|
|
161
161
|
if (undefined === formatProps.stationOffsetSize)
|
|
162
162
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Station' type therefore the attribute 'stationOffsetSize' is required.`);
|
|
163
|
-
if (!Number.isInteger(formatProps.stationOffsetSize) || formatProps.stationOffsetSize <= 0)
|
|
163
|
+
if (!Number.isInteger(formatProps.stationOffsetSize) || formatProps.stationOffsetSize <= 0)
|
|
164
164
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationOffsetSize' attribute. It should be a positive integer.`);
|
|
165
165
|
this._stationOffsetSize = formatProps.stationOffsetSize;
|
|
166
166
|
if (undefined !== formatProps.stationBaseFactor) {
|
|
167
|
-
// optional - must be a positive integer
|
|
168
167
|
if (!Number.isInteger(formatProps.stationBaseFactor) || formatProps.stationBaseFactor <= 0)
|
|
169
168
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationBaseFactor' attribute. It should be a positive integer.`);
|
|
170
169
|
this._stationBaseFactor = formatProps.stationBaseFactor;
|
|
@@ -173,19 +172,19 @@ class BaseFormat {
|
|
|
173
172
|
if (undefined !== formatProps.showSignOption) { // optional; default is "onlyNegative"
|
|
174
173
|
this._showSignOption = (0, FormatEnums_1.parseShowSignOption)(formatProps.showSignOption, this.name);
|
|
175
174
|
}
|
|
176
|
-
if (undefined !== formatProps.formatTraits && formatProps.formatTraits.length !== 0) {
|
|
177
|
-
if (!Array.isArray(formatProps.formatTraits) && typeof (formatProps.formatTraits) !== "string")
|
|
175
|
+
if (undefined !== formatProps.formatTraits && formatProps.formatTraits.length !== 0) {
|
|
176
|
+
if (!Array.isArray(formatProps.formatTraits) && typeof (formatProps.formatTraits) !== "string")
|
|
178
177
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'formatTraits' attribute. It should be of type 'string' or 'string[]'.`);
|
|
179
|
-
this.parseFormatTraits(formatProps.formatTraits);
|
|
178
|
+
this.parseFormatTraits(formatProps.formatTraits);
|
|
180
179
|
}
|
|
181
|
-
if (undefined !== formatProps.decimalSeparator) {
|
|
182
|
-
if (typeof (formatProps.decimalSeparator) !== "string")
|
|
180
|
+
if (undefined !== formatProps.decimalSeparator) {
|
|
181
|
+
if (typeof (formatProps.decimalSeparator) !== "string")
|
|
183
182
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be of type 'string'.`);
|
|
184
183
|
if (formatProps.decimalSeparator.length > 1)
|
|
185
184
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'decimalSeparator' attribute. It should be an empty or one character string.`);
|
|
186
185
|
this._decimalSeparator = formatProps.decimalSeparator;
|
|
187
186
|
}
|
|
188
|
-
if (undefined !== formatProps.thousandSeparator) {
|
|
187
|
+
if (undefined !== formatProps.thousandSeparator) {
|
|
189
188
|
if (typeof (formatProps.thousandSeparator) !== "string")
|
|
190
189
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'thousandSeparator' attribute. It should be of type 'string'.`);
|
|
191
190
|
if (formatProps.thousandSeparator.length > 1)
|
|
@@ -211,7 +210,7 @@ class BaseFormat {
|
|
|
211
210
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthBase' attribute. It should be of type 'number'.`);
|
|
212
211
|
this._azimuthBase = formatProps.azimuthBase;
|
|
213
212
|
}
|
|
214
|
-
if (undefined !== formatProps.azimuthCounterClockwise) { // optional; default is false
|
|
213
|
+
if (undefined !== formatProps.azimuthCounterClockwise) { // optional; default is false, azimuth values are clockwise from base
|
|
215
214
|
if (typeof (formatProps.azimuthCounterClockwise) !== "boolean")
|
|
216
215
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'azimuthCounterClockwise' attribute. It should be of type 'boolean'.`);
|
|
217
216
|
this._azimuthCounterClockwise = formatProps.azimuthCounterClockwise;
|
|
@@ -313,25 +312,25 @@ class Format extends BaseFormat {
|
|
|
313
312
|
fromFullyResolvedJSON(jsonObj) {
|
|
314
313
|
this.loadFormatProperties(jsonObj);
|
|
315
314
|
this._customProps = jsonObj.custom;
|
|
316
|
-
if (undefined !== jsonObj.composite) {
|
|
315
|
+
if (undefined !== jsonObj.composite) {
|
|
317
316
|
this._units = new Array();
|
|
318
317
|
if (jsonObj.composite.includeZero !== undefined) {
|
|
319
|
-
if (typeof (jsonObj.composite.includeZero) !== "boolean")
|
|
318
|
+
if (typeof (jsonObj.composite.includeZero) !== "boolean")
|
|
320
319
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'includeZero' attribute. It should be of type 'boolean'.`);
|
|
321
320
|
this._includeZero = jsonObj.composite.includeZero;
|
|
322
321
|
}
|
|
323
|
-
if (jsonObj.composite.spacer !== undefined) {
|
|
322
|
+
if (jsonObj.composite.spacer !== undefined) {
|
|
324
323
|
if (typeof (jsonObj.composite.spacer) !== "string")
|
|
325
324
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It must be of type 'string'.`);
|
|
326
325
|
if (jsonObj.composite.spacer.length > 1)
|
|
327
326
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);
|
|
328
327
|
this._spacer = jsonObj.composite.spacer;
|
|
329
328
|
}
|
|
330
|
-
if (jsonObj.composite.units !== undefined) { //
|
|
331
|
-
if (!Array.isArray(jsonObj.composite.units)) {
|
|
329
|
+
if (jsonObj.composite.units !== undefined) { // If composite is defined, it must be an array with 1-4 units
|
|
330
|
+
if (!Array.isArray(jsonObj.composite.units)) {
|
|
332
331
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.InvalidJson, `The Format ${this.name} has a Composite with an invalid 'units' attribute. It must be of type 'array'`);
|
|
333
332
|
}
|
|
334
|
-
if (jsonObj.composite.units.length > 0 && jsonObj.composite.units.length <= 4) {
|
|
333
|
+
if (jsonObj.composite.units.length > 0 && jsonObj.composite.units.length <= 4) {
|
|
335
334
|
const isDuplicateAllowed = this.type === FormatEnums_1.FormatType.Ratio;
|
|
336
335
|
const seenUnits = new Set();
|
|
337
336
|
this._units = [];
|
|
@@ -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, FractionalPrecision, getTraitString,\r\n parseFormatTrait, parseFormatType, parsePrecision, parseRatioFormatType, parseRatioType, parseScientificType, parseShowSignOption,\r\n RatioFormatType, RatioType,\r\n ScientificType,\r\n ShowSignOption,\r\n} from \"./FormatEnums\";\r\nimport { CloneOptions, FormatProps, ResolvedFormatProps, ResolvedFormatUnitSpec } 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 _stationBaseFactor?: number; // optional positive integer base factor for station formatting; default is 1\r\n protected _ratioType?: RatioType; // required if type is ratio; options: oneToN, NToOne, ValueBased, useGreatestCommonDivisor\r\n protected _ratioFormatType?: RatioFormatType; // defaults to Decimal if not specified\r\n protected _ratioSeparator?: string; // default is \":\"; separator character used in ratio formatting\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 ratioType(): RatioType | undefined { return this._ratioType; }\r\n public set ratioType(ratioType: RatioType | undefined) { this._ratioType = ratioType; }\r\n\r\n public get ratioFormatType(): RatioFormatType | undefined { return this._ratioFormatType; }\r\n public set ratioFormatType(ratioFormatType: RatioFormatType | undefined) { this._ratioFormatType = ratioFormatType; }\r\n\r\n public get ratioSeparator(): string | undefined { return this._ratioSeparator; }\r\n public set ratioSeparator(ratioSeparator: string | undefined) { this._ratioSeparator = ratioSeparator; }\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 /** Gets the station base factor used for station formatting. This is a positive integer that acts as a multiplier\r\n * for the base offset calculation. The default value is 1.\r\n */\r\n public get stationBaseFactor(): number | undefined {\r\n return this._stationBaseFactor;\r\n }\r\n public set stationBaseFactor(stationBaseFactor: number | undefined) {\r\n this._stationBaseFactor = stationBaseFactor;\r\n }\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 azimuthClockwiseOrDefault(): boolean { return !this._azimuthCounterClockwise; }\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 | ResolvedFormatProps) {\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 (this.type === FormatType.Ratio){\r\n if (undefined === formatProps.ratioType)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);\r\n\r\n this._ratioType = parseRatioType(formatProps.ratioType, this.name);\r\n\r\n if (undefined !== formatProps.ratioSeparator) {\r\n if (typeof (formatProps.ratioSeparator) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.ratioSeparator.length !== 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be a one character string.`);\r\n this._ratioSeparator = formatProps.ratioSeparator;\r\n } else {\r\n this._ratioSeparator = \":\"; // Apply default\r\n }\r\n\r\n if (undefined !== formatProps.ratioFormatType) {\r\n this._ratioFormatType = parseRatioFormatType(formatProps.ratioFormatType, this.name);\r\n } else {\r\n this._ratioFormatType = RatioFormatType.Decimal; // Apply default\r\n }\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 if (undefined !== formatProps.stationBaseFactor) {\r\n // optional - must be a positive integer\r\n if (!Number.isInteger(formatProps.stationBaseFactor) || formatProps.stationBaseFactor <= 0)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationBaseFactor' attribute. It should be a positive integer.`);\r\n this._stationBaseFactor = formatProps.stationBaseFactor;\r\n }\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 /**\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._stationBaseFactor = this._stationBaseFactor;\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._ratioType = this._ratioType;\r\n newFormat._ratioFormatType = this._ratioFormatType;\r\n newFormat._ratioSeparator = this._ratioSeparator;\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 const json = await resolveFormatProps(this.name, unitsProvider, jsonObj);\r\n return this.fromFullyResolvedJSON(json);\r\n }\r\n\r\n public fromFullyResolvedJSON(jsonObj: ResolvedFormatProps): void {\r\n this.loadFormatProperties(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 const isDuplicateAllowed = this.type === FormatType.Ratio;\r\n const seenUnits = new Set<string>();\r\n this._units = [];\r\n\r\n for (const unitSpec of jsonObj.composite.units) {\r\n if (!isDuplicateAllowed) {\r\n const unitName = unitSpec.unit.name.toLowerCase();\r\n const existingName = seenUnits.has(unitName);\r\n\r\n if (existingName) {\r\n throw new QuantityError(\r\n QuantityStatus.InvalidJson,\r\n `The Format ${this.name} contains duplicate units: '${unitSpec.unit.name}'`\r\n );\r\n }\r\n seenUnits.add(unitName);\r\n }\r\n this._units.push([unitSpec.unit, unitSpec.label]);\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.Ratio && (!this._units || this._units.length === 0)) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type and must have 'composite' units.`);\r\n }\r\n\r\n if(this.type === FormatType.Azimuth || this.type === FormatType.Bearing) {\r\n this._azimuthBaseUnit = jsonObj.azimuthBaseUnit;\r\n this._revolutionUnit = jsonObj.revolutionUnit;\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 public static createFromFullyResolvedJSON(name: string, formatProps: ResolvedFormatProps) {\r\n const actualFormat = new Format(name);\r\n actualFormat.fromFullyResolvedJSON(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 const json = this.toFullyResolvedJSON();\r\n return {\r\n ...json,\r\n azimuthBaseUnit: json.azimuthBaseUnit?.name,\r\n revolutionUnit: json.revolutionUnit?.name,\r\n composite: json.composite ? {\r\n ...json.composite,\r\n units: json.composite.units.map((unit) => {\r\n return undefined !== unit.label ? { name: unit.unit.name, label: unit.label } : { name: unit.unit.name };\r\n }),\r\n } : undefined,\r\n }\r\n }\r\n\r\n public toFullyResolvedJSON(): ResolvedFormatProps {\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 { unit: value[0], label: value[1] };\r\n else\r\n return { unit: value[0] };\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;\r\n const revolutionUnit = this.revolutionUnit;\r\n\r\n const baseFormatProps: ResolvedFormatProps = {\r\n type: this.type,\r\n precision: this.precision,\r\n roundFactor: this.roundFactor,\r\n minWidth: this.minWidth,\r\n showSignOption: 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 ? this.scientificType : undefined,\r\n ratioType: this.ratioType,\r\n ratioFormatType: this.ratioFormatType,\r\n ratioSeparator: this.ratioSeparator,\r\n stationOffsetSize: this.stationOffsetSize,\r\n stationSeparator: this.stationSeparator,\r\n stationBaseFactor: this.stationBaseFactor,\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 };\r\n\r\n return baseFormatProps;\r\n }\r\n}\r\n\r\nasync function resolveCompositeUnit(provider: UnitsProvider, name: string, label?: string): Promise<UnitProps> {\r\n if (typeof name !== \"string\" || (undefined !== label && typeof label !== \"string\")) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `This Composite has a unit with an invalid 'name' or 'label' attribute.`);\r\n }\r\n\r\n const unit = await provider.findUnitByName(name);\r\n if (!unit || !unit.isValid) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${name}'.`);\r\n }\r\n\r\n return unit;\r\n}\r\n\r\nasync function resolveAzimuthBearingUnit(formatName: string, jsonObj: FormatProps, key: \"revolutionUnit\" | \"azimuthBaseUnit\", provider: UnitsProvider): Promise<UnitProps | undefined> {\r\n const unitName = jsonObj[key];\r\n if (undefined !== unitName) {\r\n if (typeof unitName !== \"string\") {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid '${key}' attribute. It should be of type 'string'.`);\r\n }\r\n\r\n const unit = await provider.findUnitByName(unitName);\r\n if (!unit || !unit.isValid) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${unitName}' for ${key} in Format '${formatName}'.`);\r\n }\r\n\r\n return unit;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nasync function resolveFormatProps(formatName: string, unitsProvider: UnitsProvider, jsonObj: FormatProps): Promise<ResolvedFormatProps> {\r\n let units: ResolvedFormatUnitSpec[] | undefined;\r\n if (undefined !== jsonObj.composite?.units) {\r\n units = await Promise.all(jsonObj.composite.units.map(async (entry) => {\r\n const unit = await resolveCompositeUnit(unitsProvider, entry.name);\r\n return { unit, label: entry.label };\r\n }));\r\n\r\n // For Ratio formats with 2 units: validate both units have the same phenomenon\r\n const formatType = parseFormatType(jsonObj.type, formatName);\r\n if (formatType === FormatType.Ratio && units.length === 2) {\r\n const phenomenon1 = units[0].unit.phenomenon;\r\n const phenomenon2 = units[1].unit.phenomenon;\r\n if (phenomenon1 !== phenomenon2) {\r\n throw new QuantityError(\r\n QuantityStatus.InvalidJson,\r\n `The Format ${formatName} has 2-unit composite with different phenomena. Both units must have the same phenomenon. Found '${phenomenon1}' and '${phenomenon2}'.`\r\n );\r\n }\r\n }\r\n }\r\n\r\n let azimuthBaseUnit, revolutionUnit;\r\n const type = parseFormatType(jsonObj.type, formatName);\r\n if (type === FormatType.Azimuth || type === FormatType.Bearing) {\r\n azimuthBaseUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, \"azimuthBaseUnit\", unitsProvider);\r\n revolutionUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, \"revolutionUnit\", unitsProvider);\r\n\r\n if (!revolutionUnit) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);\r\n }\r\n\r\n if (jsonObj.azimuthBase !== undefined && !azimuthBaseUnit) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);\r\n }\r\n }\r\n\r\n return {\r\n ...jsonObj,\r\n azimuthBaseUnit,\r\n revolutionUnit,\r\n composite: units ? {\r\n ...jsonObj.composite,\r\n units,\r\n } : undefined,\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":["/*---------------------------------------------------------------------------------------------\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, FractionalPrecision, getTraitString,\r\n parseFormatTrait, parseFormatType, parsePrecision, parseRatioFormatType, parseRatioType, parseScientificType, parseShowSignOption,\r\n RatioFormatType, RatioType,\r\n ScientificType,\r\n ShowSignOption,\r\n} from \"./FormatEnums\";\r\nimport { CloneOptions, FormatProps, ResolvedFormatProps, ResolvedFormatUnitSpec } 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 _stationBaseFactor?: number; // optional positive integer base factor for station formatting; default is 1\r\n protected _ratioType?: RatioType; // required if type is ratio; options: oneToN, NToOne, ValueBased, useGreatestCommonDivisor\r\n protected _ratioFormatType?: RatioFormatType; // defaults to Decimal if not specified\r\n protected _ratioSeparator?: string; // default is \":\"; separator character used in ratio formatting\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 ratioType(): RatioType | undefined { return this._ratioType; }\r\n public set ratioType(ratioType: RatioType | undefined) { this._ratioType = ratioType; }\r\n\r\n public get ratioFormatType(): RatioFormatType | undefined { return this._ratioFormatType; }\r\n public set ratioFormatType(ratioFormatType: RatioFormatType | undefined) { this._ratioFormatType = ratioFormatType; }\r\n\r\n public get ratioSeparator(): string | undefined { return this._ratioSeparator; }\r\n public set ratioSeparator(ratioSeparator: string | undefined) { this._ratioSeparator = ratioSeparator; }\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 /** Gets the station base factor used for station formatting. This is a positive integer that acts as a multiplier\r\n * for the base offset calculation. The default value is 1.\r\n */\r\n public get stationBaseFactor(): number | undefined {\r\n return this._stationBaseFactor;\r\n }\r\n public set stationBaseFactor(stationBaseFactor: number | undefined) {\r\n this._stationBaseFactor = stationBaseFactor;\r\n }\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 azimuthClockwiseOrDefault(): boolean { return !this._azimuthCounterClockwise; }\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 | ResolvedFormatProps) {\r\n this._type = parseFormatType(formatProps.type, this.name);\r\n\r\n if (formatProps.precision !== undefined) {\r\n if (!Number.isInteger(formatProps.precision))\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)\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 (this.type === FormatType.Ratio){\r\n if (undefined === formatProps.ratioType)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);\r\n\r\n this._ratioType = parseRatioType(formatProps.ratioType, this.name);\r\n\r\n if (undefined !== formatProps.ratioSeparator) { // optional; default is 0.0\r\n if (typeof (formatProps.ratioSeparator) !== \"string\")\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be of type 'string'.`);\r\n if (formatProps.ratioSeparator.length !== 1)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be a one character string.`);\r\n this._ratioSeparator = formatProps.ratioSeparator;\r\n } else {\r\n this._ratioSeparator = \":\"; // Apply default\r\n }\r\n\r\n if (undefined !== formatProps.ratioFormatType) {\r\n this._ratioFormatType = parseRatioFormatType(formatProps.ratioFormatType, this.name);\r\n } else {\r\n this._ratioFormatType = RatioFormatType.Decimal; // Apply default\r\n }\r\n }\r\n\r\n if (undefined !== formatProps.roundFactor) {\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) {\r\n if (!Number.isInteger(formatProps.minWidth) || formatProps.minWidth < 0)\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)\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 if (undefined !== formatProps.stationBaseFactor) {\r\n if (!Number.isInteger(formatProps.stationBaseFactor) || formatProps.stationBaseFactor <= 0)\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'stationBaseFactor' attribute. It should be a positive integer.`);\r\n this._stationBaseFactor = formatProps.stationBaseFactor;\r\n }\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) {\r\n if (!Array.isArray(formatProps.formatTraits) && typeof (formatProps.formatTraits) !== \"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);\r\n }\r\n\r\n if (undefined !== formatProps.decimalSeparator) {\r\n if (typeof (formatProps.decimalSeparator) !== \"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) {\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, azimuth values are clockwise from base\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 /**\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._stationBaseFactor = this._stationBaseFactor;\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._ratioType = this._ratioType;\r\n newFormat._ratioFormatType = this._ratioFormatType;\r\n newFormat._ratioSeparator = this._ratioSeparator;\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 const json = await resolveFormatProps(this.name, unitsProvider, jsonObj);\r\n return this.fromFullyResolvedJSON(json);\r\n }\r\n\r\n public fromFullyResolvedJSON(jsonObj: ResolvedFormatProps): void {\r\n this.loadFormatProperties(jsonObj);\r\n this._customProps = jsonObj.custom;\r\n\r\n if (undefined !== jsonObj.composite) {\r\n this._units = new Array<[UnitProps, string | undefined]>();\r\n if (jsonObj.composite.includeZero !== undefined) {\r\n if (typeof (jsonObj.composite.includeZero) !== \"boolean\")\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) {\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)) {\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) {\r\n const isDuplicateAllowed = this.type === FormatType.Ratio;\r\n const seenUnits = new Set<string>();\r\n this._units = [];\r\n\r\n for (const unitSpec of jsonObj.composite.units) {\r\n if (!isDuplicateAllowed) {\r\n const unitName = unitSpec.unit.name.toLowerCase();\r\n const existingName = seenUnits.has(unitName);\r\n\r\n if (existingName) {\r\n throw new QuantityError(\r\n QuantityStatus.InvalidJson,\r\n `The Format ${this.name} contains duplicate units: '${unitSpec.unit.name}'`\r\n );\r\n }\r\n seenUnits.add(unitName);\r\n }\r\n this._units.push([unitSpec.unit, unitSpec.label]);\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.Ratio && (!this._units || this._units.length === 0)) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type and must have 'composite' units.`);\r\n }\r\n\r\n if(this.type === FormatType.Azimuth || this.type === FormatType.Bearing) {\r\n this._azimuthBaseUnit = jsonObj.azimuthBaseUnit;\r\n this._revolutionUnit = jsonObj.revolutionUnit;\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 public static createFromFullyResolvedJSON(name: string, formatProps: ResolvedFormatProps) {\r\n const actualFormat = new Format(name);\r\n actualFormat.fromFullyResolvedJSON(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 const json = this.toFullyResolvedJSON();\r\n return {\r\n ...json,\r\n azimuthBaseUnit: json.azimuthBaseUnit?.name,\r\n revolutionUnit: json.revolutionUnit?.name,\r\n composite: json.composite ? {\r\n ...json.composite,\r\n units: json.composite.units.map((unit) => {\r\n return undefined !== unit.label ? { name: unit.unit.name, label: unit.label } : { name: unit.unit.name };\r\n }),\r\n } : undefined,\r\n }\r\n }\r\n\r\n public toFullyResolvedJSON(): ResolvedFormatProps {\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 { unit: value[0], label: value[1] };\r\n else\r\n return { unit: value[0] };\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;\r\n const revolutionUnit = this.revolutionUnit;\r\n\r\n const baseFormatProps: ResolvedFormatProps = {\r\n type: this.type,\r\n precision: this.precision,\r\n roundFactor: this.roundFactor,\r\n minWidth: this.minWidth,\r\n showSignOption: 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 ? this.scientificType : undefined,\r\n ratioType: this.ratioType,\r\n ratioFormatType: this.ratioFormatType,\r\n ratioSeparator: this.ratioSeparator,\r\n stationOffsetSize: this.stationOffsetSize,\r\n stationSeparator: this.stationSeparator,\r\n stationBaseFactor: this.stationBaseFactor,\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 };\r\n\r\n return baseFormatProps;\r\n }\r\n}\r\n\r\nasync function resolveCompositeUnit(provider: UnitsProvider, name: string, label?: string): Promise<UnitProps> {\r\n if (typeof name !== \"string\" || (undefined !== label && typeof label !== \"string\")) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `This Composite has a unit with an invalid 'name' or 'label' attribute.`);\r\n }\r\n\r\n const unit = await provider.findUnitByName(name);\r\n if (!unit || !unit.isValid) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${name}'.`);\r\n }\r\n\r\n return unit;\r\n}\r\n\r\nasync function resolveAzimuthBearingUnit(formatName: string, jsonObj: FormatProps, key: \"revolutionUnit\" | \"azimuthBaseUnit\", provider: UnitsProvider): Promise<UnitProps | undefined> {\r\n const unitName = jsonObj[key];\r\n if (undefined !== unitName) {\r\n if (typeof unitName !== \"string\") {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid '${key}' attribute. It should be of type 'string'.`);\r\n }\r\n\r\n const unit = await provider.findUnitByName(unitName);\r\n if (!unit || !unit.isValid) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `Invalid unit name '${unitName}' for ${key} in Format '${formatName}'.`);\r\n }\r\n\r\n return unit;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nasync function resolveFormatProps(formatName: string, unitsProvider: UnitsProvider, jsonObj: FormatProps): Promise<ResolvedFormatProps> {\r\n let units: ResolvedFormatUnitSpec[] | undefined;\r\n if (undefined !== jsonObj.composite?.units) {\r\n units = await Promise.all(jsonObj.composite.units.map(async (entry) => {\r\n const unit = await resolveCompositeUnit(unitsProvider, entry.name);\r\n return { unit, label: entry.label };\r\n }));\r\n\r\n // For Ratio formats with 2 units: validate both units have the same phenomenon\r\n const formatType = parseFormatType(jsonObj.type, formatName);\r\n if (formatType === FormatType.Ratio && units.length === 2) {\r\n const phenomenon1 = units[0].unit.phenomenon;\r\n const phenomenon2 = units[1].unit.phenomenon;\r\n if (phenomenon1 !== phenomenon2) {\r\n throw new QuantityError(\r\n QuantityStatus.InvalidJson,\r\n `The Format ${formatName} has 2-unit composite with different phenomena. Both units must have the same phenomenon. Found '${phenomenon1}' and '${phenomenon2}'.`\r\n );\r\n }\r\n }\r\n }\r\n\r\n let azimuthBaseUnit, revolutionUnit;\r\n const type = parseFormatType(jsonObj.type, formatName);\r\n if (type === FormatType.Azimuth || type === FormatType.Bearing) {\r\n azimuthBaseUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, \"azimuthBaseUnit\", unitsProvider);\r\n revolutionUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, \"revolutionUnit\", unitsProvider);\r\n\r\n if (!revolutionUnit) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);\r\n }\r\n\r\n if (jsonObj.azimuthBase !== undefined && !azimuthBaseUnit) {\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);\r\n }\r\n }\r\n\r\n return {\r\n ...jsonObj,\r\n azimuthBaseUnit,\r\n revolutionUnit,\r\n composite: units ? {\r\n ...jsonObj.composite,\r\n units,\r\n } : undefined,\r\n };\r\n}\r\n"]}
|
|
@@ -45,7 +45,7 @@ export declare enum FormatTraits {
|
|
|
45
45
|
/** Indicates that if an exponent value is positive to not include a `+`. By default a sign, `+` or `-`, is always shown. Not yet supported */
|
|
46
46
|
ExponentOnlyNegative = 512
|
|
47
47
|
}
|
|
48
|
-
/** Precision for Fractional formatted value types.
|
|
48
|
+
/** Precision for Fractional formatted value types. Values must be powers of 2, ranging from Whole (1/1) through 1/256.
|
|
49
49
|
* @beta */
|
|
50
50
|
export declare enum FractionalPrecision {
|
|
51
51
|
One = 1,
|
|
@@ -80,7 +80,7 @@ var FormatTraits;
|
|
|
80
80
|
/** Indicates that if an exponent value is positive to not include a `+`. By default a sign, `+` or `-`, is always shown. Not yet supported */
|
|
81
81
|
FormatTraits[FormatTraits["ExponentOnlyNegative"] = 512] = "ExponentOnlyNegative";
|
|
82
82
|
})(FormatTraits || (exports.FormatTraits = FormatTraits = {}));
|
|
83
|
-
/** Precision for Fractional formatted value types.
|
|
83
|
+
/** Precision for Fractional formatted value types. Values must be powers of 2, ranging from Whole (1/1) through 1/256.
|
|
84
84
|
* @beta */
|
|
85
85
|
var FractionalPrecision;
|
|
86
86
|
(function (FractionalPrecision) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormatEnums.js","sourceRoot":"","sources":["../../../src/Formatter/FormatEnums.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAwBH,oEAWC;AA+HD,wDAEC;AAKD,kDAOC;AAGD,wCAWC;AAGD,oDAUC;AAGD,kDASC;AAMD,wDAOC;AAGD,4CAeC;AAGD,wCAwBC;AAGD,kDAuBC;AAGD,0CAYC;AAKD,gDAUC;AAGD,sDAkBC;AAGD,4DAcC;AAGD,wCAqBC;AArYD,4CAA6D;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,eAAe,GAAG,8JAA8J,CAAC;AAE9L,gBAAgB;AAChB,QAAe,CAAC,CAAC,4BAA4B,CAAC,YAAoB;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,uBAAe,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAmC;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;YAC5B,MAAM,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;;YAEpC,MAAM;QACR,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AACD,YAAY;AACZ,IAAY,YAsBX;AAtBD,WAAY,YAAY;IACtB,iEAAiB,CAAA;IACjB,mDAAmD;IACnD,6DAAoB,CAAA;IACpB,6FAA6F;IAC7F,mEAAuB,CAAA;IACvB,iDAAiD;IACjD,yDAAkB,CAAA;IAClB,iEAAiE;IACjE,uEAAyB,CAAA;IACzB,kDAAkD;IAClD,kEAAsB,CAAA;IACtB,2DAA2D;IAC3D,gEAAqB,CAAA;IACrB,uCAAuC;IACvC,kEAAsB,CAAA;IACtB,4CAA4C;IAC5C,yEAAyB,CAAA;IACzB,6CAA6C;IAC7C,yEAAyB,CAAA;IACzB,8IAA8I;IAC9I,iFAA6B,CAAA;AAC/B,CAAC,EAtBW,YAAY,4BAAZ,YAAY,QAsBvB;AAED;WACW;AACX,IAAY,mBAUX;AAVD,WAAY,mBAAmB;IAC7B,2DAAO,CAAA;IACP,2DAAO,CAAA;IACP,6DAAQ,CAAA;IACR,+DAAS,CAAA;IACT,oEAAY,CAAA;IACZ,wEAAc,CAAA;IACd,wEAAc,CAAA;IACd,iGAA2B,CAAA;IAC3B,2FAAwB,CAAA;AAC1B,CAAC,EAVW,mBAAmB,mCAAnB,mBAAmB,QAU9B;AAED;WACW;AACX,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,uDAAQ,CAAA;IACR,qDAAO,CAAA;IACP,qDAAO,CAAA;IACP,yDAAS,CAAA;IACT,uDAAQ,CAAA;IACR,uDAAQ,CAAA;IACR,qDAAO,CAAA;IACP,yDAAS,CAAA;IACT,yDAAS,CAAA;IACT,uDAAQ,CAAA;IACR,sDAAQ,CAAA;IACR,4DAAW,CAAA;IACX,4DAAW,CAAA;AACb,CAAC,EAdW,gBAAgB,gCAAhB,gBAAgB,QAc3B;AAED;YACY;AACZ,IAAY,UAeX;AAfD,WAAY,UAAU;IACpB,iCAAiC;IACjC,iCAAmB,CAAA;IACnB,oCAAoC;IACpC,uCAAyB,CAAA;IACzB,sCAAsC;IACtC,uCAAyB,CAAA;IACzB,8CAA8C;IAC9C,iCAAmB,CAAA;IACnB,gGAAgG;IAChG,iCAAmB,CAAA;IACnB,+FAA+F;IAC/F,iCAAmB,CAAA;IACnB,wCAAwC;IACxC,6BAAe,CAAA;AACjB,CAAC,EAfW,UAAU,0BAAV,UAAU,QAerB;AAED;WACW;AACX,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,yDAAyD;IACzD,2CAAyB,CAAA;IACzB,sDAAsD;IACtD,mDAAiC,CAAA;AACnC,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED;WACW;AACX,IAAY,SASX;AATD,WAAY,SAAS;IACnB,8BAA8B;IAC9B,8BAAiB,CAAA;IACjB,8BAA8B;IAC9B,8BAAiB,CAAA;IACjB,4FAA4F;IAC5F,sCAAyB,CAAA;IACzB,2IAA2I;IAC3I,kEAAqD,CAAA;AACvD,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED;;GAEG;AACH,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,iCAAiC;IACjC,sCAAmB,CAAA;IACnB,oCAAoC;IACpC,4CAAyB,CAAA;AAC3B,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B;AACD;WACW;AACX,IAAY,cASX;AATD,WAAY,cAAc;IACxB,uDAAuD;IACvD,mCAAiB,CAAA;IACjB,mDAAmD;IACnD,+CAA6B,CAAA;IAC7B,oEAAoE;IACpE,2CAAyB,CAAA;IACzB,2IAA2I;IAC3I,6DAA2C,CAAA;AAC7C,CAAC,EATW,cAAc,8BAAd,cAAc,QASzB;AAED,6BAA6B;AAE7B;;;EAGE;AACF,SAAgB,sBAAsB,CAAC,cAA8B;IACnE,OAAO,CAAC,cAAc,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1F,CAAC;AAED;;EAEE;AACF,SAAgB,mBAAmB,CAAC,cAAsB,EAAE,UAAkB;IAC5E,QAAQ,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,YAAY,CAAC,CAAC,OAAO,cAAc,CAAC,UAAU,CAAC;QACpD,KAAK,gBAAgB,CAAC,CAAC,OAAO,cAAc,CAAC,cAAc,CAAC;QAC5D;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,6CAA6C,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED,eAAe;AACf,SAAgB,cAAc,CAAC,SAAiB,EAAE,UAAkB;IAClE,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,SAAS,CAAC,GAA6B,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;gBAChD,OAAO,SAAsB,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,wCAAwC,CAAC,CAAC;AACxH,CAAC;AAED,eAAe;AACf,SAAgB,oBAAoB,CAAC,eAAuB,EAAE,UAAkB;IAC9E,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAmC,CAAC,CAAC;YACvE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,eAAe;gBAC7C,OAAO,SAA4B,CAAC;QACxC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,8CAA8C,CAAC,CAAC;AAC9H,CAAC;AAED,eAAe;AACf,SAAgB,mBAAmB,CAAC,cAAsB,EAAE,UAAkB;IAC5E,QAAQ,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,QAAQ,CAAC,CAAC,OAAO,cAAc,CAAC,MAAM,CAAC;QAC5C,KAAK,cAAc,CAAC,CAAC,OAAO,cAAc,CAAC,YAAY,CAAC;QACxD,KAAK,YAAY,CAAC,CAAC,OAAO,cAAc,CAAC,UAAU,CAAC;QACpD,KAAK,qBAAqB,CAAC,CAAC,OAAO,cAAc,CAAC,mBAAmB,CAAC;QACtE;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,6CAA6C,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED;;;EAGE;AACF,SAAgB,sBAAsB,CAAC,QAAwB;IAC7D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,cAAc,CAAC,mBAAmB,CAAC,CAAC,OAAO,qBAAqB,CAAC;QACtE,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC5C,KAAK,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,cAAc,CAAC;QACxD,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,OAAO,YAAY,CAAC;IACtD,CAAC;AACH,CAAC;AAED,cAAc;AACd,SAAgB,gBAAgB,CAAC,kBAA0B,EAAE,UAAkB;IAC7E,QAAQ,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,KAAK,aAAa,CAAC,CAAC,OAAO,YAAY,CAAC,WAAW,CAAC;QACpD,KAAK,gBAAgB,CAAC,CAAC,OAAO,YAAY,CAAC,cAAc,CAAC;QAC1D,KAAK,WAAW,CAAC,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC;QAChD,KAAK,kBAAkB,CAAC,CAAC,OAAO,YAAY,CAAC,gBAAgB,CAAC;QAC9D,KAAK,eAAe,CAAC,CAAC,OAAO,YAAY,CAAC,aAAa,CAAC;QACxD,KAAK,cAAc,CAAC,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC;QACtD,KAAK,eAAe,CAAC,CAAC,OAAO,YAAY,CAAC,aAAa,CAAC;QACxD,KAAK,kBAAkB,CAAC,CAAC,OAAO,YAAY,CAAC,gBAAgB,CAAC;QAC9D,KAAK,kBAAkB,CAAC,CAAC,OAAO,YAAY,CAAC,gBAAgB,CAAC;QAC9D,KAAK,sBAAsB,CAAC,CAAC,OAAO,YAAY,CAAC,oBAAoB,CAAC;QACtE;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,2CAA2C,CAAC,CAAC;IAC7H,CAAC;AACH,CAAC;AAED,YAAY;AACZ,SAAgB,cAAc,CAAC,KAAmB;IAChD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,WAAW;YAC3B,OAAO,aAAa,CAAC;QACvB,KAAK,YAAY,CAAC,cAAc;YAC9B,OAAO,gBAAgB,CAAC;QAC1B,KAAK,YAAY,CAAC,SAAS;YACzB,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY,CAAC,gBAAgB;YAChC,OAAO,kBAAkB,CAAC;QAC5B,KAAK,YAAY,CAAC,aAAa;YAC7B,OAAO,eAAe,CAAC;QACzB,KAAK,YAAY,CAAC,YAAY;YAC5B,OAAO,cAAc,CAAC;QACxB,KAAK,YAAY,CAAC,aAAa;YAC7B,OAAO,eAAe,CAAC;QACzB,KAAK,YAAY,CAAC,gBAAgB;YAChC,OAAO,kBAAkB,CAAC;QAC5B,KAAK,YAAY,CAAC,gBAAgB;YAChC,OAAO,kBAAkB,CAAC;QAC5B,KAAK,YAAY,CAAC,oBAAoB,CAAC;QACvC;YACE,OAAO,sBAAsB,CAAC;IAClC,CAAC;AACH,CAAC;AAED,cAAc;AACd,SAAgB,mBAAmB,CAAC,kBAAgC;IAClE,MAAM,eAAe,GAAG,KAAK,EAAU,CAAC;IACxC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,YAAY,CAAC,WAAW;QAC9E,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,cAAc,CAAC,KAAK,YAAY,CAAC,cAAc;QACpF,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,YAAY,CAAC,SAAS;QAC1E,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,YAAY,CAAC,gBAAgB;QACxF,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,YAAY,CAAC,aAAa;QAClF,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,YAAY;QAChF,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,YAAY,CAAC,aAAa;QAClF,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,YAAY,CAAC,gBAAgB;QACxF,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,YAAY,CAAC,gBAAgB;QACxF,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,oBAAoB,CAAC,KAAK,YAAY,CAAC,oBAAoB;QAChG,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC/C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,gBAAgB;AAChB,SAAgB,eAAe,CAAC,WAAmB,EAAE,UAAkB;IACrE,QAAQ,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;QAClC,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC;QAC1C,KAAK,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC;QAChD,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC;QAC1C,KAAK,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC;QAChD,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC;QAC1C,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC;QAC1C,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;QACtC;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,mCAAmC,CAAC,CAAC;IACrH,CAAC;AACH,CAAC;AAED;;EAEE;AACF,SAAgB,kBAAkB,CAAC,IAAgB;IACjD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1C,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,YAAY,CAAC;QAChD,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1C,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,YAAY,CAAC;QAChD,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1C,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1C,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC;IACxC,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,gBAAwB,EAAE,UAAkB;IAChF,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,GAAG,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,GAAG,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,GAAG,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,OAAO,gBAAgB,CAAC,GAAG,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACxC;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,wCAAwC,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC;AAED,4HAA4H;AAC5H,SAAgB,wBAAwB,CAAC,gBAAwB,EAAE,UAAkB;IACnF,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,GAAG,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,GAAG,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC;QACxC,KAAK,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,CAAC,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC;QAC9C,KAAK,GAAG,CAAC,CAAC,OAAO,mBAAmB,CAAC,qBAAqB,CAAC;QAC3D,KAAK,GAAG,CAAC,CAAC,OAAO,mBAAmB,CAAC,kBAAkB,CAAC;QACxD;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,wCAAwC,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC;AAED,iJAAiJ;AACjJ,SAAgB,cAAc,CAAC,SAAiB,EAAE,IAAgB,EAAE,UAAkB;IACpF,QAAQ,IAAI,EAAE,CAAC,CAAC,2DAA2D;QACzE,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACtD,KAAK,UAAU,CAAC,KAAK;YACnB,yFAAyF;YACzF,iDAAiD;YACjD,IAAI,CAAC;gBACH,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;QACH,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzD;YACE,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,WAAW,EAAE,cAAc,UAAU,wCAAwC,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC","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 { QuantityError, QuantityStatus } from \"../Exception\";\r\n\r\n/** The regular expression to parse [format strings]($docs/bis/ec/kindofquantity.md#format-string)\r\n * provided in serialized formats as well as the full name of an [[OverrideFormat]].\r\n *\r\n * `formatName(precision)[unitName|unitLabel][unitName|unitLabel][unitName|unitLabel][unitName|unitLabel]`\r\n *\r\n * Explanation of the regex:\r\n * - ([\\w.:]+)\r\n * - Grabs the format full name\r\n * - (\\(([^\\)]+)\\))?\r\n * - Grabs the precision part with and without the `()`.\r\n * - The parentheses are needed to validate the entire string. (TODO: Need to check if this is true)\r\n * - (\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?\r\n * - 4 of these make up the rest of the regex, none of them are required so each end in `?`\r\n * - Grabs the unit name and label including the `[]`\r\n * - Grabs the unit name, `|` and label separately\r\n * @internal\r\n */\r\nexport const formatStringRgx = /([\\w.:]+)(\\(([^\\)]+)\\))?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?/;\r\n\r\n/** @internal */\r\nexport function* getItemNamesFromFormatString(formatString: string): Iterable<string> {\r\n const match = formatString.split(formatStringRgx);\r\n yield match[1]; // the Format Name\r\n let index = 4;\r\n while (index < match.length - 1) { // index 0 and 21 are empty strings\r\n if (match[index] !== undefined)\r\n yield match[index + 1]; // Unit Name\r\n else\r\n break;\r\n index += 4;\r\n }\r\n}\r\n/** @beta */\r\nexport enum FormatTraits {\r\n Uninitialized = 0,\r\n /** Show trailing zeroes to requested precision. */\r\n TrailZeroes = 1 << 0,\r\n /** Indicates that the fractional part of the number is required when the fraction is zero */\r\n KeepSingleZero = 1 << 1,\r\n /** Zero magnitude returns blank display value */\r\n ZeroEmpty = 1 << 2,\r\n /** Show decimal point when value to right of decimal is empty */\r\n KeepDecimalPoint = 1 << 3,\r\n /** Use the rounding factor. Not yet supported */\r\n ApplyRounding = 1 << 4,\r\n /** Show a dash between whole value and fractional value */\r\n FractionDash = 1 << 5,\r\n /** Append the quantity's unit label */\r\n ShowUnitLabel = 1 << 6,\r\n /** Prepend unit label. Not yet supported */\r\n PrependUnitLabel = 1 << 7,\r\n /** show a grouping in each group of 1000. */\r\n Use1000Separator = 1 << 8,\r\n /** Indicates that if an exponent value is positive to not include a `+`. By default a sign, `+` or `-`, is always shown. Not yet supported */\r\n ExponentOnlyNegative = 1 << 9,\r\n}\r\n\r\n/** Precision for Fractional formatted value types. Range from Whole (1/1) through 1/256.\r\n * @beta */\r\nexport enum FractionalPrecision {\r\n One = 1,\r\n Two = 2,\r\n Four = 4,\r\n Eight = 8,\r\n Sixteen = 16,\r\n ThirtyTwo = 32,\r\n SixtyFour = 64,\r\n OneHundredTwentyEight = 128,\r\n TwoHundredFiftySix = 256,\r\n}\r\n\r\n/** Precision for Decimal, Scientific, and Station formatted value types. Range from 1/(10^0) through 1/(10^12).\r\n * @beta */\r\nexport enum DecimalPrecision {\r\n Zero = 0,\r\n One = 1,\r\n Two = 2,\r\n Three = 3,\r\n Four = 4,\r\n Five = 5,\r\n Six = 6,\r\n Seven = 7,\r\n Eight = 8,\r\n Nine = 9,\r\n Ten = 10,\r\n Eleven = 11,\r\n Twelve = 12,\r\n}\r\n\r\n/** Supported format types\r\n * @beta */\r\nexport enum FormatType {\r\n /** Decimal display (ie 2.125) */\r\n Decimal = \"Decimal\",\r\n /** Fractional display (ie 2-1/8) */\r\n Fractional = \"Fractional\",\r\n /** Scientific Notation (ie 1.04e3) */\r\n Scientific = \"Scientific\",\r\n /** Civil Engineering Stationing (ie 1+00). */\r\n Station = \"Station\",\r\n /** Bearing angle e.g. N05:00:00E. Requires provided quantities to be of the angle phenomenon */\r\n Bearing = \"Bearing\",\r\n /** Azimuth angle e.g. 45°30'00\". Requires provided quantities to be of the angle phenomenon */\r\n Azimuth = \"Azimuth\",\r\n /** Ratio display e,g. 1:2 or 0.3:1. */\r\n Ratio = \"Ratio\",\r\n}\r\n\r\n/** required if type is scientific\r\n * @beta */\r\nexport enum ScientificType {\r\n /** Non-zero value left of decimal point (ie 1.2345e3) */\r\n Normalized = \"Normalized\",\r\n /** Zero value left of decimal point (ie 0.12345e4) */\r\n ZeroNormalized = \"ZeroNormalized\",\r\n}\r\n\r\n/** required if type is ratio\r\n * @beta */\r\nexport enum RatioType {\r\n /** One to N ratio (ie 1:N) */\r\n OneToN = \"OneToN\",\r\n /** N to One ratio (ie N:1) */\r\n NToOne = \"NToOne\",\r\n /** the lesser value scales to 1. e.g. input 0.5 turns into 2:1 | input 2 turns into 1:2 */\r\n ValueBased = \"ValueBased\",\r\n /** 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 */\r\n UseGreatestCommonDivisor = \"UseGreatestCommonDivisor\",\r\n}\r\n\r\n/** The format type for the numbers within a ratio.\r\n * @beta\r\n */\r\nexport enum RatioFormatType {\r\n /** Decimal display (ie 2.125) */\r\n Decimal = \"Decimal\",\r\n /** Fractional display (ie 2-1/8) */\r\n Fractional = \"Fractional\",\r\n}\r\n/** Determines how the sign of values are displayed\r\n * @beta */\r\nexport enum ShowSignOption {\r\n /** Never show a sign even if the value is negative. */\r\n NoSign = \"NoSign\",\r\n /** Only show a sign when the value is negative. */\r\n OnlyNegative = \"OnlyNegative\",\r\n /** Always show a sign whether the value is positive or negative. */\r\n SignAlways = \"SignAlways\",\r\n /** Only show a sign when the value is negative but use parentheses instead of a negative sign. For example, -10 is formatted as `(10)`. */\r\n NegativeParentheses = \"NegativeParentheses\",\r\n}\r\n\r\n// parse and toString methods\r\n\r\n/**\r\n * @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. ScientificType is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function scientificTypeToString(scientificType: ScientificType): string {\r\n return (scientificType === ScientificType.Normalized) ? \"Normalized\" : \"ZeroNormalized\";\r\n}\r\n\r\n/**\r\n * @beta\r\n*/\r\nexport function parseScientificType(scientificType: string, formatName: string): ScientificType {\r\n switch (scientificType.toLowerCase()) {\r\n case \"normalized\": return ScientificType.Normalized;\r\n case \"zeronormalized\": return ScientificType.ZeroNormalized;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'scientificType' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseRatioType(ratioType: string, formatName: string): RatioType {\r\n const normalizedValue = ratioType.toLowerCase();\r\n for (const key in RatioType) {\r\n if (RatioType.hasOwnProperty(key)) {\r\n const enumValue = RatioType[key as keyof typeof RatioType];\r\n if (enumValue.toLowerCase() === normalizedValue) {\r\n return enumValue as RatioType;\r\n }\r\n }\r\n }\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'ratioType' attribute.`);\r\n}\r\n\r\n/** @beta */\r\nexport function parseRatioFormatType(ratioFormatType: string, formatName: string): RatioFormatType {\r\n const normalizedValue = ratioFormatType.toLowerCase();\r\n for (const key in RatioFormatType) {\r\n if (RatioFormatType.hasOwnProperty(key)) {\r\n const enumValue = RatioFormatType[key as keyof typeof RatioFormatType];\r\n if (enumValue.toLowerCase() === normalizedValue)\r\n return enumValue as RatioFormatType;\r\n }\r\n }\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'ratioFormatType' attribute.`);\r\n}\r\n\r\n/** @beta */\r\nexport function parseShowSignOption(showSignOption: string, formatName: string): ShowSignOption {\r\n switch (showSignOption.toLowerCase()) {\r\n case \"nosign\": return ShowSignOption.NoSign;\r\n case \"onlynegative\": return ShowSignOption.OnlyNegative;\r\n case \"signalways\": return ShowSignOption.SignAlways;\r\n case \"negativeparentheses\": return ShowSignOption.NegativeParentheses;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'showSignOption' attribute.`);\r\n }\r\n}\r\n\r\n/**\r\n * @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. ShowSignOption is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function showSignOptionToString(showSign: ShowSignOption): string {\r\n switch (showSign) {\r\n case ShowSignOption.NegativeParentheses: return \"NegativeParentheses\";\r\n case ShowSignOption.NoSign: return \"NoSign\";\r\n case ShowSignOption.OnlyNegative: return \"OnlyNegative\";\r\n case ShowSignOption.SignAlways: return \"SignAlways\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseFormatTrait(formatTraitsString: string, formatName: string): FormatTraits {\r\n switch (formatTraitsString.toLowerCase()) {\r\n case \"trailzeroes\": return FormatTraits.TrailZeroes;\r\n case \"keepsinglezero\": return FormatTraits.KeepSingleZero;\r\n case \"zeroempty\": return FormatTraits.ZeroEmpty;\r\n case \"keepdecimalpoint\": return FormatTraits.KeepDecimalPoint;\r\n case \"applyrounding\": return FormatTraits.ApplyRounding;\r\n case \"fractiondash\": return FormatTraits.FractionDash;\r\n case \"showunitlabel\": return FormatTraits.ShowUnitLabel;\r\n case \"prependunitlabel\": return FormatTraits.PrependUnitLabel;\r\n case \"use1000separator\": return FormatTraits.Use1000Separator;\r\n case \"exponentonlynegative\": return FormatTraits.ExponentOnlyNegative;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'formatTraits' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function getTraitString(trait: FormatTraits) {\r\n switch (trait) {\r\n case FormatTraits.TrailZeroes:\r\n return \"trailZeroes\";\r\n case FormatTraits.KeepSingleZero:\r\n return \"keepSingleZero\";\r\n case FormatTraits.ZeroEmpty:\r\n return \"zeroEmpty\";\r\n case FormatTraits.KeepDecimalPoint:\r\n return \"keepDecimalPoint\";\r\n case FormatTraits.ApplyRounding:\r\n return \"applyRounding\";\r\n case FormatTraits.FractionDash:\r\n return \"fractionDash\";\r\n case FormatTraits.ShowUnitLabel:\r\n return \"showUnitLabel\";\r\n case FormatTraits.PrependUnitLabel:\r\n return \"prependUnitLabel\";\r\n case FormatTraits.Use1000Separator:\r\n return \"use1000Separator\";\r\n case FormatTraits.ExponentOnlyNegative:\r\n default:\r\n return \"exponentOnlyNegative\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function formatTraitsToArray(currentFormatTrait: FormatTraits): string[] {\r\n const formatTraitsArr = Array<string>();\r\n if ((currentFormatTrait & FormatTraits.TrailZeroes) === FormatTraits.TrailZeroes)\r\n formatTraitsArr.push(\"TrailZeroes\");\r\n if ((currentFormatTrait & FormatTraits.KeepSingleZero) === FormatTraits.KeepSingleZero)\r\n formatTraitsArr.push(\"KeepSingleZero\");\r\n if ((currentFormatTrait & FormatTraits.ZeroEmpty) === FormatTraits.ZeroEmpty)\r\n formatTraitsArr.push(\"ZeroEmpty\");\r\n if ((currentFormatTrait & FormatTraits.KeepDecimalPoint) === FormatTraits.KeepDecimalPoint)\r\n formatTraitsArr.push(\"KeepDecimalPoint\");\r\n if ((currentFormatTrait & FormatTraits.ApplyRounding) === FormatTraits.ApplyRounding)\r\n formatTraitsArr.push(\"ApplyRounding\");\r\n if ((currentFormatTrait & FormatTraits.FractionDash) === FormatTraits.FractionDash)\r\n formatTraitsArr.push(\"FractionDash\");\r\n if ((currentFormatTrait & FormatTraits.ShowUnitLabel) === FormatTraits.ShowUnitLabel)\r\n formatTraitsArr.push(\"ShowUnitLabel\");\r\n if ((currentFormatTrait & FormatTraits.PrependUnitLabel) === FormatTraits.PrependUnitLabel)\r\n formatTraitsArr.push(\"PrependUnitLabel\");\r\n if ((currentFormatTrait & FormatTraits.Use1000Separator) === FormatTraits.Use1000Separator)\r\n formatTraitsArr.push(\"Use1000Separator\");\r\n if ((currentFormatTrait & FormatTraits.ExponentOnlyNegative) === FormatTraits.ExponentOnlyNegative)\r\n formatTraitsArr.push(\"ExponentOnlyNegative\");\r\n return formatTraitsArr;\r\n}\r\n\r\n/** @beta */\r\nexport function parseFormatType(jsonObjType: string, formatName: string): FormatType {\r\n switch (jsonObjType.toLowerCase()) {\r\n case \"decimal\": return FormatType.Decimal;\r\n case \"scientific\": return FormatType.Scientific;\r\n case \"station\": return FormatType.Station;\r\n case \"fractional\": return FormatType.Fractional;\r\n case \"bearing\": return FormatType.Bearing;\r\n case \"azimuth\": return FormatType.Azimuth;\r\n case \"ratio\": return FormatType.Ratio;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'type' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. FormatType is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function formatTypeToString(type: FormatType): string {\r\n switch (type) {\r\n case FormatType.Decimal: return \"Decimal\";\r\n case FormatType.Scientific: return \"Scientific\";\r\n case FormatType.Station: return \"Station\";\r\n case FormatType.Fractional: return \"Fractional\";\r\n case FormatType.Bearing: return \"Bearing\";\r\n case FormatType.Azimuth: return \"Azimuth\";\r\n case FormatType.Ratio: return \"Ratio\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseDecimalPrecision(jsonObjPrecision: number, formatName: string): DecimalPrecision {\r\n switch (jsonObjPrecision) {\r\n case 0: return DecimalPrecision.Zero;\r\n case 1: return DecimalPrecision.One;\r\n case 2: return DecimalPrecision.Two;\r\n case 3: return DecimalPrecision.Three;\r\n case 4: return DecimalPrecision.Four;\r\n case 5: return DecimalPrecision.Five;\r\n case 6: return DecimalPrecision.Six;\r\n case 7: return DecimalPrecision.Seven;\r\n case 8: return DecimalPrecision.Eight;\r\n case 9: return DecimalPrecision.Nine;\r\n case 10: return DecimalPrecision.Ten;\r\n case 11: return DecimalPrecision.Eleven;\r\n case 12: return DecimalPrecision.Twelve;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta validates the input value, that is typically extracted for persisted JSON data, is a valid FractionalPrecision */\r\nexport function parseFractionalPrecision(jsonObjPrecision: number, formatName: string): FractionalPrecision {\r\n switch (jsonObjPrecision) {\r\n case 1: return FractionalPrecision.One;\r\n case 2: return FractionalPrecision.Two;\r\n case 4: return FractionalPrecision.Four;\r\n case 8: return FractionalPrecision.Eight;\r\n case 16: return FractionalPrecision.Sixteen;\r\n case 32: return FractionalPrecision.ThirtyTwo;\r\n case 64: return FractionalPrecision.SixtyFour;\r\n case 128: return FractionalPrecision.OneHundredTwentyEight;\r\n case 256: return FractionalPrecision.TwoHundredFiftySix;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta validates the input value, that is typically extracted for persisted JSON data, is a valid DecimalPrecision or FractionalPrecision. */\r\nexport function parsePrecision(precision: number, type: FormatType, formatName: string): DecimalPrecision | FractionalPrecision {\r\n switch (type) { // type must be decimal, fractional, scientific, or station\r\n case FormatType.Decimal:\r\n case FormatType.Scientific:\r\n case FormatType.Station:\r\n case FormatType.Bearing:\r\n case FormatType.Azimuth:\r\n return parseDecimalPrecision(precision, formatName);\r\n case FormatType.Ratio:\r\n // Ratio type can use either decimal or fractional precision depending on ratioFormatType\r\n // Try decimal first, if it fails, try fractional\r\n try {\r\n return parseDecimalPrecision(precision, formatName);\r\n } catch {\r\n return parseFractionalPrecision(precision, formatName);\r\n }\r\n case FormatType.Fractional:\r\n return parseFractionalPrecision(precision, formatName);\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FormatEnums.js","sourceRoot":"","sources":["../../../src/Formatter/FormatEnums.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 { QuantityError, QuantityStatus } from \"../Exception\";\r\n\r\n/** The regular expression to parse [format strings]($docs/bis/ec/kindofquantity.md#format-string)\r\n * provided in serialized formats as well as the full name of an [[OverrideFormat]].\r\n *\r\n * `formatName(precision)[unitName|unitLabel][unitName|unitLabel][unitName|unitLabel][unitName|unitLabel]`\r\n *\r\n * Explanation of the regex:\r\n * - ([\\w.:]+)\r\n * - Grabs the format full name\r\n * - (\\(([^\\)]+)\\))?\r\n * - Grabs the precision part with and without the `()`.\r\n * - The parentheses are needed to validate the entire string. (TODO: Need to check if this is true)\r\n * - (\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?\r\n * - 4 of these make up the rest of the regex, none of them are required so each end in `?`\r\n * - Grabs the unit name and label including the `[]`\r\n * - Grabs the unit name, `|` and label separately\r\n * @internal\r\n */\r\nexport const formatStringRgx = /([\\w.:]+)(\\(([^\\)]+)\\))?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?(\\[([^\\|\\]]+)([\\|])?([^\\]]+)?\\])?/;\r\n\r\n/** @internal */\r\nexport function* getItemNamesFromFormatString(formatString: string): Iterable<string> {\r\n const match = formatString.split(formatStringRgx);\r\n yield match[1]; // the Format Name\r\n let index = 4;\r\n while (index < match.length - 1) { // index 0 and 21 are empty strings\r\n if (match[index] !== undefined)\r\n yield match[index + 1]; // Unit Name\r\n else\r\n break;\r\n index += 4;\r\n }\r\n}\r\n/** @beta */\r\nexport enum FormatTraits {\r\n Uninitialized = 0,\r\n /** Show trailing zeroes to requested precision. */\r\n TrailZeroes = 1 << 0,\r\n /** Indicates that the fractional part of the number is required when the fraction is zero */\r\n KeepSingleZero = 1 << 1,\r\n /** Zero magnitude returns blank display value */\r\n ZeroEmpty = 1 << 2,\r\n /** Show decimal point when value to right of decimal is empty */\r\n KeepDecimalPoint = 1 << 3,\r\n /** Use the rounding factor. Not yet supported */\r\n ApplyRounding = 1 << 4,\r\n /** Show a dash between whole value and fractional value */\r\n FractionDash = 1 << 5,\r\n /** Append the quantity's unit label */\r\n ShowUnitLabel = 1 << 6,\r\n /** Prepend unit label. Not yet supported */\r\n PrependUnitLabel = 1 << 7,\r\n /** show a grouping in each group of 1000. */\r\n Use1000Separator = 1 << 8,\r\n /** Indicates that if an exponent value is positive to not include a `+`. By default a sign, `+` or `-`, is always shown. Not yet supported */\r\n ExponentOnlyNegative = 1 << 9,\r\n}\r\n\r\n/** Precision for Fractional formatted value types. Values must be powers of 2, ranging from Whole (1/1) through 1/256.\r\n * @beta */\r\nexport enum FractionalPrecision {\r\n One = 1,\r\n Two = 2,\r\n Four = 4,\r\n Eight = 8,\r\n Sixteen = 16,\r\n ThirtyTwo = 32,\r\n SixtyFour = 64,\r\n OneHundredTwentyEight = 128,\r\n TwoHundredFiftySix = 256,\r\n}\r\n\r\n/** Precision for Decimal, Scientific, and Station formatted value types. Range from 1/(10^0) through 1/(10^12).\r\n * @beta */\r\nexport enum DecimalPrecision {\r\n Zero = 0,\r\n One = 1,\r\n Two = 2,\r\n Three = 3,\r\n Four = 4,\r\n Five = 5,\r\n Six = 6,\r\n Seven = 7,\r\n Eight = 8,\r\n Nine = 9,\r\n Ten = 10,\r\n Eleven = 11,\r\n Twelve = 12,\r\n}\r\n\r\n/** Supported format types\r\n * @beta */\r\nexport enum FormatType {\r\n /** Decimal display (ie 2.125) */\r\n Decimal = \"Decimal\",\r\n /** Fractional display (ie 2-1/8) */\r\n Fractional = \"Fractional\",\r\n /** Scientific Notation (ie 1.04e3) */\r\n Scientific = \"Scientific\",\r\n /** Civil Engineering Stationing (ie 1+00). */\r\n Station = \"Station\",\r\n /** Bearing angle e.g. N05:00:00E. Requires provided quantities to be of the angle phenomenon */\r\n Bearing = \"Bearing\",\r\n /** Azimuth angle e.g. 45°30'00\". Requires provided quantities to be of the angle phenomenon */\r\n Azimuth = \"Azimuth\",\r\n /** Ratio display e,g. 1:2 or 0.3:1. */\r\n Ratio = \"Ratio\",\r\n}\r\n\r\n/** required if type is scientific\r\n * @beta */\r\nexport enum ScientificType {\r\n /** Non-zero value left of decimal point (ie 1.2345e3) */\r\n Normalized = \"Normalized\",\r\n /** Zero value left of decimal point (ie 0.12345e4) */\r\n ZeroNormalized = \"ZeroNormalized\",\r\n}\r\n\r\n/** required if type is ratio\r\n * @beta */\r\nexport enum RatioType {\r\n /** One to N ratio (ie 1:N) */\r\n OneToN = \"OneToN\",\r\n /** N to One ratio (ie N:1) */\r\n NToOne = \"NToOne\",\r\n /** the lesser value scales to 1. e.g. input 0.5 turns into 2:1 | input 2 turns into 1:2 */\r\n ValueBased = \"ValueBased\",\r\n /** 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 */\r\n UseGreatestCommonDivisor = \"UseGreatestCommonDivisor\",\r\n}\r\n\r\n/** The format type for the numbers within a ratio.\r\n * @beta\r\n */\r\nexport enum RatioFormatType {\r\n /** Decimal display (ie 2.125) */\r\n Decimal = \"Decimal\",\r\n /** Fractional display (ie 2-1/8) */\r\n Fractional = \"Fractional\",\r\n}\r\n/** Determines how the sign of values are displayed\r\n * @beta */\r\nexport enum ShowSignOption {\r\n /** Never show a sign even if the value is negative. */\r\n NoSign = \"NoSign\",\r\n /** Only show a sign when the value is negative. */\r\n OnlyNegative = \"OnlyNegative\",\r\n /** Always show a sign whether the value is positive or negative. */\r\n SignAlways = \"SignAlways\",\r\n /** Only show a sign when the value is negative but use parentheses instead of a negative sign. For example, -10 is formatted as `(10)`. */\r\n NegativeParentheses = \"NegativeParentheses\",\r\n}\r\n\r\n// parse and toString methods\r\n\r\n/**\r\n * @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. ScientificType is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function scientificTypeToString(scientificType: ScientificType): string {\r\n return (scientificType === ScientificType.Normalized) ? \"Normalized\" : \"ZeroNormalized\";\r\n}\r\n\r\n/**\r\n * @beta\r\n*/\r\nexport function parseScientificType(scientificType: string, formatName: string): ScientificType {\r\n switch (scientificType.toLowerCase()) {\r\n case \"normalized\": return ScientificType.Normalized;\r\n case \"zeronormalized\": return ScientificType.ZeroNormalized;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'scientificType' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseRatioType(ratioType: string, formatName: string): RatioType {\r\n const normalizedValue = ratioType.toLowerCase();\r\n for (const key in RatioType) {\r\n if (RatioType.hasOwnProperty(key)) {\r\n const enumValue = RatioType[key as keyof typeof RatioType];\r\n if (enumValue.toLowerCase() === normalizedValue) {\r\n return enumValue as RatioType;\r\n }\r\n }\r\n }\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'ratioType' attribute.`);\r\n}\r\n\r\n/** @beta */\r\nexport function parseRatioFormatType(ratioFormatType: string, formatName: string): RatioFormatType {\r\n const normalizedValue = ratioFormatType.toLowerCase();\r\n for (const key in RatioFormatType) {\r\n if (RatioFormatType.hasOwnProperty(key)) {\r\n const enumValue = RatioFormatType[key as keyof typeof RatioFormatType];\r\n if (enumValue.toLowerCase() === normalizedValue)\r\n return enumValue as RatioFormatType;\r\n }\r\n }\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'ratioFormatType' attribute.`);\r\n}\r\n\r\n/** @beta */\r\nexport function parseShowSignOption(showSignOption: string, formatName: string): ShowSignOption {\r\n switch (showSignOption.toLowerCase()) {\r\n case \"nosign\": return ShowSignOption.NoSign;\r\n case \"onlynegative\": return ShowSignOption.OnlyNegative;\r\n case \"signalways\": return ShowSignOption.SignAlways;\r\n case \"negativeparentheses\": return ShowSignOption.NegativeParentheses;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'showSignOption' attribute.`);\r\n }\r\n}\r\n\r\n/**\r\n * @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. ShowSignOption is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function showSignOptionToString(showSign: ShowSignOption): string {\r\n switch (showSign) {\r\n case ShowSignOption.NegativeParentheses: return \"NegativeParentheses\";\r\n case ShowSignOption.NoSign: return \"NoSign\";\r\n case ShowSignOption.OnlyNegative: return \"OnlyNegative\";\r\n case ShowSignOption.SignAlways: return \"SignAlways\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseFormatTrait(formatTraitsString: string, formatName: string): FormatTraits {\r\n switch (formatTraitsString.toLowerCase()) {\r\n case \"trailzeroes\": return FormatTraits.TrailZeroes;\r\n case \"keepsinglezero\": return FormatTraits.KeepSingleZero;\r\n case \"zeroempty\": return FormatTraits.ZeroEmpty;\r\n case \"keepdecimalpoint\": return FormatTraits.KeepDecimalPoint;\r\n case \"applyrounding\": return FormatTraits.ApplyRounding;\r\n case \"fractiondash\": return FormatTraits.FractionDash;\r\n case \"showunitlabel\": return FormatTraits.ShowUnitLabel;\r\n case \"prependunitlabel\": return FormatTraits.PrependUnitLabel;\r\n case \"use1000separator\": return FormatTraits.Use1000Separator;\r\n case \"exponentonlynegative\": return FormatTraits.ExponentOnlyNegative;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'formatTraits' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function getTraitString(trait: FormatTraits) {\r\n switch (trait) {\r\n case FormatTraits.TrailZeroes:\r\n return \"trailZeroes\";\r\n case FormatTraits.KeepSingleZero:\r\n return \"keepSingleZero\";\r\n case FormatTraits.ZeroEmpty:\r\n return \"zeroEmpty\";\r\n case FormatTraits.KeepDecimalPoint:\r\n return \"keepDecimalPoint\";\r\n case FormatTraits.ApplyRounding:\r\n return \"applyRounding\";\r\n case FormatTraits.FractionDash:\r\n return \"fractionDash\";\r\n case FormatTraits.ShowUnitLabel:\r\n return \"showUnitLabel\";\r\n case FormatTraits.PrependUnitLabel:\r\n return \"prependUnitLabel\";\r\n case FormatTraits.Use1000Separator:\r\n return \"use1000Separator\";\r\n case FormatTraits.ExponentOnlyNegative:\r\n default:\r\n return \"exponentOnlyNegative\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function formatTraitsToArray(currentFormatTrait: FormatTraits): string[] {\r\n const formatTraitsArr = Array<string>();\r\n if ((currentFormatTrait & FormatTraits.TrailZeroes) === FormatTraits.TrailZeroes)\r\n formatTraitsArr.push(\"TrailZeroes\");\r\n if ((currentFormatTrait & FormatTraits.KeepSingleZero) === FormatTraits.KeepSingleZero)\r\n formatTraitsArr.push(\"KeepSingleZero\");\r\n if ((currentFormatTrait & FormatTraits.ZeroEmpty) === FormatTraits.ZeroEmpty)\r\n formatTraitsArr.push(\"ZeroEmpty\");\r\n if ((currentFormatTrait & FormatTraits.KeepDecimalPoint) === FormatTraits.KeepDecimalPoint)\r\n formatTraitsArr.push(\"KeepDecimalPoint\");\r\n if ((currentFormatTrait & FormatTraits.ApplyRounding) === FormatTraits.ApplyRounding)\r\n formatTraitsArr.push(\"ApplyRounding\");\r\n if ((currentFormatTrait & FormatTraits.FractionDash) === FormatTraits.FractionDash)\r\n formatTraitsArr.push(\"FractionDash\");\r\n if ((currentFormatTrait & FormatTraits.ShowUnitLabel) === FormatTraits.ShowUnitLabel)\r\n formatTraitsArr.push(\"ShowUnitLabel\");\r\n if ((currentFormatTrait & FormatTraits.PrependUnitLabel) === FormatTraits.PrependUnitLabel)\r\n formatTraitsArr.push(\"PrependUnitLabel\");\r\n if ((currentFormatTrait & FormatTraits.Use1000Separator) === FormatTraits.Use1000Separator)\r\n formatTraitsArr.push(\"Use1000Separator\");\r\n if ((currentFormatTrait & FormatTraits.ExponentOnlyNegative) === FormatTraits.ExponentOnlyNegative)\r\n formatTraitsArr.push(\"ExponentOnlyNegative\");\r\n return formatTraitsArr;\r\n}\r\n\r\n/** @beta */\r\nexport function parseFormatType(jsonObjType: string, formatName: string): FormatType {\r\n switch (jsonObjType.toLowerCase()) {\r\n case \"decimal\": return FormatType.Decimal;\r\n case \"scientific\": return FormatType.Scientific;\r\n case \"station\": return FormatType.Station;\r\n case \"fractional\": return FormatType.Fractional;\r\n case \"bearing\": return FormatType.Bearing;\r\n case \"azimuth\": return FormatType.Azimuth;\r\n case \"ratio\": return FormatType.Ratio;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'type' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. FormatType is now a string enum and doesn't need a serialization method. You can access the enum directly.\r\n*/\r\nexport function formatTypeToString(type: FormatType): string {\r\n switch (type) {\r\n case FormatType.Decimal: return \"Decimal\";\r\n case FormatType.Scientific: return \"Scientific\";\r\n case FormatType.Station: return \"Station\";\r\n case FormatType.Fractional: return \"Fractional\";\r\n case FormatType.Bearing: return \"Bearing\";\r\n case FormatType.Azimuth: return \"Azimuth\";\r\n case FormatType.Ratio: return \"Ratio\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function parseDecimalPrecision(jsonObjPrecision: number, formatName: string): DecimalPrecision {\r\n switch (jsonObjPrecision) {\r\n case 0: return DecimalPrecision.Zero;\r\n case 1: return DecimalPrecision.One;\r\n case 2: return DecimalPrecision.Two;\r\n case 3: return DecimalPrecision.Three;\r\n case 4: return DecimalPrecision.Four;\r\n case 5: return DecimalPrecision.Five;\r\n case 6: return DecimalPrecision.Six;\r\n case 7: return DecimalPrecision.Seven;\r\n case 8: return DecimalPrecision.Eight;\r\n case 9: return DecimalPrecision.Nine;\r\n case 10: return DecimalPrecision.Ten;\r\n case 11: return DecimalPrecision.Eleven;\r\n case 12: return DecimalPrecision.Twelve;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta validates the input value, that is typically extracted for persisted JSON data, is a valid FractionalPrecision */\r\nexport function parseFractionalPrecision(jsonObjPrecision: number, formatName: string): FractionalPrecision {\r\n switch (jsonObjPrecision) {\r\n case 1: return FractionalPrecision.One;\r\n case 2: return FractionalPrecision.Two;\r\n case 4: return FractionalPrecision.Four;\r\n case 8: return FractionalPrecision.Eight;\r\n case 16: return FractionalPrecision.Sixteen;\r\n case 32: return FractionalPrecision.ThirtyTwo;\r\n case 64: return FractionalPrecision.SixtyFour;\r\n case 128: return FractionalPrecision.OneHundredTwentyEight;\r\n case 256: return FractionalPrecision.TwoHundredFiftySix;\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n\r\n/** @beta validates the input value, that is typically extracted for persisted JSON data, is a valid DecimalPrecision or FractionalPrecision. */\r\nexport function parsePrecision(precision: number, type: FormatType, formatName: string): DecimalPrecision | FractionalPrecision {\r\n switch (type) { // type must be decimal, fractional, scientific, or station\r\n case FormatType.Decimal:\r\n case FormatType.Scientific:\r\n case FormatType.Station:\r\n case FormatType.Bearing:\r\n case FormatType.Azimuth:\r\n return parseDecimalPrecision(precision, formatName);\r\n case FormatType.Ratio:\r\n // Ratio type can use either decimal or fractional precision depending on ratioFormatType\r\n // Try decimal first, if it fails, try fractional\r\n try {\r\n return parseDecimalPrecision(precision, formatName);\r\n } catch {\r\n return parseFractionalPrecision(precision, formatName);\r\n }\r\n case FormatType.Fractional:\r\n return parseFractionalPrecision(precision, formatName);\r\n default:\r\n throw new QuantityError(QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid 'precision' attribute.`);\r\n }\r\n}\r\n"]}
|