@itwin/core-backend 5.13.0-dev.9 → 5.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  3. package/lib/cjs/BriefcaseManager.js +11 -5
  4. package/lib/cjs/BriefcaseManager.js.map +1 -1
  5. package/lib/cjs/Category.d.ts +4 -4
  6. package/lib/cjs/Category.js.map +1 -1
  7. package/lib/cjs/ChangesetECAdaptor.d.ts +5 -0
  8. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  9. package/lib/cjs/ChangesetECAdaptor.js +13 -3
  10. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  11. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  12. package/lib/cjs/CloudSqlite.js +9 -2
  13. package/lib/cjs/CloudSqlite.js.map +1 -1
  14. package/lib/cjs/CodeSpecs.d.ts +3 -3
  15. package/lib/cjs/CodeSpecs.js.map +1 -1
  16. package/lib/cjs/DisplayStyle.d.ts +2 -2
  17. package/lib/cjs/DisplayStyle.js.map +1 -1
  18. package/lib/cjs/ECDb.d.ts.map +1 -1
  19. package/lib/cjs/ECDb.js +1 -0
  20. package/lib/cjs/ECDb.js.map +1 -1
  21. package/lib/cjs/EditTxn.d.ts.map +1 -1
  22. package/lib/cjs/EditTxn.js +1 -0
  23. package/lib/cjs/EditTxn.js.map +1 -1
  24. package/lib/cjs/Element.d.ts +48 -12
  25. package/lib/cjs/Element.d.ts.map +1 -1
  26. package/lib/cjs/Element.js +120 -24
  27. package/lib/cjs/Element.js.map +1 -1
  28. package/lib/cjs/IModelDb.d.ts +72 -22
  29. package/lib/cjs/IModelDb.d.ts.map +1 -1
  30. package/lib/cjs/IModelDb.js +226 -89
  31. package/lib/cjs/IModelDb.js.map +1 -1
  32. package/lib/cjs/Model.d.ts +5 -5
  33. package/lib/cjs/Model.d.ts.map +1 -1
  34. package/lib/cjs/Model.js.map +1 -1
  35. package/lib/cjs/PropertyStore.js +1 -1
  36. package/lib/cjs/PropertyStore.js.map +1 -1
  37. package/lib/cjs/SchemaSync.d.ts +158 -22
  38. package/lib/cjs/SchemaSync.d.ts.map +1 -1
  39. package/lib/cjs/SchemaSync.js +417 -76
  40. package/lib/cjs/SchemaSync.js.map +1 -1
  41. package/lib/cjs/SynchronousChannel.d.ts +72 -0
  42. package/lib/cjs/SynchronousChannel.d.ts.map +1 -0
  43. package/lib/cjs/SynchronousChannel.js +11 -0
  44. package/lib/cjs/SynchronousChannel.js.map +1 -0
  45. package/lib/cjs/Texture.d.ts +1 -1
  46. package/lib/cjs/Texture.js.map +1 -1
  47. package/lib/cjs/TxnManager.d.ts +44 -4
  48. package/lib/cjs/TxnManager.d.ts.map +1 -1
  49. package/lib/cjs/TxnManager.js +80 -19
  50. package/lib/cjs/TxnManager.js.map +1 -1
  51. package/lib/cjs/ViewDefinition.d.ts +6 -6
  52. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  53. package/lib/cjs/ViewDefinition.js.map +1 -1
  54. package/lib/cjs/annotations/LeaderGeometry.d.ts +22 -7
  55. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  56. package/lib/cjs/annotations/LeaderGeometry.js +104 -36
  57. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  58. package/lib/cjs/annotations/TextAnnotationElement.d.ts +1 -1
  59. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  60. package/lib/cjs/annotations/TextAnnotationElement.js +25 -10
  61. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  62. package/lib/cjs/core-backend.d.ts +1 -0
  63. package/lib/cjs/core-backend.d.ts.map +1 -1
  64. package/lib/cjs/core-backend.js +1 -0
  65. package/lib/cjs/core-backend.js.map +1 -1
  66. package/lib/cjs/internal/IntegrityCheck.d.ts +22 -0
  67. package/lib/cjs/internal/IntegrityCheck.d.ts.map +1 -1
  68. package/lib/cjs/internal/IntegrityCheck.js +13 -0
  69. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  70. package/lib/cjs/internal/NoReservations.d.ts +6 -0
  71. package/lib/cjs/internal/NoReservations.d.ts.map +1 -0
  72. package/lib/cjs/internal/NoReservations.js +21 -0
  73. package/lib/cjs/internal/NoReservations.js.map +1 -0
  74. package/lib/cjs/internal/SchemaSyncReservations.d.ts +4 -0
  75. package/lib/cjs/internal/SchemaSyncReservations.d.ts.map +1 -0
  76. package/lib/cjs/internal/SchemaSyncReservations.js +128 -0
  77. package/lib/cjs/internal/SchemaSyncReservations.js.map +1 -0
  78. package/lib/cjs/internal/Symbols.d.ts +1 -0
  79. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  80. package/lib/cjs/internal/Symbols.js +2 -1
  81. package/lib/cjs/internal/Symbols.js.map +1 -1
  82. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  83. package/lib/esm/BriefcaseManager.js +11 -5
  84. package/lib/esm/BriefcaseManager.js.map +1 -1
  85. package/lib/esm/Category.d.ts +4 -4
  86. package/lib/esm/Category.js.map +1 -1
  87. package/lib/esm/ChangesetECAdaptor.d.ts +5 -0
  88. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  89. package/lib/esm/ChangesetECAdaptor.js +13 -3
  90. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  91. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  92. package/lib/esm/CloudSqlite.js +10 -3
  93. package/lib/esm/CloudSqlite.js.map +1 -1
  94. package/lib/esm/CodeSpecs.d.ts +3 -3
  95. package/lib/esm/CodeSpecs.js.map +1 -1
  96. package/lib/esm/DisplayStyle.d.ts +2 -2
  97. package/lib/esm/DisplayStyle.js.map +1 -1
  98. package/lib/esm/ECDb.d.ts.map +1 -1
  99. package/lib/esm/ECDb.js +1 -0
  100. package/lib/esm/ECDb.js.map +1 -1
  101. package/lib/esm/EditTxn.d.ts.map +1 -1
  102. package/lib/esm/EditTxn.js +1 -0
  103. package/lib/esm/EditTxn.js.map +1 -1
  104. package/lib/esm/Element.d.ts +48 -12
  105. package/lib/esm/Element.d.ts.map +1 -1
  106. package/lib/esm/Element.js +121 -25
  107. package/lib/esm/Element.js.map +1 -1
  108. package/lib/esm/IModelDb.d.ts +72 -22
  109. package/lib/esm/IModelDb.d.ts.map +1 -1
  110. package/lib/esm/IModelDb.js +227 -90
  111. package/lib/esm/IModelDb.js.map +1 -1
  112. package/lib/esm/Model.d.ts +5 -5
  113. package/lib/esm/Model.d.ts.map +1 -1
  114. package/lib/esm/Model.js.map +1 -1
  115. package/lib/esm/PropertyStore.js +1 -1
  116. package/lib/esm/PropertyStore.js.map +1 -1
  117. package/lib/esm/SchemaSync.d.ts +158 -22
  118. package/lib/esm/SchemaSync.d.ts.map +1 -1
  119. package/lib/esm/SchemaSync.js +419 -78
  120. package/lib/esm/SchemaSync.js.map +1 -1
  121. package/lib/esm/SynchronousChannel.d.ts +72 -0
  122. package/lib/esm/SynchronousChannel.d.ts.map +1 -0
  123. package/lib/esm/SynchronousChannel.js +9 -0
  124. package/lib/esm/SynchronousChannel.js.map +1 -0
  125. package/lib/esm/Texture.d.ts +1 -1
  126. package/lib/esm/Texture.js.map +1 -1
  127. package/lib/esm/TxnManager.d.ts +44 -4
  128. package/lib/esm/TxnManager.d.ts.map +1 -1
  129. package/lib/esm/TxnManager.js +81 -20
  130. package/lib/esm/TxnManager.js.map +1 -1
  131. package/lib/esm/ViewDefinition.d.ts +6 -6
  132. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  133. package/lib/esm/ViewDefinition.js.map +1 -1
  134. package/lib/esm/annotations/LeaderGeometry.d.ts +22 -7
  135. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  136. package/lib/esm/annotations/LeaderGeometry.js +104 -36
  137. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  138. package/lib/esm/annotations/TextAnnotationElement.d.ts +1 -1
  139. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  140. package/lib/esm/annotations/TextAnnotationElement.js +25 -10
  141. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  142. package/lib/esm/core-backend.d.ts +1 -0
  143. package/lib/esm/core-backend.d.ts.map +1 -1
  144. package/lib/esm/core-backend.js +1 -0
  145. package/lib/esm/core-backend.js.map +1 -1
  146. package/lib/esm/internal/IntegrityCheck.d.ts +22 -0
  147. package/lib/esm/internal/IntegrityCheck.d.ts.map +1 -1
  148. package/lib/esm/internal/IntegrityCheck.js +13 -0
  149. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  150. package/lib/esm/internal/NoReservations.d.ts +6 -0
  151. package/lib/esm/internal/NoReservations.d.ts.map +1 -0
  152. package/lib/esm/internal/NoReservations.js +18 -0
  153. package/lib/esm/internal/NoReservations.js.map +1 -0
  154. package/lib/esm/internal/SchemaSyncReservations.d.ts +4 -0
  155. package/lib/esm/internal/SchemaSyncReservations.d.ts.map +1 -0
  156. package/lib/esm/internal/SchemaSyncReservations.js +125 -0
  157. package/lib/esm/internal/SchemaSyncReservations.js.map +1 -0
  158. package/lib/esm/internal/Symbols.d.ts +1 -0
  159. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  160. package/lib/esm/internal/Symbols.js +1 -0
  161. package/lib/esm/internal/Symbols.js.map +1 -1
  162. package/lib/esm/test/IModelTestUtils.d.ts +1 -1
  163. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  164. package/lib/esm/test/IModelTestUtils.js +8 -3
  165. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  166. package/lib/esm/test/annotations/LeaderGeometry.test.js +178 -2
  167. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  168. package/lib/esm/test/annotations/TextAnnotation.test.js +48 -18
  169. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  170. package/lib/esm/test/ecdb/ECSqlStatement.test.js +177 -0
  171. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  172. package/lib/esm/test/ecdb/QueryReaders.test.js +2 -16
  173. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  174. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +2 -2
  175. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  176. package/lib/esm/test/element/ElementRoundTrip.test.js +80 -2
  177. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  178. package/lib/esm/test/hubaccess/Rebase.test.js +3 -1
  179. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  180. package/lib/esm/test/hubaccess/SemanticRebase.test.js +29 -28
  181. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  182. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.d.ts +3 -0
  183. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.d.ts.map +1 -0
  184. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.js +15 -0
  185. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.js.map +1 -0
  186. package/lib/esm/test/imodel/IModelECSql.test.d.ts +2 -0
  187. package/lib/esm/test/imodel/IModelECSql.test.d.ts.map +1 -0
  188. package/lib/esm/test/imodel/IModelECSql.test.js +367 -0
  189. package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -0
  190. package/lib/esm/test/imodel/IModelElements.test.d.ts +2 -0
  191. package/lib/esm/test/imodel/IModelElements.test.d.ts.map +1 -0
  192. package/lib/esm/test/imodel/IModelElements.test.js +969 -0
  193. package/lib/esm/test/imodel/IModelElements.test.js.map +1 -0
  194. package/lib/esm/test/imodel/IModelGeolocation.test.d.ts +2 -0
  195. package/lib/esm/test/imodel/IModelGeolocation.test.d.ts.map +1 -0
  196. package/lib/esm/test/imodel/IModelGeolocation.test.js +539 -0
  197. package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -0
  198. package/lib/esm/test/imodel/IModelLifecycle.test.d.ts +2 -0
  199. package/lib/esm/test/imodel/IModelLifecycle.test.d.ts.map +1 -0
  200. package/lib/esm/test/imodel/IModelLifecycle.test.js +499 -0
  201. package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -0
  202. package/lib/esm/test/imodel/IModelMetadata.test.d.ts +2 -0
  203. package/lib/esm/test/imodel/IModelMetadata.test.d.ts.map +1 -0
  204. package/lib/esm/test/imodel/IModelMetadata.test.js +274 -0
  205. package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -0
  206. package/lib/esm/test/imodel/IModelModels.test.d.ts +2 -0
  207. package/lib/esm/test/imodel/IModelModels.test.d.ts.map +1 -0
  208. package/lib/esm/test/imodel/IModelModels.test.js +357 -0
  209. package/lib/esm/test/imodel/IModelModels.test.js.map +1 -0
  210. package/lib/esm/test/imodel/IModelRelationships.test.d.ts +2 -0
  211. package/lib/esm/test/imodel/IModelRelationships.test.d.ts.map +1 -0
  212. package/lib/esm/test/imodel/IModelRelationships.test.js +407 -0
  213. package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -0
  214. package/lib/esm/test/imodel/IModelTestFixtures.d.ts +53 -0
  215. package/lib/esm/test/imodel/IModelTestFixtures.d.ts.map +1 -0
  216. package/lib/esm/test/imodel/IModelTestFixtures.js +107 -0
  217. package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -0
  218. package/lib/esm/test/imodel/IModelViews.test.d.ts +2 -0
  219. package/lib/esm/test/imodel/IModelViews.test.d.ts.map +1 -0
  220. package/lib/esm/test/imodel/IModelViews.test.js +199 -0
  221. package/lib/esm/test/imodel/IModelViews.test.js.map +1 -0
  222. package/lib/esm/test/index.d.ts +0 -1
  223. package/lib/esm/test/index.d.ts.map +1 -1
  224. package/lib/esm/test/index.js +0 -1
  225. package/lib/esm/test/index.js.map +1 -1
  226. package/lib/esm/test/standalone/ChangesetReader.test.js +8 -26
  227. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  228. package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts +2 -0
  229. package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts.map +1 -0
  230. package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js +263 -0
  231. package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js.map +1 -0
  232. package/lib/esm/test/standalone/GeometryStream.test.js +1 -3
  233. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  234. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  235. package/lib/esm/test/standalone/IModelWrite.test.js +78 -1
  236. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  237. package/lib/esm/test/standalone/IntegrityCheck.test.js +29 -10
  238. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  239. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +23 -0
  240. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  241. package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts +2 -0
  242. package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts.map +1 -0
  243. package/lib/esm/test/standalone/SchemaSyncDb.test.js +201 -0
  244. package/lib/esm/test/standalone/SchemaSyncDb.test.js.map +1 -0
  245. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts +2 -0
  246. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts.map +1 -0
  247. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js +460 -0
  248. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js.map +1 -0
  249. package/lib/esm/test/standalone/SnapshotDb.test.js +1 -0
  250. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  251. package/lib/esm/test/standalone/TxnManager.test.js +108 -8
  252. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  253. package/package.json +13 -16
  254. package/lib/esm/test/RevisionUtility.d.ts +0 -33
  255. package/lib/esm/test/RevisionUtility.d.ts.map +0 -1
  256. package/lib/esm/test/RevisionUtility.js +0 -52
  257. package/lib/esm/test/RevisionUtility.js.map +0 -1
  258. package/lib/esm/test/imodel/IModel.test.d.ts +0 -2
  259. package/lib/esm/test/imodel/IModel.test.d.ts.map +0 -1
  260. package/lib/esm/test/imodel/IModel.test.js +0 -3277
  261. package/lib/esm/test/imodel/IModel.test.js.map +0 -1
