@itwin/core-backend 5.10.0-dev.1 → 5.10.0-dev.10

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 (132) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +17 -59
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +45 -162
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/Category.d.ts +4 -4
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangesetECAdaptor.d.ts +6 -6
  9. package/lib/cjs/ChangesetECAdaptor.js +4 -4
  10. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  11. package/lib/cjs/CodeSpecs.d.ts +3 -3
  12. package/lib/cjs/CodeSpecs.js.map +1 -1
  13. package/lib/cjs/DisplayStyle.d.ts +2 -2
  14. package/lib/cjs/DisplayStyle.js.map +1 -1
  15. package/lib/cjs/Element.d.ts +10 -10
  16. package/lib/cjs/Element.d.ts.map +1 -1
  17. package/lib/cjs/Element.js +2 -2
  18. package/lib/cjs/Element.js.map +1 -1
  19. package/lib/cjs/ElementAspect.d.ts +1 -1
  20. package/lib/cjs/ElementAspect.js.map +1 -1
  21. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  22. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  23. package/lib/cjs/ExternalSource.d.ts +2 -2
  24. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  25. package/lib/cjs/ExternalSource.js.map +1 -1
  26. package/lib/cjs/IModelDb.d.ts +22 -22
  27. package/lib/cjs/IModelDb.js +20 -20
  28. package/lib/cjs/IModelDb.js.map +1 -1
  29. package/lib/cjs/IModelJsFs.d.ts +2 -0
  30. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  31. package/lib/cjs/IModelJsFs.js +14 -0
  32. package/lib/cjs/IModelJsFs.js.map +1 -1
  33. package/lib/cjs/LineStyle.d.ts +6 -6
  34. package/lib/cjs/LineStyle.js.map +1 -1
  35. package/lib/cjs/Material.d.ts +1 -1
  36. package/lib/cjs/Material.js.map +1 -1
  37. package/lib/cjs/Model.d.ts +6 -6
  38. package/lib/cjs/Model.d.ts.map +1 -1
  39. package/lib/cjs/Model.js.map +1 -1
  40. package/lib/cjs/Relationship.d.ts +10 -10
  41. package/lib/cjs/Relationship.js +6 -6
  42. package/lib/cjs/Relationship.js.map +1 -1
  43. package/lib/cjs/SheetIndex.d.ts +4 -4
  44. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  45. package/lib/cjs/SheetIndex.js.map +1 -1
  46. package/lib/cjs/Texture.d.ts +1 -1
  47. package/lib/cjs/Texture.js.map +1 -1
  48. package/lib/cjs/TxnManager.d.ts +3 -0
  49. package/lib/cjs/TxnManager.d.ts.map +1 -1
  50. package/lib/cjs/TxnManager.js +95 -13
  51. package/lib/cjs/TxnManager.js.map +1 -1
  52. package/lib/cjs/ViewDefinition.d.ts +6 -6
  53. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  54. package/lib/cjs/ViewDefinition.js.map +1 -1
  55. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  56. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  57. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  58. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  59. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  60. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  61. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  62. package/lib/cjs/domains/GenericElements.js.map +1 -1
  63. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  64. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  65. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  66. package/lib/esm/BriefcaseManager.d.ts +17 -59
  67. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  68. package/lib/esm/BriefcaseManager.js +46 -163
  69. package/lib/esm/BriefcaseManager.js.map +1 -1
  70. package/lib/esm/Category.d.ts +4 -4
  71. package/lib/esm/Category.js.map +1 -1
  72. package/lib/esm/ChangesetECAdaptor.d.ts +6 -6
  73. package/lib/esm/ChangesetECAdaptor.js +4 -4
  74. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  75. package/lib/esm/CodeSpecs.d.ts +3 -3
  76. package/lib/esm/CodeSpecs.js.map +1 -1
  77. package/lib/esm/DisplayStyle.d.ts +2 -2
  78. package/lib/esm/DisplayStyle.js.map +1 -1
  79. package/lib/esm/Element.d.ts +10 -10
  80. package/lib/esm/Element.d.ts.map +1 -1
  81. package/lib/esm/Element.js +2 -2
  82. package/lib/esm/Element.js.map +1 -1
  83. package/lib/esm/ElementAspect.d.ts +1 -1
  84. package/lib/esm/ElementAspect.js.map +1 -1
  85. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  86. package/lib/esm/ElementTreeWalker.js.map +1 -1
  87. package/lib/esm/ExternalSource.d.ts +2 -2
  88. package/lib/esm/ExternalSource.d.ts.map +1 -1
  89. package/lib/esm/ExternalSource.js.map +1 -1
  90. package/lib/esm/IModelDb.d.ts +22 -22
  91. package/lib/esm/IModelDb.js +20 -20
  92. package/lib/esm/IModelDb.js.map +1 -1
  93. package/lib/esm/IModelJsFs.d.ts +2 -0
  94. package/lib/esm/IModelJsFs.d.ts.map +1 -1
  95. package/lib/esm/IModelJsFs.js +14 -0
  96. package/lib/esm/IModelJsFs.js.map +1 -1
  97. package/lib/esm/LineStyle.d.ts +6 -6
  98. package/lib/esm/LineStyle.js.map +1 -1
  99. package/lib/esm/Material.d.ts +1 -1
  100. package/lib/esm/Material.js.map +1 -1
  101. package/lib/esm/Model.d.ts +6 -6
  102. package/lib/esm/Model.d.ts.map +1 -1
  103. package/lib/esm/Model.js.map +1 -1
  104. package/lib/esm/Relationship.d.ts +10 -10
  105. package/lib/esm/Relationship.js +6 -6
  106. package/lib/esm/Relationship.js.map +1 -1
  107. package/lib/esm/SheetIndex.d.ts +4 -4
  108. package/lib/esm/SheetIndex.d.ts.map +1 -1
  109. package/lib/esm/SheetIndex.js.map +1 -1
  110. package/lib/esm/Texture.d.ts +1 -1
  111. package/lib/esm/Texture.js.map +1 -1
  112. package/lib/esm/TxnManager.d.ts +3 -0
  113. package/lib/esm/TxnManager.d.ts.map +1 -1
  114. package/lib/esm/TxnManager.js +96 -14
  115. package/lib/esm/TxnManager.js.map +1 -1
  116. package/lib/esm/ViewDefinition.d.ts +6 -6
  117. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  118. package/lib/esm/ViewDefinition.js.map +1 -1
  119. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  120. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  121. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  122. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  123. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  124. package/lib/esm/domains/GenericElements.d.ts +2 -2
  125. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  126. package/lib/esm/domains/GenericElements.js.map +1 -1
  127. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  128. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  129. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  130. package/lib/esm/test/hubaccess/SemanticRebase.test.js +2276 -70
  131. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  132. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/Model.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 Models\r\n */\r\n\r\n// cspell:ignore elid\r\n\r\nimport { GuidString, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point2d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n AxisAlignedBox3d, ElementProps, EntityReferenceSet, GeometricModel2dProps, GeometricModel3dProps, GeometricModelProps, IModel,\r\n InformationPartitionElementProps, ModelProps, RelatedElement,\r\n} from \"@itwin/core-common\";\r\nimport { DefinitionPartition, DocumentPartition, InformationRecordPartition, PhysicalPartition, SheetIndexPartition, SpatialLocationPartition } from \"./Element\";\r\nimport { CustomHandledProperty, DeserializeEntityArgs, ECSqlRow, Entity } from \"./Entity\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { SubjectOwnsPartitionElements } from \"./NavigationRelationship\";\r\nimport { _cache, _implicitTxn, _nativeDb, _verifyChannel } from \"./internal/Symbols\";\r\n\r\n/** Argument for the `Model.onXxx` static methods\r\n * @beta\r\n */\r\nexport interface OnModelArg {\r\n /** The iModel for the Model affected. */\r\n iModel: IModelDb;\r\n}\r\n\r\n/** Argument for the `Model.onXxx` static methods that supply the properties of a Model to be inserted or updated.\r\n * @beta\r\n */\r\nexport interface OnModelPropsArg extends OnModelArg {\r\n /** The new properties of the Model affected. */\r\n props: Readonly<ModelProps>;\r\n}\r\n\r\n/** Argument for the `Model.onXxx` static methods that only supply the Id of the affected Model.\r\n * @beta\r\n */\r\nexport interface OnModelIdArg extends OnModelArg {\r\n /** The Id of the Model affected */\r\n id: Id64String;\r\n}\r\n\r\n/** Argument for the `Model.onXxxElement` static methods that supply the properties of an Element for a Model.\r\n * @beta\r\n */\r\nexport interface OnElementInModelPropsArg extends OnModelIdArg {\r\n /** The new properties of an Element for the affected Model */\r\n elementProps: Readonly<ElementProps>;\r\n}\r\n\r\n/** Per-model element deletion data used inside [[OnBulkModelEventsArg]].\r\n * @beta\r\n */\r\nexport interface OnBulkDeletedElementsArg extends OnModelIdArg {\r\n /** The Ids of all Elements that were bulk-deleted from this Model instance. */\r\n elementIds: Id64String[];\r\n}\r\n\r\n/** Argument for the `Model.onBulkModelEvents` static method.\r\n * Passed once per distinct Model ECClass, combining both deleted sub-models and\r\n * deleted-elements-by-model into a single callback.\r\n * @beta\r\n */\r\nexport interface OnBulkModelEventsArg extends OnModelArg {\r\n /** Ids of Models of this class that were deleted as sub-models. Present only if any sub-models\r\n * of this class were deleted. */\r\n deletedModelIds?: Id64String[];\r\n /** Per-model lists of element Ids deleted from instances of this Model class. Present only if\r\n * any elements were deleted from models of this class. */\r\n deletedElementsByModel?: OnBulkDeletedElementsArg[];\r\n}\r\n\r\n/** Argument for the `Model.onXxxElement` static methods that supply the Id of an Element for a Model.\r\n * @beta\r\n */\r\nexport interface OnElementInModelIdArg extends OnModelIdArg {\r\n /** The Id of the Element for the affected Model */\r\n elementId: Id64String;\r\n}\r\n\r\n/** A Model is a container for persisting a collection of related elements within an iModel.\r\n * See [[IModelDb.Models]] for how to query and manage the Models in an IModelDb.\r\n * See [Creating models]($docs/learning/backend/CreateModels.md)\r\n * @public @preview\r\n */\r\nexport class Model extends Entity {\r\n public static override get className(): string { return \"Model\"; }\r\n /** @internal */\r\n public static override get protectedOperations() { return [\"onInsert\", \"onUpdate\", \"onDelete\"]; }\r\n public readonly modeledElement: RelatedElement;\r\n public readonly name: string;\r\n public readonly parentModel?: Id64String;\r\n public readonly jsonProperties: { [key: string]: any };\r\n public isPrivate: boolean;\r\n public isTemplate: boolean;\r\n\r\n protected constructor(props: ModelProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.modeledElement = new RelatedElement(props.modeledElement);\r\n this.name = props.name ? props.name : \"\"; // NB this isn't really a property of Model (it's the code.value of the modeled element), but it comes in ModelProps because it's often needed\r\n this.parentModel = props.parentModel;\r\n this.isPrivate = JsonUtils.asBool(props.isPrivate);\r\n this.isTemplate = JsonUtils.asBool(props.isTemplate);\r\n this.jsonProperties = { ...props.jsonProperties }; // make sure we have our own copy\r\n }\r\n\r\n /**\r\n * Model custom HandledProps includes 'isPrivate', 'isTemplate', and 'lastMod'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n protected static override readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"isPrivate\", source: \"Class\" },\r\n { propertyName: \"isTemplate\", source: \"Class\" },\r\n { propertyName: \"lastMod\", source: \"Class\" },\r\n ];\r\n\r\n /**\r\n * Model deserializes 'isPrivate', and 'isTemplate', and sets the proper parentModel.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override deserialize(props: DeserializeEntityArgs): ModelProps {\r\n const instance = props.row;\r\n const modelProps = super.deserialize(props) as ModelProps;\r\n const modeledElementProps = props.iModel.elements.tryGetElementProps(instance.modeledElement.id);\r\n if (modeledElementProps) {\r\n // ModeledElement may be undefined in the case of root Element\r\n modelProps.name = JsonUtils.asString(modeledElementProps.code.value);\r\n if (instance.parentModel !== undefined)\r\n modelProps.parentModel = instance.parentModel.id;\r\n else\r\n modelProps.parentModel = modeledElementProps.model;\r\n }\r\n if (instance.isPrivate === true)\r\n modelProps.isPrivate = true;\r\n if (instance.isTemplate === true)\r\n modelProps.isTemplate = true;\r\n return modelProps;\r\n }\r\n\r\n /**\r\n * Model serializes 'isPrivate', and 'isTemplate'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override serialize(props: ModelProps, _iModel: IModelDb): ECSqlRow {\r\n const inst = super.serialize(props, _iModel);\r\n inst.isPrivate = props.isPrivate ?? false;\r\n inst.isTemplate = props.isTemplate ?? false;\r\n return inst;\r\n }\r\n\r\n public override toJSON(): ModelProps {\r\n const val = super.toJSON() as ModelProps;\r\n val.name = this.name; // for cloning\r\n return val;\r\n }\r\n\r\n /** Called before a new Model is inserted.\r\n * @note throw an exception to disallow the insert\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be inserted\r\n * @beta\r\n */\r\n protected static onInsert(arg: OnModelPropsArg): void {\r\n const { props, iModel } = arg;\r\n iModel.channels[_verifyChannel](props.modeledElement.id);\r\n if (props.parentModel) // inserting requires shared lock on parent, if present\r\n iModel.locks.checkSharedLock(props.parentModel, \"parent model\", \"insert\");\r\n }\r\n\r\n /** Called after a new Model is inserted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was inserted\r\n * @beta\r\n */\r\n protected static onInserted(_arg: OnModelIdArg): void {\r\n // we don't need to tell LockControl about models being created - their ModeledElement does that\r\n }\r\n\r\n /** Called before a Model is updated.\r\n * @note throw an exception to disallow the update\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be updated\r\n * @beta\r\n */\r\n protected static onUpdate(arg: OnModelPropsArg): void {\r\n const id = arg.props.id!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n arg.iModel.channels[_verifyChannel](id);\r\n arg.iModel.locks.checkExclusiveLock(id, \"model\", \"update\");\r\n }\r\n\r\n /** Called after a Model is updated.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was updated.\r\n * @beta\r\n */\r\n protected static onUpdated(arg: OnModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called before a Model is deleted.\r\n * @note throw an exception to disallow the delete\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be deleted\r\n * @beta\r\n */\r\n protected static onDelete(arg: OnModelIdArg): void {\r\n arg.iModel.channels[_verifyChannel](arg.id);\r\n arg.iModel.locks.checkExclusiveLock(arg.id, \"model\", \"delete\");\r\n }\r\n\r\n /** Called after a Model was deleted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was deleted\r\n * @beta\r\n */\r\n protected static onDeleted(arg: OnModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n arg.iModel.elements[_cache].deleteWithModel(arg.id);\r\n }\r\n\r\n /** Called once per distinct Model ECClass after a bulk element delete operation, combining\r\n * both sub-model deletions and element-deletions-by-model into a single callback.\r\n *\r\n * `arg.deletedModelIds` — present when models of this class were deleted as sub-model roots.\r\n * The default implementation calls [[onDeleted]] for each.\r\n *\r\n * `arg.deletedElementsByModel` — present when elements were deleted from models of this class.\r\n * The default implementation calls [[onDeleteElement]] and [[onDeletedElement]] for each element.\r\n *\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the Model class dispatched on.\r\n * @beta\r\n */\r\n protected static onBulkModelEvents(arg: OnBulkModelEventsArg): void {\r\n if (arg.deletedModelIds !== undefined)\r\n for (const id of arg.deletedModelIds)\r\n this.onDeleted({ iModel: arg.iModel, id });\r\n\r\n if (arg.deletedElementsByModel !== undefined)\r\n for (const entry of arg.deletedElementsByModel)\r\n for (const elementId of entry.elementIds) {\r\n this.onDeleteElement({ iModel: arg.iModel, id: entry.id, elementId });\r\n this.onDeletedElement({ iModel: arg.iModel, id: entry.id, elementId });\r\n }\r\n }\r\n\r\n /** Called before a prospective Element is to be inserted into an instance of a Model of this class.\r\n * @note throw an exception to disallow the insert\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to hold the element\r\n * @beta\r\n */\r\n protected static onInsertElement(_arg: OnElementInModelPropsArg): void { }\r\n\r\n /** Called after an Element has been inserted into an instance of a Model of this class.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onInsertedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called when an Element in an instance of a Model of this class is about to be updated.\r\n * @note throw an exception to disallow the update\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onUpdateElement(_arg: OnElementInModelPropsArg): void { }\r\n\r\n /** Called after an Element in an instance of a Model of this class has been updated.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onUpdatedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called when an Element in an instance of a Model of this class is about to be deleted.\r\n * @note throw an exception to disallow the delete\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onDeleteElement(_arg: OnElementInModelIdArg): void { }\r\n\r\n /** Called after an Element in an instance of a Model of this class has been deleted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that held the element\r\n * @beta\r\n */\r\n protected static onDeletedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n private getAllUserProperties(): any {\r\n if (!this.jsonProperties.UserProps)\r\n this.jsonProperties.UserProps = new Object();\r\n\r\n return this.jsonProperties.UserProps;\r\n }\r\n\r\n /** Get a set of JSON user properties by namespace */\r\n public getUserProperties(namespace: string) { return this.getAllUserProperties()[namespace]; }\r\n\r\n /** Change a set of user JSON properties of this Element by namespace. */\r\n public setUserProperties(nameSpace: string, value: any) { this.getAllUserProperties()[nameSpace] = value; }\r\n\r\n /** Remove a set of JSON user properties, specified by namespace, from this Element */\r\n public removeUserProperties(nameSpace: string) { delete this.getAllUserProperties()[nameSpace]; }\r\n\r\n public getJsonProperty(name: string): any { return this.jsonProperties[name]; }\r\n public setJsonProperty(name: string, value: any) { this.jsonProperties[name] = value; }\r\n\r\n /**\r\n * Insert this Model in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public insert(txn: EditTxn): Id64String;\r\n /**\r\n * Insert this Model in the iModel.\r\n * @deprecated Use Model.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public insert(): Id64String;\r\n public insert(txn?: EditTxn) { return this.id = (txn ?? this.iModel[_implicitTxn]).insertModel(this.toJSON()); }\r\n\r\n /**\r\n * Update this Model in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public update(txn: EditTxn): void;\r\n /**\r\n * Update this Model in the iModel.\r\n * @deprecated Use Model.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public update(): void;\r\n public update(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).updateModel(this.toJSON()); }\r\n\r\n /**\r\n * Delete this Model from the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public delete(txn: EditTxn): void;\r\n /**\r\n * Delete this Model from the iModel.\r\n * @deprecated Use Model.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public delete(): void;\r\n public delete(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).deleteModel(this.id); }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n if (this.parentModel)\r\n referenceIds.addModel(this.parentModel);\r\n referenceIds.addElement(this.modeledElement.id);\r\n }\r\n}\r\n\r\n/** A container for persisting geometric elements.\r\n * @public @preview\r\n */\r\nexport class GeometricModel extends Model {\r\n public geometryGuid?: GuidString;\r\n\r\n public static override get className(): string { return \"GeometricModel\"; }\r\n\r\n protected constructor(props: GeometricModelProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.geometryGuid = props.geometryGuid;\r\n }\r\n\r\n /** Query for the union of the extents of the elements contained by this model.\r\n * @note This function blocks the JavaScript event loop. Consider using [[queryRange]] instead.\r\n */\r\n public queryExtents(): AxisAlignedBox3d {\r\n const extents = this.iModel[_nativeDb].queryModelExtents({ id: this.id }).modelExtents;\r\n return Range3d.fromJSON(extents);\r\n }\r\n\r\n /** Query for the union of the extents of all elements contained within this model. */\r\n public async queryRange(): Promise<AxisAlignedBox3d> {\r\n return this.iModel.models.queryRange(this.id);\r\n }\r\n}\r\n\r\n/** A container for persisting 3d geometric elements.\r\n * @public @preview\r\n */\r\nexport abstract class GeometricModel3d extends GeometricModel {\r\n /** If true, then the elements in this GeometricModel3d are expected to be in an XY plane.\r\n * @note The associated ECProperty was added to the BisCore schema in version 1.0.8\r\n */\r\n public readonly isPlanProjection: boolean;\r\n /** If true, then the elements in this GeometricModel3d are not in real-world coordinates and will not be in the spatial index.\r\n * @note The associated ECProperty was added to the BisCore schema in version 1.0.8\r\n */\r\n public readonly isNotSpatiallyLocated: boolean;\r\n /** If true, then the elements in this GeometricModel3d are in real-world coordinates and will be in the spatial index. */\r\n public get isSpatiallyLocated(): boolean { return !this.isNotSpatiallyLocated; }\r\n\r\n public static override get className(): string { return \"GeometricModel3d\"; }\r\n\r\n protected constructor(props: GeometricModel3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.isNotSpatiallyLocated = JsonUtils.asBool(props.isNotSpatiallyLocated);\r\n this.isPlanProjection = JsonUtils.asBool(props.isPlanProjection);\r\n }\r\n\r\n /**\r\n * GeometricModel3d custom HandledProps includes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n protected static override readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"isPlanProjection\", source: \"Class\" },\r\n { propertyName: \"isNotSpatiallyLocated\", source: \"Class\" },\r\n ];\r\n\r\n /**\r\n * GeometricModel3d deserializes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override deserialize(props: DeserializeEntityArgs): GeometricModel3dProps {\r\n const modelProps = super.deserialize(props) as GeometricModel3dProps;\r\n const instance = props.row;\r\n if (instance.isNotSpatiallyLocated === true || instance.isTemplate === true)\r\n modelProps.isNotSpatiallyLocated = true;\r\n if (instance.isPlanProjection === true)\r\n modelProps.isPlanProjection = true;\r\n return modelProps;\r\n }\r\n\r\n /**\r\n * GeometricModel3d serializes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override serialize(props: GeometricModel3dProps, _iModel: IModelDb): ECSqlRow {\r\n const inst = super.serialize(props, _iModel);\r\n inst.isNotSpatiallyLocated = props.isNotSpatiallyLocated ?? false;\r\n inst.isPlanProjection = props.isPlanProjection ?? false;\r\n return inst;\r\n }\r\n\r\n public override toJSON(): GeometricModel3dProps {\r\n const val = super.toJSON() as GeometricModel3dProps;\r\n if (this.isNotSpatiallyLocated)\r\n val.isNotSpatiallyLocated = true;\r\n\r\n if (this.isPlanProjection)\r\n val.isPlanProjection = true;\r\n\r\n return val;\r\n }\r\n}\r\n\r\n/** A container for persisting 2d geometric elements.\r\n * @public @preview\r\n */\r\nexport abstract class GeometricModel2d extends GeometricModel {\r\n /** The actual coordinates of (0,0) in modeling coordinates. An offset applied to all modeling coordinates. */\r\n public globalOrigin?: Point2d;\r\n public static override get className(): string { return \"GeometricModel2d\"; }\r\n\r\n protected constructor(props: GeometricModel2dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.globalOrigin = props.globalOrigin ? Point2d.fromJSON(props.globalOrigin) : undefined;\r\n }\r\n\r\n public override toJSON(): GeometricModel2dProps {\r\n const val = super.toJSON() as GeometricModel2dProps;\r\n if (undefined !== this.globalOrigin)\r\n val.globalOrigin = Point2d.fromJSON(this.globalOrigin);\r\n\r\n return val;\r\n }\r\n}\r\n\r\n/** A container for persisting 2d graphical elements.\r\n * @public @preview\r\n */\r\nexport abstract class GraphicalModel2d extends GeometricModel2d {\r\n public static override get className(): string { return \"GraphicalModel2d\"; }\r\n}\r\n\r\n/** A container for persisting GraphicalElement3d instances.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.8\r\n * @see [[GraphicalPartition3d]]\r\n * @public @preview\r\n */\r\nexport abstract class GraphicalModel3d extends GeometricModel3d {\r\n public static override get className(): string { return \"GraphicalModel3d\"; }\r\n}\r\n\r\n/** A container for persisting 3d geometric elements that are spatially located.\r\n * @public @preview\r\n */\r\nexport abstract class SpatialModel extends GeometricModel3d {\r\n public static override get className(): string { return \"SpatialModel\"; }\r\n}\r\n\r\n/** A container for persisting physical elements that model physical space.\r\n * @see [[PhysicalPartition]]\r\n * @public @preview\r\n */\r\nexport class PhysicalModel extends SpatialModel {\r\n public static override get className(): string { return \"PhysicalModel\"; }\r\n /** Insert a PhysicalPartition and a PhysicalModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The PhysicalPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the PhysicalPartition that the new PhysicalModel will sub-model.\r\n * @param isPlanProjection Optional value (default is false) that indicates if the contents of this model are expected to be in an XY plane.\r\n * @returns The Id of the newly inserted PhysicalPartition and PhysicalModel (same value).\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n /** @deprecated Use PhysicalModel.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const iModelDb = txn.iModel;\r\n const partitionProps: InformationPartitionElementProps = {\r\n classFullName: PhysicalPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: PhysicalPartition.createCode(iModelDb, parentSubjectId, name),\r\n };\r\n const partitionId = txn.insertElement(partitionProps);\r\n const modelProps: GeometricModel3dProps = {\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n isPlanProjection,\r\n };\r\n return txn.insertModel(modelProps);\r\n }\r\n}\r\n\r\n/** A container for persisting spatial location elements.\r\n * @see [[SpatialLocationPartition]]\r\n * @public @preview\r\n */\r\nexport class SpatialLocationModel extends SpatialModel {\r\n public static override get className(): string { return \"SpatialLocationModel\"; }\r\n /** Insert a SpatialLocationPartition and a SpatialLocationModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The SpatialLocationPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the SpatialLocationPartition that the new SpatialLocationModel will sub-model.\r\n * @param isPlanProjection Optional value (default is false) that indicates if the contents of this model are expected to be in an XY plane.\r\n * @returns The Id of the newly inserted SpatialLocationPartition and SpatialLocationModel (same value).\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n /** @deprecated Use SpatialLocationModel.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const iModelDb = txn.iModel;\r\n const partitionProps: InformationPartitionElementProps = {\r\n classFullName: SpatialLocationPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: SpatialLocationPartition.createCode(iModelDb, parentSubjectId, name),\r\n };\r\n const partitionId = txn.insertElement(partitionProps);\r\n const modelProps: GeometricModel3dProps = {\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n isPlanProjection,\r\n };\r\n return txn.insertModel(modelProps);\r\n }\r\n}\r\n\r\n/** A 2d model that holds [[DrawingGraphic]]s. DrawingModels may be dimensional or non-dimensional.\r\n * @public @preview\r\n */\r\nexport class DrawingModel extends GraphicalModel2d {\r\n public static override get className(): string { return \"DrawingModel\"; }\r\n}\r\n\r\n/** A container for persisting section [[DrawingGraphic]]s.\r\n * @public @preview\r\n */\r\nexport class SectionDrawingModel extends DrawingModel {\r\n public static override get className(): string { return \"SectionDrawingModel\"; }\r\n}\r\n\r\n/** A container for persisting [[ViewAttachment]]s and [[DrawingGraphic]]s.\r\n * A SheetModel is a digital representation of a *sheet of paper*. SheetModels are 2d models in bounded paper coordinates.\r\n * SheetModels may contain annotation Elements as well as references to 2d or 3d Views.\r\n * @public @preview\r\n */\r\nexport class SheetModel extends GraphicalModel2d {\r\n public static override get className(): string { return \"SheetModel\"; }\r\n}\r\n\r\n/** A container for persisting role elements.\r\n * @public @preview\r\n */\r\nexport class RoleModel extends Model {\r\n public static override get className(): string { return \"RoleModel\"; }\r\n}\r\n\r\n/** A container for persisting information elements.\r\n * @public @preview\r\n */\r\nexport abstract class InformationModel extends Model {\r\n public static override get className(): string { return \"InformationModel\"; }\r\n}\r\n\r\n/** A container for persisting group information elements.\r\n * @see [[GroupInformationPartition]]\r\n * @public @preview\r\n */\r\nexport abstract class GroupInformationModel extends InformationModel {\r\n public static override get className(): string { return \"GroupInformationModel\"; }\r\n}\r\n\r\n/** A sub-model of a [[SheetIndexPartition]] serving as a container for persisting [[SheetIndexEntry]] and [[SheetIndex]] elements.\r\n * @beta\r\n */\r\nexport class SheetIndexModel extends InformationModel {\r\n public static override get className(): string { return \"SheetIndexModel\"; }\r\n\r\n /** Insert a [[SheetIndexPartition]] and a SheetIndexModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The SheetIndexPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the SheetIndexPartition that the new SheetIndexModel will sub-model.\r\n * @returns The Id of the newly inserted SheetIndexModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n /** @deprecated Use SheetIndexModel.insert(txn, ...) instead. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: SheetIndexPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: SheetIndexPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting Information Record Elements\r\n * @see [[InformationRecordPartition]]\r\n * @public @preview\r\n */\r\nexport class InformationRecordModel extends InformationModel {\r\n public static override get className(): string { return \"InformationRecordModel\"; }\r\n\r\n /** Insert an InformationRecordPartition and an InformationRecordModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The InformationRecordPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the InformationRecordPartition that the new InformationRecordModel will sub-model.\r\n * @returns The Id of the newly inserted InformationRecordModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: InformationRecordPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: InformationRecordPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting definition elements.\r\n * @see [[DefinitionPartition]]\r\n * @public @preview\r\n */\r\nexport class DefinitionModel extends InformationModel {\r\n public static override get className(): string { return \"DefinitionModel\"; }\r\n\r\n /** Insert a DefinitionPartition and a DefinitionModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The DefinitionPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the DefinitionPartition that the new DefinitionModel will sub-model.\r\n * @returns The Id of the newly inserted DefinitionModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: DefinitionPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: DefinitionPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** The singleton container of repository-related information elements.\r\n * @public @preview\r\n */\r\nexport class RepositoryModel extends DefinitionModel {\r\n public static override get className(): string { return \"RepositoryModel\"; }\r\n}\r\n\r\n/** Contains a list of document elements.\r\n * @see [[DocumentPartition]]\r\n * @public @preview\r\n */\r\nexport class DocumentListModel extends InformationModel {\r\n public static override get className(): string { return \"DocumentListModel\"; }\r\n\r\n /** Insert a [[DocumentPartition]] and a DocumentListModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The DocumentPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the DocumentPartition that the new DocumentListModel will sub-model.\r\n * @returns The Id of the newly inserted DocumentPartition and DocumentListModel (same value)\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: DocumentPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: DocumentPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting link elements.\r\n * @see [[LinkPartition]]\r\n * @public @preview\r\n */\r\nexport class LinkModel extends InformationModel {\r\n public static override get className(): string { return \"LinkModel\"; }\r\n}\r\n\r\n/** The singleton container for repository-specific definition elements.\r\n * @public @preview\r\n */\r\nexport class DictionaryModel extends DefinitionModel {\r\n public static override get className(): string { return \"DictionaryModel\"; }\r\n}\r\n\r\n/** Obtains and displays multi-resolution tiled raster organized according to the WebMercator tiling system.\r\n * @public @preview\r\n */\r\nexport class WebMercatorModel extends SpatialModel {\r\n public static override get className(): string { return \"WebMercatorModel\"; }\r\n}\r\n"]}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/Model.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,qBAAqB;AAErB,sDAAwE;AACxE,wDAAwD;AACxD,oDAG4B;AAC5B,uCAAiK;AACjK,qCAA0F;AAC1F,uCAAoC;AAEpC,qEAAwE;AACxE,gDAAqF;AAgErF;;;;GAIG;AACH,MAAa,KAAM,SAAQ,eAAM;IACxB,MAAM,KAAc,SAAS,KAAa,OAAO,OAAO,CAAC,CAAC,CAAC;IAClE,gBAAgB;IACT,MAAM,KAAc,mBAAmB,KAAK,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACjF,cAAc,CAAiB;IAC/B,IAAI,CAAS;IACb,WAAW,CAAc;IACzB,cAAc,CAAyB;IAChD,SAAS,CAAU;IACnB,UAAU,CAAU;IAE3B,YAAsB,KAAiB,EAAE,MAAgB;QACvD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,4BAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,8IAA8I;QACxL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,wBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,wBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;IACtF,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAmB,mBAAmB,GAA4B;QAChF,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAC9C,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE;QAC/C,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;KAC7C,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAU,WAAW,CAAC,KAA4B;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAe,CAAC;QAC1D,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,mBAAmB,EAAE,CAAC;YACxB,8DAA8D;YAC9D,UAAU,CAAC,IAAI,GAAG,wBAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;gBACpC,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;;gBAEjD,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC;QACvD,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI;YAC7B,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;QAC9B,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;YAC9B,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAU,SAAS,CAAC,KAAiB,EAAE,OAAiB;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,MAAM;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAgB,CAAC;QACzC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc;QACpC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,QAAQ,CAAC,GAAoB;QAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,wBAAc,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,WAAW,EAAI,uDAAuD;YAC9E,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAC,UAAU,CAAC,IAAkB;QAC5C,gGAAgG;IAClG,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,QAAQ,CAAC,GAAoB;QAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAG,CAAC,CAAC,+DAA+D;QACzF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAc,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAC,SAAS,CAAC,GAAiB;QAC1C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,QAAQ,CAAC,GAAiB;QACzC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAC,SAAS,CAAC,GAAiB;QAC1C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,MAAM,CAAC,iBAAiB,CAAC,GAAyB;QAC1D,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS;YACnC,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,eAAe;gBAClC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/C,IAAI,GAAG,CAAC,sBAAsB,KAAK,SAAS;YAC1C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,sBAAsB;gBAC5C,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACzC,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBACzE,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,eAAe,CAAC,IAA8B,IAAU,CAAC;IAE1E;;;;OAIG;IACO,MAAM,CAAC,iBAAiB,CAAC,GAA0B;QAC3D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,eAAe,CAAC,IAA8B,IAAU,CAAC;IAE1E;;;;OAIG;IACO,MAAM,CAAC,gBAAgB,CAAC,GAA0B;QAC1D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAC,eAAe,CAAC,IAA2B,IAAU,CAAC;IAEvE;;;;OAIG;IACO,MAAM,CAAC,gBAAgB,CAAC,GAA0B;QAC1D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS;YAChC,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;QAE/C,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,qDAAqD;IAC9C,iBAAiB,CAAC,SAAiB,IAAI,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE9F,yEAAyE;IAClE,iBAAiB,CAAC,SAAiB,EAAE,KAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAE3G,sFAAsF;IAC/E,oBAAoB,CAAC,SAAiB,IAAI,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE1F,eAAe,CAAC,IAAY,IAAS,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,eAAe,CAAC,IAAY,EAAE,KAAU,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAYhF,MAAM,CAAC,GAAa,IAAI,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAYzG,MAAM,CAAC,GAAa,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAYxF,MAAM,CAAC,GAAa,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtE,mBAAmB,CAAC,YAAgC;QACrE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,WAAW;YAClB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1C,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;;AAnRH,sBAoRC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,KAAK;IAChC,YAAY,CAAc;IAE1B,MAAM,KAAc,SAAS,KAAa,OAAO,gBAAgB,CAAC,CAAC,CAAC;IAE3E,YAAsB,KAA0B,EAAE,MAAgB;QAChE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAS,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC;QACvF,OAAO,uBAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,sFAAsF;IAC/E,KAAK,CAAC,UAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AAtBD,wCAsBC;AAED;;GAEG;AACH,MAAsB,gBAAiB,SAAQ,cAAc;IAC3D;;OAEG;IACa,gBAAgB,CAAU;IAC1C;;OAEG;IACa,qBAAqB,CAAU;IAC/C,0HAA0H;IAC1H,IAAW,kBAAkB,KAAc,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEzE,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAE7E,YAAsB,KAA4B,EAAE,MAAgB;QAClE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,qBAAqB,GAAG,wBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3E,IAAI,CAAC,gBAAgB,GAAG,wBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAmB,mBAAmB,GAA4B;QAChF,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE;QACrD,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,EAAE,OAAO,EAAE;KAC3D,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAU,WAAW,CAAC,KAA4B;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAA0B,CAAC;QACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC3B,IAAI,QAAQ,CAAC,qBAAqB,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;YACzE,UAAU,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAC1C,IAAI,QAAQ,CAAC,gBAAgB,KAAK,IAAI;YACpC,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACrC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAU,SAAS,CAAC,KAA4B,EAAE,OAAiB;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,MAAM;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAA2B,CAAC;QACpD,IAAI,IAAI,CAAC,qBAAqB;YAC5B,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAEnC,IAAI,IAAI,CAAC,gBAAgB;YACvB,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE9B,OAAO,GAAG,CAAC;IACb,CAAC;;AAlEH,4CAmEC;AAED;;GAEG;AACH,MAAsB,gBAAiB,SAAQ,cAAc;IAC3D,8GAA8G;IACvG,YAAY,CAAW;IACvB,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAE7E,YAAsB,KAA4B,EAAE,MAAgB;QAClE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,uBAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,CAAC;IAEe,MAAM;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAA2B,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;YACjC,GAAG,CAAC,YAAY,GAAG,uBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAjBD,4CAiBC;AAED;;GAEG;AACH,MAAsB,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC9E;AAFD,4CAEC;AAED;;;;GAIG;AACH,MAAsB,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC9E;AAFD,4CAEC;AAED;;GAEG;AACH,MAAsB,YAAa,SAAQ,gBAAgB;IAClD,MAAM,KAAc,SAAS,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;CAC1E;AAFD,oCAEC;AAED;;;GAGG;AACH,MAAa,aAAc,SAAQ,YAAY;IACtC,MAAM,KAAc,SAAS,KAAa,OAAO,eAAe,CAAC,CAAC,CAAC;IAanE,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY,EAAE,gBAA0B;QACrH,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,MAAM,cAAc,GAAqC;YACvD,aAAa,EAAE,2BAAiB,CAAC,aAAa;YAC9C,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,2BAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC;SACpE,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,UAAU,GAA0B;YACxC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;YACnC,gBAAgB;SACjB,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AA/BD,sCA+BC;AAED;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,YAAY;IAC7C,MAAM,KAAc,SAAS,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;IAa1E,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY,EAAE,gBAA0B;QACrH,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,MAAM,cAAc,GAAqC;YACvD,aAAa,EAAE,kCAAwB,CAAC,aAAa;YACrD,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,kCAAwB,CAAC,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC;SAC3E,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,UAAU,GAA0B;YACxC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;YACnC,gBAAgB;SACjB,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AA/BD,oDA+BC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,gBAAgB;IACzC,MAAM,KAAc,SAAS,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;CAC1E;AAFD,oCAEC;AAED;;GAEG;AACH,MAAa,mBAAoB,SAAQ,YAAY;IAC5C,MAAM,KAAc,SAAS,KAAa,OAAO,qBAAqB,CAAC,CAAC,CAAC;CACjF;AAFD,kDAEC;AAED;;;;GAIG;AACH,MAAa,UAAW,SAAQ,gBAAgB;IACvC,MAAM,KAAc,SAAS,KAAa,OAAO,YAAY,CAAC,CAAC,CAAC;CACxE;AAFD,gCAEC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,KAAK;IAC3B,MAAM,KAAc,SAAS,KAAa,OAAO,WAAW,CAAC,CAAC,CAAC;CACvE;AAFD,8BAEC;AAED;;GAEG;AACH,MAAsB,gBAAiB,SAAQ,KAAK;IAC3C,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC9E;AAFD,4CAEC;AAED;;;GAGG;AACH,MAAsB,qBAAsB,SAAQ,gBAAgB;IAC3D,MAAM,KAAc,SAAS,KAAa,OAAO,uBAAuB,CAAC,CAAC,CAAC;CACnF;AAFD,sDAEC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,gBAAgB;IAC5C,MAAM,KAAc,SAAS,KAAa,OAAO,iBAAiB,CAAC,CAAC,CAAC;IAYrE,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY;QACzF,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;YACpC,aAAa,EAAE,6BAAmB,CAAC,aAAa;YAChD,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,6BAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC;SACxE,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,WAAW,CAAC;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,0CA0BC;AAED;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,gBAAgB;IACnD,MAAM,KAAc,SAAS,KAAa,OAAO,wBAAwB,CAAC,CAAC,CAAC;IAY5E,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY;QACzF,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;YACpC,aAAa,EAAE,oCAA0B,CAAC,aAAa;YACvD,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,oCAA0B,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC;SAC/E,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,WAAW,CAAC;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,wDA0BC;AAED;;;GAGG;AACH,MAAa,eAAgB,SAAQ,gBAAgB;IAC5C,MAAM,KAAc,SAAS,KAAa,OAAO,iBAAiB,CAAC,CAAC,CAAC;IAYrE,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY;QACzF,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;YACpC,aAAa,EAAE,6BAAmB,CAAC,aAAa;YAChD,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,6BAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC;SACxE,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,WAAW,CAAC;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,0CA0BC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,eAAe;IAC3C,MAAM,KAAc,SAAS,KAAa,OAAO,iBAAiB,CAAC,CAAC,CAAC;CAC7E;AAFD,0CAEC;AAED;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,gBAAgB;IAC9C,MAAM,KAAc,SAAS,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAYvE,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,eAA2B,EAAE,IAAY;QACzF,MAAM,GAAG,GAAG,OAAO,YAAY,iBAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;YACpC,aAAa,EAAE,2BAAiB,CAAC,aAAa;YAC9C,KAAK,EAAE,oBAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,IAAI,qDAA4B,CAAC,eAAe,CAAC;YACzD,IAAI,EAAE,2BAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC;SACtE,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,WAAW,CAAC;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,8CA0BC;AAED;;;GAGG;AACH,MAAa,SAAU,SAAQ,gBAAgB;IACtC,MAAM,KAAc,SAAS,KAAa,OAAO,WAAW,CAAC,CAAC,CAAC;CACvE;AAFD,8BAEC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,eAAe;IAC3C,MAAM,KAAc,SAAS,KAAa,OAAO,iBAAiB,CAAC,CAAC,CAAC;CAC7E;AAFD,0CAEC;AAED;;GAEG;AACH,MAAa,gBAAiB,SAAQ,YAAY;IACzC,MAAM,KAAc,SAAS,KAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC9E;AAFD,4CAEC","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 Models\r\n */\r\n\r\n// cspell:ignore elid\r\n\r\nimport { GuidString, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point2d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n AxisAlignedBox3d, ElementProps, EntityReferenceSet, GeometricModel2dProps, GeometricModel3dProps, GeometricModelProps, IModel,\r\n InformationPartitionElementProps, ModelProps, RelatedElement,\r\n} from \"@itwin/core-common\";\r\nimport { DefinitionPartition, DocumentPartition, InformationRecordPartition, PhysicalPartition, SheetIndexPartition, SpatialLocationPartition } from \"./Element\";\r\nimport { CustomHandledProperty, DeserializeEntityArgs, ECSqlRow, Entity } from \"./Entity\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { SubjectOwnsPartitionElements } from \"./NavigationRelationship\";\r\nimport { _cache, _implicitTxn, _nativeDb, _verifyChannel } from \"./internal/Symbols\";\r\n\r\n/** Argument for the `Model.onXxx` static methods\r\n * @beta\r\n */\r\nexport interface OnModelArg {\r\n /** The iModel for the Model affected. */\r\n iModel: IModelDb;\r\n}\r\n\r\n/** Argument for the `Model.onXxx` static methods that supply the properties of a Model to be inserted or updated.\r\n * @beta\r\n */\r\nexport interface OnModelPropsArg extends OnModelArg {\r\n /** The new properties of the Model affected. */\r\n props: Readonly<ModelProps>;\r\n}\r\n\r\n/** Argument for the `Model.onXxx` static methods that only supply the Id of the affected Model.\r\n * @beta\r\n */\r\nexport interface OnModelIdArg extends OnModelArg {\r\n /** The Id of the Model affected */\r\n id: Id64String;\r\n}\r\n\r\n/** Argument for the `Model.onXxxElement` static methods that supply the properties of an Element for a Model.\r\n * @beta\r\n */\r\nexport interface OnElementInModelPropsArg extends OnModelIdArg {\r\n /** The new properties of an Element for the affected Model */\r\n elementProps: Readonly<ElementProps>;\r\n}\r\n\r\n/** Per-model element deletion data used inside [[OnBulkModelEventsArg]].\r\n * @beta\r\n */\r\nexport interface OnBulkDeletedElementsArg extends OnModelIdArg {\r\n /** The Ids of all Elements that were bulk-deleted from this Model instance. */\r\n elementIds: Id64String[];\r\n}\r\n\r\n/** Argument for the `Model.onBulkModelEvents` static method.\r\n * Passed once per distinct Model ECClass, combining both deleted sub-models and\r\n * deleted-elements-by-model into a single callback.\r\n * @beta\r\n */\r\nexport interface OnBulkModelEventsArg extends OnModelArg {\r\n /** Ids of Models of this class that were deleted as sub-models. Present only if any sub-models\r\n * of this class were deleted. */\r\n deletedModelIds?: Id64String[];\r\n /** Per-model lists of element Ids deleted from instances of this Model class. Present only if\r\n * any elements were deleted from models of this class. */\r\n deletedElementsByModel?: OnBulkDeletedElementsArg[];\r\n}\r\n\r\n/** Argument for the `Model.onXxxElement` static methods that supply the Id of an Element for a Model.\r\n * @beta\r\n */\r\nexport interface OnElementInModelIdArg extends OnModelIdArg {\r\n /** The Id of the Element for the affected Model */\r\n elementId: Id64String;\r\n}\r\n\r\n/** A Model is a container for persisting a collection of related elements within an iModel.\r\n * See [[IModelDb.Models]] for how to query and manage the Models in an IModelDb.\r\n * See [Creating models]($docs/learning/backend/CreateModels.md)\r\n * @public @preview\r\n */\r\nexport class Model extends Entity {\r\n public static override get className(): string { return \"Model\"; }\r\n /** @internal */\r\n public static override get protectedOperations() { return [\"onInsert\", \"onUpdate\", \"onDelete\"]; }\r\n public readonly modeledElement: RelatedElement;\r\n public readonly name: string;\r\n public readonly parentModel?: Id64String;\r\n public readonly jsonProperties: { [key: string]: any };\r\n public isPrivate: boolean;\r\n public isTemplate: boolean;\r\n\r\n protected constructor(props: ModelProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.modeledElement = new RelatedElement(props.modeledElement);\r\n this.name = props.name ? props.name : \"\"; // NB this isn't really a property of Model (it's the code.value of the modeled element), but it comes in ModelProps because it's often needed\r\n this.parentModel = props.parentModel;\r\n this.isPrivate = JsonUtils.asBool(props.isPrivate);\r\n this.isTemplate = JsonUtils.asBool(props.isTemplate);\r\n this.jsonProperties = { ...props.jsonProperties }; // make sure we have our own copy\r\n }\r\n\r\n /**\r\n * Model custom HandledProps includes 'isPrivate', 'isTemplate', and 'lastMod'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n protected static override readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"isPrivate\", source: \"Class\" },\r\n { propertyName: \"isTemplate\", source: \"Class\" },\r\n { propertyName: \"lastMod\", source: \"Class\" },\r\n ];\r\n\r\n /**\r\n * Model deserializes 'isPrivate', and 'isTemplate', and sets the proper parentModel.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override deserialize(props: DeserializeEntityArgs): ModelProps {\r\n const instance = props.row;\r\n const modelProps = super.deserialize(props) as ModelProps;\r\n const modeledElementProps = props.iModel.elements.tryGetElementProps(instance.modeledElement.id);\r\n if (modeledElementProps) {\r\n // ModeledElement may be undefined in the case of root Element\r\n modelProps.name = JsonUtils.asString(modeledElementProps.code.value);\r\n if (instance.parentModel !== undefined)\r\n modelProps.parentModel = instance.parentModel.id;\r\n else\r\n modelProps.parentModel = modeledElementProps.model;\r\n }\r\n if (instance.isPrivate === true)\r\n modelProps.isPrivate = true;\r\n if (instance.isTemplate === true)\r\n modelProps.isTemplate = true;\r\n return modelProps;\r\n }\r\n\r\n /**\r\n * Model serializes 'isPrivate', and 'isTemplate'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override serialize(props: ModelProps, _iModel: IModelDb): ECSqlRow {\r\n const inst = super.serialize(props, _iModel);\r\n inst.isPrivate = props.isPrivate ?? false;\r\n inst.isTemplate = props.isTemplate ?? false;\r\n return inst;\r\n }\r\n\r\n public override toJSON(): ModelProps {\r\n const val = super.toJSON() as ModelProps;\r\n val.name = this.name; // for cloning\r\n return val;\r\n }\r\n\r\n /** Called before a new Model is inserted.\r\n * @note throw an exception to disallow the insert\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be inserted\r\n * @beta\r\n */\r\n protected static onInsert(arg: OnModelPropsArg): void {\r\n const { props, iModel } = arg;\r\n iModel.channels[_verifyChannel](props.modeledElement.id);\r\n if (props.parentModel) // inserting requires shared lock on parent, if present\r\n iModel.locks.checkSharedLock(props.parentModel, \"parent model\", \"insert\");\r\n }\r\n\r\n /** Called after a new Model is inserted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was inserted\r\n * @beta\r\n */\r\n protected static onInserted(_arg: OnModelIdArg): void {\r\n // we don't need to tell LockControl about models being created - their ModeledElement does that\r\n }\r\n\r\n /** Called before a Model is updated.\r\n * @note throw an exception to disallow the update\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be updated\r\n * @beta\r\n */\r\n protected static onUpdate(arg: OnModelPropsArg): void {\r\n const id = arg.props.id!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n arg.iModel.channels[_verifyChannel](id);\r\n arg.iModel.locks.checkExclusiveLock(id, \"model\", \"update\");\r\n }\r\n\r\n /** Called after a Model is updated.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was updated.\r\n * @beta\r\n */\r\n protected static onUpdated(arg: OnModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called before a Model is deleted.\r\n * @note throw an exception to disallow the delete\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to be deleted\r\n * @beta\r\n */\r\n protected static onDelete(arg: OnModelIdArg): void {\r\n arg.iModel.channels[_verifyChannel](arg.id);\r\n arg.iModel.locks.checkExclusiveLock(arg.id, \"model\", \"delete\");\r\n }\r\n\r\n /** Called after a Model was deleted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that was deleted\r\n * @beta\r\n */\r\n protected static onDeleted(arg: OnModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n arg.iModel.elements[_cache].deleteWithModel(arg.id);\r\n }\r\n\r\n /** Called once per distinct Model ECClass after a bulk element delete operation, combining\r\n * both sub-model deletions and element-deletions-by-model into a single callback.\r\n *\r\n * `arg.deletedModelIds` — present when models of this class were deleted as sub-model roots.\r\n * The default implementation calls [[onDeleted]] for each.\r\n *\r\n * `arg.deletedElementsByModel` — present when elements were deleted from models of this class.\r\n * The default implementation calls [[onDeleteElement]] and [[onDeletedElement]] for each element.\r\n *\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the Model class dispatched on.\r\n * @beta\r\n */\r\n protected static onBulkModelEvents(arg: OnBulkModelEventsArg): void {\r\n if (arg.deletedModelIds !== undefined)\r\n for (const id of arg.deletedModelIds)\r\n this.onDeleted({ iModel: arg.iModel, id });\r\n\r\n if (arg.deletedElementsByModel !== undefined)\r\n for (const entry of arg.deletedElementsByModel)\r\n for (const elementId of entry.elementIds) {\r\n this.onDeleteElement({ iModel: arg.iModel, id: entry.id, elementId });\r\n this.onDeletedElement({ iModel: arg.iModel, id: entry.id, elementId });\r\n }\r\n }\r\n\r\n /** Called before a prospective Element is to be inserted into an instance of a Model of this class.\r\n * @note throw an exception to disallow the insert\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model to hold the element\r\n * @beta\r\n */\r\n protected static onInsertElement(_arg: OnElementInModelPropsArg): void { }\r\n\r\n /** Called after an Element has been inserted into an instance of a Model of this class.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onInsertedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called when an Element in an instance of a Model of this class is about to be updated.\r\n * @note throw an exception to disallow the update\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onUpdateElement(_arg: OnElementInModelPropsArg): void { }\r\n\r\n /** Called after an Element in an instance of a Model of this class has been updated.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onUpdatedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n /** Called when an Element in an instance of a Model of this class is about to be deleted.\r\n * @note throw an exception to disallow the delete\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model holding the element\r\n * @beta\r\n */\r\n protected static onDeleteElement(_arg: OnElementInModelIdArg): void { }\r\n\r\n /** Called after an Element in an instance of a Model of this class has been deleted.\r\n * @note If you override this method, you must call super.\r\n * @note `this` is the class of the Model that held the element\r\n * @beta\r\n */\r\n protected static onDeletedElement(arg: OnElementInModelIdArg): void {\r\n arg.iModel.models[_cache].delete(arg.id);\r\n }\r\n\r\n private getAllUserProperties(): any {\r\n if (!this.jsonProperties.UserProps)\r\n this.jsonProperties.UserProps = new Object();\r\n\r\n return this.jsonProperties.UserProps;\r\n }\r\n\r\n /** Get a set of JSON user properties by namespace */\r\n public getUserProperties(namespace: string) { return this.getAllUserProperties()[namespace]; }\r\n\r\n /** Change a set of user JSON properties of this Element by namespace. */\r\n public setUserProperties(nameSpace: string, value: any) { this.getAllUserProperties()[nameSpace] = value; }\r\n\r\n /** Remove a set of JSON user properties, specified by namespace, from this Element */\r\n public removeUserProperties(nameSpace: string) { delete this.getAllUserProperties()[nameSpace]; }\r\n\r\n public getJsonProperty(name: string): any { return this.jsonProperties[name]; }\r\n public setJsonProperty(name: string, value: any) { this.jsonProperties[name] = value; }\r\n\r\n /**\r\n * Insert this Model in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public insert(txn: EditTxn): Id64String;\r\n /**\r\n * Insert this Model in the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2026-08-04. Use Model.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public insert(): Id64String;\r\n public insert(txn?: EditTxn) { return this.id = (txn ?? this.iModel[_implicitTxn]).insertModel(this.toJSON()); }\r\n\r\n /**\r\n * Update this Model in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public update(txn: EditTxn): void;\r\n /**\r\n * Update this Model in the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2026-08-04. Use Model.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public update(): void;\r\n public update(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).updateModel(this.toJSON()); }\r\n\r\n /**\r\n * Delete this Model from the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public delete(txn: EditTxn): void;\r\n /**\r\n * Delete this Model from the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2026-08-04. Use Model.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public delete(): void;\r\n public delete(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).deleteModel(this.id); }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n if (this.parentModel)\r\n referenceIds.addModel(this.parentModel);\r\n referenceIds.addElement(this.modeledElement.id);\r\n }\r\n}\r\n\r\n/** A container for persisting geometric elements.\r\n * @public @preview\r\n */\r\nexport class GeometricModel extends Model {\r\n public geometryGuid?: GuidString;\r\n\r\n public static override get className(): string { return \"GeometricModel\"; }\r\n\r\n protected constructor(props: GeometricModelProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.geometryGuid = props.geometryGuid;\r\n }\r\n\r\n /** Query for the union of the extents of the elements contained by this model.\r\n * @note This function blocks the JavaScript event loop. Consider using [[queryRange]] instead.\r\n */\r\n public queryExtents(): AxisAlignedBox3d {\r\n const extents = this.iModel[_nativeDb].queryModelExtents({ id: this.id }).modelExtents;\r\n return Range3d.fromJSON(extents);\r\n }\r\n\r\n /** Query for the union of the extents of all elements contained within this model. */\r\n public async queryRange(): Promise<AxisAlignedBox3d> {\r\n return this.iModel.models.queryRange(this.id);\r\n }\r\n}\r\n\r\n/** A container for persisting 3d geometric elements.\r\n * @public @preview\r\n */\r\nexport abstract class GeometricModel3d extends GeometricModel {\r\n /** If true, then the elements in this GeometricModel3d are expected to be in an XY plane.\r\n * @note The associated ECProperty was added to the BisCore schema in version 1.0.8\r\n */\r\n public readonly isPlanProjection: boolean;\r\n /** If true, then the elements in this GeometricModel3d are not in real-world coordinates and will not be in the spatial index.\r\n * @note The associated ECProperty was added to the BisCore schema in version 1.0.8\r\n */\r\n public readonly isNotSpatiallyLocated: boolean;\r\n /** If true, then the elements in this GeometricModel3d are in real-world coordinates and will be in the spatial index. */\r\n public get isSpatiallyLocated(): boolean { return !this.isNotSpatiallyLocated; }\r\n\r\n public static override get className(): string { return \"GeometricModel3d\"; }\r\n\r\n protected constructor(props: GeometricModel3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.isNotSpatiallyLocated = JsonUtils.asBool(props.isNotSpatiallyLocated);\r\n this.isPlanProjection = JsonUtils.asBool(props.isPlanProjection);\r\n }\r\n\r\n /**\r\n * GeometricModel3d custom HandledProps includes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n protected static override readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"isPlanProjection\", source: \"Class\" },\r\n { propertyName: \"isNotSpatiallyLocated\", source: \"Class\" },\r\n ];\r\n\r\n /**\r\n * GeometricModel3d deserializes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override deserialize(props: DeserializeEntityArgs): GeometricModel3dProps {\r\n const modelProps = super.deserialize(props) as GeometricModel3dProps;\r\n const instance = props.row;\r\n if (instance.isNotSpatiallyLocated === true || instance.isTemplate === true)\r\n modelProps.isNotSpatiallyLocated = true;\r\n if (instance.isPlanProjection === true)\r\n modelProps.isPlanProjection = true;\r\n return modelProps;\r\n }\r\n\r\n /**\r\n * GeometricModel3d serializes 'isPlanProjection', and 'isNotSpatiallyLocated'.\r\n * @inheritdoc\r\n * @beta\r\n */\r\n public static override serialize(props: GeometricModel3dProps, _iModel: IModelDb): ECSqlRow {\r\n const inst = super.serialize(props, _iModel);\r\n inst.isNotSpatiallyLocated = props.isNotSpatiallyLocated ?? false;\r\n inst.isPlanProjection = props.isPlanProjection ?? false;\r\n return inst;\r\n }\r\n\r\n public override toJSON(): GeometricModel3dProps {\r\n const val = super.toJSON() as GeometricModel3dProps;\r\n if (this.isNotSpatiallyLocated)\r\n val.isNotSpatiallyLocated = true;\r\n\r\n if (this.isPlanProjection)\r\n val.isPlanProjection = true;\r\n\r\n return val;\r\n }\r\n}\r\n\r\n/** A container for persisting 2d geometric elements.\r\n * @public @preview\r\n */\r\nexport abstract class GeometricModel2d extends GeometricModel {\r\n /** The actual coordinates of (0,0) in modeling coordinates. An offset applied to all modeling coordinates. */\r\n public globalOrigin?: Point2d;\r\n public static override get className(): string { return \"GeometricModel2d\"; }\r\n\r\n protected constructor(props: GeometricModel2dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.globalOrigin = props.globalOrigin ? Point2d.fromJSON(props.globalOrigin) : undefined;\r\n }\r\n\r\n public override toJSON(): GeometricModel2dProps {\r\n const val = super.toJSON() as GeometricModel2dProps;\r\n if (undefined !== this.globalOrigin)\r\n val.globalOrigin = Point2d.fromJSON(this.globalOrigin);\r\n\r\n return val;\r\n }\r\n}\r\n\r\n/** A container for persisting 2d graphical elements.\r\n * @public @preview\r\n */\r\nexport abstract class GraphicalModel2d extends GeometricModel2d {\r\n public static override get className(): string { return \"GraphicalModel2d\"; }\r\n}\r\n\r\n/** A container for persisting GraphicalElement3d instances.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.8\r\n * @see [[GraphicalPartition3d]]\r\n * @public @preview\r\n */\r\nexport abstract class GraphicalModel3d extends GeometricModel3d {\r\n public static override get className(): string { return \"GraphicalModel3d\"; }\r\n}\r\n\r\n/** A container for persisting 3d geometric elements that are spatially located.\r\n * @public @preview\r\n */\r\nexport abstract class SpatialModel extends GeometricModel3d {\r\n public static override get className(): string { return \"SpatialModel\"; }\r\n}\r\n\r\n/** A container for persisting physical elements that model physical space.\r\n * @see [[PhysicalPartition]]\r\n * @public @preview\r\n */\r\nexport class PhysicalModel extends SpatialModel {\r\n public static override get className(): string { return \"PhysicalModel\"; }\r\n /** Insert a PhysicalPartition and a PhysicalModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The PhysicalPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the PhysicalPartition that the new PhysicalModel will sub-model.\r\n * @param isPlanProjection Optional value (default is false) that indicates if the contents of this model are expected to be in an XY plane.\r\n * @returns The Id of the newly inserted PhysicalPartition and PhysicalModel (same value).\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n /** @deprecated in 5.1.9 - will not be removed until after 2026-08-04. Use PhysicalModel.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const iModelDb = txn.iModel;\r\n const partitionProps: InformationPartitionElementProps = {\r\n classFullName: PhysicalPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: PhysicalPartition.createCode(iModelDb, parentSubjectId, name),\r\n };\r\n const partitionId = txn.insertElement(partitionProps);\r\n const modelProps: GeometricModel3dProps = {\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n isPlanProjection,\r\n };\r\n return txn.insertModel(modelProps);\r\n }\r\n}\r\n\r\n/** A container for persisting spatial location elements.\r\n * @see [[SpatialLocationPartition]]\r\n * @public @preview\r\n */\r\nexport class SpatialLocationModel extends SpatialModel {\r\n public static override get className(): string { return \"SpatialLocationModel\"; }\r\n /** Insert a SpatialLocationPartition and a SpatialLocationModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The SpatialLocationPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the SpatialLocationPartition that the new SpatialLocationModel will sub-model.\r\n * @param isPlanProjection Optional value (default is false) that indicates if the contents of this model are expected to be in an XY plane.\r\n * @returns The Id of the newly inserted SpatialLocationPartition and SpatialLocationModel (same value).\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n /** @deprecated in 5.1.9 - will not be removed until after 2026-08-04. Use SpatialLocationModel.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string, isPlanProjection?: boolean): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const iModelDb = txn.iModel;\r\n const partitionProps: InformationPartitionElementProps = {\r\n classFullName: SpatialLocationPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: SpatialLocationPartition.createCode(iModelDb, parentSubjectId, name),\r\n };\r\n const partitionId = txn.insertElement(partitionProps);\r\n const modelProps: GeometricModel3dProps = {\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n isPlanProjection,\r\n };\r\n return txn.insertModel(modelProps);\r\n }\r\n}\r\n\r\n/** A 2d model that holds [[DrawingGraphic]]s. DrawingModels may be dimensional or non-dimensional.\r\n * @public @preview\r\n */\r\nexport class DrawingModel extends GraphicalModel2d {\r\n public static override get className(): string { return \"DrawingModel\"; }\r\n}\r\n\r\n/** A container for persisting section [[DrawingGraphic]]s.\r\n * @public @preview\r\n */\r\nexport class SectionDrawingModel extends DrawingModel {\r\n public static override get className(): string { return \"SectionDrawingModel\"; }\r\n}\r\n\r\n/** A container for persisting [[ViewAttachment]]s and [[DrawingGraphic]]s.\r\n * A SheetModel is a digital representation of a *sheet of paper*. SheetModels are 2d models in bounded paper coordinates.\r\n * SheetModels may contain annotation Elements as well as references to 2d or 3d Views.\r\n * @public @preview\r\n */\r\nexport class SheetModel extends GraphicalModel2d {\r\n public static override get className(): string { return \"SheetModel\"; }\r\n}\r\n\r\n/** A container for persisting role elements.\r\n * @public @preview\r\n */\r\nexport class RoleModel extends Model {\r\n public static override get className(): string { return \"RoleModel\"; }\r\n}\r\n\r\n/** A container for persisting information elements.\r\n * @public @preview\r\n */\r\nexport abstract class InformationModel extends Model {\r\n public static override get className(): string { return \"InformationModel\"; }\r\n}\r\n\r\n/** A container for persisting group information elements.\r\n * @see [[GroupInformationPartition]]\r\n * @public @preview\r\n */\r\nexport abstract class GroupInformationModel extends InformationModel {\r\n public static override get className(): string { return \"GroupInformationModel\"; }\r\n}\r\n\r\n/** A sub-model of a [[SheetIndexPartition]] serving as a container for persisting [[SheetIndexEntry]] and [[SheetIndex]] elements.\r\n * @beta\r\n */\r\nexport class SheetIndexModel extends InformationModel {\r\n public static override get className(): string { return \"SheetIndexModel\"; }\r\n\r\n /** Insert a [[SheetIndexPartition]] and a SheetIndexModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The SheetIndexPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the SheetIndexPartition that the new SheetIndexModel will sub-model.\r\n * @returns The Id of the newly inserted SheetIndexModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetIndexModel.insert(txn, ...) instead. */\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: SheetIndexPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: SheetIndexPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting Information Record Elements\r\n * @see [[InformationRecordPartition]]\r\n * @public @preview\r\n */\r\nexport class InformationRecordModel extends InformationModel {\r\n public static override get className(): string { return \"InformationRecordModel\"; }\r\n\r\n /** Insert an InformationRecordPartition and an InformationRecordModel that sub-models it using an explicit transaction.\r\n * @param txn The EditTxn used to perform inserts.\r\n * @param parentSubjectId The InformationRecordPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the InformationRecordPartition that the new InformationRecordModel will sub-model.\r\n * @returns The Id of the newly inserted InformationRecordModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: InformationRecordPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: InformationRecordPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting definition elements.\r\n * @see [[DefinitionPartition]]\r\n * @public @preview\r\n */\r\nexport class DefinitionModel extends InformationModel {\r\n public static override get className(): string { return \"DefinitionModel\"; }\r\n\r\n /** Insert a DefinitionPartition and a DefinitionModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The DefinitionPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the DefinitionPartition that the new DefinitionModel will sub-model.\r\n * @returns The Id of the newly inserted DefinitionModel.\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: DefinitionPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: DefinitionPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** The singleton container of repository-related information elements.\r\n * @public @preview\r\n */\r\nexport class RepositoryModel extends DefinitionModel {\r\n public static override get className(): string { return \"RepositoryModel\"; }\r\n}\r\n\r\n/** Contains a list of document elements.\r\n * @see [[DocumentPartition]]\r\n * @public @preview\r\n */\r\nexport class DocumentListModel extends InformationModel {\r\n public static override get className(): string { return \"DocumentListModel\"; }\r\n\r\n /** Insert a [[DocumentPartition]] and a DocumentListModel that sub-models it.\r\n * @param txn The active EditTxn.\r\n * @param parentSubjectId The DocumentPartition will be inserted as a child of this Subject element.\r\n * @param name The name of the DocumentPartition that the new DocumentListModel will sub-model.\r\n * @returns The Id of the newly inserted DocumentPartition and DocumentListModel (same value)\r\n * @throws [[IModelError]] if there is an insert problem.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;\r\n public static insert(txnOrDb: EditTxn | IModelDb, parentSubjectId: Id64String, name: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const partitionId = txn.insertElement({\r\n classFullName: DocumentPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(parentSubjectId),\r\n code: DocumentPartition.createCode(txn.iModel, parentSubjectId, name),\r\n });\r\n return txn.insertModel({\r\n classFullName: this.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n }\r\n}\r\n\r\n/** A container for persisting link elements.\r\n * @see [[LinkPartition]]\r\n * @public @preview\r\n */\r\nexport class LinkModel extends InformationModel {\r\n public static override get className(): string { return \"LinkModel\"; }\r\n}\r\n\r\n/** The singleton container for repository-specific definition elements.\r\n * @public @preview\r\n */\r\nexport class DictionaryModel extends DefinitionModel {\r\n public static override get className(): string { return \"DictionaryModel\"; }\r\n}\r\n\r\n/** Obtains and displays multi-resolution tiled raster organized according to the WebMercator tiling system.\r\n * @public @preview\r\n */\r\nexport class WebMercatorModel extends SpatialModel {\r\n public static override get className(): string { return \"WebMercatorModel\"; }\r\n}\r\n"]}
