@itwin/ecschema-metadata 5.9.0-dev.9 → 5.9.1

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 (148) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/lib/cjs/Deserialization/Helper.d.ts +1 -1
  3. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  4. package/lib/cjs/Deserialization/Helper.js +35 -21
  5. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  6. package/lib/cjs/Deserialization/JsonParser.js +7 -7
  7. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  8. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  9. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  10. package/lib/cjs/Deserialization/XmlSerializationUtils.js +1 -1
  11. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  12. package/lib/cjs/ECObjects.js.map +1 -1
  13. package/lib/cjs/Formatting/FormatSetFormatsProvider.d.ts +3 -2
  14. package/lib/cjs/Formatting/FormatSetFormatsProvider.d.ts.map +1 -1
  15. package/lib/cjs/Formatting/FormatSetFormatsProvider.js +7 -6
  16. package/lib/cjs/Formatting/FormatSetFormatsProvider.js.map +1 -1
  17. package/lib/cjs/Formatting/SchemaFormatsProvider.d.ts +1 -1
  18. package/lib/cjs/Formatting/SchemaFormatsProvider.d.ts.map +1 -1
  19. package/lib/cjs/Formatting/SchemaFormatsProvider.js +6 -5
  20. package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
  21. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  22. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js +1 -1
  23. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  24. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  25. package/lib/cjs/Metadata/Class.js +6 -4
  26. package/lib/cjs/Metadata/Class.js.map +1 -1
  27. package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
  28. package/lib/cjs/Metadata/EntityClass.js +2 -2
  29. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  30. package/lib/cjs/Metadata/InvertedUnit.js +2 -2
  31. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  32. package/lib/cjs/Metadata/KindOfQuantity.js +1 -1
  33. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  34. package/lib/cjs/Metadata/Property.d.ts.map +1 -1
  35. package/lib/cjs/Metadata/Property.js +6 -3
  36. package/lib/cjs/Metadata/Property.js.map +1 -1
  37. package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
  38. package/lib/cjs/Metadata/RelationshipClass.js +5 -4
  39. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  40. package/lib/cjs/Metadata/Schema.js +1 -1
  41. package/lib/cjs/Metadata/Schema.js.map +1 -1
  42. package/lib/cjs/Metadata/SchemaItem.js +2 -2
  43. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  44. package/lib/cjs/Metadata/Unit.js +2 -2
  45. package/lib/cjs/Metadata/Unit.js.map +1 -1
  46. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  47. package/lib/cjs/UnitConversion/UnitConverter.d.ts +1 -1
  48. package/lib/cjs/UnitConversion/UnitConverter.d.ts.map +1 -1
  49. package/lib/cjs/UnitConversion/UnitConverter.js +4 -4
  50. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  51. package/lib/cjs/UnitConversion/UnitTree.d.ts +3 -4
  52. package/lib/cjs/UnitConversion/UnitTree.d.ts.map +1 -1
  53. package/lib/cjs/UnitConversion/UnitTree.js +11 -11
  54. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  55. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts +3 -0
  56. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  57. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +3 -0
  58. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  59. package/lib/cjs/ecschema-metadata.d.ts +0 -1
  60. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  61. package/lib/cjs/ecschema-metadata.js +0 -1
  62. package/lib/cjs/ecschema-metadata.js.map +1 -1
  63. package/lib/esm/Deserialization/Helper.d.ts +1 -1
  64. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  65. package/lib/esm/Deserialization/Helper.js +35 -21
  66. package/lib/esm/Deserialization/Helper.js.map +1 -1
  67. package/lib/esm/Deserialization/JsonParser.js +7 -7
  68. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  69. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  70. package/lib/esm/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  71. package/lib/esm/Deserialization/XmlSerializationUtils.js +1 -1
  72. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  73. package/lib/esm/ECObjects.js.map +1 -1
  74. package/lib/esm/Formatting/FormatSetFormatsProvider.d.ts +3 -2
  75. package/lib/esm/Formatting/FormatSetFormatsProvider.d.ts.map +1 -1
  76. package/lib/esm/Formatting/FormatSetFormatsProvider.js +7 -6
  77. package/lib/esm/Formatting/FormatSetFormatsProvider.js.map +1 -1
  78. package/lib/esm/Formatting/SchemaFormatsProvider.d.ts +1 -1
  79. package/lib/esm/Formatting/SchemaFormatsProvider.d.ts.map +1 -1
  80. package/lib/esm/Formatting/SchemaFormatsProvider.js +6 -5
  81. package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
  82. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  83. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js +1 -1
  84. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  85. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  86. package/lib/esm/Metadata/Class.js +6 -4
  87. package/lib/esm/Metadata/Class.js.map +1 -1
  88. package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
  89. package/lib/esm/Metadata/EntityClass.js +2 -2
  90. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  91. package/lib/esm/Metadata/InvertedUnit.js +2 -2
  92. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  93. package/lib/esm/Metadata/KindOfQuantity.js +1 -1
  94. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  95. package/lib/esm/Metadata/Property.d.ts.map +1 -1
  96. package/lib/esm/Metadata/Property.js +6 -3
  97. package/lib/esm/Metadata/Property.js.map +1 -1
  98. package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
  99. package/lib/esm/Metadata/RelationshipClass.js +5 -4
  100. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  101. package/lib/esm/Metadata/Schema.js +1 -1
  102. package/lib/esm/Metadata/Schema.js.map +1 -1
  103. package/lib/esm/Metadata/SchemaItem.js +2 -2
  104. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  105. package/lib/esm/Metadata/Unit.js +2 -2
  106. package/lib/esm/Metadata/Unit.js.map +1 -1
  107. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  108. package/lib/esm/UnitConversion/UnitConverter.d.ts +1 -1
  109. package/lib/esm/UnitConversion/UnitConverter.d.ts.map +1 -1
  110. package/lib/esm/UnitConversion/UnitConverter.js +1 -1
  111. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  112. package/lib/esm/UnitConversion/UnitTree.d.ts +3 -4
  113. package/lib/esm/UnitConversion/UnitTree.d.ts.map +1 -1
  114. package/lib/esm/UnitConversion/UnitTree.js +6 -6
  115. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  116. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts +3 -0
  117. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  118. package/lib/esm/UnitProvider/SchemaUnitProvider.js +3 -0
  119. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  120. package/lib/esm/ecschema-metadata.d.ts +0 -1
  121. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  122. package/lib/esm/ecschema-metadata.js +0 -1
  123. package/lib/esm/ecschema-metadata.js.map +1 -1
  124. package/package.json +7 -7
  125. package/lib/cjs/UnitConversion/Graph.d.ts +0 -35
  126. package/lib/cjs/UnitConversion/Graph.d.ts.map +0 -1
  127. package/lib/cjs/UnitConversion/Graph.js +0 -88
  128. package/lib/cjs/UnitConversion/Graph.js.map +0 -1
  129. package/lib/cjs/UnitConversion/Parser.d.ts +0 -9
  130. package/lib/cjs/UnitConversion/Parser.d.ts.map +0 -1
  131. package/lib/cjs/UnitConversion/Parser.js +0 -42
  132. package/lib/cjs/UnitConversion/Parser.js.map +0 -1
  133. package/lib/cjs/UnitConversion/UnitConversion.d.ts +0 -46
  134. package/lib/cjs/UnitConversion/UnitConversion.d.ts.map +0 -1
  135. package/lib/cjs/UnitConversion/UnitConversion.js +0 -76
  136. package/lib/cjs/UnitConversion/UnitConversion.js.map +0 -1
  137. package/lib/esm/UnitConversion/Graph.d.ts +0 -35
  138. package/lib/esm/UnitConversion/Graph.d.ts.map +0 -1
  139. package/lib/esm/UnitConversion/Graph.js +0 -84
  140. package/lib/esm/UnitConversion/Graph.js.map +0 -1
  141. package/lib/esm/UnitConversion/Parser.d.ts +0 -9
  142. package/lib/esm/UnitConversion/Parser.d.ts.map +0 -1
  143. package/lib/esm/UnitConversion/Parser.js +0 -39
  144. package/lib/esm/UnitConversion/Parser.js.map +0 -1
  145. package/lib/esm/UnitConversion/UnitConversion.d.ts +0 -46
  146. package/lib/esm/UnitConversion/UnitConversion.d.ts.map +0 -1
  147. package/lib/esm/UnitConversion/UnitConversion.js +0 -72
  148. package/lib/esm/UnitConversion/UnitConversion.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaItem.js","sourceRoot":"","sources":["../../../src/Metadata/SchemaItem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { ECSchemaNamespaceUris } from \"../Constants\";\nimport { SchemaItemProps } from \"../Deserialization/JsonProps\";\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\nimport { AbstractSchemaItemType, SchemaItemType, schemaItemTypeToXmlString, SupportedSchemaItemType } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { ECVersion, SchemaItemKey } from \"../SchemaKey\";\nimport { Schema } from \"./Schema\";\n\n/**\n * An abstract class that supplies all of the common parts of a SchemaItem.\n * @public @preview\n */\nexport abstract class SchemaItem {\n /**\n * Get the type of item represented by this class\n * @internal\n */\n public static get schemaItemType(): SupportedSchemaItemType { return AbstractSchemaItemType.SchemaItem }\n\n /**\n * Get the type of item represented by this instance\n */\n public abstract get schemaItemType(): SchemaItemType;\n public readonly schema: Schema;\n private _key: SchemaItemKey;\n private _description?: string;\n private _label?: string;\n private _loadingController?: SchemaLoadingController;\n\n /** @internal */\n constructor(schema: Schema, name: string) {\n this._key = new SchemaItemKey(name, schema.schemaKey);\n this.schema = schema;\n }\n\n public get name() { return this.key.name; }\n public get fullName() { return this.key.schemaKey ? `${this.key.schemaName}.${this.name}` : this.name; }\n public get key() { return this._key; }\n public get label() { return this._label; }\n public get description() { return this._description; }\n\n /**\n * Returns the SchemaLoadingController for this Schema. This would only be set if the schema is\n * loaded incrementally.\n * @internal\n */\n public get loadingController(): SchemaLoadingController | undefined{\n return this._loadingController;\n }\n\n // Proposal: Create protected setter methods for description and label? For UnitSystems as an example, where using createFromProps isn't that necessary and can just use basic create().\n /**\n * Save this SchemaItem's properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false) {\n const itemJson: { [value: string]: any } = {};\n if (standalone) {\n itemJson.$schema = ECSchemaNamespaceUris.SCHEMAITEMURL3_2; // $schema is required\n itemJson.schema = this.schema.name;\n itemJson.name = this.name; // name is required\n if (includeSchemaVersion) // check flag to see if we should output version\n itemJson.schemaVersion = this.key.schemaKey.version.toString();\n }\n itemJson.schemaItemType = this.schemaItemType;\n if (undefined !== this.label)\n itemJson.label = this.label;\n if (undefined !== this.description)\n itemJson.description = this.description;\n\n return itemJson as SchemaItemProps;\n }\n\n /** @internal */\n public async toXml(schemaXml: Document): Promise<Element> {\n const itemType = schemaItemTypeToXmlString(this.schemaItemType);\n const itemElement = schemaXml.createElement(itemType);\n itemElement.setAttribute(\"typeName\", this.name);\n if (undefined !== this.label)\n itemElement.setAttribute(\"displayLabel\", this.label);\n if (undefined !== this.description)\n itemElement.setAttribute(\"description\", this.description);\n\n // When all schema items support custom attributes they should be added here rather than in ECClass\n\n return itemElement;\n }\n\n public fromJSONSync(schemaItemProps: SchemaItemProps) {\n if (undefined !== schemaItemProps.label)\n this._label = schemaItemProps.label;\n\n this._description = schemaItemProps.description;\n\n if (undefined !== schemaItemProps.schema) {\n if (schemaItemProps.schema.toLowerCase() !== this.schema.name.toLowerCase())\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema name, ${schemaItemProps.schema}, than the current Schema of this SchemaItem, ${this.schema.fullName}.`);\n }\n\n if (undefined !== schemaItemProps.schemaVersion) {\n if (this.key.schemaKey.version.compare(ECVersion.fromString(schemaItemProps.schemaVersion)))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema version, ${schemaItemProps.schemaVersion}, than the current Schema version of this SchemaItem, ${this.key.schemaKey.version}.`);\n }\n }\n\n public async fromJSON(schemaItemProps: SchemaItemProps) {\n if (undefined !== schemaItemProps.label)\n this._label = schemaItemProps.label;\n\n this._description = schemaItemProps.description;\n\n if (undefined !== schemaItemProps.schema) {\n if (schemaItemProps.schema.toLowerCase() !== this.schema.name.toLowerCase())\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem ${this.fullName}' with a different schema name, ${schemaItemProps.schema}, than the current Schema of this SchemaItem, ${this.schema.fullName}`);\n }\n\n if (undefined !== schemaItemProps.schemaVersion) {\n if (this.key.schemaKey.version.compare(ECVersion.fromString(schemaItemProps.schemaVersion)))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema version, ${schemaItemProps.schemaVersion}, than the current Schema version of this SchemaItem, ${this.key.schemaKey.version}.`);\n }\n }\n\n /**\n * Parses the given full name, {schemaName}.{schemaItemName} or {schemaName}:{schemaItemName}, into two separate strings.\n * @note The schema name can be a schema alias.\n * @param fullName The full name to be parsed.\n * @returns A tuple of the parsed Schema name and Schema Item name. If the full name does not contain a '.' or ':', the second string in the tuple will returned the exact string pass in.\n */\n public static parseFullName(fullName: string): [string, string] {\n const matches = /^([a-zA-Z_]+[a-zA-Z0-9_]*(\\.\\d+\\.\\d+\\.\\d+)?)[.:]([a-zA-Z_]+[a-zA-Z0-9_]*)$/.exec(fullName);\n\n // The first match will be the full string match, the second three will be the three groups\n if (matches === null || matches.length !== 4)\n return [\"\", fullName];\n\n return [matches[1], matches[3]];\n }\n\n /**\n * Indicates if the two SchemaItem objects are equal by comparing their respective [[key]] properties.\n * @param thisSchemaItem The first SchemaItem.\n * @param thatSchemaItemOrKey The second SchemaItem or SchemaItemKey.\n */\n public static equalByKey(thisSchemaItem: SchemaItem, thatSchemaItemOrKey?: SchemaItem | SchemaItemKey): boolean {\n if (!thatSchemaItemOrKey)\n return true;\n SchemaItemType.EntityClass\n const key = SchemaItem.isSchemaItem(thatSchemaItemOrKey) ? thatSchemaItemOrKey.key : thatSchemaItemOrKey;\n return thisSchemaItem.key.matches(key);\n }\n\n /**\n * @internal\n */\n public static isSchemaItem(item: unknown): item is SchemaItem {\n const schemaItem = item as Partial<SchemaItem>;\n\n return schemaItem !== undefined && schemaItem.key !== undefined && schemaItem.schema !== undefined\n && schemaItem.schemaItemType !== undefined;\n }\n\n /** @internal */\n protected setName(name: string) {\n this._key = new SchemaItemKey(name, this.schema.schemaKey);\n }\n\n /** @internal */\n protected setDisplayLabel(displayLabel: string) {\n this._label = displayLabel;\n }\n\n /** @internal */\n protected setDescription(description: string) {\n this._description = description;\n }\n\n /** @internal */\n public setLoadingController(controller: SchemaLoadingController) {\n this._loadingController = controller;\n }\n}\n\n"]}
