@itwin/ecschema-metadata 5.6.0-dev.13 → 5.6.0-dev.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Deserialization/JsonParser.d.ts.map +1 -1
- package/lib/cjs/Deserialization/JsonParser.js +12 -0
- package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
- package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
- package/lib/cjs/Deserialization/XmlParser.js +12 -0
- package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
- package/lib/cjs/Formatting/SchemaFormatsProvider.js +1 -1
- package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
- package/lib/cjs/Metadata/Format.d.ts +3 -0
- package/lib/cjs/Metadata/Format.d.ts.map +1 -1
- package/lib/cjs/Metadata/Format.js +100 -26
- package/lib/cjs/Metadata/Format.js.map +1 -1
- package/lib/cjs/Metadata/OverrideFormat.d.ts +3 -0
- package/lib/cjs/Metadata/OverrideFormat.d.ts.map +1 -1
- package/lib/cjs/Metadata/OverrideFormat.js +4 -1
- package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
- package/lib/esm/Deserialization/JsonParser.d.ts.map +1 -1
- package/lib/esm/Deserialization/JsonParser.js +12 -0
- package/lib/esm/Deserialization/JsonParser.js.map +1 -1
- package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
- package/lib/esm/Deserialization/XmlParser.js +12 -0
- package/lib/esm/Deserialization/XmlParser.js.map +1 -1
- package/lib/esm/Formatting/SchemaFormatsProvider.js +1 -1
- package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
- package/lib/esm/Metadata/Format.d.ts +3 -0
- package/lib/esm/Metadata/Format.d.ts.map +1 -1
- package/lib/esm/Metadata/Format.js +100 -26
- package/lib/esm/Metadata/Format.js.map +1 -1
- package/lib/esm/Metadata/OverrideFormat.d.ts +3 -0
- package/lib/esm/Metadata/OverrideFormat.d.ts.map +1 -1
- package/lib/esm/Metadata/OverrideFormat.js +4 -1
- package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
- package/package.json +7 -7
|
@@ -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,EACO,gBAAgB,EAAE,YAAY,EAAuB,UAAU,EAAE,mBAAmB,EAChG,cAAc,EAAE,cAAc,EAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Format.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,9 @@ class Format extends SchemaItem_1.SchemaItem {
|
|
|
42
42
|
get stationSeparator() { return this._base.stationSeparator; }
|
|
43
43
|
get stationOffsetSize() { return this._base.stationOffsetSize; }
|
|
44
44
|
get stationBaseFactor() { return this._base.stationBaseFactor; }
|
|
45
|
+
get ratioType() { return this._base.ratioType; }
|
|
46
|
+
get ratioSeparator() { return this._base.ratioSeparator; }
|
|
47
|
+
get ratioFormatType() { return this._base.ratioFormatType; }
|
|
45
48
|
get formatTraits() { return this._base.formatTraits; }
|
|
46
49
|
get spacer() { return this._base.spacer; }
|
|
47
50
|
get includeZero() { return this._base.includeZero; }
|
|
@@ -63,10 +66,13 @@ class Format extends SchemaItem_1.SchemaItem {
|
|
|
63
66
|
addUnit(unit, label) {
|
|
64
67
|
if (undefined === this._units)
|
|
65
68
|
this._units = [];
|
|
66
|
-
else {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
else {
|
|
70
|
+
const isDuplicateAllowed = this.type === core_quantity_1.FormatType.Ratio;
|
|
71
|
+
if (!isDuplicateAllowed) {
|
|
72
|
+
for (const existingUnit of this._units) {
|
|
73
|
+
if (unit.fullName.toLowerCase() === existingUnit[0].fullName.toLowerCase())
|
|
74
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has duplicate units, '${unit.fullName}'.`); // TODO: Validation - this should be a validation error not a hard failure.
|
|
75
|
+
}
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
78
|
this._units.push([unit, label]);
|
|
@@ -91,37 +97,87 @@ class Format extends SchemaItem_1.SchemaItem {
|
|
|
91
97
|
if (formatProps.composite.units.length <= 0 || formatProps.composite.units.length > 4)
|
|
92
98
|
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);
|
|
93
99
|
}
|
|
100
|
+
// For Ratio formats: validate that composite is provided
|
|
101
|
+
if (this.type === core_quantity_1.FormatType.Ratio) {
|
|
102
|
+
const hasComposite = undefined !== formatProps.composite && formatProps.composite.units.length > 0;
|
|
103
|
+
if (!hasComposite) {
|
|
104
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} is 'Ratio' type and must have 'composite' units.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
94
107
|
}
|
|
95
108
|
fromJSONSync(formatProps) {
|
|
96
109
|
super.fromJSONSync(formatProps);
|
|
97
110
|
this.typecheck(formatProps);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
// Process composite units
|
|
112
|
+
if (undefined !== formatProps.composite) {
|
|
113
|
+
for (const unit of formatProps.composite.units) {
|
|
114
|
+
const newUnit = this.schema.lookupItemSync(unit.name);
|
|
115
|
+
if (undefined === newUnit || (!Unit_1.Unit.isUnit(newUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit)))
|
|
116
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, ``);
|
|
117
|
+
const lazyUnit = Unit_1.Unit.isUnit(newUnit)
|
|
118
|
+
? new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit)
|
|
119
|
+
: new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit);
|
|
120
|
+
this.addUnit(lazyUnit, unit.label);
|
|
121
|
+
}
|
|
122
|
+
// For Ratio formats with 2 units: validate both units have the same phenomenon
|
|
123
|
+
if (this.type === core_quantity_1.FormatType.Ratio && this._units && this._units.length === 2) {
|
|
124
|
+
const unit1Item = this.schema.lookupItemSync(this._units[0][0].fullName);
|
|
125
|
+
const unit2Item = this.schema.lookupItemSync(this._units[1][0].fullName);
|
|
126
|
+
if (!unit1Item || !unit2Item || (!Unit_1.Unit.isUnit(unit1Item) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(unit1Item)) || (!Unit_1.Unit.isUnit(unit2Item) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(unit2Item)))
|
|
127
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has invalid units.`);
|
|
128
|
+
const getPhenomenon = (unitItem) => {
|
|
129
|
+
if (Unit_1.Unit.isUnit(unitItem)) {
|
|
130
|
+
return unitItem.phenomenon;
|
|
131
|
+
}
|
|
132
|
+
const invertsUnit = unitItem.invertsUnit;
|
|
133
|
+
if (invertsUnit) {
|
|
134
|
+
const resolvedUnit = this.schema.lookupItemSync(invertsUnit.fullName);
|
|
135
|
+
return resolvedUnit && Unit_1.Unit.isUnit(resolvedUnit) ? resolvedUnit.phenomenon : undefined;
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
};
|
|
139
|
+
const phenomenon1 = getPhenomenon(unit1Item);
|
|
140
|
+
const phenomenon2 = getPhenomenon(unit2Item);
|
|
141
|
+
if (phenomenon1?.fullName !== phenomenon2?.fullName) {
|
|
142
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has 2-unit composite with different phenomena. Both units must have the same phenomenon.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
109
145
|
}
|
|
110
146
|
}
|
|
111
147
|
async fromJSON(formatProps) {
|
|
112
148
|
await super.fromJSON(formatProps);
|
|
113
149
|
this.typecheck(formatProps);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
150
|
+
// Process composite units
|
|
151
|
+
if (undefined !== formatProps.composite) {
|
|
152
|
+
for (const unit of formatProps.composite.units) {
|
|
153
|
+
const newUnit = await this.schema.lookupItem(unit.name);
|
|
154
|
+
if (undefined === newUnit || (!Unit_1.Unit.isUnit(newUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit)))
|
|
155
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, ``);
|
|
156
|
+
const lazyUnit = Unit_1.Unit.isUnit(newUnit)
|
|
157
|
+
? new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit)
|
|
158
|
+
: new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit);
|
|
159
|
+
this.addUnit(lazyUnit, unit.label);
|
|
160
|
+
}
|
|
161
|
+
// For Ratio formats with 2 units: validate both units have the same phenomenon
|
|
162
|
+
if (this.type === core_quantity_1.FormatType.Ratio && this._units && this._units.length === 2) {
|
|
163
|
+
const unit1Item = await this.schema.lookupItem(this._units[0][0].fullName);
|
|
164
|
+
const unit2Item = await this.schema.lookupItem(this._units[1][0].fullName);
|
|
165
|
+
if (!unit1Item || !unit2Item || (!Unit_1.Unit.isUnit(unit1Item) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(unit1Item)) || (!Unit_1.Unit.isUnit(unit2Item) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(unit2Item)))
|
|
166
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has invalid units.`);
|
|
167
|
+
// Helper to extract phenomenon from Unit or InvertedUnit
|
|
168
|
+
const getPhenomenon = async (unitItem) => {
|
|
169
|
+
if (Unit_1.Unit.isUnit(unitItem)) {
|
|
170
|
+
return unitItem.phenomenon;
|
|
171
|
+
}
|
|
172
|
+
const invertsUnit = await unitItem.invertsUnit;
|
|
173
|
+
return invertsUnit ? invertsUnit.phenomenon : undefined;
|
|
174
|
+
};
|
|
175
|
+
const phenomenon1 = await getPhenomenon(unit1Item);
|
|
176
|
+
const phenomenon2 = await getPhenomenon(unit2Item);
|
|
177
|
+
if (phenomenon1?.fullName !== phenomenon2?.fullName) {
|
|
178
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has 2-unit composite with different phenomena. Both units must have the same phenomenon.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
125
181
|
}
|
|
126
182
|
}
|
|
127
183
|
/**
|
|
@@ -158,6 +214,15 @@ class Format extends SchemaItem_1.SchemaItem {
|
|
|
158
214
|
if (" " !== this.stationSeparator)
|
|
159
215
|
schemaJson.stationSeparator = this.stationSeparator;
|
|
160
216
|
}
|
|
217
|
+
// Only include ratio properties for EC version 3.3+
|
|
218
|
+
if (core_quantity_1.FormatType.Ratio === this.type && this.schema.originalECSpecMajorVersion === 3 && this.schema.originalECSpecMinorVersion !== undefined && this.schema.originalECSpecMinorVersion >= 3) {
|
|
219
|
+
if (undefined !== this.ratioType)
|
|
220
|
+
schemaJson.ratioType = this.ratioType;
|
|
221
|
+
if (undefined !== this.ratioSeparator)
|
|
222
|
+
schemaJson.ratioSeparator = this.ratioSeparator;
|
|
223
|
+
if (undefined !== this.ratioFormatType)
|
|
224
|
+
schemaJson.ratioFormatType = this.ratioFormatType;
|
|
225
|
+
}
|
|
161
226
|
if (undefined === this.units)
|
|
162
227
|
return schemaJson;
|
|
163
228
|
schemaJson.composite = {};
|
|
@@ -189,6 +254,15 @@ class Format extends SchemaItem_1.SchemaItem {
|
|
|
189
254
|
itemElement.setAttribute("minWidth", this.minWidth.toString());
|
|
190
255
|
if (undefined !== this.scientificType)
|
|
191
256
|
itemElement.setAttribute("scientificType", this.scientificType);
|
|
257
|
+
// Only include ratio properties for EC version 3.3+
|
|
258
|
+
if (this.schema.originalECSpecMajorVersion === 3 && this.schema.originalECSpecMinorVersion !== undefined && this.schema.originalECSpecMinorVersion >= 3) {
|
|
259
|
+
if (undefined !== this.ratioType)
|
|
260
|
+
itemElement.setAttribute("ratioType", this.ratioType);
|
|
261
|
+
if (undefined !== this.ratioSeparator)
|
|
262
|
+
itemElement.setAttribute("ratioSeparator", this.ratioSeparator);
|
|
263
|
+
if (undefined !== this.ratioFormatType)
|
|
264
|
+
itemElement.setAttribute("ratioFormatType", this.ratioFormatType);
|
|
265
|
+
}
|
|
192
266
|
if (undefined !== this.stationOffsetSize)
|
|
193
267
|
itemElement.setAttribute("stationOffsetSize", this.stationOffsetSize.toString());
|
|
194
268
|
const formatTraits = (0, core_quantity_1.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 { ECSchemaError, ECSchemaStatus } 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\nimport { LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\n\r\n/**\r\n * @public @preview\r\n */\r\nexport class Format extends SchemaItem {\r\n public override readonly schemaItemType = Format.schemaItemType;\r\n /** @internal */\r\n public static override get schemaItemType() { return SchemaItemType.Format; }\r\n private _base: BaseFormat;\r\n private _units?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>;\r\n\r\n /** @internal */\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\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 stationBaseFactor(): number | undefined { return this._base.stationBaseFactor; }\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(): ReadonlyArray<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined {\r\n return this._units;\r\n }\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 * @internal\r\n */\r\n protected addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, 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 ECSchemaError(ECSchemaStatus.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 /**\r\n *\r\n * @param precision\r\n * @internal\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 ECSchemaError(ECSchemaStatus.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 ECSchemaError(ECSchemaStatus.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.name);\r\n if (undefined === newUnit || (!Unit.isUnit(newUnit) && !InvertedUnit.isInvertedUnit(newUnit)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n\r\n if(Unit.isUnit(newUnit))\r\n this.addUnit(new DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);\r\n else if(InvertedUnit.isInvertedUnit(newUnit))\r\n this.addUnit(new DelayedPromiseWithProps(newUnit.key, async () => 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.name);\r\n if (undefined === newUnit || (!Unit.isUnit(newUnit) && !InvertedUnit.isInvertedUnit(newUnit)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n\r\n if(Unit.isUnit(newUnit))\r\n this.addUnit(new DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);\r\n else if(InvertedUnit.isInvertedUnit(newUnit))\r\n this.addUnit(new DelayedPromiseWithProps(newUnit.key, async () => 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 for(const [unit, label] of this.units) {\r\n const resolvedUnit = await unit;\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, resolvedUnit.schema, resolvedUnit.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 * @internal\r\n */\r\n protected setFormatType(formatType: FormatType) {\r\n this._base.type = formatType;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setRoundFactor(roundFactor: number) {\r\n this._base.roundFactor = roundFactor;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setShowSignOption(signOption: ShowSignOption) {\r\n this._base.showSignOption = signOption;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setDecimalSeparator(separator: string) {\r\n this._base.decimalSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setThousandSeparator(separator: string) {\r\n this._base.thousandSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setUomSeparator(separator: string) {\r\n this._base.uomSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationSeparator(separator: string) {\r\n this._base.stationSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationOffsetSize(stationOffsetSize: number) {\r\n this._base.stationOffsetSize = stationOffsetSize;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationBaseFactor(stationBaseFactor: number) {\r\n this._base.stationBaseFactor = stationBaseFactor;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setScientificType(scientificType: ScientificType) {\r\n this._base.scientificType = scientificType;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setMinWidth(minWidth: number) {\r\n this._base.minWidth = minWidth;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setSpacer(spacer: string) {\r\n this._base.spacer = spacer;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setIncludeZero(includeZero: boolean) {\r\n this._base.includeZero = includeZero;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setFormatTraits(formatTraits: FormatTraits) {\r\n this._base.formatTraits = formatTraits;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>) {\r\n this._units = units;\r\n }\r\n\r\n /** Type guard to check if the SchemaItem is of type Format.\r\n * @param item The SchemaItem to check.\r\n * @returns True if the item is a Format, false otherwise.\r\n */\r\n public static isFormat(item?: SchemaItem): item is Format {\r\n if (item && item.schemaItemType === SchemaItemType.Format)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Type assertion to check if the SchemaItem is of type Format.\r\n * @param item The SchemaItem to check.\r\n * @returns The item cast to Format if it is a Format, undefined otherwise.\r\n * @internal\r\n */\r\n public static assertIsFormat(item?: SchemaItem): asserts item is Format {\r\n if (!this.isFormat(item))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.Format}' (Format)`);\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: LazyLoadedUnit | LazyLoadedInvertedUnit, 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 { ECSchemaError, ECSchemaStatus } 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\nimport { LazyLoadedInvertedUnit, LazyLoadedPhenomenon, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport type { SchemaItemKey } from \"../SchemaKey\";\r\n\r\n/**\r\n * @public @preview\r\n */\r\nexport class Format extends SchemaItem {\r\n public override readonly schemaItemType = Format.schemaItemType;\r\n /** @internal */\r\n public static override get schemaItemType() { return SchemaItemType.Format; }\r\n private _base: BaseFormat;\r\n private _units?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>;\r\n\r\n /** @internal */\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\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 stationBaseFactor(): number | undefined { return this._base.stationBaseFactor; }\r\n public get ratioType(): string | undefined { return this._base.ratioType; }\r\n public get ratioSeparator(): string | undefined { return this._base.ratioSeparator; }\r\n public get ratioFormatType(): string | undefined { return this._base.ratioFormatType; }\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(): ReadonlyArray<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined {\r\n return this._units;\r\n }\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 * @internal\r\n */\r\n protected addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string) {\r\n if (undefined === this._units)\r\n this._units = [];\r\n else {\r\n const isDuplicateAllowed = this.type === FormatType.Ratio;\r\n if (!isDuplicateAllowed) {\r\n for (const existingUnit of this._units) {\r\n if (unit.fullName.toLowerCase() === existingUnit[0].fullName.toLowerCase())\r\n throw new ECSchemaError(ECSchemaStatus.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\r\n this._units.push([unit, label]);\r\n }\r\n\r\n /**\r\n *\r\n * @param precision\r\n * @internal\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 ECSchemaError(ECSchemaStatus.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 ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);\r\n }\r\n\r\n // For Ratio formats: validate that composite is provided\r\n if (this.type === FormatType.Ratio) {\r\n const hasComposite = undefined !== formatProps.composite && formatProps.composite.units.length > 0;\r\n if (!hasComposite) {\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} is 'Ratio' type and must have 'composite' units.`);\r\n }\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\r\n // Process composite units\r\n if (undefined !== formatProps.composite) {\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = this.schema.lookupItemSync(unit.name);\r\n if (undefined === newUnit || (!Unit.isUnit(newUnit) && !InvertedUnit.isInvertedUnit(newUnit)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n const lazyUnit = Unit.isUnit(newUnit)\r\n ? new DelayedPromiseWithProps<SchemaItemKey, Unit>(newUnit.key, async () => newUnit)\r\n : new DelayedPromiseWithProps<SchemaItemKey, InvertedUnit>(newUnit.key, async () => newUnit);\r\n this.addUnit(lazyUnit, unit.label);\r\n }\r\n\r\n // For Ratio formats with 2 units: validate both units have the same phenomenon\r\n if (this.type === FormatType.Ratio && this._units && this._units.length === 2) {\r\n const unit1Item = this.schema.lookupItemSync(this._units[0][0].fullName);\r\n const unit2Item = this.schema.lookupItemSync(this._units[1][0].fullName);\r\n if (!unit1Item || !unit2Item || (!Unit.isUnit(unit1Item) && !InvertedUnit.isInvertedUnit(unit1Item)) || (!Unit.isUnit(unit2Item) && !InvertedUnit.isInvertedUnit(unit2Item)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has invalid units.`);\r\n\r\n const getPhenomenon = (unitItem: Unit | InvertedUnit): LazyLoadedPhenomenon | undefined => {\r\n if (Unit.isUnit(unitItem)) {\r\n return unitItem.phenomenon;\r\n }\r\n const invertsUnit = unitItem.invertsUnit;\r\n if (invertsUnit) {\r\n const resolvedUnit = this.schema.lookupItemSync(invertsUnit.fullName);\r\n return resolvedUnit && Unit.isUnit(resolvedUnit) ? resolvedUnit.phenomenon : undefined;\r\n }\r\n return undefined;\r\n };\r\n\r\n const phenomenon1 = getPhenomenon(unit1Item);\r\n const phenomenon2 = getPhenomenon(unit2Item);\r\n\r\n if (phenomenon1?.fullName !== phenomenon2?.fullName) {\r\n throw new ECSchemaError(\r\n ECSchemaStatus.InvalidECJson,\r\n `The Format ${this.fullName} has 2-unit composite with different phenomena. Both units must have the same phenomenon.`\r\n );\r\n }\r\n }\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\r\n // Process composite units\r\n if (undefined !== formatProps.composite) {\r\n for (const unit of formatProps.composite.units) {\r\n const newUnit = await this.schema.lookupItem(unit.name);\r\n if (undefined === newUnit || (!Unit.isUnit(newUnit) && !InvertedUnit.isInvertedUnit(newUnit)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n const lazyUnit = Unit.isUnit(newUnit)\r\n ? new DelayedPromiseWithProps<SchemaItemKey, Unit>(newUnit.key, async () => newUnit)\r\n : new DelayedPromiseWithProps<SchemaItemKey, InvertedUnit>(newUnit.key, async () => newUnit);\r\n this.addUnit(lazyUnit, unit.label);\r\n }\r\n\r\n // For Ratio formats with 2 units: validate both units have the same phenomenon\r\n if (this.type === FormatType.Ratio && this._units && this._units.length === 2) {\r\n const unit1Item = await this.schema.lookupItem(this._units[0][0].fullName);\r\n const unit2Item = await this.schema.lookupItem(this._units[1][0].fullName);\r\n if (!unit1Item || !unit2Item || (!Unit.isUnit(unit1Item) && !InvertedUnit.isInvertedUnit(unit1Item)) || (!Unit.isUnit(unit2Item) && !InvertedUnit.isInvertedUnit(unit2Item)))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has invalid units.`);\r\n\r\n // Helper to extract phenomenon from Unit or InvertedUnit\r\n const getPhenomenon = async (unitItem: Unit | InvertedUnit) => {\r\n if (Unit.isUnit(unitItem)) {\r\n return unitItem.phenomenon;\r\n }\r\n const invertsUnit = await unitItem.invertsUnit;\r\n return invertsUnit ? invertsUnit.phenomenon : undefined;\r\n };\r\n\r\n const phenomenon1 = await getPhenomenon(unit1Item);\r\n const phenomenon2 = await getPhenomenon(unit2Item);\r\n\r\n if (phenomenon1?.fullName !== phenomenon2?.fullName) {\r\n throw new ECSchemaError(\r\n ECSchemaStatus.InvalidECJson,\r\n `The Format ${this.fullName} has 2-unit composite with different phenomena. Both units must have the same phenomenon.`\r\n );\r\n }\r\n }\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 // Only include ratio properties for EC version 3.3+\r\n if (FormatType.Ratio === this.type && this.schema.originalECSpecMajorVersion === 3 && this.schema.originalECSpecMinorVersion !== undefined && this.schema.originalECSpecMinorVersion >= 3) {\r\n if (undefined !== this.ratioType)\r\n schemaJson.ratioType = this.ratioType;\r\n if (undefined !== this.ratioSeparator)\r\n schemaJson.ratioSeparator = this.ratioSeparator;\r\n if (undefined !== this.ratioFormatType)\r\n schemaJson.ratioFormatType = this.ratioFormatType;\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 // Only include ratio properties for EC version 3.3+\r\n if (this.schema.originalECSpecMajorVersion === 3 && this.schema.originalECSpecMinorVersion !== undefined && this.schema.originalECSpecMinorVersion >= 3) {\r\n if (undefined !== this.ratioType)\r\n itemElement.setAttribute(\"ratioType\", this.ratioType);\r\n if (undefined !== this.ratioSeparator)\r\n itemElement.setAttribute(\"ratioSeparator\", this.ratioSeparator);\r\n if (undefined !== this.ratioFormatType)\r\n itemElement.setAttribute(\"ratioFormatType\", this.ratioFormatType);\r\n }\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 for(const [unit, label] of this.units) {\r\n const resolvedUnit = await unit;\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, resolvedUnit.schema, resolvedUnit.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 * @internal\r\n */\r\n protected setFormatType(formatType: FormatType) {\r\n this._base.type = formatType;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setRoundFactor(roundFactor: number) {\r\n this._base.roundFactor = roundFactor;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setShowSignOption(signOption: ShowSignOption) {\r\n this._base.showSignOption = signOption;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setDecimalSeparator(separator: string) {\r\n this._base.decimalSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setThousandSeparator(separator: string) {\r\n this._base.thousandSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setUomSeparator(separator: string) {\r\n this._base.uomSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationSeparator(separator: string) {\r\n this._base.stationSeparator = separator;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationOffsetSize(stationOffsetSize: number) {\r\n this._base.stationOffsetSize = stationOffsetSize;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setStationBaseFactor(stationBaseFactor: number) {\r\n this._base.stationBaseFactor = stationBaseFactor;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setScientificType(scientificType: ScientificType) {\r\n this._base.scientificType = scientificType;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setMinWidth(minWidth: number) {\r\n this._base.minWidth = minWidth;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setSpacer(spacer: string) {\r\n this._base.spacer = spacer;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setIncludeZero(includeZero: boolean) {\r\n this._base.includeZero = includeZero;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setFormatTraits(formatTraits: FormatTraits) {\r\n this._base.formatTraits = formatTraits;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>) {\r\n this._units = units;\r\n }\r\n\r\n /** Type guard to check if the SchemaItem is of type Format.\r\n * @param item The SchemaItem to check.\r\n * @returns True if the item is a Format, false otherwise.\r\n */\r\n public static isFormat(item?: SchemaItem): item is Format {\r\n if (item && item.schemaItemType === SchemaItemType.Format)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Type assertion to check if the SchemaItem is of type Format.\r\n * @param item The SchemaItem to check.\r\n * @returns The item cast to Format if it is a Format, undefined otherwise.\r\n * @internal\r\n */\r\n public static assertIsFormat(item?: SchemaItem): asserts item is Format {\r\n if (!this.isFormat(item))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.Format}' (Format)`);\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: LazyLoadedUnit | LazyLoadedInvertedUnit, 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"]}
|
|
@@ -37,6 +37,9 @@ export declare class OverrideFormat {
|
|
|
37
37
|
get type(): FormatType;
|
|
38
38
|
get minWidth(): number | undefined;
|
|
39
39
|
get scientificType(): ScientificType | undefined;
|
|
40
|
+
get ratioType(): string | undefined;
|
|
41
|
+
get ratioSeparator(): string | undefined;
|
|
42
|
+
get ratioFormatType(): string | undefined;
|
|
40
43
|
get showSignOption(): ShowSignOption;
|
|
41
44
|
get decimalSeparator(): string;
|
|
42
45
|
get thousandSeparator(): string;
|
|
@@ -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,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,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC9D;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAC,CAAyC;IAC5D,OAAO,CAAC,MAAM,CAAC,CAAuE;IAEtF,uDAAuD;IACvD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,gBAAgB;gBACJ,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAQpK,IAAW,SAAS,IAAI,gBAAgB,GAAG,mBAAmB,CAE7D;IAED,IAAW,KAAK,IAAI,aAAa,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAE3G;IAGD,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;IAsB7C;;;;OAIG;WACW,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM;IAgB5M;;OAEG;WACW,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB;IA0D1E;;OAEG;WACW,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,cAAc;IAMzE;;;;;OAKG;IACI,cAAc,IAAI,6BAA6B;CA+BvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,CAE3E"}
|
|
1
|
+
{"version":3,"file":"OverrideFormat.d.ts","sourceRoot":"","sources":["../../../src/Metadata/OverrideFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,9 @@ class OverrideFormat {
|
|
|
47
47
|
get type() { return this.parent.type; }
|
|
48
48
|
get minWidth() { return this.parent.minWidth; }
|
|
49
49
|
get scientificType() { return this.parent.scientificType; }
|
|
50
|
+
get ratioType() { return this.parent.ratioType; }
|
|
51
|
+
get ratioSeparator() { return this.parent.ratioSeparator; }
|
|
52
|
+
get ratioFormatType() { return this.parent.ratioFormatType; }
|
|
50
53
|
get showSignOption() { return this.parent.showSignOption; }
|
|
51
54
|
get decimalSeparator() { return this.parent.decimalSeparator; }
|
|
52
55
|
get thousandSeparator() { return this.parent.thousandSeparator; }
|
|
@@ -71,7 +74,7 @@ class OverrideFormat {
|
|
|
71
74
|
for (const [unit, unitLabel] of this._units) {
|
|
72
75
|
const unitSchema = koqSchema.context.getSchemaSync(unit.schemaKey);
|
|
73
76
|
if (unitSchema === undefined)
|
|
74
|
-
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The unit schema ${unit.schemaKey} is not found in the context.`);
|
|
77
|
+
throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The unit schema ${unit.schemaKey.toString()} is not found in the context.`);
|
|
75
78
|
fullName += "[";
|
|
76
79
|
fullName += XmlSerializationUtils_1.XmlSerializationUtils.createXmlTypedName(koqSchema, unitSchema, unit.name);
|
|
77
80
|
if (unitLabel !== undefined)
|
|
@@ -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, formatStringRgx, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\r\nimport { Format } from \"./Format\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItemOverrideFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { Mutable } from \"@itwin/core-bentley\";\r\nimport { LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\n\r\n/**\r\n * @public @preview\r\n */\r\nexport interface OverrideFormatProps {\r\n readonly name: string;\r\n readonly precision?: number;\r\n readonly 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 * @public @preview\r\n */\r\nexport class OverrideFormat {\r\n private _precision?: DecimalPrecision | FractionalPrecision;\r\n private _units?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 /** @internal */\r\n constructor(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 {\r\n return (undefined === this._precision) ? this.parent.precision : this._precision;\r\n }\r\n\r\n public get units(): ReadonlyArray<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined {\r\n return (undefined === this._units) ? this.parent.units : this._units;\r\n }\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 * @internal\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 const unitSchema = koqSchema.context.getSchemaSync(unit.schemaKey);\r\n if(unitSchema === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The unit schema ${unit.schemaKey} is not found in the context.`);\r\n\r\n fullName += \"[\";\r\n fullName += XmlSerializationUtils.createXmlTypedName(koqSchema, unitSchema, 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<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 ECSchemaError(ECSchemaStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity is missing a format.`);\r\n\r\n let precision: OverrideFormatProps[\"precision\"];\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))) {\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 ECSchemaError(ECSchemaStatus.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 if (tokens.length >= precisionIndx + 1) {\r\n if (tokens[precisionIndx].length > 0) {\r\n precision = Number.parseInt(tokens[precisionIndx], 10);\r\n if (Number.isNaN(precision))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity has a precision override '${tokens[precisionIndx]}' that is not number.`);\r\n }\r\n }\r\n }\r\n\r\n let i = 4;\r\n let unitAndLabels: OverrideFormatProps[\"unitAndLabels\"];\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 ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n\r\n if (undefined === unitAndLabels)\r\n unitAndLabels = [];\r\n\r\n if (undefined !== match[i + 2]) // matches '|'\r\n 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 unitAndLabels.push([match[i + 1], undefined]); // add unit name\r\n\r\n i += 4;\r\n }\r\n\r\n return { name: match[1], precision, unitAndLabels };\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static isOverrideFormat(format: unknown): format is OverrideFormat {\r\n const overrideFormat = format as Partial<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 { Schema } from \"./Schema\";\r\nimport { SchemaItemOverrideFormatProps } from \"../Deserialization/JsonProps\";\r\nimport { Mutable } from \"@itwin/core-bentley\";\r\nimport { LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\n\r\n/**\r\n * @public @preview\r\n */\r\nexport interface OverrideFormatProps {\r\n readonly name: string;\r\n readonly precision?: number;\r\n readonly 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 * @public @preview\r\n */\r\nexport class OverrideFormat {\r\n private _precision?: DecimalPrecision | FractionalPrecision;\r\n private _units?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 /** @internal */\r\n constructor(parent: Format, precision?: DecimalPrecision | FractionalPrecision, unitAndLabels?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 {\r\n return (undefined === this._precision) ? this.parent.precision : this._precision;\r\n }\r\n\r\n public get units(): ReadonlyArray<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined {\r\n return (undefined === this._units) ? this.parent.units : this._units;\r\n }\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 ratioType(): string | undefined { return this.parent.ratioType; }\r\n public get ratioSeparator(): string | undefined { return this.parent.ratioSeparator; }\r\n public get ratioFormatType(): string | undefined { return this.parent.ratioFormatType; }\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 * @internal\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 const unitSchema = koqSchema.context.getSchemaSync(unit.schemaKey);\r\n if(unitSchema === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The unit schema ${unit.schemaKey.toString()} is not found in the context.`);\r\n\r\n fullName += \"[\";\r\n fullName += XmlSerializationUtils.createXmlTypedName(koqSchema, unitSchema, 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<[LazyLoadedUnit | LazyLoadedInvertedUnit, 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 ECSchemaError(ECSchemaStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity is missing a format.`);\r\n\r\n let precision: OverrideFormatProps[\"precision\"];\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))) {\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 ECSchemaError(ECSchemaStatus.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 if (tokens.length >= precisionIndx + 1) {\r\n if (tokens[precisionIndx].length > 0) {\r\n precision = Number.parseInt(tokens[precisionIndx], 10);\r\n if (Number.isNaN(precision))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity has a precision override '${tokens[precisionIndx]}' that is not number.`);\r\n }\r\n }\r\n }\r\n\r\n let i = 4;\r\n let unitAndLabels: OverrideFormatProps[\"unitAndLabels\"];\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 ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\r\n\r\n if (undefined === unitAndLabels)\r\n unitAndLabels = [];\r\n\r\n if (undefined !== match[i + 2]) // matches '|'\r\n 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 unitAndLabels.push([match[i + 1], undefined]); // add unit name\r\n\r\n i += 4;\r\n }\r\n\r\n return { name: match[1], precision, unitAndLabels };\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static isOverrideFormat(format: unknown): format is OverrideFormat {\r\n const overrideFormat = format as Partial<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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonParser.d.ts","sourceRoot":"","sources":["../../../src/Deserialization/JsonParser.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAChI,uBAAuB,EAAE,eAAe,EAAE,2BAA2B,EAAoC,sBAAsB,EAC/H,qBAAqB,EAAiB,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,gBAAgB,EACvL,mBAAmB,EAAE,eAAe,EACrC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;AAE3D,UAAU,aAAa;IAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;AAO5D,gBAAgB;AAChB,qBAAa,UAAW,SAAQ,cAAc,CAAC,aAAa,CAAC;IAC3D,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAS;gBAE1B,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;IAWxC,IAAW,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAAgC;WAE1E,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAahE;;;;OAIG;IACI,WAAW,IAAI,WAAW;IAwCzB,aAAa,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAWvD,OAAO,CAAC,oBAAoB;IAcpB,QAAQ,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IA0BtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,SAAS;IA2B9E;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAYpB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IA8B1G;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;OAIG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB;IAmBjE;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU;IAarD;;;;OAIG;IACI,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,yBAAyB;IAa5E,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB;IAS1D,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe;IAK/D;;;;OAIG;IACI,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,sBAAsB;IA+B7E;;;;;OAKG;IACH,OAAO,CAAC,gCAAgC;IAmCxC;;;;OAIG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB;IA8DjE;;;;OAIG;IACI,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB;IAoBvE;;;;OAIG;IACI,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,qBAAqB;IAU3E;;;;OAIG;IACI,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB;IAkC7D;;;;OAIG;IACI,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB;IAenE;;;;OAIG;IACI,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa;IAyB3D;;;;OAIG;IACI,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe;IAS/D;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,qBAAqB;
|
|
1
|
+
{"version":3,"file":"JsonParser.d.ts","sourceRoot":"","sources":["../../../src/Deserialization/JsonParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -534,6 +534,18 @@ export class JsonParser extends AbstractParser {
|
|
|
534
534
|
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'uomSeparator' attribute. It should be of type 'string'.`);
|
|
535
535
|
if (undefined !== jsonObj.scientificType && typeof (jsonObj.scientificType) !== "string")
|
|
536
536
|
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'scientificType' attribute. It should be of type 'string'.`);
|
|
537
|
+
if (undefined !== jsonObj.ratioType && typeof (jsonObj.ratioType) !== "string")
|
|
538
|
+
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'ratioType' attribute. It should be of type 'string'.`);
|
|
539
|
+
if (undefined !== jsonObj.ratioSeparator && typeof (jsonObj.ratioSeparator) !== "string")
|
|
540
|
+
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'ratioSeparator' attribute. It should be of type 'string'.`);
|
|
541
|
+
if (undefined !== jsonObj.ratioFormatType && typeof (jsonObj.ratioFormatType) !== "string")
|
|
542
|
+
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'ratioFormatType' attribute. It should be of type 'string'.`);
|
|
543
|
+
// Validate EC version if ratio properties exist - they require EC version 3.3+
|
|
544
|
+
if (jsonObj.ratioType !== undefined || jsonObj.ratioSeparator !== undefined || jsonObj.ratioFormatType !== undefined) {
|
|
545
|
+
if (this._ecSpecVersion === undefined || this._ecSpecVersion.readVersion < 3 || (this._ecSpecVersion.readVersion === 3 && this._ecSpecVersion.writeVersion < 3)) {
|
|
546
|
+
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has ratio properties that require EC version 3.3 or newer.`);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
537
549
|
if (undefined !== jsonObj.stationOffsetSize && typeof (jsonObj.stationOffsetSize) !== "number")
|
|
538
550
|
throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Format ${this._currentItemFullName} has an invalid 'stationOffsetSize' attribute. It should be of type 'number'.`);
|
|
539
551
|
if (undefined !== jsonObj.stationSeparator && typeof (jsonObj.stationSeparator) !== "string")
|