@itwin/ecschema-metadata 4.10.0-dev.9 → 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.
Files changed (151) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/lib/cjs/DelayedPromise.d.ts.map +1 -1
  3. package/lib/cjs/Deserialization/AbstractParser.d.ts +3 -0
  4. package/lib/cjs/Deserialization/AbstractParser.d.ts.map +1 -1
  5. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  6. package/lib/cjs/Deserialization/Helper.d.ts +9 -0
  7. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  8. package/lib/cjs/Deserialization/Helper.js +24 -6
  9. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  10. package/lib/cjs/Deserialization/JsonParser.d.ts +3 -0
  11. package/lib/cjs/Deserialization/JsonParser.d.ts.map +1 -1
  12. package/lib/cjs/Deserialization/JsonParser.js +55 -9
  13. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  14. package/lib/cjs/Deserialization/JsonProps.d.ts +4 -0
  15. package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
  16. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  17. package/lib/cjs/Deserialization/XmlParser.d.ts +3 -2
  18. package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
  19. package/lib/cjs/Deserialization/XmlParser.js +32 -13
  20. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  21. package/lib/cjs/ECObjects.d.ts.map +1 -1
  22. package/lib/cjs/ECObjects.js +24 -21
  23. package/lib/cjs/ECObjects.js.map +1 -1
  24. package/lib/cjs/Exception.d.ts +2 -1
  25. package/lib/cjs/Exception.d.ts.map +1 -1
  26. package/lib/cjs/Exception.js +1 -0
  27. package/lib/cjs/Exception.js.map +1 -1
  28. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  29. package/lib/cjs/Metadata/Class.js +10 -3
  30. package/lib/cjs/Metadata/Class.js.map +1 -1
  31. package/lib/cjs/Metadata/Constant.js.map +1 -1
  32. package/lib/cjs/Metadata/CustomAttribute.js +1 -2
  33. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  34. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  35. package/lib/cjs/Metadata/EntityClass.js +3 -3
  36. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  37. package/lib/cjs/Metadata/Enumeration.d.ts.map +1 -1
  38. package/lib/cjs/Metadata/Enumeration.js +11 -4
  39. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  40. package/lib/cjs/Metadata/Format.d.ts.map +1 -1
  41. package/lib/cjs/Metadata/Format.js +6 -6
  42. package/lib/cjs/Metadata/Format.js.map +1 -1
  43. package/lib/cjs/Metadata/InvertedUnit.d.ts +4 -0
  44. package/lib/cjs/Metadata/InvertedUnit.d.ts.map +1 -1
  45. package/lib/cjs/Metadata/InvertedUnit.js +6 -0
  46. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  47. package/lib/cjs/Metadata/KindOfQuantity.d.ts +0 -4
  48. package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
  49. package/lib/cjs/Metadata/KindOfQuantity.js +2 -54
  50. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  51. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  52. package/lib/cjs/Metadata/OverrideFormat.d.ts +12 -0
  53. package/lib/cjs/Metadata/OverrideFormat.d.ts.map +1 -1
  54. package/lib/cjs/Metadata/OverrideFormat.js +55 -2
  55. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  56. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  57. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  58. package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
  59. package/lib/cjs/Metadata/RelationshipClass.js +8 -3
  60. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  61. package/lib/cjs/Metadata/Schema.d.ts +9 -0
  62. package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
  63. package/lib/cjs/Metadata/Schema.js +74 -7
  64. package/lib/cjs/Metadata/Schema.js.map +1 -1
  65. package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
  66. package/lib/cjs/Metadata/Unit.js.map +1 -1
  67. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  68. package/lib/cjs/PropertyTypes.js +2 -2
  69. package/lib/cjs/PropertyTypes.js.map +1 -1
  70. package/lib/cjs/SchemaKey.d.ts.map +1 -1
  71. package/lib/cjs/SchemaKey.js +1 -5
  72. package/lib/cjs/SchemaKey.js.map +1 -1
  73. package/lib/cjs/UnitConversion/Graph.d.ts.map +1 -1
  74. package/lib/cjs/UnitConversion/Parser.js +1 -2
  75. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  76. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts +1 -6
  77. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  78. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +100 -58
  79. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  80. package/lib/esm/DelayedPromise.d.ts.map +1 -1
  81. package/lib/esm/Deserialization/AbstractParser.d.ts +3 -0
  82. package/lib/esm/Deserialization/AbstractParser.d.ts.map +1 -1
  83. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  84. package/lib/esm/Deserialization/Helper.d.ts +9 -0
  85. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  86. package/lib/esm/Deserialization/Helper.js +24 -6
  87. package/lib/esm/Deserialization/Helper.js.map +1 -1
  88. package/lib/esm/Deserialization/JsonParser.d.ts +3 -0
  89. package/lib/esm/Deserialization/JsonParser.d.ts.map +1 -1
  90. package/lib/esm/Deserialization/JsonParser.js +55 -9
  91. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  92. package/lib/esm/Deserialization/JsonProps.d.ts +4 -0
  93. package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
  94. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  95. package/lib/esm/Deserialization/XmlParser.d.ts +3 -2
  96. package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
  97. package/lib/esm/Deserialization/XmlParser.js +32 -13
  98. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  99. package/lib/esm/ECObjects.d.ts.map +1 -1
  100. package/lib/esm/ECObjects.js +8 -5
  101. package/lib/esm/ECObjects.js.map +1 -1
  102. package/lib/esm/Exception.d.ts +2 -1
  103. package/lib/esm/Exception.d.ts.map +1 -1
  104. package/lib/esm/Exception.js +1 -0
  105. package/lib/esm/Exception.js.map +1 -1
  106. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  107. package/lib/esm/Metadata/Class.js +10 -3
  108. package/lib/esm/Metadata/Class.js.map +1 -1
  109. package/lib/esm/Metadata/Constant.js.map +1 -1
  110. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  111. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  112. package/lib/esm/Metadata/Enumeration.d.ts.map +1 -1
  113. package/lib/esm/Metadata/Enumeration.js +11 -4
  114. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  115. package/lib/esm/Metadata/Format.d.ts.map +1 -1
  116. package/lib/esm/Metadata/Format.js +7 -7
  117. package/lib/esm/Metadata/Format.js.map +1 -1
  118. package/lib/esm/Metadata/InvertedUnit.d.ts +4 -0
  119. package/lib/esm/Metadata/InvertedUnit.d.ts.map +1 -1
  120. package/lib/esm/Metadata/InvertedUnit.js +6 -0
  121. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  122. package/lib/esm/Metadata/KindOfQuantity.d.ts +0 -4
  123. package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
  124. package/lib/esm/Metadata/KindOfQuantity.js +2 -54
  125. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  126. package/lib/esm/Metadata/Mixin.js.map +1 -1
  127. package/lib/esm/Metadata/OverrideFormat.d.ts +12 -0
  128. package/lib/esm/Metadata/OverrideFormat.d.ts.map +1 -1
  129. package/lib/esm/Metadata/OverrideFormat.js +53 -0
  130. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  131. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  132. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  133. package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
  134. package/lib/esm/Metadata/RelationshipClass.js +8 -3
  135. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  136. package/lib/esm/Metadata/Schema.d.ts +9 -0
  137. package/lib/esm/Metadata/Schema.d.ts.map +1 -1
  138. package/lib/esm/Metadata/Schema.js +74 -7
  139. package/lib/esm/Metadata/Schema.js.map +1 -1
  140. package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
  141. package/lib/esm/Metadata/Unit.js.map +1 -1
  142. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  143. package/lib/esm/SchemaKey.d.ts.map +1 -1
  144. package/lib/esm/SchemaKey.js +1 -5
  145. package/lib/esm/SchemaKey.js.map +1 -1
  146. package/lib/esm/UnitConversion/Graph.d.ts.map +1 -1
  147. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts +1 -6
  148. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  149. package/lib/esm/UnitProvider/SchemaUnitProvider.js +100 -58
  150. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  151. 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._ecXmlVersion = this.parseXmlNamespace(this._xmlNamespace);
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._ecXmlVersion === undefined)
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
- else if (/string/i.test(enumType))
233
+ }
234
+ else if (/string/i.test(enumType)) {
227
235
  tempBackingType = ECObjects_1.PrimitiveType.String;
228
- else
229
- 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".`);
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._ecXmlVersion !== undefined);
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._ecXmlVersion))
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 (!propElement.textContent)
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, ecXmlVersion) {
935
+ isSchemaFullNameValidForVersion(schemaFullName, ecSpecVersion) {
917
936
  const schemaNameParts = schemaFullName.split(".");
918
- if ((ecXmlVersion.readVersion >= 3 && ecXmlVersion.writeVersion >= 2) || ecXmlVersion.readVersion > 3) {
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)