@itwin/ecschema-metadata 5.13.0-dev.2 → 5.13.0-dev.3

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 (135) hide show
  1. package/lib/cjs/Constants.js.map +1 -1
  2. package/lib/cjs/DelayedPromise.js.map +1 -1
  3. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  4. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  5. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  6. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  7. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  8. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  9. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  10. package/lib/cjs/ECName.js.map +1 -1
  11. package/lib/cjs/ECObjects.js.map +1 -1
  12. package/lib/cjs/Exception.js.map +1 -1
  13. package/lib/cjs/Formatting/FormatSetFormatsProvider.js.map +1 -1
  14. package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
  15. package/lib/cjs/IncrementalLoading/ClassParsers.js.map +1 -1
  16. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  17. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js +466 -466
  18. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  19. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  20. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  21. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  22. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +235 -235
  23. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  24. package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -1
  25. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js +309 -309
  26. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  27. package/lib/cjs/Interfaces.js.map +1 -1
  28. package/lib/cjs/Localization/LocalizationProvider.js.map +1 -1
  29. package/lib/cjs/Localization/LocalizationTypes.js.map +1 -1
  30. package/lib/cjs/Localization/SchemaLocalization.js.map +1 -1
  31. package/lib/cjs/Metadata/Class.js.map +1 -1
  32. package/lib/cjs/Metadata/Constant.js.map +1 -1
  33. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  34. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  35. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  36. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  37. package/lib/cjs/Metadata/Format.js.map +1 -1
  38. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  39. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  40. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  41. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  42. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  43. package/lib/cjs/Metadata/Property.js.map +1 -1
  44. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  45. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  46. package/lib/cjs/Metadata/Schema.js.map +1 -1
  47. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  48. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  49. package/lib/cjs/PropertyTypes.js.map +1 -1
  50. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  51. package/lib/cjs/SchemaKey.js.map +1 -1
  52. package/lib/cjs/SchemaLoader.js.map +1 -1
  53. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  54. package/lib/cjs/SchemaView/SchemaManifest.js.map +1 -1
  55. package/lib/cjs/SchemaView/SchemaView.js.map +1 -1
  56. package/lib/cjs/SchemaView/SchemaViewBinaryReader.js.map +1 -1
  57. package/lib/cjs/SchemaView/SchemaViewBuilder.js.map +1 -1
  58. package/lib/cjs/SchemaView/SchemaViewInterfaces.js.map +1 -1
  59. package/lib/cjs/SchemaView/SchemaViewManager.js.map +1 -1
  60. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  61. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  62. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  63. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  64. package/lib/cjs/ecschema-metadata.js.map +1 -1
  65. package/lib/cjs/utils/ECClassHierarchy.js.map +1 -1
  66. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  67. package/lib/cjs/utils/SchemaLoadingController.js.map +1 -1
  68. package/lib/esm/Constants.js.map +1 -1
  69. package/lib/esm/DelayedPromise.js.map +1 -1
  70. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  71. package/lib/esm/Deserialization/Helper.js.map +1 -1
  72. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  73. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  74. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  75. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  76. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  77. package/lib/esm/ECName.js.map +1 -1
  78. package/lib/esm/ECObjects.js.map +1 -1
  79. package/lib/esm/Exception.js.map +1 -1
  80. package/lib/esm/Formatting/FormatSetFormatsProvider.js.map +1 -1
  81. package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
  82. package/lib/esm/IncrementalLoading/ClassParsers.js.map +1 -1
  83. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  84. package/lib/esm/IncrementalLoading/FullSchemaQueries.js +466 -466
  85. package/lib/esm/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  86. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  87. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  88. package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  89. package/lib/esm/IncrementalLoading/SchemaItemQueries.js +235 -235
  90. package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  91. package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -1
  92. package/lib/esm/IncrementalLoading/SchemaStubQueries.js +309 -309
  93. package/lib/esm/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  94. package/lib/esm/Interfaces.js.map +1 -1
  95. package/lib/esm/Localization/LocalizationProvider.js.map +1 -1
  96. package/lib/esm/Localization/LocalizationTypes.js.map +1 -1
  97. package/lib/esm/Localization/SchemaLocalization.js.map +1 -1
  98. package/lib/esm/Metadata/Class.js.map +1 -1
  99. package/lib/esm/Metadata/Constant.js.map +1 -1
  100. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  101. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  102. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  103. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  104. package/lib/esm/Metadata/Format.js.map +1 -1
  105. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  106. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  107. package/lib/esm/Metadata/Mixin.js.map +1 -1
  108. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  109. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  110. package/lib/esm/Metadata/Property.js.map +1 -1
  111. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  112. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  113. package/lib/esm/Metadata/Schema.js.map +1 -1
  114. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  115. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  116. package/lib/esm/PropertyTypes.js.map +1 -1
  117. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  118. package/lib/esm/SchemaKey.js.map +1 -1
  119. package/lib/esm/SchemaLoader.js.map +1 -1
  120. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  121. package/lib/esm/SchemaView/SchemaManifest.js.map +1 -1
  122. package/lib/esm/SchemaView/SchemaView.js.map +1 -1
  123. package/lib/esm/SchemaView/SchemaViewBinaryReader.js.map +1 -1
  124. package/lib/esm/SchemaView/SchemaViewBuilder.js.map +1 -1
  125. package/lib/esm/SchemaView/SchemaViewInterfaces.js.map +1 -1
  126. package/lib/esm/SchemaView/SchemaViewManager.js.map +1 -1
  127. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  128. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  129. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  130. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  131. package/lib/esm/ecschema-metadata.js.map +1 -1
  132. package/lib/esm/utils/ECClassHierarchy.js.map +1 -1
  133. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  134. package/lib/esm/utils/SchemaLoadingController.js.map +1 -1
  135. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewBinaryReader.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBinaryReader.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 Schema\n */\n\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\nimport { type SchemaView } from \"./SchemaView\";\nimport { SchemaViewBuilder } from \"./SchemaViewBuilder\";\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\nimport { ClassData, ClassModifier, ClassType, PropertyDef, PropertyKind, schemaViewFormatVersion, SchemaViewPrimitiveType } from \"./SchemaViewInterfaces\";\n\n/** Binary record tags for the SchemaView blob format.\n * Each tag marks a flat, count-prefixed table. Must stay in sync with the C++ writer. */\nenum Tag {\n PropertyDefTable = 0x0A,\n SchemaTable = 0x10,\n EnumTable = 0x20,\n KoQTable = 0x30,\n PropCatTable = 0x31,\n ClassTable = 0x40,\n}\n\nconst MAGIC = 0x43534348; // \"CSCH\"\n\n/** Low-level binary reader for the SchemaView blob. */\nclass BinaryReader {\n private _view: DataView;\n private _bytes: Uint8Array;\n private _pos: number;\n private _strings: string[];\n\n constructor(data: Uint8Array) {\n this._bytes = data;\n this._view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n this._pos = 0;\n this._strings = [];\n }\n\n public readU8(): number {\n if (this._pos >= this._bytes.length)\n throw new Error(`SchemaView blob truncated: cannot read u8 at offset ${this._pos} (length ${this._bytes.length})`);\n return this._bytes[this._pos++];\n }\n public readU16(): number { const v = this._view.getUint16(this._pos, true); this._pos += 2; return v; }\n public readU32(): number { const v = this._view.getUint32(this._pos, true); this._pos += 4; return v; }\n public readI32(): number { const v = this._view.getInt32(this._pos, true); this._pos += 4; return v; }\n public readF64(): number { const v = this._view.getFloat64(this._pos, true); this._pos += 8; return v; }\n public get pos(): number { return this._pos; }\n public set pos(v: number) { this._pos = v; }\n\n /** Read a string-table reference (U32 index) and return the original string. */\n public readSRef(): string {\n const idx = this.readU32();\n if (idx >= this._strings.length)\n throw new Error(`SchemaView blob: string reference ${idx} out of range (string table size ${this._strings.length})`);\n return this._strings[idx];\n }\n\n /** Validate a count-prefixed table header: the declared count cannot exceed what the remaining\n * buffer could plausibly hold. Each entry consumes at least `minBytesPerEntry` bytes. */\n public validateCount(count: number, minBytesPerEntry: number, tableName: string): void {\n const remaining = this._bytes.length - this._pos;\n if (count > remaining / Math.max(1, minBytesPerEntry))\n throw new Error(`SchemaView blob: ${tableName} count ${count} exceeds remaining buffer (${remaining} bytes)`);\n }\n\n /** Parse the string table at the given offset. */\n public parseStringTable(offset: number): void {\n if (offset > this._bytes.length)\n throw new Error(`SchemaView blob: stringTable offset ${offset} is past end of blob (length ${this._bytes.length})`);\n const saved = this._pos;\n this._pos = offset;\n const count = this.readU32();\n // Each entry is at minimum a 4-byte length prefix - a count larger than the remaining bytes\n // cannot possibly be valid and would cause a huge `new Array` allocation on a malformed blob.\n const remaining = this._bytes.length - this._pos;\n if (count > remaining / 4)\n throw new Error(`SchemaView blob: stringTable count ${count} exceeds remaining buffer (${remaining} bytes)`);\n this._strings = new Array(count);\n const decoder = new TextDecoder();\n for (let i = 0; i < count; i++) {\n const len = this.readU32();\n if (len === 0) {\n this._strings[i] = \"\";\n } else {\n if (len > this._bytes.length - this._pos)\n throw new Error(`SchemaView blob: string entry ${i} has length ${len} but only ${this._bytes.length - this._pos} bytes remain`);\n this._strings[i] = decoder.decode(this._bytes.subarray(this._pos, this._pos + len));\n this._pos += len;\n }\n }\n this._pos = saved;\n }\n}\n\n/** Read a U32 that uses 0xFFFFFFFF as a sentinel for \"not set\". */\nfunction readOptionalU32(reader: BinaryReader): number | undefined {\n const v = reader.readU32();\n return v === 0xFFFFFFFF ? undefined : v;\n}\n\n/** Temporary per-class data collected during parsing, before cross-references are resolved. */\ninterface PendingClass {\n schemaIdx: number;\n classIdx: number;\n ecInstanceId: number;\n nameStringIdx: number;\n labelStringIdx: number;\n descriptionStringIdx: number;\n type: ClassType;\n modifier: ClassModifier;\n relStrength: StrengthType;\n relStrengthDir: StrengthDirection;\n baseClasses: Array<{ schemaName: string; className: string; ordinal: number }>;\n propRefs: PendingPropRef[];\n constraints: PendingConstraint[];\n schemaName: string;\n isHidden: boolean | undefined;\n}\n\n/** A property reference from the binary PropertyDefTable. During parsing, `preDefIdx` stores the\n * index into the pre-parsed def array; during resolution it's mapped to the builder's deduped defIdx. */\ninterface PendingPropRef {\n preDefIdx: number; // index into preParsedDefs (mapped to builder defIdx during resolution)\n ecInstanceId: number;\n labelStringIdx: number;\n priority: number;\n}\n\n/** Pre-parsed property definition from the binary PropertyDefTable, with row ID cross-refs. */\ninterface PreParsedDef {\n name: string;\n description: string;\n kind: PropertyKind;\n primitiveType: SchemaViewPrimitiveType;\n extType: string;\n enumRowId: number; // ec_Enumeration.Id (0 = none)\n structClassRowId: number; // ec_Class.Id for struct type (0 = none)\n koqRowId: number; // ec_KindOfQuantity.Id (0 = none)\n catRowId: number; // ec_PropertyCategory.Id (0 = none)\n arrayMinOccurs: number | undefined;\n arrayMaxOccurs: number | undefined;\n navRelClassRowId: number; // ec_Class.Id for nav relationship (0 = none)\n navDirection: StrengthDirection;\n isReadonly: boolean;\n isHidden: boolean;\n}\n\ninterface PendingConstraint {\n relEnd: number; // 0=source, 1=target\n isPolymorphic: boolean;\n multiplicityLower: number;\n multiplicityUpper: number;\n roleLabel: string;\n abstractSchemaName: string;\n abstractClassName: string;\n constraintClasses: Array<{ schemaName: string; className: string }>;\n}\n\n/** Helper: read a tag byte and validate it matches the expected tag. */\nfunction expectTag(reader: BinaryReader, expected: Tag): void {\n const tag = reader.readU8();\n if (tag !== expected)\n throw new Error(`Expected tag 0x${expected.toString(16)} but found 0x${tag.toString(16)} at offset ${reader.pos - 1}`);\n}\n\n/** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the\n * cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's\n * schemas into the shared builder and resolves cross-references - including cross-fragment ones -\n * against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.\n * @note Fragments must be merged in dependency order, so a fragment only references schemas already\n * merged by an earlier one (or excluded schemas, which resolve to \"not present\").\n * @internal\n */\nexport class SchemaViewMergeContext {\n public readonly builder = new SchemaViewBuilder();\n\n // Cross-reference maps. Persist across fragments: a row id / name from a later fragment resolves\n // against a class, enum, koq, or category merged by an earlier fragment.\n public readonly schemaECIdToIdx = new Map<number, number>();\n public readonly enumRowIdToIdx = new Map<number, number>();\n public readonly koqRowIdToIdx = new Map<number, number>();\n public readonly catRowIdToIdx = new Map<number, number>();\n public readonly classRowIdToIdx = new Map<number, number>();\n // \"schemaname:classname\" (both lowercased) -> global class index. Resolves base/mixin/constraint\n // refs, which the blob encodes as schema+class name pairs, across fragment boundaries.\n public readonly classResolver = new Map<string, number>();\n // global schemaIdx -> schema name, for building resolver keys and dangling-ref diagnostics.\n public readonly schemaNames: string[] = [];\n\n /** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */\n public mergeBlob(data: Uint8Array): void {\n mergeFragmentBlob(this, data);\n }\n}\n\n/** Parse a schema view blob (binary format) into a fresh `SchemaView`.\n *\n * Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.\n * Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.\n * Classes have count-prefixed inline sub-items (base classes, property refs, constraints).\n *\n * Consumers should call `SchemaView.fromBinary` instead - this function is the low-level\n * implementation behind it.\n * @internal\n */\nexport function parseSchemaViewBlob(data: Uint8Array, schemaToken?: string): SchemaView {\n const ctx = new SchemaViewMergeContext();\n ctx.mergeBlob(data);\n return ctx.builder.build(schemaToken);\n}\n\n/** Parse one fragment blob and append it into the context's builder, resolving cross-references\n * against the context's accumulated global maps. Per-fragment scratch state stays local; everything\n * that must outlive the fragment lives on `ctx`.\n */\nfunction mergeFragmentBlob(ctx: SchemaViewMergeContext, data: Uint8Array): void {\n const builder = ctx.builder;\n const reader = new BinaryReader(data);\n\n // Header: magic(4) + version(1) + stringTableOffset(4)\n const magic = reader.readU32();\n if (magic !== MAGIC)\n throw new Error(`Invalid SchemaView blob magic: 0x${magic.toString(16)}, expected 0x${MAGIC.toString(16)}`);\n const version = reader.readU8();\n if (version !== schemaViewFormatVersion)\n throw new Error(`Unsupported schema view format version: ${version}, expected ${schemaViewFormatVersion}`);\n const stOffset = reader.readU32();\n reader.parseStringTable(stOffset);\n\n // Global index of the first schema this fragment adds. Local schema index = global - base.\n const schemaBaseIdx = builder.schemaCount;\n\n const { schemaECIdToIdx: schemaEcIdToIdx, enumRowIdToIdx, koqRowIdToIdx, catRowIdToIdx, classRowIdToIdx, classResolver } = ctx;\n\n // Per-schema item range tracking, indexed by LOCAL schema index (0-based within this fragment).\n const schemaEnumStarts: number[] = [];\n const schemaEnumCounts: number[] = [];\n const schemaKoqStarts: number[] = [];\n const schemaKoqCounts: number[] = [];\n const schemaCatStarts: number[] = [];\n const schemaCatCounts: number[] = [];\n const schemaClassStarts: number[] = [];\n const schemaClassCounts: number[] = [];\n\n // Deferred class data for cross-reference resolution (local to this fragment).\n const pendingClasses: PendingClass[] = [];\n\n // ---- PropertyDefTable ----\n expectTag(reader, Tag.PropertyDefTable);\n const defCount = reader.readU32();\n // Each PreParsedDef is a fixed 46 bytes (10x u32 + 1x u16 + 4x u8). The bound is deliberately\n // about half that, so a valid blob never trips the check.\n reader.validateCount(defCount, 23, \"PropertyDefTable\");\n const preParsedDefs: PreParsedDef[] = new Array(defCount);\n for (let i = 0; i < defCount; i++) {\n preParsedDefs[i] = {\n name: reader.readSRef(),\n kind: reader.readU8(),\n primitiveType: reader.readU16(),\n extType: reader.readSRef(),\n enumRowId: reader.readU32(),\n structClassRowId: reader.readU32(),\n koqRowId: reader.readU32(),\n catRowId: reader.readU32(),\n arrayMinOccurs: readOptionalU32(reader),\n arrayMaxOccurs: readOptionalU32(reader),\n navRelClassRowId: reader.readU32(),\n navDirection: reader.readU8(),\n isReadonly: reader.readU8() !== 0,\n isHidden: reader.readU8() !== 0,\n description: reader.readSRef(),\n };\n }\n\n // ---- SchemaTable ----\n expectTag(reader, Tag.SchemaTable);\n const schemaCount = reader.readU32();\n // Fixed 27 bytes per record (4x SRef + 3x u16 + u32 + u8).\n reader.validateCount(schemaCount, 13, \"SchemaTable\");\n for (let i = 0; i < schemaCount; i++) {\n const name = reader.readSRef();\n const vRead = reader.readU16();\n const vWrite = reader.readU16();\n const vMinor = reader.readU16();\n const alias = reader.readSRef();\n const label = reader.readSRef();\n const description = reader.readSRef();\n const ecInstanceId = reader.readU32();\n const isHidden = reader.readU8() !== 0;\n\n const schemaIdx = builder.addSchema({\n ecInstanceId,\n nameStringIdx: builder.internString(name),\n aliasStringIdx: builder.internString(alias),\n labelStringIdx: builder.internString(label),\n descriptionStringIdx: builder.internString(description),\n versionRead: vRead,\n versionWrite: vWrite,\n versionMinor: vMinor,\n classRangeStart: 0, classCount: 0,\n enumRangeStart: 0, enumCount: 0,\n koqRangeStart: 0, koqCount: 0,\n catRangeStart: 0, catCount: 0,\n isHidden,\n });\n schemaEcIdToIdx.set(ecInstanceId, schemaIdx);\n ctx.schemaNames[schemaIdx] = name;\n schemaEnumStarts.push(0); schemaEnumCounts.push(0);\n schemaKoqStarts.push(0); schemaKoqCounts.push(0);\n schemaCatStarts.push(0); schemaCatCounts.push(0);\n schemaClassStarts.push(0); schemaClassCounts.push(0);\n }\n\n /** Track an item's schema ownership and update its owning schema's range counters. `globalIdx`\n * is the item's global index in the builder; `starts`/`counts` are indexed by LOCAL schema index.\n * An item must be owned by a schema in its own fragment, so a foreign owner is a malformed blob. */\n function trackItem(schemaEcId: number, globalIdx: number, starts: number[], counts: number[]): number {\n const schemaIdx = schemaEcIdToIdx.get(schemaEcId);\n if (schemaIdx === undefined)\n throw new Error(`SchemaView blob: unknown schema ecInstanceId ${schemaEcId}`);\n const localIdx = schemaIdx - schemaBaseIdx;\n if (localIdx < 0 || localIdx >= schemaCount)\n throw new Error(`SchemaView fragment: item references schema ecInstanceId ${schemaEcId} not present in this fragment`);\n if (counts[localIdx] === 0)\n starts[localIdx] = globalIdx;\n counts[localIdx]++;\n return schemaIdx;\n }\n\n // ---- EnumTable ----\n expectTag(reader, Tag.EnumTable);\n const enumTotalCount = reader.readU32();\n // Fixed 27 bytes per record (4x SRef + 2x u32 + u16 + u8); enumerators live inside a JSON SRef.\n reader.validateCount(enumTotalCount, 13, \"EnumTable\");\n for (let i = 0; i < enumTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.enumerationCount, schemaEnumStarts, schemaEnumCounts);\n\n const eName = reader.readSRef();\n const ePrimType = reader.readU16();\n const eIsStrict = reader.readU8() !== 0;\n const eLabel = reader.readSRef();\n const eDesc = reader.readSRef();\n const eValuesJson = reader.readSRef();\n const eEcInstanceId = reader.readU32();\n\n const enumeratorStart = builder.enumeratorCount;\n let enumeratorCount = 0;\n if (eValuesJson) {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const values = JSON.parse(eValuesJson) as Array<{ Name?: string; IntValue?: number; StringValue?: string; DisplayLabel?: string; Description?: string }>;\n for (const v of values) {\n const value = v.IntValue !== undefined ? v.IntValue : (v.StringValue ?? \"\");\n const name = v.Name ?? (typeof value === \"string\" ? value : `${eName}${value}`);\n builder.addEnumerator({\n nameStringIdx: builder.internString(name),\n labelStringIdx: builder.internString(v.DisplayLabel),\n descriptionStringIdx: builder.internString(v.Description),\n value,\n });\n enumeratorCount++;\n }\n } catch (e) {\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `Malformed EnumValues JSON for enumeration \"${eName}\": ${BentleyError.getErrorMessage(e)}`);\n }\n }\n\n const eIdx = builder.addEnumeration({\n ecInstanceId: eEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(eName),\n labelStringIdx: builder.internString(eLabel),\n descriptionStringIdx: builder.internString(eDesc),\n primitiveType: ePrimType,\n isStrict: eIsStrict,\n enumeratorStart,\n enumeratorCount,\n });\n enumRowIdToIdx.set(eEcInstanceId, eIdx);\n }\n\n // ---- KoQTable ----\n expectTag(reader, Tag.KoQTable);\n const koqTotalCount = reader.readU32();\n // Fixed 36 bytes per record (6x SRef + f64 + u32).\n reader.validateCount(koqTotalCount, 18, \"KoQTable\");\n for (let i = 0; i < koqTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.koqCount, schemaKoqStarts, schemaKoqCounts);\n\n const kName = reader.readSRef();\n const kLabel = reader.readSRef();\n const kDesc = reader.readSRef();\n const kPersUnit = reader.readSRef();\n const kRelError = reader.readF64();\n const kPresUnits = reader.readSRef();\n const kEcInstanceId = reader.readU32();\n\n const kIdx = builder.addKoq({\n ecInstanceId: kEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(kName),\n labelStringIdx: builder.internString(kLabel),\n descriptionStringIdx: builder.internString(kDesc),\n persistenceUnitStringIdx: builder.internString(kPersUnit),\n presentationFormatsStringIdx: builder.internString(kPresUnits),\n relativeError: kRelError,\n });\n koqRowIdToIdx.set(kEcInstanceId, kIdx);\n }\n\n // ---- PropCatTable ----\n expectTag(reader, Tag.PropCatTable);\n const catTotalCount = reader.readU32();\n // Fixed 24 bytes per record (4x SRef + i32 + u32).\n reader.validateCount(catTotalCount, 12, \"PropCatTable\");\n for (let i = 0; i < catTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.propCategoryCount, schemaCatStarts, schemaCatCounts);\n\n const pcName = reader.readSRef();\n const pcLabel = reader.readSRef();\n const pcDesc = reader.readSRef();\n const pcPriority = reader.readI32();\n const pcEcInstanceId = reader.readU32();\n\n const pcIdx = builder.addPropertyCategory({\n ecInstanceId: pcEcInstanceId,\n schemaIdx,\n nameStringIdx: builder.internString(pcName),\n labelStringIdx: builder.internString(pcLabel),\n descriptionStringIdx: builder.internString(pcDesc),\n priority: pcPriority,\n });\n catRowIdToIdx.set(pcEcInstanceId, pcIdx);\n }\n\n // ---- ClassTable ----\n expectTag(reader, Tag.ClassTable);\n const classTotalCount = reader.readU32();\n // Minimum 27 bytes per record (3x SRef + 3x u8 + u32 + 2x u16 count prefixes); records grow with\n // relationship strength/direction and the base-class, prop-ref, and constraint sub-lists.\n reader.validateCount(classTotalCount, 13, \"ClassTable\");\n for (let i = 0; i < classTotalCount; i++) {\n const schemaEcId = reader.readU32();\n const schemaIdx = trackItem(schemaEcId, builder.classCount, schemaClassStarts, schemaClassCounts);\n const schemaName = ctx.schemaNames[schemaIdx];\n\n const cName = reader.readSRef();\n const cType = reader.readU8();\n const cModifier = reader.readU8();\n const cLabel = reader.readSRef();\n const cDesc = reader.readSRef();\n let relStrength: StrengthType = StrengthType.Referencing;\n let relStrengthDir: StrengthDirection = StrengthDirection.Forward;\n if (cType === ClassType.Relationship) {\n relStrength = reader.readU8();\n relStrengthDir = reader.readU8();\n }\n const cEcInstanceId = reader.readU32();\n // Tri-state hidden: 0=undefined (no CA, schema doesn't hide), 1=true (hidden), 2=false (explicitly shown)\n const cHiddenByte = reader.readU8();\n const cIsHidden: boolean | undefined = cHiddenByte === 1 ? true : cHiddenByte === 2 ? false : undefined;\n\n // Base classes (count-prefixed)\n const baseCount = reader.readU16();\n const baseClasses: Array<{ schemaName: string; className: string; ordinal: number }> = [];\n for (let b = 0; b < baseCount; b++) {\n baseClasses.push({\n schemaName: reader.readSRef(),\n className: reader.readSRef(),\n ordinal: reader.readU8(),\n });\n }\n\n // Property refs (count-prefixed)\n const propRefCount = reader.readU16();\n const propRefs: PendingPropRef[] = [];\n for (let p = 0; p < propRefCount; p++) {\n propRefs.push({\n preDefIdx: reader.readU32(),\n labelStringIdx: builder.internString(reader.readSRef()),\n priority: reader.readI32(),\n ecInstanceId: reader.readU32(),\n });\n }\n\n // Constraints (count-prefixed, only for relationships)\n const constraints: PendingConstraint[] = [];\n if (cType === ClassType.Relationship) {\n const constrCount = reader.readU8();\n for (let c = 0; c < constrCount; c++) {\n const rcEnd = reader.readU8();\n const rcMultLower = reader.readU32();\n const rcMultUpper = reader.readU32();\n const rcIsPoly = reader.readU8() !== 0;\n const rcRoleLabel = reader.readSRef();\n const rcAbsSchema = reader.readSRef();\n const rcAbsClass = reader.readSRef();\n\n // Constraint classes (count-prefixed)\n const ccCount = reader.readU8();\n const constraintClasses: Array<{ schemaName: string; className: string }> = [];\n for (let cc = 0; cc < ccCount; cc++) {\n constraintClasses.push({\n schemaName: reader.readSRef(),\n className: reader.readSRef(),\n });\n }\n\n constraints.push({\n relEnd: rcEnd,\n isPolymorphic: rcIsPoly,\n multiplicityLower: rcMultLower,\n multiplicityUpper: rcMultUpper,\n roleLabel: rcRoleLabel,\n abstractSchemaName: rcAbsSchema,\n abstractClassName: rcAbsClass,\n constraintClasses,\n });\n }\n }\n\n const nameStringIdx = builder.internString(cName);\n const classIdx = builder.addClass({\n ecInstanceId: cEcInstanceId,\n schemaIdx,\n nameStringIdx,\n labelStringIdx: builder.internString(cLabel),\n descriptionStringIdx: builder.internString(cDesc),\n type: cType,\n modifier: cModifier,\n baseClassIdx: -1,\n mixinStartIdx: -1,\n mixinCount: 0,\n ownPropStart: 0,\n ownPropCount: 0,\n strength: relStrength,\n strengthDirection: relStrengthDir,\n sourceConstraintIdx: -1,\n targetConstraintIdx: -1,\n isHidden: cIsHidden,\n });\n classResolver.set(`${schemaName.toLowerCase()}:${cName.toLowerCase()}`, classIdx);\n classRowIdToIdx.set(cEcInstanceId, classIdx);\n\n pendingClasses.push({\n schemaIdx,\n classIdx,\n ecInstanceId: cEcInstanceId,\n nameStringIdx,\n labelStringIdx: builder.internString(cLabel),\n descriptionStringIdx: builder.internString(cDesc),\n type: cType,\n modifier: cModifier,\n relStrength,\n relStrengthDir,\n baseClasses,\n propRefs,\n constraints,\n schemaName,\n isHidden: cIsHidden,\n });\n }\n\n // ---- Finalize per-schema item ranges ----\n // Local index i maps to global schema index schemaBaseIdx + i; range starts are already global.\n for (let i = 0; i < schemaCount; i++) {\n builder.updateSchemaRanges(schemaBaseIdx + i, {\n classRangeStart: schemaClassStarts[i] ?? 0,\n classCount: schemaClassCounts[i] ?? 0,\n enumRangeStart: schemaEnumStarts[i] ?? 0,\n enumCount: schemaEnumCounts[i] ?? 0,\n koqRangeStart: schemaKoqStarts[i] ?? 0,\n koqCount: schemaKoqCounts[i] ?? 0,\n catRangeStart: schemaCatStarts[i] ?? 0,\n catCount: schemaCatCounts[i] ?? 0,\n });\n }\n\n // Resolve pre-parsed defs to PropertyDef objects. Maps preParsedDef index -> builder defIdx.\n const danglingRefs: string[] = [];\n const resolvedDefMap = new Map<number, number>();\n const brokenDefs = new Set<number>();\n\n for (let i = 0; i < preParsedDefs.length; i++) {\n const prDef = preParsedDefs[i];\n\n let structClassIdx = -1;\n if (prDef.structClassRowId !== 0) {\n structClassIdx = classRowIdToIdx.get(prDef.structClassRowId) ?? -1;\n if (structClassIdx === -1) {\n brokenDefs.add(i);\n danglingRefs.push(`Dropped properties with struct class rowId ${prDef.structClassRowId}`);\n continue;\n }\n }\n\n let navRelClassIdx = -1;\n if (prDef.navRelClassRowId !== 0) {\n navRelClassIdx = classRowIdToIdx.get(prDef.navRelClassRowId) ?? -1;\n if (navRelClassIdx === -1) {\n brokenDefs.add(i);\n danglingRefs.push(`Dropped properties with nav relationship rowId ${prDef.navRelClassRowId}`);\n continue;\n }\n }\n\n let enumIdx = -1;\n if (prDef.enumRowId !== 0) {\n enumIdx = enumRowIdToIdx.get(prDef.enumRowId) ?? -1;\n if (enumIdx === -1)\n danglingRefs.push(`Unresolved enum rowId ${prDef.enumRowId}`);\n }\n\n let koqIdx = -1;\n if (prDef.koqRowId !== 0)\n koqIdx = koqRowIdToIdx.get(prDef.koqRowId) ?? -1;\n\n let categoryIdx = -1;\n if (prDef.catRowId !== 0)\n categoryIdx = catRowIdToIdx.get(prDef.catRowId) ?? -1;\n\n const def: PropertyDef = {\n nameStringIdx: builder.internString(prDef.name),\n descriptionStringIdx: builder.internString(prDef.description),\n kind: prDef.kind,\n primitiveType: prDef.primitiveType,\n extTypeStringIdx: builder.internString(prDef.extType),\n enumIdx,\n koqIdx,\n structClassIdx,\n navRelClassIdx,\n navDirection: prDef.navDirection,\n categoryIdx,\n isReadOnly: prDef.isReadonly,\n isHidden: prDef.isHidden,\n arrayMinOccurs: prDef.arrayMinOccurs,\n arrayMaxOccurs: prDef.arrayMaxOccurs,\n };\n\n resolvedDefMap.set(i, builder.addPropertyDef(def));\n }\n\n // Resolve cross-references and finalize classes\n for (const pc of pendingClasses) {\n pc.baseClasses.sort((a, b) => a.ordinal - b.ordinal);\n const classFullName = `${pc.schemaName}:${builder.getString(pc.nameStringIdx)}`;\n\n let baseClassIdx = -1;\n const mixinStartIdx = pc.baseClasses.length > 1 ? builder.classMixinCount : -1;\n let mixinCount = 0;\n\n for (const bc of pc.baseClasses) {\n const bcKey = `${bc.schemaName.toLowerCase()}:${bc.className.toLowerCase()}`;\n const bcIdx = classResolver.get(bcKey) ?? -1;\n if (bc.ordinal === 0) {\n if (bcIdx === -1 && bc.schemaName)\n danglingRefs.push(`${classFullName} -> base class ${bc.schemaName}:${bc.className}`);\n baseClassIdx = bcIdx;\n } else {\n if (bcIdx === -1) {\n danglingRefs.push(`${classFullName} -> mixin ${bc.schemaName}:${bc.className}`);\n continue;\n }\n builder.addClassMixin(bcIdx);\n mixinCount++;\n }\n }\n\n const ownPropStart = builder.propertyRefCount;\n for (const pr of pc.propRefs) {\n if (brokenDefs.has(pr.preDefIdx))\n continue;\n const defIdx = resolvedDefMap.get(pr.preDefIdx);\n if (defIdx === undefined)\n continue;\n builder.addPropertyRef({\n ecInstanceId: pr.ecInstanceId,\n defIdx,\n labelStringIdx: pr.labelStringIdx,\n priority: pr.priority,\n });\n }\n\n let sourceConstraintIdx = -1;\n let targetConstraintIdx = -1;\n for (const con of pc.constraints) {\n const absKey = con.abstractSchemaName && con.abstractClassName\n ? `${con.abstractSchemaName.toLowerCase()}:${con.abstractClassName.toLowerCase()}`\n : \"\";\n const absClassIdx = absKey ? (classResolver.get(absKey) ?? -1) : -1;\n if (absClassIdx === -1 && absKey)\n danglingRefs.push(`${classFullName} constraint -> abstract ${con.abstractSchemaName}:${con.abstractClassName}`);\n\n const classRefStart = builder.constraintClassRefCount;\n let classRefCount = 0;\n for (const cc of con.constraintClasses) {\n const ccKey = `${cc.schemaName.toLowerCase()}:${cc.className.toLowerCase()}`;\n const ccIdx = classResolver.get(ccKey) ?? -1;\n if (ccIdx === -1) {\n danglingRefs.push(`${classFullName} constraint -> class ${cc.schemaName}:${cc.className}`);\n continue;\n }\n builder.addConstraintClassRef(ccIdx);\n classRefCount++;\n }\n\n const constraintIdx = builder.addRelConstraint({\n abstractConstraintIdx: absClassIdx,\n polymorphic: con.isPolymorphic,\n multiplicityLower: con.multiplicityLower,\n multiplicityUpper: con.multiplicityUpper,\n roleLabelStringIdx: builder.internString(con.roleLabel),\n classRefStart,\n classRefCount,\n });\n\n if (con.relEnd === 0)\n sourceConstraintIdx = constraintIdx;\n else\n targetConstraintIdx = constraintIdx;\n }\n\n const updatedClass: ClassData = {\n ecInstanceId: pc.ecInstanceId,\n schemaIdx: pc.schemaIdx,\n nameStringIdx: pc.nameStringIdx,\n labelStringIdx: pc.labelStringIdx,\n descriptionStringIdx: pc.descriptionStringIdx,\n type: pc.type,\n modifier: pc.modifier,\n baseClassIdx,\n mixinStartIdx,\n mixinCount,\n ownPropStart,\n ownPropCount: builder.propertyRefCount - ownPropStart,\n strength: pc.relStrength,\n strengthDirection: pc.relStrengthDir,\n sourceConstraintIdx,\n targetConstraintIdx,\n isHidden: pc.isHidden,\n };\n builder.updateClass(pc.classIdx, updatedClass);\n }\n\n if (danglingRefs.length > 0) {\n const cap = 20;\n const lines = danglingRefs.length <= cap ? danglingRefs : [...danglingRefs.slice(0, cap), `... and ${danglingRefs.length - cap} more`];\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `${danglingRefs.length} unresolved cross-reference(s) in schema view blob (likely from excluded schemas):\\n ${lines.join(\"\\n \")}`);\n }\n\n // Bring the builder's lookup maps up to date for the schemas this fragment added. Their item\n // ranges were finalized above, so the per-schema name maps build correctly.\n builder.extendLookupMaps();\n}\n\n"]}