@@ -43,7 +43,7 @@ export declare class Relationship extends Entity {
43
43
  * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.
44
44
  * @param _props The ElementDrivesElement relationship instance.
45
45
  * @param _iModel The iModel
46
- * @deprecated Use onRootChangedArg instead.
46
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onRootChangedArg instead.
47
47
  */
48
48
  static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void;
49
49
  /**
@@ -57,7 +57,7 @@ export declare class Relationship extends Entity {
57
57
  * A subclass of ElementDrivesElement can re-implement this static method to take some action.
58
58
  * @param _props The deleted ElementDrivesElement relationship instance.
59
59
  * @param _iModel The iModel
60
- * @deprecated Use onDeletedDependencyArg instead.
60
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onDeletedDependencyArg instead.
61
61
  */
62
62
  static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void;
63
63
  /**
@@ -67,7 +67,7 @@ export declare class Relationship extends Entity {
67
67
  insert(txn: EditTxn): Id64String;
68
68
  /**
69
69
  * Insert this Relationship into the iModel.
70
- * @deprecated Use Relationship.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
70
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
71
71
  */
72
72
  insert(): Id64String;
73
73
  /**
@@ -77,7 +77,7 @@ export declare class Relationship extends Entity {
77
77
  update(txn: EditTxn): void;
78
78
  /**
79
79
  * Update this Relationship in the iModel.
80
- * @deprecated Use Relationship.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
80
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
81
81
  */
82
82
  update(): void;
83
83
  /**
@@ -87,7 +87,7 @@ export declare class Relationship extends Entity {
87
87
  delete(txn: EditTxn): void;
88
88
  /**
89
89
  * Delete this Relationship from the iModel.
90
- * @deprecated Use Relationship.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
90
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
91
91
  */
92
92
  delete(): void;
93
93
  static getInstance<T extends Relationship>(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T;
@@ -117,7 +117,7 @@ export declare class ElementRefersToElements extends Relationship {
117
117
  * @param sourceId The sourceId of the relationship, that is, the driver element.
118
118
  * @param targetId The targetId of the relationship, that is, the driven element.
119
119
  * @return The Id of the inserted Relationship.
120
- * @deprecated Use ElementRefersToElements.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
120
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ElementRefersToElements.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
121
121
  */
122
122
  static insert(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String;
123
123
  protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
@@ -420,22 +420,22 @@ export declare class Relationships {
420
420
  * @param props The properties of the new relationship.
421
421
  * @returns The Id of the newly inserted relationship.
422
422
  * @note The id property of the props object is set as a side effect of this function.
423
- * @deprecated Use EditTxn.insertRelationship instead.
423
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.insertRelationship instead.
424
424
  */
425
425
  insertInstance(props: RelationshipProps): Id64String;
426
426
  /** Update the properties of an existing relationship instance in the iModel.
427
427
  * @param props the properties of the relationship instance to update. Any properties that are not present will be left unchanged.
428
- * @deprecated Use EditTxn.updateRelationship instead.
428
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.updateRelationship instead.
429
429
  */
430
430
  updateInstance(props: RelationshipProps): void;
431
431
  /** Delete an Relationship instance from this iModel.
432
- * @deprecated Use EditTxn.deleteRelationship instead.
432
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationship instead.
433
433
  */
434
434
  deleteInstance(props: RelationshipProps): void;
435
435
  /** Delete multiple Relationship instances from this iModel.
436
436
  * @param props The properties of the relationship instances to delete.
437
437
  * @remarks This method handles bulk deletion of relationships and supports mixed collections containing instances from different relationship classes.
438
- * @deprecated Use EditTxn.deleteRelationships instead.
438
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationships instead.
439
439
  */
440
440
  deleteInstances(props: ReadonlyArray<RelationshipProps>): void;
441
441
  /** Get the props of a Relationship instance
@@ -62,7 +62,7 @@ class Relationship extends Entity_1.Entity {
62
62
  * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.
63
63
  * @param _props The ElementDrivesElement relationship instance.
64
64
  * @param _iModel The iModel
65
- * @deprecated Use onRootChangedArg instead.
65
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onRootChangedArg instead.
66
66
  */
67
67
  static onRootChanged(_props, _iModel) { }
68
68
  /**
@@ -79,7 +79,7 @@ class Relationship extends Entity_1.Entity {
79
79
  * A subclass of ElementDrivesElement can re-implement this static method to take some action.
80
80
  * @param _props The deleted ElementDrivesElement relationship instance.
81
81
  * @param _iModel The iModel
82
- * @deprecated Use onDeletedDependencyArg instead.
82
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onDeletedDependencyArg instead.
83
83
  */
84
84
  static onDeletedDependency(_props, _iModel) { }
85
85
  insert(txn) { return this.id = (txn ?? this.iModel[Symbols_1._implicitTxn]).insertRelationship(this.toJSON()); }
@@ -439,20 +439,20 @@ class Relationships {
439
439
  * @param props The properties of the new relationship.
440
440
  * @returns The Id of the newly inserted relationship.
441
441
  * @note The id property of the props object is set as a side effect of this function.
442
- * @deprecated Use EditTxn.insertRelationship instead.
442
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.insertRelationship instead.
443
443
  */
444
444
  insertInstance(props) {
445
445
  return this._iModel[Symbols_1._implicitTxn].insertRelationship(props);
446
446
  }
447
447
  /** Update the properties of an existing relationship instance in the iModel.
448
448
  * @param props the properties of the relationship instance to update. Any properties that are not present will be left unchanged.
449
- * @deprecated Use EditTxn.updateRelationship instead.
449
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.updateRelationship instead.
450
450
  */
451
451
  updateInstance(props) {
452
452
  this._iModel[Symbols_1._implicitTxn].updateRelationship(props);
453
453
  }
454
454
  /** Delete an Relationship instance from this iModel.
455
- * @deprecated Use EditTxn.deleteRelationship instead.
455
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationship instead.
456
456
  */
457
457
  deleteInstance(props) {
458
458
  this._iModel[Symbols_1._implicitTxn].deleteRelationship(props);
@@ -460,7 +460,7 @@ class Relationships {
460
460
  /** Delete multiple Relationship instances from this iModel.
461
461
  * @param props The properties of the relationship instances to delete.
462
462
  * @remarks This method handles bulk deletion of relationships and supports mixed collections containing instances from different relationship classes.
463
- * @deprecated Use EditTxn.deleteRelationships instead.
463
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationships instead.
464
464
  */
465
465
  deleteInstances(props) {
466
466
  this._iModel[Symbols_1._implicitTxn].deleteRelationships(props);
@@ -1 +1 @@
1
- {"version":3,"file":"Relationship.js","sourceRoot":"","sources":["../../src/Relationship.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA+E;AAC/E,oDAAyG;AAEzG,qCAAkC;AAClC,uCAAoC;AAEpC,gDAA6D;AAC7D,gEAA6D;AAgB7D;;GAEG;AACH,MAAa,YAAa,SAAQ,eAAM;IAC/B,MAAM,KAAc,SAAS,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAa;IACrB,QAAQ,CAAa;IAErC,YAAsB,KAAwB,EAAE,MAAgB;QAC9D,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,mBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,mBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEe,MAAM;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAuB,CAAC;QAChD,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gHAAgH;IAChG,KAAK,CAAC,WAAW;QAC/B,IAAI,IAAI,CAAC,SAAS,IAAI,qCAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,qCAAiB,CAAC,CAAC;QAC1G,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAoB;QACjD,4DAA4D;QAC5D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,aAAa,CAAC,MAAyB,EAAE,OAAiB,IAAU,CAAC;IAEnF;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,GAAoB;QACvD,4DAA4D;QAC5D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,mBAAmB,CAAC,MAAyB,EAAE,OAAiB,IAAU,CAAC;IAYlF,MAAM,CAAC,GAAa,IAAgB,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAY5H,MAAM,CAAC,GAAa,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAY/F,MAAM,CAAC,GAAa,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/F,MAAM,CAAC,WAAW,CAAyB,MAAgB,EAAE,QAAsC,IAAO,OAAO,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC1L;AA9GD,oCA8GC;AAED;;GAEG;AACH,MAAa,uBAAwB,SAAQ,YAAY;IAChD,MAAM,KAAc,SAAS,KAAa,OAAO,yBAAyB,CAAC,CAAC,CAAC;IACpF;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAoC,MAAgB,EAAE,QAAoB,EAAE,QAAoB;QAClH,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAM,CAAC;IAC7G,CAAC;IAkBM,MAAM,CAAC,MAAM,CAAC,WAA+B,EAAE,QAAoB,EAAE,QAAoB;QAC9F,MAAM,GAAG,GAAG,WAAW,YAAY,iBAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,sBAAY,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjE,OAAO,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAEkB,mBAAmB,CAAC,YAAgC;QACrE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAvCD,0DAuCC;AAED;;GAEG;AACH,MAAa,+BAAgC,SAAQ,uBAAuB;IACnE,MAAM,KAAc,SAAS,KAAa,OAAO,iCAAiC,CAAC,CAAC,CAAC;CAC7F;AAFD,0EAEC;AAED;;GAEG;AACH,MAAa,mCAAoC,SAAQ,uBAAuB;IACvE,MAAM,KAAc,SAAS,KAAa,OAAO,qCAAqC,CAAC,CAAC,CAAC;CACjG;AAFD,kFAEC;AAED;;;;GAIG;AACH,MAAa,qCAAsC,SAAQ,uBAAuB;IACzE,MAAM,KAAc,SAAS,KAAa,OAAO,uCAAuC,CAAC,CAAC,CAAC;CACnG;AAFD,sFAEC;AAED;;;GAGG;AACH,MAAa,yCAA0C,SAAQ,qCAAqC;IAC3F,MAAM,KAAc,SAAS,KAAa,OAAO,2CAA2C,CAAC,CAAC,CAAC;CACvG;AAFD,8FAEC;AASD;;GAEG;AACH,MAAa,oBAAqB,SAAQ,uBAAuB;IACxD,MAAM,KAAc,SAAS,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;IAC1E,cAAc,CAAS;IAE9B,YAAY,KAAgC,EAAE,MAAgB;QAC5D,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAU,MAAM,CAAoC,MAAgB,EAAE,QAAoB,EAAE,QAAoB,EAAE,iBAAyB,CAAC;QACvJ,MAAM,KAAK,GAA8B,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnH,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAM,CAAC;IACzD,CAAC;CACF;AAbD,oDAaC;AAED;;;GAGG;AACH,MAAa,gCAAiC,SAAQ,oBAAoB;IACjE,MAAM,KAAc,SAAS,KAAa,OAAO,kCAAkC,CAAC,CAAC,CAAC;CAC9F;AAFD,4EAEC;AAED;;;;GAIG;AACH,MAAa,qBAAsB,SAAQ,oBAAoB;IACtD,MAAM,KAAc,SAAS,KAAa,OAAO,uBAAuB,CAAC,CAAC,CAAC;CACnF;AAFD,sDAEC;AAED;;;GAGG;AACH,MAAa,gCAAiC,SAAQ,oBAAoB;IACjE,MAAM,KAAc,SAAS,KAAa,OAAO,kCAAkC,CAAC,CAAC,CAAC;CAC9F;AAFD,4EAEC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuLG;AACH,MAAa,oBAAqB,SAAQ,YAAY;IAC7C,MAAM,KAAc,SAAS,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;IACjF;;;;OAIG;IACI,MAAM,CAAS;IACtB,uHAAuH;IAChH,QAAQ,CAAS;IAExB,YAAsB,KAAgC,EAAE,MAAgB;QACtE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAiC,MAAgB,EAAE,QAAoB,EAAE,QAAoB,EAAE,WAAmB,CAAC;QACrI,MAAM,KAAK,GAA8B,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACxH,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAM,CAAC;IACzD,CAAC;IAEe,MAAM;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAA+B,CAAC;QAC1D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAEkB,mBAAmB,CAAC,YAAgC;QACrE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAlCD,oDAkCC;AAED;;;;;GAKG;AACH,MAAa,2BAA4B,SAAQ,YAAY;IACpD,MAAM,KAAc,SAAS,KAAa,OAAO,6BAA6B,CAAC,CAAC,CAAC;IACrE,mBAAmB,CAAC,YAAgC;QACrE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;CACF;AAPD,kEAOC;AAED;;GAEG;AACH,MAAa,aAAa;IAChB,OAAO,CAAW;IAE1B,gBAAgB;IAChB,YAAmB,MAAgB,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;IAE/D;;;OAGG;IACI,cAAc,CAAC,KAAwB,IAAkB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAe,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3H,2EAA2E;IACnE,sBAAsB,CAAC,aAAqB;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAS,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,yBAAW,CAAC,uBAAQ,CAAC,eAAe,EAAE,UAAU,aAAa,8HAA8H,CAAC,CAAC;QACzM,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAAC,KAAwB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,KAAwB;QAC5C,IAAI,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,KAAwB;QAC5C,IAAI,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,KAAuC;QAC5D,IAAI,CAAC,OAAO,CAAC,sBAAY,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAA8B,gBAAwB,EAAE,QAAsC;QACnH,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAI,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAClF,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACI,mBAAmB,CAA8B,gBAAwB,EAAE,QAAsC;QACtH,IAAI,KAAoB,CAAC;QACzB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,4DAA4D;YAC5D,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,iBAAiB,gBAAgB,uBAAuB,EAAE,CAAC,IAAoB,EAAE,EAAE;gBAC5H,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACzB,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,iBAAiB,gBAAgB,sDAAsD,EAAE,CAAC,IAAoB,EAAE,EAAE;gBAC3J,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAClC,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAI,KAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAyB,eAAuB,EAAE,QAAsC;QACxG,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAyB,gBAAwB,EAAE,QAAsC;QAC5G,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAoB,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAClG,OAAO,SAAS,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,CAAC;CACF;AArHD,sCAqHC","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 Relationships\r\n */\r\n\r\nimport { DbResult, Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { EntityReferenceSet, IModelError, RelationshipProps, SourceAndTarget } from \"@itwin/core-common\";\r\nimport { ECSqlStatement } from \"./ECSqlStatement\";\r\nimport { Entity } from \"./Entity\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { _implicitTxn, _nativeDb } from \"./internal/Symbols\";\r\nimport { RelationshipClass } from \"@itwin/ecschema-metadata\";\r\n\r\nexport type { SourceAndTarget, RelationshipProps } from \"@itwin/core-common\"; // for backwards compatibility\r\n\r\n/** Argument for relationship dependency callbacks.\r\n * @beta\r\n */\r\nexport interface OnDependencyArg {\r\n /** The iModel for the relationship affected by this method. */\r\n iModel: IModelDb;\r\n /** The ElementDrivesElement relationship instance affected by this method. */\r\n props: RelationshipProps;\r\n /** The transaction for indirect processing. */\r\n indirectEditTxn: EditTxn;\r\n}\r\n\r\n/** Base class for all link table ECRelationships\r\n * @public\r\n */\r\nexport class Relationship extends Entity {\r\n public static override get className(): string { return \"Relationship\"; }\r\n public readonly sourceId: Id64String;\r\n public readonly targetId: Id64String;\r\n\r\n protected constructor(props: RelationshipProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.sourceId = Id64.fromJSON(props.sourceId);\r\n this.targetId = Id64.fromJSON(props.targetId);\r\n }\r\n\r\n public override toJSON(): RelationshipProps {\r\n const val = super.toJSON() as RelationshipProps;\r\n val.sourceId = this.sourceId;\r\n val.targetId = this.targetId;\r\n return val;\r\n }\r\n\r\n /** Query metadata for this relationship class from the iModel's schema. Returns cached metadata if available.*/\r\n public override async getMetaData(): Promise<RelationshipClass> {\r\n if (this._metadata && RelationshipClass.isRelationshipClass(this._metadata)) {\r\n return this._metadata;\r\n }\r\n\r\n const relationship = await this.iModel.schemaContext.getSchemaItem(this.schemaItemKey, RelationshipClass);\r\n if (relationship !== undefined) {\r\n this._metadata = relationship;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when its input has changed or is the output of some upstream relationship whose input has changed.\r\n * This callback is invoked after the input element has been processed by upstream relationships.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.\r\n * @beta\r\n */\r\n public static onRootChangedArg(arg: OnDependencyArg): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.onRootChanged(arg.props, arg.iModel);\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when its input has changed or is the output of some upstream relationship whose input has changed.\r\n * This callback is invoked after the input element has been processed by upstream relationships.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.\r\n * @param _props The ElementDrivesElement relationship instance.\r\n * @param _iModel The iModel\r\n * @deprecated Use onRootChangedArg instead.\r\n */\r\n public static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void { }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when the relationship instance has been deleted.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action.\r\n * @beta\r\n */\r\n public static onDeletedDependencyArg(arg: OnDependencyArg): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.onDeletedDependency(arg.props, arg.iModel);\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when the relationship instance has been deleted.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action.\r\n * @param _props The deleted ElementDrivesElement relationship instance.\r\n * @param _iModel The iModel\r\n * @deprecated Use onDeletedDependencyArg instead.\r\n */\r\n public static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void { }\r\n\r\n /**\r\n * Insert this Relationship into the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public insert(txn: EditTxn): Id64String;\r\n /**\r\n * Insert this Relationship into the iModel.\r\n * @deprecated Use Relationship.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public insert(): Id64String;\r\n public insert(txn?: EditTxn): Id64String { return this.id = (txn ?? this.iModel[_implicitTxn]).insertRelationship(this.toJSON()); }\r\n\r\n /**\r\n * Update this Relationship in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public update(txn: EditTxn): void;\r\n /**\r\n * Update this Relationship in the iModel.\r\n * @deprecated Use Relationship.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public update(): void;\r\n public update(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).updateRelationship(this.toJSON()); }\r\n\r\n /**\r\n * Delete this Relationship from the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public delete(txn: EditTxn): void;\r\n /**\r\n * Delete this Relationship from the iModel.\r\n * @deprecated Use Relationship.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public delete(): void;\r\n public delete(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).deleteRelationship(this.toJSON()); }\r\n\r\n public static getInstance<T extends Relationship>(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T { return iModel.relationships.getInstance(this.classFullName, criteria); }\r\n}\r\n\r\n/** A Relationship where one Element refers to another Element\r\n * @public\r\n */\r\nexport class ElementRefersToElements extends Relationship {\r\n public static override get className(): string { return \"ElementRefersToElements\"; }\r\n /** Create an instance of the Relationship.\r\n * @param iModel The iModel that will contain the relationship\r\n * @param sourceId The sourceId of the relationship, that is, the driver element\r\n * @param targetId The targetId of the relationship, that is, the driven element\r\n * @return an instance of the specified class.\r\n */\r\n public static create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): T {\r\n return iModel.relationships.createInstance({ sourceId, targetId, classFullName: this.classFullName }) as T;\r\n }\r\n\r\n /** Insert a new instance of the Relationship using an explicit transaction.\r\n * @param txn The EditTxn used to perform the insert.\r\n * @param sourceId The sourceId of the relationship, that is, the driver element\r\n * @param targetId The targetId of the relationship, that is, the driven element\r\n * @return The Id of the inserted Relationship.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, sourceId: Id64String, targetId: Id64String): Id64String;\r\n /** Insert a new instance of the Relationship.\r\n * @param iModel The iModel that will contain the relationship.\r\n * @param sourceId The sourceId of the relationship, that is, the driver element.\r\n * @param targetId The targetId of the relationship, that is, the driven element.\r\n * @return The Id of the inserted Relationship.\r\n * @deprecated Use ElementRefersToElements.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public static insert(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String;\r\n public static insert(txnOrIModel: EditTxn | IModelDb, sourceId: Id64String, targetId: Id64String): Id64String {\r\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\r\n const relationship = this.create(txn.iModel, sourceId, targetId);\r\n return txn.insertRelationship(relationship.toJSON());\r\n }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addElement(this.targetId);\r\n }\r\n}\r\n\r\n/** Relates a [[DrawingGraphic]] to the [[Element]] that it represents\r\n * @public\r\n */\r\nexport class DrawingGraphicRepresentsElement extends ElementRefersToElements {\r\n public static override get className(): string { return \"DrawingGraphicRepresentsElement\"; }\r\n}\r\n\r\n/** Relates a [[GraphicalElement3d]] to the [[Element]] that it represents\r\n * @public\r\n */\r\nexport class GraphicalElement3dRepresentsElement extends ElementRefersToElements {\r\n public static override get className(): string { return \"GraphicalElement3dRepresentsElement\"; }\r\n}\r\n\r\n/** Relates a [[SynchronizationConfigLink]] to N [[ExternalSource]] instances.\r\n * Each relationship instance represents an external source processed by the synchronization configuration.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class SynchronizationConfigProcessesSources extends ElementRefersToElements {\r\n public static override get className(): string { return \"SynchronizationConfigProcessesSources\"; }\r\n}\r\n\r\n/** Relates a [[SynchronizationConfigLink]] to *root* [[ExternalSource]] instances.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class SynchronizationConfigSpecifiesRootSources extends SynchronizationConfigProcessesSources {\r\n public static override get className(): string { return \"SynchronizationConfigSpecifiesRootSources\"; }\r\n}\r\n\r\n/** Properties that are common to all types of link table ECRelationships\r\n * @public\r\n */\r\nexport interface ElementGroupsMembersProps extends RelationshipProps {\r\n memberPriority: number;\r\n}\r\n\r\n/** An ElementRefersToElements relationship where one Element *groups* a set of other Elements.\r\n * @public\r\n */\r\nexport class ElementGroupsMembers extends ElementRefersToElements {\r\n public static override get className(): string { return \"ElementGroupsMembers\"; }\r\n public memberPriority: number;\r\n\r\n constructor(props: ElementGroupsMembersProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.memberPriority = props.memberPriority;\r\n }\r\n\r\n public static override create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, memberPriority: number = 0): T {\r\n const props: ElementGroupsMembersProps = { sourceId, targetId, memberPriority, classFullName: this.classFullName };\r\n return iModel.relationships.createInstance(props) as T;\r\n }\r\n}\r\n\r\n/** Relates a [[DefinitionGroup]] to its [[DefinitionElement]] members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.10\r\n * @public\r\n */\r\nexport class DefinitionGroupGroupsDefinitions extends ElementGroupsMembers {\r\n public static override get className(): string { return \"DefinitionGroupGroupsDefinitions\"; }\r\n}\r\n\r\n/** Represents group membership where the group Element (and its properties) impart information about the member Elements above mere membership.\r\n * Implies that properties of the group should be considered as properties of its members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.11\r\n * @public\r\n */\r\nexport class GroupImpartsToMembers extends ElementGroupsMembers {\r\n public static override get className(): string { return \"GroupImpartsToMembers\"; }\r\n}\r\n\r\n/** Relates an [[ExternalSourceGroup]] to its [[ExternalSource]] members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class ExternalSourceGroupGroupsSources extends ElementGroupsMembers {\r\n public static override get className(): string { return \"ExternalSourceGroupGroupsSources\"; }\r\n}\r\n\r\n/** Properties that are common to all types of ElementDrivesElements\r\n * @beta\r\n */\r\nexport interface ElementDrivesElementProps extends RelationshipProps {\r\n status: number;\r\n priority: number;\r\n}\r\n\r\n/** A Relationship indicating that one Element *drives* another Element.\r\n * An ElementDrivesElement relationship defines a one-way \"driving\" relationship from the source to the target.\r\n * When the source of an ElementDrivesElement relationship changes, the ElementDrivesElement itself can get a callback, and both the source and target elements can get callbacks.\r\n * By inserting ElementDrivesElement relationships, an app can create and store an acyclic directed graph of dependencies between elements.\r\n *\r\n * # Defining dependencies\r\n * Create an ElementDrivesElement relationship to specify that the source element drives the target element.\r\n * For example, to specify that element e1 drives element e2, create a relationship between them like this:\r\n * ```ts\r\n * const ede = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * ede.insert();\r\n * ```\r\n * This creates a persistent relationship. The fact that e1 drives e2 is persisted in the iModel.\r\n *\r\n * # Defining dependency graphs\r\n * When you create multiple ElementDrivesElement relationships, you create a network of dependencies. The target of one may be the source of another.\r\n * A change in the content of an DgnElement can therefore trigger changes to many downstream elements.\r\n *\r\n * For example, to make element e1 drive element e2 and e2 drive another element, e3, create two relationships like this:\r\n * ```ts\r\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\r\n * ede12.insert();\r\n * ede23.insert();\r\n * ```\r\n * Those two relationships create this graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n * Where the \"-->\" is meant to represent a driving relationship.\r\n *\r\n * The order in which you create the relationships does not matter.\r\n * The graph indicates that e3 depends on e2 and e2 depends on e1.\r\n *\r\n * An ElementDrivesElement relationship is between one source element and one target element.\r\n * Many ElementDrivesElement relationships can point to a given element, and many can point out of it.\r\n * Thus, you can define many:many relationships.\r\n * For example:\r\n * ```ts\r\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * const ede112 = ElementDrivesElement.create(iModel, e11id, e2id);\r\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\r\n * const ede231 = ElementDrivesElement.create(iModel, e2id, e31id);\r\n * ede12.insert();\r\n * ede112.insert();\r\n * ede23.insert();\r\n * ede231.insert();\r\n * ```\r\n * Creates this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * e2 depends on both e1 and e11. e2 then drives e3 and e31.\r\n *\r\n * In an ElementDrivesElement dependency graph, the relationships are the \"edges\" and the Elements are the \"nodes\".\r\n * The following terms are used when referring to the elements (nodes) in a dependency graph:\r\n * * Inputs - The sources of all edges that point to the element. This includes all upstream elements that flow into the element.\r\n * * Outputs - The targets of all edges that point out of the element. This includes all downstream elements.\r\n *\r\n * # Subgraph Processing\r\n * When changes are made, only the part of the overall graph that is affected will be processed. So, for example,\r\n * suppose we have this graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n * If e1 changes, then the subgraph to be processed is equal to the full graph, as shown.\r\n *\r\n * If only e2 changes, then the subgraph to be processed is just:\r\n * ```\r\n * e2 --> e3\r\n * ```\r\n * If only e3 changes, then the subgraph consists of e3 by itself.\r\n *\r\n * Returning to the second example above, suppose we have this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * If e1 is changed, the affected subgraph is:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * If e2 is changed, the affected subgraph is:\r\n * ```\r\n * e3\r\n * /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * # Callbacks\r\n * Once the affected subgraph to process is found, it propagates changes through it by making callbacks.\r\n * Classes for both elements (nodes) and ElementDrivesElements relationships (edges) can receive callbacks.\r\n *\r\n * ## ElementDrivesElement Callbacks\r\n * The following callbacks are invoked on ElementDrivesElement relationship classes (edges):\r\n * * onRootChanged\r\n * * onDeletedDependency\r\n *\r\n * Note that these are static methods. Their default implementations do nothing.\r\n * To receive and act on these callbacks, a domain should define a subclass of ElementDrivesElement and use that to create relationships.\r\n * The subclass should then implement the callbacks that it would like to act on.\r\n *\r\n * A ElementDrivesElement subclass callback is expected to make changes to the output element only!\r\n *\r\n * ## Element Callbacks\r\n * The following callbacks are invoked on Element classes (nodes):\r\n * * Element.onBeforeOutputsHandled\r\n * * Element.onAllInputsHandled\r\n *\r\n * ## Order\r\n * Callbacks are invoked by BriefcaseDb.saveChanges.\r\n * They are invoked in dependency (topological) order: driving elements first, then driven elements.\r\n *\r\n * Each callback is invoked only once. No matter how many times a given element was changed during the transaction,\r\n * a callback such as ElementDrivesElement.onRootChanged will be invoked only once.\r\n * In the same way, no matter how many of its inputs were changed, a callback such as Element.onAllInputsHandled will be\r\n * invoked only once.\r\n *\r\n * For example, suppose we have a graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n *\r\n * Suppose that e1 is directly modified. No callbacks are made at that time.\r\n * Later, when BriefcaseDb.saveChanges is called, the following callbacks are made, in order:\r\n * 1. Element.onBeforeOutputsHandled e1\r\n * 1. ElementDrivesElement.onRootChanged e1->e2\r\n * 1. Element.onAllInputsHandled e2\r\n * 1. ElementDrivesElement.onRootChanged e2->e3\r\n * 1. Element.onAllInputsHandled e3\r\n *\r\n * Suppose that e3 is modified directly and BriefcaseDb.saveChanges is called.\r\n * Since no input to a relationship was changed, the sub-graph will be empty, and no callbacks will be made.\r\n *\r\n * Returning to the second example above, suppose we have this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * If e1 is changed and BriefcaseDb.saveChanges is called, the subgraph is:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * The callbacks are:\r\n * 1. Element.onBeforeOutputsHandled e1\r\n * 1. ElementDrivesElement.onRootChanged e1->e2\r\n * 1. Element.onAllInputsHandled e2\r\n * 1. ElementDrivesElement.onRootChanged e2->e3\r\n * 1. Element.onAllInputsHandled e3\r\n * 1. ElementDrivesElement.onRootChanged e2->e31\r\n * 1. Element.onAllInputsHandled e31\r\n *\r\n * (The ElementDrivesElement.)\r\n *\r\n * #Errors\r\n * Circular dependencies are not permitted. If a cycle is detected, that is treated as a fatal error. All ElementDrivesElement relationships\r\n * involved in a cycle will have their status set to 1, indicating a failure.\r\n *\r\n * A callback may call txnManager.reportError to reject an invalid change. It can classify the error as fatal or just a warning.\r\n * A callback make set the status value of an ElementDrivesElement instance to 1 to indicate a processing failure in that edge.\r\n *\r\n * After BriefcaseDb.saveChanges is called, an app should check db.txns.validationErrors and db.txns.hasFatalError to find out if graph-evaluation failed.\r\n *\r\n * @beta\r\n */\r\nexport class ElementDrivesElement extends Relationship {\r\n public static override get className(): string { return \"ElementDrivesElement\"; }\r\n /** Relationship status\r\n * * 0 indicates no errors. Set after a successful evaluation.\r\n * * 1 indicates that this driving relationship could not be evaluated. The callback itself can set this to indicate that it failed to process the input changes. Also, it is set if the relationship is part of a circular dependency.\r\n * * 0x80 The app or callback can set this to indicate to not propagate changes through this relationship.\r\n */\r\n public status: number;\r\n /** Affects the order in which relationships are processed in the case where two relationships have the same output. */\r\n public priority: number;\r\n\r\n protected constructor(props: ElementDrivesElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.status = props.status;\r\n this.priority = props.priority;\r\n }\r\n\r\n public static create<T extends ElementDrivesElement>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, priority: number = 0): T {\r\n const props: ElementDrivesElementProps = { sourceId, targetId, priority, status: 0, classFullName: this.classFullName };\r\n return iModel.relationships.createInstance(props) as T;\r\n }\r\n\r\n public override toJSON(): ElementDrivesElementProps {\r\n const props = super.toJSON() as ElementDrivesElementProps;\r\n props.status = this.status;\r\n props.priority = this.priority;\r\n return props;\r\n }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addElement(this.targetId);\r\n }\r\n}\r\n\r\n/** The third (and last) possible link-table relationship base class in an iModel.\r\n * Has no external use, but is included for completeness of the [Entity.collectReferenceIds]($backend)\r\n * implementations for link-table relationships. Generating the types of the source and target automatically would require\r\n * coupling this package with ecschema-metadata which we do not want to do.\r\n * @internal\r\n */\r\nexport class ModelSelectorRefersToModels extends Relationship {\r\n public static override get className(): string { return \"ModelSelectorRefersToModels\"; }\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addModel(this.targetId);\r\n }\r\n}\r\n\r\n/** Manages [[Relationship]]s.\r\n * @public\r\n */\r\nexport class Relationships {\r\n private _iModel: IModelDb;\r\n\r\n /** @internal */\r\n public constructor(iModel: IModelDb) { this._iModel = iModel; }\r\n\r\n /** Create a new instance of a Relationship.\r\n * @param props The properties of the new Relationship.\r\n * @throws [[IModelError]] if there is a problem creating the Relationship.\r\n */\r\n public createInstance(props: RelationshipProps): Relationship { return this._iModel.constructEntity<Relationship>(props); }\r\n\r\n /** Check classFullName to ensure it is a link table relationship class. */\r\n private checkRelationshipClass(classFullName: string) {\r\n if (!this._iModel[_nativeDb].isLinkTableRelationship(classFullName.replace(\".\", \":\"))) {\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Class '${classFullName}' must be a relationship class and it should be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.`);\r\n }\r\n }\r\n\r\n /** Insert a new relationship instance into the iModel. The relationship provided must be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.\r\n * @param props The properties of the new relationship.\r\n * @returns The Id of the newly inserted relationship.\r\n * @note The id property of the props object is set as a side effect of this function.\r\n * @deprecated Use EditTxn.insertRelationship instead.\r\n */\r\n public insertInstance(props: RelationshipProps): Id64String {\r\n return this._iModel[_implicitTxn].insertRelationship(props);\r\n }\r\n\r\n /** Update the properties of an existing relationship instance in the iModel.\r\n * @param props the properties of the relationship instance to update. Any properties that are not present will be left unchanged.\r\n * @deprecated Use EditTxn.updateRelationship instead.\r\n */\r\n public updateInstance(props: RelationshipProps): void {\r\n this._iModel[_implicitTxn].updateRelationship(props);\r\n }\r\n\r\n /** Delete an Relationship instance from this iModel.\r\n * @deprecated Use EditTxn.deleteRelationship instead.\r\n */\r\n public deleteInstance(props: RelationshipProps): void {\r\n this._iModel[_implicitTxn].deleteRelationship(props);\r\n }\r\n\r\n /** Delete multiple Relationship instances from this iModel.\r\n * @param props The properties of the relationship instances to delete.\r\n * @remarks This method handles bulk deletion of relationships and supports mixed collections containing instances from different relationship classes.\r\n * @deprecated Use EditTxn.deleteRelationships instead.\r\n */\r\n public deleteInstances(props: ReadonlyArray<RelationshipProps>): void {\r\n this._iModel[_implicitTxn].deleteRelationships(props);\r\n }\r\n\r\n /** Get the props of a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\r\n * @see tryGetInstanceProps\r\n */\r\n public getInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T {\r\n const relationshipProps = this.tryGetInstanceProps<T>(relClassFullName, criteria);\r\n if (undefined === relationshipProps) {\r\n throw new IModelError(IModelStatus.NotFound, \"Relationship not found\");\r\n }\r\n return relationshipProps;\r\n }\r\n\r\n /** Get the props of a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @returns The RelationshipProps or `undefined` if the relationship is not found.\r\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\r\n * @see getInstanceProps\r\n */\r\n public tryGetInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\r\n let props: T | undefined;\r\n if (typeof criteria === \"string\") {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE ecinstanceid=?`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, criteria);\r\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\r\n });\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, criteria.sourceId);\r\n stmt.bindId(2, criteria.targetId);\r\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\r\n });\r\n }\r\n if (undefined !== props) {\r\n props.classFullName = (props as any).className.replace(\".\", \":\");\r\n }\r\n return props;\r\n }\r\n\r\n /** Get a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\r\n * @see tryGetInstance\r\n */\r\n public getInstance<T extends Relationship>(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T {\r\n return this._iModel.constructEntity<T>(this.getInstanceProps(relClassSqlName, criteria));\r\n }\r\n\r\n /** Get a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @returns The relationship or `undefined` if the relationship is not found.\r\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\r\n * @see getInstance\r\n */\r\n public tryGetInstance<T extends Relationship>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\r\n const relationshipProps = this.tryGetInstanceProps<RelationshipProps>(relClassFullName, criteria);\r\n return undefined !== relationshipProps ? this._iModel.constructEntity<T>(relationshipProps) : undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Relationship.js","sourceRoot":"","sources":["../../src/Relationship.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 Relationships\r\n */\r\n\r\nimport { DbResult, Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { EntityReferenceSet, IModelError, RelationshipProps, SourceAndTarget } from \"@itwin/core-common\";\r\nimport { ECSqlStatement } from \"./ECSqlStatement\";\r\nimport { Entity } from \"./Entity\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { _implicitTxn, _nativeDb } from \"./internal/Symbols\";\r\nimport { RelationshipClass } from \"@itwin/ecschema-metadata\";\r\n\r\nexport type { SourceAndTarget, RelationshipProps } from \"@itwin/core-common\"; // for backwards compatibility\r\n\r\n/** Argument for relationship dependency callbacks.\r\n * @beta\r\n */\r\nexport interface OnDependencyArg {\r\n /** The iModel for the relationship affected by this method. */\r\n iModel: IModelDb;\r\n /** The ElementDrivesElement relationship instance affected by this method. */\r\n props: RelationshipProps;\r\n /** The transaction for indirect processing. */\r\n indirectEditTxn: EditTxn;\r\n}\r\n\r\n/** Base class for all link table ECRelationships\r\n * @public\r\n */\r\nexport class Relationship extends Entity {\r\n public static override get className(): string { return \"Relationship\"; }\r\n public readonly sourceId: Id64String;\r\n public readonly targetId: Id64String;\r\n\r\n protected constructor(props: RelationshipProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.sourceId = Id64.fromJSON(props.sourceId);\r\n this.targetId = Id64.fromJSON(props.targetId);\r\n }\r\n\r\n public override toJSON(): RelationshipProps {\r\n const val = super.toJSON() as RelationshipProps;\r\n val.sourceId = this.sourceId;\r\n val.targetId = this.targetId;\r\n return val;\r\n }\r\n\r\n /** Query metadata for this relationship class from the iModel's schema. Returns cached metadata if available.*/\r\n public override async getMetaData(): Promise<RelationshipClass> {\r\n if (this._metadata && RelationshipClass.isRelationshipClass(this._metadata)) {\r\n return this._metadata;\r\n }\r\n\r\n const relationship = await this.iModel.schemaContext.getSchemaItem(this.schemaItemKey, RelationshipClass);\r\n if (relationship !== undefined) {\r\n this._metadata = relationship;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when its input has changed or is the output of some upstream relationship whose input has changed.\r\n * This callback is invoked after the input element has been processed by upstream relationships.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.\r\n * @beta\r\n */\r\n public static onRootChangedArg(arg: OnDependencyArg): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.onRootChanged(arg.props, arg.iModel);\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when its input has changed or is the output of some upstream relationship whose input has changed.\r\n * This callback is invoked after the input element has been processed by upstream relationships.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.\r\n * @param _props The ElementDrivesElement relationship instance.\r\n * @param _iModel The iModel\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onRootChangedArg instead.\r\n */\r\n public static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void { }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when the relationship instance has been deleted.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action.\r\n * @beta\r\n */\r\n public static onDeletedDependencyArg(arg: OnDependencyArg): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.onDeletedDependency(arg.props, arg.iModel);\r\n }\r\n\r\n /**\r\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when the relationship instance has been deleted.\r\n * A subclass of ElementDrivesElement can re-implement this static method to take some action.\r\n * @param _props The deleted ElementDrivesElement relationship instance.\r\n * @param _iModel The iModel\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use onDeletedDependencyArg instead.\r\n */\r\n public static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void { }\r\n\r\n /**\r\n * Insert this Relationship into the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public insert(txn: EditTxn): Id64String;\r\n /**\r\n * Insert this Relationship into the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.insert(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public insert(): Id64String;\r\n public insert(txn?: EditTxn): Id64String { return this.id = (txn ?? this.iModel[_implicitTxn]).insertRelationship(this.toJSON()); }\r\n\r\n /**\r\n * Update this Relationship in the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public update(txn: EditTxn): void;\r\n /**\r\n * Update this Relationship in the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.update(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public update(): void;\r\n public update(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).updateRelationship(this.toJSON()); }\r\n\r\n /**\r\n * Delete this Relationship from the iModel using the supplied EditTxn.\r\n * @beta\r\n */\r\n public delete(txn: EditTxn): void;\r\n /**\r\n * Delete this Relationship from the iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use Relationship.delete(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public delete(): void;\r\n public delete(txn?: EditTxn) { (txn ?? this.iModel[_implicitTxn]).deleteRelationship(this.toJSON()); }\r\n\r\n public static getInstance<T extends Relationship>(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T { return iModel.relationships.getInstance(this.classFullName, criteria); }\r\n}\r\n\r\n/** A Relationship where one Element refers to another Element\r\n * @public\r\n */\r\nexport class ElementRefersToElements extends Relationship {\r\n public static override get className(): string { return \"ElementRefersToElements\"; }\r\n /** Create an instance of the Relationship.\r\n * @param iModel The iModel that will contain the relationship\r\n * @param sourceId The sourceId of the relationship, that is, the driver element\r\n * @param targetId The targetId of the relationship, that is, the driven element\r\n * @return an instance of the specified class.\r\n */\r\n public static create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): T {\r\n return iModel.relationships.createInstance({ sourceId, targetId, classFullName: this.classFullName }) as T;\r\n }\r\n\r\n /** Insert a new instance of the Relationship using an explicit transaction.\r\n * @param txn The EditTxn used to perform the insert.\r\n * @param sourceId The sourceId of the relationship, that is, the driver element\r\n * @param targetId The targetId of the relationship, that is, the driven element\r\n * @return The Id of the inserted Relationship.\r\n * @beta\r\n */\r\n public static insert(txn: EditTxn, sourceId: Id64String, targetId: Id64String): Id64String;\r\n /** Insert a new instance of the Relationship.\r\n * @param iModel The iModel that will contain the relationship.\r\n * @param sourceId The sourceId of the relationship, that is, the driver element.\r\n * @param targetId The targetId of the relationship, that is, the driven element.\r\n * @return The Id of the inserted Relationship.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ElementRefersToElements.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\r\n */\r\n public static insert(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String;\r\n public static insert(txnOrIModel: EditTxn | IModelDb, sourceId: Id64String, targetId: Id64String): Id64String {\r\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\r\n const relationship = this.create(txn.iModel, sourceId, targetId);\r\n return txn.insertRelationship(relationship.toJSON());\r\n }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addElement(this.targetId);\r\n }\r\n}\r\n\r\n/** Relates a [[DrawingGraphic]] to the [[Element]] that it represents\r\n * @public\r\n */\r\nexport class DrawingGraphicRepresentsElement extends ElementRefersToElements {\r\n public static override get className(): string { return \"DrawingGraphicRepresentsElement\"; }\r\n}\r\n\r\n/** Relates a [[GraphicalElement3d]] to the [[Element]] that it represents\r\n * @public\r\n */\r\nexport class GraphicalElement3dRepresentsElement extends ElementRefersToElements {\r\n public static override get className(): string { return \"GraphicalElement3dRepresentsElement\"; }\r\n}\r\n\r\n/** Relates a [[SynchronizationConfigLink]] to N [[ExternalSource]] instances.\r\n * Each relationship instance represents an external source processed by the synchronization configuration.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class SynchronizationConfigProcessesSources extends ElementRefersToElements {\r\n public static override get className(): string { return \"SynchronizationConfigProcessesSources\"; }\r\n}\r\n\r\n/** Relates a [[SynchronizationConfigLink]] to *root* [[ExternalSource]] instances.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class SynchronizationConfigSpecifiesRootSources extends SynchronizationConfigProcessesSources {\r\n public static override get className(): string { return \"SynchronizationConfigSpecifiesRootSources\"; }\r\n}\r\n\r\n/** Properties that are common to all types of link table ECRelationships\r\n * @public\r\n */\r\nexport interface ElementGroupsMembersProps extends RelationshipProps {\r\n memberPriority: number;\r\n}\r\n\r\n/** An ElementRefersToElements relationship where one Element *groups* a set of other Elements.\r\n * @public\r\n */\r\nexport class ElementGroupsMembers extends ElementRefersToElements {\r\n public static override get className(): string { return \"ElementGroupsMembers\"; }\r\n public memberPriority: number;\r\n\r\n constructor(props: ElementGroupsMembersProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.memberPriority = props.memberPriority;\r\n }\r\n\r\n public static override create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, memberPriority: number = 0): T {\r\n const props: ElementGroupsMembersProps = { sourceId, targetId, memberPriority, classFullName: this.classFullName };\r\n return iModel.relationships.createInstance(props) as T;\r\n }\r\n}\r\n\r\n/** Relates a [[DefinitionGroup]] to its [[DefinitionElement]] members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.10\r\n * @public\r\n */\r\nexport class DefinitionGroupGroupsDefinitions extends ElementGroupsMembers {\r\n public static override get className(): string { return \"DefinitionGroupGroupsDefinitions\"; }\r\n}\r\n\r\n/** Represents group membership where the group Element (and its properties) impart information about the member Elements above mere membership.\r\n * Implies that properties of the group should be considered as properties of its members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.11\r\n * @public\r\n */\r\nexport class GroupImpartsToMembers extends ElementGroupsMembers {\r\n public static override get className(): string { return \"GroupImpartsToMembers\"; }\r\n}\r\n\r\n/** Relates an [[ExternalSourceGroup]] to its [[ExternalSource]] members.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class ExternalSourceGroupGroupsSources extends ElementGroupsMembers {\r\n public static override get className(): string { return \"ExternalSourceGroupGroupsSources\"; }\r\n}\r\n\r\n/** Properties that are common to all types of ElementDrivesElements\r\n * @beta\r\n */\r\nexport interface ElementDrivesElementProps extends RelationshipProps {\r\n status: number;\r\n priority: number;\r\n}\r\n\r\n/** A Relationship indicating that one Element *drives* another Element.\r\n * An ElementDrivesElement relationship defines a one-way \"driving\" relationship from the source to the target.\r\n * When the source of an ElementDrivesElement relationship changes, the ElementDrivesElement itself can get a callback, and both the source and target elements can get callbacks.\r\n * By inserting ElementDrivesElement relationships, an app can create and store an acyclic directed graph of dependencies between elements.\r\n *\r\n * # Defining dependencies\r\n * Create an ElementDrivesElement relationship to specify that the source element drives the target element.\r\n * For example, to specify that element e1 drives element e2, create a relationship between them like this:\r\n * ```ts\r\n * const ede = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * ede.insert();\r\n * ```\r\n * This creates a persistent relationship. The fact that e1 drives e2 is persisted in the iModel.\r\n *\r\n * # Defining dependency graphs\r\n * When you create multiple ElementDrivesElement relationships, you create a network of dependencies. The target of one may be the source of another.\r\n * A change in the content of an DgnElement can therefore trigger changes to many downstream elements.\r\n *\r\n * For example, to make element e1 drive element e2 and e2 drive another element, e3, create two relationships like this:\r\n * ```ts\r\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\r\n * ede12.insert();\r\n * ede23.insert();\r\n * ```\r\n * Those two relationships create this graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n * Where the \"-->\" is meant to represent a driving relationship.\r\n *\r\n * The order in which you create the relationships does not matter.\r\n * The graph indicates that e3 depends on e2 and e2 depends on e1.\r\n *\r\n * An ElementDrivesElement relationship is between one source element and one target element.\r\n * Many ElementDrivesElement relationships can point to a given element, and many can point out of it.\r\n * Thus, you can define many:many relationships.\r\n * For example:\r\n * ```ts\r\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\r\n * const ede112 = ElementDrivesElement.create(iModel, e11id, e2id);\r\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\r\n * const ede231 = ElementDrivesElement.create(iModel, e2id, e31id);\r\n * ede12.insert();\r\n * ede112.insert();\r\n * ede23.insert();\r\n * ede231.insert();\r\n * ```\r\n * Creates this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * e2 depends on both e1 and e11. e2 then drives e3 and e31.\r\n *\r\n * In an ElementDrivesElement dependency graph, the relationships are the \"edges\" and the Elements are the \"nodes\".\r\n * The following terms are used when referring to the elements (nodes) in a dependency graph:\r\n * * Inputs - The sources of all edges that point to the element. This includes all upstream elements that flow into the element.\r\n * * Outputs - The targets of all edges that point out of the element. This includes all downstream elements.\r\n *\r\n * # Subgraph Processing\r\n * When changes are made, only the part of the overall graph that is affected will be processed. So, for example,\r\n * suppose we have this graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n * If e1 changes, then the subgraph to be processed is equal to the full graph, as shown.\r\n *\r\n * If only e2 changes, then the subgraph to be processed is just:\r\n * ```\r\n * e2 --> e3\r\n * ```\r\n * If only e3 changes, then the subgraph consists of e3 by itself.\r\n *\r\n * Returning to the second example above, suppose we have this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * If e1 is changed, the affected subgraph is:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * If e2 is changed, the affected subgraph is:\r\n * ```\r\n * e3\r\n * /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * # Callbacks\r\n * Once the affected subgraph to process is found, it propagates changes through it by making callbacks.\r\n * Classes for both elements (nodes) and ElementDrivesElements relationships (edges) can receive callbacks.\r\n *\r\n * ## ElementDrivesElement Callbacks\r\n * The following callbacks are invoked on ElementDrivesElement relationship classes (edges):\r\n * * onRootChanged\r\n * * onDeletedDependency\r\n *\r\n * Note that these are static methods. Their default implementations do nothing.\r\n * To receive and act on these callbacks, a domain should define a subclass of ElementDrivesElement and use that to create relationships.\r\n * The subclass should then implement the callbacks that it would like to act on.\r\n *\r\n * A ElementDrivesElement subclass callback is expected to make changes to the output element only!\r\n *\r\n * ## Element Callbacks\r\n * The following callbacks are invoked on Element classes (nodes):\r\n * * Element.onBeforeOutputsHandled\r\n * * Element.onAllInputsHandled\r\n *\r\n * ## Order\r\n * Callbacks are invoked by BriefcaseDb.saveChanges.\r\n * They are invoked in dependency (topological) order: driving elements first, then driven elements.\r\n *\r\n * Each callback is invoked only once. No matter how many times a given element was changed during the transaction,\r\n * a callback such as ElementDrivesElement.onRootChanged will be invoked only once.\r\n * In the same way, no matter how many of its inputs were changed, a callback such as Element.onAllInputsHandled will be\r\n * invoked only once.\r\n *\r\n * For example, suppose we have a graph:\r\n * ```\r\n * e1 --> e2 --> e3\r\n * ```\r\n *\r\n * Suppose that e1 is directly modified. No callbacks are made at that time.\r\n * Later, when BriefcaseDb.saveChanges is called, the following callbacks are made, in order:\r\n * 1. Element.onBeforeOutputsHandled e1\r\n * 1. ElementDrivesElement.onRootChanged e1->e2\r\n * 1. Element.onAllInputsHandled e2\r\n * 1. ElementDrivesElement.onRootChanged e2->e3\r\n * 1. Element.onAllInputsHandled e3\r\n *\r\n * Suppose that e3 is modified directly and BriefcaseDb.saveChanges is called.\r\n * Since no input to a relationship was changed, the sub-graph will be empty, and no callbacks will be made.\r\n *\r\n * Returning to the second example above, suppose we have this graph:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * / \\\r\n * e11 e31\r\n * ```\r\n * If e1 is changed and BriefcaseDb.saveChanges is called, the subgraph is:\r\n * ```\r\n * e1 e3\r\n * \\ /\r\n * e2\r\n * \\\r\n * e31\r\n * ```\r\n * The callbacks are:\r\n * 1. Element.onBeforeOutputsHandled e1\r\n * 1. ElementDrivesElement.onRootChanged e1->e2\r\n * 1. Element.onAllInputsHandled e2\r\n * 1. ElementDrivesElement.onRootChanged e2->e3\r\n * 1. Element.onAllInputsHandled e3\r\n * 1. ElementDrivesElement.onRootChanged e2->e31\r\n * 1. Element.onAllInputsHandled e31\r\n *\r\n * (The ElementDrivesElement.)\r\n *\r\n * #Errors\r\n * Circular dependencies are not permitted. If a cycle is detected, that is treated as a fatal error. All ElementDrivesElement relationships\r\n * involved in a cycle will have their status set to 1, indicating a failure.\r\n *\r\n * A callback may call txnManager.reportError to reject an invalid change. It can classify the error as fatal or just a warning.\r\n * A callback make set the status value of an ElementDrivesElement instance to 1 to indicate a processing failure in that edge.\r\n *\r\n * After BriefcaseDb.saveChanges is called, an app should check db.txns.validationErrors and db.txns.hasFatalError to find out if graph-evaluation failed.\r\n *\r\n * @beta\r\n */\r\nexport class ElementDrivesElement extends Relationship {\r\n public static override get className(): string { return \"ElementDrivesElement\"; }\r\n /** Relationship status\r\n * * 0 indicates no errors. Set after a successful evaluation.\r\n * * 1 indicates that this driving relationship could not be evaluated. The callback itself can set this to indicate that it failed to process the input changes. Also, it is set if the relationship is part of a circular dependency.\r\n * * 0x80 The app or callback can set this to indicate to not propagate changes through this relationship.\r\n */\r\n public status: number;\r\n /** Affects the order in which relationships are processed in the case where two relationships have the same output. */\r\n public priority: number;\r\n\r\n protected constructor(props: ElementDrivesElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.status = props.status;\r\n this.priority = props.priority;\r\n }\r\n\r\n public static create<T extends ElementDrivesElement>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, priority: number = 0): T {\r\n const props: ElementDrivesElementProps = { sourceId, targetId, priority, status: 0, classFullName: this.classFullName };\r\n return iModel.relationships.createInstance(props) as T;\r\n }\r\n\r\n public override toJSON(): ElementDrivesElementProps {\r\n const props = super.toJSON() as ElementDrivesElementProps;\r\n props.status = this.status;\r\n props.priority = this.priority;\r\n return props;\r\n }\r\n\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addElement(this.targetId);\r\n }\r\n}\r\n\r\n/** The third (and last) possible link-table relationship base class in an iModel.\r\n * Has no external use, but is included for completeness of the [Entity.collectReferenceIds]($backend)\r\n * implementations for link-table relationships. Generating the types of the source and target automatically would require\r\n * coupling this package with ecschema-metadata which we do not want to do.\r\n * @internal\r\n */\r\nexport class ModelSelectorRefersToModels extends Relationship {\r\n public static override get className(): string { return \"ModelSelectorRefersToModels\"; }\r\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(this.sourceId);\r\n referenceIds.addModel(this.targetId);\r\n }\r\n}\r\n\r\n/** Manages [[Relationship]]s.\r\n * @public\r\n */\r\nexport class Relationships {\r\n private _iModel: IModelDb;\r\n\r\n /** @internal */\r\n public constructor(iModel: IModelDb) { this._iModel = iModel; }\r\n\r\n /** Create a new instance of a Relationship.\r\n * @param props The properties of the new Relationship.\r\n * @throws [[IModelError]] if there is a problem creating the Relationship.\r\n */\r\n public createInstance(props: RelationshipProps): Relationship { return this._iModel.constructEntity<Relationship>(props); }\r\n\r\n /** Check classFullName to ensure it is a link table relationship class. */\r\n private checkRelationshipClass(classFullName: string) {\r\n if (!this._iModel[_nativeDb].isLinkTableRelationship(classFullName.replace(\".\", \":\"))) {\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Class '${classFullName}' must be a relationship class and it should be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.`);\r\n }\r\n }\r\n\r\n /** Insert a new relationship instance into the iModel. The relationship provided must be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.\r\n * @param props The properties of the new relationship.\r\n * @returns The Id of the newly inserted relationship.\r\n * @note The id property of the props object is set as a side effect of this function.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.insertRelationship instead.\r\n */\r\n public insertInstance(props: RelationshipProps): Id64String {\r\n return this._iModel[_implicitTxn].insertRelationship(props);\r\n }\r\n\r\n /** Update the properties of an existing relationship instance in the iModel.\r\n * @param props the properties of the relationship instance to update. Any properties that are not present will be left unchanged.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.updateRelationship instead.\r\n */\r\n public updateInstance(props: RelationshipProps): void {\r\n this._iModel[_implicitTxn].updateRelationship(props);\r\n }\r\n\r\n /** Delete an Relationship instance from this iModel.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationship instead.\r\n */\r\n public deleteInstance(props: RelationshipProps): void {\r\n this._iModel[_implicitTxn].deleteRelationship(props);\r\n }\r\n\r\n /** Delete multiple Relationship instances from this iModel.\r\n * @param props The properties of the relationship instances to delete.\r\n * @remarks This method handles bulk deletion of relationships and supports mixed collections containing instances from different relationship classes.\r\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use EditTxn.deleteRelationships instead.\r\n */\r\n public deleteInstances(props: ReadonlyArray<RelationshipProps>): void {\r\n this._iModel[_implicitTxn].deleteRelationships(props);\r\n }\r\n\r\n /** Get the props of a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\r\n * @see tryGetInstanceProps\r\n */\r\n public getInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T {\r\n const relationshipProps = this.tryGetInstanceProps<T>(relClassFullName, criteria);\r\n if (undefined === relationshipProps) {\r\n throw new IModelError(IModelStatus.NotFound, \"Relationship not found\");\r\n }\r\n return relationshipProps;\r\n }\r\n\r\n /** Get the props of a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @returns The RelationshipProps or `undefined` if the relationship is not found.\r\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\r\n * @see getInstanceProps\r\n */\r\n public tryGetInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\r\n let props: T | undefined;\r\n if (typeof criteria === \"string\") {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE ecinstanceid=?`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, criteria);\r\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\r\n });\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, criteria.sourceId);\r\n stmt.bindId(2, criteria.targetId);\r\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\r\n });\r\n }\r\n if (undefined !== props) {\r\n props.classFullName = (props as any).className.replace(\".\", \":\");\r\n }\r\n return props;\r\n }\r\n\r\n /** Get a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\r\n * @see tryGetInstance\r\n */\r\n public getInstance<T extends Relationship>(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T {\r\n return this._iModel.constructEntity<T>(this.getInstanceProps(relClassSqlName, criteria));\r\n }\r\n\r\n /** Get a Relationship instance\r\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\r\n * @param criteria Either the relationship instanceId or the source and target Ids\r\n * @returns The relationship or `undefined` if the relationship is not found.\r\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\r\n * @see getInstance\r\n */\r\n public tryGetInstance<T extends Relationship>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\r\n const relationshipProps = this.tryGetInstanceProps<RelationshipProps>(relClassFullName, criteria);\r\n return undefined !== relationshipProps ? this._iModel.constructEntity<T>(relationshipProps) : undefined;\r\n }\r\n}\r\n"]}
@@ -65,7 +65,7 @@ export declare class SheetIndex extends InformationReferenceElement {
65
65
  * @throws [[IModelError]] if there is a problem inserting the SheetIndex
66
66
  */
67
67
  static insert(txn: EditTxn, modelId: Id64String, name: string): Id64String;
68
- /** @deprecated Use SheetIndex.insert(txn, ...) instead. */
68
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetIndex.insert(txn, ...) instead. */
69
69
  static insert(iModelDb: IModelDb, modelId: Id64String, name: string): Id64String;
70
70
  }
71
71
  /** The base class for all elements that can participate in a [[SheetIndex]] hierarchy.
@@ -101,7 +101,7 @@ export declare class SheetIndexFolder extends SheetIndexEntry {
101
101
  * @throws [[IModelError]] if unable to create the element.
102
102
  */
103
103
  static insert(txn: EditTxn, arg: Omit<SheetIndexEntryCreateArgs, "iModelDb">): Id64String;
104
- /** @deprecated Use SheetIndexFolder.insert(txn, ...) instead. */
104
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetIndexFolder.insert(txn, ...) instead. */
105
105
  static insert(arg: SheetIndexEntryCreateArgs): Id64String;
106
106
  }
107
107
  /** A node within one [[SheetIndex]] that incorporates another [[SheetIndex]] as a sub-tree.
@@ -124,7 +124,7 @@ export declare class SheetIndexReference extends SheetIndexEntry {
124
124
  * @throws [[IModelError]] if unable to create the element.
125
125
  */
126
126
  static insert(txn: EditTxn, arg: Omit<SheetIndexReferenceCreateArgs, "iModelDb">): Id64String;
127
- /** @deprecated Use SheetIndexReference.insert(txn, ...) instead. */
127
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetIndexReference.insert(txn, ...) instead. */
128
128
  static insert(arg: SheetIndexReferenceCreateArgs): Id64String;
129
129
  /** @alpha */
130
130
  protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
@@ -149,7 +149,7 @@ export declare class SheetReference extends SheetIndexEntry {
149
149
  * @throws [[IModelError]] if unable to create the element.
150
150
  */
151
151
  static insert(txn: EditTxn, arg: Omit<SheetReferenceCreateArgs, "iModelDb">): Id64String;
152
- /** @deprecated Use SheetReference.insert(txn, ...) instead. */
152
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetReference.insert(txn, ...) instead. */
153
153
  static insert(arg: SheetReferenceCreateArgs): Id64String;
154
154
  /** @alpha */
155
155
  protected collectReferenceIds(referenceIds: EntityReferenceSet): void;