@@ -126,6 +126,10 @@ class Element extends Entity_1.Entity {
126
126
  if (props.parent) // inserting requires shared lock on parent, if present
127
127
  iModel.locks.checkSharedLock(props.parent.id, "parent", operation);
128
128
  iModel.codeService?.verifyCode(arg);
129
+ // Any element inserted with an explicitly-set federationGuid must first be reserved (when SchemaSync is enabled),
130
+ // unless the caller explicitly opts out. See [[SynchronousChannel.Reservations]].
131
+ if (props.federationGuid !== undefined && !arg.options?.skipReservationCheck)
132
+ iModel.reservations[Symbols_1._onReservedElementInsert](arg);
129
133
  }
130
134
  /** Called after a new Element was inserted.
131
135
  * @note If you override this method, you must call super.
@@ -341,7 +345,7 @@ class Element extends Entity_1.Entity {
341
345
  * * none of the element's outputs have been processed.
342
346
  * @see [[ElementDrivesElement]] for more on element dependency graphs.
343
347
  * @beta
344
- * @deprecated in 5.9.0 - will not be removed until after 2026-08-04. Use onBeforeOutputsHandledArg instead.
348
+ * @deprecated in 5.9.0 - might be removed in next major version. Use onBeforeOutputsHandledArg instead.
345
349
  */
