@itwin/ecschema-metadata 4.10.0-dev.8 → 5.0.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -1
- package/lib/cjs/DelayedPromise.d.ts.map +1 -1
- package/lib/cjs/Deserialization/AbstractParser.d.ts +3 -0
- package/lib/cjs/Deserialization/AbstractParser.d.ts.map +1 -1
- package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
- package/lib/cjs/Deserialization/Helper.d.ts +9 -0
- package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
- package/lib/cjs/Deserialization/Helper.js +24 -6
- package/lib/cjs/Deserialization/Helper.js.map +1 -1
- package/lib/cjs/Deserialization/JsonParser.d.ts +3 -0
- package/lib/cjs/Deserialization/JsonParser.d.ts.map +1 -1
- package/lib/cjs/Deserialization/JsonParser.js +55 -9
- package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
- package/lib/cjs/Deserialization/JsonProps.d.ts +4 -0
- package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
- package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
- package/lib/cjs/Deserialization/XmlParser.d.ts +3 -2
- package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
- package/lib/cjs/Deserialization/XmlParser.js +32 -13
- package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
- package/lib/cjs/ECObjects.d.ts.map +1 -1
- package/lib/cjs/ECObjects.js +24 -21
- package/lib/cjs/ECObjects.js.map +1 -1
- package/lib/cjs/Exception.d.ts +2 -1
- package/lib/cjs/Exception.d.ts.map +1 -1
- package/lib/cjs/Exception.js +1 -0
- package/lib/cjs/Exception.js.map +1 -1
- package/lib/cjs/Metadata/Class.d.ts.map +1 -1
- package/lib/cjs/Metadata/Class.js +10 -3
- package/lib/cjs/Metadata/Class.js.map +1 -1
- package/lib/cjs/Metadata/Constant.js.map +1 -1
- package/lib/cjs/Metadata/CustomAttribute.js +1 -2
- package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
- package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
- package/lib/cjs/Metadata/EntityClass.js +3 -3
- package/lib/cjs/Metadata/EntityClass.js.map +1 -1
- package/lib/cjs/Metadata/Enumeration.d.ts.map +1 -1
- package/lib/cjs/Metadata/Enumeration.js +11 -4
- package/lib/cjs/Metadata/Enumeration.js.map +1 -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/InvertedUnit.d.ts +4 -0
- package/lib/cjs/Metadata/InvertedUnit.d.ts.map +1 -1
- package/lib/cjs/Metadata/InvertedUnit.js +6 -0
- package/lib/cjs/Metadata/InvertedUnit.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/Mixin.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 +55 -2
- package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
- package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
- package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
- package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
- package/lib/cjs/Metadata/RelationshipClass.js +8 -3
- package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
- package/lib/cjs/Metadata/Schema.d.ts +9 -0
- package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
- package/lib/cjs/Metadata/Schema.js +74 -7
- package/lib/cjs/Metadata/Schema.js.map +1 -1
- package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
- package/lib/cjs/Metadata/Unit.js.map +1 -1
- package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
- package/lib/cjs/PropertyTypes.js +2 -2
- package/lib/cjs/PropertyTypes.js.map +1 -1
- package/lib/cjs/SchemaKey.d.ts.map +1 -1
- package/lib/cjs/SchemaKey.js +1 -5
- package/lib/cjs/SchemaKey.js.map +1 -1
- package/lib/cjs/UnitConversion/Graph.d.ts.map +1 -1
- package/lib/cjs/UnitConversion/Parser.js +1 -2
- package/lib/cjs/UnitConversion/Parser.js.map +1 -1
- package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts +1 -6
- package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
- package/lib/cjs/UnitProvider/SchemaUnitProvider.js +100 -58
- package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
- package/lib/esm/DelayedPromise.d.ts.map +1 -1
- package/lib/esm/Deserialization/AbstractParser.d.ts +3 -0
- package/lib/esm/Deserialization/AbstractParser.d.ts.map +1 -1
- package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
- package/lib/esm/Deserialization/Helper.d.ts +9 -0
- package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
- package/lib/esm/Deserialization/Helper.js +24 -6
- package/lib/esm/Deserialization/Helper.js.map +1 -1
- package/lib/esm/Deserialization/JsonParser.d.ts +3 -0
- package/lib/esm/Deserialization/JsonParser.d.ts.map +1 -1
- package/lib/esm/Deserialization/JsonParser.js +55 -9
- package/lib/esm/Deserialization/JsonParser.js.map +1 -1
- package/lib/esm/Deserialization/JsonProps.d.ts +4 -0
- package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
- package/lib/esm/Deserialization/JsonProps.js.map +1 -1
- package/lib/esm/Deserialization/XmlParser.d.ts +3 -2
- package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
- package/lib/esm/Deserialization/XmlParser.js +32 -13
- package/lib/esm/Deserialization/XmlParser.js.map +1 -1
- package/lib/esm/ECObjects.d.ts.map +1 -1
- package/lib/esm/ECObjects.js +8 -5
- package/lib/esm/ECObjects.js.map +1 -1
- package/lib/esm/Exception.d.ts +2 -1
- package/lib/esm/Exception.d.ts.map +1 -1
- package/lib/esm/Exception.js +1 -0
- package/lib/esm/Exception.js.map +1 -1
- package/lib/esm/Metadata/Class.d.ts.map +1 -1
- package/lib/esm/Metadata/Class.js +10 -3
- package/lib/esm/Metadata/Class.js.map +1 -1
- package/lib/esm/Metadata/Constant.js.map +1 -1
- package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
- package/lib/esm/Metadata/EntityClass.js.map +1 -1
- package/lib/esm/Metadata/Enumeration.d.ts.map +1 -1
- package/lib/esm/Metadata/Enumeration.js +11 -4
- package/lib/esm/Metadata/Enumeration.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/InvertedUnit.d.ts +4 -0
- package/lib/esm/Metadata/InvertedUnit.d.ts.map +1 -1
- package/lib/esm/Metadata/InvertedUnit.js +6 -0
- package/lib/esm/Metadata/InvertedUnit.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/Mixin.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/lib/esm/Metadata/Phenomenon.js.map +1 -1
- package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
- package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
- package/lib/esm/Metadata/RelationshipClass.js +8 -3
- package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
- package/lib/esm/Metadata/Schema.d.ts +9 -0
- package/lib/esm/Metadata/Schema.d.ts.map +1 -1
- package/lib/esm/Metadata/Schema.js +74 -7
- package/lib/esm/Metadata/Schema.js.map +1 -1
- package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
- package/lib/esm/Metadata/Unit.js.map +1 -1
- package/lib/esm/Metadata/UnitSystem.js.map +1 -1
- package/lib/esm/SchemaKey.d.ts.map +1 -1
- package/lib/esm/SchemaKey.js +1 -5
- package/lib/esm/SchemaKey.js.map +1 -1
- package/lib/esm/UnitConversion/Graph.d.ts.map +1 -1
- package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts +1 -6
- package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
- package/lib/esm/UnitProvider/SchemaUnitProvider.js +100 -58
- package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
- package/package.json +10 -10
|
@@ -10,6 +10,7 @@ const ECObjects_1 = require("../ECObjects");
|
|
|
10
10
|
const Exception_1 = require("../Exception");
|
|
11
11
|
const ECName_1 = require("../ECName");
|
|
12
12
|
const AbstractParser_1 = require("./AbstractParser");
|
|
13
|
+
const Helper_1 = require("./Helper");
|
|
13
14
|
const NON_ITEM_SCHEMA_ELEMENTS = ["ECSchemaReference", "ECCustomAttributes"];
|
|
14
15
|
const ECXML_URI = "http://www\\.bentley\\.com/schemas/Bentley\\.ECXML";
|
|
15
16
|
/** @internal */
|
|
@@ -32,11 +33,12 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
32
33
|
const xmlNamespace = schemaInfo.getAttribute("xmlns");
|
|
33
34
|
if (xmlNamespace) {
|
|
34
35
|
this._xmlNamespace = xmlNamespace;
|
|
35
|
-
this.
|
|
36
|
+
this._ecSpecVersion = XmlParser.parseXmlNamespace(this._xmlNamespace);
|
|
36
37
|
}
|
|
37
38
|
this._schemaItems = new Map();
|
|
38
39
|
this._mapIsPopulated = false;
|
|
39
40
|
}
|
|
41
|
+
get getECSpecVersion() { return this._ecSpecVersion; }
|
|
40
42
|
parseSchema() {
|
|
41
43
|
const schemaMetadata = this._rawSchema.documentElement;
|
|
42
44
|
if ("ECSchema" !== schemaMetadata.nodeName)
|
|
@@ -50,7 +52,7 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
50
52
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `The ECSchema ${this._schemaName} is missing a required 'version' attribute`);
|
|
51
53
|
if (this._xmlNamespace === undefined)
|
|
52
54
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `The ECSchema ${this._schemaName} is missing a required 'xmlns' attribute`);
|
|
53
|
-
if (this.
|
|
55
|
+
if (this._ecSpecVersion === undefined)
|
|
54
56
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `The ECSchema ${this._schemaName} has an invalid 'xmlns' attribute`);
|
|
55
57
|
const alias = this.getRequiredAttribute(schemaMetadata, "alias", `The ECSchema ${this._schemaName} is missing a required 'alias' attribute`);
|
|
56
58
|
const description = this.getOptionalAttribute(schemaMetadata, "description");
|
|
@@ -62,6 +64,8 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
62
64
|
alias,
|
|
63
65
|
label: displayLabel,
|
|
64
66
|
description,
|
|
67
|
+
ecSpecMajorVersion: this._ecSpecVersion.readVersion,
|
|
68
|
+
ecSpecMinorVersion: this._ecSpecVersion.writeVersion,
|
|
65
69
|
};
|
|
66
70
|
return schemaProps;
|
|
67
71
|
}
|
|
@@ -87,8 +91,11 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
87
91
|
rawItemType = "Mixin";
|
|
88
92
|
}
|
|
89
93
|
const itemType = this.getSchemaItemType(rawItemType);
|
|
90
|
-
if (itemType === undefined)
|
|
94
|
+
if (itemType === undefined) {
|
|
95
|
+
if (Helper_1.SchemaReadHelper.isECSpecVersionNewer(this._ecSpecVersion))
|
|
96
|
+
continue;
|
|
91
97
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `A SchemaItem in ${this._schemaName} has an invalid type. '${rawItemType}' is not a valid SchemaItem type.`);
|
|
98
|
+
}
|
|
92
99
|
const itemName = this.getRequiredAttribute(item, "typeName", `A SchemaItem in ${this._schemaName} is missing the required 'typeName' attribute.`);
|
|
93
100
|
if (!ECName_1.ECName.validate(itemName))
|
|
94
101
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECName, `A SchemaItem in ${this._schemaName} has an invalid 'typeName' attribute. '${itemName}' is not a valid ECName.`);
|
|
@@ -221,12 +228,18 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
221
228
|
// TODO: This shouldn't be verified here. It's for the deserialize method to handle. The only reason it's currently done here so that the xml
|
|
222
229
|
// value can be put in the correct type, number or string.
|
|
223
230
|
let tempBackingType;
|
|
224
|
-
if (/int/i.test(enumType))
|
|
231
|
+
if (/int/i.test(enumType)) {
|
|
225
232
|
tempBackingType = ECObjects_1.PrimitiveType.Integer;
|
|
226
|
-
|
|
233
|
+
}
|
|
234
|
+
else if (/string/i.test(enumType)) {
|
|
227
235
|
tempBackingType = ECObjects_1.PrimitiveType.String;
|
|
228
|
-
|
|
229
|
-
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
if (Helper_1.SchemaReadHelper.isECSpecVersionNewer(this._ecSpecVersion))
|
|
239
|
+
tempBackingType = ECObjects_1.PrimitiveType.String;
|
|
240
|
+
else
|
|
241
|
+
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this._currentItemFullName} has an invalid 'backingTypeName' attribute. It should be either "int" or "string".`);
|
|
242
|
+
}
|
|
230
243
|
let isStrictString = this.getOptionalAttribute(xmlElement, "isStrict");
|
|
231
244
|
if (isStrictString === undefined)
|
|
232
245
|
isStrictString = "true";
|
|
@@ -257,6 +270,8 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
257
270
|
type: enumType,
|
|
258
271
|
isStrict,
|
|
259
272
|
enumerators,
|
|
273
|
+
originalECSpecMajorVersion: this._ecSpecVersion?.readVersion,
|
|
274
|
+
originalECSpecMinorVersion: this._ecSpecVersion?.writeVersion,
|
|
260
275
|
};
|
|
261
276
|
}
|
|
262
277
|
parseKindOfQuantity(xmlElement) {
|
|
@@ -619,6 +634,8 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
619
634
|
...itemProps,
|
|
620
635
|
modifier,
|
|
621
636
|
baseClass,
|
|
637
|
+
originalECSpecMajorVersion: this._ecSpecVersion?.readVersion,
|
|
638
|
+
originalECSpecMinorVersion: this._ecSpecVersion?.writeVersion,
|
|
622
639
|
};
|
|
623
640
|
}
|
|
624
641
|
getRelationshipConstraintProps(xmlElement, isSource) {
|
|
@@ -750,14 +767,14 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
750
767
|
}
|
|
751
768
|
}
|
|
752
769
|
getCustomAttributeProvider(xmlCustomAttribute) {
|
|
753
|
-
(0, core_bentley_1.assert)(this.
|
|
770
|
+
(0, core_bentley_1.assert)(this._ecSpecVersion !== undefined);
|
|
754
771
|
let ns = xmlCustomAttribute.getAttribute("xmlns");
|
|
755
772
|
if (!ns) {
|
|
756
773
|
(0, core_bentley_1.assert)(this._schemaName !== undefined);
|
|
757
774
|
(0, core_bentley_1.assert)(this._schemaVersion !== undefined);
|
|
758
775
|
ns = `${this._schemaName}.${this._schemaVersion}`;
|
|
759
776
|
}
|
|
760
|
-
if (null === ns || !this.isSchemaFullNameValidForVersion(ns, this.
|
|
777
|
+
if (null === ns || !this.isSchemaFullNameValidForVersion(ns, this._ecSpecVersion))
|
|
761
778
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `Custom attribute namespaces must contain a valid 3.2 full schema name in the form <schemaName>.RR.ww.mm.`);
|
|
762
779
|
const schemaNameParts = ns.split(".");
|
|
763
780
|
const className = `${schemaNameParts[0]}.${xmlCustomAttribute.tagName}`;
|
|
@@ -835,7 +852,9 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
835
852
|
return structObj;
|
|
836
853
|
}
|
|
837
854
|
readPrimitivePropertyValue(propElement, primitiveType) {
|
|
838
|
-
if (
|
|
855
|
+
if (undefined === propElement.textContent || null === propElement.textContent)
|
|
856
|
+
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `Primitive property '${propElement.tagName}' has an invalid property value.`);
|
|
857
|
+
if (propElement.textContent === "" && primitiveType !== ECObjects_1.PrimitiveType.String)
|
|
839
858
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `Primitive property '${propElement.tagName}' has an invalid property value.`);
|
|
840
859
|
// TODO: Mapping all primitive types to string, number and boolean
|
|
841
860
|
// for now. Need to review with IModelJs.
|
|
@@ -913,9 +932,9 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
913
932
|
throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidSchemaXML, `Property '${propName}' has an invalid property value. A Point 3D value was expected.`);
|
|
914
933
|
return { x, y, z };
|
|
915
934
|
}
|
|
916
|
-
isSchemaFullNameValidForVersion(schemaFullName,
|
|
935
|
+
isSchemaFullNameValidForVersion(schemaFullName, ecSpecVersion) {
|
|
917
936
|
const schemaNameParts = schemaFullName.split(".");
|
|
918
|
-
if ((
|
|
937
|
+
if ((ecSpecVersion.readVersion >= 3 && ecSpecVersion.writeVersion >= 2) || ecSpecVersion.readVersion > 3) {
|
|
919
938
|
if (schemaNameParts.length < 4)
|
|
920
939
|
return false;
|
|
921
940
|
}
|
|
@@ -925,7 +944,7 @@ class XmlParser extends AbstractParser_1.AbstractParser {
|
|
|
925
944
|
}
|
|
926
945
|
return true;
|
|
927
946
|
}
|
|
928
|
-
parseXmlNamespace(xmlNamespace) {
|
|
947
|
+
static parseXmlNamespace(xmlNamespace) {
|
|
929
948
|
const regEx = new RegExp(`^${ECXML_URI}\\.([0-9]+)\\.([0-9]+)$`);
|
|
930
949
|
const match = xmlNamespace.match(regEx);
|
|
931
950
|
if (!match)
|