1
+ {"version":3,"file":"SchemaViewBinaryReader.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBinaryReader.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 Schema\r\n */\r\n\r\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\r\nimport { type SchemaView } from \"./SchemaView\";\r\nimport { SchemaViewBuilder } from \"./SchemaViewBuilder\";\r\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\r\nimport { ClassData, ClassModifier, ClassType, PropertyDef, PropertyKind, schemaViewFormatVersion, SchemaViewPrimitiveType } from \"./SchemaViewInterfaces\";\r\n\r\n/** Binary record tags for the SchemaView blob format.\r\n * Each tag marks a flat, count-prefixed table. Must stay in sync with the C++ writer. */\r\nenum Tag {\r\n PropertyDefTable = 0x0A,\r\n SchemaTable = 0x10,\r\n EnumTable = 0x20,\r\n KoQTable = 0x30,\r\n PropCatTable = 0x31,\r\n ClassTable = 0x40,\r\n}\r\n\r\nconst MAGIC = 0x43534348; // \"CSCH\"\r\n\r\n/** Low-level binary reader for the SchemaView blob. */\r\nclass BinaryReader {\r\n private _view: DataView;\r\n private _bytes: Uint8Array;\r\n private _pos: number;\r\n private _strings: string[];\r\n\r\n constructor(data: Uint8Array) {\r\n this._bytes = data;\r\n this._view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n this._pos = 0;\r\n this._strings = [];\r\n }\r\n\r\n public readU8(): number {\r\n if (this._pos >= this._bytes.length)\r\n throw new Error(`SchemaView blob truncated: cannot read u8 at offset ${this._pos} (length ${this._bytes.length})`);\r\n return this._bytes[this._pos++];\r\n }\r\n public readU16(): number { const v = this._view.getUint16(this._pos, true); this._pos += 2; return v; }\r\n public readU32(): number { const v = this._view.getUint32(this._pos, true); this._pos += 4; return v; }\r\n public readI32(): number { const v = this._view.getInt32(this._pos, true); this._pos += 4; return v; }\r\n public readF64(): number { const v = this._view.getFloat64(this._pos, true); this._pos += 8; return v; }\r\n public get pos(): number { return this._pos; }\r\n public set pos(v: number) { this._pos = v; }\r\n\r\n /** Read a string-table reference (U32 index) and return the original string. */\r\n public readSRef(): string {\r\n const idx = this.readU32();\r\n if (idx >= this._strings.length)\r\n throw new Error(`SchemaView blob: string reference ${idx} out of range (string table size ${this._strings.length})`);\r\n return this._strings[idx];\r\n }\r\n\r\n /** Validate a count-prefixed table header: the declared count cannot exceed what the remaining\r\n * buffer could plausibly hold. Each entry consumes at least `minBytesPerEntry` bytes. */\r\n public validateCount(count: number, minBytesPerEntry: number, tableName: string): void {\r\n const remaining = this._bytes.length - this._pos;\r\n if (count > remaining / Math.max(1, minBytesPerEntry))\r\n throw new Error(`SchemaView blob: ${tableName} count ${count} exceeds remaining buffer (${remaining} bytes)`);\r\n }\r\n\r\n /** Parse the string table at the given offset. */\r\n public parseStringTable(offset: number): void {\r\n if (offset > this._bytes.length)\r\n throw new Error(`SchemaView blob: stringTable offset ${offset} is past end of blob (length ${this._bytes.length})`);\r\n const saved = this._pos;\r\n this._pos = offset;\r\n const count = this.readU32();\r\n // Each entry is at minimum a 4-byte length prefix - a count larger than the remaining bytes\r\n // cannot possibly be valid and would cause a huge `new Array` allocation on a malformed blob.\r\n const remaining = this._bytes.length - this._pos;\r\n if (count > remaining / 4)\r\n throw new Error(`SchemaView blob: stringTable count ${count} exceeds remaining buffer (${remaining} bytes)`);\r\n this._strings = new Array(count);\r\n const decoder = new TextDecoder();\r\n for (let i = 0; i < count; i++) {\r\n const len = this.readU32();\r\n if (len === 0) {\r\n this._strings[i] = \"\";\r\n } else {\r\n if (len > this._bytes.length - this._pos)\r\n throw new Error(`SchemaView blob: string entry ${i} has length ${len} but only ${this._bytes.length - this._pos} bytes remain`);\r\n this._strings[i] = decoder.decode(this._bytes.subarray(this._pos, this._pos + len));\r\n this._pos += len;\r\n }\r\n }\r\n this._pos = saved;\r\n }\r\n}\r\n\r\n/** Read a U32 that uses 0xFFFFFFFF as a sentinel for \"not set\". */\r\nfunction readOptionalU32(reader: BinaryReader): number | undefined {\r\n const v = reader.readU32();\r\n return v === 0xFFFFFFFF ? undefined : v;\r\n}\r\n\r\n/** Temporary per-class data collected during parsing, before cross-references are resolved. */\r\ninterface PendingClass {\r\n schemaIdx: number;\r\n classIdx: number;\r\n ecInstanceId: number;\r\n nameStringIdx: number;\r\n labelStringIdx: number;\r\n descriptionStringIdx: number;\r\n type: ClassType;\r\n modifier: ClassModifier;\r\n relStrength: StrengthType;\r\n relStrengthDir: StrengthDirection;\r\n baseClasses: Array<{ schemaName: string; className: string; ordinal: number }>;\r\n propRefs: PendingPropRef[];\r\n constraints: PendingConstraint[];\r\n schemaName: string;\r\n isHidden: boolean | undefined;\r\n}\r\n\r\n/** A property reference from the binary PropertyDefTable. During parsing, `preDefIdx` stores the\r\n * index into the pre-parsed def array; during resolution it's mapped to the builder's deduped defIdx. */\r\ninterface PendingPropRef {\r\n preDefIdx: number; // index into preParsedDefs (mapped to builder defIdx during resolution)\r\n ecInstanceId: number;\r\n labelStringIdx: number;\r\n priority: number;\r\n}\r\n\r\n/** Pre-parsed property definition from the binary PropertyDefTable, with row ID cross-refs. */\r\ninterface PreParsedDef {\r\n name: string;\r\n description: string;\r\n kind: PropertyKind;\r\n primitiveType: SchemaViewPrimitiveType;\r\n extType: string;\r\n enumRowId: number; // ec_Enumeration.Id (0 = none)\r\n structClassRowId: number; // ec_Class.Id for struct type (0 = none)\r\n koqRowId: number; // ec_KindOfQuantity.Id (0 = none)\r\n catRowId: number; // ec_PropertyCategory.Id (0 = none)\r\n arrayMinOccurs: number | undefined;\r\n arrayMaxOccurs: number | undefined;\r\n navRelClassRowId: number; // ec_Class.Id for nav relationship (0 = none)\r\n navDirection: StrengthDirection;\r\n isReadonly: boolean;\r\n isHidden: boolean;\r\n}\r\n\r\ninterface PendingConstraint {\r\n relEnd: number; // 0=source, 1=target\r\n isPolymorphic: boolean;\r\n multiplicityLower: number;\r\n multiplicityUpper: number;\r\n roleLabel: string;\r\n abstractSchemaName: string;\r\n abstractClassName: string;\r\n constraintClasses: Array<{ schemaName: string; className: string }>;\r\n}\r\n\r\n/** Helper: read a tag byte and validate it matches the expected tag. */\r\nfunction expectTag(reader: BinaryReader, expected: Tag): void {\r\n const tag = reader.readU8();\r\n if (tag !== expected)\r\n throw new Error(`Expected tag 0x${expected.toString(16)} but found 0x${tag.toString(16)} at offset ${reader.pos - 1}`);\r\n}\r\n\r\n/** Reusable parse/merge context for SchemaView blobs. Holds the live `SchemaViewBuilder` plus the\r\n * cross-reference maps that must persist across fragment merges. Each `mergeBlob` appends one blob's\r\n * schemas into the shared builder and resolves cross-references - including cross-fragment ones -\r\n * against the accumulated maps. A whole-iModel blob is the degenerate case of a single fragment.\r\n * @note Fragments must be merged in dependency order, so a fragment only references schemas already\r\n * merged by an earlier one (or excluded schemas, which resolve to \"not present\").\r\n * @internal\r\n */\r\nexport class SchemaViewMergeContext {\r\n public readonly builder = new SchemaViewBuilder();\r\n\r\n // Cross-reference maps. Persist across fragments: a row id / name from a later fragment resolves\r\n // against a class, enum, koq, or category merged by an earlier fragment.\r\n public readonly schemaECIdToIdx = new Map<number, number>();\r\n public readonly enumRowIdToIdx = new Map<number, number>();\r\n public readonly koqRowIdToIdx = new Map<number, number>();\r\n public readonly catRowIdToIdx = new Map<number, number>();\r\n public readonly classRowIdToIdx = new Map<number, number>();\r\n // \"schemaname:classname\" (both lowercased) -> global class index. Resolves base/mixin/constraint\r\n // refs, which the blob encodes as schema+class name pairs, across fragment boundaries.\r\n public readonly classResolver = new Map<string, number>();\r\n // global schemaIdx -> schema name, for building resolver keys and dangling-ref diagnostics.\r\n public readonly schemaNames: string[] = [];\r\n\r\n /** Parse one fragment blob and append its schemas into the shared builder. Synchronous. */\r\n public mergeBlob(data: Uint8Array): void {\r\n mergeFragmentBlob(this, data);\r\n }\r\n}\r\n\r\n/** Parse a schema view blob (binary format) into a fresh `SchemaView`.\r\n *\r\n * Layout: Header, PropertyDefTable, SchemaTable, EnumTable, KoQTable, PropCatTable, ClassTable, StringTable.\r\n * Each table is count-prefixed. Schema items carry their schema's ecInstanceId for ownership resolution.\r\n * Classes have count-prefixed inline sub-items (base classes, property refs, constraints).\r\n *\r\n * Consumers should call `SchemaView.fromBinary` instead - this function is the low-level\r\n * implementation behind it.\r\n * @internal\r\n */\r\nexport function parseSchemaViewBlob(data: Uint8Array, schemaToken?: string): SchemaView {\r\n const ctx = new SchemaViewMergeContext();\r\n ctx.mergeBlob(data);\r\n return ctx.builder.build(schemaToken);\r\n}\r\n\r\n/** Parse one fragment blob and append it into the context's builder, resolving cross-references\r\n * against the context's accumulated global maps. Per-fragment scratch state stays local; everything\r\n * that must outlive the fragment lives on `ctx`.\r\n */\r\nfunction mergeFragmentBlob(ctx: SchemaViewMergeContext, data: Uint8Array): void {\r\n const builder = ctx.builder;\r\n const reader = new BinaryReader(data);\r\n\r\n // Header: magic(4) + version(1) + stringTableOffset(4)\r\n const magic = reader.readU32();\r\n if (magic !== MAGIC)\r\n throw new Error(`Invalid SchemaView blob magic: 0x${magic.toString(16)}, expected 0x${MAGIC.toString(16)}`);\r\n const version = reader.readU8();\r\n if (version !== schemaViewFormatVersion)\r\n throw new Error(`Unsupported schema view format version: ${version}, expected ${schemaViewFormatVersion}`);\r\n const stOffset = reader.readU32();\r\n reader.parseStringTable(stOffset);\r\n\r\n // Global index of the first schema this fragment adds. Local schema index = global - base.\r\n const schemaBaseIdx = builder.schemaCount;\r\n\r\n const { schemaECIdToIdx: schemaEcIdToIdx, enumRowIdToIdx, koqRowIdToIdx, catRowIdToIdx, classRowIdToIdx, classResolver } = ctx;\r\n\r\n // Per-schema item range tracking, indexed by LOCAL schema index (0-based within this fragment).\r\n const schemaEnumStarts: number[] = [];\r\n const schemaEnumCounts: number[] = [];\r\n const schemaKoqStarts: number[] = [];\r\n const schemaKoqCounts: number[] = [];\r\n const schemaCatStarts: number[] = [];\r\n const schemaCatCounts: number[] = [];\r\n const schemaClassStarts: number[] = [];\r\n const schemaClassCounts: number[] = [];\r\n\r\n // Deferred class data for cross-reference resolution (local to this fragment).\r\n const pendingClasses: PendingClass[] = [];\r\n\r\n // ---- PropertyDefTable ----\r\n expectTag(reader, Tag.PropertyDefTable);\r\n const defCount = reader.readU32();\r\n // Each PreParsedDef is a fixed 46 bytes (10x u32 + 1x u16 + 4x u8). The bound is deliberately\r\n // about half that, so a valid blob never trips the check.\r\n reader.validateCount(defCount, 23, \"PropertyDefTable\");\r\n const preParsedDefs: PreParsedDef[] = new Array(defCount);\r\n for (let i = 0; i < defCount; i++) {\r\n preParsedDefs[i] = {\r\n name: reader.readSRef(),\r\n kind: reader.readU8(),\r\n primitiveType: reader.readU16(),\r\n extType: reader.readSRef(),\r\n enumRowId: reader.readU32(),\r\n structClassRowId: reader.readU32(),\r\n koqRowId: reader.readU32(),\r\n catRowId: reader.readU32(),\r\n arrayMinOccurs: readOptionalU32(reader),\r\n arrayMaxOccurs: readOptionalU32(reader),\r\n navRelClassRowId: reader.readU32(),\r\n navDirection: reader.readU8(),\r\n isReadonly: reader.readU8() !== 0,\r\n isHidden: reader.readU8() !== 0,\r\n description: reader.readSRef(),\r\n };\r\n }\r\n\r\n // ---- SchemaTable ----\r\n expectTag(reader, Tag.SchemaTable);\r\n const schemaCount = reader.readU32();\r\n // Fixed 27 bytes per record (4x SRef + 3x u16 + u32 + u8).\r\n reader.validateCount(schemaCount, 13, \"SchemaTable\");\r\n for (let i = 0; i < schemaCount; i++) {\r\n const name = reader.readSRef();\r\n const vRead = reader.readU16();\r\n const vWrite = reader.readU16();\r\n const vMinor = reader.readU16();\r\n const alias = reader.readSRef();\r\n const label = reader.readSRef();\r\n const description = reader.readSRef();\r\n const ecInstanceId = reader.readU32();\r\n const isHidden = reader.readU8() !== 0;\r\n\r\n const schemaIdx = builder.addSchema({\r\n ecInstanceId,\r\n nameStringIdx: builder.internString(name),\r\n aliasStringIdx: builder.internString(alias),\r\n labelStringIdx: builder.internString(label),\r\n descriptionStringIdx: builder.internString(description),\r\n versionRead: vRead,\r\n versionWrite: vWrite,\r\n versionMinor: vMinor,\r\n classRangeStart: 0, classCount: 0,\r\n enumRangeStart: 0, enumCount: 0,\r\n koqRangeStart: 0, koqCount: 0,\r\n catRangeStart: 0, catCount: 0,\r\n isHidden,\r\n });\r\n schemaEcIdToIdx.set(ecInstanceId, schemaIdx);\r\n ctx.schemaNames[schemaIdx] = name;\r\n schemaEnumStarts.push(0); schemaEnumCounts.push(0);\r\n schemaKoqStarts.push(0); schemaKoqCounts.push(0);\r\n schemaCatStarts.push(0); schemaCatCounts.push(0);\r\n schemaClassStarts.push(0); schemaClassCounts.push(0);\r\n }\r\n\r\n /** Track an item's schema ownership and update its owning schema's range counters. `globalIdx`\r\n * is the item's global index in the builder; `starts`/`counts` are indexed by LOCAL schema index.\r\n * An item must be owned by a schema in its own fragment, so a foreign owner is a malformed blob. */\r\n function trackItem(schemaEcId: number, globalIdx: number, starts: number[], counts: number[]): number {\r\n const schemaIdx = schemaEcIdToIdx.get(schemaEcId);\r\n if (schemaIdx === undefined)\r\n throw new Error(`SchemaView blob: unknown schema ecInstanceId ${schemaEcId}`);\r\n const localIdx = schemaIdx - schemaBaseIdx;\r\n if (localIdx < 0 || localIdx >= schemaCount)\r\n throw new Error(`SchemaView fragment: item references schema ecInstanceId ${schemaEcId} not present in this fragment`);\r\n if (counts[localIdx] === 0)\r\n starts[localIdx] = globalIdx;\r\n counts[localIdx]++;\r\n return schemaIdx;\r\n }\r\n\r\n // ---- EnumTable ----\r\n expectTag(reader, Tag.EnumTable);\r\n const enumTotalCount = reader.readU32();\r\n // Fixed 27 bytes per record (4x SRef + 2x u32 + u16 + u8); enumerators live inside a JSON SRef.\r\n reader.validateCount(enumTotalCount, 13, \"EnumTable\");\r\n for (let i = 0; i < enumTotalCount; i++) {\r\n const schemaEcId = reader.readU32();\r\n const schemaIdx = trackItem(schemaEcId, builder.enumerationCount, schemaEnumStarts, schemaEnumCounts);\r\n\r\n const eName = reader.readSRef();\r\n const ePrimType = reader.readU16();\r\n const eIsStrict = reader.readU8() !== 0;\r\n const eLabel = reader.readSRef();\r\n const eDesc = reader.readSRef();\r\n const eValuesJson = reader.readSRef();\r\n const eEcInstanceId = reader.readU32();\r\n\r\n const enumeratorStart = builder.enumeratorCount;\r\n let enumeratorCount = 0;\r\n if (eValuesJson) {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const values = JSON.parse(eValuesJson) as Array<{ Name?: string; IntValue?: number; StringValue?: string; DisplayLabel?: string; Description?: string }>;\r\n for (const v of values) {\r\n const value = v.IntValue !== undefined ? v.IntValue : (v.StringValue ?? \"\");\r\n const name = v.Name ?? (typeof value === \"string\" ? value : `${eName}${value}`);\r\n builder.addEnumerator({\r\n nameStringIdx: builder.internString(name),\r\n labelStringIdx: builder.internString(v.DisplayLabel),\r\n descriptionStringIdx: builder.internString(v.Description),\r\n value,\r\n });\r\n enumeratorCount++;\r\n }\r\n } catch (e) {\r\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `Malformed EnumValues JSON for enumeration \"${eName}\": ${BentleyError.getErrorMessage(e)}`);\r\n }\r\n }\r\n\r\n const eIdx = builder.addEnumeration({\r\n ecInstanceId: eEcInstanceId,\r\n schemaIdx,\r\n nameStringIdx: builder.internString(eName),\r\n labelStringIdx: builder.internString(eLabel),\r\n descriptionStringIdx: builder.internString(eDesc),\r\n primitiveType: ePrimType,\r\n isStrict: eIsStrict,\r\n enumeratorStart,\r\n enumeratorCount,\r\n });\r\n enumRowIdToIdx.set(eEcInstanceId, eIdx);\r\n }\r\n\r\n // ---- KoQTable ----\r\n expectTag(reader, Tag.KoQTable);\r\n const koqTotalCount = reader.readU32();\r\n // Fixed 36 bytes per record (6x SRef + f64 + u32).\r\n reader.validateCount(koqTotalCount, 18, \"KoQTable\");\r\n for (let i = 0; i < koqTotalCount; i++) {\r\n const schemaEcId = reader.readU32();\r\n const schemaIdx = trackItem(schemaEcId, builder.koqCount, schemaKoqStarts, schemaKoqCounts);\r\n\r\n const kName = reader.readSRef();\r\n const kLabel = reader.readSRef();\r\n const kDesc = reader.readSRef();\r\n const kPersUnit = reader.readSRef();\r\n const kRelError = reader.readF64();\r\n const kPresUnits = reader.readSRef();\r\n const kEcInstanceId = reader.readU32();\r\n\r\n const kIdx = builder.addKoq({\r\n ecInstanceId: kEcInstanceId,\r\n schemaIdx,\r\n nameStringIdx: builder.internString(kName),\r\n labelStringIdx: builder.internString(kLabel),\r\n descriptionStringIdx: builder.internString(kDesc),\r\n persistenceUnitStringIdx: builder.internString(kPersUnit),\r\n presentationFormatsStringIdx: builder.internString(kPresUnits),\r\n relativeError: kRelError,\r\n });\r\n koqRowIdToIdx.set(kEcInstanceId, kIdx);\r\n }\r\n\r\n // ---- PropCatTable ----\r\n expectTag(reader, Tag.PropCatTable);\r\n const catTotalCount = reader.readU32();\r\n // Fixed 24 bytes per record (4x SRef + i32 + u32).\r\n reader.validateCount(catTotalCount, 12, \"PropCatTable\");\r\n for (let i = 0; i < catTotalCount; i++) {\r\n const schemaEcId = reader.readU32();\r\n const schemaIdx = trackItem(schemaEcId, builder.propCategoryCount, schemaCatStarts, schemaCatCounts);\r\n\r\n const pcName = reader.readSRef();\r\n const pcLabel = reader.readSRef();\r\n const pcDesc = reader.readSRef();\r\n const pcPriority = reader.readI32();\r\n const pcEcInstanceId = reader.readU32();\r\n\r\n const pcIdx = builder.addPropertyCategory({\r\n ecInstanceId: pcEcInstanceId,\r\n schemaIdx,\r\n nameStringIdx: builder.internString(pcName),\r\n labelStringIdx: builder.internString(pcLabel),\r\n descriptionStringIdx: builder.internString(pcDesc),\r\n priority: pcPriority,\r\n });\r\n catRowIdToIdx.set(pcEcInstanceId, pcIdx);\r\n }\r\n\r\n // ---- ClassTable ----\r\n expectTag(reader, Tag.ClassTable);\r\n const classTotalCount = reader.readU32();\r\n // Minimum 27 bytes per record (3x SRef + 3x u8 + u32 + 2x u16 count prefixes); records grow with\r\n // relationship strength/direction and the base-class, prop-ref, and constraint sub-lists.\r\n reader.validateCount(classTotalCount, 13, \"ClassTable\");\r\n for (let i = 0; i < classTotalCount; i++) {\r\n const schemaEcId = reader.readU32();\r\n const schemaIdx = trackItem(schemaEcId, builder.classCount, schemaClassStarts, schemaClassCounts);\r\n const schemaName = ctx.schemaNames[schemaIdx];\r\n\r\n const cName = reader.readSRef();\r\n const cType = reader.readU8();\r\n const cModifier = reader.readU8();\r\n const cLabel = reader.readSRef();\r\n const cDesc = reader.readSRef();\r\n let relStrength: StrengthType = StrengthType.Referencing;\r\n let relStrengthDir: StrengthDirection = StrengthDirection.Forward;\r\n if (cType === ClassType.Relationship) {\r\n relStrength = reader.readU8();\r\n relStrengthDir = reader.readU8();\r\n }\r\n const cEcInstanceId = reader.readU32();\r\n // Tri-state hidden: 0=undefined (no CA, schema doesn't hide), 1=true (hidden), 2=false (explicitly shown)\r\n const cHiddenByte = reader.readU8();\r\n const cIsHidden: boolean | undefined = cHiddenByte === 1 ? true : cHiddenByte === 2 ? false : undefined;\r\n\r\n // Base classes (count-prefixed)\r\n const baseCount = reader.readU16();\r\n const baseClasses: Array<{ schemaName: string; className: string; ordinal: number }> = [];\r\n for (let b = 0; b < baseCount; b++) {\r\n baseClasses.push({\r\n schemaName: reader.readSRef(),\r\n className: reader.readSRef(),\r\n ordinal: reader.readU8(),\r\n });\r\n }\r\n\r\n // Property refs (count-prefixed)\r\n const propRefCount = reader.readU16();\r\n const propRefs: PendingPropRef[] = [];\r\n for (let p = 0; p < propRefCount; p++) {\r\n propRefs.push({\r\n preDefIdx: reader.readU32(),\r\n labelStringIdx: builder.internString(reader.readSRef()),\r\n priority: reader.readI32(),\r\n ecInstanceId: reader.readU32(),\r\n });\r\n }\r\n\r\n // Constraints (count-prefixed, only for relationships)\r\n const constraints: PendingConstraint[] = [];\r\n if (cType === ClassType.Relationship) {\r\n const constrCount = reader.readU8();\r\n for (let c = 0; c < constrCount; c++) {\r\n const rcEnd = reader.readU8();\r\n const rcMultLower = reader.readU32();\r\n const rcMultUpper = reader.readU32();\r\n const rcIsPoly = reader.readU8() !== 0;\r\n const rcRoleLabel = reader.readSRef();\r\n const rcAbsSchema = reader.readSRef();\r\n const rcAbsClass = reader.readSRef();\r\n\r\n // Constraint classes (count-prefixed)\r\n const ccCount = reader.readU8();\r\n const constraintClasses: Array<{ schemaName: string; className: string }> = [];\r\n for (let cc = 0; cc < ccCount; cc++) {\r\n constraintClasses.push({\r\n schemaName: reader.readSRef(),\r\n className: reader.readSRef(),\r\n });\r\n }\r\n\r\n constraints.push({\r\n relEnd: rcEnd,\r\n isPolymorphic: rcIsPoly,\r\n multiplicityLower: rcMultLower,\r\n multiplicityUpper: rcMultUpper,\r\n roleLabel: rcRoleLabel,\r\n abstractSchemaName: rcAbsSchema,\r\n abstractClassName: rcAbsClass,\r\n constraintClasses,\r\n });\r\n }\r\n }\r\n\r\n const nameStringIdx = builder.internString(cName);\r\n const classIdx = builder.addClass({\r\n ecInstanceId: cEcInstanceId,\r\n schemaIdx,\r\n nameStringIdx,\r\n labelStringIdx: builder.internString(cLabel),\r\n descriptionStringIdx: builder.internString(cDesc),\r\n type: cType,\r\n modifier: cModifier,\r\n baseClassIdx: -1,\r\n mixinStartIdx: -1,\r\n mixinCount: 0,\r\n ownPropStart: 0,\r\n ownPropCount: 0,\r\n strength: relStrength,\r\n strengthDirection: relStrengthDir,\r\n sourceConstraintIdx: -1,\r\n targetConstraintIdx: -1,\r\n isHidden: cIsHidden,\r\n });\r\n classResolver.set(`${schemaName.toLowerCase()}:${cName.toLowerCase()}`, classIdx);\r\n classRowIdToIdx.set(cEcInstanceId, classIdx);\r\n\r\n pendingClasses.push({\r\n schemaIdx,\r\n classIdx,\r\n ecInstanceId: cEcInstanceId,\r\n nameStringIdx,\r\n labelStringIdx: builder.internString(cLabel),\r\n descriptionStringIdx: builder.internString(cDesc),\r\n type: cType,\r\n modifier: cModifier,\r\n relStrength,\r\n relStrengthDir,\r\n baseClasses,\r\n propRefs,\r\n constraints,\r\n schemaName,\r\n isHidden: cIsHidden,\r\n });\r\n }\r\n\r\n // ---- Finalize per-schema item ranges ----\r\n // Local index i maps to global schema index schemaBaseIdx + i; range starts are already global.\r\n for (let i = 0; i < schemaCount; i++) {\r\n builder.updateSchemaRanges(schemaBaseIdx + i, {\r\n classRangeStart: schemaClassStarts[i] ?? 0,\r\n classCount: schemaClassCounts[i] ?? 0,\r\n enumRangeStart: schemaEnumStarts[i] ?? 0,\r\n enumCount: schemaEnumCounts[i] ?? 0,\r\n koqRangeStart: schemaKoqStarts[i] ?? 0,\r\n koqCount: schemaKoqCounts[i] ?? 0,\r\n catRangeStart: schemaCatStarts[i] ?? 0,\r\n catCount: schemaCatCounts[i] ?? 0,\r\n });\r\n }\r\n\r\n // Resolve pre-parsed defs to PropertyDef objects. Maps preParsedDef index -> builder defIdx.\r\n const danglingRefs: string[] = [];\r\n const resolvedDefMap = new Map<number, number>();\r\n const brokenDefs = new Set<number>();\r\n\r\n for (let i = 0; i < preParsedDefs.length; i++) {\r\n const prDef = preParsedDefs[i];\r\n\r\n let structClassIdx = -1;\r\n if (prDef.structClassRowId !== 0) {\r\n structClassIdx = classRowIdToIdx.get(prDef.structClassRowId) ?? -1;\r\n if (structClassIdx === -1) {\r\n brokenDefs.add(i);\r\n danglingRefs.push(`Dropped properties with struct class rowId ${prDef.structClassRowId}`);\r\n continue;\r\n }\r\n }\r\n\r\n let navRelClassIdx = -1;\r\n if (prDef.navRelClassRowId !== 0) {\r\n navRelClassIdx = classRowIdToIdx.get(prDef.navRelClassRowId) ?? -1;\r\n if (navRelClassIdx === -1) {\r\n brokenDefs.add(i);\r\n danglingRefs.push(`Dropped properties with nav relationship rowId ${prDef.navRelClassRowId}`);\r\n continue;\r\n }\r\n }\r\n\r\n let enumIdx = -1;\r\n if (prDef.enumRowId !== 0) {\r\n enumIdx = enumRowIdToIdx.get(prDef.enumRowId) ?? -1;\r\n if (enumIdx === -1)\r\n danglingRefs.push(`Unresolved enum rowId ${prDef.enumRowId}`);\r\n }\r\n\r\n let koqIdx = -1;\r\n if (prDef.koqRowId !== 0)\r\n koqIdx = koqRowIdToIdx.get(prDef.koqRowId) ?? -1;\r\n\r\n let categoryIdx = -1;\r\n if (prDef.catRowId !== 0)\r\n categoryIdx = catRowIdToIdx.get(prDef.catRowId) ?? -1;\r\n\r\n const def: PropertyDef = {\r\n nameStringIdx: builder.internString(prDef.name),\r\n descriptionStringIdx: builder.internString(prDef.description),\r\n kind: prDef.kind,\r\n primitiveType: prDef.primitiveType,\r\n extTypeStringIdx: builder.internString(prDef.extType),\r\n enumIdx,\r\n koqIdx,\r\n structClassIdx,\r\n navRelClassIdx,\r\n navDirection: prDef.navDirection,\r\n categoryIdx,\r\n isReadOnly: prDef.isReadonly,\r\n isHidden: prDef.isHidden,\r\n arrayMinOccurs: prDef.arrayMinOccurs,\r\n arrayMaxOccurs: prDef.arrayMaxOccurs,\r\n };\r\n\r\n resolvedDefMap.set(i, builder.addPropertyDef(def));\r\n }\r\n\r\n // Resolve cross-references and finalize classes\r\n for (const pc of pendingClasses) {\r\n pc.baseClasses.sort((a, b) => a.ordinal - b.ordinal);\r\n const classFullName = `${pc.schemaName}:${builder.getString(pc.nameStringIdx)}`;\r\n\r\n let baseClassIdx = -1;\r\n const mixinStartIdx = pc.baseClasses.length > 1 ? builder.classMixinCount : -1;\r\n let mixinCount = 0;\r\n\r\n for (const bc of pc.baseClasses) {\r\n const bcKey = `${bc.schemaName.toLowerCase()}:${bc.className.toLowerCase()}`;\r\n const bcIdx = classResolver.get(bcKey) ?? -1;\r\n if (bc.ordinal === 0) {\r\n if (bcIdx === -1 && bc.schemaName)\r\n danglingRefs.push(`${classFullName} -> base class ${bc.schemaName}:${bc.className}`);\r\n baseClassIdx = bcIdx;\r\n } else {\r\n if (bcIdx === -1) {\r\n danglingRefs.push(`${classFullName} -> mixin ${bc.schemaName}:${bc.className}`);\r\n continue;\r\n }\r\n builder.addClassMixin(bcIdx);\r\n mixinCount++;\r\n }\r\n }\r\n\r\n const ownPropStart = builder.propertyRefCount;\r\n for (const pr of pc.propRefs) {\r\n if (brokenDefs.has(pr.preDefIdx))\r\n continue;\r\n const defIdx = resolvedDefMap.get(pr.preDefIdx);\r\n if (defIdx === undefined)\r\n continue;\r\n builder.addPropertyRef({\r\n ecInstanceId: pr.ecInstanceId,\r\n defIdx,\r\n labelStringIdx: pr.labelStringIdx,\r\n priority: pr.priority,\r\n });\r\n }\r\n\r\n let sourceConstraintIdx = -1;\r\n let targetConstraintIdx = -1;\r\n for (const con of pc.constraints) {\r\n const absKey = con.abstractSchemaName && con.abstractClassName\r\n ? `${con.abstractSchemaName.toLowerCase()}:${con.abstractClassName.toLowerCase()}`\r\n : \"\";\r\n const absClassIdx = absKey ? (classResolver.get(absKey) ?? -1) : -1;\r\n if (absClassIdx === -1 && absKey)\r\n danglingRefs.push(`${classFullName} constraint -> abstract ${con.abstractSchemaName}:${con.abstractClassName}`);\r\n\r\n const classRefStart = builder.constraintClassRefCount;\r\n let classRefCount = 0;\r\n for (const cc of con.constraintClasses) {\r\n const ccKey = `${cc.schemaName.toLowerCase()}:${cc.className.toLowerCase()}`;\r\n const ccIdx = classResolver.get(ccKey) ?? -1;\r\n if (ccIdx === -1) {\r\n danglingRefs.push(`${classFullName} constraint -> class ${cc.schemaName}:${cc.className}`);\r\n continue;\r\n }\r\n builder.addConstraintClassRef(ccIdx);\r\n classRefCount++;\r\n }\r\n\r\n const constraintIdx = builder.addRelConstraint({\r\n abstractConstraintIdx: absClassIdx,\r\n polymorphic: con.isPolymorphic,\r\n multiplicityLower: con.multiplicityLower,\r\n multiplicityUpper: con.multiplicityUpper,\r\n roleLabelStringIdx: builder.internString(con.roleLabel),\r\n classRefStart,\r\n classRefCount,\r\n });\r\n\r\n if (con.relEnd === 0)\r\n sourceConstraintIdx = constraintIdx;\r\n else\r\n targetConstraintIdx = constraintIdx;\r\n }\r\n\r\n const updatedClass: ClassData = {\r\n ecInstanceId: pc.ecInstanceId,\r\n schemaIdx: pc.schemaIdx,\r\n nameStringIdx: pc.nameStringIdx,\r\n labelStringIdx: pc.labelStringIdx,\r\n descriptionStringIdx: pc.descriptionStringIdx,\r\n type: pc.type,\r\n modifier: pc.modifier,\r\n baseClassIdx,\r\n mixinStartIdx,\r\n mixinCount,\r\n ownPropStart,\r\n ownPropCount: builder.propertyRefCount - ownPropStart,\r\n strength: pc.relStrength,\r\n strengthDirection: pc.relStrengthDir,\r\n sourceConstraintIdx,\r\n targetConstraintIdx,\r\n isHidden: pc.isHidden,\r\n };\r\n builder.updateClass(pc.classIdx, updatedClass);\r\n }\r\n\r\n if (danglingRefs.length > 0) {\r\n const cap = 20;\r\n const lines = danglingRefs.length <= cap ? danglingRefs : [...danglingRefs.slice(0, cap), `... and ${danglingRefs.length - cap} more`];\r\n Logger.logWarning(\"ecschema-metadata.SchemaView\", `${danglingRefs.length} unresolved cross-reference(s) in schema view blob (likely from excluded schemas):\\n ${lines.join(\"\\n \")}`);\r\n }\r\n\r\n // Bring the builder's lookup maps up to date for the schemas this fragment added. Their item\r\n // ranges were finalized above, so the per-schema name maps build correctly.\r\n builder.extendLookupMaps();\r\n}\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewBuilder.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBuilder.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 Schema\n */\n\nimport type { ClassData, EnumerationData, EnumeratorData, KoqData, PropCategoryData, PropertyDef, PropertyRef, RelConstraintData, SchemaData } from \"./SchemaViewInterfaces\";\nimport { SchemaView, type SchemaViewData } from \"./SchemaView\";\n\n/** Builder for constructing an immutable `SchemaView`.\n *\n * Collects data during binary blob parsing, then freezes it into a view.\n * Handles string interning and property definition deduplication.\n *\n * Consumers should not use this directly - read views via `IModelDb.getSchemaView`\n * / `IModelConnection.getSchemaView` (or `SchemaView.fromBinary` if you have a raw blob).\n * @internal\n */\nexport class SchemaViewBuilder {\n private readonly _strings: string[] = [\"\"]; // SID 0 = empty string\n private readonly _lowerStrings: string[] = [\"\"];\n private readonly _stringMap = new Map<string, number>(); // original value -> SID\n\n private readonly _schemas: SchemaData[] = [];\n private readonly _classes: ClassData[] = [];\n private readonly _classMixins: number[] = [];\n private readonly _propDefs: PropertyDef[] = [];\n private readonly _propertyRefs: PropertyRef[] = [];\n private readonly _relConstraints: RelConstraintData[] = [];\n private readonly _constraintClassRefs: number[] = [];\n private readonly _enumerations: EnumerationData[] = [];\n private readonly _enumerators: EnumeratorData[] = [];\n private readonly _koqs: KoqData[] = [];\n private readonly _propCategories: PropCategoryData[] = [];\n\n // For PropertyDef dedup\n private readonly _propDefMap = new Map<string, number>(); // signature string -> defIdx\n\n // Lookup maps - owned by the builder so a husk can share and extend them across fragment merges.\n // `build()` and each merge call `extendLookupMaps()`; the view receives these same Map objects\n // via `assembleData()`, so in-place growth is visible.\n private readonly _schemaByName = new Map<string, number>();\n private readonly _schemaByAlias = new Map<string, number>();\n private readonly _classByName = new Map<number, Map<string, number>>();\n private readonly _enumByName = new Map<number, Map<string, number>>();\n private readonly _koqByName = new Map<number, Map<string, number>>();\n private readonly _catByName = new Map<number, Map<string, number>>();\n private _lookupMapsBuiltUpto = 0; // number of schemas whose lookup entries are already built\n\n /** Intern a string, returning its SID. Empty/undefined strings return 0.\n * Interning is case-sensitive - \"MyLabel\" and \"MYLABEL\" get distinct SIDs.\n * The `lowerStrings` array provides case-insensitive lookup without mutating display values.\n */\n public internString(value: string | undefined): number {\n if (value === undefined || value === \"\") return 0;\n const existing = this._stringMap.get(value);\n if (existing !== undefined) return existing;\n const sid = this._strings.length;\n this._strings.push(value);\n this._lowerStrings.push(value.toLowerCase());\n this._stringMap.set(value, sid);\n return sid;\n }\n\n /** Add a schema. Returns its index. */\n public addSchema(data: SchemaData): number {\n const idx = this._schemas.length;\n this._schemas.push(data);\n return idx;\n }\n\n /** Add a class. Returns its index. Must be called after the owning schema. */\n public addClass(data: ClassData): number {\n const idx = this._classes.length;\n this._classes.push(data);\n return idx;\n }\n\n /** Add a property definition with deduplication. Returns the def index (possibly existing). */\n public addPropertyDef(data: PropertyDef): number {\n const sig = this._propDefSignature(data);\n const existing = this._propDefMap.get(sig);\n if (existing !== undefined) return existing;\n\n const idx = this._propDefs.length;\n this._propDefs.push(data);\n this._propDefMap.set(sig, idx);\n return idx;\n }\n\n /** Append a property reference to the flat refs array. */\n public addPropertyRef(ref: PropertyRef): void {\n this._propertyRefs.push(ref);\n }\n\n /** Add an enumeration. Returns its index. */\n public addEnumeration(data: EnumerationData): number {\n const idx = this._enumerations.length;\n this._enumerations.push(data);\n return idx;\n }\n\n /** Append an enumerator to the flat enumerators array. */\n public addEnumerator(data: EnumeratorData): void {\n this._enumerators.push(data);\n }\n\n /** Add a KindOfQuantity. Returns its index. */\n public addKoq(data: KoqData): number {\n const idx = this._koqs.length;\n this._koqs.push(data);\n return idx;\n }\n\n /** Add a PropertyCategory. Returns its index. */\n public addPropertyCategory(data: PropCategoryData): number {\n const idx = this._propCategories.length;\n this._propCategories.push(data);\n return idx;\n }\n\n /** Add a relationship constraint. Returns its index. */\n public addRelConstraint(data: RelConstraintData): number {\n const idx = this._relConstraints.length;\n this._relConstraints.push(data);\n return idx;\n }\n\n /** Append a constraint class reference to the flat array. */\n public addConstraintClassRef(classIdx: number): void {\n this._constraintClassRefs.push(classIdx);\n }\n\n /** Append a mixin class reference to the flat array. */\n public addClassMixin(classIdx: number): void {\n this._classMixins.push(classIdx);\n }\n\n /** The current count of property refs (used to set ownPropStart on ClassData). */\n public get propertyRefCount(): number { return this._propertyRefs.length; }\n\n /** The current count of enumerators (used to set enumeratorStart on EnumerationData). */\n public get enumeratorCount(): number { return this._enumerators.length; }\n\n /** The current count of constraint class refs (used to set classRefStart). */\n public get constraintClassRefCount(): number { return this._constraintClassRefs.length; }\n\n /** The current count of class mixins (used to set mixinStartIdx). */\n public get classMixinCount(): number { return this._classMixins.length; }\n\n // The counts below are the base indices fragment merging uses to translate a fragment's local\n // indices into global ones.\n\n /** The current count of schemas. @internal */\n public get schemaCount(): number { return this._schemas.length; }\n\n /** The current count of classes. @internal */\n public get classCount(): number { return this._classes.length; }\n\n /** The current count of enumerations. @internal */\n public get enumerationCount(): number { return this._enumerations.length; }\n\n /** The current count of KindOfQuantities. @internal */\n public get koqCount(): number { return this._koqs.length; }\n\n /** The current count of property categories. @internal */\n public get propCategoryCount(): number { return this._propCategories.length; }\n\n /** Get a string by SID. @internal */\n public getString(sid: number): string { return this._strings[sid]; }\n\n /** Replace class data at the given index (used during deferred cross-ref resolution). @internal */\n public updateClass(classIdx: number, data: ClassData): void { this._classes[classIdx] = data; }\n\n /** Update range fields on a schema (used after all items for a schema are collected). @internal */\n public updateSchemaRanges(schemaIdx: number, ranges: { classRangeStart: number; classCount: number; enumRangeStart: number; enumCount: number; koqRangeStart: number; koqCount: number; catRangeStart: number; catCount: number }): void {\n const s = this._schemas[schemaIdx];\n this._schemas[schemaIdx] = { ...s, ...ranges };\n }\n\n /** Freeze all data and produce an immutable SchemaView. */\n public build(schemaToken?: string): SchemaView {\n this.extendLookupMaps();\n return new SchemaView(this.assembleData(), schemaToken);\n }\n\n /** Build lookup-map entries for any schemas added since the last call. Idempotent and\n * append-only, so it is safe to call after each fragment merge. A schema's item ranges must\n * already be finalized (via `updateSchemaRanges`) before it is processed.\n * @internal */\n public extendLookupMaps(): void {\n for (let i = this._lookupMapsBuiltUpto; i < this._schemas.length; i++) {\n const s = this._schemas[i];\n this._schemaByName.set(this._lowerStrings[s.nameStringIdx], i);\n if (s.aliasStringIdx !== 0)\n this._schemaByAlias.set(this._lowerStrings[s.aliasStringIdx], i);\n\n // Build class-by-name map for this schema\n const classMap = new Map<string, number>();\n for (let c = s.classRangeStart; c < s.classRangeStart + s.classCount; c++)\n classMap.set(this._lowerStrings[this._classes[c].nameStringIdx], c);\n this._classByName.set(i, classMap);\n\n // Build enum-by-name map for this schema\n const eMap = new Map<string, number>();\n for (let e = s.enumRangeStart; e < s.enumRangeStart + s.enumCount; e++)\n eMap.set(this._lowerStrings[this._enumerations[e].nameStringIdx], e);\n this._enumByName.set(i, eMap);\n\n // Build koq-by-name map for this schema\n const kMap = new Map<string, number>();\n for (let k = s.koqRangeStart; k < s.koqRangeStart + s.koqCount; k++)\n kMap.set(this._lowerStrings[this._koqs[k].nameStringIdx], k);\n this._koqByName.set(i, kMap);\n\n // Build category-by-name map for this schema\n const cMap = new Map<string, number>();\n for (let p = s.catRangeStart; p < s.catRangeStart + s.catCount; p++)\n cMap.set(this._lowerStrings[this._propCategories[p].nameStringIdx], p);\n this._catByName.set(i, cMap);\n }\n this._lookupMapsBuiltUpto = this._schemas.length;\n }\n\n /** Assemble a {@link SchemaViewData} bag that references this builder's live arrays and lookup\n * maps. Continued building - fragment merges that append to the arrays and extend the maps in\n * place - is visible through the shared references, so a husk holding this data sees merged\n * schemas without rebuilding. @internal */\n public assembleData(): SchemaViewData {\n return {\n strings: this._strings,\n lowerStrings: this._lowerStrings,\n schemas: this._schemas,\n classes: this._classes,\n classMixins: this._classMixins,\n propDefs: this._propDefs,\n propertyRefs: this._propertyRefs,\n relConstraints: this._relConstraints,\n constraintClassRefs: this._constraintClassRefs,\n enumerations: this._enumerations,\n enumerators: this._enumerators,\n koqs: this._koqs,\n propCategories: this._propCategories,\n schemaByName: this._schemaByName,\n schemaByAlias: this._schemaByAlias,\n classByName: this._classByName,\n enumByName: this._enumByName,\n koqByName: this._koqByName,\n catByName: this._catByName,\n };\n }\n\n /** Produce a dedup signature for a PropertyDef. Label and priority are excluded because\n * they are per-PropertyRef overrides, not part of the structural definition.\n * Uses SIDs (not lowercase strings) for name/description so that case-preserving names\n * stay distinct - matching the C++ writer's dedup behavior. */\n private _propDefSignature(def: PropertyDef): string {\n return `${def.nameStringIdx}|${def.kind}|${def.primitiveType}|${def.extTypeStringIdx}|${def.enumIdx}|${def.koqIdx}|${def.structClassIdx}|${def.navRelClassIdx}|${def.navDirection}|${def.categoryIdx}|${def.isReadOnly ? 1 : 0}|${def.isHidden ? 1 : 0}|${def.arrayMinOccurs}|${def.arrayMaxOccurs}|${def.descriptionStringIdx}`;\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaViewBuilder.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewBuilder.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 Schema\r\n */\r\n\r\nimport type { ClassData, EnumerationData, EnumeratorData, KoqData, PropCategoryData, PropertyDef, PropertyRef, RelConstraintData, SchemaData } from \"./SchemaViewInterfaces\";\r\nimport { SchemaView, type SchemaViewData } from \"./SchemaView\";\r\n\r\n/** Builder for constructing an immutable `SchemaView`.\r\n *\r\n * Collects data during binary blob parsing, then freezes it into a view.\r\n * Handles string interning and property definition deduplication.\r\n *\r\n * Consumers should not use this directly - read views via `IModelDb.getSchemaView`\r\n * / `IModelConnection.getSchemaView` (or `SchemaView.fromBinary` if you have a raw blob).\r\n * @internal\r\n */\r\nexport class SchemaViewBuilder {\r\n private readonly _strings: string[] = [\"\"]; // SID 0 = empty string\r\n private readonly _lowerStrings: string[] = [\"\"];\r\n private readonly _stringMap = new Map<string, number>(); // original value -> SID\r\n\r\n private readonly _schemas: SchemaData[] = [];\r\n private readonly _classes: ClassData[] = [];\r\n private readonly _classMixins: number[] = [];\r\n private readonly _propDefs: PropertyDef[] = [];\r\n private readonly _propertyRefs: PropertyRef[] = [];\r\n private readonly _relConstraints: RelConstraintData[] = [];\r\n private readonly _constraintClassRefs: number[] = [];\r\n private readonly _enumerations: EnumerationData[] = [];\r\n private readonly _enumerators: EnumeratorData[] = [];\r\n private readonly _koqs: KoqData[] = [];\r\n private readonly _propCategories: PropCategoryData[] = [];\r\n\r\n // For PropertyDef dedup\r\n private readonly _propDefMap = new Map<string, number>(); // signature string -> defIdx\r\n\r\n // Lookup maps - owned by the builder so a husk can share and extend them across fragment merges.\r\n // `build()` and each merge call `extendLookupMaps()`; the view receives these same Map objects\r\n // via `assembleData()`, so in-place growth is visible.\r\n private readonly _schemaByName = new Map<string, number>();\r\n private readonly _schemaByAlias = new Map<string, number>();\r\n private readonly _classByName = new Map<number, Map<string, number>>();\r\n private readonly _enumByName = new Map<number, Map<string, number>>();\r\n private readonly _koqByName = new Map<number, Map<string, number>>();\r\n private readonly _catByName = new Map<number, Map<string, number>>();\r\n private _lookupMapsBuiltUpto = 0; // number of schemas whose lookup entries are already built\r\n\r\n /** Intern a string, returning its SID. Empty/undefined strings return 0.\r\n * Interning is case-sensitive - \"MyLabel\" and \"MYLABEL\" get distinct SIDs.\r\n * The `lowerStrings` array provides case-insensitive lookup without mutating display values.\r\n */\r\n public internString(value: string | undefined): number {\r\n if (value === undefined || value === \"\") return 0;\r\n const existing = this._stringMap.get(value);\r\n if (existing !== undefined) return existing;\r\n const sid = this._strings.length;\r\n this._strings.push(value);\r\n this._lowerStrings.push(value.toLowerCase());\r\n this._stringMap.set(value, sid);\r\n return sid;\r\n }\r\n\r\n /** Add a schema. Returns its index. */\r\n public addSchema(data: SchemaData): number {\r\n const idx = this._schemas.length;\r\n this._schemas.push(data);\r\n return idx;\r\n }\r\n\r\n /** Add a class. Returns its index. Must be called after the owning schema. */\r\n public addClass(data: ClassData): number {\r\n const idx = this._classes.length;\r\n this._classes.push(data);\r\n return idx;\r\n }\r\n\r\n /** Add a property definition with deduplication. Returns the def index (possibly existing). */\r\n public addPropertyDef(data: PropertyDef): number {\r\n const sig = this._propDefSignature(data);\r\n const existing = this._propDefMap.get(sig);\r\n if (existing !== undefined) return existing;\r\n\r\n const idx = this._propDefs.length;\r\n this._propDefs.push(data);\r\n this._propDefMap.set(sig, idx);\r\n return idx;\r\n }\r\n\r\n /** Append a property reference to the flat refs array. */\r\n public addPropertyRef(ref: PropertyRef): void {\r\n this._propertyRefs.push(ref);\r\n }\r\n\r\n /** Add an enumeration. Returns its index. */\r\n public addEnumeration(data: EnumerationData): number {\r\n const idx = this._enumerations.length;\r\n this._enumerations.push(data);\r\n return idx;\r\n }\r\n\r\n /** Append an enumerator to the flat enumerators array. */\r\n public addEnumerator(data: EnumeratorData): void {\r\n this._enumerators.push(data);\r\n }\r\n\r\n /** Add a KindOfQuantity. Returns its index. */\r\n public addKoq(data: KoqData): number {\r\n const idx = this._koqs.length;\r\n this._koqs.push(data);\r\n return idx;\r\n }\r\n\r\n /** Add a PropertyCategory. Returns its index. */\r\n public addPropertyCategory(data: PropCategoryData): number {\r\n const idx = this._propCategories.length;\r\n this._propCategories.push(data);\r\n return idx;\r\n }\r\n\r\n /** Add a relationship constraint. Returns its index. */\r\n public addRelConstraint(data: RelConstraintData): number {\r\n const idx = this._relConstraints.length;\r\n this._relConstraints.push(data);\r\n return idx;\r\n }\r\n\r\n /** Append a constraint class reference to the flat array. */\r\n public addConstraintClassRef(classIdx: number): void {\r\n this._constraintClassRefs.push(classIdx);\r\n }\r\n\r\n /** Append a mixin class reference to the flat array. */\r\n public addClassMixin(classIdx: number): void {\r\n this._classMixins.push(classIdx);\r\n }\r\n\r\n /** The current count of property refs (used to set ownPropStart on ClassData). */\r\n public get propertyRefCount(): number { return this._propertyRefs.length; }\r\n\r\n /** The current count of enumerators (used to set enumeratorStart on EnumerationData). */\r\n public get enumeratorCount(): number { return this._enumerators.length; }\r\n\r\n /** The current count of constraint class refs (used to set classRefStart). */\r\n public get constraintClassRefCount(): number { return this._constraintClassRefs.length; }\r\n\r\n /** The current count of class mixins (used to set mixinStartIdx). */\r\n public get classMixinCount(): number { return this._classMixins.length; }\r\n\r\n // The counts below are the base indices fragment merging uses to translate a fragment's local\r\n // indices into global ones.\r\n\r\n /** The current count of schemas. @internal */\r\n public get schemaCount(): number { return this._schemas.length; }\r\n\r\n /** The current count of classes. @internal */\r\n public get classCount(): number { return this._classes.length; }\r\n\r\n /** The current count of enumerations. @internal */\r\n public get enumerationCount(): number { return this._enumerations.length; }\r\n\r\n /** The current count of KindOfQuantities. @internal */\r\n public get koqCount(): number { return this._koqs.length; }\r\n\r\n /** The current count of property categories. @internal */\r\n public get propCategoryCount(): number { return this._propCategories.length; }\r\n\r\n /** Get a string by SID. @internal */\r\n public getString(sid: number): string { return this._strings[sid]; }\r\n\r\n /** Replace class data at the given index (used during deferred cross-ref resolution). @internal */\r\n public updateClass(classIdx: number, data: ClassData): void { this._classes[classIdx] = data; }\r\n\r\n /** Update range fields on a schema (used after all items for a schema are collected). @internal */\r\n public updateSchemaRanges(schemaIdx: number, ranges: { classRangeStart: number; classCount: number; enumRangeStart: number; enumCount: number; koqRangeStart: number; koqCount: number; catRangeStart: number; catCount: number }): void {\r\n const s = this._schemas[schemaIdx];\r\n this._schemas[schemaIdx] = { ...s, ...ranges };\r\n }\r\n\r\n /** Freeze all data and produce an immutable SchemaView. */\r\n public build(schemaToken?: string): SchemaView {\r\n this.extendLookupMaps();\r\n return new SchemaView(this.assembleData(), schemaToken);\r\n }\r\n\r\n /** Build lookup-map entries for any schemas added since the last call. Idempotent and\r\n * append-only, so it is safe to call after each fragment merge. A schema's item ranges must\r\n * already be finalized (via `updateSchemaRanges`) before it is processed.\r\n * @internal */\r\n public extendLookupMaps(): void {\r\n for (let i = this._lookupMapsBuiltUpto; i < this._schemas.length; i++) {\r\n const s = this._schemas[i];\r\n this._schemaByName.set(this._lowerStrings[s.nameStringIdx], i);\r\n if (s.aliasStringIdx !== 0)\r\n this._schemaByAlias.set(this._lowerStrings[s.aliasStringIdx], i);\r\n\r\n // Build class-by-name map for this schema\r\n const classMap = new Map<string, number>();\r\n for (let c = s.classRangeStart; c < s.classRangeStart + s.classCount; c++)\r\n classMap.set(this._lowerStrings[this._classes[c].nameStringIdx], c);\r\n this._classByName.set(i, classMap);\r\n\r\n // Build enum-by-name map for this schema\r\n const eMap = new Map<string, number>();\r\n for (let e = s.enumRangeStart; e < s.enumRangeStart + s.enumCount; e++)\r\n eMap.set(this._lowerStrings[this._enumerations[e].nameStringIdx], e);\r\n this._enumByName.set(i, eMap);\r\n\r\n // Build koq-by-name map for this schema\r\n const kMap = new Map<string, number>();\r\n for (let k = s.koqRangeStart; k < s.koqRangeStart + s.koqCount; k++)\r\n kMap.set(this._lowerStrings[this._koqs[k].nameStringIdx], k);\r\n this._koqByName.set(i, kMap);\r\n\r\n // Build category-by-name map for this schema\r\n const cMap = new Map<string, number>();\r\n for (let p = s.catRangeStart; p < s.catRangeStart + s.catCount; p++)\r\n cMap.set(this._lowerStrings[this._propCategories[p].nameStringIdx], p);\r\n this._catByName.set(i, cMap);\r\n }\r\n this._lookupMapsBuiltUpto = this._schemas.length;\r\n }\r\n\r\n /** Assemble a {@link SchemaViewData} bag that references this builder's live arrays and lookup\r\n * maps. Continued building - fragment merges that append to the arrays and extend the maps in\r\n * place - is visible through the shared references, so a husk holding this data sees merged\r\n * schemas without rebuilding. @internal */\r\n public assembleData(): SchemaViewData {\r\n return {\r\n strings: this._strings,\r\n lowerStrings: this._lowerStrings,\r\n schemas: this._schemas,\r\n classes: this._classes,\r\n classMixins: this._classMixins,\r\n propDefs: this._propDefs,\r\n propertyRefs: this._propertyRefs,\r\n relConstraints: this._relConstraints,\r\n constraintClassRefs: this._constraintClassRefs,\r\n enumerations: this._enumerations,\r\n enumerators: this._enumerators,\r\n koqs: this._koqs,\r\n propCategories: this._propCategories,\r\n schemaByName: this._schemaByName,\r\n schemaByAlias: this._schemaByAlias,\r\n classByName: this._classByName,\r\n enumByName: this._enumByName,\r\n koqByName: this._koqByName,\r\n catByName: this._catByName,\r\n };\r\n }\r\n\r\n /** Produce a dedup signature for a PropertyDef. Label and priority are excluded because\r\n * they are per-PropertyRef overrides, not part of the structural definition.\r\n * Uses SIDs (not lowercase strings) for name/description so that case-preserving names\r\n * stay distinct - matching the C++ writer's dedup behavior. */\r\n private _propDefSignature(def: PropertyDef): string {\r\n return `${def.nameStringIdx}|${def.kind}|${def.primitiveType}|${def.extTypeStringIdx}|${def.enumIdx}|${def.koqIdx}|${def.structClassIdx}|${def.navRelClassIdx}|${def.navDirection}|${def.categoryIdx}|${def.isReadOnly ? 1 : 0}|${def.isHidden ? 1 : 0}|${def.arrayMinOccurs}|${def.arrayMaxOccurs}|${def.descriptionStringIdx}`;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewInterfaces.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewInterfaces.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,IAAY,SASX;AATD,WAAY,SAAS;IACnB,6CAAU,CAAA;IACV,yDAAgB,CAAA;IAChB,6CAAU,CAAA;IACV,+DAAmB,CAAA;IACnB,yFAAyF;IACzF,2CAAS,CAAA;IACT,uDAAuD;IACvD,yCAAQ,CAAA;AACV,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED;;GAEG;AACH,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,iDAAQ,CAAA;IACR,yDAAY,CAAA;IACZ,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED;;GAEG;AACH,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,yDAAa,CAAA;IACb,mDAAU,CAAA;IACV,mEAAkB,CAAA;IAClB,6DAAe,CAAA;IACf,2DAAc,CAAA;AAChB,CAAC,EANW,YAAY,4BAAZ,YAAY,QAMvB;AAED;;GAEG;AACH,IAAY,uBAYX;AAZD,WAAY,uBAAuB;IACjC,uFAAoB,CAAA;IACpB,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,+EAAgB,CAAA;IAChB,4EAAc,CAAA;IACd,8EAAe,CAAA;IACf,wEAAY,CAAA;IACZ,8EAAe,CAAA;IACf,8EAAe,CAAA;IACf,4EAAc,CAAA;IACd,kFAAiB,CAAA;AACnB,CAAC,EAZW,uBAAuB,uCAAvB,uBAAuB,QAYlC","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 Schema\n */\n\n/** The binary format version that this TS reader supports.\n * The C++ writer in imodel-native must produce this version (or negotiate down to it).\n * Frontend callers should always request this version explicitly via `PRAGMA schema_view(N)`.\n * Backend callers may omit it since native and backend are bundled together.\n * @beta\n */\nexport const schemaViewFormatVersion = 1;\n\n/** Matches ec_Class.Type values in ECDb.\n * @beta\n */\nexport enum ClassType {\n Entity = 0,\n Relationship = 1,\n Struct = 2,\n CustomAttribute = 3,\n /** Not stored in ec_Class.Type - synthesized from IsMixin CA during cache population. */\n Mixin = 4,\n /** Synthesized from the QueryView custom attribute. */\n View = 5,\n}\n\n/** Matches ec_Class.Modifier values.\n * @beta\n */\nexport enum ClassModifier {\n None = 0,\n Abstract = 1,\n Sealed = 2,\n}\n\n/** Matches ec_Property.Kind values.\n * @beta\n */\nexport enum PropertyKind {\n Primitive = 0,\n Struct = 1,\n PrimitiveArray = 2,\n StructArray = 3,\n Navigation = 4,\n}\n\n/** Matches ec_ PrimitiveType values.\n * @beta\n */\nexport enum SchemaViewPrimitiveType {\n Uninitialized = 0x00,\n Binary = 0x101,\n Boolean = 0x201,\n DateTime = 0x301,\n Double = 0x401,\n Integer = 0x501,\n Long = 0x601,\n Point2d = 0x701,\n Point3d = 0x801,\n String = 0x901,\n IGeometry = 0xa01,\n}\n\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\n\n/** Internal storage for a schema. Schemas own contiguous ranges of classes, enums, KoQs, and categories.\n * @internal\n */\nexport interface SchemaData {\n /** Row ID from ec_Schema - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECSchemaDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly nameStringIdx: number;\n readonly aliasStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly versionRead: number;\n readonly versionWrite: number;\n readonly versionMinor: number;\n readonly classRangeStart: number;\n readonly classCount: number;\n readonly enumRangeStart: number;\n readonly enumCount: number;\n readonly koqRangeStart: number;\n readonly koqCount: number;\n readonly catRangeStart: number;\n readonly catCount: number;\n readonly isHidden: boolean;\n}\n\n/** Internal storage for a class.\n * @internal\n */\nexport interface ClassData {\n /** Row ID from ec_Class - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECClassDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly schemaIdx: number;\n readonly nameStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly type: ClassType;\n readonly modifier: ClassModifier;\n readonly baseClassIdx: number;\n readonly mixinStartIdx: number;\n readonly mixinCount: number;\n readonly ownPropStart: number;\n readonly ownPropCount: number;\n readonly strength: StrengthType;\n readonly strengthDirection: StrengthDirection;\n readonly sourceConstraintIdx: number;\n readonly targetConstraintIdx: number;\n /** Tri-state hidden status from the `HiddenClass` / `HiddenSchema` custom attributes.\n *\n * This is the *direct* status of this class. It does NOT propagate through class\n * inheritance. Use `SchemaView.Class.isEffectivelyHidden` for hierarchy-aware checks.\n *\n * - `true`: `HiddenClass(Show!=true)` is applied, OR the owning schema has\n * `HiddenSchema(ShowClasses!=true)` and this class does not override with `HiddenClass(Show=true)`.\n * - `false`: `HiddenClass(Show=true)` is explicitly applied. This overrides schema-level\n * hiding and breaks the inheritance chain for `isEffectivelyHidden` on derived classes.\n * - `undefined`: No `HiddenClass` CA and the schema does not hide its classes. Neutral -\n * `isEffectivelyHidden` will look up the base class chain to decide.\n *\n * Binary encoding: 0 = undefined, 1 = true, 2 = false.\n */\n readonly isHidden: boolean | undefined;\n}\n\n/** Shared, deduplicated property definition. Many properties may reference the same def.\n * The definition holds the structural shape of a property - name, kind, type, cross-references.\n * Per-class overrides (label, priority) live in `PropertyRef`, not here, so that properties\n * with identical shape but different labels still share a single definition.\n * @internal\n */\nexport interface PropertyDef {\n readonly nameStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly kind: PropertyKind;\n readonly primitiveType: SchemaViewPrimitiveType;\n readonly extTypeStringIdx: number;\n readonly enumIdx: number;\n readonly koqIdx: number;\n readonly structClassIdx: number;\n readonly navRelClassIdx: number;\n readonly navDirection: StrengthDirection;\n readonly categoryIdx: number;\n readonly isReadOnly: boolean;\n readonly isHidden: boolean;\n readonly arrayMinOccurs: number | undefined;\n readonly arrayMaxOccurs: number | undefined;\n}\n\n/** A reference from a specific class to a shared property definition.\n * Label and priority are per-reference (not per-definition) because EC allows class overrides\n * of these attributes. A property displayed in ClassA may have a different label than in ClassB\n * even though the underlying definition (name, type, etc.) is identical.\n *\n * `ecInstanceId` is the ec_Property.Id row ID, stored here (not on PropertyDef) because each\n * class-property pair has a unique row even when the structural definition is deduplicated.\n * @internal\n */\nexport interface PropertyRef {\n /** Row ID from ec_Property - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECPropertyDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly defIdx: number;\n readonly labelStringIdx: number;\n readonly priority: number;\n}\n\n/** Internal storage for a relationship constraint.\n * @internal\n */\nexport interface RelConstraintData {\n readonly abstractConstraintIdx: number;\n readonly polymorphic: boolean;\n readonly multiplicityLower: number;\n readonly multiplicityUpper: number;\n readonly roleLabelStringIdx: number;\n readonly classRefStart: number;\n readonly classRefCount: number;\n}\n\n/** Internal storage for an enumeration.\n * @internal\n */\nexport interface EnumerationData {\n /** Row ID from ec_Enumeration - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECEnumerationDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly schemaIdx: number;\n readonly nameStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly primitiveType: SchemaViewPrimitiveType;\n readonly isStrict: boolean;\n readonly enumeratorStart: number;\n readonly enumeratorCount: number;\n}\n\n/** Internal storage for an enumerator.\n * @internal\n */\nexport interface EnumeratorData {\n readonly nameStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly value: number | string;\n}\n\n/** Internal storage for a KindOfQuantity.\n * @internal\n */\nexport interface KoqData {\n /** Row ID from ec_KindOfQuantity - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECKindOfQuantityDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly schemaIdx: number;\n readonly nameStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly persistenceUnitStringIdx: number;\n readonly presentationFormatsStringIdx: number;\n readonly relativeError: number;\n}\n\n/** Internal storage for a PropertyCategory.\n * @internal\n */\nexport interface PropCategoryData {\n /** Row ID from ec_PropertyCategory - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECPropertyCategoryDef WHERE ECInstanceId = ?`. */\n readonly ecInstanceId: number;\n readonly schemaIdx: number;\n readonly nameStringIdx: number;\n readonly labelStringIdx: number;\n readonly descriptionStringIdx: number;\n readonly priority: number;\n}\n"]}
1
+ {"version":3,"file":"SchemaViewInterfaces.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewInterfaces.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,IAAY,SASX;AATD,WAAY,SAAS;IACnB,6CAAU,CAAA;IACV,yDAAgB,CAAA;IAChB,6CAAU,CAAA;IACV,+DAAmB,CAAA;IACnB,yFAAyF;IACzF,2CAAS,CAAA;IACT,uDAAuD;IACvD,yCAAQ,CAAA;AACV,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED;;GAEG;AACH,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,iDAAQ,CAAA;IACR,yDAAY,CAAA;IACZ,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED;;GAEG;AACH,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,yDAAa,CAAA;IACb,mDAAU,CAAA;IACV,mEAAkB,CAAA;IAClB,6DAAe,CAAA;IACf,2DAAc,CAAA;AAChB,CAAC,EANW,YAAY,4BAAZ,YAAY,QAMvB;AAED;;GAEG;AACH,IAAY,uBAYX;AAZD,WAAY,uBAAuB;IACjC,uFAAoB,CAAA;IACpB,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,+EAAgB,CAAA;IAChB,4EAAc,CAAA;IACd,8EAAe,CAAA;IACf,wEAAY,CAAA;IACZ,8EAAe,CAAA;IACf,8EAAe,CAAA;IACf,4EAAc,CAAA;IACd,kFAAiB,CAAA;AACnB,CAAC,EAZW,uBAAuB,uCAAvB,uBAAuB,QAYlC","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 Schema\r\n */\r\n\r\n/** The binary format version that this TS reader supports.\r\n * The C++ writer in imodel-native must produce this version (or negotiate down to it).\r\n * Frontend callers should always request this version explicitly via `PRAGMA schema_view(N)`.\r\n * Backend callers may omit it since native and backend are bundled together.\r\n * @beta\r\n */\r\nexport const schemaViewFormatVersion = 1;\r\n\r\n/** Matches ec_Class.Type values in ECDb.\r\n * @beta\r\n */\r\nexport enum ClassType {\r\n Entity = 0,\r\n Relationship = 1,\r\n Struct = 2,\r\n CustomAttribute = 3,\r\n /** Not stored in ec_Class.Type - synthesized from IsMixin CA during cache population. */\r\n Mixin = 4,\r\n /** Synthesized from the QueryView custom attribute. */\r\n View = 5,\r\n}\r\n\r\n/** Matches ec_Class.Modifier values.\r\n * @beta\r\n */\r\nexport enum ClassModifier {\r\n None = 0,\r\n Abstract = 1,\r\n Sealed = 2,\r\n}\r\n\r\n/** Matches ec_Property.Kind values.\r\n * @beta\r\n */\r\nexport enum PropertyKind {\r\n Primitive = 0,\r\n Struct = 1,\r\n PrimitiveArray = 2,\r\n StructArray = 3,\r\n Navigation = 4,\r\n}\r\n\r\n/** Matches ec_ PrimitiveType values.\r\n * @beta\r\n */\r\nexport enum SchemaViewPrimitiveType {\r\n Uninitialized = 0x00,\r\n Binary = 0x101,\r\n Boolean = 0x201,\r\n DateTime = 0x301,\r\n Double = 0x401,\r\n Integer = 0x501,\r\n Long = 0x601,\r\n Point2d = 0x701,\r\n Point3d = 0x801,\r\n String = 0x901,\r\n IGeometry = 0xa01,\r\n}\r\n\r\nimport { StrengthDirection, StrengthType } from \"../ECObjects\";\r\n\r\n/** Internal storage for a schema. Schemas own contiguous ranges of classes, enums, KoQs, and categories.\r\n * @internal\r\n */\r\nexport interface SchemaData {\r\n /** Row ID from ec_Schema - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECSchemaDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly nameStringIdx: number;\r\n readonly aliasStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly versionRead: number;\r\n readonly versionWrite: number;\r\n readonly versionMinor: number;\r\n readonly classRangeStart: number;\r\n readonly classCount: number;\r\n readonly enumRangeStart: number;\r\n readonly enumCount: number;\r\n readonly koqRangeStart: number;\r\n readonly koqCount: number;\r\n readonly catRangeStart: number;\r\n readonly catCount: number;\r\n readonly isHidden: boolean;\r\n}\r\n\r\n/** Internal storage for a class.\r\n * @internal\r\n */\r\nexport interface ClassData {\r\n /** Row ID from ec_Class - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECClassDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly schemaIdx: number;\r\n readonly nameStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly type: ClassType;\r\n readonly modifier: ClassModifier;\r\n readonly baseClassIdx: number;\r\n readonly mixinStartIdx: number;\r\n readonly mixinCount: number;\r\n readonly ownPropStart: number;\r\n readonly ownPropCount: number;\r\n readonly strength: StrengthType;\r\n readonly strengthDirection: StrengthDirection;\r\n readonly sourceConstraintIdx: number;\r\n readonly targetConstraintIdx: number;\r\n /** Tri-state hidden status from the `HiddenClass` / `HiddenSchema` custom attributes.\r\n *\r\n * This is the *direct* status of this class. It does NOT propagate through class\r\n * inheritance. Use `SchemaView.Class.isEffectivelyHidden` for hierarchy-aware checks.\r\n *\r\n * - `true`: `HiddenClass(Show!=true)` is applied, OR the owning schema has\r\n * `HiddenSchema(ShowClasses!=true)` and this class does not override with `HiddenClass(Show=true)`.\r\n * - `false`: `HiddenClass(Show=true)` is explicitly applied. This overrides schema-level\r\n * hiding and breaks the inheritance chain for `isEffectivelyHidden` on derived classes.\r\n * - `undefined`: No `HiddenClass` CA and the schema does not hide its classes. Neutral -\r\n * `isEffectivelyHidden` will look up the base class chain to decide.\r\n *\r\n * Binary encoding: 0 = undefined, 1 = true, 2 = false.\r\n */\r\n readonly isHidden: boolean | undefined;\r\n}\r\n\r\n/** Shared, deduplicated property definition. Many properties may reference the same def.\r\n * The definition holds the structural shape of a property - name, kind, type, cross-references.\r\n * Per-class overrides (label, priority) live in `PropertyRef`, not here, so that properties\r\n * with identical shape but different labels still share a single definition.\r\n * @internal\r\n */\r\nexport interface PropertyDef {\r\n readonly nameStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly kind: PropertyKind;\r\n readonly primitiveType: SchemaViewPrimitiveType;\r\n readonly extTypeStringIdx: number;\r\n readonly enumIdx: number;\r\n readonly koqIdx: number;\r\n readonly structClassIdx: number;\r\n readonly navRelClassIdx: number;\r\n readonly navDirection: StrengthDirection;\r\n readonly categoryIdx: number;\r\n readonly isReadOnly: boolean;\r\n readonly isHidden: boolean;\r\n readonly arrayMinOccurs: number | undefined;\r\n readonly arrayMaxOccurs: number | undefined;\r\n}\r\n\r\n/** A reference from a specific class to a shared property definition.\r\n * Label and priority are per-reference (not per-definition) because EC allows class overrides\r\n * of these attributes. A property displayed in ClassA may have a different label than in ClassB\r\n * even though the underlying definition (name, type, etc.) is identical.\r\n *\r\n * `ecInstanceId` is the ec_Property.Id row ID, stored here (not on PropertyDef) because each\r\n * class-property pair has a unique row even when the structural definition is deduplicated.\r\n * @internal\r\n */\r\nexport interface PropertyRef {\r\n /** Row ID from ec_Property - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECPropertyDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly defIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly priority: number;\r\n}\r\n\r\n/** Internal storage for a relationship constraint.\r\n * @internal\r\n */\r\nexport interface RelConstraintData {\r\n readonly abstractConstraintIdx: number;\r\n readonly polymorphic: boolean;\r\n readonly multiplicityLower: number;\r\n readonly multiplicityUpper: number;\r\n readonly roleLabelStringIdx: number;\r\n readonly classRefStart: number;\r\n readonly classRefCount: number;\r\n}\r\n\r\n/** Internal storage for an enumeration.\r\n * @internal\r\n */\r\nexport interface EnumerationData {\r\n /** Row ID from ec_Enumeration - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECEnumerationDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly schemaIdx: number;\r\n readonly nameStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly primitiveType: SchemaViewPrimitiveType;\r\n readonly isStrict: boolean;\r\n readonly enumeratorStart: number;\r\n readonly enumeratorCount: number;\r\n}\r\n\r\n/** Internal storage for an enumerator.\r\n * @internal\r\n */\r\nexport interface EnumeratorData {\r\n readonly nameStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly value: number | string;\r\n}\r\n\r\n/** Internal storage for a KindOfQuantity.\r\n * @internal\r\n */\r\nexport interface KoqData {\r\n /** Row ID from ec_KindOfQuantity - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECKindOfQuantityDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly schemaIdx: number;\r\n readonly nameStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly persistenceUnitStringIdx: number;\r\n readonly presentationFormatsStringIdx: number;\r\n readonly relativeError: number;\r\n}\r\n\r\n/** Internal storage for a PropertyCategory.\r\n * @internal\r\n */\r\nexport interface PropCategoryData {\r\n /** Row ID from ec_PropertyCategory - use with ECDbMeta queries, e.g. `SELECT * FROM meta.ECPropertyCategoryDef WHERE ECInstanceId = ?`. */\r\n readonly ecInstanceId: number;\r\n readonly schemaIdx: number;\r\n readonly nameStringIdx: number;\r\n readonly labelStringIdx: number;\r\n readonly descriptionStringIdx: number;\r\n readonly priority: number;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewManager.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,6CAA0C;AA8D1C;;;;;GAKG;AACH,MAAa,iBAAiB;IACX,aAAa,CAAyB;IAEvD;wEACoE;IAC5D,YAAY,CAAmC;IAEvD,qGAAqG;IAC7F,SAAS,CAAkB;IAEnC,iGAAiG;IACzF,cAAc,CAAU;IAEhC,8EAA8E;IAC7D,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAExD,YAAmB,YAAoC;QACrD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,aAAa,CAAC,IAAwB;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,KAAK;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACxC,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,EACpF,GAAG,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,mBAAmB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS;YACxB,OAAO;QACT,+FAA+F;QAC/F,6FAA6F;QAC7F,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,QAAyC;QAC1E,IAAI,QAAgC,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS;YACxB,OAAO,SAAS,CAAC;QACnB,8FAA8F;QAC9F,6DAA6D;QAC7D,IAAI,QAAQ,CAAC,WAAW,KAAK,EAAE;YAC7B,OAAO,QAAQ,CAAC;QAElB,IAAI,CAAC;YACH,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,QAAQ,CAAC,WAAW;gBACtE,OAAO,QAAQ,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;QACD,QAAQ,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,QAAqD,EAAE,OAAsC,EAAE,WAAoB;QAC/I,IAAI,WAAmC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,QAAQ,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,GAAG,SAAS,CAAC,CAAC,4CAA4C;YACvE,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,EAAE,YAAY,EAAE,CAAC;YAC5B,WAAW,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iFAAiF;YACjF,WAAW,EAAE,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,qDAAqD;IAC7C,sBAAsB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,oBAAoB,CAAC,WAAmC,EAAE,OAAsC,EAAE,OAAO,GAAG,KAAK;QAC7H,MAAM,WAAW,GAAG,WAAW,KAAK,SAAS,CAAC;QAC9C,iGAAiG;QACjG,2CAA2C;QAC3C,IAAI,CAAC,WAAW;YACZ,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC7B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YACtG,OAAO,WAAW,CAAC;QAErB,IAAI,WAAW,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACtE,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,sFAAsF;YACtF,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YAClE,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAEhC,MAAM,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5H,MAAM,IAAI,GAAG,WAAW,IAAI,uBAAU,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7C,sFAAsF;gBACtF,iEAAiE;gBACjE,WAAW,EAAE,YAAY,EAAE,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,IAAI,OAAO;oBACT,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBACrF,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,+FAA+F;YAC/F,qFAAqF;YACrF,KAAK,MAAM,IAAI,IAAI,WAAW;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,gGAAgG;QAChG,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC7K,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArLD,8CAqLC","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 Schema\n */\n\nimport { SchemaManifest } from \"./SchemaManifest\";\nimport { SchemaView } from \"./SchemaView\";\n\n/** One schema-view blob with its cache-invalidation token, as fetched by a\n * {@link SchemaViewDataProvider}. Full and fragment blobs share this shape.\n * @internal\n */\nexport interface SchemaViewBlob {\n /** The binary schema metadata (the `data` column of `PRAGMA schema_view` / `schema_view_fragment`). */\n readonly data: Uint8Array;\n /** Schema-identity hash of the iModel's whole schema set (the `schemaToken` column). Empty string when unavailable. */\n readonly schemaToken: string;\n}\n\n/** The data source a {@link SchemaViewManager} loads schema-view data from, implemented by the hosts\n * that own the query APIs: `IModelDb` on the backend and `IModelConnection` on the frontend. The\n * manager deals only in schema names, blobs and the manifest; everything transport-specific - pragma\n * strings, format-version pinning - belongs to the provider.\n * @internal\n */\nexport interface SchemaViewDataProvider {\n /** Fetch the blob containing every schema in the iModel (`PRAGMA schema_view`). */\n fetchFullBlob(): Promise<SchemaViewBlob>;\n\n /** Fetch one blob containing exactly the given schemas (`PRAGMA schema_view_fragment`). The\n * requested set is always dependency-closed - the manager computes the reference closure from the\n * manifest before calling. */\n fetchFragmentBlob(schemaNames: readonly string[]): Promise<SchemaViewBlob>;\n\n /** Fetch the reference graph of every schema in the iModel, built from ECDbMeta\n * (`meta.ECSchemaDef` + `meta.SchemaHasSchemaReferences`; see {@link SchemaManifest.fromRows}). */\n fetchManifest(): Promise<SchemaManifest>;\n\n /** Fetch the current schema-identity token (`PRAGMA checksum(schema_token)`). */\n fetchSchemaToken(): Promise<string>;\n}\n\n/** Options for `getSchemaView` (see `IModelDb.getSchemaView` / `IModelConnection.getSchemaView`,\n * which delegate to {@link SchemaViewManager.getSchemaView}).\n * @beta\n */\nexport interface GetSchemaViewArgs {\n /** When provided, return a view loaded with at least these schemas plus their references, instead\n * of every schema in the iModel.\n *\n * The view accumulates: one instance is reused across calls, so a later request - with different\n * schemas or with no filter at all - merges the still-missing schemas into the same view and\n * everything requested earlier stays available. It resets when the iModel's schemas change.\n *\n * Names the iModel does not contain are ignored. Omitting this option loads all schemas, identical\n * to calling `getSchemaView()` with no arguments.\n */\n readonly schemas?: readonly string[];\n\n /** When `true`, discard whatever is currently loaded and rebuild the view from scratch before\n * returning it. The previously returned view instance (if any) is marked outdated. Like every other\n * request this is serialized behind any in-flight load, so it never leaves the view in an invalid\n * intermediate state.\n * @internal\n */\n readonly forceReload?: boolean;\n}\n\n/** Owns the lifetime of one iModel's {@link (SchemaView:class)}: lazy loading, incremental (filtered)\n * hydration, serialization of concurrent requests, and invalidation. Hosts (`IModelDb`,\n * `IModelConnection`) hold one instance and delegate to it; all data access goes through the\n * host-implemented {@link SchemaViewDataProvider}.\n * @internal\n */\nexport class SchemaViewManager {\n private readonly _dataProvider: SchemaViewDataProvider;\n\n /** The single accumulating view, held as a promise so all requests chain onto it and never overlap.\n * Undefined (or resolving to undefined) means nothing is loaded. */\n private _viewPromise?: Promise<SchemaView | undefined>;\n\n /** Reference graph for incremental loading; undefined when the view is (or will be) fully loaded. */\n private _manifest?: SchemaManifest;\n\n /** Schema-identity token the manifest - and thus every fragment merged under it - belongs to. */\n private _manifestToken?: string;\n\n /** Lower-cased names already merged into the view (incremental mode only). */\n private readonly _loadedSchemaNames = new Set<string>();\n\n public constructor(dataProvider: SchemaViewDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n /** Get the schema view, loading whatever the request needs that is not present yet. See\n * {@link GetSchemaViewArgs} for filtering and reload semantics; hosts document the full\n * user-facing contract on their `getSchemaView` methods.\n */\n public async getSchemaView(args?: GetSchemaViewArgs): Promise<SchemaView> {\n const previous = this._viewPromise;\n const next = this._loadSchemaView(previous, args?.schemas, args?.forceReload === true);\n this._viewPromise = next;\n return next;\n }\n\n /** Throw away the current schema view. Called by the host when schemas may have changed (e.g.\n * `IModelDb.clearCaches` after a schema import). Chains behind any in-flight load and marks the\n * discarded view outdated; the next getSchemaView starts over.\n */\n public reset(): void {\n if (this._viewPromise) {\n this._viewPromise = this._viewPromise.then(\n (view) => { view?.markOutdated(); this._resetIncrementalState(); return undefined; },\n () => { this._resetIncrementalState(); return undefined; },\n );\n }\n }\n\n /** Check whether the iModel's schemas have changed since the current view was built, and discard\n * the view only if they have. For hosts that *cannot* determine whether an operation actually\n * modified schemas - e.g. `BriefcaseConnection.pullChanges` on the frontend, whose IPC response\n * carries only the new changeset id, not the applied changesets' types. Discarding after every\n * such operation would reload unnecessarily in the common case where schemas are unchanged, so\n * this compares the cheap schema-identity token instead.\n * @note If the token cannot be fetched, the view is discarded rather than risking stale metadata.\n */\n public async invalidateIfChanged(): Promise<void> {\n const previous = this._viewPromise;\n if (previous === undefined)\n return;\n // Queue the check on the same chain as loading, so a getSchemaView arriving while the token is\n // in flight cannot swap in a new promise for the same stale view and hide the schema change.\n const next = this._invalidateIfChanged(previous);\n this._viewPromise = next;\n await next;\n }\n\n /** Serialized body of {@link SchemaViewManager.invalidateIfChanged}. Resolves to the view to keep,\n * or to `undefined` when it was discarded and the next getSchemaView has to start over.\n */\n private async _invalidateIfChanged(previous: Promise<SchemaView | undefined>): Promise<SchemaView | undefined> {\n let existing: SchemaView | undefined;\n try {\n existing = await previous;\n } catch {\n return undefined;\n }\n if (existing === undefined)\n return undefined;\n // A view without a token (e.g. built directly from a SchemaViewBuilder) cannot be verified by\n // token; views loaded through this manager always carry one.\n if (existing.schemaToken === \"\")\n return existing;\n\n try {\n if (await this._dataProvider.fetchSchemaToken() === existing.schemaToken)\n return existing;\n } catch {\n // Cannot verify the cached view: drop it rather than risk stale metadata.\n }\n existing.markOutdated();\n this._resetIncrementalState();\n return undefined;\n }\n\n /** Serialized body of {@link SchemaViewManager.getSchemaView}. On failure it resets and rejects,\n * so the next call starts over.\n */\n private async _loadSchemaView(previous: Promise<SchemaView | undefined> | undefined, schemas: readonly string[] | undefined, forceReload: boolean): Promise<SchemaView> {\n let currentView: SchemaView | undefined;\n if (previous !== undefined) {\n try {\n currentView = await previous;\n } catch {\n currentView = undefined; // the failed load already reset; start over\n }\n }\n\n if (forceReload) {\n currentView?.markOutdated();\n currentView = undefined;\n this._resetIncrementalState();\n }\n\n try {\n return await this._ensureSchemasLoaded(currentView, schemas);\n } catch (err) {\n // A failed merge may have left the view partially extended - discard everything.\n currentView?.markOutdated();\n this._resetIncrementalState();\n throw err;\n }\n }\n\n /** Clear the incremental schema-view bookkeeping. */\n private _resetIncrementalState(): void {\n this._manifest = undefined;\n this._manifestToken = undefined;\n this._loadedSchemaNames.clear();\n }\n\n /** Ensures the requested schemas (or all schemas, when no filter is given) are present in\n * `currentView` (or a freshly created view) and returns it. The first load fixes the strategy:\n * no filter fetches everything as one full blob; a filter fetches fragments and keeps the\n * manifest and loaded-name set so later calls extend the same view. Once every schema is loaded\n * the incremental state is dropped, collapsing back to full mode.\n */\n private async _ensureSchemasLoaded(currentView: SchemaView | undefined, schemas: readonly string[] | undefined, isRetry = false): Promise<SchemaView> {\n const isFirstLoad = currentView === undefined;\n // No manifest means everything is loaded; in incremental mode a filtered request is satisfied as\n // soon as every requested name is present.\n if (!isFirstLoad &&\n (this._manifest === undefined ||\n (schemas !== undefined && schemas.every((name) => this._loadedSchemaNames.has(name.toLowerCase())))))\n return currentView;\n\n if (isFirstLoad && schemas === undefined) {\n const blob = await this._dataProvider.fetchFullBlob();\n const schemaView = SchemaView.fromBinary(blob.data, blob.schemaToken);\n this._resetIncrementalState();\n return schemaView;\n }\n\n if (this._manifest === undefined) {\n // Token first: any schema change after this point shows up as a token mismatch below.\n this._manifestToken = await this._dataProvider.fetchSchemaToken();\n this._manifest = await this._dataProvider.fetchManifest();\n }\n const manifest = this._manifest;\n\n const requested = schemas ?? manifest.getAvailableSchemaNames();\n const namesToLoad = manifest.getSchemaClosure(requested).filter((name) => !this._loadedSchemaNames.has(name.toLowerCase()));\n const husk = currentView ?? SchemaView.createMergeable(this._manifestToken);\n if (namesToLoad.length > 0) {\n const blob = await this._dataProvider.fetchFragmentBlob(namesToLoad);\n if (blob.schemaToken !== this._manifestToken) {\n // Schemas changed between the manifest and fragment fetches. Everything loaded so far\n // belongs to the old revision - discard it and start over, once.\n currentView?.markOutdated();\n this._resetIncrementalState();\n if (isRetry)\n throw new Error(\"The iModel's schemas changed while the schema view was loading.\");\n return this._ensureSchemasLoaded(undefined, schemas, true);\n }\n husk.mergeFragment(blob.data);\n // Record the whole closure as loaded, including *excluded* schemas (e.g. CoreCustomAttributes)\n // the writer emits no rows for, so later requests prune them instead of re-fetching.\n for (const name of namesToLoad)\n this._loadedSchemaNames.add(name.toLowerCase());\n }\n // Once every schema is loaded, collapse back to full mode (the size check is just a fast path).\n if (schemas === undefined || (this._loadedSchemaNames.size >= manifest.schemaCount && manifest.entries.every((entry) => this._loadedSchemaNames.has(entry.name.toLowerCase()))))\n this._resetIncrementalState();\n return husk;\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaViewManager.js","sourceRoot":"","sources":["../../../src/SchemaView/SchemaViewManager.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 Schema\r\n */\r\n\r\nimport { SchemaManifest } from \"./SchemaManifest\";\r\nimport { SchemaView } from \"./SchemaView\";\r\n\r\n/** One schema-view blob with its cache-invalidation token, as fetched by a\r\n * {@link SchemaViewDataProvider}. Full and fragment blobs share this shape.\r\n * @internal\r\n */\r\nexport interface SchemaViewBlob {\r\n /** The binary schema metadata (the `data` column of `PRAGMA schema_view` / `schema_view_fragment`). */\r\n readonly data: Uint8Array;\r\n /** Schema-identity hash of the iModel's whole schema set (the `schemaToken` column). Empty string when unavailable. */\r\n readonly schemaToken: string;\r\n}\r\n\r\n/** The data source a {@link SchemaViewManager} loads schema-view data from, implemented by the hosts\r\n * that own the query APIs: `IModelDb` on the backend and `IModelConnection` on the frontend. The\r\n * manager deals only in schema names, blobs and the manifest; everything transport-specific - pragma\r\n * strings, format-version pinning - belongs to the provider.\r\n * @internal\r\n */\r\nexport interface SchemaViewDataProvider {\r\n /** Fetch the blob containing every schema in the iModel (`PRAGMA schema_view`). */\r\n fetchFullBlob(): Promise<SchemaViewBlob>;\r\n\r\n /** Fetch one blob containing exactly the given schemas (`PRAGMA schema_view_fragment`). The\r\n * requested set is always dependency-closed - the manager computes the reference closure from the\r\n * manifest before calling. */\r\n fetchFragmentBlob(schemaNames: readonly string[]): Promise<SchemaViewBlob>;\r\n\r\n /** Fetch the reference graph of every schema in the iModel, built from ECDbMeta\r\n * (`meta.ECSchemaDef` + `meta.SchemaHasSchemaReferences`; see {@link SchemaManifest.fromRows}). */\r\n fetchManifest(): Promise<SchemaManifest>;\r\n\r\n /** Fetch the current schema-identity token (`PRAGMA checksum(schema_token)`). */\r\n fetchSchemaToken(): Promise<string>;\r\n}\r\n\r\n/** Options for `getSchemaView` (see `IModelDb.getSchemaView` / `IModelConnection.getSchemaView`,\r\n * which delegate to {@link SchemaViewManager.getSchemaView}).\r\n * @beta\r\n */\r\nexport interface GetSchemaViewArgs {\r\n /** When provided, return a view loaded with at least these schemas plus their references, instead\r\n * of every schema in the iModel.\r\n *\r\n * The view accumulates: one instance is reused across calls, so a later request - with different\r\n * schemas or with no filter at all - merges the still-missing schemas into the same view and\r\n * everything requested earlier stays available. It resets when the iModel's schemas change.\r\n *\r\n * Names the iModel does not contain are ignored. Omitting this option loads all schemas, identical\r\n * to calling `getSchemaView()` with no arguments.\r\n */\r\n readonly schemas?: readonly string[];\r\n\r\n /** When `true`, discard whatever is currently loaded and rebuild the view from scratch before\r\n * returning it. The previously returned view instance (if any) is marked outdated. Like every other\r\n * request this is serialized behind any in-flight load, so it never leaves the view in an invalid\r\n * intermediate state.\r\n * @internal\r\n */\r\n readonly forceReload?: boolean;\r\n}\r\n\r\n/** Owns the lifetime of one iModel's {@link (SchemaView:class)}: lazy loading, incremental (filtered)\r\n * hydration, serialization of concurrent requests, and invalidation. Hosts (`IModelDb`,\r\n * `IModelConnection`) hold one instance and delegate to it; all data access goes through the\r\n * host-implemented {@link SchemaViewDataProvider}.\r\n * @internal\r\n */\r\nexport class SchemaViewManager {\r\n private readonly _dataProvider: SchemaViewDataProvider;\r\n\r\n /** The single accumulating view, held as a promise so all requests chain onto it and never overlap.\r\n * Undefined (or resolving to undefined) means nothing is loaded. */\r\n private _viewPromise?: Promise<SchemaView | undefined>;\r\n\r\n /** Reference graph for incremental loading; undefined when the view is (or will be) fully loaded. */\r\n private _manifest?: SchemaManifest;\r\n\r\n /** Schema-identity token the manifest - and thus every fragment merged under it - belongs to. */\r\n private _manifestToken?: string;\r\n\r\n /** Lower-cased names already merged into the view (incremental mode only). */\r\n private readonly _loadedSchemaNames = new Set<string>();\r\n\r\n public constructor(dataProvider: SchemaViewDataProvider) {\r\n this._dataProvider = dataProvider;\r\n }\r\n\r\n /** Get the schema view, loading whatever the request needs that is not present yet. See\r\n * {@link GetSchemaViewArgs} for filtering and reload semantics; hosts document the full\r\n * user-facing contract on their `getSchemaView` methods.\r\n */\r\n public async getSchemaView(args?: GetSchemaViewArgs): Promise<SchemaView> {\r\n const previous = this._viewPromise;\r\n const next = this._loadSchemaView(previous, args?.schemas, args?.forceReload === true);\r\n this._viewPromise = next;\r\n return next;\r\n }\r\n\r\n /** Throw away the current schema view. Called by the host when schemas may have changed (e.g.\r\n * `IModelDb.clearCaches` after a schema import). Chains behind any in-flight load and marks the\r\n * discarded view outdated; the next getSchemaView starts over.\r\n */\r\n public reset(): void {\r\n if (this._viewPromise) {\r\n this._viewPromise = this._viewPromise.then(\r\n (view) => { view?.markOutdated(); this._resetIncrementalState(); return undefined; },\r\n () => { this._resetIncrementalState(); return undefined; },\r\n );\r\n }\r\n }\r\n\r\n /** Check whether the iModel's schemas have changed since the current view was built, and discard\r\n * the view only if they have. For hosts that *cannot* determine whether an operation actually\r\n * modified schemas - e.g. `BriefcaseConnection.pullChanges` on the frontend, whose IPC response\r\n * carries only the new changeset id, not the applied changesets' types. Discarding after every\r\n * such operation would reload unnecessarily in the common case where schemas are unchanged, so\r\n * this compares the cheap schema-identity token instead.\r\n * @note If the token cannot be fetched, the view is discarded rather than risking stale metadata.\r\n */\r\n public async invalidateIfChanged(): Promise<void> {\r\n const previous = this._viewPromise;\r\n if (previous === undefined)\r\n return;\r\n // Queue the check on the same chain as loading, so a getSchemaView arriving while the token is\r\n // in flight cannot swap in a new promise for the same stale view and hide the schema change.\r\n const next = this._invalidateIfChanged(previous);\r\n this._viewPromise = next;\r\n await next;\r\n }\r\n\r\n /** Serialized body of {@link SchemaViewManager.invalidateIfChanged}. Resolves to the view to keep,\r\n * or to `undefined` when it was discarded and the next getSchemaView has to start over.\r\n */\r\n private async _invalidateIfChanged(previous: Promise<SchemaView | undefined>): Promise<SchemaView | undefined> {\r\n let existing: SchemaView | undefined;\r\n try {\r\n existing = await previous;\r\n } catch {\r\n return undefined;\r\n }\r\n if (existing === undefined)\r\n return undefined;\r\n // A view without a token (e.g. built directly from a SchemaViewBuilder) cannot be verified by\r\n // token; views loaded through this manager always carry one.\r\n if (existing.schemaToken === \"\")\r\n return existing;\r\n\r\n try {\r\n if (await this._dataProvider.fetchSchemaToken() === existing.schemaToken)\r\n return existing;\r\n } catch {\r\n // Cannot verify the cached view: drop it rather than risk stale metadata.\r\n }\r\n existing.markOutdated();\r\n this._resetIncrementalState();\r\n return undefined;\r\n }\r\n\r\n /** Serialized body of {@link SchemaViewManager.getSchemaView}. On failure it resets and rejects,\r\n * so the next call starts over.\r\n */\r\n private async _loadSchemaView(previous: Promise<SchemaView | undefined> | undefined, schemas: readonly string[] | undefined, forceReload: boolean): Promise<SchemaView> {\r\n let currentView: SchemaView | undefined;\r\n if (previous !== undefined) {\r\n try {\r\n currentView = await previous;\r\n } catch {\r\n currentView = undefined; // the failed load already reset; start over\r\n }\r\n }\r\n\r\n if (forceReload) {\r\n currentView?.markOutdated();\r\n currentView = undefined;\r\n this._resetIncrementalState();\r\n }\r\n\r\n try {\r\n return await this._ensureSchemasLoaded(currentView, schemas);\r\n } catch (err) {\r\n // A failed merge may have left the view partially extended - discard everything.\r\n currentView?.markOutdated();\r\n this._resetIncrementalState();\r\n throw err;\r\n }\r\n }\r\n\r\n /** Clear the incremental schema-view bookkeeping. */\r\n private _resetIncrementalState(): void {\r\n this._manifest = undefined;\r\n this._manifestToken = undefined;\r\n this._loadedSchemaNames.clear();\r\n }\r\n\r\n /** Ensures the requested schemas (or all schemas, when no filter is given) are present in\r\n * `currentView` (or a freshly created view) and returns it. The first load fixes the strategy:\r\n * no filter fetches everything as one full blob; a filter fetches fragments and keeps the\r\n * manifest and loaded-name set so later calls extend the same view. Once every schema is loaded\r\n * the incremental state is dropped, collapsing back to full mode.\r\n */\r\n private async _ensureSchemasLoaded(currentView: SchemaView | undefined, schemas: readonly string[] | undefined, isRetry = false): Promise<SchemaView> {\r\n const isFirstLoad = currentView === undefined;\r\n // No manifest means everything is loaded; in incremental mode a filtered request is satisfied as\r\n // soon as every requested name is present.\r\n if (!isFirstLoad &&\r\n (this._manifest === undefined ||\r\n (schemas !== undefined && schemas.every((name) => this._loadedSchemaNames.has(name.toLowerCase())))))\r\n return currentView;\r\n\r\n if (isFirstLoad && schemas === undefined) {\r\n const blob = await this._dataProvider.fetchFullBlob();\r\n const schemaView = SchemaView.fromBinary(blob.data, blob.schemaToken);\r\n this._resetIncrementalState();\r\n return schemaView;\r\n }\r\n\r\n if (this._manifest === undefined) {\r\n // Token first: any schema change after this point shows up as a token mismatch below.\r\n this._manifestToken = await this._dataProvider.fetchSchemaToken();\r\n this._manifest = await this._dataProvider.fetchManifest();\r\n }\r\n const manifest = this._manifest;\r\n\r\n const requested = schemas ?? manifest.getAvailableSchemaNames();\r\n const namesToLoad = manifest.getSchemaClosure(requested).filter((name) => !this._loadedSchemaNames.has(name.toLowerCase()));\r\n const husk = currentView ?? SchemaView.createMergeable(this._manifestToken);\r\n if (namesToLoad.length > 0) {\r\n const blob = await this._dataProvider.fetchFragmentBlob(namesToLoad);\r\n if (blob.schemaToken !== this._manifestToken) {\r\n // Schemas changed between the manifest and fragment fetches. Everything loaded so far\r\n // belongs to the old revision - discard it and start over, once.\r\n currentView?.markOutdated();\r\n this._resetIncrementalState();\r\n if (isRetry)\r\n throw new Error(\"The iModel's schemas changed while the schema view was loading.\");\r\n return this._ensureSchemasLoaded(undefined, schemas, true);\r\n }\r\n husk.mergeFragment(blob.data);\r\n // Record the whole closure as loaded, including *excluded* schemas (e.g. CoreCustomAttributes)\r\n // the writer emits no rows for, so later requests prune them instead of re-fetching.\r\n for (const name of namesToLoad)\r\n this._loadedSchemaNames.add(name.toLowerCase());\r\n }\r\n // Once every schema is loaded, collapse back to full mode (the size check is just a fast path).\r\n if (schemas === undefined || (this._loadedSchemaNames.size >= manifest.schemaCount && manifest.entries.every((entry) => this._loadedSchemaNames.has(entry.name.toLowerCase()))))\r\n this._resetIncrementalState();\r\n return husk;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"UnitConverter.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConverter.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAkE;AAGlE,uDAAoD;AACpD,2CAAwC;AACxC,4CAAyC;AACzC,wDAAsD;AACtD,yCAAuC;AAEvC;;;GAGG;AACH,MAAa,aAAa;IAOK;IANrB,OAAO,CAAY;IAE3B;;;OAGG;IACH,YAA6B,QAAuB;QAAvB,aAAQ,GAAR,QAAQ,CAAe;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAS,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,uBAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,uBAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,IAAI,qBAAS,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,qBAAS,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,2BAAY,CAAC,4BAAa,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,8BAAc,CAAC,QAAQ,CAAC;QAEjC,MAAM,aAAa,GAAG,MAAM,WAAI,CAAC,aAAa,CAAC,IAAY,EAAE,EAAU,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa;YAChB,MAAM,IAAI,2BAAY,CAAC,4BAAa,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,2BAAY,CAAC,4BAAa,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,8BAAc,CAAC,QAAQ,CAAC;QAC/E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,8BAAc,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,uBAAU,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,uBAAU,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;AAlHD,sCAkHC","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\nimport { BentleyError, BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { SchemaContext } from \"../Context\";\r\nimport { Constant } from \"../Metadata/Constant\";\r\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\r\nimport { Unit } from \"../Metadata/Unit\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { UnitConversion } from \"@itwin/core-quantity\";\r\nimport { UnitGraph } from \"./UnitTree\";\r\n\r\n/**\r\n * Class constructed with SchemaContext and used to calculate [[UnitConversion]] between Units\r\n * @internal\r\n */\r\nexport class UnitConverter {\r\n private _uGraph: UnitGraph;\r\n\r\n /**\r\n * Create Converter context\r\n * @param _context SchemaContext with contexts added to it.\r\n */\r\n constructor(private readonly _context: SchemaContext) {\r\n this._uGraph = new UnitGraph(this._context);\r\n }\r\n\r\n /**\r\n * Find conversion between from and to units, formatted {schemaName}.{schemaItemName} or {schemaName}:{schemaItemName}\r\n * @param fromUnit SchemaItem full name of source unit\r\n * @param toUnit SchemaItem full name of target unit\r\n * @returns [[UnitConversion]] converting fromUnit -> toUnit with a factor and an offset\r\n * @throws Error if from and to Units' SchemaItem is not found in Schema or Schema prefix is not found in SchemaContext\r\n * @throws Error if from and to Units do not belong to the same phenomenon\r\n * @throws Error if definitions' SchemaItems cannot be found in its own or referenced Schemas\r\n * @throws Error if base units of source and target unit do not match\r\n */\r\n public async calculateConversion(fromUnit: string, toUnit: string): Promise<UnitConversion> {\r\n const [fromSchemaName, fromSchemaItemName] = SchemaItem.parseFullName(fromUnit);\r\n const [toSchemaName, toSchemaItemName] = SchemaItem.parseFullName(toUnit);\r\n const fromSchemaKey = new SchemaKey(fromSchemaName);\r\n const toSchemaKey = new SchemaKey(toSchemaName);\r\n\r\n const fromSchema = await this._context.getSchema(fromSchemaKey);\r\n const toSchema = await this._context.getSchema(toSchemaKey);\r\n\r\n if (!fromSchema || !toSchema) {\r\n throw new BentleyError(BentleyStatus.ERROR, \"Cannot find from's and/or to's schema\", () => {\r\n return { from: fromUnit, fromSchema: fromSchemaName, to: toUnit, toSchema: toSchemaName };\r\n });\r\n }\r\n\r\n const from = await this._uGraph.resolveUnit(fromSchemaItemName, fromSchema);\r\n const to = await this._uGraph.resolveUnit(toSchemaItemName, toSchema);\r\n\r\n return this.processUnits(from, to);\r\n }\r\n\r\n /**\r\n * @param from Source unit converted from\r\n * @param to Target unit converted to\r\n * @internal\r\n */\r\n private async processUnits(from: Unit | Constant, to: Unit | Constant): Promise<UnitConversion> {\r\n if (from.key.matches(to.key))\r\n return UnitConversion.identity;\r\n\r\n const areCompatible = await Unit.areCompatible(from as Unit, to as Unit);\r\n if (!areCompatible)\r\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not belong to same phenomenon`, () => {\r\n return { from, to };\r\n });\r\n\r\n // Add nodes and subsequent children to graph\r\n await this._uGraph.addUnit(from);\r\n await this._uGraph.addUnit(to);\r\n\r\n const fromBaseUnits = new Map<string, number>();\r\n const toBaseUnits = new Map<string, number>();\r\n // Calculate map of UnitConversions to get between from -> base\r\n const fromMapStore = this._uGraph.reduce(from, fromBaseUnits);\r\n // Calculate map of UnitConversions to get between base -> to\r\n const toMapStore = this._uGraph.reduce(to, toBaseUnits);\r\n\r\n if (!this.checkBaseUnitsMatch(fromBaseUnits, toBaseUnits))\r\n throw new BentleyError(BentleyStatus.ERROR, `Source and target units do not have matching base units`, () => {\r\n return { from, to };\r\n });\r\n\r\n // Final calculations to get singular UnitConversion between from -> to\r\n const fromMap = fromMapStore.get(from.key.fullName) || UnitConversion.identity;\r\n const toMap = toMapStore.get(to.key.fullName) || UnitConversion.identity;\r\n const fromInverse = fromMap.inverse();\r\n return fromInverse.compose(toMap);\r\n }\r\n\r\n /**\r\n * Check if fromBaseUnits's base units and exponents matches toBaseUnits's\r\n * @param fromBaseUnits Map of base units for source unit\r\n * @param toBaseUnits Map of base units for target unit\r\n * @internal\r\n */\r\n private checkBaseUnitsMatch(fromBaseUnits: Map<string, number>, toBaseUnits: Map<string, number>): boolean {\r\n // Trim maps of \"One\" and value that equal zero as they do not affect the base units and calculations\r\n for (const [key, value] of fromBaseUnits.entries()) {\r\n const [, schemaItemName] = SchemaItem.parseFullName(key);\r\n if (schemaItemName === \"ONE\" || value === 0) {\r\n fromBaseUnits.delete(key);\r\n }\r\n }\r\n\r\n for (const [key, value] of toBaseUnits.entries()) {\r\n const [, schemaItemName] = SchemaItem.parseFullName(key);\r\n if (schemaItemName === \"ONE\" || value === 0) {\r\n toBaseUnits.delete(key);\r\n }\r\n }\r\n\r\n if (fromBaseUnits.size !== toBaseUnits.size)\r\n return false;\r\n\r\n for (const key of fromBaseUnits.keys()) {\r\n if (!toBaseUnits.has(key) || fromBaseUnits.get(key) !== toBaseUnits.get(key)) {\r\n // Mismatching key or value\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}