346
350
  static onBeforeOutputsHandled(_id, _iModel) { }
347
351
  /** Called on an element in a graph after all of its inputs have been processed and before its outputs are processed.
@@ -367,7 +371,7 @@ class Element extends Entity_1.Entity {
367
371
  * This method is not called if none of the element's inputs were changed.
368
372
  * @see [[ElementDrivesElement]] for more on element dependency graphs.
369
373
  * @beta
370
- * @deprecated in 5.9.0 - will not be removed until after 2026-08-04. Use onAllInputsHandledArg instead.
374
+ * @deprecated in 5.9.0 - might be removed in next major version. Use onAllInputsHandledArg instead.
371
375
  */
372
376
  static onAllInputsHandled(_id, _iModel) { }
373
377
  toJSON() {
@@ -551,17 +555,40 @@ exports.GeometricElement = GeometricElement;
551
555
  */
552
556
  class GeometricElement3d extends GeometricElement {
553
557
  static get className() { return "GeometricElement3d"; }
554
- placement;
558
+ _placement;
559
+ // Snapshot the default placement so nested mutations remain serializable without serializing an untouched absent placement.
560
+ _initialPlacement;
561
+ _hasPlacement;
555
562
  typeDefinition;
556
563
  constructor(props, iModel) {
557
564
  super(props, iModel);
558
- this.placement = core_common_1.Placement3d.fromJSON(props.placement);
565
+ this._placement = core_common_1.Placement3d.fromJSON(props.placement);
566
+ this._initialPlacement = core_common_1.Placement3d.fromJSON(props.placement);
567
+ this._hasPlacement = props.placement !== undefined;
559
568
  if (props.typeDefinition)
560
569
  this.typeDefinition = core_common_1.TypeDefinition.fromJSON(props.typeDefinition);
561
570
  }
571
+ get placement() { return this._placement; }
572
+ set placement(value) {
573
+ this._placement = value;
574
+ this._hasPlacement = true;
575
+ }
562
576
  toJSON() {
563
577
  const val = super.toJSON();
564
- val.placement = this.placement;
578
+ const placementChanged = this._placement.origin.x !== this._initialPlacement.origin.x
579
+ || this._placement.origin.y !== this._initialPlacement.origin.y
580
+ || this._placement.origin.z !== this._initialPlacement.origin.z
581
+ || this._placement.angles.yaw.radians !== this._initialPlacement.angles.yaw.radians
582
+ || this._placement.angles.pitch.radians !== this._initialPlacement.angles.pitch.radians
583
+ || this._placement.angles.roll.radians !== this._initialPlacement.angles.roll.radians
584
+ || this._placement.bbox.low.x !== this._initialPlacement.bbox.low.x
585
+ || this._placement.bbox.low.y !== this._initialPlacement.bbox.low.y
586
+ || this._placement.bbox.low.z !== this._initialPlacement.bbox.low.z
587
+ || this._placement.bbox.high.x !== this._initialPlacement.bbox.high.x
588
+ || this._placement.bbox.high.y !== this._initialPlacement.bbox.high.y
589
+ || this._placement.bbox.high.z !== this._initialPlacement.bbox.high.z;
590
+ if (this._hasPlacement || placementChanged)
591
+ val.placement = this._placement;
565
592
  if (undefined !== this.typeDefinition)
566
593
  val.typeDefinition = this.typeDefinition;
567
594
  return val;
@@ -598,26 +625,31 @@ class GeometricElement3d extends GeometricElement {
598
625
  const elProps = super.deserialize(props);
599
626
  const instance = props.row;
600
627
  elProps.category = instance.category.id;
601
- const origin = instance.origin ? [instance.origin.x, instance.origin.y, instance.origin.z] : [0, 0, 0];
602
628
  let bbox;
603
- if ("bBoxHigh" in instance && instance.bBoxHigh !== undefined && "bBoxLow" in instance && instance.bBoxLow !== undefined) {
629
+ if ("bBoxHigh" in instance && instance.bBoxHigh !== undefined && instance.bBoxHigh !== null && "bBoxLow" in instance && instance.bBoxLow !== undefined && instance.bBoxLow !== null) {
604
630
  bbox = {
605
631
  low: [instance.bBoxLow.x, instance.bBoxLow.y, instance.bBoxLow.z],
606
632
  high: [instance.bBoxHigh.x, instance.bBoxHigh.y, instance.bBoxHigh.z],
607
633
  };
608
634
  }
609
- elProps.placement = {
610
- origin,
611
- angles: core_geometry_1.YawPitchRollAngles.createDegrees(instance.yaw ?? 0, instance.pitch ?? 0, instance.roll ?? 0).toJSON(),
612
- bbox
613
- };
635
+ if (instance.origin !== undefined && instance.origin !== null) {
636
+ elProps.placement = {
637
+ origin: [instance.origin.x, instance.origin.y, instance.origin.z],
638
+ angles: core_geometry_1.YawPitchRollAngles.createDegrees(instance.yaw ?? 0, instance.pitch ?? 0, instance.roll ?? 0).toJSON(),
639
+ bbox
640
+ };
641
+ }
614
642
  if (instance.geometryStream) {
615
- elProps.geom = props.iModel[Symbols_1._nativeDb].convertOrUpdateGeometrySource({
643
+ const source = props.iModel[Symbols_1._nativeDb].convertOrUpdateGeometrySource({
616
644
  is2d: false,
617
645
  geom: instance.geometryStream,
618
646
  placement: elProps.placement,
619
647
  categoryId: elProps.category
620
- }, "GeometryStreamProps", props.options?.element ?? {}).geom;
648
+ }, "GeometryStreamProps", props.options?.element ?? {});
649
+ elProps.geom = source.geom;
650
+ if (source.placement) {
651
+ elProps.placement = source.placement;
652
+ }
621
653
  }
622
654
  if (instance.typeDefinition) {
623
655
  elProps.typeDefinition = instance.typeDefinition;
@@ -703,17 +735,35 @@ exports.GraphicalElement3d = GraphicalElement3d;
703
735
  */
704
736
  class GeometricElement2d extends GeometricElement {
705
737
  static get className() { return "GeometricElement2d"; }
706
- placement;
738
+ _placement;
739
+ // Snapshot the default placement so nested mutations remain serializable without serializing an untouched absent placement.
740
+ _initialPlacement;
741
+ _hasPlacement;
707
742
  typeDefinition;
708
743
  constructor(props, iModel) {
709
744
  super(props, iModel);
710
- this.placement = core_common_1.Placement2d.fromJSON(props.placement);
745
+ this._placement = core_common_1.Placement2d.fromJSON(props.placement);
746
+ this._initialPlacement = core_common_1.Placement2d.fromJSON(props.placement);
747
+ this._hasPlacement = props.placement !== undefined;
711
748
  if (props.typeDefinition)
712
749
  this.typeDefinition = core_common_1.TypeDefinition.fromJSON(props.typeDefinition);
713
750
  }
751
+ get placement() { return this._placement; }
752
+ set placement(value) {
753
+ this._placement = value;
754
+ this._hasPlacement = true;
755
+ }
714
756
  toJSON() {
715
757
  const val = super.toJSON();
716
- val.placement = this.placement;
758
+ const placementChanged = this._placement.origin.x !== this._initialPlacement.origin.x
759
+ || this._placement.origin.y !== this._initialPlacement.origin.y
760
+ || this._placement.angle.radians !== this._initialPlacement.angle.radians
761
+ || this._placement.bbox.low.x !== this._initialPlacement.bbox.low.x
762
+ || this._placement.bbox.low.y !== this._initialPlacement.bbox.low.y
763
+ || this._placement.bbox.high.x !== this._initialPlacement.bbox.high.x
764
+ || this._placement.bbox.high.y !== this._initialPlacement.bbox.high.y;
765
+ if (this._hasPlacement || placementChanged)
766
+ val.placement = this._placement;
717
767
  if (undefined !== this.typeDefinition)
718
768
  val.typeDefinition = this.typeDefinition;
719
769
  return val;
@@ -743,19 +793,20 @@ class GeometricElement2d extends GeometricElement {
743
793
  const elProps = super.deserialize(props);
744
794
  const instance = props.row;
745
795
  elProps.category = instance.category.id;
746
- const origin = instance.origin ? [instance.origin.x, instance.origin.y] : [0, 0];
747
796
  let bbox;
748
- if ("bBoxHigh" in instance && instance.bBoxHigh !== undefined && "bBoxLow" in instance && instance.bBoxLow !== undefined) {
797
+ if ("bBoxHigh" in instance && instance.bBoxHigh !== undefined && instance.bBoxHigh !== null && "bBoxLow" in instance && instance.bBoxLow !== undefined && instance.bBoxLow !== null) {
749
798
  bbox = {
750
799
  low: [instance.bBoxLow.x, instance.bBoxLow.y],
751
800
  high: [instance.bBoxHigh.x, instance.bBoxHigh.y],
752
801
  };
753
802
  }
754
- elProps.placement = {
755
- origin,
756
- angle: instance.rotation,
757
- bbox,
758
- };
803
+ if (instance.origin !== undefined && instance.origin !== null) {
804
+ elProps.placement = {
805
+ origin: [instance.origin.x, instance.origin.y],
806
+ angle: instance.rotation,
807
+ bbox,
808
+ };
809
+ }
759
810
  if (instance.geometryStream) {
760
811
  const source = props.iModel[Symbols_1._nativeDb].convertOrUpdateGeometrySource({
761
812
  is2d: true,
@@ -1269,6 +1320,51 @@ exports.DefinitionElement = DefinitionElement;
1269
1320
  */
1270
1321
  class DefinitionSet extends DefinitionElement {
1271
1322
  static get className() { return "DefinitionSet"; }
1323
+ /** The Rank of a DefinitionSet indicates how it was created, who is aware of it and where it can be used.
1324
+ * @beta
1325
+ */
1326
+ rank;
1327
+ constructor(props, iModel) {
1328
+ super(props, iModel);
1329
+ this.rank = props.rank;
1330
+ }
1331
+ /**
1332
+ * DefinitionSet custom HandledProps include 'rank'.
1333
+ * @inheritdoc
1334
+ * @beta
1335
+ */
1336
+ static _customHandledProps = [
1337
+ { propertyName: "rank", source: "Class" },
1338
+ ];
1339
+ /**
1340
+ * DefinitionSet deserializes 'rank'.
1341
+ * @inheritdoc
1342
+ * @beta
1343
+ */
1344
+ static deserialize(props) {
1345
+ const elProps = super.deserialize(props);
1346
+ if (props.row.rank !== undefined)
1347
+ elProps.rank = core_bentley_1.JsonUtils.asInt(props.row.rank);
1348
+ return elProps;
1349
+ }
1350
+ /**
1351
+ * DefinitionSet serializes 'rank'.
1352
+ * @inheritdoc
1353
+ * @beta
1354
+ */
1355
+ static serialize(props, iModel) {
1356
+ const inst = super.serialize(props, iModel);
1357
+ if (undefined !== props.rank) {
1358
+ inst.rank = props.rank;
1359
+ }
1360
+ return inst;
1361
+ }
1362
+ toJSON() {
1363
+ const val = super.toJSON();
1364
+ if (undefined !== this.rank)
1365
+ val.rank = this.rank;
1366
+ return val;
1367
+ }
1272
1368
  }
1273
1369
  exports.DefinitionSet = DefinitionSet;
1274
1370
  /** A DefinitionContainer exclusively owns a set of DefinitionElements contained within its sub-model (of type DefinitionModel).