1
+ {"version":3,"file":"SchemaItem.js","sourceRoot":"","sources":["../../../src/Metadata/SchemaItem.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,yBAAyB,EAA2B,MAAM,cAAc,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGxD;;;GAGG;AACH,MAAM,OAAgB,UAAU;IAC9B;;;OAGG;IACI,MAAM,KAAK,cAAc,KAA8B,OAAO,sBAAsB,CAAC,UAAU,CAAA,CAAC,CAAC;IAMxF,MAAM,CAAS;IACvB,IAAI,CAAgB;IACpB,YAAY,CAAU;IACtB,MAAM,CAAU;IAChB,kBAAkB,CAA2B;IAErD,gBAAgB;IAChB,YAAY,MAAc,EAAE,IAAY;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,IAAW,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAW,WAAW,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtD;;;;OAIG;IACH,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,wLAAwL;IACxL;;;;OAIG;IACI,MAAM,CAAC,aAAsB,KAAK,EAAE,uBAAgC,KAAK;QAC9E,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,sBAAsB;YACjF,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,mBAAmB;YAC9C,IAAI,oBAAoB,EAAE,gDAAgD;gBACxE,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnE,CAAC;QACD,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9C,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK;YAC1B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAE1C,OAAO,QAA2B,CAAC;IACrC,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,KAAK,CAAC,SAAmB;QACpC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtD,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK;YAC1B,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5D,mGAAmG;QAEnG,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,YAAY,CAAC,eAAgC;QAClD,IAAI,SAAS,KAAK,eAAe,CAAC,KAAK;YACrC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;QAEtC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC;QAEhD,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;gBACzE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,yCAAyC,IAAI,CAAC,QAAQ,mCAAmC,eAAe,CAAC,MAAM,iDAAiD,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnP,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBACzF,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,yCAAyC,IAAI,CAAC,QAAQ,sCAAsC,eAAe,CAAC,aAAa,yDAAyD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtR,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,eAAgC;QACpD,IAAI,SAAS,KAAK,eAAe,CAAC,KAAK;YACrC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;QAEtC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC;QAEhD,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;gBACzE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,wCAAwC,IAAI,CAAC,QAAQ,mCAAmC,eAAe,CAAC,MAAM,iDAAiD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjP,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBACzF,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,yCAAyC,IAAI,CAAC,QAAQ,sCAAsC,eAAe,CAAC,aAAa,yDAAyD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtR,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC1C,MAAM,OAAO,GAAG,4EAA4E,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5G,2FAA2F;QAC3F,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAC1C,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAExB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,UAAU,CAAC,cAA0B,EAAE,mBAAgD;QACnG,IAAI,CAAC,mBAAmB;YACtB,OAAO,IAAI,CAAC;QACd,cAAc,CAAC,WAAW,CAAA;QAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACzG,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;MAEE;IACK,MAAM,CAAC,YAAY,CAAC,IAAa;QACtC,MAAM,UAAU,GAAG,IAA2B,CAAC;QAE/C,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;eAC7F,UAAU,CAAC,cAAc,KAAK,SAAS,CAAC;IAC/C,CAAC;IAED,gBAAgB;IACN,OAAO,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB;IACN,eAAe,CAAC,YAAoB;QAC5C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;IAC7B,CAAC;IAED,gBAAgB;IACN,cAAc,CAAC,WAAmB;QAC1C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,gBAAgB;IACT,oBAAoB,CAAC,UAAmC;QAC7D,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACvC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { ECSchemaNamespaceUris } from \"../Constants\";\nimport { SchemaItemProps } from \"../Deserialization/JsonProps\";\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\nimport { AbstractSchemaItemType, SchemaItemType, schemaItemTypeToXmlString, SupportedSchemaItemType } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { ECVersion, SchemaItemKey } from \"../SchemaKey\";\nimport { Schema } from \"./Schema\";\n\n/**\n * An abstract class that supplies all of the common parts of a SchemaItem.\n * @public @preview\n */\nexport abstract class SchemaItem {\n /**\n * Get the type of item represented by this class\n * @internal\n */\n public static get schemaItemType(): SupportedSchemaItemType { return AbstractSchemaItemType.SchemaItem }\n\n /**\n * Get the type of item represented by this instance\n */\n public abstract get schemaItemType(): SchemaItemType;\n public readonly schema: Schema;\n private _key: SchemaItemKey;\n private _description?: string;\n private _label?: string;\n private _loadingController?: SchemaLoadingController;\n\n /** @internal */\n constructor(schema: Schema, name: string) {\n this._key = new SchemaItemKey(name, schema.schemaKey);\n this.schema = schema;\n }\n\n public get name() { return this.key.name; }\n public get fullName() { return this.key.schemaKey ? `${this.key.schemaName}.${this.name}` : this.name; }\n public get key() { return this._key; }\n public get label() { return this._label; }\n public get description() { return this._description; }\n\n /**\n * Returns the SchemaLoadingController for this Schema. This would only be set if the schema is\n * loaded incrementally.\n * @internal\n */\n public get loadingController(): SchemaLoadingController | undefined {\n return this._loadingController;\n }\n\n // Proposal: Create protected setter methods for description and label? For UnitSystems as an example, where using createFromProps isn't that necessary and can just use basic create().\n /**\n * Save this SchemaItem's properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false) {\n const itemJson: { [value: string]: any } = {};\n if (standalone) {\n itemJson.$schema = ECSchemaNamespaceUris.SCHEMAITEMURL3_2; // $schema is required\n itemJson.schema = this.schema.name;\n itemJson.name = this.name; // name is required\n if (includeSchemaVersion) // check flag to see if we should output version\n itemJson.schemaVersion = this.key.schemaKey.version.toString();\n }\n itemJson.schemaItemType = this.schemaItemType;\n if (undefined !== this.label)\n itemJson.label = this.label;\n if (undefined !== this.description)\n itemJson.description = this.description;\n\n return itemJson as SchemaItemProps;\n }\n\n /** @internal */\n public async toXml(schemaXml: Document): Promise<Element> {\n const itemType = schemaItemTypeToXmlString(this.schemaItemType);\n const itemElement = schemaXml.createElement(itemType);\n itemElement.setAttribute(\"typeName\", this.name);\n if (undefined !== this.label)\n itemElement.setAttribute(\"displayLabel\", this.label);\n if (undefined !== this.description)\n itemElement.setAttribute(\"description\", this.description);\n\n // When all schema items support custom attributes they should be added here rather than in ECClass\n\n return itemElement;\n }\n\n public fromJSONSync(schemaItemProps: SchemaItemProps) {\n if (undefined !== schemaItemProps.label)\n this._label = schemaItemProps.label;\n\n this._description = schemaItemProps.description;\n\n if (undefined !== schemaItemProps.schema) {\n if (schemaItemProps.schema.toLowerCase() !== this.schema.name.toLowerCase())\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema name, ${schemaItemProps.schema}, than the current Schema of this SchemaItem, ${this.schema.fullName}.`);\n }\n\n if (undefined !== schemaItemProps.schemaVersion) {\n if (this.key.schemaKey.version.compare(ECVersion.fromString(schemaItemProps.schemaVersion)))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema version, ${schemaItemProps.schemaVersion}, than the current Schema version of this SchemaItem, ${this.key.schemaKey.version.toString()}.`);\n }\n }\n\n public async fromJSON(schemaItemProps: SchemaItemProps) {\n if (undefined !== schemaItemProps.label)\n this._label = schemaItemProps.label;\n\n this._description = schemaItemProps.description;\n\n if (undefined !== schemaItemProps.schema) {\n if (schemaItemProps.schema.toLowerCase() !== this.schema.name.toLowerCase())\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem ${this.fullName}' with a different schema name, ${schemaItemProps.schema}, than the current Schema of this SchemaItem, ${this.schema.fullName}`);\n }\n\n if (undefined !== schemaItemProps.schemaVersion) {\n if (this.key.schemaKey.version.compare(ECVersion.fromString(schemaItemProps.schemaVersion)))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to deserialize the SchemaItem '${this.fullName}' with a different schema version, ${schemaItemProps.schemaVersion}, than the current Schema version of this SchemaItem, ${this.key.schemaKey.version.toString()}.`);\n }\n }\n\n /**\n * Parses the given full name, {schemaName}.{schemaItemName} or {schemaName}:{schemaItemName}, into two separate strings.\n * @note The schema name can be a schema alias.\n * @param fullName The full name to be parsed.\n * @returns A tuple of the parsed Schema name and Schema Item name. If the full name does not contain a '.' or ':', the second string in the tuple will returned the exact string pass in.\n */\n public static parseFullName(fullName: string): [string, string] {\n const matches = /^([a-zA-Z_]+[a-zA-Z0-9_]*(\\.\\d+\\.\\d+\\.\\d+)?)[.:]([a-zA-Z_]+[a-zA-Z0-9_]*)$/.exec(fullName);\n\n // The first match will be the full string match, the second three will be the three groups\n if (matches === null || matches.length !== 4)\n return [\"\", fullName];\n\n return [matches[1], matches[3]];\n }\n\n /**\n * Indicates if the two SchemaItem objects are equal by comparing their respective [[key]] properties.\n * @param thisSchemaItem The first SchemaItem.\n * @param thatSchemaItemOrKey The second SchemaItem or SchemaItemKey.\n */\n public static equalByKey(thisSchemaItem: SchemaItem, thatSchemaItemOrKey?: SchemaItem | SchemaItemKey): boolean {\n if (!thatSchemaItemOrKey)\n return true;\n SchemaItemType.EntityClass\n const key = SchemaItem.isSchemaItem(thatSchemaItemOrKey) ? thatSchemaItemOrKey.key : thatSchemaItemOrKey;\n return thisSchemaItem.key.matches(key);\n }\n\n /**\n * @internal\n */\n public static isSchemaItem(item: unknown): item is SchemaItem {\n const schemaItem = item as Partial<SchemaItem>;\n\n return schemaItem !== undefined && schemaItem.key !== undefined && schemaItem.schema !== undefined\n && schemaItem.schemaItemType !== undefined;\n }\n\n /** @internal */\n protected setName(name: string) {\n this._key = new SchemaItemKey(name, this.schema.schemaKey);\n }\n\n /** @internal */\n protected setDisplayLabel(displayLabel: string) {\n this._label = displayLabel;\n }\n\n /** @internal */\n protected setDescription(description: string) {\n this._description = description;\n }\n\n /** @internal */\n public setLoadingController(controller: SchemaLoadingController) {\n this._loadingController = controller;\n }\n}\n\n"]}
@@ -69,8 +69,8 @@ export class Unit extends SchemaItem {
69
69
  */
70
70
  toJSON(standalone = false, includeSchemaVersion = false) {
71
71
  const schemaJson = super.toJSON(standalone, includeSchemaVersion);
72
- schemaJson.phenomenon = this.phenomenon.fullName;
73
- schemaJson.unitSystem = this.unitSystem.fullName;
72
+ schemaJson.phenomenon = this.phenomenon?.fullName ?? "";
73
+ schemaJson.unitSystem = this.unitSystem?.fullName ?? "";
74
74
  schemaJson.definition = this.definition;
75
75
  if (this.hasNumerator)
76
76
  schemaJson.numerator = this.numerator;
@@ -1 +1 @@
1
- {"version":3,"file":"Unit.js","sourceRoot":"","sources":["../../../src/Metadata/Unit.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Metadata\r\n */\r\n\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport { SchemaItemUnitProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { LazyLoadedPhenomenon, LazyLoadedUnitSystem } from \"../Interfaces\";\r\nimport { SchemaItemKey } from \"../SchemaKey\";\r\nimport { Phenomenon } from \"./Phenomenon\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { UnitSystem } from \"./UnitSystem\";\r\n\r\n/**\r\n * An abstract class that adds the ability to define Units and everything that goes with them, within an ECSchema as a\r\n * first-class concept is to allow the iModel to not be dependent on any hard-coded Units\r\n * @public @preview\r\n */\r\nexport class Unit extends SchemaItem {\r\n public override readonly schemaItemType = Unit.schemaItemType;\r\n /** @internal */\r\n public static override get schemaItemType() { return SchemaItemType.Unit; }\r\n private _phenomenon?: LazyLoadedPhenomenon;\r\n private _unitSystem?: LazyLoadedUnitSystem;\r\n private _definition: string;\r\n private _numerator?: number;\r\n private _denominator?: number;\r\n private _offset?: number;\r\n\r\n /** @internal */\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this._definition = \"\";\r\n }\r\n\r\n public get phenomenon(): LazyLoadedPhenomenon | undefined { return this._phenomenon; }\r\n public get unitSystem(): LazyLoadedUnitSystem | undefined { return this._unitSystem; }\r\n public get definition(): string { return this._definition; }\r\n public get numerator(): number { return this._numerator ?? 1.0; }\r\n public get offset(): number { return this._offset ?? 0.0; }\r\n public get denominator(): number { return this._denominator ?? 1.0; }\r\n public get hasNumerator(): boolean { return (this._numerator !== undefined); }\r\n public get hasOffset(): boolean { return (this._offset !== undefined); }\r\n public get hasDenominator(): boolean { return (this._denominator !== undefined); }\r\n\r\n /**\r\n * Returns true if a conversion can be calculated between the input units\r\n * @alpha\r\n */\r\n public static async areCompatible(unitA: Unit, unitB: Unit): Promise<boolean> {\r\n const unitAPhenomenon = await unitA.phenomenon;\r\n const unitBPhenomenon = await unitB.phenomenon;\r\n\r\n if (!unitAPhenomenon || !unitBPhenomenon || !unitAPhenomenon.key.matches(unitBPhenomenon.key))\r\n return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Type guard to check if the SchemaItem is of type Unit.\r\n * @param item The SchemaItem to check.\r\n * @returns True if the item is a Unit, false otherwise.\r\n */\r\n public static isUnit(item?: SchemaItem): item is Unit {\r\n if (item && item.schemaItemType === SchemaItemType.Unit)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Save this Unit'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): SchemaItemUnitProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.phenomenon = this.phenomenon!.fullName;\r\n schemaJson.unitSystem = this.unitSystem!.fullName;\r\n schemaJson.definition = this.definition;\r\n if (this.hasNumerator)\r\n schemaJson.numerator = this.numerator;\r\n if (this.hasDenominator)\r\n schemaJson.denominator = this.denominator;\r\n if (this.hasOffset)\r\n schemaJson.offset = this.offset;\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n\r\n const phenomenon = await this.phenomenon;\r\n if (undefined !== phenomenon) {\r\n const phenomenonName = XmlSerializationUtils.createXmlTypedName(this.schema, phenomenon.schema, phenomenon.name);\r\n itemElement.setAttribute(\"phenomenon\", phenomenonName);\r\n }\r\n\r\n const unitSystem = await this.unitSystem;\r\n if (undefined !== unitSystem) {\r\n const unitSystemName = XmlSerializationUtils.createXmlTypedName(this.schema, unitSystem.schema, unitSystem.name);\r\n itemElement.setAttribute(\"unitSystem\", unitSystemName);\r\n }\r\n\r\n itemElement.setAttribute(\"definition\", this.definition);\r\n if (this.hasNumerator)\r\n itemElement.setAttribute(\"numerator\", this.numerator.toString());\r\n if (this.hasDenominator)\r\n itemElement.setAttribute(\"denominator\", this.denominator.toString());\r\n if (this.hasOffset)\r\n itemElement.setAttribute(\"offset\", this.offset.toString());\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(unitProps: SchemaItemUnitProps) {\r\n super.fromJSONSync(unitProps);\r\n\r\n const phenomenonSchemaItemKey = this.schema.getSchemaItemKey(unitProps.phenomenon);\r\n if (!phenomenonSchemaItemKey)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the phenomenon ${unitProps.phenomenon}.`);\r\n this._phenomenon = new DelayedPromiseWithProps<SchemaItemKey, Phenomenon>(phenomenonSchemaItemKey,\r\n async () => {\r\n const phenom = await this.schema.lookupItem(phenomenonSchemaItemKey, Phenomenon);\r\n if (undefined === phenom)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the phenomenon ${unitProps.phenomenon}.`);\r\n return phenom;\r\n });\r\n\r\n const unitSystemSchemaItemKey = this.schema.getSchemaItemKey(unitProps.unitSystem);\r\n if (!unitSystemSchemaItemKey)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the unitSystem ${unitProps.unitSystem}.`);\r\n this._unitSystem = new DelayedPromiseWithProps<SchemaItemKey, UnitSystem>(unitSystemSchemaItemKey,\r\n async () => {\r\n const unitSystem = await this.schema.lookupItem(unitSystemSchemaItemKey, UnitSystem);\r\n if (undefined === unitSystem)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the unitSystem ${unitProps.unitSystem}.`);\r\n return unitSystem;\r\n });\r\n\r\n if (this._definition !== \"\" && unitProps.definition.toLowerCase() !== this._definition.toLowerCase())\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Unit ${this.name} has an invalid 'definition' attribute.`);\r\n else if (this._definition === \"\")\r\n this._definition = unitProps.definition;\r\n\r\n if (undefined !== unitProps.numerator) {\r\n if (unitProps.numerator !== this._numerator)\r\n this._numerator = unitProps.numerator;\r\n }\r\n\r\n if (undefined !== unitProps.denominator) {\r\n if (unitProps.denominator !== this._denominator)\r\n this._denominator = unitProps.denominator;\r\n }\r\n\r\n if (undefined !== unitProps.offset) {\r\n if (unitProps.offset !== this._offset)\r\n this._offset = unitProps.offset;\r\n }\r\n }\r\n\r\n public override async fromJSON(unitProps: SchemaItemUnitProps) {\r\n this.fromJSONSync(unitProps);\r\n }\r\n\r\n /** @internal */\r\n protected async setPhenomenon(phenomenon: LazyLoadedPhenomenon) {\r\n this._phenomenon = phenomenon;\r\n }\r\n\r\n /** @internal */\r\n protected async setUnitSystem(unitSystem: LazyLoadedUnitSystem) {\r\n this._unitSystem = unitSystem;\r\n }\r\n\r\n /** @internal */\r\n protected async setDefinition(definition: string) {\r\n this._definition = definition;\r\n }\r\n\r\n /**\r\n * Type assertion to check if the SchemaItem is of type Unit.\r\n * @param item The SchemaItem to check.\r\n * @returns The item cast to Unit if it is a Unit, undefined otherwise.\r\n * @internal\r\n */\r\n public static assertIsUnit(item?: SchemaItem): asserts item is Unit {\r\n if (!this.isUnit(item))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.Unit}' (Unit)`);\r\n }\r\n}\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableUnit extends Unit {\r\n public abstract override setPhenomenon(phenomenon: LazyLoadedPhenomenon): Promise<void>;\r\n public abstract override setUnitSystem(unitSystem: LazyLoadedUnitSystem): Promise<void>;\r\n public abstract override setDefinition(definition: string): Promise<void>;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"Unit.js","sourceRoot":"","sources":["../../../src/Metadata/Unit.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Metadata\r\n */\r\n\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport { SchemaItemUnitProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { LazyLoadedPhenomenon, LazyLoadedUnitSystem } from \"../Interfaces\";\r\nimport { SchemaItemKey } from \"../SchemaKey\";\r\nimport { Phenomenon } from \"./Phenomenon\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { UnitSystem } from \"./UnitSystem\";\r\n\r\n/**\r\n * An abstract class that adds the ability to define Units and everything that goes with them, within an ECSchema as a\r\n * first-class concept is to allow the iModel to not be dependent on any hard-coded Units\r\n * @public @preview\r\n */\r\nexport class Unit extends SchemaItem {\r\n public override readonly schemaItemType = Unit.schemaItemType;\r\n /** @internal */\r\n public static override get schemaItemType() { return SchemaItemType.Unit; }\r\n private _phenomenon?: LazyLoadedPhenomenon;\r\n private _unitSystem?: LazyLoadedUnitSystem;\r\n private _definition: string;\r\n private _numerator?: number;\r\n private _denominator?: number;\r\n private _offset?: number;\r\n\r\n /** @internal */\r\n constructor(schema: Schema, name: string) {\r\n super(schema, name);\r\n this._definition = \"\";\r\n }\r\n\r\n public get phenomenon(): LazyLoadedPhenomenon | undefined { return this._phenomenon; }\r\n public get unitSystem(): LazyLoadedUnitSystem | undefined { return this._unitSystem; }\r\n public get definition(): string { return this._definition; }\r\n public get numerator(): number { return this._numerator ?? 1.0; }\r\n public get offset(): number { return this._offset ?? 0.0; }\r\n public get denominator(): number { return this._denominator ?? 1.0; }\r\n public get hasNumerator(): boolean { return (this._numerator !== undefined); }\r\n public get hasOffset(): boolean { return (this._offset !== undefined); }\r\n public get hasDenominator(): boolean { return (this._denominator !== undefined); }\r\n\r\n /**\r\n * Returns true if a conversion can be calculated between the input units\r\n * @alpha\r\n */\r\n public static async areCompatible(unitA: Unit, unitB: Unit): Promise<boolean> {\r\n const unitAPhenomenon = await unitA.phenomenon;\r\n const unitBPhenomenon = await unitB.phenomenon;\r\n\r\n if (!unitAPhenomenon || !unitBPhenomenon || !unitAPhenomenon.key.matches(unitBPhenomenon.key))\r\n return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Type guard to check if the SchemaItem is of type Unit.\r\n * @param item The SchemaItem to check.\r\n * @returns True if the item is a Unit, false otherwise.\r\n */\r\n public static isUnit(item?: SchemaItem): item is Unit {\r\n if (item && item.schemaItemType === SchemaItemType.Unit)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Save this Unit'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): SchemaItemUnitProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.phenomenon = this.phenomenon?.fullName ?? \"\";\r\n schemaJson.unitSystem = this.unitSystem?.fullName ?? \"\";\r\n schemaJson.definition = this.definition;\r\n if (this.hasNumerator)\r\n schemaJson.numerator = this.numerator;\r\n if (this.hasDenominator)\r\n schemaJson.denominator = this.denominator;\r\n if (this.hasOffset)\r\n schemaJson.offset = this.offset;\r\n return schemaJson;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n\r\n const phenomenon = await this.phenomenon;\r\n if (undefined !== phenomenon) {\r\n const phenomenonName = XmlSerializationUtils.createXmlTypedName(this.schema, phenomenon.schema, phenomenon.name);\r\n itemElement.setAttribute(\"phenomenon\", phenomenonName);\r\n }\r\n\r\n const unitSystem = await this.unitSystem;\r\n if (undefined !== unitSystem) {\r\n const unitSystemName = XmlSerializationUtils.createXmlTypedName(this.schema, unitSystem.schema, unitSystem.name);\r\n itemElement.setAttribute(\"unitSystem\", unitSystemName);\r\n }\r\n\r\n itemElement.setAttribute(\"definition\", this.definition);\r\n if (this.hasNumerator)\r\n itemElement.setAttribute(\"numerator\", this.numerator.toString());\r\n if (this.hasDenominator)\r\n itemElement.setAttribute(\"denominator\", this.denominator.toString());\r\n if (this.hasOffset)\r\n itemElement.setAttribute(\"offset\", this.offset.toString());\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(unitProps: SchemaItemUnitProps) {\r\n super.fromJSONSync(unitProps);\r\n\r\n const phenomenonSchemaItemKey = this.schema.getSchemaItemKey(unitProps.phenomenon);\r\n if (!phenomenonSchemaItemKey)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the phenomenon ${unitProps.phenomenon}.`);\r\n this._phenomenon = new DelayedPromiseWithProps<SchemaItemKey, Phenomenon>(phenomenonSchemaItemKey,\r\n async () => {\r\n const phenom = await this.schema.lookupItem(phenomenonSchemaItemKey, Phenomenon);\r\n if (undefined === phenom)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the phenomenon ${unitProps.phenomenon}.`);\r\n return phenom;\r\n });\r\n\r\n const unitSystemSchemaItemKey = this.schema.getSchemaItemKey(unitProps.unitSystem);\r\n if (!unitSystemSchemaItemKey)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the unitSystem ${unitProps.unitSystem}.`);\r\n this._unitSystem = new DelayedPromiseWithProps<SchemaItemKey, UnitSystem>(unitSystemSchemaItemKey,\r\n async () => {\r\n const unitSystem = await this.schema.lookupItem(unitSystemSchemaItemKey, UnitSystem);\r\n if (undefined === unitSystem)\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the unitSystem ${unitProps.unitSystem}.`);\r\n return unitSystem;\r\n });\r\n\r\n if (this._definition !== \"\" && unitProps.definition.toLowerCase() !== this._definition.toLowerCase())\r\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Unit ${this.name} has an invalid 'definition' attribute.`);\r\n else if (this._definition === \"\")\r\n this._definition = unitProps.definition;\r\n\r\n if (undefined !== unitProps.numerator) {\r\n if (unitProps.numerator !== this._numerator)\r\n this._numerator = unitProps.numerator;\r\n }\r\n\r\n if (undefined !== unitProps.denominator) {\r\n if (unitProps.denominator !== this._denominator)\r\n this._denominator = unitProps.denominator;\r\n }\r\n\r\n if (undefined !== unitProps.offset) {\r\n if (unitProps.offset !== this._offset)\r\n this._offset = unitProps.offset;\r\n }\r\n }\r\n\r\n public override async fromJSON(unitProps: SchemaItemUnitProps) {\r\n this.fromJSONSync(unitProps);\r\n }\r\n\r\n /** @internal */\r\n protected async setPhenomenon(phenomenon: LazyLoadedPhenomenon) {\r\n this._phenomenon = phenomenon;\r\n }\r\n\r\n /** @internal */\r\n protected async setUnitSystem(unitSystem: LazyLoadedUnitSystem) {\r\n this._unitSystem = unitSystem;\r\n }\r\n\r\n /** @internal */\r\n protected async setDefinition(definition: string) {\r\n this._definition = definition;\r\n }\r\n\r\n /**\r\n * Type assertion to check if the SchemaItem is of type Unit.\r\n * @param item The SchemaItem to check.\r\n * @returns The item cast to Unit if it is a Unit, undefined otherwise.\r\n * @internal\r\n */\r\n public static assertIsUnit(item?: SchemaItem): asserts item is Unit {\r\n if (!this.isUnit(item))\r\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.Unit}' (Unit)`);\r\n }\r\n}\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableUnit extends Unit {\r\n public abstract override setPhenomenon(phenomenon: LazyLoadedPhenomenon): Promise<void>;\r\n public abstract override setUnitSystem(unitSystem: LazyLoadedUnitSystem): Promise<void>;\r\n public abstract override setDefinition(definition: string): Promise<void>;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPartVisitorDelegate.js","sourceRoot":"","sources":["../../src/SchemaPartVisitorDelegate.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { SchemaItemType } from \"./ECObjects\";\nimport { AnyClass, AnyECType } from \"./Interfaces\";\nimport { ECClass, StructClass } from \"./Metadata/Class\";\nimport { Constant } from \"./Metadata/Constant\";\nimport { CustomAttributeContainerProps } from \"./Metadata/CustomAttribute\";\nimport { CustomAttributeClass } from \"./Metadata/CustomAttributeClass\";\nimport { EntityClass } from \"./Metadata/EntityClass\";\nimport { Enumeration } from \"./Metadata/Enumeration\";\nimport { Format } from \"./Metadata/Format\";\nimport { InvertedUnit } from \"./Metadata/InvertedUnit\";\nimport { KindOfQuantity } from \"./Metadata/KindOfQuantity\";\nimport { Mixin } from \"./Metadata/Mixin\";\nimport { Phenomenon } from \"./Metadata/Phenomenon\";\nimport { AnyProperty, Property } from \"./Metadata/Property\";\nimport { PropertyCategory } from \"./Metadata/PropertyCategory\";\nimport { RelationshipClass, RelationshipConstraint } from \"./Metadata/RelationshipClass\";\nimport { Schema } from \"./Metadata/Schema\";\nimport { SchemaItem } from \"./Metadata/SchemaItem\";\nimport { Unit } from \"./Metadata/Unit\";\nimport { UnitSystem } from \"./Metadata/UnitSystem\";\n\n/**\n * Interface to allow schema traversal/deserialization workflows to visit\n * each part, item, class, etc. that exists in a given schema.\n * @public @preview\n */\nexport interface ISchemaPartVisitor {\n /**\n * Called for a partially loaded schema. During deserialization, this would\n * be after a schema and all its references are deserialized, but _before_\n * any of its items or custom attributes have been deserialized.\n * @param schema A partially-loaded Schema.\n */\n /* async */ visitEmptySchema?: (schema: Schema) => Promise<void>;\n\n /**\n * Called for a partially loaded schema. During deserialization, this would\n * be after a schema and all its references are deserialized, but _before_\n * any of its items or custom attributes have been deserialized.\n * @param schema A partially-loaded Schema.\n */\n visitEmptySchemaSync?: (schema: Schema) => void;\n\n /**\n * Called for a fully loaded schema.\n * @param schema A fully-loaded Schema.\n */\n /* async */ visitFullSchema?: (schema: Schema) => Promise<void>;\n\n /**\n * Called for a fully loaded schema.\n * @param schema A fully-loaded Schema.\n */\n visitFullSchemaSync?: (schema: Schema) => void;\n\n /**\n * Called for each [[SchemaItem]] instance.\n * @param schemaItem a SchemaItem object.\n */\n /* async */ visitSchemaItem?: (schemaItem: SchemaItem) => Promise<void>;\n\n /**\n * Called for each [[SchemaItem]] instance.\n * @param schemaItem a SchemaItem object.\n */\n visitSchemaItemSync?: (schemaItem: SchemaItem) => void;\n\n /**\n * Called for each [[AnyClass]] instance.\n * @param ecClass an ECClass object.\n */\n /* async */ visitClass?: (ecClass: AnyClass) => Promise<void>;\n\n /**\n * Called for each [[AnyClass]] instance.\n * @param ecClass an ECClass object.\n */\n visitClassSync?: (ecClass: AnyClass) => void;\n\n /**\n * Called for each [[AnyProperty]] instance of an ECClass.\n * @param property an AnyProperty object.\n */\n /* async */ visitProperty?: (property: AnyProperty) => Promise<void>;\n\n /**\n * Called for each [[AnyProperty]] instance of an ECClass.\n * @param property an AnyProperty object.\n */\n visitPropertySync?: (property: AnyProperty) => void;\n\n /**\n * Called for each [[EntityClass]] instance.\n * @param entityClass an EntityClass object.\n */\n /* async */ visitEntityClass?: (entityClass: EntityClass) => Promise<void>;\n\n /**\n * Called for each [[EntityClass]] instance.\n * @param entityClass an EntityClass object.\n */\n visitEntityClassSync?: (entityClass: EntityClass) => void;\n\n /**\n * Called for each [[StructClass]] instance.\n * @param structClass a StructClass object.\n */\n /* async */ visitStructClass?: (structClass: StructClass) => Promise<void>;\n\n /**\n * Called for each [[StructClass]] instance.\n * @param structClass a StructClass object.\n */\n visitStructClassSync?: (structClass: StructClass) => void;\n\n /**\n * Called for each [[Mixin]] instance.\n * @param mixin a Mixin object.\n */\n /* async */ visitMixin?: (mixin: Mixin) => Promise<void>;\n\n /**\n * Called for each [[Mixin]] instance.\n * @param mixin a Mixin object.\n */\n visitMixinSync?: (mixin: Mixin) => void;\n\n /**\n * Called for each [[RelationshipClass]] instance.\n * @param relationshipClass a RelationshipClass object.\n */\n /* async */ visitRelationshipClass?: (relationshipClass: RelationshipClass) => Promise<void>;\n\n /**\n * Called for each [[RelationshipClass]] instance.\n * @param relationshipClass a RelationshipClass object.\n */\n visitRelationshipClassSync?: (relationshipClass: RelationshipClass) => void;\n\n /**\n * Called for each [[RelationshipConstraint]] of each RelationshipClass.\n * @param relationshipConstraint a RelationshipConstraint object.\n */\n /* async */ visitRelationshipConstraint?: (relationshipConstraint: RelationshipConstraint) => Promise<void>;\n\n /**\n * Called for each [[RelationshipConstraint]] of each RelationshipClass.\n * @param relationshipConstraint a RelationshipConstraint object.\n */\n visitRelationshipConstraintSync?: (relationshipConstraint: RelationshipConstraint) => void;\n\n /**\n * Called for each [[CustomAttributeClass]] instance.\n * @param customAttributeClass a CustomAttributeClass object.\n */\n /* async */ visitCustomAttributeClass?: (customAttributeClass: CustomAttributeClass) => Promise<void>;\n\n /**\n * Called for each [[CustomAttributeClass]] instance.\n * @param customAttributeClass a CustomAttributeClass object.\n */\n visitCustomAttributeClassSync?: (customAttributeClass: CustomAttributeClass) => void;\n\n /**\n * Called for each CustomAttribute container in the schema.\n * @param customAttributeContainer a CustomAttributeContainerProps object.\n */\n /* async */ visitCustomAttributeContainer?: (customAttributeContainer: CustomAttributeContainerProps) => Promise<void>;\n\n /**\n * Called for each CustomAttribute container in the schema.\n * @param customAttributeContainer a CustomAttributeContainerProps object.\n */\n visitCustomAttributeContainerSync?: (customAttributeContainer: CustomAttributeContainerProps) => void;\n\n /**\n * Called for each [[Enumeration]] instance.\n * @param enumeration an Enumeration object.\n */\n /* async */ visitEnumeration?: (enumeration: Enumeration) => Promise<void>;\n\n /**\n * Called for each [[Enumeration]] instance.\n * @param enumeration an Enumeration object.\n */\n visitEnumerationSync?: (enumeration: Enumeration) => void;\n\n /**\n * Called for each [[KindOfQuantity]] instance.\n * @param koq a KindOfQuantity object.\n */\n /* async */ visitKindOfQuantity?: (koq: KindOfQuantity) => Promise<void>;\n\n /**\n * Called for each [[KindOfQuantity]] instance.\n * @param koq a KindOfQuantity object.\n */\n visitKindOfQuantitySync?: (koq: KindOfQuantity) => void;\n\n /**\n * Called for each [[PropertyCategory]] instance.\n * @param category a PropertyCategory object.\n */\n /* async */ visitPropertyCategory?: (category: PropertyCategory) => Promise<void>;\n\n /**\n * Called for each [[PropertyCategory]] instance.\n * @param category a PropertyCategory object.\n */\n visitPropertyCategorySync?: (category: PropertyCategory) => void;\n\n /**\n * Called for each [[Format]] instance.\n * @param format a Format object.\n */\n /* async */ visitFormat?: (format: Format) => Promise<void>;\n\n /**\n * Called for each [[Format]] instance.\n * @param format a Format object.\n */\n visitFormatSync?: (format: Format) => void;\n\n /**\n * Called for each [[Unit]] instance.\n * @param unit a Unit object.\n */\n /* async */ visitUnit?: (unit: Unit) => Promise<void>;\n\n /**\n * Called for each [[Unit]] instance.\n * @param unit a Unit object.\n */\n visitUnitSync?: (unit: Unit) => void;\n\n /**\n * Called for each [[InvertedUnit]] instance.\n * @param invertedUnit an InvertedUnit object.\n */\n /* async */ visitInvertedUnit?: (invertedUnit: InvertedUnit) => Promise<void>;\n\n /**\n * Called for each [[InvertedUnit]] instance.\n * @param invertedUnit an InvertedUnit object.\n */\n visitInvertedUnitSync?: (invertedUnit: InvertedUnit) => void;\n\n /**\n * Called for each [[UnitSystem]] instance.\n * @param unitSystem a UnitSystem object.\n */\n /* async */ visitUnitSystem?: (unitSystem: UnitSystem) => Promise<void>;\n\n /**\n * Called for each [[UnitSystem]] instance.\n * @param unitSystem a UnitSystem object.\n */\n visitUnitSystemSync?: (unitSystem: UnitSystem) => void;\n\n /**\n * Called for each [[Phenomenon]] instance.\n * @param phenomena a Phenomenon object.\n */\n /* async */ visitPhenomenon?: (phenomena: Phenomenon) => Promise<void>;\n\n /**\n * Called for each [[Phenomenon]] instance.\n * @param phenomena a Phenomenon object.\n */\n visitPhenomenonSync?: (phenomena: Phenomenon) => void;\n\n /**\n * Called for each [[Constant]] instance.\n * @param constant a Constant object.\n */\n /* async */ visitConstant?: (constant: Constant) => Promise<void>;\n\n /**\n * Called for each [[Constant]] instance.\n * @param constant a Constant object.\n */\n visitConstantSync?: (constant: Constant) => void;\n}\n\nfunction isCustomAttributeContainer(object: any): object is CustomAttributeContainerProps {\n return \"customAttributes\" in object;\n}\n\n/**\n * A helper class to call methods on the provided [[ISchemaPartVisitor]].\n * @public @preview\n */\nexport class SchemaPartVisitorDelegate {\n private _visitor: ISchemaPartVisitor;\n\n constructor(visitor: ISchemaPartVisitor) {\n this._visitor = visitor;\n }\n\n /**\n * Calls (async) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]].\n * @param schema The schema to pass to the visitor.\n * @param fullSchema Indicates if the schema is partially or fully-loaded.\n */\n public async visitSchema(schema: Schema, fullSchema: boolean = true): Promise<void> {\n if (!fullSchema && this._visitor.visitEmptySchema)\n await this._visitor.visitEmptySchema(schema);\n\n if (fullSchema && this._visitor.visitFullSchema)\n await this._visitor.visitFullSchema(schema);\n }\n\n /**\n * Calls (synchronously) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]].\n * @param schema The schema to pass to the visitor.\n * @param fullSchema Indicates if the schema is partially or fully-loaded.\n */\n public visitSchemaSync(schema: Schema, fullSchema: boolean = true): void {\n if (!fullSchema && this._visitor.visitEmptySchemaSync)\n this._visitor.visitEmptySchemaSync(schema);\n\n if (fullSchema && this._visitor.visitFullSchemaSync)\n this._visitor.visitFullSchemaSync(schema);\n }\n\n /**\n * Calls (async) the appropriate visit methods on the configured [[ISchemaPartVisitor]]\n * based on the type of the part specified.\n * @param schemaPart The schema part to pass to the visitor methods.\n */\n public async visitSchemaPart(schemaPart: AnyECType): Promise<void> {\n if (SchemaItem.isSchemaItem(schemaPart)) {\n await this.visitSchemaItem(schemaPart);\n } else if (Property.isProperty(schemaPart) && this._visitor.visitProperty) {\n await this._visitor.visitProperty(schemaPart);\n } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraint) {\n await this._visitor.visitRelationshipConstraint(schemaPart);\n }\n\n if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainer) {\n await this._visitor.visitCustomAttributeContainer(schemaPart);\n }\n }\n\n /**\n * Calls (synchronously) the appropriate visit methods on the configured [[ISchemaPartVisitor]]\n * based on the type of the part specified.\n * @param schemaPart The schema part to pass to the visitor methods.\n */\n public visitSchemaPartSync(schemaPart: AnyECType): void {\n if (SchemaItem.isSchemaItem(schemaPart)) {\n this.visitSchemaItemSync(schemaPart);\n } else if (Property.isProperty(schemaPart) && this._visitor.visitPropertySync) {\n this._visitor.visitPropertySync(schemaPart);\n } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraintSync) {\n this._visitor.visitRelationshipConstraintSync(schemaPart);\n }\n\n if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainerSync)\n this._visitor.visitCustomAttributeContainerSync(schemaPart);\n }\n\n private async visitSchemaItem(schemaItem: SchemaItem) {\n if (this._visitor.visitSchemaItem)\n await this._visitor.visitSchemaItem(schemaItem);\n\n if (ECClass.isECClass(schemaItem) && this._visitor.visitClass)\n await this._visitor.visitClass(schemaItem as AnyClass);\n\n switch (schemaItem.schemaItemType) {\n case SchemaItemType.Constant:\n if (this._visitor.visitConstant)\n await this._visitor.visitConstant(schemaItem as Constant);\n break;\n case SchemaItemType.CustomAttributeClass:\n if (this._visitor.visitCustomAttributeClass)\n await this._visitor.visitCustomAttributeClass(schemaItem as CustomAttributeClass);\n break;\n case SchemaItemType.EntityClass:\n if (this._visitor.visitEntityClass)\n await this._visitor.visitEntityClass(schemaItem as EntityClass);\n break;\n case SchemaItemType.Enumeration:\n if (this._visitor.visitEnumeration)\n await this._visitor.visitEnumeration(schemaItem as Enumeration);\n break;\n case SchemaItemType.Format:\n if (this._visitor.visitFormat)\n await this._visitor.visitFormat(schemaItem as Format);\n break;\n case SchemaItemType.InvertedUnit:\n if (this._visitor.visitInvertedUnit)\n await this._visitor.visitInvertedUnit(schemaItem as InvertedUnit);\n break;\n case SchemaItemType.KindOfQuantity:\n if (this._visitor.visitKindOfQuantity)\n await this._visitor.visitKindOfQuantity(schemaItem as KindOfQuantity);\n break;\n case SchemaItemType.Mixin:\n if (this._visitor.visitMixin)\n await this._visitor.visitMixin(schemaItem as Mixin);\n break;\n case SchemaItemType.Phenomenon:\n if (this._visitor.visitPhenomenon)\n await this._visitor.visitPhenomenon(schemaItem as Phenomenon);\n break;\n case SchemaItemType.PropertyCategory:\n if (this._visitor.visitPropertyCategory)\n await this._visitor.visitPropertyCategory(schemaItem as PropertyCategory);\n break;\n case SchemaItemType.RelationshipClass:\n if (this._visitor.visitRelationshipClass)\n await this._visitor.visitRelationshipClass(schemaItem as RelationshipClass);\n break;\n case SchemaItemType.StructClass:\n if (this._visitor.visitStructClass)\n await this._visitor.visitStructClass(schemaItem as StructClass);\n break;\n case SchemaItemType.Unit:\n if (this._visitor.visitUnit)\n await this._visitor.visitUnit(schemaItem as Unit);\n break;\n case SchemaItemType.UnitSystem:\n if (this._visitor.visitUnitSystem)\n await this._visitor.visitUnitSystem(schemaItem as UnitSystem);\n break;\n }\n }\n\n private visitSchemaItemSync(schemaItem: SchemaItem) {\n if (this._visitor.visitSchemaItemSync)\n this._visitor.visitSchemaItemSync(schemaItem);\n\n if (ECClass.isECClass(schemaItem) && this._visitor.visitClassSync)\n this._visitor.visitClassSync(schemaItem as AnyClass);\n\n switch (schemaItem.schemaItemType) {\n case SchemaItemType.Constant:\n if (this._visitor.visitConstantSync)\n this._visitor.visitConstantSync(schemaItem as Constant);\n break;\n case SchemaItemType.CustomAttributeClass:\n if (this._visitor.visitCustomAttributeClassSync)\n this._visitor.visitCustomAttributeClassSync(schemaItem as CustomAttributeClass);\n break;\n case SchemaItemType.EntityClass:\n if (this._visitor.visitEntityClassSync)\n this._visitor.visitEntityClassSync(schemaItem as EntityClass);\n break;\n case SchemaItemType.Enumeration:\n if (this._visitor.visitEnumerationSync)\n this._visitor.visitEnumerationSync(schemaItem as Enumeration);\n break;\n case SchemaItemType.Format:\n if (this._visitor.visitFormatSync)\n this._visitor.visitFormatSync(schemaItem as Format);\n break;\n case SchemaItemType.InvertedUnit:\n if (this._visitor.visitInvertedUnitSync)\n this._visitor.visitInvertedUnitSync(schemaItem as InvertedUnit);\n break;\n case SchemaItemType.KindOfQuantity:\n if (this._visitor.visitKindOfQuantitySync)\n this._visitor.visitKindOfQuantitySync(schemaItem as KindOfQuantity);\n break;\n case SchemaItemType.Mixin:\n if (this._visitor.visitMixinSync)\n this._visitor.visitMixinSync(schemaItem as Mixin);\n break;\n case SchemaItemType.Phenomenon:\n if (this._visitor.visitPhenomenonSync)\n this._visitor.visitPhenomenonSync(schemaItem as Phenomenon);\n break;\n case SchemaItemType.PropertyCategory:\n if (this._visitor.visitPropertyCategorySync)\n this._visitor.visitPropertyCategorySync(schemaItem as PropertyCategory);\n break;\n case SchemaItemType.RelationshipClass:\n if (this._visitor.visitRelationshipClassSync)\n this._visitor.visitRelationshipClassSync(schemaItem as RelationshipClass);\n break;\n case SchemaItemType.StructClass:\n if (this._visitor.visitStructClassSync)\n this._visitor.visitStructClassSync(schemaItem as StructClass);\n break;\n case SchemaItemType.Unit:\n if (this._visitor.visitUnitSync)\n this._visitor.visitUnitSync(schemaItem as Unit);\n break;\n case SchemaItemType.UnitSystem:\n if (this._visitor.visitUnitSystemSync)\n this._visitor.visitUnitSystemSync(schemaItem as UnitSystem);\n break;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaPartVisitorDelegate.js","sourceRoot":"","sources":["../../src/SchemaPartVisitorDelegate.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { SchemaItemType } from \"./ECObjects\";\nimport { AnyClass, AnyECType } from \"./Interfaces\";\nimport { ECClass, StructClass } from \"./Metadata/Class\";\nimport { Constant } from \"./Metadata/Constant\";\nimport { CustomAttributeContainerProps } from \"./Metadata/CustomAttribute\";\nimport { CustomAttributeClass } from \"./Metadata/CustomAttributeClass\";\nimport { EntityClass } from \"./Metadata/EntityClass\";\nimport { Enumeration } from \"./Metadata/Enumeration\";\nimport { Format } from \"./Metadata/Format\";\nimport { InvertedUnit } from \"./Metadata/InvertedUnit\";\nimport { KindOfQuantity } from \"./Metadata/KindOfQuantity\";\nimport { Mixin } from \"./Metadata/Mixin\";\nimport { Phenomenon } from \"./Metadata/Phenomenon\";\nimport { AnyProperty, Property } from \"./Metadata/Property\";\nimport { PropertyCategory } from \"./Metadata/PropertyCategory\";\nimport { RelationshipClass, RelationshipConstraint } from \"./Metadata/RelationshipClass\";\nimport { Schema } from \"./Metadata/Schema\";\nimport { SchemaItem } from \"./Metadata/SchemaItem\";\nimport { Unit } from \"./Metadata/Unit\";\nimport { UnitSystem } from \"./Metadata/UnitSystem\";\n\n/**\n * Interface to allow schema traversal/deserialization workflows to visit\n * each part, item, class, etc. that exists in a given schema.\n * @public @preview\n */\nexport interface ISchemaPartVisitor {\n /**\n * Called for a partially loaded schema. During deserialization, this would\n * be after a schema and all its references are deserialized, but _before_\n * any of its items or custom attributes have been deserialized.\n * @param schema A partially-loaded Schema.\n */\n /* async */ visitEmptySchema?: (schema: Schema) => Promise<void>;\n\n /**\n * Called for a partially loaded schema. During deserialization, this would\n * be after a schema and all its references are deserialized, but _before_\n * any of its items or custom attributes have been deserialized.\n * @param schema A partially-loaded Schema.\n */\n visitEmptySchemaSync?: (schema: Schema) => void;\n\n /**\n * Called for a fully loaded schema.\n * @param schema A fully-loaded Schema.\n */\n /* async */ visitFullSchema?: (schema: Schema) => Promise<void>;\n\n /**\n * Called for a fully loaded schema.\n * @param schema A fully-loaded Schema.\n */\n visitFullSchemaSync?: (schema: Schema) => void;\n\n /**\n * Called for each [[SchemaItem]] instance.\n * @param schemaItem a SchemaItem object.\n */\n /* async */ visitSchemaItem?: (schemaItem: SchemaItem) => Promise<void>;\n\n /**\n * Called for each [[SchemaItem]] instance.\n * @param schemaItem a SchemaItem object.\n */\n visitSchemaItemSync?: (schemaItem: SchemaItem) => void;\n\n /**\n * Called for each [[AnyClass]] instance.\n * @param ecClass an ECClass object.\n */\n /* async */ visitClass?: (ecClass: AnyClass) => Promise<void>;\n\n /**\n * Called for each [[AnyClass]] instance.\n * @param ecClass an ECClass object.\n */\n visitClassSync?: (ecClass: AnyClass) => void;\n\n /**\n * Called for each [[AnyProperty]] instance of an ECClass.\n * @param property an AnyProperty object.\n */\n /* async */ visitProperty?: (property: AnyProperty) => Promise<void>;\n\n /**\n * Called for each [[AnyProperty]] instance of an ECClass.\n * @param property an AnyProperty object.\n */\n visitPropertySync?: (property: AnyProperty) => void;\n\n /**\n * Called for each [[EntityClass]] instance.\n * @param entityClass an EntityClass object.\n */\n /* async */ visitEntityClass?: (entityClass: EntityClass) => Promise<void>;\n\n /**\n * Called for each [[EntityClass]] instance.\n * @param entityClass an EntityClass object.\n */\n visitEntityClassSync?: (entityClass: EntityClass) => void;\n\n /**\n * Called for each [[StructClass]] instance.\n * @param structClass a StructClass object.\n */\n /* async */ visitStructClass?: (structClass: StructClass) => Promise<void>;\n\n /**\n * Called for each [[StructClass]] instance.\n * @param structClass a StructClass object.\n */\n visitStructClassSync?: (structClass: StructClass) => void;\n\n /**\n * Called for each [[Mixin]] instance.\n * @param mixin a Mixin object.\n */\n /* async */ visitMixin?: (mixin: Mixin) => Promise<void>;\n\n /**\n * Called for each [[Mixin]] instance.\n * @param mixin a Mixin object.\n */\n visitMixinSync?: (mixin: Mixin) => void;\n\n /**\n * Called for each [[RelationshipClass]] instance.\n * @param relationshipClass a RelationshipClass object.\n */\n /* async */ visitRelationshipClass?: (relationshipClass: RelationshipClass) => Promise<void>;\n\n /**\n * Called for each [[RelationshipClass]] instance.\n * @param relationshipClass a RelationshipClass object.\n */\n visitRelationshipClassSync?: (relationshipClass: RelationshipClass) => void;\n\n /**\n * Called for each [[RelationshipConstraint]] of each RelationshipClass.\n * @param relationshipConstraint a RelationshipConstraint object.\n */\n /* async */ visitRelationshipConstraint?: (relationshipConstraint: RelationshipConstraint) => Promise<void>;\n\n /**\n * Called for each [[RelationshipConstraint]] of each RelationshipClass.\n * @param relationshipConstraint a RelationshipConstraint object.\n */\n visitRelationshipConstraintSync?: (relationshipConstraint: RelationshipConstraint) => void;\n\n /**\n * Called for each [[CustomAttributeClass]] instance.\n * @param customAttributeClass a CustomAttributeClass object.\n */\n /* async */ visitCustomAttributeClass?: (customAttributeClass: CustomAttributeClass) => Promise<void>;\n\n /**\n * Called for each [[CustomAttributeClass]] instance.\n * @param customAttributeClass a CustomAttributeClass object.\n */\n visitCustomAttributeClassSync?: (customAttributeClass: CustomAttributeClass) => void;\n\n /**\n * Called for each CustomAttribute container in the schema.\n * @param customAttributeContainer a CustomAttributeContainerProps object.\n */\n /* async */ visitCustomAttributeContainer?: (customAttributeContainer: CustomAttributeContainerProps) => Promise<void>;\n\n /**\n * Called for each CustomAttribute container in the schema.\n * @param customAttributeContainer a CustomAttributeContainerProps object.\n */\n visitCustomAttributeContainerSync?: (customAttributeContainer: CustomAttributeContainerProps) => void;\n\n /**\n * Called for each [[Enumeration]] instance.\n * @param enumeration an Enumeration object.\n */\n /* async */ visitEnumeration?: (enumeration: Enumeration) => Promise<void>;\n\n /**\n * Called for each [[Enumeration]] instance.\n * @param enumeration an Enumeration object.\n */\n visitEnumerationSync?: (enumeration: Enumeration) => void;\n\n /**\n * Called for each [[KindOfQuantity]] instance.\n * @param koq a KindOfQuantity object.\n */\n /* async */ visitKindOfQuantity?: (koq: KindOfQuantity) => Promise<void>;\n\n /**\n * Called for each [[KindOfQuantity]] instance.\n * @param koq a KindOfQuantity object.\n */\n visitKindOfQuantitySync?: (koq: KindOfQuantity) => void;\n\n /**\n * Called for each [[PropertyCategory]] instance.\n * @param category a PropertyCategory object.\n */\n /* async */ visitPropertyCategory?: (category: PropertyCategory) => Promise<void>;\n\n /**\n * Called for each [[PropertyCategory]] instance.\n * @param category a PropertyCategory object.\n */\n visitPropertyCategorySync?: (category: PropertyCategory) => void;\n\n /**\n * Called for each [[Format]] instance.\n * @param format a Format object.\n */\n /* async */ visitFormat?: (format: Format) => Promise<void>;\n\n /**\n * Called for each [[Format]] instance.\n * @param format a Format object.\n */\n visitFormatSync?: (format: Format) => void;\n\n /**\n * Called for each [[Unit]] instance.\n * @param unit a Unit object.\n */\n /* async */ visitUnit?: (unit: Unit) => Promise<void>;\n\n /**\n * Called for each [[Unit]] instance.\n * @param unit a Unit object.\n */\n visitUnitSync?: (unit: Unit) => void;\n\n /**\n * Called for each [[InvertedUnit]] instance.\n * @param invertedUnit an InvertedUnit object.\n */\n /* async */ visitInvertedUnit?: (invertedUnit: InvertedUnit) => Promise<void>;\n\n /**\n * Called for each [[InvertedUnit]] instance.\n * @param invertedUnit an InvertedUnit object.\n */\n visitInvertedUnitSync?: (invertedUnit: InvertedUnit) => void;\n\n /**\n * Called for each [[UnitSystem]] instance.\n * @param unitSystem a UnitSystem object.\n */\n /* async */ visitUnitSystem?: (unitSystem: UnitSystem) => Promise<void>;\n\n /**\n * Called for each [[UnitSystem]] instance.\n * @param unitSystem a UnitSystem object.\n */\n visitUnitSystemSync?: (unitSystem: UnitSystem) => void;\n\n /**\n * Called for each [[Phenomenon]] instance.\n * @param phenomena a Phenomenon object.\n */\n /* async */ visitPhenomenon?: (phenomena: Phenomenon) => Promise<void>;\n\n /**\n * Called for each [[Phenomenon]] instance.\n * @param phenomena a Phenomenon object.\n */\n visitPhenomenonSync?: (phenomena: Phenomenon) => void;\n\n /**\n * Called for each [[Constant]] instance.\n * @param constant a Constant object.\n */\n /* async */ visitConstant?: (constant: Constant) => Promise<void>;\n\n /**\n * Called for each [[Constant]] instance.\n * @param constant a Constant object.\n */\n visitConstantSync?: (constant: Constant) => void;\n}\n\nfunction isCustomAttributeContainer(object: any): object is CustomAttributeContainerProps {\n return \"customAttributes\" in object;\n}\n\n/**\n * A helper class to call methods on the provided [[ISchemaPartVisitor]].\n * @public @preview\n */\nexport class SchemaPartVisitorDelegate {\n private _visitor: ISchemaPartVisitor;\n\n constructor(visitor: ISchemaPartVisitor) {\n this._visitor = visitor;\n }\n\n /**\n * Calls (async) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]].\n * @param schema The schema to pass to the visitor.\n * @param fullSchema Indicates if the schema is partially or fully-loaded.\n */\n public async visitSchema(schema: Schema, fullSchema: boolean = true): Promise<void> {\n if (!fullSchema && this._visitor.visitEmptySchema)\n await this._visitor.visitEmptySchema(schema);\n\n if (fullSchema && this._visitor.visitFullSchema)\n await this._visitor.visitFullSchema(schema);\n }\n\n /**\n * Calls (synchronously) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]].\n * @param schema The schema to pass to the visitor.\n * @param fullSchema Indicates if the schema is partially or fully-loaded.\n */\n public visitSchemaSync(schema: Schema, fullSchema: boolean = true): void {\n if (!fullSchema && this._visitor.visitEmptySchemaSync)\n this._visitor.visitEmptySchemaSync(schema);\n\n if (fullSchema && this._visitor.visitFullSchemaSync)\n this._visitor.visitFullSchemaSync(schema);\n }\n\n /**\n * Calls (async) the appropriate visit methods on the configured [[ISchemaPartVisitor]]\n * based on the type of the part specified.\n * @param schemaPart The schema part to pass to the visitor methods.\n */\n public async visitSchemaPart(schemaPart: AnyECType): Promise<void> {\n if (SchemaItem.isSchemaItem(schemaPart)) {\n await this.visitSchemaItem(schemaPart);\n } else if (Property.isProperty(schemaPart) && this._visitor.visitProperty) {\n await this._visitor.visitProperty(schemaPart);\n } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraint) {\n await this._visitor.visitRelationshipConstraint(schemaPart);\n }\n\n if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainer) {\n await this._visitor.visitCustomAttributeContainer(schemaPart);\n }\n }\n\n /**\n * Calls (synchronously) the appropriate visit methods on the configured [[ISchemaPartVisitor]]\n * based on the type of the part specified.\n * @param schemaPart The schema part to pass to the visitor methods.\n */\n public visitSchemaPartSync(schemaPart: AnyECType): void {\n if (SchemaItem.isSchemaItem(schemaPart)) {\n this.visitSchemaItemSync(schemaPart);\n } else if (Property.isProperty(schemaPart) && this._visitor.visitPropertySync) {\n this._visitor.visitPropertySync(schemaPart);\n } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraintSync) {\n this._visitor.visitRelationshipConstraintSync(schemaPart);\n }\n\n if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainerSync)\n this._visitor.visitCustomAttributeContainerSync(schemaPart);\n }\n\n private async visitSchemaItem(schemaItem: SchemaItem) {\n if (this._visitor.visitSchemaItem)\n await this._visitor.visitSchemaItem(schemaItem);\n\n if (ECClass.isECClass(schemaItem) && this._visitor.visitClass)\n await this._visitor.visitClass(schemaItem);\n\n switch (schemaItem.schemaItemType) {\n case SchemaItemType.Constant:\n if (this._visitor.visitConstant)\n await this._visitor.visitConstant(schemaItem as Constant);\n break;\n case SchemaItemType.CustomAttributeClass:\n if (this._visitor.visitCustomAttributeClass)\n await this._visitor.visitCustomAttributeClass(schemaItem as CustomAttributeClass);\n break;\n case SchemaItemType.EntityClass:\n if (this._visitor.visitEntityClass)\n await this._visitor.visitEntityClass(schemaItem as EntityClass);\n break;\n case SchemaItemType.Enumeration:\n if (this._visitor.visitEnumeration)\n await this._visitor.visitEnumeration(schemaItem as Enumeration);\n break;\n case SchemaItemType.Format:\n if (this._visitor.visitFormat)\n await this._visitor.visitFormat(schemaItem as Format);\n break;\n case SchemaItemType.InvertedUnit:\n if (this._visitor.visitInvertedUnit)\n await this._visitor.visitInvertedUnit(schemaItem as InvertedUnit);\n break;\n case SchemaItemType.KindOfQuantity:\n if (this._visitor.visitKindOfQuantity)\n await this._visitor.visitKindOfQuantity(schemaItem as KindOfQuantity);\n break;\n case SchemaItemType.Mixin:\n if (this._visitor.visitMixin)\n await this._visitor.visitMixin(schemaItem as Mixin);\n break;\n case SchemaItemType.Phenomenon:\n if (this._visitor.visitPhenomenon)\n await this._visitor.visitPhenomenon(schemaItem as Phenomenon);\n break;\n case SchemaItemType.PropertyCategory:\n if (this._visitor.visitPropertyCategory)\n await this._visitor.visitPropertyCategory(schemaItem as PropertyCategory);\n break;\n case SchemaItemType.RelationshipClass:\n if (this._visitor.visitRelationshipClass)\n await this._visitor.visitRelationshipClass(schemaItem as RelationshipClass);\n break;\n case SchemaItemType.StructClass:\n if (this._visitor.visitStructClass)\n await this._visitor.visitStructClass(schemaItem as StructClass);\n break;\n case SchemaItemType.Unit:\n if (this._visitor.visitUnit)\n await this._visitor.visitUnit(schemaItem as Unit);\n break;\n case SchemaItemType.UnitSystem:\n if (this._visitor.visitUnitSystem)\n await this._visitor.visitUnitSystem(schemaItem);\n break;\n }\n }\n\n private visitSchemaItemSync(schemaItem: SchemaItem) {\n if (this._visitor.visitSchemaItemSync)\n this._visitor.visitSchemaItemSync(schemaItem);\n\n if (ECClass.isECClass(schemaItem) && this._visitor.visitClassSync)\n this._visitor.visitClassSync(schemaItem);\n\n switch (schemaItem.schemaItemType) {\n case SchemaItemType.Constant:\n if (this._visitor.visitConstantSync)\n this._visitor.visitConstantSync(schemaItem as Constant);\n break;\n case SchemaItemType.CustomAttributeClass:\n if (this._visitor.visitCustomAttributeClassSync)\n this._visitor.visitCustomAttributeClassSync(schemaItem as CustomAttributeClass);\n break;\n case SchemaItemType.EntityClass:\n if (this._visitor.visitEntityClassSync)\n this._visitor.visitEntityClassSync(schemaItem as EntityClass);\n break;\n case SchemaItemType.Enumeration:\n if (this._visitor.visitEnumerationSync)\n this._visitor.visitEnumerationSync(schemaItem as Enumeration);\n break;\n case SchemaItemType.Format:\n if (this._visitor.visitFormatSync)\n this._visitor.visitFormatSync(schemaItem as Format);\n break;\n case SchemaItemType.InvertedUnit:\n if (this._visitor.visitInvertedUnitSync)\n this._visitor.visitInvertedUnitSync(schemaItem as InvertedUnit);\n break;\n case SchemaItemType.KindOfQuantity:\n if (this._visitor.visitKindOfQuantitySync)\n this._visitor.visitKindOfQuantitySync(schemaItem as KindOfQuantity);\n break;\n case SchemaItemType.Mixin:\n if (this._visitor.visitMixinSync)\n this._visitor.visitMixinSync(schemaItem as Mixin);\n break;\n case SchemaItemType.Phenomenon:\n if (this._visitor.visitPhenomenonSync)\n this._visitor.visitPhenomenonSync(schemaItem as Phenomenon);\n break;\n case SchemaItemType.PropertyCategory:\n if (this._visitor.visitPropertyCategorySync)\n this._visitor.visitPropertyCategorySync(schemaItem as PropertyCategory);\n break;\n case SchemaItemType.RelationshipClass:\n if (this._visitor.visitRelationshipClassSync)\n this._visitor.visitRelationshipClassSync(schemaItem as RelationshipClass);\n break;\n case SchemaItemType.StructClass:\n if (this._visitor.visitStructClassSync)\n this._visitor.visitStructClassSync(schemaItem as StructClass);\n break;\n case SchemaItemType.Unit:\n if (this._visitor.visitUnitSync)\n this._visitor.visitUnitSync(schemaItem as Unit);\n break;\n case SchemaItemType.UnitSystem:\n if (this._visitor.visitUnitSystemSync)\n this._visitor.visitUnitSystemSync(schemaItem);\n break;\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { SchemaContext } from "../Context";
2
- import { UnitConversion } from "./UnitConversion";
2
+ import { UnitConversion } from "@itwin/core-quantity";
3
3
  /**
4
4
  * Class constructed with SchemaContext and used to calculate [[UnitConversion]] between Units
5
5
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"UnitConverter.d.ts","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;;GAGG;AACH,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IANrC,OAAO,CAAC,OAAO,CAAY;IAE3B;;;OAGG;gBAC0B,QAAQ,EAAE,aAAa;IAIpD;;;;;;;;;OASG;IACU,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB3F;;;;OAIG;YACW,YAAY;IAiC1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;CA4B5B"}
1
+ {"version":3,"file":"UnitConverter.d.ts","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;GAGG;AACH,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IANrC,OAAO,CAAC,OAAO,CAAY;IAE3B;;;OAGG;gBAC0B,QAAQ,EAAE,aAAa;IAIpD;;;;;;;;;OASG;IACU,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB3F;;;;OAIG;YACW,YAAY;IAiC1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;CA4B5B"}
@@ -6,7 +6,7 @@ import { BentleyError, BentleyStatus } from "@itwin/core-bentley";
6
6
  import { SchemaItem } from "../Metadata/SchemaItem";
7
7
  import { Unit } from "../Metadata/Unit";
8
8
  import { SchemaKey } from "../SchemaKey";
9
- import { UnitConversion } from "./UnitConversion";
9
+ import { UnitConversion } from "@itwin/core-quantity";
10
10
  import { UnitGraph } from "./UnitTree";
11
11
  /**
12
12
  * Class constructed with SchemaContext and used to calculate [[UnitConversion]] between Units
@@ -1 +1 @@
1
- {"version":3,"file":"UnitConverter.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConverter.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,OAAO,aAAa;IAOK;IANrB,OAAO,CAAY;IAE3B;;;OAGG;IACH,YAA6B,QAAuB;QAAvB,aAAQ,GAAR,QAAQ,CAAe;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,MAAc;QAC/D,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,uCAAuC,EAAE,GAAG,EAAE;gBACxF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAC5F,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAC5E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CAAC,IAAqB,EAAE,EAAmB;QACnE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;YAC1B,OAAO,cAAc,CAAC,QAAQ,CAAC;QAEjC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAY,EAAE,EAAU,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa;YAChB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,0DAA0D,EAAE,GAAG,EAAE;gBAC3G,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QAEL,6CAA6C;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,+DAA+D;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9D,6DAA6D;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAExD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,WAAW,CAAC;YACvD,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,yDAAyD,EAAE,GAAG,EAAE;gBAC1G,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QAEL,uEAAuE;QACvE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC;QAC/E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CAAC,aAAkC,EAAE,WAAgC;QAC9F,qGAAqG;QACrG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,MAAM,CAAC,EAAE,cAAc,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,cAAc,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC5C,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,EAAE,cAAc,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,cAAc,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC5C,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;YACzC,OAAO,KAAK,CAAC;QAEf,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7E,2BAA2B;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { BentleyError, BentleyStatus } from \"@itwin/core-bentley\";\nimport { SchemaContext } from \"../Context\";\nimport { Constant } from \"../Metadata/Constant\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { Unit } from \"../Metadata/Unit\";\nimport { SchemaKey } from \"../SchemaKey\";\nimport { UnitConversion } from \"./UnitConversion\";\nimport { UnitGraph } from \"./UnitTree\";\n\n/**\n * Class constructed with SchemaContext and used to calculate [[UnitConversion]] between Units\n * @internal\n */\nexport class UnitConverter {\n private _uGraph: UnitGraph;\n\n /**\n * Create Converter context\n * @param _context SchemaContext with contexts added to it.\n */\n constructor(private readonly _context: SchemaContext) {\n this._uGraph = new UnitGraph(this._context);\n }\n\n /**\n * Find conversion between from and to units, formatted {schemaName}.{schemaItemName} or {schemaName}:{schemaItemName}\n * @param fromUnit SchemaItem full name of source unit\n * @param toUnit SchemaItem full name of target unit\n * @returns [[UnitConversion]] converting fromUnit -> toUnit with a factor and an offset\n * @throws Error if from and to Units' SchemaItem is not found in Schema or Schema prefix is not found in SchemaContext\n * @throws Error if from and to Units do not belong to the same phenomenon\n * @throws Error if definitions' SchemaItems cannot be found in its own or referenced Schemas\n * @throws Error if base units of source and target unit do not match\n */\n public async calculateConversion(fromUnit: string, toUnit: string): Promise<UnitConversion> {\n const [fromSchemaName, fromSchemaItemName] = SchemaItem.parseFullName(fromUnit);\n const [toSchemaName, toSchemaItemName] = SchemaItem.parseFullName(toUnit);\n const fromSchemaKey = new SchemaKey(fromSchemaName);\n const toSchemaKey = new SchemaKey(toSchemaName);\n\n const fromSchema = await this._context.getSchema(fromSchemaKey);\n const toSchema = await this._context.getSchema(toSchemaKey);\n\n if (!fromSchema || !toSchema) {\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find from's and/or to's schema\", () => {\n return { from: fromUnit, fromSchema: fromSchemaName, to: toUnit, toSchema: toSchemaName };\n });\n }\n\n const from = await this._uGraph.resolveUnit(fromSchemaItemName, fromSchema);\n const to = await this._uGraph.resolveUnit(toSchemaItemName, toSchema);\n\n return this.processUnits(from, to);\n }\n\n /**\n * @param from Source unit converted from\n * @param to Target unit converted to\n * @internal\n */\n private async processUnits(from: Unit | Constant, to: Unit | Constant): Promise<UnitConversion> {\n if (from.key.matches(to.key))\n return UnitConversion.identity;\n\n const areCompatible = await Unit.areCompatible(from as Unit, to as Unit);\n if (!areCompatible)\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not belong to same phenomenon`, () => {\n return { from, to };\n });\n\n // Add nodes and subsequent children to graph\n await this._uGraph.addUnit(from);\n await this._uGraph.addUnit(to);\n\n const fromBaseUnits = new Map<string, number>();\n const toBaseUnits = new Map<string, number>();\n // Calculate map of UnitConversions to get between from -> base\n const fromMapStore = this._uGraph.reduce(from, fromBaseUnits);\n // Calculate map of UnitConversions to get between base -> to\n const toMapStore = this._uGraph.reduce(to, toBaseUnits);\n\n if (!this.checkBaseUnitsMatch(fromBaseUnits, toBaseUnits))\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not have matching base units`, () => {\n return { from, to };\n });\n\n // Final calculations to get singular UnitConversion between from -> to\n const fromMap = fromMapStore.get(from.key.fullName) || UnitConversion.identity;\n const toMap = toMapStore.get(to.key.fullName) || UnitConversion.identity;\n const fromInverse = fromMap.inverse();\n return fromInverse.compose(toMap);\n }\n\n /**\n * Check if fromBaseUnits's base units and exponents matches toBaseUnits's\n * @param fromBaseUnits Map of base units for source unit\n * @param toBaseUnits Map of base units for target unit\n * @internal\n */\n private checkBaseUnitsMatch(fromBaseUnits: Map<string, number>, toBaseUnits: Map<string, number>): boolean {\n // Trim maps of \"One\" and value that equal zero as they do not affect the base units and calculations\n for (const [key, value] of fromBaseUnits.entries()) {\n const [, schemaItemName] = SchemaItem.parseFullName(key);\n if (schemaItemName === \"ONE\" || value === 0) {\n fromBaseUnits.delete(key);\n }\n }\n\n for (const [key, value] of toBaseUnits.entries()) {\n const [, schemaItemName] = SchemaItem.parseFullName(key);\n if (schemaItemName === \"ONE\" || value === 0) {\n toBaseUnits.delete(key);\n }\n }\n\n if (fromBaseUnits.size !== toBaseUnits.size)\n return false;\n\n for (const key of fromBaseUnits.keys()) {\n if (!toBaseUnits.has(key) || fromBaseUnits.get(key) !== toBaseUnits.get(key)) {\n // Mismatching key or value\n return false;\n }\n }\n\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"UnitConverter.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConverter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { BentleyError, BentleyStatus } from \"@itwin/core-bentley\";\nimport { SchemaContext } from \"../Context\";\nimport { Constant } from \"../Metadata/Constant\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { Unit } from \"../Metadata/Unit\";\nimport { SchemaKey } from \"../SchemaKey\";\nimport { UnitConversion } from \"@itwin/core-quantity\";\nimport { UnitGraph } from \"./UnitTree\";\n\n/**\n * Class constructed with SchemaContext and used to calculate [[UnitConversion]] between Units\n * @internal\n */\nexport class UnitConverter {\n private _uGraph: UnitGraph;\n\n /**\n * Create Converter context\n * @param _context SchemaContext with contexts added to it.\n */\n constructor(private readonly _context: SchemaContext) {\n this._uGraph = new UnitGraph(this._context);\n }\n\n /**\n * Find conversion between from and to units, formatted {schemaName}.{schemaItemName} or {schemaName}:{schemaItemName}\n * @param fromUnit SchemaItem full name of source unit\n * @param toUnit SchemaItem full name of target unit\n * @returns [[UnitConversion]] converting fromUnit -> toUnit with a factor and an offset\n * @throws Error if from and to Units' SchemaItem is not found in Schema or Schema prefix is not found in SchemaContext\n * @throws Error if from and to Units do not belong to the same phenomenon\n * @throws Error if definitions' SchemaItems cannot be found in its own or referenced Schemas\n * @throws Error if base units of source and target unit do not match\n */\n public async calculateConversion(fromUnit: string, toUnit: string): Promise<UnitConversion> {\n const [fromSchemaName, fromSchemaItemName] = SchemaItem.parseFullName(fromUnit);\n const [toSchemaName, toSchemaItemName] = SchemaItem.parseFullName(toUnit);\n const fromSchemaKey = new SchemaKey(fromSchemaName);\n const toSchemaKey = new SchemaKey(toSchemaName);\n\n const fromSchema = await this._context.getSchema(fromSchemaKey);\n const toSchema = await this._context.getSchema(toSchemaKey);\n\n if (!fromSchema || !toSchema) {\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find from's and/or to's schema\", () => {\n return { from: fromUnit, fromSchema: fromSchemaName, to: toUnit, toSchema: toSchemaName };\n });\n }\n\n const from = await this._uGraph.resolveUnit(fromSchemaItemName, fromSchema);\n const to = await this._uGraph.resolveUnit(toSchemaItemName, toSchema);\n\n return this.processUnits(from, to);\n }\n\n /**\n * @param from Source unit converted from\n * @param to Target unit converted to\n * @internal\n */\n private async processUnits(from: Unit | Constant, to: Unit | Constant): Promise<UnitConversion> {\n if (from.key.matches(to.key))\n return UnitConversion.identity;\n\n const areCompatible = await Unit.areCompatible(from as Unit, to as Unit);\n if (!areCompatible)\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not belong to same phenomenon`, () => {\n return { from, to };\n });\n\n // Add nodes and subsequent children to graph\n await this._uGraph.addUnit(from);\n await this._uGraph.addUnit(to);\n\n const fromBaseUnits = new Map<string, number>();\n const toBaseUnits = new Map<string, number>();\n // Calculate map of UnitConversions to get between from -> base\n const fromMapStore = this._uGraph.reduce(from, fromBaseUnits);\n // Calculate map of UnitConversions to get between base -> to\n const toMapStore = this._uGraph.reduce(to, toBaseUnits);\n\n if (!this.checkBaseUnitsMatch(fromBaseUnits, toBaseUnits))\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not have matching base units`, () => {\n return { from, to };\n });\n\n // Final calculations to get singular UnitConversion between from -> to\n const fromMap = fromMapStore.get(from.key.fullName) || UnitConversion.identity;\n const toMap = toMapStore.get(to.key.fullName) || UnitConversion.identity;\n const fromInverse = fromMap.inverse();\n return fromInverse.compose(toMap);\n }\n\n /**\n * Check if fromBaseUnits's base units and exponents matches toBaseUnits's\n * @param fromBaseUnits Map of base units for source unit\n * @param toBaseUnits Map of base units for target unit\n * @internal\n */\n private checkBaseUnitsMatch(fromBaseUnits: Map<string, number>, toBaseUnits: Map<string, number>): boolean {\n // Trim maps of \"One\" and value that equal zero as they do not affect the base units and calculations\n for (const [key, value] of fromBaseUnits.entries()) {\n const [, schemaItemName] = SchemaItem.parseFullName(key);\n if (schemaItemName === \"ONE\" || value === 0) {\n fromBaseUnits.delete(key);\n }\n }\n\n for (const [key, value] of toBaseUnits.entries()) {\n const [, schemaItemName] = SchemaItem.parseFullName(key);\n if (schemaItemName === \"ONE\" || value === 0) {\n toBaseUnits.delete(key);\n }\n }\n\n if (fromBaseUnits.size !== toBaseUnits.size)\n return false;\n\n for (const key of fromBaseUnits.keys()) {\n if (!toBaseUnits.has(key) || fromBaseUnits.get(key) !== toBaseUnits.get(key)) {\n // Mismatching key or value\n return false;\n }\n }\n\n return true;\n }\n}\n"]}
@@ -2,19 +2,18 @@ import { SchemaContext } from "../Context";
2
2
  import { Constant } from "../Metadata/Constant";
3
3
  import { Schema } from "../Metadata/Schema";
4
4
  import { Unit } from "../Metadata/Unit";
5
- import { UnitConversion } from "./UnitConversion";
6
- import { Graph } from "./Graph";
5
+ import { UnitConversion, UnitConversionGraph } from "@itwin/core-quantity";
7
6
  /** @internal */
8
7
  export declare class GraphUtils {
9
8
  /**
10
9
  * DFS traversal - Post order
11
- * @param _graph Graph to traverse
10
+ * @param _graph DirectedGraph to traverse
12
11
  * @param start Starting node
13
12
  * @param keyFrom Get key from label
14
13
  * @param op Reducing function
15
14
  * @param initial Initial label
16
15
  */
17
- static dfsReduce<T>(_graph: Graph<Unit | Constant>, key: string, op: (previous: T, current: string) => T, initial: T, baseUnitsMap: Map<string, number>, accumulatedExponent: number): T;
16
+ static dfsReduce<T>(_graph: UnitConversionGraph<Unit | Constant>, key: string, op: (previous: T, current: string) => T, initial: T, baseUnitsMap: Map<string, number>, accumulatedExponent: number): T;
18
17
  }
19
18
  /** @internal */
20
19
  export declare class UnitGraph {
@@ -1 +1 @@
1
- {"version":3,"file":"UnitTree.d.ts","sourceRoot":"","sources":["../../../src/UnitConversion/UnitTree.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,gBAAgB;AAChB,qBAAa,UAAU;IACrB;;;;;;;OAOG;WACW,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,MAAM,GAAG,CAAC;CAuBhM;AAED,gBAAgB;AAChB,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,gBAAgB,CAAoC;gBAExC,QAAQ,EAAE,aAAa;IAI3C;;;;OAIG;IACU,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IAqDvF;;;OAGG;IACU,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAkB5C,cAAc;IAuB5B,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOpG,OAAO,CAAC,gBAAgB;CAmBzB"}
1
+ {"version":3,"file":"UnitTree.d.ts","sourceRoot":"","sources":["../../../src/UnitConversion/UnitTree.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAA4C,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAErH,gBAAgB;AAChB,qBAAa,UAAU;IACrB;;;;;;;OAOG;WACW,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,MAAM,GAAG,CAAC;CAuB9M;AAED,gBAAgB;AAChB,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,gBAAgB,CAAoC;gBAExC,QAAQ,EAAE,aAAa;IAI3C;;;;OAIG;IACU,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IAqDvF;;;OAGG;IACU,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAkB5C,cAAc;IAuB5B,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOpG,OAAO,CAAC,gBAAgB;CAqBzB"}
@@ -6,14 +6,12 @@ import { BentleyError, BentleyStatus } from "@itwin/core-bentley";
6
6
  import { SchemaItem } from "../Metadata/SchemaItem";
7
7
  import { SchemaItemKey, SchemaKey } from "../SchemaKey";
8
8
  import { SchemaItemType } from "../ECObjects";
9
- import { UnitConversion } from "./UnitConversion";
10
- import { parseDefinition } from "./Parser";
11
- import { Graph } from "./Graph";
9
+ import { parseDefinition, UnitConversion, UnitConversionGraph } from "@itwin/core-quantity";
12
10
  /** @internal */
13
11
  export class GraphUtils {
14
12
  /**
15
13
  * DFS traversal - Post order
16
- * @param _graph Graph to traverse
14
+ * @param _graph DirectedGraph to traverse
17
15
  * @param start Starting node
18
16
  * @param keyFrom Get key from label
19
17
  * @param op Reducing function
@@ -31,7 +29,7 @@ export class GraphUtils {
31
29
  }
32
30
  else {
33
31
  if (baseUnitsMap.has(key)) {
34
- const oldExponent = baseUnitsMap.get(key);
32
+ const oldExponent = baseUnitsMap.get(key) ?? 0;
35
33
  baseUnitsMap.set(key, oldExponent + accumulatedExponent);
36
34
  }
37
35
  else {
@@ -44,7 +42,7 @@ export class GraphUtils {
44
42
  /** @internal */
45
43
  export class UnitGraph {
46
44
  _context;
47
- _graph = new Graph();
45
+ _graph = new UnitConversionGraph();
48
46
  _unitsInProgress = new Map();
49
47
  constructor(_context) {
50
48
  this._context = _context;
@@ -161,6 +159,8 @@ export class UnitGraph {
161
159
  const emap = map.raise(exponent);
162
160
  return pm ? pm.multiply(emap) : emap;
163
161
  }, undefined);
162
+ // EC Constant nodes have no offset property → UnitConversionSource.offset is undefined → 0.
163
+ // Matches the prior explicit 0.0 branch before UnitConversion moved to core-quantity.
164
164
  const thisMap = this._graph.node(unitFullName) ? UnitConversion.from(this._graph.node(unitFullName)) : UnitConversion.identity;
165
165
  const other = cmap || UnitConversion.identity;
166
166
  const result = other.compose(thisMap);
@@ -1 +1 @@
1
- {"version":3,"file":"UnitTree.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { BentleyError, BentleyStatus } from \"@itwin/core-bentley\";\nimport { SchemaContext } from \"../Context\";\nimport { Constant } from \"../Metadata/Constant\";\nimport { Schema } from \"../Metadata/Schema\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { Unit } from \"../Metadata/Unit\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { SchemaItemType } from \"../ECObjects\";\nimport { UnitConversion } from \"./UnitConversion\";\nimport { DefinitionFragment, parseDefinition } from \"./Parser\";\nimport { Graph } from \"./Graph\";\n\n/** @internal */\nexport class GraphUtils {\n /**\n * DFS traversal - Post order\n * @param _graph Graph to traverse\n * @param start Starting node\n * @param keyFrom Get key from label\n * @param op Reducing function\n * @param initial Initial label\n */\n public static dfsReduce<T>(_graph: Graph<Unit | Constant>, key: string, op: (previous: T, current: string) => T, initial: T, baseUnitsMap: Map<string, number>, accumulatedExponent: number): T {\n const outEdges = _graph.outEdges(key);\n let t = initial;\n if (outEdges.length > 0) {\n t = outEdges.reduce<T>(\n (p, edge) => {\n const { v, w } = edge;\n const edgeExponent = _graph.edge(v, w).exponent;\n return GraphUtils.dfsReduce(_graph, edge.w, op, p, baseUnitsMap, accumulatedExponent * edgeExponent);\n },\n t,\n );\n } else {\n if (baseUnitsMap.has(key)) {\n const oldExponent = baseUnitsMap.get(key)!;\n baseUnitsMap.set(key, oldExponent + accumulatedExponent);\n } else {\n baseUnitsMap.set(key, accumulatedExponent);\n }\n }\n\n return op(t, key);\n }\n}\n\n/** @internal */\nexport class UnitGraph {\n private _graph = new Graph<Unit | Constant>();\n private _unitsInProgress = new Map<string, Promise<void>>();\n\n constructor(private _context: SchemaContext) {\n this._graph.setGraph(\"Unit tree processor\");\n }\n\n /**\n * Tries to find the unit/constant given by name in currentSchema\n * @param name SchemaItem name or parsed definition to find unit of; Could be {schemaName}:{schemaItemName} or {alias}:{schemaItemName} or {schemaItemName}\n * @param currentSchema schema to find name in; name could also be in a referenced schema of current schema\n */\n public async resolveUnit(name: string, currentSchema: Schema): Promise<Unit | Constant> {\n let [schemaName] = SchemaItem.parseFullName(name);\n const [, schemaItemName] = SchemaItem.parseFullName(name);\n\n if (schemaName !== \"\") {\n // Check if schemaName is schemaName or alias\n const ref = currentSchema.getReferenceSync(schemaName);\n const refName = currentSchema.getReferenceNameByAlias(schemaName);\n if (ref) {\n // Got schema by schemaName\n schemaName = ref.name;\n } else if (refName) {\n // Got schema by alias\n schemaName = refName;\n } else {\n // Didn't match any referenced schema, check if it is current schemaName or alias\n if (schemaName === currentSchema.name || schemaName === currentSchema.alias)\n schemaName = currentSchema.name;\n }\n\n // Create schema key with schema name\n const schemaKey = new SchemaKey(schemaName);\n // Get schema with schema key\n const schema = await this._context.getSchema(schemaKey);\n if (!schema) {\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find schema\", () => {\n return { schema: schemaName };\n });\n } else {\n // Set currentSchema to look up schemaItem to be whatever is prefixed in name\n currentSchema = schema;\n }\n // Update name to not have prefix\n name = schemaItemName;\n }\n\n // Create schema item key with name and schema\n const itemKey = new SchemaItemKey(name, currentSchema.schemaKey);\n // Get schema item with schema item key\n const item = await this._context.getSchemaItem(itemKey);\n if (!item)\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find schema item\", () => {\n return { item: name };\n });\n\n if (item.schemaItemType === SchemaItemType.Unit || item.schemaItemType === SchemaItemType.Constant)\n return item as Unit | Constant;\n\n throw new BentleyError(BentleyStatus.ERROR, \"Item is neither a unit or a constant\", () => {\n return { itemType: item.key.fullName };\n });\n }\n\n /**\n * Adds unit and corresponding children to graph as well as edges between units\n * @param unit Current unit to be added to graph\n */\n public async addUnit(unit: Unit | Constant): Promise<void> {\n if(this._unitsInProgress.has(unit.key.fullName))\n return this._unitsInProgress.get(unit.key.fullName);\n\n if (this._graph.hasNode(unit.key.fullName))\n return;\n\n this._graph.setNode(unit.key.fullName, unit);\n if (this.isIdentity(unit))\n return;\n\n const promise = this.addUnitToGraph(unit);\n this._unitsInProgress.set(unit.key.fullName, promise);\n\n await promise\n .finally(() => this._unitsInProgress.delete(unit.key.fullName));\n }\n\n private async addUnitToGraph(unit: Unit | Constant) {\n const umap = parseDefinition(unit.definition);\n\n const promiseArray: Promise<[Unit | Constant, DefinitionFragment]>[] = [];\n for (const [key, value] of umap) {\n promiseArray.push(\n this.resolveUnit(key, unit.schema).then((u) => [u, value]),\n );\n }\n const resolved = await Promise.all<[Unit | Constant, DefinitionFragment]>(\n promiseArray,\n );\n\n const children = resolved.map(async ([u, def]) => {\n await this.addUnit(u);\n this._graph.setEdge(unit.key.fullName, u.key.fullName, {\n exponent: def.exponent,\n });\n });\n\n await Promise.all(children);\n }\n\n private isIdentity(unit: Unit | Constant) {\n return unit.definition === unit.name;\n }\n\n /**\n * Reduce the tree to produce a single map\n * @param unit Unit to be processed\n * @param stopNodes The tree exploration should stop here\n */\n public reduce(unit: Unit | Constant, baseUnitsMap: Map<string, number>): Map<string, UnitConversion> {\n const unitFullName = unit.key.fullName;\n const innerMapStore = new Map<string, UnitConversion>();\n const outerMapStore = GraphUtils.dfsReduce(this._graph, unitFullName, (p, c) => this.reducingFunction(p, c), innerMapStore, baseUnitsMap, 1);\n return outerMapStore;\n }\n\n private reducingFunction(innermapStore: Map<string, UnitConversion>, unitFullName: string) {\n const outEdges = this._graph.outEdges(unitFullName);\n if (outEdges) {\n const cmap = outEdges.reduce<UnitConversion | undefined>((pm, e) => {\n const { exponent } = this._graph.edge(e.v, e.w);\n const stored = innermapStore.get(e.w);\n const map = stored ? stored : UnitConversion.identity;\n const emap = map.raise(exponent);\n return pm ? pm.multiply(emap) : emap;\n }, undefined);\n const thisMap = this._graph.node(unitFullName) ? UnitConversion.from(this._graph.node(unitFullName)) : UnitConversion.identity;\n const other = cmap || UnitConversion.identity;\n const result = other.compose(thisMap);\n innermapStore.set(unitFullName, result);\n } else {\n innermapStore.set(unitFullName, UnitConversion.identity);\n }\n return innermapStore;\n }\n}\n"]}
1
+ {"version":3,"file":"UnitTree.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { BentleyError, BentleyStatus } from \"@itwin/core-bentley\";\nimport { SchemaContext } from \"../Context\";\nimport { Constant } from \"../Metadata/Constant\";\nimport { Schema } from \"../Metadata/Schema\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { Unit } from \"../Metadata/Unit\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { SchemaItemType } from \"../ECObjects\";\nimport { type DefinitionFragment, parseDefinition, UnitConversion, UnitConversionGraph } from \"@itwin/core-quantity\";\n\n/** @internal */\nexport class GraphUtils {\n /**\n * DFS traversal - Post order\n * @param _graph DirectedGraph to traverse\n * @param start Starting node\n * @param keyFrom Get key from label\n * @param op Reducing function\n * @param initial Initial label\n */\n public static dfsReduce<T>(_graph: UnitConversionGraph<Unit | Constant>, key: string, op: (previous: T, current: string) => T, initial: T, baseUnitsMap: Map<string, number>, accumulatedExponent: number): T {\n const outEdges = _graph.outEdges(key);\n let t = initial;\n if (outEdges.length > 0) {\n t = outEdges.reduce<T>(\n (p, edge) => {\n const { v, w } = edge;\n const edgeExponent = _graph.edge(v, w).exponent;\n return GraphUtils.dfsReduce(_graph, edge.w, op, p, baseUnitsMap, accumulatedExponent * edgeExponent);\n },\n t,\n );\n } else {\n if (baseUnitsMap.has(key)) {\n const oldExponent = baseUnitsMap.get(key) ?? 0;\n baseUnitsMap.set(key, oldExponent + accumulatedExponent);\n } else {\n baseUnitsMap.set(key, accumulatedExponent);\n }\n }\n\n return op(t, key);\n }\n}\n\n/** @internal */\nexport class UnitGraph {\n private _graph = new UnitConversionGraph<Unit | Constant>();\n private _unitsInProgress = new Map<string, Promise<void>>();\n\n constructor(private _context: SchemaContext) {\n this._graph.setGraph(\"Unit tree processor\");\n }\n\n /**\n * Tries to find the unit/constant given by name in currentSchema\n * @param name SchemaItem name or parsed definition to find unit of; Could be {schemaName}:{schemaItemName} or {alias}:{schemaItemName} or {schemaItemName}\n * @param currentSchema schema to find name in; name could also be in a referenced schema of current schema\n */\n public async resolveUnit(name: string, currentSchema: Schema): Promise<Unit | Constant> {\n let [schemaName] = SchemaItem.parseFullName(name);\n const [, schemaItemName] = SchemaItem.parseFullName(name);\n\n if (schemaName !== \"\") {\n // Check if schemaName is schemaName or alias\n const ref = currentSchema.getReferenceSync(schemaName);\n const refName = currentSchema.getReferenceNameByAlias(schemaName);\n if (ref) {\n // Got schema by schemaName\n schemaName = ref.name;\n } else if (refName) {\n // Got schema by alias\n schemaName = refName;\n } else {\n // Didn't match any referenced schema, check if it is current schemaName or alias\n if (schemaName === currentSchema.name || schemaName === currentSchema.alias)\n schemaName = currentSchema.name;\n }\n\n // Create schema key with schema name\n const schemaKey = new SchemaKey(schemaName);\n // Get schema with schema key\n const schema = await this._context.getSchema(schemaKey);\n if (!schema) {\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find schema\", () => {\n return { schema: schemaName };\n });\n } else {\n // Set currentSchema to look up schemaItem to be whatever is prefixed in name\n currentSchema = schema;\n }\n // Update name to not have prefix\n name = schemaItemName;\n }\n\n // Create schema item key with name and schema\n const itemKey = new SchemaItemKey(name, currentSchema.schemaKey);\n // Get schema item with schema item key\n const item = await this._context.getSchemaItem(itemKey);\n if (!item)\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find schema item\", () => {\n return { item: name };\n });\n\n if (item.schemaItemType === SchemaItemType.Unit || item.schemaItemType === SchemaItemType.Constant)\n return item as Unit | Constant;\n\n throw new BentleyError(BentleyStatus.ERROR, \"Item is neither a unit or a constant\", () => {\n return { itemType: item.key.fullName };\n });\n }\n\n /**\n * Adds unit and corresponding children to graph as well as edges between units\n * @param unit Current unit to be added to graph\n */\n public async addUnit(unit: Unit | Constant): Promise<void> {\n if (this._unitsInProgress.has(unit.key.fullName))\n return this._unitsInProgress.get(unit.key.fullName);\n\n if (this._graph.hasNode(unit.key.fullName))\n return;\n\n this._graph.setNode(unit.key.fullName, unit);\n if (this.isIdentity(unit))\n return;\n\n const promise = this.addUnitToGraph(unit);\n this._unitsInProgress.set(unit.key.fullName, promise);\n\n await promise\n .finally(() => this._unitsInProgress.delete(unit.key.fullName));\n }\n\n private async addUnitToGraph(unit: Unit | Constant) {\n const umap = parseDefinition(unit.definition);\n\n const promiseArray: Promise<[Unit | Constant, DefinitionFragment]>[] = [];\n for (const [key, value] of umap) {\n promiseArray.push(\n this.resolveUnit(key, unit.schema).then((u) => [u, value]),\n );\n }\n const resolved = await Promise.all<[Unit | Constant, DefinitionFragment]>(\n promiseArray,\n );\n\n const children = resolved.map(async ([u, def]) => {\n await this.addUnit(u);\n this._graph.setEdge(unit.key.fullName, u.key.fullName, {\n exponent: def.exponent,\n });\n });\n\n await Promise.all(children);\n }\n\n private isIdentity(unit: Unit | Constant) {\n return unit.definition === unit.name;\n }\n\n /**\n * Reduce the tree to produce a single map\n * @param unit Unit to be processed\n * @param stopNodes The tree exploration should stop here\n */\n public reduce(unit: Unit | Constant, baseUnitsMap: Map<string, number>): Map<string, UnitConversion> {\n const unitFullName = unit.key.fullName;\n const innerMapStore = new Map<string, UnitConversion>();\n const outerMapStore = GraphUtils.dfsReduce(this._graph, unitFullName, (p, c) => this.reducingFunction(p, c), innerMapStore, baseUnitsMap, 1);\n return outerMapStore;\n }\n\n private reducingFunction(innermapStore: Map<string, UnitConversion>, unitFullName: string) {\n const outEdges = this._graph.outEdges(unitFullName);\n if (outEdges) {\n const cmap = outEdges.reduce<UnitConversion | undefined>((pm, e) => {\n const { exponent } = this._graph.edge(e.v, e.w);\n const stored = innermapStore.get(e.w);\n const map = stored ? stored : UnitConversion.identity;\n const emap = map.raise(exponent);\n return pm ? pm.multiply(emap) : emap;\n }, undefined);\n // EC Constant nodes have no offset property → UnitConversionSource.offset is undefined → 0.\n // Matches the prior explicit 0.0 branch before UnitConversion moved to core-quantity.\n const thisMap = this._graph.node(unitFullName) ? UnitConversion.from(this._graph.node(unitFullName)) : UnitConversion.identity;\n const other = cmap || UnitConversion.identity;\n const result = other.compose(thisMap);\n innermapStore.set(unitFullName, result);\n } else {\n innermapStore.set(unitFullName, UnitConversion.identity);\n }\n return innermapStore;\n }\n}\n"]}
@@ -2,6 +2,9 @@ import { UnitConversionProps, UnitExtraData, UnitProps, UnitsProvider } from "@i
2
2
  import { ISchemaLocater } from "../Context";
3
3
  /**
4
4
  * Class used to find Units in SchemaContext by attributes such as Phenomenon and DisplayLabel.
5
+ *
6
+ * To layer schema-defined units on top of the bundled BIS units from `@itwin/core-quantity`,
7
+ * pass this as `primary` to `createUnitsProvider` from `@itwin/core-quantity`.
5
8
  * @beta
6
9
  */
7
10
  export declare class SchemaUnitProvider implements UnitsProvider {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaUnitProvider.d.ts","sourceRoot":"","sources":["../../../src/UnitProvider/SchemaUnitProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiC,mBAAmB,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnI,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAQ3D;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAWR,OAAO,CAAC,cAAc;IAVpE,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;;;OAMG;gBACS,gBAAgB,EAAE,cAAc,EAAU,cAAc,GAAE,aAAa,EAAO;IAU1F;;;;OAIG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBjE;;;;OAIG;IACU,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAiD5E;;;OAGG;IACI,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAWjE;;;;;;;;;;OAUG;IACU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAc3H;;;;;OAKG;IACU,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAuBlF,2BAA2B;IAqBzC;;;;OAIG;YACW,aAAa;IAwB3B;;;OAGG;YACW,sBAAsB;IA4BpC;;;OAGG;YACW,yBAAyB;CAsBxC"}
1
+ {"version":3,"file":"SchemaUnitProvider.d.ts","sourceRoot":"","sources":["../../../src/UnitProvider/SchemaUnitProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiC,mBAAmB,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnI,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAQ3D;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAWR,OAAO,CAAC,cAAc;IAVpE,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;;;OAMG;gBACS,gBAAgB,EAAE,cAAc,EAAU,cAAc,GAAE,aAAa,EAAO;IAU1F;;;;OAIG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBjE;;;;OAIG;IACU,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAiD5E;;;OAGG;IACI,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAWjE;;;;;;;;;;OAUG;IACU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAc3H;;;;;OAKG;IACU,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAuBlF,2BAA2B;IAqBzC;;;;OAIG;YACW,aAAa;IAwB3B;;;OAGG;YACW,sBAAsB;IA4BpC;;;OAGG;YACW,yBAAyB;CAsBxC"}
@@ -13,6 +13,9 @@ import { UnitConverter } from "../UnitConversion/UnitConverter";
13
13
  import { InvertedUnit } from "../Metadata/InvertedUnit";
14
14
  /**
15
15
  * Class used to find Units in SchemaContext by attributes such as Phenomenon and DisplayLabel.
16
+ *
17
+ * To layer schema-defined units on top of the bundled BIS units from `@itwin/core-quantity`,
18
+ * pass this as `primary` to `createUnitsProvider` from `@itwin/core-quantity`.
16
19
  * @beta
17
20
  */
18
21
  export class SchemaUnitProvider {