@itwin/ecschema-metadata 4.10.0-dev.3 → 4.10.0-dev.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -1
- package/lib/cjs/Metadata/Format.d.ts.map +1 -1
- package/lib/cjs/Metadata/Format.js +6 -6
- package/lib/cjs/Metadata/Format.js.map +1 -1
- package/lib/cjs/Metadata/KindOfQuantity.d.ts +0 -4
- package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
- package/lib/cjs/Metadata/KindOfQuantity.js +2 -54
- package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
- package/lib/cjs/Metadata/OverrideFormat.d.ts +12 -0
- package/lib/cjs/Metadata/OverrideFormat.d.ts.map +1 -1
- package/lib/cjs/Metadata/OverrideFormat.js +53 -0
- package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
- package/lib/esm/Metadata/Format.d.ts.map +1 -1
- package/lib/esm/Metadata/Format.js +7 -7
- package/lib/esm/Metadata/Format.js.map +1 -1
- package/lib/esm/Metadata/KindOfQuantity.d.ts +0 -4
- package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
- package/lib/esm/Metadata/KindOfQuantity.js +2 -54
- package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
- package/lib/esm/Metadata/OverrideFormat.d.ts +12 -0
- package/lib/esm/Metadata/OverrideFormat.d.ts.map +1 -1
- package/lib/esm/Metadata/OverrideFormat.js +53 -0
- package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Format.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAuB,UAAU,
|
|
1
|
+
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Format.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { XmlSerializationUtils } from "../Deserialization/XmlSerializationUtils";
|
|
9
9
|
import { SchemaItemType } from "../ECObjects";
|
|
10
10
|
import { ECObjectsError, ECObjectsStatus } from "../Exception";
|
|
11
|
-
import { BaseFormat, FormatTraits, formatTraitsToArray, FormatType,
|
|
11
|
+
import { BaseFormat, FormatTraits, formatTraitsToArray, FormatType, ShowSignOption, } from "@itwin/core-quantity";
|
|
12
12
|
import { SchemaItem } from "./SchemaItem";
|
|
13
13
|
/**
|
|
14
14
|
* @beta
|
|
@@ -105,7 +105,7 @@ export class Format extends SchemaItem {
|
|
|
105
105
|
*/
|
|
106
106
|
toJSON(standalone = false, includeSchemaVersion = false) {
|
|
107
107
|
const schemaJson = super.toJSON(standalone, includeSchemaVersion);
|
|
108
|
-
schemaJson.type =
|
|
108
|
+
schemaJson.type = this.type;
|
|
109
109
|
schemaJson.precision = this.precision;
|
|
110
110
|
// this._spacer = " ";
|
|
111
111
|
// this._includeZero = true;
|
|
@@ -113,7 +113,7 @@ export class Format extends SchemaItem {
|
|
|
113
113
|
if (0.0 !== this.roundFactor)
|
|
114
114
|
schemaJson.roundFactor = this.roundFactor;
|
|
115
115
|
if (ShowSignOption.OnlyNegative !== this.showSignOption)
|
|
116
|
-
schemaJson.showSignOption =
|
|
116
|
+
schemaJson.showSignOption = this.showSignOption;
|
|
117
117
|
if (FormatTraits.Uninitialized !== this.formatTraits)
|
|
118
118
|
schemaJson.formatTraits = formatTraitsToArray(this.formatTraits);
|
|
119
119
|
if ("." !== this.decimalSeparator)
|
|
@@ -125,7 +125,7 @@ export class Format extends SchemaItem {
|
|
|
125
125
|
if (undefined !== this.minWidth)
|
|
126
126
|
schemaJson.minWidth = this.minWidth;
|
|
127
127
|
if (FormatType.Scientific === this.type && undefined !== this.scientificType)
|
|
128
|
-
schemaJson.scientificType =
|
|
128
|
+
schemaJson.scientificType = this.scientificType;
|
|
129
129
|
if (FormatType.Station === this.type) {
|
|
130
130
|
if (undefined !== this.stationOffsetSize)
|
|
131
131
|
schemaJson.stationOffsetSize = this.stationOffsetSize;
|
|
@@ -151,10 +151,10 @@ export class Format extends SchemaItem {
|
|
|
151
151
|
/** @internal */
|
|
152
152
|
async toXml(schemaXml) {
|
|
153
153
|
const itemElement = await super.toXml(schemaXml);
|
|
154
|
-
itemElement.setAttribute("type",
|
|
154
|
+
itemElement.setAttribute("type", this.type.toLowerCase());
|
|
155
155
|
itemElement.setAttribute("precision", this.precision.toString());
|
|
156
156
|
itemElement.setAttribute("roundFactor", this.roundFactor.toString());
|
|
157
|
-
itemElement.setAttribute("showSignOption",
|
|
157
|
+
itemElement.setAttribute("showSignOption", this.showSignOption);
|
|
158
158
|
itemElement.setAttribute("decimalSeparator", this.decimalSeparator);
|
|
159
159
|
itemElement.setAttribute("thousandSeparator", this.thousandSeparator);
|
|
160
160
|
itemElement.setAttribute("uomSeparator", this.uomSeparator);
|
|
@@ -162,7 +162,7 @@ export class Format extends SchemaItem {
|
|
|
162
162
|
if (undefined !== this.minWidth)
|
|
163
163
|
itemElement.setAttribute("minWidth", this.minWidth.toString());
|
|
164
164
|
if (undefined !== this.scientificType)
|
|
165
|
-
itemElement.setAttribute("scientificType",
|
|
165
|
+
itemElement.setAttribute("scientificType", this.scientificType);
|
|
166
166
|
if (undefined !== this.stationOffsetSize)
|
|
167
167
|
itemElement.setAttribute("stationOffsetSize", this.stationOffsetSize.toString());
|
|
168
168
|
const formatTraits = formatTraitsToArray(this.formatTraits);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Format.js","sourceRoot":"","sources":["../../../src/Metadata/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 Metadata\r\n */\r\n\r\nimport { SchemaItemFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport {\r\n BaseFormat, DecimalPrecision, FormatTraits, formatTraitsToArray, FormatType, formatTypeToString, FractionalPrecision,\r\n ScientificType, scientificTypeToString, ShowSignOption, showSignOptionToString,\r\n} from \"@itwin/core-quantity\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { Unit } from \"./Unit\";\r\n\r\n/**\r\n * @beta\r\n */\r\nexport class Format extends SchemaItem {\r\n public override readonly schemaItemType!: SchemaItemType.Format; // eslint-disable-line\r\n protected _base: BaseFormat;\r\n protected _units?: Array<[Unit | InvertedUnit, string | undefined]>;\r\n\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this.schemaItemType = SchemaItemType.Format;\r\n\r\n this._base = new BaseFormat(name);\r\n }\r\n\r\n public get roundFactor(): number { return this._base.roundFactor; }\r\n public get type(): FormatType { return this._base.type; }\r\n public get precision(): DecimalPrecision | FractionalPrecision { return this._base.precision; }\r\n public get minWidth(): number | undefined { return this._base.minWidth; }\r\n public get scientificType(): ScientificType | undefined { return this._base.scientificType; }\r\n public get showSignOption(): ShowSignOption { return this._base.showSignOption; }\r\n public get decimalSeparator(): string { return this._base.decimalSeparator; }\r\n public get thousandSeparator(): string { return this._base.thousandSeparator; }\r\n public get uomSeparator(): string { return this._base.uomSeparator; }\r\n public get stationSeparator(): string { return this._base.stationSeparator; }\r\n public get stationOffsetSize(): number | undefined { return this._base.stationOffsetSize; }\r\n public get formatTraits(): FormatTraits { return this._base.formatTraits; }\r\n public get spacer(): string | undefined { return this._base.spacer; }\r\n public get includeZero(): boolean | undefined { return this._base.includeZero; }\r\n public get units(): Array<[Unit | InvertedUnit, string | undefined]> | undefined { return this._units; }\r\n\r\n private parseFormatTraits(formatTraitsFromJson: string | string[]) {\r\n return this._base.parseFormatTraits(formatTraitsFromJson);\r\n }\r\n\r\n public hasFormatTrait(formatTrait: FormatTraits) {\r\n return this._base.hasFormatTraitSet(formatTrait);\r\n }\r\n\r\n /**\r\n * Adds a Unit, or InvertedUnit, with an optional label override.\r\n * @param unit The Unit, or InvertedUnit, to add to this Format.\r\n * @param label A label that overrides the label defined within the Unit when a value is formatted.\r\n */\r\n protected addUnit(unit: Unit | InvertedUnit, label?: string) {\r\n if (undefined === this._units)\r\n this._units = [];\r\n else { // Validate that a duplicate is not added.\r\n for (const existingUnit of this._units) {\r\n if (unit.fullName.toLowerCase() === existingUnit[0].fullName.toLowerCase())\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has duplicate units, '${unit.fullName}'.`); // TODO: Validation - this should be a validation error not a hard failure.\r\n }\r\n }\r\n\r\n this._units.push([unit, label]);\r\n }\r\n\r\n protected setPrecision(precision: number) { this._base.precision = precision; }\r\n\r\n private typecheck(formatProps: SchemaItemFormatProps) {\r\n this._base.loadFormatProperties(formatProps);\r\n\r\n if (undefined !== formatProps.composite) { // TODO: This is duplicated below when the units need to be processed...\r\n if (undefined !== formatProps.composite.includeZero)\r\n this._base.includeZero = formatProps.composite.includeZero;\r\n\r\n if (undefined !== formatProps.composite.spacer) {\r\n if (formatProps.composite.spacer.length > 1)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has a composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);\r\n this._base.spacer = formatProps.composite.spacer;\r\n }\r\n\r\n // Composite requires 1-4 units\r\n if (formatProps.composite.units.length <= 0 || formatProps.composite.units.length > 4)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);\r\n }\r\n }\r\n\r\n public override fromJSONSync(formatProps: SchemaItemFormatProps) {\r\n super.fromJSONSync(formatProps);\r\n this.typecheck(formatProps);\r\n if (undefined === formatProps.composite)\r\n return;\r\n\r\n // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = this.schema.lookupItemSync<Unit | InvertedUnit>(unit.name);\r\n if (undefined === newUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n this.addUnit(newUnit, unit.label);\r\n }\r\n }\r\n\r\n public override async fromJSON(formatProps: SchemaItemFormatProps) {\r\n await super.fromJSON(formatProps);\r\n this.typecheck(formatProps);\r\n if (undefined === formatProps.composite)\r\n return;\r\n\r\n // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = await this.schema.lookupItem<Unit | InvertedUnit>(unit.name);\r\n if (undefined === newUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n this.addUnit(newUnit, unit.label);\r\n }\r\n }\r\n\r\n /**\r\n * Save this Format's properties to an object for serializing to JSON.\r\n * @param standalone Serialization includes only this object (as opposed to the full schema).\r\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\r\n */\r\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): SchemaItemFormatProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.type = formatTypeToString(this.type);\r\n schemaJson.precision = this.precision;\r\n\r\n // this._spacer = \" \";\r\n // this._includeZero = true;\r\n\r\n // Serialize the minimal amount of information needed so anything that is the same as the default, do not serialize.\r\n if (0.0 !== this.roundFactor)\r\n schemaJson.roundFactor = this.roundFactor;\r\n if (ShowSignOption.OnlyNegative !== this.showSignOption)\r\n schemaJson.showSignOption = showSignOptionToString(this.showSignOption);\r\n if (FormatTraits.Uninitialized !== this.formatTraits)\r\n schemaJson.formatTraits = formatTraitsToArray(this.formatTraits);\r\n if (\".\" !== this.decimalSeparator)\r\n schemaJson.decimalSeparator = this.decimalSeparator;\r\n if (\",\" !== this.thousandSeparator)\r\n schemaJson.thousandSeparator = this.thousandSeparator;\r\n if (\" \" !== this.uomSeparator)\r\n schemaJson.uomSeparator = this.uomSeparator;\r\n\r\n if (undefined !== this.minWidth)\r\n schemaJson.minWidth = this.minWidth;\r\n\r\n if (FormatType.Scientific === this.type && undefined !== this.scientificType)\r\n schemaJson.scientificType = scientificTypeToString(this.scientificType);\r\n\r\n if (FormatType.Station === this.type) {\r\n if (undefined !== this.stationOffsetSize)\r\n schemaJson.stationOffsetSize = this.stationOffsetSize;\r\n if (\" \" !== this.stationSeparator)\r\n schemaJson.stationSeparator = this.stationSeparator;\r\n }\r\n\r\n if (undefined === this.units)\r\n return schemaJson;\r\n\r\n schemaJson.composite = {};\r\n\r\n if (\" \" !== this.spacer)\r\n schemaJson.composite.spacer = this.spacer;\r\n\r\n if (true !== this.includeZero)\r\n schemaJson.composite.includeZero = this.includeZero;\r\n\r\n schemaJson.composite.units = [];\r\n for (const unit of this.units) {\r\n schemaJson.composite.units.push({\r\n name: unit[0].fullName,\r\n label: unit[1],\r\n });\r\n }\r\n\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n itemElement.setAttribute(\"type\", formatTypeToString(this.type).toLowerCase());\r\n itemElement.setAttribute(\"precision\", this.precision.toString());\r\n itemElement.setAttribute(\"roundFactor\", this.roundFactor.toString());\r\n itemElement.setAttribute(\"showSignOption\", showSignOptionToString(this.showSignOption));\r\n itemElement.setAttribute(\"decimalSeparator\", this.decimalSeparator);\r\n itemElement.setAttribute(\"thousandSeparator\", this.thousandSeparator);\r\n itemElement.setAttribute(\"uomSeparator\", this.uomSeparator);\r\n itemElement.setAttribute(\"stationSeparator\", this.stationSeparator);\r\n\r\n if (undefined !== this.minWidth)\r\n itemElement.setAttribute(\"minWidth\", this.minWidth.toString());\r\n if (undefined !== this.scientificType)\r\n itemElement.setAttribute(\"scientificType\", scientificTypeToString(this.scientificType));\r\n if (undefined !== this.stationOffsetSize)\r\n itemElement.setAttribute(\"stationOffsetSize\", this.stationOffsetSize.toString());\r\n\r\n const formatTraits = formatTraitsToArray(this.formatTraits);\r\n if (formatTraits.length > 0)\r\n itemElement.setAttribute(\"formatTraits\", formatTraits.join(\"|\"));\r\n\r\n if (undefined !== this.units) {\r\n const compositeElement = schemaXml.createElement(\"Composite\");\r\n if (undefined !== this.spacer)\r\n compositeElement.setAttribute(\"spacer\", this.spacer);\r\n if (undefined !== this.includeZero)\r\n compositeElement.setAttribute(\"includeZero\", this.includeZero.toString());\r\n\r\n this.units.forEach(([unit, label]) => {\r\n const unitElement = schemaXml.createElement(\"Unit\");\r\n if (undefined !== label)\r\n unitElement.setAttribute(\"label\", label);\r\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, unit.schema, unit.name);\r\n unitElement.textContent = unitName;\r\n compositeElement.appendChild(unitElement);\r\n });\r\n\r\n itemElement.appendChild(compositeElement);\r\n }\r\n\r\n return itemElement;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setFormatType(formatType: FormatType) {\r\n this._base.type = formatType;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setRoundFactor(roundFactor: number) {\r\n this._base.roundFactor = roundFactor;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setShowSignOption(signOption: ShowSignOption) {\r\n this._base.showSignOption = signOption;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setDecimalSeparator(separator: string) {\r\n this._base.decimalSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setThousandSeparator(separator: string) {\r\n this._base.thousandSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setUomSeparator(separator: string) {\r\n this._base.uomSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setStationSeparator(separator: string) {\r\n this._base.stationSeparator = separator;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableFormat extends Format {\r\n public abstract override addUnit(unit: Unit | InvertedUnit, label?: string): void;\r\n public abstract override setPrecision(precision: number): void;\r\n public abstract override setFormatType(formatType: FormatType): void;\r\n public abstract override setRoundFactor(roundFactor: number): void;\r\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\r\n public abstract override setDecimalSeparator(separator: string): void;\r\n public abstract override setThousandSeparator(separator: string): void;\r\n public abstract override setUomSeparator(separator: string): void;\r\n public abstract override setStationSeparator(separator: string): void;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Format.js","sourceRoot":"","sources":["../../../src/Metadata/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 Metadata\r\n */\r\n\r\nimport { SchemaItemFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport {\r\n BaseFormat, DecimalPrecision, FormatTraits, formatTraitsToArray, FormatType, FractionalPrecision,\r\n ScientificType, ShowSignOption,\r\n} from \"@itwin/core-quantity\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { Unit } from \"./Unit\";\r\n\r\n/**\r\n * @beta\r\n */\r\nexport class Format extends SchemaItem {\r\n public override readonly schemaItemType!: SchemaItemType.Format; // eslint-disable-line\r\n protected _base: BaseFormat;\r\n protected _units?: Array<[Unit | InvertedUnit, string | undefined]>;\r\n\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this.schemaItemType = SchemaItemType.Format;\r\n\r\n this._base = new BaseFormat(name);\r\n }\r\n\r\n public get roundFactor(): number { return this._base.roundFactor; }\r\n public get type(): FormatType { return this._base.type; }\r\n public get precision(): DecimalPrecision | FractionalPrecision { return this._base.precision; }\r\n public get minWidth(): number | undefined { return this._base.minWidth; }\r\n public get scientificType(): ScientificType | undefined { return this._base.scientificType; }\r\n public get showSignOption(): ShowSignOption { return this._base.showSignOption; }\r\n public get decimalSeparator(): string { return this._base.decimalSeparator; }\r\n public get thousandSeparator(): string { return this._base.thousandSeparator; }\r\n public get uomSeparator(): string { return this._base.uomSeparator; }\r\n public get stationSeparator(): string { return this._base.stationSeparator; }\r\n public get stationOffsetSize(): number | undefined { return this._base.stationOffsetSize; }\r\n public get formatTraits(): FormatTraits { return this._base.formatTraits; }\r\n public get spacer(): string | undefined { return this._base.spacer; }\r\n public get includeZero(): boolean | undefined { return this._base.includeZero; }\r\n public get units(): Array<[Unit | InvertedUnit, string | undefined]> | undefined { return this._units; }\r\n\r\n private parseFormatTraits(formatTraitsFromJson: string | string[]) {\r\n return this._base.parseFormatTraits(formatTraitsFromJson);\r\n }\r\n\r\n public hasFormatTrait(formatTrait: FormatTraits) {\r\n return this._base.hasFormatTraitSet(formatTrait);\r\n }\r\n\r\n /**\r\n * Adds a Unit, or InvertedUnit, with an optional label override.\r\n * @param unit The Unit, or InvertedUnit, to add to this Format.\r\n * @param label A label that overrides the label defined within the Unit when a value is formatted.\r\n */\r\n protected addUnit(unit: Unit | InvertedUnit, label?: string) {\r\n if (undefined === this._units)\r\n this._units = [];\r\n else { // Validate that a duplicate is not added.\r\n for (const existingUnit of this._units) {\r\n if (unit.fullName.toLowerCase() === existingUnit[0].fullName.toLowerCase())\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has duplicate units, '${unit.fullName}'.`); // TODO: Validation - this should be a validation error not a hard failure.\r\n }\r\n }\r\n\r\n this._units.push([unit, label]);\r\n }\r\n\r\n protected setPrecision(precision: number) { this._base.precision = precision; }\r\n\r\n private typecheck(formatProps: SchemaItemFormatProps) {\r\n this._base.loadFormatProperties(formatProps);\r\n\r\n if (undefined !== formatProps.composite) { // TODO: This is duplicated below when the units need to be processed...\r\n if (undefined !== formatProps.composite.includeZero)\r\n this._base.includeZero = formatProps.composite.includeZero;\r\n\r\n if (undefined !== formatProps.composite.spacer) {\r\n if (formatProps.composite.spacer.length > 1)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has a composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);\r\n this._base.spacer = formatProps.composite.spacer;\r\n }\r\n\r\n // Composite requires 1-4 units\r\n if (formatProps.composite.units.length <= 0 || formatProps.composite.units.length > 4)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);\r\n }\r\n }\r\n\r\n public override fromJSONSync(formatProps: SchemaItemFormatProps) {\r\n super.fromJSONSync(formatProps);\r\n this.typecheck(formatProps);\r\n if (undefined === formatProps.composite)\r\n return;\r\n\r\n // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = this.schema.lookupItemSync<Unit | InvertedUnit>(unit.name);\r\n if (undefined === newUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n this.addUnit(newUnit, unit.label);\r\n }\r\n }\r\n\r\n public override async fromJSON(formatProps: SchemaItemFormatProps) {\r\n await super.fromJSON(formatProps);\r\n this.typecheck(formatProps);\r\n if (undefined === formatProps.composite)\r\n return;\r\n\r\n // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = await this.schema.lookupItem<Unit | InvertedUnit>(unit.name);\r\n if (undefined === newUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n this.addUnit(newUnit, unit.label);\r\n }\r\n }\r\n\r\n /**\r\n * Save this Format's properties to an object for serializing to JSON.\r\n * @param standalone Serialization includes only this object (as opposed to the full schema).\r\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\r\n */\r\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): SchemaItemFormatProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.type = this.type;\r\n schemaJson.precision = this.precision;\r\n\r\n // this._spacer = \" \";\r\n // this._includeZero = true;\r\n\r\n // Serialize the minimal amount of information needed so anything that is the same as the default, do not serialize.\r\n if (0.0 !== this.roundFactor)\r\n schemaJson.roundFactor = this.roundFactor;\r\n if (ShowSignOption.OnlyNegative !== this.showSignOption)\r\n schemaJson.showSignOption = this.showSignOption;\r\n if (FormatTraits.Uninitialized !== this.formatTraits)\r\n schemaJson.formatTraits = formatTraitsToArray(this.formatTraits);\r\n if (\".\" !== this.decimalSeparator)\r\n schemaJson.decimalSeparator = this.decimalSeparator;\r\n if (\",\" !== this.thousandSeparator)\r\n schemaJson.thousandSeparator = this.thousandSeparator;\r\n if (\" \" !== this.uomSeparator)\r\n schemaJson.uomSeparator = this.uomSeparator;\r\n\r\n if (undefined !== this.minWidth)\r\n schemaJson.minWidth = this.minWidth;\r\n\r\n if (FormatType.Scientific === this.type && undefined !== this.scientificType)\r\n schemaJson.scientificType = this.scientificType;\r\n\r\n if (FormatType.Station === this.type) {\r\n if (undefined !== this.stationOffsetSize)\r\n schemaJson.stationOffsetSize = this.stationOffsetSize;\r\n if (\" \" !== this.stationSeparator)\r\n schemaJson.stationSeparator = this.stationSeparator;\r\n }\r\n\r\n if (undefined === this.units)\r\n return schemaJson;\r\n\r\n schemaJson.composite = {};\r\n\r\n if (\" \" !== this.spacer)\r\n schemaJson.composite.spacer = this.spacer;\r\n\r\n if (true !== this.includeZero)\r\n schemaJson.composite.includeZero = this.includeZero;\r\n\r\n schemaJson.composite.units = [];\r\n for (const unit of this.units) {\r\n schemaJson.composite.units.push({\r\n name: unit[0].fullName,\r\n label: unit[1],\r\n });\r\n }\r\n\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n itemElement.setAttribute(\"type\", this.type.toLowerCase());\r\n itemElement.setAttribute(\"precision\", this.precision.toString());\r\n itemElement.setAttribute(\"roundFactor\", this.roundFactor.toString());\r\n itemElement.setAttribute(\"showSignOption\", this.showSignOption);\r\n itemElement.setAttribute(\"decimalSeparator\", this.decimalSeparator);\r\n itemElement.setAttribute(\"thousandSeparator\", this.thousandSeparator);\r\n itemElement.setAttribute(\"uomSeparator\", this.uomSeparator);\r\n itemElement.setAttribute(\"stationSeparator\", this.stationSeparator);\r\n\r\n if (undefined !== this.minWidth)\r\n itemElement.setAttribute(\"minWidth\", this.minWidth.toString());\r\n if (undefined !== this.scientificType)\r\n itemElement.setAttribute(\"scientificType\", this.scientificType);\r\n if (undefined !== this.stationOffsetSize)\r\n itemElement.setAttribute(\"stationOffsetSize\", this.stationOffsetSize.toString());\r\n\r\n const formatTraits = formatTraitsToArray(this.formatTraits);\r\n if (formatTraits.length > 0)\r\n itemElement.setAttribute(\"formatTraits\", formatTraits.join(\"|\"));\r\n\r\n if (undefined !== this.units) {\r\n const compositeElement = schemaXml.createElement(\"Composite\");\r\n if (undefined !== this.spacer)\r\n compositeElement.setAttribute(\"spacer\", this.spacer);\r\n if (undefined !== this.includeZero)\r\n compositeElement.setAttribute(\"includeZero\", this.includeZero.toString());\r\n\r\n this.units.forEach(([unit, label]) => {\r\n const unitElement = schemaXml.createElement(\"Unit\");\r\n if (undefined !== label)\r\n unitElement.setAttribute(\"label\", label);\r\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, unit.schema, unit.name);\r\n unitElement.textContent = unitName;\r\n compositeElement.appendChild(unitElement);\r\n });\r\n\r\n itemElement.appendChild(compositeElement);\r\n }\r\n\r\n return itemElement;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setFormatType(formatType: FormatType) {\r\n this._base.type = formatType;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setRoundFactor(roundFactor: number) {\r\n this._base.roundFactor = roundFactor;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setShowSignOption(signOption: ShowSignOption) {\r\n this._base.showSignOption = signOption;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setDecimalSeparator(separator: string) {\r\n this._base.decimalSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setThousandSeparator(separator: string) {\r\n this._base.thousandSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setUomSeparator(separator: string) {\r\n this._base.uomSeparator = separator;\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setStationSeparator(separator: string) {\r\n this._base.stationSeparator = separator;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableFormat extends Format {\r\n public abstract override addUnit(unit: Unit | InvertedUnit, label?: string): void;\r\n public abstract override setPrecision(precision: number): void;\r\n public abstract override setFormatType(formatType: FormatType): void;\r\n public abstract override setRoundFactor(roundFactor: number): void;\r\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\r\n public abstract override setDecimalSeparator(separator: string): void;\r\n public abstract override setThousandSeparator(separator: string): void;\r\n public abstract override setUomSeparator(separator: string): void;\r\n public abstract override setStationSeparator(separator: string): void;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
|
|
@@ -32,10 +32,6 @@ export declare class KindOfQuantity extends SchemaItem {
|
|
|
32
32
|
* @param isDefault
|
|
33
33
|
*/
|
|
34
34
|
protected addPresentationFormat(format: Format | OverrideFormat, isDefault?: boolean): void;
|
|
35
|
-
/** Parses the format string into the parts that make up an Override Format
|
|
36
|
-
* @param formatString
|
|
37
|
-
*/
|
|
38
|
-
private parseFormatString;
|
|
39
35
|
/** Creates an OverrideFormat in the context of this KindOfQuantity.
|
|
40
36
|
* @param parent The Format to override.
|
|
41
37
|
* @param precision The precision override
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KindOfQuantity.d.ts","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"KindOfQuantity.d.ts","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAyB,cAAc,EAAG,cAAc,CAAC,cAAc,CAAC;IACxE,SAAS,CAAC,cAAc,EAAE,MAAM,CAAO;IACvC,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAwC;IACtG,SAAS,CAAC,gBAAgB,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAAC;IAErE,4DAA4D;IAC5D,IAAW,yBAAyB,IAAI,MAAM,GAAG,cAAc,GAAG,SAAS,CAAwC;IAEnH,sCAAsC;IACtC,IAAW,mBAAmB,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAsC;IAEtG,IAAW,eAAe,IAAI,cAAc,GAAG,sBAAsB,GAAG,SAAS,CAAkC;IACnH,SAAS,KAAK,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,sBAAsB,GAAG,SAAS,EAAqC;IAE7H,IAAW,aAAa,WAAkC;gBAE9C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAKxC;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,SAAS,GAAE,OAAe;IAK3F;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;YAY3I,wBAAwB;IAkCtC,OAAO,CAAC,4BAA4B;IAkCpC;;;;OAIG;IACa,MAAM,CAAC,UAAU,GAAE,OAAe,EAAE,oBAAoB,GAAE,OAAe,GAAG,mBAAmB;IAS/G,gBAAgB;IACM,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBlD,YAAY,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI;IAiBtD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvF;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CAGxD;AACD;;;GAGG;AACH,8BAAsB,qBAAsB,SAAQ,cAAc;aACvC,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;aAChF,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;aAC/I,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE"}
|
|
@@ -9,7 +9,6 @@ import { DelayedPromiseWithProps } from "../DelayedPromise";
|
|
|
9
9
|
import { XmlSerializationUtils } from "../Deserialization/XmlSerializationUtils";
|
|
10
10
|
import { SchemaItemType } from "../ECObjects";
|
|
11
11
|
import { ECObjectsError, ECObjectsStatus } from "../Exception";
|
|
12
|
-
import { formatStringRgx } from "@itwin/core-quantity";
|
|
13
12
|
import { OverrideFormat } from "./OverrideFormat";
|
|
14
13
|
import { SchemaItem } from "./SchemaItem";
|
|
15
14
|
/** A Typescript class representation of a KindOfQuantity.
|
|
@@ -38,57 +37,6 @@ export class KindOfQuantity extends SchemaItem {
|
|
|
38
37
|
// TODO: Add some sort of validation?
|
|
39
38
|
(isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);
|
|
40
39
|
}
|
|
41
|
-
/** Parses the format string into the parts that make up an Override Format
|
|
42
|
-
* @param formatString
|
|
43
|
-
*/
|
|
44
|
-
parseFormatString(formatString) {
|
|
45
|
-
const match = formatString.split(formatStringRgx); // split string based on regex groups
|
|
46
|
-
if (undefined === match[1])
|
|
47
|
-
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity '${this.fullName}' is missing a format.`);
|
|
48
|
-
const returnValue = { name: match[1] };
|
|
49
|
-
if (undefined !== match[2] && undefined !== match[3]) {
|
|
50
|
-
const overrideString = match[2];
|
|
51
|
-
const tokens = [];
|
|
52
|
-
let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.
|
|
53
|
-
let currPos;
|
|
54
|
-
// TODO need to include `,` as a valid search argument.
|
|
55
|
-
while (-1 !== (currPos = overrideString.indexOf(")", prevPos))) { // eslint-disable-line
|
|
56
|
-
tokens.push(overrideString.substring(prevPos, currPos));
|
|
57
|
-
prevPos = currPos + 1;
|
|
58
|
-
}
|
|
59
|
-
if (overrideString.length > 0 && undefined === tokens.find((token) => {
|
|
60
|
-
return "" !== token; // there is at least one token that is not empty.
|
|
61
|
-
})) {
|
|
62
|
-
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);
|
|
63
|
-
}
|
|
64
|
-
// The first override parameter overrides the default precision of the format
|
|
65
|
-
const precisionIndx = 0;
|
|
66
|
-
if (tokens.length >= precisionIndx + 1) {
|
|
67
|
-
if (tokens[precisionIndx].length > 0) {
|
|
68
|
-
const precision = Number.parseInt(tokens[precisionIndx], 10);
|
|
69
|
-
if (Number.isNaN(precision))
|
|
70
|
-
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity '${this.fullName}' has a precision override '${tokens[precisionIndx]}' that is not number.`);
|
|
71
|
-
returnValue.precision = precision;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
let i = 4;
|
|
76
|
-
while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value
|
|
77
|
-
if (undefined === match[i])
|
|
78
|
-
break;
|
|
79
|
-
// Unit override required
|
|
80
|
-
if (undefined === match[i + 1])
|
|
81
|
-
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);
|
|
82
|
-
if (undefined === returnValue.unitAndLabels)
|
|
83
|
-
returnValue.unitAndLabels = [];
|
|
84
|
-
if (undefined !== match[i + 2]) // matches '|'
|
|
85
|
-
returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? ""]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)
|
|
86
|
-
else
|
|
87
|
-
returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name
|
|
88
|
-
i += 4;
|
|
89
|
-
}
|
|
90
|
-
return returnValue;
|
|
91
|
-
}
|
|
92
40
|
/** Creates an OverrideFormat in the context of this KindOfQuantity.
|
|
93
41
|
* @param parent The Format to override.
|
|
94
42
|
* @param precision The precision override
|
|
@@ -105,7 +53,7 @@ export class KindOfQuantity extends SchemaItem {
|
|
|
105
53
|
async processPresentationUnits(presentationUnitsJson) {
|
|
106
54
|
const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(";");
|
|
107
55
|
for (const formatString of presUnitsArr) {
|
|
108
|
-
const presFormatOverride =
|
|
56
|
+
const presFormatOverride = OverrideFormat.parseFormatString(formatString);
|
|
109
57
|
const format = await this.schema.lookupItem(presFormatOverride.name);
|
|
110
58
|
if (undefined === format || format.schemaItemType !== SchemaItemType.Format)
|
|
111
59
|
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);
|
|
@@ -132,7 +80,7 @@ export class KindOfQuantity extends SchemaItem {
|
|
|
132
80
|
processPresentationUnitsSync(presentationUnitsJson) {
|
|
133
81
|
const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(";");
|
|
134
82
|
for (const formatString of presUnitsArr) {
|
|
135
|
-
const presFormatOverride =
|
|
83
|
+
const presFormatOverride = OverrideFormat.parseFormatString(formatString);
|
|
136
84
|
const format = this.schema.lookupItemSync(presFormatOverride.name);
|
|
137
85
|
if (undefined === format || format.schemaItemType !== SchemaItemType.Format)
|
|
138
86
|
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KindOfQuantity.js","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.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 Metadata\r\n */\r\n\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport { KindOfQuantityProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { formatStringRgx } from \"@itwin/core-quantity\";\r\nimport { Format } from \"./Format\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { OverrideFormat } from \"./OverrideFormat\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { Unit } from \"./Unit\";\r\n\r\ninterface OverrideFormatProps {\r\n name: string;\r\n precision?: number;\r\n unitAndLabels?: Array<[string, string | undefined]>; // Tuple of [unit name | unit label]\r\n}\r\n\r\n/** A Typescript class representation of a KindOfQuantity.\r\n * @beta\r\n */\r\nexport class KindOfQuantity extends SchemaItem {\r\n public override readonly schemaItemType!: SchemaItemType.KindOfQuantity; // eslint-disable-line\r\n protected _relativeError: number = 1.0;\r\n protected _presentationFormats: Array<Format | OverrideFormat> = new Array<Format | OverrideFormat>();\r\n protected _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit;\r\n\r\n /** The first presentation format in the list of Formats. */\r\n public get defaultPresentationFormat(): Format | OverrideFormat | undefined { return this.presentationFormats[0]; }\r\n\r\n /** A list of presentation formats. */\r\n public get presentationFormats(): Array<Format | OverrideFormat> { return this._presentationFormats; }\r\n\r\n public get persistenceUnit(): LazyLoadedUnit | LazyLoadedInvertedUnit | undefined { return this._persistenceUnit; }\r\n protected set persistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined) { this._persistenceUnit = value; }\r\n\r\n public get relativeError() { return this._relativeError; }\r\n\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this.schemaItemType = SchemaItemType.KindOfQuantity; // Needed to allow both run-time and compile-time check.\r\n }\r\n\r\n /**\r\n *\r\n * @param format The Format to add to this KindOfQuantity\r\n * @param isDefault\r\n */\r\n protected addPresentationFormat(format: Format | OverrideFormat, isDefault: boolean = false) {\r\n // TODO: Add some sort of validation?\r\n (isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);\r\n }\r\n\r\n /** Parses the format string into the parts that make up an Override Format\r\n * @param formatString\r\n */\r\n private parseFormatString(formatString: string): OverrideFormatProps {\r\n const match = formatString.split(formatStringRgx); // split string based on regex groups\r\n if (undefined === match[1])\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity '${this.fullName}' is missing a format.`);\r\n\r\n const returnValue: OverrideFormatProps = { name: match[1] };\r\n\r\n if (undefined !== match[2] && undefined !== match[3]) {\r\n const overrideString = match[2];\r\n const tokens: string[] = [];\r\n let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.\r\n let currPos;\r\n\r\n // TODO need to include `,` as a valid search argument.\r\n while (-1 !== (currPos = overrideString.indexOf(\")\", prevPos))) { // eslint-disable-line\r\n tokens.push(overrideString.substring(prevPos, currPos));\r\n prevPos = currPos + 1;\r\n }\r\n\r\n if (overrideString.length > 0 && undefined === tokens.find((token) => {\r\n return \"\" !== token; // there is at least one token that is not empty.\r\n })) {\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n }\r\n\r\n // The first override parameter overrides the default precision of the format\r\n const precisionIndx: number = 0;\r\n\r\n if (tokens.length >= precisionIndx + 1) {\r\n if (tokens[precisionIndx].length > 0) {\r\n const precision = Number.parseInt(tokens[precisionIndx], 10);\r\n if (Number.isNaN(precision))\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity '${this.fullName}' has a precision override '${tokens[precisionIndx]}' that is not number.`);\r\n returnValue.precision = precision;\r\n }\r\n }\r\n }\r\n\r\n let i = 4;\r\n while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value\r\n if (undefined === match[i])\r\n break;\r\n // Unit override required\r\n if (undefined === match[i + 1])\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n if (undefined === returnValue.unitAndLabels)\r\n returnValue.unitAndLabels = [];\r\n\r\n if (undefined !== match[i + 2]) // matches '|'\r\n returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? \"\"]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)\r\n else\r\n returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name\r\n\r\n i += 4;\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n /** Creates an OverrideFormat in the context of this KindOfQuantity.\r\n * @param parent The Format to override.\r\n * @param precision The precision override\r\n * @param unitLabelOverrides The list of unit and label overrides.\r\n */\r\n protected createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat {\r\n if (unitLabelOverrides && parent.units && parent.units.length !== unitLabelOverrides.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Cannot add presentation format to KindOfQuantity '${this.name}' because the number of unit overrides is inconsistent with the number in the Format '${parent.name}'.`);\r\n\r\n if (parent.units && 0 === parent.units.length && unitLabelOverrides && 0 < unitLabelOverrides.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Cannot add a presentation format to KindOfQuantity '${this.name}' without any units and no unit overrides.`);\r\n\r\n // TODO: Check compatibility of Unit overrides with the persistence unit\r\n\r\n return new OverrideFormat(parent, precision, unitLabelOverrides);\r\n }\r\n\r\n private async processPresentationUnits(presentationUnitsJson: string | string[]): Promise<void> {\r\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\r\n for (const formatString of presUnitsArr) {\r\n const presFormatOverride: OverrideFormatProps = this.parseFormatString(formatString);\r\n\r\n const format = await this.schema.lookupItem<Format>(presFormatOverride.name);\r\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\r\n\r\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\r\n this.addPresentationFormat(format);\r\n continue;\r\n }\r\n\r\n let unitAndLabels: Array<[Unit | InvertedUnit, string | undefined]> | undefined;\r\n if (undefined !== presFormatOverride.unitAndLabels) {\r\n if (4 < presFormatOverride.unitAndLabels.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n unitAndLabels = [];\r\n for (const unitOverride of presFormatOverride.unitAndLabels) {\r\n const unit = await this.schema.lookupItem<Unit | InvertedUnit>(unitOverride[0]);\r\n if (undefined === unit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\r\n\r\n unitAndLabels.push([unit, unitOverride[1]]);\r\n }\r\n }\r\n\r\n const overrideFormat: OverrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\r\n this.addPresentationFormat(overrideFormat);\r\n }\r\n }\r\n\r\n private processPresentationUnitsSync(presentationUnitsJson: string | string[]): void {\r\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\r\n for (const formatString of presUnitsArr) {\r\n const presFormatOverride: OverrideFormatProps = this.parseFormatString(formatString);\r\n\r\n const format = this.schema.lookupItemSync<Format>(presFormatOverride.name);\r\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\r\n\r\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\r\n this.addPresentationFormat(format);\r\n continue;\r\n }\r\n\r\n let unitAndLabels: Array<[Unit | InvertedUnit, string | undefined]> | undefined;\r\n if (undefined !== presFormatOverride.unitAndLabels) {\r\n if (4 < presFormatOverride.unitAndLabels.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n unitAndLabels = [];\r\n for (const unitOverride of presFormatOverride.unitAndLabels) {\r\n const unit = this.schema.lookupItemSync<Unit | InvertedUnit>(unitOverride[0]);\r\n if (undefined === unit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\r\n\r\n unitAndLabels.push([unit, unitOverride[1]]);\r\n }\r\n }\r\n\r\n const overrideFormat: OverrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\r\n this.addPresentationFormat(overrideFormat);\r\n }\r\n }\r\n\r\n /**\r\n * Save this KindOfQuantity's properties to an object for serializing to JSON.\r\n * @param standalone Serialization includes only this object (as opposed to the full schema).\r\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\r\n */\r\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): KindOfQuantityProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.relativeError = this.relativeError;\r\n schemaJson.persistenceUnit = this.persistenceUnit!.fullName;\r\n if (undefined !== this.presentationFormats && 0 < this.presentationFormats.length)\r\n schemaJson.presentationUnits = this.presentationFormats.map((format: Format | OverrideFormat) => format.fullName);\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n\r\n const persistenceUnit = await this.persistenceUnit;\r\n if (undefined !== persistenceUnit) {\r\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, persistenceUnit.schema, persistenceUnit.name);\r\n itemElement.setAttribute(\"persistenceUnit\", unitName);\r\n }\r\n\r\n if (undefined !== this.presentationFormats) {\r\n const presUnitStrings = this.presentationFormats.map((format: Format | OverrideFormat) => {\r\n if (!OverrideFormat.isOverrideFormat(format))\r\n return XmlSerializationUtils.createXmlTypedName(this.schema, format.schema, format.name);\r\n return format.fullNameXml(this.schema);\r\n });\r\n itemElement.setAttribute(\"presentationUnits\", presUnitStrings.join(\";\"));\r\n }\r\n itemElement.setAttribute(\"relativeError\", this.relativeError.toString());\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(kindOfQuantityProps: KindOfQuantityProps): void {\r\n super.fromJSONSync(kindOfQuantityProps);\r\n this._relativeError = kindOfQuantityProps.relativeError;\r\n\r\n const persistenceUnit = this.schema.lookupItemSync<Unit>(kindOfQuantityProps.persistenceUnit);\r\n if (undefined === persistenceUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\r\n\r\n if (persistenceUnit.schemaItemType !== SchemaItemType.Unit && persistenceUnit.schemaItemType !== SchemaItemType.InvertedUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\r\n\r\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\r\n\r\n if (undefined !== kindOfQuantityProps.presentationUnits)\r\n this.processPresentationUnitsSync(kindOfQuantityProps.presentationUnits);\r\n }\r\n\r\n public override async fromJSON(kindOfQuantityProps: KindOfQuantityProps): Promise<void> {\r\n await super.fromJSON(kindOfQuantityProps);\r\n this._relativeError = kindOfQuantityProps.relativeError;\r\n\r\n const persistenceUnit = await this.schema.lookupItem<Unit>(kindOfQuantityProps.persistenceUnit);\r\n if (undefined === persistenceUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\r\n\r\n if (persistenceUnit.schemaItemType !== SchemaItemType.Unit && persistenceUnit.schemaItemType !== SchemaItemType.InvertedUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\r\n\r\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\r\n\r\n if (undefined !== kindOfQuantityProps.presentationUnits)\r\n await this.processPresentationUnits(kindOfQuantityProps.presentationUnits);\r\n }\r\n\r\n /**\r\n * @alpha\r\n * Used for schema editing.\r\n */\r\n protected setRelativeError(relativeError: number): void {\r\n this._relativeError = relativeError;\r\n }\r\n}\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableKindOfQuantity extends KindOfQuantity {\r\n public abstract override addPresentationFormat(format: Format | OverrideFormat, isDefault: boolean): void;\r\n public abstract override createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"KindOfQuantity.js","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.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 Metadata\r\n */\r\n\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport { KindOfQuantityProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { Format } from \"./Format\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { OverrideFormat, OverrideFormatProps } from \"./OverrideFormat\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { Unit } from \"./Unit\";\r\n\r\n/** A Typescript class representation of a KindOfQuantity.\r\n * @beta\r\n */\r\nexport class KindOfQuantity extends SchemaItem {\r\n public override readonly schemaItemType!: SchemaItemType.KindOfQuantity; // eslint-disable-line\r\n protected _relativeError: number = 1.0;\r\n protected _presentationFormats: Array<Format | OverrideFormat> = new Array<Format | OverrideFormat>();\r\n protected _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit;\r\n\r\n /** The first presentation format in the list of Formats. */\r\n public get defaultPresentationFormat(): Format | OverrideFormat | undefined { return this.presentationFormats[0]; }\r\n\r\n /** A list of presentation formats. */\r\n public get presentationFormats(): Array<Format | OverrideFormat> { return this._presentationFormats; }\r\n\r\n public get persistenceUnit(): LazyLoadedUnit | LazyLoadedInvertedUnit | undefined { return this._persistenceUnit; }\r\n protected set persistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined) { this._persistenceUnit = value; }\r\n\r\n public get relativeError() { return this._relativeError; }\r\n\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this.schemaItemType = SchemaItemType.KindOfQuantity; // Needed to allow both run-time and compile-time check.\r\n }\r\n\r\n /**\r\n *\r\n * @param format The Format to add to this KindOfQuantity\r\n * @param isDefault\r\n */\r\n protected addPresentationFormat(format: Format | OverrideFormat, isDefault: boolean = false) {\r\n // TODO: Add some sort of validation?\r\n (isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);\r\n }\r\n\r\n /** Creates an OverrideFormat in the context of this KindOfQuantity.\r\n * @param parent The Format to override.\r\n * @param precision The precision override\r\n * @param unitLabelOverrides The list of unit and label overrides.\r\n */\r\n protected createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat {\r\n if (unitLabelOverrides && parent.units && parent.units.length !== unitLabelOverrides.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Cannot add presentation format to KindOfQuantity '${this.name}' because the number of unit overrides is inconsistent with the number in the Format '${parent.name}'.`);\r\n\r\n if (parent.units && 0 === parent.units.length && unitLabelOverrides && 0 < unitLabelOverrides.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Cannot add a presentation format to KindOfQuantity '${this.name}' without any units and no unit overrides.`);\r\n\r\n // TODO: Check compatibility of Unit overrides with the persistence unit\r\n\r\n return new OverrideFormat(parent, precision, unitLabelOverrides);\r\n }\r\n\r\n private async processPresentationUnits(presentationUnitsJson: string | string[]): Promise<void> {\r\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\r\n for (const formatString of presUnitsArr) {\r\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\r\n\r\n const format = await this.schema.lookupItem<Format>(presFormatOverride.name);\r\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\r\n\r\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\r\n this.addPresentationFormat(format);\r\n continue;\r\n }\r\n\r\n let unitAndLabels: Array<[Unit | InvertedUnit, string | undefined]> | undefined;\r\n if (undefined !== presFormatOverride.unitAndLabels) {\r\n if (4 < presFormatOverride.unitAndLabels.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n unitAndLabels = [];\r\n for (const unitOverride of presFormatOverride.unitAndLabels) {\r\n const unit = await this.schema.lookupItem<Unit | InvertedUnit>(unitOverride[0]);\r\n if (undefined === unit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\r\n\r\n unitAndLabels.push([unit, unitOverride[1]]);\r\n }\r\n }\r\n\r\n const overrideFormat: OverrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\r\n this.addPresentationFormat(overrideFormat);\r\n }\r\n }\r\n\r\n private processPresentationUnitsSync(presentationUnitsJson: string | string[]): void {\r\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\r\n for (const formatString of presUnitsArr) {\r\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\r\n\r\n const format = this.schema.lookupItemSync<Format>(presFormatOverride.name);\r\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\r\n\r\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\r\n this.addPresentationFormat(format);\r\n continue;\r\n }\r\n\r\n let unitAndLabels: Array<[Unit | InvertedUnit, string | undefined]> | undefined;\r\n if (undefined !== presFormatOverride.unitAndLabels) {\r\n if (4 < presFormatOverride.unitAndLabels.length)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n unitAndLabels = [];\r\n for (const unitOverride of presFormatOverride.unitAndLabels) {\r\n const unit = this.schema.lookupItemSync<Unit | InvertedUnit>(unitOverride[0]);\r\n if (undefined === unit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\r\n\r\n unitAndLabels.push([unit, unitOverride[1]]);\r\n }\r\n }\r\n\r\n const overrideFormat: OverrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\r\n this.addPresentationFormat(overrideFormat);\r\n }\r\n }\r\n\r\n /**\r\n * Save this KindOfQuantity's properties to an object for serializing to JSON.\r\n * @param standalone Serialization includes only this object (as opposed to the full schema).\r\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\r\n */\r\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): KindOfQuantityProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.relativeError = this.relativeError;\r\n schemaJson.persistenceUnit = this.persistenceUnit!.fullName;\r\n if (undefined !== this.presentationFormats && 0 < this.presentationFormats.length)\r\n schemaJson.presentationUnits = this.presentationFormats.map((format: Format | OverrideFormat) => format.fullName);\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n\r\n const persistenceUnit = await this.persistenceUnit;\r\n if (undefined !== persistenceUnit) {\r\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, persistenceUnit.schema, persistenceUnit.name);\r\n itemElement.setAttribute(\"persistenceUnit\", unitName);\r\n }\r\n\r\n if (undefined !== this.presentationFormats) {\r\n const presUnitStrings = this.presentationFormats.map((format: Format | OverrideFormat) => {\r\n if (!OverrideFormat.isOverrideFormat(format))\r\n return XmlSerializationUtils.createXmlTypedName(this.schema, format.schema, format.name);\r\n return format.fullNameXml(this.schema);\r\n });\r\n itemElement.setAttribute(\"presentationUnits\", presUnitStrings.join(\";\"));\r\n }\r\n itemElement.setAttribute(\"relativeError\", this.relativeError.toString());\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(kindOfQuantityProps: KindOfQuantityProps): void {\r\n super.fromJSONSync(kindOfQuantityProps);\r\n this._relativeError = kindOfQuantityProps.relativeError;\r\n\r\n const persistenceUnit = this.schema.lookupItemSync<Unit>(kindOfQuantityProps.persistenceUnit);\r\n if (undefined === persistenceUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\r\n\r\n if (persistenceUnit.schemaItemType !== SchemaItemType.Unit && persistenceUnit.schemaItemType !== SchemaItemType.InvertedUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\r\n\r\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\r\n\r\n if (undefined !== kindOfQuantityProps.presentationUnits)\r\n this.processPresentationUnitsSync(kindOfQuantityProps.presentationUnits);\r\n }\r\n\r\n public override async fromJSON(kindOfQuantityProps: KindOfQuantityProps): Promise<void> {\r\n await super.fromJSON(kindOfQuantityProps);\r\n this._relativeError = kindOfQuantityProps.relativeError;\r\n\r\n const persistenceUnit = await this.schema.lookupItem<Unit>(kindOfQuantityProps.persistenceUnit);\r\n if (undefined === persistenceUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\r\n\r\n if (persistenceUnit.schemaItemType !== SchemaItemType.Unit && persistenceUnit.schemaItemType !== SchemaItemType.InvertedUnit)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\r\n\r\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\r\n\r\n if (undefined !== kindOfQuantityProps.presentationUnits)\r\n await this.processPresentationUnits(kindOfQuantityProps.presentationUnits);\r\n }\r\n\r\n /**\r\n * @alpha\r\n * Used for schema editing.\r\n */\r\n protected setRelativeError(relativeError: number): void {\r\n this._relativeError = relativeError;\r\n }\r\n}\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableKindOfQuantity extends KindOfQuantity {\r\n public abstract override addPresentationFormat(format: Format | OverrideFormat, isDefault: boolean): void;\r\n public abstract override createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[Unit | InvertedUnit, string | undefined]>): OverrideFormat;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
|
|
@@ -7,6 +7,14 @@ import { InvertedUnit } from "./InvertedUnit";
|
|
|
7
7
|
import { Schema } from "./Schema";
|
|
8
8
|
import { SchemaItemOverrideFormatProps } from "../Deserialization/JsonProps";
|
|
9
9
|
import { Unit } from "./Unit";
|
|
10
|
+
/**
|
|
11
|
+
* @beta
|
|
12
|
+
*/
|
|
13
|
+
export interface OverrideFormatProps {
|
|
14
|
+
name: string;
|
|
15
|
+
precision?: number;
|
|
16
|
+
unitAndLabels?: Array<[string, string | undefined]>;
|
|
17
|
+
}
|
|
10
18
|
/**
|
|
11
19
|
* Overrides of a Format, from a Schema, and is SchemaItem that is used specifically on KindOfQuantity.
|
|
12
20
|
* @beta
|
|
@@ -49,6 +57,10 @@ export declare class OverrideFormat {
|
|
|
49
57
|
* @param unitAndLabels The overridden unit and labels collection.
|
|
50
58
|
*/
|
|
51
59
|
static createOverrideFormatFullName(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>): string;
|
|
60
|
+
/** Parses the format string into the parts that make up an Override Format
|
|
61
|
+
* @param formatString
|
|
62
|
+
*/
|
|
63
|
+
static parseFormatString(formatString: string): OverrideFormatProps;
|
|
52
64
|
/**
|
|
53
65
|
* @internal
|
|
54
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverrideFormat.d.ts","sourceRoot":"","sources":["../../../src/Metadata/OverrideFormat.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"OverrideFormat.d.ts","sourceRoot":"","sources":["../../../src/Metadata/OverrideFormat.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrK,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACrD;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAC,CAAyC;IAC5D,OAAO,CAAC,MAAM,CAAC,CAAmD;IAElE,uDAAuD;IACvD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAQhJ,IAAW,SAAS,IAAI,gBAAgB,GAAG,mBAAmB,CAAsF;IACpJ,IAAW,KAAK,4DAA4E;IAG5F,IAAW,QAAQ,IAAI,MAAM,CAAsB;IACnD,IAAW,WAAW,IAAI,MAAM,CAAoC;IACpE,IAAW,IAAI,IAAI,UAAU,CAA6B;IAC1D,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAiC;IAC1E,IAAW,cAAc,IAAI,cAAc,GAAG,SAAS,CAAuC;IAC9F,IAAW,cAAc,IAAI,cAAc,CAAuC;IAClF,IAAW,gBAAgB,IAAI,MAAM,CAAyC;IAC9E,IAAW,iBAAiB,IAAI,MAAM,CAA0C;IAChF,IAAW,YAAY,IAAI,MAAM,CAAqC;IACtE,IAAW,gBAAgB,IAAI,MAAM,CAAyC;IAC9E,IAAW,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAA0C;IAC5F,IAAW,YAAY,IAAI,YAAY,CAAqC;IAC5E,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAA+B;IACtE,IAAW,WAAW,IAAI,OAAO,GAAG,SAAS,CAAoC;IAE1E,cAAc,CAAC,WAAW,EAAE,YAAY;IAI/C;;OAEG;IACI,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkB7C;;;;OAIG;WACW,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM;IAgBxL;;OAEG;WACW,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB;IA4D1E;;OAEG;WACW,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,cAAc;IAMrE;;;;;OAKG;IACI,cAAc,IAAI,6BAA6B;CA+BvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,CAE3E"}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { XmlSerializationUtils } from "../Deserialization/XmlSerializationUtils";
|
|
9
9
|
import { SchemaItemType } from "../ECObjects";
|
|
10
|
+
import { formatStringRgx } from "@itwin/core-quantity";
|
|
11
|
+
import { ECObjectsError, ECObjectsStatus } from "../Exception";
|
|
10
12
|
/**
|
|
11
13
|
* Overrides of a Format, from a Schema, and is SchemaItem that is used specifically on KindOfQuantity.
|
|
12
14
|
* @beta
|
|
@@ -75,6 +77,57 @@ export class OverrideFormat {
|
|
|
75
77
|
fullName += `[${unit.fullName}|${unitLabel}]`;
|
|
76
78
|
return fullName;
|
|
77
79
|
}
|
|
80
|
+
/** Parses the format string into the parts that make up an Override Format
|
|
81
|
+
* @param formatString
|
|
82
|
+
*/
|
|
83
|
+
static parseFormatString(formatString) {
|
|
84
|
+
const match = formatString.split(formatStringRgx); // split string based on regex groups
|
|
85
|
+
if (undefined === match[1])
|
|
86
|
+
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity is missing a format.`);
|
|
87
|
+
const returnValue = { name: match[1] };
|
|
88
|
+
if (undefined !== match[2] && undefined !== match[3]) {
|
|
89
|
+
const overrideString = match[2];
|
|
90
|
+
const tokens = [];
|
|
91
|
+
let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.
|
|
92
|
+
let currPos;
|
|
93
|
+
// TODO need to include `,` as a valid search argument.
|
|
94
|
+
while (-1 !== (currPos = overrideString.indexOf(")", prevPos))) { // eslint-disable-line
|
|
95
|
+
tokens.push(overrideString.substring(prevPos, currPos));
|
|
96
|
+
prevPos = currPos + 1;
|
|
97
|
+
}
|
|
98
|
+
if (overrideString.length > 0 && undefined === tokens.find((token) => {
|
|
99
|
+
return "" !== token; // there is at least one token that is not empty.
|
|
100
|
+
})) {
|
|
101
|
+
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);
|
|
102
|
+
}
|
|
103
|
+
// The first override parameter overrides the default precision of the format
|
|
104
|
+
const precisionIndx = 0;
|
|
105
|
+
if (tokens.length >= precisionIndx + 1) {
|
|
106
|
+
if (tokens[precisionIndx].length > 0) {
|
|
107
|
+
const precision = Number.parseInt(tokens[precisionIndx], 10);
|
|
108
|
+
if (Number.isNaN(precision))
|
|
109
|
+
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity has a precision override '${tokens[precisionIndx]}' that is not number.`);
|
|
110
|
+
returnValue.precision = precision;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
let i = 4;
|
|
115
|
+
while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value
|
|
116
|
+
if (undefined === match[i])
|
|
117
|
+
break;
|
|
118
|
+
// Unit override required
|
|
119
|
+
if (undefined === match[i + 1])
|
|
120
|
+
throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);
|
|
121
|
+
if (undefined === returnValue.unitAndLabels)
|
|
122
|
+
returnValue.unitAndLabels = [];
|
|
123
|
+
if (undefined !== match[i + 2]) // matches '|'
|
|
124
|
+
returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? ""]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)
|
|
125
|
+
else
|
|
126
|
+
returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name
|
|
127
|
+
i += 4;
|
|
128
|
+
}
|
|
129
|
+
return returnValue;
|
|
130
|
+
}
|
|
78
131
|
/**
|
|
79
132
|
* @internal
|
|
80
133
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverrideFormat.js","sourceRoot":"","sources":["../../../src/Metadata/OverrideFormat.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 Metadata\r\n */\r\n\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { DecimalPrecision, FormatProps, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\r\nimport { Format } from \"./Format\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItemOverrideFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { Unit } from \"./Unit\";\r\nimport { Mutable } from \"@itwin/core-bentley\";\r\n\r\n/**\r\n * Overrides of a Format, from a Schema, and is SchemaItem that is used specifically on KindOfQuantity.\r\n * @beta\r\n */\r\nexport class OverrideFormat {\r\n private _precision?: DecimalPrecision | FractionalPrecision;\r\n private _units?: Array<[Unit | InvertedUnit, string | undefined]>;\r\n\r\n /** The Format that this OverrideFormat is extending */\r\n public readonly parent: Format;\r\n\r\n /** The name of this OverrideFormat.\r\n *\r\n * This should be set to the [FormatString]($docs/bis/ec/kindofquantity/#format-string) which represents the format override.\r\n */\r\n public readonly name: string;\r\n\r\n constructor(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>) {\r\n this.parent = parent;\r\n this.name = OverrideFormat.createOverrideFormatFullName(parent, precision, unitAndLabels);\r\n this._precision = precision;\r\n this._units = unitAndLabels;\r\n }\r\n\r\n // Properties that can be overriden\r\n public get precision(): DecimalPrecision | FractionalPrecision { return (undefined === this._precision) ? this.parent.precision : this._precision; }\r\n public get units() { return (undefined === this._units) ? this.parent.units : this._units; }\r\n\r\n // Properties that cannot be overriden\r\n public get fullName(): string { return this.name; }\r\n public get roundFactor(): number { return this.parent.roundFactor; }\r\n public get type(): FormatType { return this.parent.type; }\r\n public get minWidth(): number | undefined { return this.parent.minWidth; }\r\n public get scientificType(): ScientificType | undefined { return this.parent.scientificType; }\r\n public get showSignOption(): ShowSignOption { return this.parent.showSignOption; }\r\n public get decimalSeparator(): string { return this.parent.decimalSeparator; }\r\n public get thousandSeparator(): string { return this.parent.thousandSeparator; }\r\n public get uomSeparator(): string { return this.parent.uomSeparator; }\r\n public get stationSeparator(): string { return this.parent.stationSeparator; }\r\n public get stationOffsetSize(): number | undefined { return this.parent.stationOffsetSize; }\r\n public get formatTraits(): FormatTraits { return this.parent.formatTraits; }\r\n public get spacer(): string | undefined { return this.parent.spacer; }\r\n public get includeZero(): boolean | undefined { return this.parent.includeZero; }\r\n\r\n public hasFormatTrait(formatTrait: FormatTraits) {\r\n return (this.parent.formatTraits & formatTrait) === formatTrait;\r\n }\r\n\r\n /** Returns the format string of this override in the Xml full name format.\r\n * @alpha\r\n */\r\n public fullNameXml(koqSchema: Schema): string {\r\n let fullName = XmlSerializationUtils.createXmlTypedName(koqSchema, this.parent.schema, this.parent.name);\r\n\r\n if (undefined !== this.precision)\r\n fullName += `(${this.precision.toString()})`;\r\n\r\n if (undefined === this._units)\r\n return fullName;\r\n for (const [unit, unitLabel] of this._units) {\r\n fullName += \"[\";\r\n fullName += XmlSerializationUtils.createXmlTypedName(koqSchema, unit.schema, unit.name);\r\n if (unitLabel !== undefined)\r\n fullName += `|${unitLabel}`;\r\n fullName += `]`;\r\n }\r\n return fullName;\r\n }\r\n\r\n /**\r\n * Creates a valid OverrideFormat fullName from the parent Format and overridden units.\r\n * @param parent The parent Format.\r\n * @param unitAndLabels The overridden unit and labels collection.\r\n */\r\n public static createOverrideFormatFullName(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>): string {\r\n let fullName = parent.fullName;\r\n\r\n if (precision)\r\n fullName += `(${precision.toString()})`;\r\n\r\n if (undefined === unitAndLabels)\r\n return fullName;\r\n for (const [unit, unitLabel] of unitAndLabels)\r\n if (undefined === unitLabel)\r\n fullName += `[${unit.fullName}]`;\r\n else\r\n fullName += `[${unit.fullName}|${unitLabel}]`;\r\n return fullName;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static isOverrideFormat(object: any): object is OverrideFormat {\r\n const overrideFormat = object as OverrideFormat;\r\n\r\n return overrideFormat !== undefined && overrideFormat.name !== undefined && overrideFormat.parent !== undefined && overrideFormat.parent.schemaItemType === SchemaItemType.Format;\r\n }\r\n\r\n /**\r\n * Returns a JSON object that contains the specification for the OverrideFormat where the precision and units properties have been overriden.\r\n * If the precision and/or units properties have been overriden, the returned object will contain a \"name\" and a \"parent\" property.\r\n * The \"name\" property identifies the OverrideFormat object itself and the \"parent\" property identifies the Format that has been overriden.\r\n * This method is not intended for complete serialization as it does not serialize any of the schema item properties.\r\n */\r\n public getFormatProps(): SchemaItemOverrideFormatProps {\r\n const formatJson = this.parent.toJSON() as Mutable<SchemaItemOverrideFormatProps>;\r\n\r\n if (this.parent.fullName !== this.fullName) {\r\n // Update name and parent properties to distinguish it from parent Format\r\n formatJson.name = this.fullName;\r\n formatJson.parent = this.parent.fullName;\r\n }\r\n\r\n // Update Precision overriden property\r\n formatJson.precision = this.precision;\r\n\r\n if (this.units !== undefined) {\r\n // Update Units overriden property\r\n const units = [];\r\n for (const unit of this.units) {\r\n units.push({\r\n name: unit[0].fullName,\r\n label: unit[1],\r\n });\r\n }\r\n\r\n formatJson.composite = {\r\n spacer: (this.spacer !== \" \") ? this.spacer : undefined,\r\n includeZero: (this.includeZero === false) ? this.includeZero : undefined,\r\n units,\r\n };\r\n }\r\n\r\n return formatJson;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function getFormatProps(format: Format | OverrideFormat): FormatProps {\r\n return OverrideFormat.isOverrideFormat(format) ? format.getFormatProps() : format.toJSON();\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"OverrideFormat.js","sourceRoot":"","sources":["../../../src/Metadata/OverrideFormat.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 Metadata\r\n */\r\n\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { DecimalPrecision, FormatProps, formatStringRgx, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\r\nimport { Format } from \"./Format\";\r\nimport { InvertedUnit } from \"./InvertedUnit\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItemOverrideFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { Unit } from \"./Unit\";\r\nimport { Mutable } from \"@itwin/core-bentley\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\n\r\n/**\r\n * @beta\r\n */\r\nexport interface OverrideFormatProps {\r\n name: string;\r\n precision?: number;\r\n unitAndLabels?: Array<[string, string | undefined]>; // Tuple of [unit name | unit label]\r\n}\r\n\r\n/**\r\n * Overrides of a Format, from a Schema, and is SchemaItem that is used specifically on KindOfQuantity.\r\n * @beta\r\n */\r\nexport class OverrideFormat {\r\n private _precision?: DecimalPrecision | FractionalPrecision;\r\n private _units?: Array<[Unit | InvertedUnit, string | undefined]>;\r\n\r\n /** The Format that this OverrideFormat is extending */\r\n public readonly parent: Format;\r\n\r\n /** The name of this OverrideFormat.\r\n *\r\n * This should be set to the [FormatString]($docs/bis/ec/kindofquantity/#format-string) which represents the format override.\r\n */\r\n public readonly name: string;\r\n\r\n constructor(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>) {\r\n this.parent = parent;\r\n this.name = OverrideFormat.createOverrideFormatFullName(parent, precision, unitAndLabels);\r\n this._precision = precision;\r\n this._units = unitAndLabels;\r\n }\r\n\r\n // Properties that can be overriden\r\n public get precision(): DecimalPrecision | FractionalPrecision { return (undefined === this._precision) ? this.parent.precision : this._precision; }\r\n public get units() { return (undefined === this._units) ? this.parent.units : this._units; }\r\n\r\n // Properties that cannot be overriden\r\n public get fullName(): string { return this.name; }\r\n public get roundFactor(): number { return this.parent.roundFactor; }\r\n public get type(): FormatType { return this.parent.type; }\r\n public get minWidth(): number | undefined { return this.parent.minWidth; }\r\n public get scientificType(): ScientificType | undefined { return this.parent.scientificType; }\r\n public get showSignOption(): ShowSignOption { return this.parent.showSignOption; }\r\n public get decimalSeparator(): string { return this.parent.decimalSeparator; }\r\n public get thousandSeparator(): string { return this.parent.thousandSeparator; }\r\n public get uomSeparator(): string { return this.parent.uomSeparator; }\r\n public get stationSeparator(): string { return this.parent.stationSeparator; }\r\n public get stationOffsetSize(): number | undefined { return this.parent.stationOffsetSize; }\r\n public get formatTraits(): FormatTraits { return this.parent.formatTraits; }\r\n public get spacer(): string | undefined { return this.parent.spacer; }\r\n public get includeZero(): boolean | undefined { return this.parent.includeZero; }\r\n\r\n public hasFormatTrait(formatTrait: FormatTraits) {\r\n return (this.parent.formatTraits & formatTrait) === formatTrait;\r\n }\r\n\r\n /** Returns the format string of this override in the Xml full name format.\r\n * @alpha\r\n */\r\n public fullNameXml(koqSchema: Schema): string {\r\n let fullName = XmlSerializationUtils.createXmlTypedName(koqSchema, this.parent.schema, this.parent.name);\r\n\r\n if (undefined !== this.precision)\r\n fullName += `(${this.precision.toString()})`;\r\n\r\n if (undefined === this._units)\r\n return fullName;\r\n for (const [unit, unitLabel] of this._units) {\r\n fullName += \"[\";\r\n fullName += XmlSerializationUtils.createXmlTypedName(koqSchema, unit.schema, unit.name);\r\n if (unitLabel !== undefined)\r\n fullName += `|${unitLabel}`;\r\n fullName += `]`;\r\n }\r\n return fullName;\r\n }\r\n\r\n /**\r\n * Creates a valid OverrideFormat fullName from the parent Format and overridden units.\r\n * @param parent The parent Format.\r\n * @param unitAndLabels The overridden unit and labels collection.\r\n */\r\n public static createOverrideFormatFullName(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[Unit | InvertedUnit, string | undefined]>): string {\r\n let fullName = parent.fullName;\r\n\r\n if (precision)\r\n fullName += `(${precision.toString()})`;\r\n\r\n if (undefined === unitAndLabels)\r\n return fullName;\r\n for (const [unit, unitLabel] of unitAndLabels)\r\n if (undefined === unitLabel)\r\n fullName += `[${unit.fullName}]`;\r\n else\r\n fullName += `[${unit.fullName}|${unitLabel}]`;\r\n return fullName;\r\n }\r\n\r\n /** Parses the format string into the parts that make up an Override Format\r\n * @param formatString\r\n */\r\n public static parseFormatString(formatString: string): OverrideFormatProps {\r\n const match = formatString.split(formatStringRgx); // split string based on regex groups\r\n if (undefined === match[1])\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity is missing a format.`);\r\n\r\n const returnValue: OverrideFormatProps = { name: match[1] };\r\n\r\n if (undefined !== match[2] && undefined !== match[3]) {\r\n const overrideString = match[2];\r\n const tokens: string[] = [];\r\n let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.\r\n let currPos;\r\n\r\n // TODO need to include `,` as a valid search argument.\r\n while (-1 !== (currPos = overrideString.indexOf(\")\", prevPos))) { // eslint-disable-line\r\n tokens.push(overrideString.substring(prevPos, currPos));\r\n prevPos = currPos + 1;\r\n }\r\n\r\n if (overrideString.length > 0 && undefined === tokens.find((token) => {\r\n return \"\" !== token; // there is at least one token that is not empty.\r\n })) {\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n }\r\n\r\n // The first override parameter overrides the default precision of the format\r\n const precisionIndx: number = 0;\r\n\r\n if (tokens.length >= precisionIndx + 1) {\r\n if (tokens[precisionIndx].length > 0) {\r\n const precision = Number.parseInt(tokens[precisionIndx], 10);\r\n if (Number.isNaN(precision))\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity has a precision override '${tokens[precisionIndx]}' that is not number.`);\r\n returnValue.precision = precision;\r\n }\r\n }\r\n }\r\n\r\n let i = 4;\r\n while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value\r\n if (undefined === match[i])\r\n break;\r\n // Unit override required\r\n if (undefined === match[i + 1])\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, ``);\r\n\r\n if (undefined === returnValue.unitAndLabels)\r\n returnValue.unitAndLabels = [];\r\n\r\n if (undefined !== match[i + 2]) // matches '|'\r\n returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? \"\"]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)\r\n else\r\n returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name\r\n\r\n i += 4;\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static isOverrideFormat(object: any): object is OverrideFormat {\r\n const overrideFormat = object as OverrideFormat;\r\n\r\n return overrideFormat !== undefined && overrideFormat.name !== undefined && overrideFormat.parent !== undefined && overrideFormat.parent.schemaItemType === SchemaItemType.Format;\r\n }\r\n\r\n /**\r\n * Returns a JSON object that contains the specification for the OverrideFormat where the precision and units properties have been overriden.\r\n * If the precision and/or units properties have been overriden, the returned object will contain a \"name\" and a \"parent\" property.\r\n * The \"name\" property identifies the OverrideFormat object itself and the \"parent\" property identifies the Format that has been overriden.\r\n * This method is not intended for complete serialization as it does not serialize any of the schema item properties.\r\n */\r\n public getFormatProps(): SchemaItemOverrideFormatProps {\r\n const formatJson = this.parent.toJSON() as Mutable<SchemaItemOverrideFormatProps>;\r\n\r\n if (this.parent.fullName !== this.fullName) {\r\n // Update name and parent properties to distinguish it from parent Format\r\n formatJson.name = this.fullName;\r\n formatJson.parent = this.parent.fullName;\r\n }\r\n\r\n // Update Precision overriden property\r\n formatJson.precision = this.precision;\r\n\r\n if (this.units !== undefined) {\r\n // Update Units overriden property\r\n const units = [];\r\n for (const unit of this.units) {\r\n units.push({\r\n name: unit[0].fullName,\r\n label: unit[1],\r\n });\r\n }\r\n\r\n formatJson.composite = {\r\n spacer: (this.spacer !== \" \") ? this.spacer : undefined,\r\n includeZero: (this.includeZero === false) ? this.includeZero : undefined,\r\n units,\r\n };\r\n }\r\n\r\n return formatJson;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function getFormatProps(format: Format | OverrideFormat): FormatProps {\r\n return OverrideFormat.isOverrideFormat(format) ? format.getFormatProps() : format.toJSON();\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/ecschema-metadata",
|
|
3
|
-
"version": "4.10.0-dev.
|
|
3
|
+
"version": "4.10.0-dev.30",
|
|
4
4
|
"description": "ECObjects core concepts in typescript",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/cjs/ecschema-metadata.js",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"rimraf": "^3.0.2",
|
|
43
43
|
"sinon": "^17.0.2",
|
|
44
44
|
"typescript": "~5.3.3",
|
|
45
|
-
"@itwin/build-tools": "4.10.0-dev.
|
|
46
|
-
"@itwin/core-bentley": "4.10.0-dev.
|
|
47
|
-
"@itwin/core-quantity": "4.10.0-dev.
|
|
45
|
+
"@itwin/build-tools": "4.10.0-dev.30",
|
|
46
|
+
"@itwin/core-bentley": "4.10.0-dev.30",
|
|
47
|
+
"@itwin/core-quantity": "4.10.0-dev.30"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@itwin/core-bentley": "^4.10.0-dev.
|
|
51
|
-
"@itwin/core-quantity": "^4.10.0-dev.
|
|
50
|
+
"@itwin/core-bentley": "^4.10.0-dev.30",
|
|
51
|
+
"@itwin/core-quantity": "^4.10.0-dev.30"
|
|
52
52
|
},
|
|
53
53
|
"nyc": {
|
|
54
54
|
"extends": "./node_modules/@itwin/build-tools/.nycrc"
|