@itwin/core-backend 5.9.0-dev.9 → 5.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +14 -62
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +29 -159
  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 +9 -1
  9. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  10. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  11. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  12. package/lib/cjs/ChangesetReader.d.ts +186 -0
  13. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReader.js +372 -0
  15. package/lib/cjs/ChangesetReader.js.map +1 -0
  16. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  17. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  18. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  19. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  20. package/lib/cjs/CloudSqlite.d.ts +1 -1
  21. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  22. package/lib/cjs/CloudSqlite.js +68 -13
  23. package/lib/cjs/CloudSqlite.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.d.ts +3 -3
  25. package/lib/cjs/CodeSpecs.js.map +1 -1
  26. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.d.ts +2 -2
  29. package/lib/cjs/DisplayStyle.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  31. package/lib/cjs/ECSqlStatement.js.map +1 -1
  32. package/lib/cjs/EditTxn.d.ts +55 -1
  33. package/lib/cjs/EditTxn.d.ts.map +1 -1
  34. package/lib/cjs/EditTxn.js +43 -1
  35. package/lib/cjs/EditTxn.js.map +1 -1
  36. package/lib/cjs/Element.d.ts +79 -10
  37. package/lib/cjs/Element.d.ts.map +1 -1
  38. package/lib/cjs/Element.js +38 -2
  39. package/lib/cjs/Element.js.map +1 -1
  40. package/lib/cjs/ElementAspect.d.ts +1 -1
  41. package/lib/cjs/ElementAspect.js.map +1 -1
  42. package/lib/cjs/ElementGraphics.js.map +1 -1
  43. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/ExternalSource.d.ts +2 -2
  46. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  47. package/lib/cjs/ExternalSource.js.map +1 -1
  48. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  49. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  50. package/lib/cjs/GeographicCRSServices.js +13 -4
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/IModelDb.d.ts +31 -23
  53. package/lib/cjs/IModelDb.d.ts.map +1 -1
  54. package/lib/cjs/IModelDb.js +44 -25
  55. package/lib/cjs/IModelDb.js.map +1 -1
  56. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  57. package/lib/cjs/IModelJsFs.d.ts +2 -0
  58. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  59. package/lib/cjs/IModelJsFs.js +14 -0
  60. package/lib/cjs/IModelJsFs.js.map +1 -1
  61. package/lib/cjs/IpcHost.d.ts.map +1 -1
  62. package/lib/cjs/IpcHost.js +20 -9
  63. package/lib/cjs/IpcHost.js.map +1 -1
  64. package/lib/cjs/LineStyle.d.ts +6 -6
  65. package/lib/cjs/LineStyle.js.map +1 -1
  66. package/lib/cjs/Material.d.ts +1 -1
  67. package/lib/cjs/Material.js.map +1 -1
  68. package/lib/cjs/Model.d.ts +40 -6
  69. package/lib/cjs/Model.d.ts.map +1 -1
  70. package/lib/cjs/Model.js +24 -0
  71. package/lib/cjs/Model.js.map +1 -1
  72. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  73. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  74. package/lib/cjs/PartialChangeUnifier.js +234 -0
  75. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  76. package/lib/cjs/Relationship.d.ts +10 -10
  77. package/lib/cjs/Relationship.js +6 -6
  78. package/lib/cjs/Relationship.js.map +1 -1
  79. package/lib/cjs/SheetIndex.d.ts +4 -4
  80. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  81. package/lib/cjs/SheetIndex.js.map +1 -1
  82. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  83. package/lib/cjs/SqliteChangesetReader.js +1 -1
  84. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  85. package/lib/cjs/Texture.d.ts +1 -1
  86. package/lib/cjs/Texture.js.map +1 -1
  87. package/lib/cjs/TxnManager.d.ts +17 -0
  88. package/lib/cjs/TxnManager.d.ts.map +1 -1
  89. package/lib/cjs/TxnManager.js +120 -13
  90. package/lib/cjs/TxnManager.js.map +1 -1
  91. package/lib/cjs/ViewDefinition.d.ts +25 -13
  92. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  93. package/lib/cjs/ViewDefinition.js +77 -25
  94. package/lib/cjs/ViewDefinition.js.map +1 -1
  95. package/lib/cjs/ViewStore.d.ts.map +1 -1
  96. package/lib/cjs/ViewStore.js +63 -21
  97. package/lib/cjs/ViewStore.js.map +1 -1
  98. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  99. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  100. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  101. package/lib/cjs/core-backend.d.ts +3 -0
  102. package/lib/cjs/core-backend.d.ts.map +1 -1
  103. package/lib/cjs/core-backend.js +3 -0
  104. package/lib/cjs/core-backend.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  106. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  107. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  108. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  109. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  110. package/lib/cjs/domains/GenericElements.js.map +1 -1
  111. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  112. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  113. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  114. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  115. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  116. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  117. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  118. package/lib/cjs/workspace/Settings.d.ts +6 -4
  119. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  120. package/lib/cjs/workspace/Settings.js.map +1 -1
  121. package/lib/esm/BriefcaseManager.d.ts +14 -62
  122. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  123. package/lib/esm/BriefcaseManager.js +30 -160
  124. package/lib/esm/BriefcaseManager.js.map +1 -1
  125. package/lib/esm/Category.d.ts +4 -4
  126. package/lib/esm/Category.js.map +1 -1
  127. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  128. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  129. package/lib/esm/ChangesetECAdaptor.js +7 -1
  130. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  131. package/lib/esm/ChangesetReader.d.ts +186 -0
  132. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  133. package/lib/esm/ChangesetReader.js +368 -0
  134. package/lib/esm/ChangesetReader.js.map +1 -0
  135. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  136. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  137. package/lib/esm/ChangesetReaderTypes.js +20 -0
  138. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  139. package/lib/esm/CloudSqlite.d.ts +1 -1
  140. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  141. package/lib/esm/CloudSqlite.js +69 -14
  142. package/lib/esm/CloudSqlite.js.map +1 -1
  143. package/lib/esm/CodeSpecs.d.ts +3 -3
  144. package/lib/esm/CodeSpecs.js.map +1 -1
  145. package/lib/esm/ConcurrentQuery.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.d.ts +2 -2
  148. package/lib/esm/DisplayStyle.js.map +1 -1
  149. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/EditTxn.d.ts +55 -1
  152. package/lib/esm/EditTxn.d.ts.map +1 -1
  153. package/lib/esm/EditTxn.js +43 -1
  154. package/lib/esm/EditTxn.js.map +1 -1
  155. package/lib/esm/Element.d.ts +79 -10
  156. package/lib/esm/Element.d.ts.map +1 -1
  157. package/lib/esm/Element.js +38 -2
  158. package/lib/esm/Element.js.map +1 -1
  159. package/lib/esm/ElementAspect.d.ts +1 -1
  160. package/lib/esm/ElementAspect.js.map +1 -1
  161. package/lib/esm/ElementGraphics.js.map +1 -1
  162. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  163. package/lib/esm/ElementTreeWalker.js.map +1 -1
  164. package/lib/esm/ExternalSource.d.ts +2 -2
  165. package/lib/esm/ExternalSource.d.ts.map +1 -1
  166. package/lib/esm/ExternalSource.js.map +1 -1
  167. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  168. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  169. package/lib/esm/GeographicCRSServices.js +12 -4
  170. package/lib/esm/GeographicCRSServices.js.map +1 -1
  171. package/lib/esm/IModelDb.d.ts +31 -23
  172. package/lib/esm/IModelDb.d.ts.map +1 -1
  173. package/lib/esm/IModelDb.js +45 -26
  174. package/lib/esm/IModelDb.js.map +1 -1
  175. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  176. package/lib/esm/IModelJsFs.d.ts +2 -0
  177. package/lib/esm/IModelJsFs.d.ts.map +1 -1
  178. package/lib/esm/IModelJsFs.js +14 -0
  179. package/lib/esm/IModelJsFs.js.map +1 -1
  180. package/lib/esm/IpcHost.d.ts.map +1 -1
  181. package/lib/esm/IpcHost.js +20 -9
  182. package/lib/esm/IpcHost.js.map +1 -1
  183. package/lib/esm/LineStyle.d.ts +6 -6
  184. package/lib/esm/LineStyle.js.map +1 -1
  185. package/lib/esm/Material.d.ts +1 -1
  186. package/lib/esm/Material.js.map +1 -1
  187. package/lib/esm/Model.d.ts +40 -6
  188. package/lib/esm/Model.d.ts.map +1 -1
  189. package/lib/esm/Model.js +24 -0
  190. package/lib/esm/Model.js.map +1 -1
  191. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  192. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  193. package/lib/esm/PartialChangeUnifier.js +230 -0
  194. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  195. package/lib/esm/Relationship.d.ts +10 -10
  196. package/lib/esm/Relationship.js +6 -6
  197. package/lib/esm/Relationship.js.map +1 -1
  198. package/lib/esm/SheetIndex.d.ts +4 -4
  199. package/lib/esm/SheetIndex.d.ts.map +1 -1
  200. package/lib/esm/SheetIndex.js.map +1 -1
  201. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  202. package/lib/esm/SqliteChangesetReader.js +1 -1
  203. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  204. package/lib/esm/Texture.d.ts +1 -1
  205. package/lib/esm/Texture.js.map +1 -1
  206. package/lib/esm/TxnManager.d.ts +17 -0
  207. package/lib/esm/TxnManager.d.ts.map +1 -1
  208. package/lib/esm/TxnManager.js +121 -14
  209. package/lib/esm/TxnManager.js.map +1 -1
  210. package/lib/esm/ViewDefinition.d.ts +25 -13
  211. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  212. package/lib/esm/ViewDefinition.js +78 -26
  213. package/lib/esm/ViewDefinition.js.map +1 -1
  214. package/lib/esm/ViewStore.d.ts.map +1 -1
  215. package/lib/esm/ViewStore.js +64 -22
  216. package/lib/esm/ViewStore.js.map +1 -1
  217. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  218. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  219. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  220. package/lib/esm/core-backend.d.ts +3 -0
  221. package/lib/esm/core-backend.d.ts.map +1 -1
  222. package/lib/esm/core-backend.js +3 -0
  223. package/lib/esm/core-backend.js.map +1 -1
  224. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  225. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  226. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  227. package/lib/esm/domains/GenericElements.d.ts +2 -2
  228. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  229. package/lib/esm/domains/GenericElements.js.map +1 -1
  230. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  231. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  232. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  233. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  234. package/lib/esm/internal/IntegrityCheck.js +22 -22
  235. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  236. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  237. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  238. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  239. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  240. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  241. package/lib/esm/test/IModelTestUtils.js +5 -0
  242. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  243. package/lib/esm/test/IpcHost.test.js +112 -0
  244. package/lib/esm/test/IpcHost.test.js.map +1 -1
  245. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  246. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  247. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  248. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  249. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  250. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  251. package/lib/esm/test/element/ElementRoundTrip.test.js +144 -3
  252. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  253. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  254. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  255. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  256. package/lib/esm/test/hubaccess/SemanticRebase.test.js +2242 -68
  257. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  258. package/lib/esm/test/imodel/IModel.test.js +1 -1
  259. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  260. package/lib/esm/test/imodel/SchemaXmlImport.test.js +64 -0
  261. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  262. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  263. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  264. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  265. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  266. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  267. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  268. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  269. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  270. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  271. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  272. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  273. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  274. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  275. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  276. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  277. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  278. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  279. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  280. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  281. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  282. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  283. package/lib/esm/workspace/Settings.d.ts +6 -4
  284. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  285. package/lib/esm/workspace/Settings.js.map +1 -1
  286. package/package.json +15 -15
@@ -116,7 +116,7 @@ export declare class SheetInformationAspect extends ElementUniqueAspect {
116
116
  * If `information` is `undefined`, any existing aspect will be deleted.
117
117
  * Otherwise, a new aspect will be inserted, or an existing aspect will be updated with the new metadata.
118
118
  * @throws Error if the iModel contains a version of the BisCore schema older than 01.00.25.
119
- * @deprecated Use SheetInformationAspect.setSheetInformation(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
119
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetInformationAspect.setSheetInformation(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
120
120
  */
121
121
  static setSheetInformation(information: SheetInformation | undefined, sheetId: Id64String, iModel: IModelDb): void;
122
122
  /** Sets the `information` for the [[Sheet]] element specified by `sheetId`, using an explicit EditTxn.
@@ -1 +1 @@
1
- {"version":3,"file":"ElementAspect.js","sourceRoot":"","sources":["../../src/ElementAspect.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ElementAspects\n */\n\nimport { ChannelRootAspectProps, ElementAspectProps, EntityReferenceSet, ExternalSourceAspectProps, RelatedElement, SheetInformation, SheetInformationAspectProps } from \"@itwin/core-common\";\nimport { Entity } from \"./Entity\";\nimport { IModelDb } from \"./IModelDb\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { _implicitTxn, _verifyChannel } from \"./internal/Symbols\";\nimport { SheetOwnsSheetInformationAspect } from \"./NavigationRelationship\";\nimport { Sheet } from \"./Element\";\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\nimport { EditTxn } from \"./EditTxn\";\n\n/** Argument for the `ElementAspect.onXxx` static methods\n * @beta\n */\nexport interface OnAspectArg {\n /** The iModel for the aspect affected by this event. */\n iModel: IModelDb;\n /** The model for the aspect affected by this event */\n model: Id64String;\n}\n/** Argument for the `ElementAspect.onXxx` static methods that supply the properties of an aspect to be inserted or updated.\n * @beta\n */\nexport interface OnAspectPropsArg extends OnAspectArg {\n /** The new properties of the aspect affected by this event. */\n props: Readonly<ElementAspectProps>;\n}\n/** Argument for the `ElementAspect.onXxx` static methods that only supply the Id of the affected aspect.\n * @beta\n */\nexport interface OnAspectIdArg extends OnAspectArg {\n /** The Id of the aspect affected by this event */\n aspectId: Id64String;\n}\n\n/** An Element Aspect is a class that defines a set of properties that are related to (and owned by) a single element.\n * Semantically, an ElementAspect can be considered part of the Element. Thus, an ElementAspect is deleted if its owning Element is deleted.\n * BIS Guideline: Subclass ElementUniqueAspect or ElementMultiAspect rather than subclassing ElementAspect directly.\n * @public @preview\n */\nexport class ElementAspect extends Entity {\n public static override get className(): string { return \"ElementAspect\"; }\n public element: RelatedElement;\n\n /** Construct an aspect from its JSON representation and its containing iModel. */\n constructor(props: ElementAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.element = RelatedElement.fromJSON(props.element)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n }\n\n public override toJSON(): ElementAspectProps {\n const val = super.toJSON() as ElementAspectProps;\n val.element = this.element;\n return val;\n }\n\n /** Called before a new ElementAspect is inserted.\n * @note throw an exception to disallow the insert\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onInsert(arg: OnAspectPropsArg): void {\n const { props, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n iModel.locks.checkExclusiveLock(props.element.id, \"element\", \"insert aspect\");\n }\n\n /** Called after a new ElementAspect was inserted.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onInserted(_arg: OnAspectPropsArg): void { }\n\n /** Called before an ElementAspect is updated.\n * @note throw an exception to disallow the update\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onUpdate(arg: OnAspectPropsArg): void {\n const { props, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n iModel.locks.checkExclusiveLock(props.element.id, \"element\", \"update aspect\");\n }\n\n /** Called after an ElementAspect was updated.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onUpdated(_arg: OnAspectPropsArg): void { }\n\n /** Called before an ElementAspect is deleted.\n * @note throw an exception to disallow the delete\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onDelete(arg: OnAspectIdArg): void {\n const { aspectId, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n const { element } = iModel.elements.getAspect(aspectId);\n iModel.locks.checkExclusiveLock(element.id, \"element\", \"delete aspect\");\n }\n\n /** Called after an ElementAspect was deleted.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onDeleted(_arg: OnAspectIdArg): void { }\n}\n/** An Element Unique Aspect is an ElementAspect where there can be only zero or one instance of the Element Aspect class per Element.\n * @public @preview\n */\nexport class ElementUniqueAspect extends ElementAspect {\n public static override get className(): string { return \"ElementUniqueAspect\"; }\n}\n\n/** An Element Multi-Aspect is an ElementAspect where there can be **n** instances of the Element Aspect class per Element.\n * @public @preview\n */\nexport class ElementMultiAspect extends ElementAspect {\n public static override get className(): string { return \"ElementMultiAspect\"; }\n}\n\n/**\n * @public @preview\n */\nexport class ChannelRootAspect extends ElementUniqueAspect {\n public static override get className(): string { return \"ChannelRootAspect\"; }\n /** Insert a ChannelRootAspect on the specified element.\n * @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ChannelControl.makeChannelRoot]]. This method does not enforce the rule that channels may not nest and is therefore dangerous.\n */\n public static insert(iModel: IModelDb, ownerId: Id64String, channelName: string) {\n const props: ChannelRootAspectProps = { classFullName: this.classFullName, element: { id: ownerId }, owner: channelName };\n iModel[_implicitTxn].insertAspect(props);\n }\n}\n\nconst minimumBisCoreVersion = new ECVersion(1, 0, 25);\n\n/** An [[ElementUniqueAspect]] that captures common metadata about a single [[Sheet]].\n * Use [[getSheetInformation]] to retrieve the metadata for a Sheet and [[setSheetInformation]] to create, update, or delete it.\n * @beta\n */\nexport class SheetInformationAspect extends ElementUniqueAspect {\n public static override get className() { return \"SheetInformationAspect\"; }\n\n /** The sheet's metadata. */\n public sheetInformation: SheetInformation;\n\n protected static override onInsert(arg: OnAspectPropsArg): void {\n super.onInsert(arg);\n\n const sheet = arg.iModel.elements.tryGetElement<Sheet>(arg.props.element);\n if (!(sheet instanceof Sheet)) {\n throw new Error(\"SheetInformationAspect can only be applied to a Sheet element\");\n }\n }\n\n private constructor(props: SheetInformationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n\n const designedDate = undefined !== props.designedDate ? new Date(props.designedDate) : undefined;\n\n this.sheetInformation = {\n designedBy: props.designedBy,\n designedDate,\n drawnBy: props.drawnBy,\n checkedBy: props.checkedBy,\n };\n }\n\n public override toJSON(): SheetInformationAspectProps {\n const props = super.toJSON() as SheetInformationAspectProps;\n for (const key of [\"designedBy\", \"drawnBy\", \"checkedBy\"] as const) {\n const value = this.sheetInformation[key];\n if (undefined !== value) {\n props[key] = value;\n }\n }\n\n if (undefined !== this.sheetInformation.designedDate) {\n props.designedDate = this.sheetInformation.designedDate.toISOString();\n }\n\n return props;\n }\n\n private static findForSheet(sheetId: Id64String, iModel: IModelDb): SheetInformationAspect | undefined {\n if (!iModel.meetsMinimumSchemaVersion(\"BisCore\", minimumBisCoreVersion)) {\n return undefined;\n }\n\n const aspects = iModel.elements.getAspects(sheetId, this.classFullName);\n if (aspects[0]) {\n assert(aspects[0] instanceof SheetInformationAspect);\n return aspects[0];\n }\n\n return undefined;\n }\n\n /** Retrieves the metadata hosted by the aspect on the specified sheet, returning `undefined` if no such metadata could be retrieved.\n * @see [[setSheetInformation]] to create, update, or delete the aspect.\n */\n public static getSheetInformation(sheetId: Id64String, iModel: IModelDb): SheetInformation | undefined {\n const aspect = this.findForSheet(sheetId, iModel);\n return aspect?.sheetInformation;\n }\n\n /** Sets the `information` for the [[Sheet]] element specified by ``sheetId`.\n * If `information` is `undefined`, any existing aspect will be deleted.\n * Otherwise, a new aspect will be inserted, or an existing aspect will be updated with the new metadata.\n * @throws Error if the iModel contains a version of the BisCore schema older than 01.00.25.\n * @deprecated Use SheetInformationAspect.setSheetInformation(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\n */\n public static setSheetInformation(information: SheetInformation | undefined, sheetId: Id64String, iModel: IModelDb): void;\n\n /** Sets the `information` for the [[Sheet]] element specified by `sheetId`, using an explicit EditTxn.\n * If `information` is `undefined`, any existing aspect will be deleted.\n * Otherwise, a new aspect will be inserted, or an existing aspect will be updated with the new metadata.\n * @throws Error if the iModel contains a version of the BisCore schema older than 01.00.25.\n * @throws EditTxnError if the EditTxn is not active.\n * @beta\n */\n public static setSheetInformation(txn: EditTxn, information: SheetInformation | undefined, sheetId: Id64String): void;\n public static setSheetInformation(arg1: EditTxn | SheetInformation | undefined, arg2: SheetInformation | Id64String | undefined, arg3: Id64String | IModelDb): void {\n let txn: EditTxn;\n let information: SheetInformation | undefined;\n let sheetId: Id64String;\n\n if (arg1 instanceof EditTxn) {\n txn = arg1;\n information = arg2 as SheetInformation | undefined;\n sheetId = arg3 as Id64String;\n } else {\n txn = (arg3 as IModelDb)[_implicitTxn];\n information = arg1;\n sheetId = arg2 as Id64String;\n }\n\n txn.iModel.requireMinimumSchemaVersion(\"BisCore\", minimumBisCoreVersion, \"SheetInformationAspect\");\n\n const aspect = this.findForSheet(sheetId, txn.iModel);\n if (!information) {\n if (aspect) {\n txn.deleteAspect(aspect.id);\n }\n\n return;\n }\n\n if (aspect) {\n aspect.sheetInformation = { ...information };\n txn.updateAspect(aspect.toJSON());\n } else {\n const info = { ...information } as any;\n for (const key of Object.keys(info)) {\n if (info[key] === undefined) {\n delete info[key];\n }\n }\n\n if (undefined !== info.designedDate) {\n info.designedDate = info.designedDate.toISOString();\n }\n\n const props: SheetInformationAspectProps = {\n classFullName: this.classFullName,\n element: {\n id: sheetId,\n relClassName: SheetOwnsSheetInformationAspect.classFullName,\n },\n ...info,\n };\n\n txn.insertAspect(props);\n }\n }\n}\n\n/** An ElementMultiAspect that stores synchronization information for an Element originating from an external source.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.2\n * @public @preview\n */\nexport class ExternalSourceAspect extends ElementMultiAspect {\n public static override get className(): string { return \"ExternalSourceAspect\"; }\n\n /** An element that scopes the combination of `kind` and `identifier` to uniquely identify the object from the external source.\n * @note Warning: in a future major release the `scope` property will be optional, since the scope is intended to be potentially invalid.\n * all references should treat it as potentially undefined, but we cannot change the type yet since that is a breaking change.\n */\n public scope: RelatedElement;\n /** The identifier of the object in the source repository. */\n public identifier: string;\n /** The kind of object within the source repository. */\n public kind: string;\n /** The cryptographic hash (any algorithm) of the source object's content. If defined, it must be guaranteed to change when the source object's content changes. */\n public checksum?: string;\n /** An optional value that is typically a version number or a pseudo version number like last modified time.\n * It will be used by the synchronization process to detect that a source object is unchanged so that computing a cryptographic hash can be avoided.\n * If present, this value must be guaranteed to change when any of the source object's content changes.\n */\n public version?: string;\n /** A place where additional JSON properties can be stored. For example, provenance information or properties relating to the synchronization process.\n * @note Warning: in a future major release, the type of `jsonProperties` will be changed to object, and itwin.js will automatically stringify it when writing to the iModel.\n * This will be a breaking change, since application code will have to change from supplying a string to supplying an object.\n */\n public jsonProperties?: string;\n /** The source of the imported/synchronized object. Should point to an instance of [ExternalSource]($backend). */\n public source?: RelatedElement;\n\n /** Construct an aspect from its JSON representation and its containing iModel. */\n constructor(props: ExternalSourceAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.scope = RelatedElement.fromJSON(props.scope)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n this.source = RelatedElement.fromJSON(props.source);\n this.identifier = props.identifier;\n this.kind = props.kind;\n this.checksum = props.checksum;\n this.version = props.version;\n this.jsonProperties = props.jsonProperties;\n }\n\n /** Look up the elements that contain one or more ExternalSourceAspect with the specified Scope, Kind, and Identifier.\n * The result of this function is an array of all of the ExternalSourceAspects that were found, each associated with the owning element.\n * A given element could have more than one ExternalSourceAspect with the given scope, kind, and identifier.\n * Also, many elements could have ExternalSourceAspect with the same scope, kind, and identifier.\n * Therefore, the result array could have more than one entry with the same elementId.\n * Aspects are never shared. Each aspect has its own unique ECInstanceId.\n * @param iModelDb The iModel to query\n * @param scope The scope of the ExternalSourceAspects to find\n * @param kind The kind of the ExternalSourceAspects to find\n * @param identifier The identifier of the ExternalSourceAspects to find\n * @returns the query results\n */\n public static findAllBySource(iModelDb: IModelDb, scope: Id64String, kind: string, identifier: string): Array<{ elementId: Id64String, aspectId: Id64String }> {\n const sql = `SELECT Element.Id, ECInstanceId FROM ${ExternalSourceAspect.classFullName} WHERE (Scope.Id=:scope AND Kind=:kind AND Identifier=:identifier)`;\n const found: Array<{ elementId: Id64String, aspectId: Id64String }> = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(sql, (statement: ECSqlStatement) => {\n statement.bindId(\"scope\", scope);\n statement.bindString(\"kind\", kind);\n statement.bindString(\"identifier\", identifier);\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n found.push({ elementId: statement.getValue(0).getId(), aspectId: statement.getValue(1).getId() });\n }\n });\n return found;\n }\n\n public override toJSON(): ExternalSourceAspectProps {\n const val = super.toJSON() as ExternalSourceAspectProps;\n val.scope = this.scope;\n val.source = this.source;\n val.identifier = this.identifier;\n val.kind = this.kind;\n val.checksum = this.checksum;\n val.version = this.version;\n val.jsonProperties = this.jsonProperties;\n return val;\n }\n\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.scope)\n referenceIds.addElement(this.scope.id);\n referenceIds.addElement(this.element.id);\n if (this.source)\n referenceIds.addElement(this.source.id);\n }\n}\n\n/** @public @preview */\nexport namespace ExternalSourceAspect {\n /** Standard values for the `Kind` property of `ExternalSourceAspect`.\n * @public @preview\n */\n export enum Kind {\n /** Indicates that the [[ExternalSourceAspect]] is storing [[Element]] provenance */\n Element = \"Element\",\n /** Indicates that the [[ExternalSourceAspect]] is storing [[Relationship]] provenance */\n Relationship = \"Relationship\",\n /** Indicates that the [[ExternalSourceAspect]] is storing *scope* provenance\n * @see [[ExternalSourceAspect.scope]]\n */\n Scope = \"Scope\",\n }\n}\n"]}
1
+ {"version":3,"file":"ElementAspect.js","sourceRoot":"","sources":["../../src/ElementAspect.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ElementAspects\n */\n\nimport { ChannelRootAspectProps, ElementAspectProps, EntityReferenceSet, ExternalSourceAspectProps, RelatedElement, SheetInformation, SheetInformationAspectProps } from \"@itwin/core-common\";\nimport { Entity } from \"./Entity\";\nimport { IModelDb } from \"./IModelDb\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { _implicitTxn, _verifyChannel } from \"./internal/Symbols\";\nimport { SheetOwnsSheetInformationAspect } from \"./NavigationRelationship\";\nimport { Sheet } from \"./Element\";\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\nimport { EditTxn } from \"./EditTxn\";\n\n/** Argument for the `ElementAspect.onXxx` static methods\n * @beta\n */\nexport interface OnAspectArg {\n /** The iModel for the aspect affected by this event. */\n iModel: IModelDb;\n /** The model for the aspect affected by this event */\n model: Id64String;\n}\n/** Argument for the `ElementAspect.onXxx` static methods that supply the properties of an aspect to be inserted or updated.\n * @beta\n */\nexport interface OnAspectPropsArg extends OnAspectArg {\n /** The new properties of the aspect affected by this event. */\n props: Readonly<ElementAspectProps>;\n}\n/** Argument for the `ElementAspect.onXxx` static methods that only supply the Id of the affected aspect.\n * @beta\n */\nexport interface OnAspectIdArg extends OnAspectArg {\n /** The Id of the aspect affected by this event */\n aspectId: Id64String;\n}\n\n/** An Element Aspect is a class that defines a set of properties that are related to (and owned by) a single element.\n * Semantically, an ElementAspect can be considered part of the Element. Thus, an ElementAspect is deleted if its owning Element is deleted.\n * BIS Guideline: Subclass ElementUniqueAspect or ElementMultiAspect rather than subclassing ElementAspect directly.\n * @public @preview\n */\nexport class ElementAspect extends Entity {\n public static override get className(): string { return \"ElementAspect\"; }\n public element: RelatedElement;\n\n /** Construct an aspect from its JSON representation and its containing iModel. */\n constructor(props: ElementAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.element = RelatedElement.fromJSON(props.element)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n }\n\n public override toJSON(): ElementAspectProps {\n const val = super.toJSON() as ElementAspectProps;\n val.element = this.element;\n return val;\n }\n\n /** Called before a new ElementAspect is inserted.\n * @note throw an exception to disallow the insert\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onInsert(arg: OnAspectPropsArg): void {\n const { props, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n iModel.locks.checkExclusiveLock(props.element.id, \"element\", \"insert aspect\");\n }\n\n /** Called after a new ElementAspect was inserted.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onInserted(_arg: OnAspectPropsArg): void { }\n\n /** Called before an ElementAspect is updated.\n * @note throw an exception to disallow the update\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onUpdate(arg: OnAspectPropsArg): void {\n const { props, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n iModel.locks.checkExclusiveLock(props.element.id, \"element\", \"update aspect\");\n }\n\n /** Called after an ElementAspect was updated.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onUpdated(_arg: OnAspectPropsArg): void { }\n\n /** Called before an ElementAspect is deleted.\n * @note throw an exception to disallow the delete\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onDelete(arg: OnAspectIdArg): void {\n const { aspectId, iModel } = arg;\n iModel.channels[_verifyChannel](arg.model);\n const { element } = iModel.elements.getAspect(aspectId);\n iModel.locks.checkExclusiveLock(element.id, \"element\", \"delete aspect\");\n }\n\n /** Called after an ElementAspect was deleted.\n * @note If you override this method, you must call super.\n * @beta\n */\n protected static onDeleted(_arg: OnAspectIdArg): void { }\n}\n/** An Element Unique Aspect is an ElementAspect where there can be only zero or one instance of the Element Aspect class per Element.\n * @public @preview\n */\nexport class ElementUniqueAspect extends ElementAspect {\n public static override get className(): string { return \"ElementUniqueAspect\"; }\n}\n\n/** An Element Multi-Aspect is an ElementAspect where there can be **n** instances of the Element Aspect class per Element.\n * @public @preview\n */\nexport class ElementMultiAspect extends ElementAspect {\n public static override get className(): string { return \"ElementMultiAspect\"; }\n}\n\n/**\n * @public @preview\n */\nexport class ChannelRootAspect extends ElementUniqueAspect {\n public static override get className(): string { return \"ChannelRootAspect\"; }\n /** Insert a ChannelRootAspect on the specified element.\n * @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ChannelControl.makeChannelRoot]]. This method does not enforce the rule that channels may not nest and is therefore dangerous.\n */\n public static insert(iModel: IModelDb, ownerId: Id64String, channelName: string) {\n const props: ChannelRootAspectProps = { classFullName: this.classFullName, element: { id: ownerId }, owner: channelName };\n iModel[_implicitTxn].insertAspect(props);\n }\n}\n\nconst minimumBisCoreVersion = new ECVersion(1, 0, 25);\n\n/** An [[ElementUniqueAspect]] that captures common metadata about a single [[Sheet]].\n * Use [[getSheetInformation]] to retrieve the metadata for a Sheet and [[setSheetInformation]] to create, update, or delete it.\n * @beta\n */\nexport class SheetInformationAspect extends ElementUniqueAspect {\n public static override get className() { return \"SheetInformationAspect\"; }\n\n /** The sheet's metadata. */\n public sheetInformation: SheetInformation;\n\n protected static override onInsert(arg: OnAspectPropsArg): void {\n super.onInsert(arg);\n\n const sheet = arg.iModel.elements.tryGetElement<Sheet>(arg.props.element);\n if (!(sheet instanceof Sheet)) {\n throw new Error(\"SheetInformationAspect can only be applied to a Sheet element\");\n }\n }\n\n private constructor(props: SheetInformationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n\n const designedDate = undefined !== props.designedDate ? new Date(props.designedDate) : undefined;\n\n this.sheetInformation = {\n designedBy: props.designedBy,\n designedDate,\n drawnBy: props.drawnBy,\n checkedBy: props.checkedBy,\n };\n }\n\n public override toJSON(): SheetInformationAspectProps {\n const props = super.toJSON() as SheetInformationAspectProps;\n for (const key of [\"designedBy\", \"drawnBy\", \"checkedBy\"] as const) {\n const value = this.sheetInformation[key];\n if (undefined !== value) {\n props[key] = value;\n }\n }\n\n if (undefined !== this.sheetInformation.designedDate) {\n props.designedDate = this.sheetInformation.designedDate.toISOString();\n }\n\n return props;\n }\n\n private static findForSheet(sheetId: Id64String, iModel: IModelDb): SheetInformationAspect | undefined {\n if (!iModel.meetsMinimumSchemaVersion(\"BisCore\", minimumBisCoreVersion)) {\n return undefined;\n }\n\n const aspects = iModel.elements.getAspects(sheetId, this.classFullName);\n if (aspects[0]) {\n assert(aspects[0] instanceof SheetInformationAspect);\n return aspects[0];\n }\n\n return undefined;\n }\n\n /** Retrieves the metadata hosted by the aspect on the specified sheet, returning `undefined` if no such metadata could be retrieved.\n * @see [[setSheetInformation]] to create, update, or delete the aspect.\n */\n public static getSheetInformation(sheetId: Id64String, iModel: IModelDb): SheetInformation | undefined {\n const aspect = this.findForSheet(sheetId, iModel);\n return aspect?.sheetInformation;\n }\n\n /** Sets the `information` for the [[Sheet]] element specified by ``sheetId`.\n * If `information` is `undefined`, any existing aspect will be deleted.\n * Otherwise, a new aspect will be inserted, or an existing aspect will be updated with the new metadata.\n * @throws Error if the iModel contains a version of the BisCore schema older than 01.00.25.\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use SheetInformationAspect.setSheetInformation(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.\n */\n public static setSheetInformation(information: SheetInformation | undefined, sheetId: Id64String, iModel: IModelDb): void;\n\n /** Sets the `information` for the [[Sheet]] element specified by `sheetId`, using an explicit EditTxn.\n * If `information` is `undefined`, any existing aspect will be deleted.\n * Otherwise, a new aspect will be inserted, or an existing aspect will be updated with the new metadata.\n * @throws Error if the iModel contains a version of the BisCore schema older than 01.00.25.\n * @throws EditTxnError if the EditTxn is not active.\n * @beta\n */\n public static setSheetInformation(txn: EditTxn, information: SheetInformation | undefined, sheetId: Id64String): void;\n public static setSheetInformation(arg1: EditTxn | SheetInformation | undefined, arg2: SheetInformation | Id64String | undefined, arg3: Id64String | IModelDb): void {\n let txn: EditTxn;\n let information: SheetInformation | undefined;\n let sheetId: Id64String;\n\n if (arg1 instanceof EditTxn) {\n txn = arg1;\n information = arg2 as SheetInformation | undefined;\n sheetId = arg3 as Id64String;\n } else {\n txn = (arg3 as IModelDb)[_implicitTxn];\n information = arg1;\n sheetId = arg2 as Id64String;\n }\n\n txn.iModel.requireMinimumSchemaVersion(\"BisCore\", minimumBisCoreVersion, \"SheetInformationAspect\");\n\n const aspect = this.findForSheet(sheetId, txn.iModel);\n if (!information) {\n if (aspect) {\n txn.deleteAspect(aspect.id);\n }\n\n return;\n }\n\n if (aspect) {\n aspect.sheetInformation = { ...information };\n txn.updateAspect(aspect.toJSON());\n } else {\n const info = { ...information } as any;\n for (const key of Object.keys(info)) {\n if (info[key] === undefined) {\n delete info[key];\n }\n }\n\n if (undefined !== info.designedDate) {\n info.designedDate = info.designedDate.toISOString();\n }\n\n const props: SheetInformationAspectProps = {\n classFullName: this.classFullName,\n element: {\n id: sheetId,\n relClassName: SheetOwnsSheetInformationAspect.classFullName,\n },\n ...info,\n };\n\n txn.insertAspect(props);\n }\n }\n}\n\n/** An ElementMultiAspect that stores synchronization information for an Element originating from an external source.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.2\n * @public @preview\n */\nexport class ExternalSourceAspect extends ElementMultiAspect {\n public static override get className(): string { return \"ExternalSourceAspect\"; }\n\n /** An element that scopes the combination of `kind` and `identifier` to uniquely identify the object from the external source.\n * @note Warning: in a future major release the `scope` property will be optional, since the scope is intended to be potentially invalid.\n * all references should treat it as potentially undefined, but we cannot change the type yet since that is a breaking change.\n */\n public scope: RelatedElement;\n /** The identifier of the object in the source repository. */\n public identifier: string;\n /** The kind of object within the source repository. */\n public kind: string;\n /** The cryptographic hash (any algorithm) of the source object's content. If defined, it must be guaranteed to change when the source object's content changes. */\n public checksum?: string;\n /** An optional value that is typically a version number or a pseudo version number like last modified time.\n * It will be used by the synchronization process to detect that a source object is unchanged so that computing a cryptographic hash can be avoided.\n * If present, this value must be guaranteed to change when any of the source object's content changes.\n */\n public version?: string;\n /** A place where additional JSON properties can be stored. For example, provenance information or properties relating to the synchronization process.\n * @note Warning: in a future major release, the type of `jsonProperties` will be changed to object, and itwin.js will automatically stringify it when writing to the iModel.\n * This will be a breaking change, since application code will have to change from supplying a string to supplying an object.\n */\n public jsonProperties?: string;\n /** The source of the imported/synchronized object. Should point to an instance of [ExternalSource]($backend). */\n public source?: RelatedElement;\n\n /** Construct an aspect from its JSON representation and its containing iModel. */\n constructor(props: ExternalSourceAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.scope = RelatedElement.fromJSON(props.scope)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n this.source = RelatedElement.fromJSON(props.source);\n this.identifier = props.identifier;\n this.kind = props.kind;\n this.checksum = props.checksum;\n this.version = props.version;\n this.jsonProperties = props.jsonProperties;\n }\n\n /** Look up the elements that contain one or more ExternalSourceAspect with the specified Scope, Kind, and Identifier.\n * The result of this function is an array of all of the ExternalSourceAspects that were found, each associated with the owning element.\n * A given element could have more than one ExternalSourceAspect with the given scope, kind, and identifier.\n * Also, many elements could have ExternalSourceAspect with the same scope, kind, and identifier.\n * Therefore, the result array could have more than one entry with the same elementId.\n * Aspects are never shared. Each aspect has its own unique ECInstanceId.\n * @param iModelDb The iModel to query\n * @param scope The scope of the ExternalSourceAspects to find\n * @param kind The kind of the ExternalSourceAspects to find\n * @param identifier The identifier of the ExternalSourceAspects to find\n * @returns the query results\n */\n public static findAllBySource(iModelDb: IModelDb, scope: Id64String, kind: string, identifier: string): Array<{ elementId: Id64String, aspectId: Id64String }> {\n const sql = `SELECT Element.Id, ECInstanceId FROM ${ExternalSourceAspect.classFullName} WHERE (Scope.Id=:scope AND Kind=:kind AND Identifier=:identifier)`;\n const found: Array<{ elementId: Id64String, aspectId: Id64String }> = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(sql, (statement: ECSqlStatement) => {\n statement.bindId(\"scope\", scope);\n statement.bindString(\"kind\", kind);\n statement.bindString(\"identifier\", identifier);\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n found.push({ elementId: statement.getValue(0).getId(), aspectId: statement.getValue(1).getId() });\n }\n });\n return found;\n }\n\n public override toJSON(): ExternalSourceAspectProps {\n const val = super.toJSON() as ExternalSourceAspectProps;\n val.scope = this.scope;\n val.source = this.source;\n val.identifier = this.identifier;\n val.kind = this.kind;\n val.checksum = this.checksum;\n val.version = this.version;\n val.jsonProperties = this.jsonProperties;\n return val;\n }\n\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.scope)\n referenceIds.addElement(this.scope.id);\n referenceIds.addElement(this.element.id);\n if (this.source)\n referenceIds.addElement(this.source.id);\n }\n}\n\n/** @public @preview */\nexport namespace ExternalSourceAspect {\n /** Standard values for the `Kind` property of `ExternalSourceAspect`.\n * @public @preview\n */\n export enum Kind {\n /** Indicates that the [[ExternalSourceAspect]] is storing [[Element]] provenance */\n Element = \"Element\",\n /** Indicates that the [[ExternalSourceAspect]] is storing [[Relationship]] provenance */\n Relationship = \"Relationship\",\n /** Indicates that the [[ExternalSourceAspect]] is storing *scope* provenance\n * @see [[ExternalSourceAspect.scope]]\n */\n Scope = \"Scope\",\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGraphics.js","sourceRoot":"","sources":["../../src/ElementGraphics.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAA+B,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAoC,EAAE,MAAgB;IAClG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,OAAc,CAAC,CAAC,CAAC,2CAA2C;IAE3H,IAAI,KAAyB,CAAC;IAC9B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,8CAAsC;QACtC;YACE,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB;YACE,KAAK,GAAG,cAAc,CAAC;YACvB,MAAM;QACR;YACE,KAAK,GAAG,8BAA8B,CAAC;YACvC,MAAM;QACR;YACE,KAAK,GAAG,cAAc,OAAO,CAAC,SAAS,YAAY,CAAC;YACpD,MAAM;QACR;YACE,KAAK,GAAG,yBAAyB,OAAO,CAAC,EAAE,GAAG,CAAC;YAC/C,MAAM;IACV,CAAC;IAED,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, IModelStatus } from \"@itwin/core-bentley\";\nimport { ElementGraphicsRequestProps, IModelError } from \"@itwin/core-common\";\nimport { ElementGraphicsStatus } from \"@bentley/imodeljs-native\";\nimport { IModelDb } from \"./IModelDb\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/** See [[IModelDb.generateElementGraphics]] and IModelTileRpcImpl.requestElementGraphics.\n * @internal\n */\nexport async function generateElementGraphics(request: ElementGraphicsRequestProps, iModel: IModelDb): Promise<Uint8Array | undefined> {\n const result = await iModel[_nativeDb].generateElementGraphics(request as any); // ###TODO update package versions in addon\n\n let error: string | undefined;\n switch (result.status) {\n case ElementGraphicsStatus.NoGeometry:\n case ElementGraphicsStatus.Canceled:\n return undefined;\n case ElementGraphicsStatus.Success:\n return result.content;\n case ElementGraphicsStatus.InvalidJson:\n error = \"Invalid JSON\";\n break;\n case ElementGraphicsStatus.UnknownMajorFormatVersion:\n error = \"Unknown major format version\";\n break;\n case ElementGraphicsStatus.ElementNotFound:\n error = `Element Id ${request.elementId} not found`;\n break;\n case ElementGraphicsStatus.DuplicateRequestId:\n error = `Duplicate request Id \"${request.id}\"`;\n break;\n }\n\n assert(undefined !== error);\n throw new IModelError(IModelStatus.BadRequest, error);\n}\n"]}
1
+ {"version":3,"file":"ElementGraphics.js","sourceRoot":"","sources":["../../src/ElementGraphics.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAA+B,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAoC,EAAE,MAAgB;IAClG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,2CAA2C;IAEpH,IAAI,KAAyB,CAAC;IAC9B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,8CAAsC;QACtC;YACE,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB;YACE,KAAK,GAAG,cAAc,CAAC;YACvB,MAAM;QACR;YACE,KAAK,GAAG,8BAA8B,CAAC;YACvC,MAAM;QACR;YACE,KAAK,GAAG,cAAc,OAAO,CAAC,SAAS,YAAY,CAAC;YACpD,MAAM;QACR;YACE,KAAK,GAAG,yBAAyB,OAAO,CAAC,EAAE,GAAG,CAAC;YAC/C,MAAM;IACV,CAAC;IAED,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, IModelStatus } from \"@itwin/core-bentley\";\nimport { ElementGraphicsRequestProps, IModelError } from \"@itwin/core-common\";\nimport { ElementGraphicsStatus } from \"@bentley/imodeljs-native\";\nimport { IModelDb } from \"./IModelDb\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/** See [[IModelDb.generateElementGraphics]] and IModelTileRpcImpl.requestElementGraphics.\n * @internal\n */\nexport async function generateElementGraphics(request: ElementGraphicsRequestProps, iModel: IModelDb): Promise<Uint8Array | undefined> {\n const result = await iModel[_nativeDb].generateElementGraphics(request); // ###TODO update package versions in addon\n\n let error: string | undefined;\n switch (result.status) {\n case ElementGraphicsStatus.NoGeometry:\n case ElementGraphicsStatus.Canceled:\n return undefined;\n case ElementGraphicsStatus.Success:\n return result.content;\n case ElementGraphicsStatus.InvalidJson:\n error = \"Invalid JSON\";\n break;\n case ElementGraphicsStatus.UnknownMajorFormatVersion:\n error = \"Unknown major format version\";\n break;\n case ElementGraphicsStatus.ElementNotFound:\n error = `Element Id ${request.elementId} not found`;\n break;\n case ElementGraphicsStatus.DuplicateRequestId:\n error = `Duplicate request Id \"${request.id}\"`;\n break;\n }\n\n assert(undefined !== error);\n throw new IModelError(IModelStatus.BadRequest, error);\n}\n"]}
@@ -90,7 +90,7 @@ export declare class ElementTreeDeleter extends ElementTreeBottomUp {
90
90
  constructor(txn: EditTxn);
91
91
  /**
92
92
  * Create an ElementTreeDeleter.
93
- * @deprecated Supply an explicit EditTxn.
93
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit EditTxn.
94
94
  */
95
95
  constructor(iModel: IModelDb);
96
96
  protected shouldExploreModel(_model: Model): boolean;
@@ -151,7 +151,7 @@ export declare class ElementSubTreeDeleter extends ElementTreeTopDown {
151
151
  * @param iModel The iModel
152
152
  * @param topElement Where to start the search.
153
153
  * @param shouldPruneCb Callback that selects sub-trees that should be deleted.
154
- * @deprecated Supply an explicit EditTxn.
154
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit EditTxn.
155
155
  * @see deleteElementSubTrees for a simple way to use this class.
156
156
  */
157
157
  constructor(iModel: IModelDb, shouldPruneCb: ElementSubTreeDeleteFilter);
@@ -191,7 +191,7 @@ export declare function deleteElementTree(txn: EditTxn, topElement: Id64String,
191
191
  /** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.
192
192
  * @param iModel The iModel
193
193
  * @param topElement The parent of the sub-tree
194
- * @deprecated Supply an explicit `txn`.
194
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit `txn`.
195
195
  * @beta
196
196
  */
197
197
  export declare function deleteElementTree(iModel: IModelDb, topElement: Id64String): void;
@@ -202,7 +202,7 @@ export declare function deleteElementTree(iModel: IModelDb, topElement: Id64Stri
202
202
  export declare function deleteElementTree(args: DeleteElementTreeArgs): void;
203
203
  /** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.
204
204
  * @param args Specifies the iModel and top element.
205
- * @deprecated Supply `txn` via [[DeleteElementTreeArgs]].
205
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply `txn` via [[DeleteElementTreeArgs]].
206
206
  * @beta
207
207
  */
208
208
  export declare function deleteElementTree(args: {
@@ -227,7 +227,7 @@ export declare function deleteElementSubTrees(txn: EditTxn, topElement: Id64Stri
227
227
  * @param iModel The iModel
228
228
  * @param topElement Where to start the search.
229
229
  * @param filter Callback that selects sub-trees that should be deleted.
230
- * @deprecated Supply `txn` explicitly.
230
+ * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply `txn` explicitly.
231
231
  * @beta
232
232
  */
233
233
  export declare function deleteElementSubTrees(iModel: IModelDb, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ElementTreeWalker.js","sourceRoot":"","sources":["../../src/ElementTreeWalker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\nimport { assert, DbResult, Id64Array, Id64String, Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { IModel } from \"@itwin/core-common\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { EditTxn } from \"./EditTxn\";\nimport { DefinitionContainer, DefinitionElement, DefinitionPartition, Element, Subject } from \"./Element\";\nimport { IModelDb } from \"./IModelDb\";\nimport { DefinitionModel, Model } from \"./Model\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\nconst loggerCategory = `${BackendLoggerCategory.IModelDb}.ElementTreeWalker`;\n\n/** @beta */\nexport interface ElementTreeWalkerModelInfo { model: Model, isDefinitionModel: boolean }\n\nfunction sortChildrenBeforeParents(iModel: IModelDb, ids: Id64Array): Array<Id64Array> {\n const children: Id64Array = [];\n const parents: Id64Array = [];\n for (const eid of ids) {\n const parentId = iModel.elements.queryParent(eid);\n if (parentId !== undefined && ids.includes(parentId))\n children.push(eid);\n else\n parents.push(eid);\n }\n\n if (children.length === 0)\n return [parents];\n\n return [...sortChildrenBeforeParents(iModel, children), parents];\n}\n\nfunction isModelEmpty(iModel: IModelDb, modelId: Id64String): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`select count(*) from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, modelId);\n stmt.step();\n return stmt.getValue(0).getInteger() === 0;\n });\n}\n\nfunction isDefinitionModel(model: Model): boolean {\n return (model.id !== IModel.repositoryModelId) && (model instanceof DefinitionModel);\n}\n\nenum ElementPruningClassification { PRUNING_CLASS_Normal = 0, PRUNING_CLASS_Subject = 1, PRUNING_CLASS_Definition = 2, PRUNING_CLASS_DefinitionPartition = 3, }\n\nfunction classifyElementForPruning(iModel: IModelDb, elementId: Id64String): ElementPruningClassification {\n const el = iModel.elements.getElement(elementId);\n // DefinitionContainer is submodeled by a DefinitionModel and so it must be classified as PRUNING_CLASS_DefinitionPartition for tree-walking purposes.\n // Since DefinitionContainer is-a DefinitionElement the (el instanceof DefinitionElement) case below would classify it as PRUNING_CLASS_Definition.\n // That is why we special-case it here.\n if (el instanceof DefinitionContainer)\n return ElementPruningClassification.PRUNING_CLASS_DefinitionPartition;\n return (el instanceof Subject) ? ElementPruningClassification.PRUNING_CLASS_Subject :\n (el instanceof DefinitionElement) ? ElementPruningClassification.PRUNING_CLASS_Definition :\n (el instanceof DefinitionPartition) ? ElementPruningClassification.PRUNING_CLASS_DefinitionPartition :\n ElementPruningClassification.PRUNING_CLASS_Normal;\n}\n\n/** Records the path that a tree search took to reach an element or model. This object is immutable.\n * @beta\n */\nexport class ElementTreeWalkerScope {\n public readonly topElement: Id64String = \"\";\n /** path of parent elements and enclosing models */\n public readonly path: Array<Id64String | ElementTreeWalkerModelInfo> = [];\n /** cached info about the immediately enclosing model (i.e., the last model in path) */\n public readonly enclosingModelInfo: ElementTreeWalkerModelInfo;\n\n constructor(topElement: Id64String, model: Model);\n constructor(enclosingScope: ElementTreeWalkerScope, newScope: Id64String | Model);\n constructor(arg1: Id64String | ElementTreeWalkerScope, arg2: Model | Id64String) {\n if (typeof arg1 === \"string\") {\n // normal constructor\n assert(arg2 instanceof Model);\n this.topElement = arg1;\n this.path.push(this.enclosingModelInfo = { model: arg2, isDefinitionModel: isDefinitionModel(arg2) });\n } else if (arg1 instanceof ElementTreeWalkerScope) {\n // copy-like constructor\n this.topElement = arg1.topElement;\n this.path = [...arg1.path];\n if (typeof arg2 === \"string\") {\n // with new parent\n this.path.push(arg2);\n this.enclosingModelInfo = arg1.enclosingModelInfo;\n } else {\n // with new enclosing model\n this.path.push(this.enclosingModelInfo = { model: arg2, isDefinitionModel: isDefinitionModel(arg2) });\n }\n } else {\n throw new Error(\"invalid constructor signature\");\n }\n }\n\n public get enclosingModel(): Model { return this.enclosingModelInfo.model; }\n public get inDefinitionModel(): boolean { return this.enclosingModelInfo.isDefinitionModel; } // NB: this will return false for the RepositoryModel!\n public get inRepositoryModel(): boolean { return this.enclosingModelInfo.model.id === IModelDb.repositoryModelId; }\n\n public static createTopScope(iModel: IModelDb, topElementId: Id64String) {\n const topElement = iModel.elements.getElement(topElementId);\n const topElementModel = iModel.models.getModel(topElement.model);\n return new ElementTreeWalkerScope(topElementId, topElementModel);\n }\n\n private fmtItem(v: Id64String | ElementTreeWalkerModelInfo): string {\n if (typeof v === \"string\")\n return `element ${v}`;\n return `model ${v.model.id} ${v.isDefinitionModel ? \"(DEFN)\" : \"\"}`;\n }\n\n public toString(): string {\n return `[ ${this.path.map((v) => this.fmtItem(v)).join(\" / \")} ]`;\n }\n}\n\nfunction fmtElement(iModel: IModelDb, elementId: Id64String): string {\n const el = iModel.elements.getElement(elementId);\n return `${el.id} ${el.classFullName} ${el.getDisplayLabel()}`;\n}\n\nfunction fmtModel(model: Model): string {\n return `${model.id} ${model.classFullName} ${model.name}`;\n}\n\nlet isTraceEnabledChecked = -1;\n\nfunction isTraceEnabled(): boolean {\n if (isTraceEnabledChecked === -1)\n isTraceEnabledChecked = Logger.isEnabled(loggerCategory, LogLevel.Trace) ? 1 : 0;\n return isTraceEnabledChecked === 1;\n}\n\nfunction logElement(op: string, iModel: IModelDb, elementId: Id64String, scope?: ElementTreeWalkerScope, logChildren?: boolean): void {\n if (!isTraceEnabled())\n return;\n\n Logger.logTrace(loggerCategory, `${op} ${fmtElement(iModel, elementId)} ${scope ? scope.toString() : \"\"}`);\n\n if (logChildren)\n iModel.elements.queryChildren(elementId).forEach((c) => logElement(\" - \", iModel, c, undefined, true));\n}\n\nfunction logModel(op: string, iModel: IModelDb, modelId: Id64String, scope?: ElementTreeWalkerScope, logElements?: boolean): void {\n if (!isTraceEnabled())\n return;\n const model: Model = iModel.models.getModel(modelId);\n Logger.logTrace(loggerCategory, `${op} ${fmtModel(model)} ${scope ? scope.toString() : \"\"}`);\n\n if (logElements) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, modelId);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n logElement(\" - \", iModel, stmt.getValue(0).getId());\n }\n });\n }\n}\n\n/** Does a depth-first search on the tree defined by an element and its sub-models and children.\n * Sub-models are visited before their modeled elements, and children are visited before their parents.\n *\n * The following callbacks allow the subclass to exclude elements and sub-trees from the search:\n * * [[ElementTreeBottomUp.shouldExploreModel]], [[ElementTreeBottomUp.shouldExploreChildren]]\n * * [[ElementTreeBottomUp.shouldVisitElement]], [[ElementTreeBottomUp.shouldVisitModel]]\n *\n * The [[ElementTreeBottomUp.visitElement]] and [[ElementTreeBottomUp.visitModel]] callbacks allow\n * the subclass to process the elements and models that are encountered in the search.\n * @beta\n */\nexport abstract class ElementTreeBottomUp {\n protected readonly txn: EditTxn;\n\n constructor(iModelOrTxn: IModelDb | EditTxn) {\n this.txn = iModelOrTxn instanceof EditTxn ? iModelOrTxn : iModelOrTxn[_implicitTxn];\n }\n\n /** Return true if the search should recurse into this model */\n protected shouldExploreModel(_model: Model, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should recurse into the children (if any) of this element */\n protected shouldExploreChildren(_parentId: Id64String, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should visit this element */\n protected shouldVisitElement(_elementId: Id64String, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should visit this model */\n protected shouldVisitModel(_model: Model, _scope: ElementTreeWalkerScope): boolean { return true; }\n\n /** Called to visit a model */\n protected abstract visitModel(model: Model, scope: ElementTreeWalkerScope): void;\n\n /** Called to visit an element */\n protected abstract visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void;\n\n /** The main tree-walking function */\n protected processElementTree(element: Id64String, scope: ElementTreeWalkerScope) {\n const subModel = this.txn.iModel.models.tryGetModel<Model>(element);\n if (subModel !== undefined) {\n if (this.shouldExploreModel(subModel, scope))\n this._processSubModel(subModel, scope);\n\n if (this.shouldVisitModel(subModel, scope))\n this.visitModel(subModel, scope);\n }\n\n if (this.shouldExploreChildren(element, scope))\n this._processChildren(element, scope);\n\n if (this.shouldVisitElement(element, scope))\n this.visitElement(element, scope);\n }\n\n /** process the children of the specified parent element */\n private _processChildren(parentElement: Id64String, parentScope: ElementTreeWalkerScope): void {\n const children = this.txn.iModel.elements.queryChildren(parentElement);\n if (children.length === 0)\n return;\n\n const childrenScope = new ElementTreeWalkerScope(parentScope, parentElement);\n\n for (const childElement of children)\n this.processElementTree(childElement, childrenScope);\n }\n\n /** process the elements in the specified model */\n private _processSubModel(model: Model, parenScope: ElementTreeWalkerScope): void {\n const scope = new ElementTreeWalkerScope(parenScope, model);\n // Visit only the top-level parents. processElementTree will visit their children (bottom-up).\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n model.iModel.withPreparedStatement(`select ECInstanceId from bis:Element where Model.id=? and Parent.Id is null`, (stmt) => {\n stmt.bindId(1, model.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, scope);\n }\n });\n }\n}\n\n/** Helper class that manages the deletion of definitions and subjects */\nclass SpecialElements {\n public definitionModels: Id64Array = [];\n public definitions: Id64Array = [];\n public subjects: Id64Array = [];\n\n public constructor(private readonly _txn?: EditTxn) { }\n\n private getTxn(iModel: IModelDb): EditTxn {\n if (undefined !== this._txn)\n return this._txn;\n\n return iModel[_implicitTxn];\n }\n\n public recordSpecialElement(iModel: IModelDb, elementId: Id64String): boolean {\n // Defer Definitions and Subjects\n const cls = classifyElementForPruning(iModel, elementId);\n if (cls === ElementPruningClassification.PRUNING_CLASS_Subject) {\n this.subjects.push(elementId);\n return true;\n } else if (cls === ElementPruningClassification.PRUNING_CLASS_Definition) {\n this.definitions.push(elementId);\n return true;\n } else if (cls === ElementPruningClassification.PRUNING_CLASS_DefinitionPartition) {\n this.definitionModels.push(elementId);\n return true;\n }\n return false; // not a special element\n }\n\n /** Delete special elements - This calls Elements.deleteDefinitionElements to process the collected definition elements as a group and then\n * calls Models.deleteModel on collected definition models. It then deletes all collected Subjects by calling Element.deleteElement on them.\n * @note Caller must ensure that the special elements were recorded in a depth-first search.\n */\n public deleteSpecialElements(iModel: IModelDb) {\n const txn = this.getTxn(iModel);\n // It's dangerous to pass a mixture of SubCategories and Categories to deleteDefinitionElements.\n // That function will delete the Categories first, which automatically deletes all their child\n // SubCategories (in native code). If a SubCategory in the list is one of those children, then\n // deleteDefinitionElements will try and fail with an exception to delete that SubCategory in a subsequent step.\n // To work around this, we delete the SubCategories first, then everything else.\n // A similar problem occurs when you pass other kinds of elements to deleteDefinitionElements, where some are\n // children and others are parents. deleteDefinitionElements does not preserve the order that you specify,\n // and it does not process children before parents.\n for (const definitions of sortChildrenBeforeParents(iModel, this.definitions)) {\n if (isTraceEnabled())\n definitions.forEach((e) => logElement(\"try delete\", iModel, e));\n\n txn.deleteDefinitionElements(definitions); // will not delete definitions that are still in use.\n }\n\n for (const m of this.definitionModels) {\n if (!isModelEmpty(iModel, m)) {\n logModel(\"Model not empty - cannot delete - may contain Definitions that are still in use\", iModel, m, undefined, true);\n } else {\n logModel(\"delete\", iModel, m);\n txn.deleteModel(m);\n txn.deleteElement(m);\n }\n }\n\n for (const e of this.subjects) {\n if (iModel.elements.queryChildren(e).length !== 0) {\n logElement(\"Subject still has children - cannot delete - may have child DefinitionModels\", iModel, e, undefined, true);\n } else {\n logElement(\"delete\", iModel, e);\n txn.deleteElement(e);\n }\n }\n }\n\n}\n\n/** Deletes an entire element tree, including sub-models and child elements.\n * Items are deleted in bottom-up order. Definitions and Subjects are deleted after normal elements.\n * Call deleteNormalElements on each tree. Then call deleteSpecialElements.\n * @see deleteElementTree for a simple way to use this class.\n * @beta\n */\nexport class ElementTreeDeleter extends ElementTreeBottomUp {\n protected _special: SpecialElements;\n\n /**\n * Create an ElementTreeDeleter that uses an explicit EditTxn.\n */\n public constructor(txn: EditTxn);\n /**\n * Create an ElementTreeDeleter.\n * @deprecated Supply an explicit EditTxn.\n */\n public constructor(iModel: IModelDb);\n public constructor(iModelOrTxn: IModelDb | EditTxn) {\n super(iModelOrTxn);\n this._special = new SpecialElements(iModelOrTxn instanceof EditTxn ? iModelOrTxn : undefined);\n }\n\n protected override shouldExploreModel(_model: Model): boolean { return true; }\n protected override shouldVisitElement(_elementId: Id64String): boolean { return true; }\n\n protected override visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\n if (isDefinitionModel(model))\n return; // we recorded definition models in visitElement when we encountered the DefinitionPartition elements.\n\n // visitElement has already deleted the elements in the model. So, now it's safe to delete the model itself.\n logModel(\"delete\", this.txn.iModel, model.id, _scope);\n this.txn.deleteModel(model.id);\n }\n\n protected override visitElement(elementId: Id64String, _scope: ElementTreeWalkerScope): void {\n if (!this._special.recordSpecialElement(this.txn.iModel, elementId)) {\n logElement(\"delete\", this.txn.iModel, elementId, _scope);\n this.txn.deleteElement(elementId);\n }\n }\n\n /**\n * Delete the \"normal\" elements and record the special elements for deferred processing.\n * @param topElement The parent of the sub-tree to be deleted. Top element itself is also deleted.\n * @param scope How the parent was found\n * @see deleteSpecialElements\n */\n public deleteNormalElements(topElement: Id64String, scope?: ElementTreeWalkerScope): void {\n const topScope = scope ?? ElementTreeWalkerScope.createTopScope(this.txn.iModel, topElement);\n this.processElementTree(topElement, topScope); //\n }\n\n /** Delete all special elements that were found and deferred by deleteNormalElements. Call this\n * function once after all element trees are processed by deleteNormalElements.\n */\n public deleteSpecialElements(): void {\n this._special.deleteSpecialElements(this.txn.iModel);\n }\n\n}\n\n/** Does a breadth-first search on the tree defined by an element and its sub-models and children.\n * Parents are visited first, then children, then sub-models.\n * The subclass can \"prune\" sub-trees from the search. When a sub-tree is \"pruned\" the search does *not* recurse into it.\n * If a sub-tree is not pruned, then the search does recurse into it.\n * @beta\n */\nabstract class ElementTreeTopDown {\n constructor(protected _iModel: IModelDb) { }\n\n /** Should the search *not* recurse into this sub-tree? */\n protected shouldPrune(_elementId: Id64String, _scope: ElementTreeWalkerScope): boolean { return false; }\n\n protected abstract prune(_elementId: Id64String, _scope: ElementTreeWalkerScope): void;\n\n protected processElementTree(element: Id64String, scope: ElementTreeWalkerScope) {\n\n if (this.shouldPrune(element, scope)) {\n this.prune(element, scope);\n return;\n }\n\n this._processChildren(element, scope);\n\n const subModel = this._iModel.models.tryGetModel<Model>(element);\n if (subModel !== undefined) {\n this._processSubModel(subModel, scope);\n }\n }\n\n private _processChildren(element: Id64String, scope: ElementTreeWalkerScope) {\n let parentScope: ElementTreeWalkerScope | undefined;\n for (const childElement of this._iModel.elements.queryChildren(element)) {\n if (parentScope === undefined)\n parentScope = new ElementTreeWalkerScope(scope, element);\n this.processElementTree(childElement, parentScope);\n }\n }\n\n private _processSubModel(subModel: Model, scope: ElementTreeWalkerScope) {\n const subModelScope = new ElementTreeWalkerScope(scope, subModel);\n // Visit only the top-level parents. processElementTree will recurse into their children.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._iModel.withPreparedStatement(`select ECInstanceId from bis:Element where Model.id=? and Parent.Id is null`, (stmt) => {\n stmt.bindId(1, subModel.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, subModelScope);\n }\n });\n }\n\n}\n\n/** Signature of the filter function used by ElementSubTreeDeleter.\n * @param elementId The sub-tree parent element.\n * @param scope The path followed by the top-down search to the element\n * @return true if the element and its children and sub-models should be deleted.\n * @beta\n */\nexport type ElementSubTreeDeleteFilter = (elementId: Id64String, scope: ElementTreeWalkerScope) => boolean;\n\n/** Performs a breadth-first search to visit elements in top-down order.\n * When the supplied filter function chooses an element, ElementTreeDeleter is used to delete it and its sub-tree.\n * @beta\n */\nexport class ElementSubTreeDeleter extends ElementTreeTopDown {\n private _treeDeleter: ElementTreeDeleter;\n private _shouldPruneCb: ElementSubTreeDeleteFilter;\n\n /** Construct an ElementSubTreeDeleter.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param shouldPruneCb Callback that selects sub-trees that should be deleted.\n * @param txn The EditTxn used to perform the deletes.\n * @see deleteElementSubTrees for a simple way to use this class.\n */\n public constructor(txn: EditTxn, shouldPruneCb: ElementSubTreeDeleteFilter);\n /** Construct an ElementSubTreeDeleter.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param shouldPruneCb Callback that selects sub-trees that should be deleted.\n * @deprecated Supply an explicit EditTxn.\n * @see deleteElementSubTrees for a simple way to use this class.\n */\n public constructor(iModel: IModelDb, shouldPruneCb: ElementSubTreeDeleteFilter);\n public constructor(iModelOrTxn: IModelDb | EditTxn, shouldPruneCb: ElementSubTreeDeleteFilter) {\n super(iModelOrTxn instanceof EditTxn ? iModelOrTxn.iModel : iModelOrTxn);\n const effectiveTxn = iModelOrTxn instanceof EditTxn ? iModelOrTxn : iModelOrTxn[_implicitTxn];\n this._treeDeleter = new ElementTreeDeleter(effectiveTxn);\n this._shouldPruneCb = shouldPruneCb;\n }\n\n protected override shouldPrune(elementId: Id64String, scope: ElementTreeWalkerScope): boolean { return this._shouldPruneCb(elementId, scope); }\n\n protected prune(elementId: Id64String, scope: ElementTreeWalkerScope): void {\n this._treeDeleter.deleteNormalElements(elementId, scope);\n }\n\n /** Traverses the tree of elements beginning with the top element, and deletes all selected sub-trees.\n * Normal elements are deleted. Any special elements that are encountered are deferred.\n * Call deleteSpecialElementSubTrees after all top elements have been processed. */\n public deleteNormalElementSubTrees(topElement: Id64String, scope?: ElementTreeWalkerScope) {\n const topScope = scope ?? ElementTreeWalkerScope.createTopScope(this._iModel, topElement);\n this.processElementTree(topElement, topScope); // deletes normal elements and their sub-trees, defers special elements\n }\n\n /** Delete all special elements and their sub-trees that were found in the course of processing.\n * The sub-trees were already expanded by ElementTreeDeleter.deleteNormalElements.\n */\n public deleteSpecialElementSubTrees() {\n this._treeDeleter.deleteSpecialElements();\n }\n}\n\n/** Arguments supplied to [[deleteElementTree]].\n * @beta\n */\nexport interface DeleteElementTreeArgs {\n /** The iModel containing the elements to delete. */\n iModel: IModelDb;\n /** The EditTxn used to perform the deletes. */\n txn: EditTxn;\n /** The Id of the root element of the tree to delete. */\n topElement: Id64String;\n /** The maximum number of passes to make when deleting definition elements.\n * Default: 5\n */\n maxPasses?: number;\n}\n\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param txn The EditTxn used to perform the deletes.\n * @param topElement The parent of the sub-tree\n * @param maxPasses The maximum number of passes to make when deleting definition elements.\n * @beta\n */\nexport function deleteElementTree(txn: EditTxn, topElement: Id64String, maxPasses?: number): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param iModel The iModel\n * @param topElement The parent of the sub-tree\n * @deprecated Supply an explicit `txn`.\n * @beta\n */\nexport function deleteElementTree(iModel: IModelDb, topElement: Id64String): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param args Specifies the transaction and top element.\n * @beta\n */\nexport function deleteElementTree(args: DeleteElementTreeArgs): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param args Specifies the iModel and top element.\n * @deprecated Supply `txn` via [[DeleteElementTreeArgs]].\n * @beta\n */\nexport function deleteElementTree(args: { iModel: IModelDb, topElement: Id64String, maxPasses?: number }): void;\n/** @internal */\nexport function deleteElementTree(arg0: DeleteElementTreeArgs | { iModel: IModelDb, topElement: Id64String, maxPasses?: number } | IModelDb | EditTxn, arg1?: Id64String, arg2?: number): void {\n let maxPasses;\n let txn;\n let iModel: IModelDb;\n let topElement: Id64String;\n if (arg0 instanceof EditTxn) {\n assert(typeof arg1 === \"string\");\n txn = arg0;\n iModel = txn.iModel;\n topElement = arg1;\n maxPasses = arg2;\n } else if (arg0 instanceof IModelDb) {\n assert(typeof arg1 === \"string\");\n iModel = arg0;\n topElement = arg1;\n } else {\n iModel = arg0.iModel;\n txn = \"txn\" in arg0 ? arg0.txn : undefined;\n topElement = arg0.topElement;\n maxPasses = arg0.maxPasses;\n }\n\n maxPasses = maxPasses ?? 5;\n let pass = 0;\n do {\n const effectiveTxn = txn ?? iModel[_implicitTxn];\n const del = new ElementTreeDeleter(effectiveTxn);\n del.deleteNormalElements(topElement);\n del.deleteSpecialElements();\n } while ((iModel.elements.tryGetElement(topElement) !== undefined) && (++pass < maxPasses));\n}\n\n/** Deletes all element sub-trees that are selected by the supplied filter. Uses ElementSubTreeDeleter.\n * If the filter selects the top element itself, then the entire tree (including the top element) is deleted.\n * That has the same effect as calling [[deleteElementTree]] on the top element.\n * @note The caller may have to call this function multiple times if there are multiple layers of dependencies among definition elements.\n * @param txn The EditTxn used to perform the deletes.\n * @param topElement Where to start the search.\n * @param filter Callback that selects sub-trees that should be deleted.\n * @beta\n */\nexport function deleteElementSubTrees(txn: EditTxn, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void;\n/** Deletes all element sub-trees that are selected by the supplied filter. Uses ElementSubTreeDeleter.\n * If the filter selects the top element itself, then the entire tree (including the top element) is deleted.\n * That has the same effect as calling [[deleteElementTree]] on the top element.\n * @note The caller may have to call this function multiple times if there are multiple layers of dependencies among definition elements.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param filter Callback that selects sub-trees that should be deleted.\n * @deprecated Supply `txn` explicitly.\n * @beta\n */\nexport function deleteElementSubTrees(iModel: IModelDb, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void;\nexport function deleteElementSubTrees(arg0: EditTxn | IModelDb, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void {\n const effectiveTxn = arg0 instanceof EditTxn ? arg0 : arg0[_implicitTxn];\n const del = new ElementSubTreeDeleter(effectiveTxn, filter);\n del.deleteNormalElementSubTrees(topElement);\n del.deleteSpecialElementSubTrees();\n}\n"]}
1
+ {"version":3,"file":"ElementTreeWalker.js","sourceRoot":"","sources":["../../src/ElementTreeWalker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\nimport { assert, DbResult, Id64Array, Id64String, Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { IModel } from \"@itwin/core-common\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { EditTxn } from \"./EditTxn\";\nimport { DefinitionContainer, DefinitionElement, DefinitionPartition, Element, Subject } from \"./Element\";\nimport { IModelDb } from \"./IModelDb\";\nimport { DefinitionModel, Model } from \"./Model\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\nconst loggerCategory = `${BackendLoggerCategory.IModelDb}.ElementTreeWalker`;\n\n/** @beta */\nexport interface ElementTreeWalkerModelInfo { model: Model, isDefinitionModel: boolean }\n\nfunction sortChildrenBeforeParents(iModel: IModelDb, ids: Id64Array): Array<Id64Array> {\n const children: Id64Array = [];\n const parents: Id64Array = [];\n for (const eid of ids) {\n const parentId = iModel.elements.queryParent(eid);\n if (parentId !== undefined && ids.includes(parentId))\n children.push(eid);\n else\n parents.push(eid);\n }\n\n if (children.length === 0)\n return [parents];\n\n return [...sortChildrenBeforeParents(iModel, children), parents];\n}\n\nfunction isModelEmpty(iModel: IModelDb, modelId: Id64String): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`select count(*) from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, modelId);\n stmt.step();\n return stmt.getValue(0).getInteger() === 0;\n });\n}\n\nfunction isDefinitionModel(model: Model): boolean {\n return (model.id !== IModel.repositoryModelId) && (model instanceof DefinitionModel);\n}\n\nenum ElementPruningClassification { PRUNING_CLASS_Normal = 0, PRUNING_CLASS_Subject = 1, PRUNING_CLASS_Definition = 2, PRUNING_CLASS_DefinitionPartition = 3, }\n\nfunction classifyElementForPruning(iModel: IModelDb, elementId: Id64String): ElementPruningClassification {\n const el = iModel.elements.getElement(elementId);\n // DefinitionContainer is submodeled by a DefinitionModel and so it must be classified as PRUNING_CLASS_DefinitionPartition for tree-walking purposes.\n // Since DefinitionContainer is-a DefinitionElement the (el instanceof DefinitionElement) case below would classify it as PRUNING_CLASS_Definition.\n // That is why we special-case it here.\n if (el instanceof DefinitionContainer)\n return ElementPruningClassification.PRUNING_CLASS_DefinitionPartition;\n return (el instanceof Subject) ? ElementPruningClassification.PRUNING_CLASS_Subject :\n (el instanceof DefinitionElement) ? ElementPruningClassification.PRUNING_CLASS_Definition :\n (el instanceof DefinitionPartition) ? ElementPruningClassification.PRUNING_CLASS_DefinitionPartition :\n ElementPruningClassification.PRUNING_CLASS_Normal;\n}\n\n/** Records the path that a tree search took to reach an element or model. This object is immutable.\n * @beta\n */\nexport class ElementTreeWalkerScope {\n public readonly topElement: Id64String = \"\";\n /** path of parent elements and enclosing models */\n public readonly path: Array<Id64String | ElementTreeWalkerModelInfo> = [];\n /** cached info about the immediately enclosing model (i.e., the last model in path) */\n public readonly enclosingModelInfo: ElementTreeWalkerModelInfo;\n\n constructor(topElement: Id64String, model: Model);\n constructor(enclosingScope: ElementTreeWalkerScope, newScope: Id64String | Model);\n constructor(arg1: Id64String | ElementTreeWalkerScope, arg2: Model | Id64String) {\n if (typeof arg1 === \"string\") {\n // normal constructor\n assert(arg2 instanceof Model);\n this.topElement = arg1;\n this.path.push(this.enclosingModelInfo = { model: arg2, isDefinitionModel: isDefinitionModel(arg2) });\n } else if (arg1 instanceof ElementTreeWalkerScope) {\n // copy-like constructor\n this.topElement = arg1.topElement;\n this.path = [...arg1.path];\n if (typeof arg2 === \"string\") {\n // with new parent\n this.path.push(arg2);\n this.enclosingModelInfo = arg1.enclosingModelInfo;\n } else {\n // with new enclosing model\n this.path.push(this.enclosingModelInfo = { model: arg2, isDefinitionModel: isDefinitionModel(arg2) });\n }\n } else {\n throw new Error(\"invalid constructor signature\");\n }\n }\n\n public get enclosingModel(): Model { return this.enclosingModelInfo.model; }\n public get inDefinitionModel(): boolean { return this.enclosingModelInfo.isDefinitionModel; } // NB: this will return false for the RepositoryModel!\n public get inRepositoryModel(): boolean { return this.enclosingModelInfo.model.id === IModelDb.repositoryModelId; }\n\n public static createTopScope(iModel: IModelDb, topElementId: Id64String) {\n const topElement = iModel.elements.getElement(topElementId);\n const topElementModel = iModel.models.getModel(topElement.model);\n return new ElementTreeWalkerScope(topElementId, topElementModel);\n }\n\n private fmtItem(v: Id64String | ElementTreeWalkerModelInfo): string {\n if (typeof v === \"string\")\n return `element ${v}`;\n return `model ${v.model.id} ${v.isDefinitionModel ? \"(DEFN)\" : \"\"}`;\n }\n\n public toString(): string {\n return `[ ${this.path.map((v) => this.fmtItem(v)).join(\" / \")} ]`;\n }\n}\n\nfunction fmtElement(iModel: IModelDb, elementId: Id64String): string {\n const el = iModel.elements.getElement(elementId);\n return `${el.id} ${el.classFullName} ${el.getDisplayLabel()}`;\n}\n\nfunction fmtModel(model: Model): string {\n return `${model.id} ${model.classFullName} ${model.name}`;\n}\n\nlet isTraceEnabledChecked = -1;\n\nfunction isTraceEnabled(): boolean {\n if (isTraceEnabledChecked === -1)\n isTraceEnabledChecked = Logger.isEnabled(loggerCategory, LogLevel.Trace) ? 1 : 0;\n return isTraceEnabledChecked === 1;\n}\n\nfunction logElement(op: string, iModel: IModelDb, elementId: Id64String, scope?: ElementTreeWalkerScope, logChildren?: boolean): void {\n if (!isTraceEnabled())\n return;\n\n Logger.logTrace(loggerCategory, `${op} ${fmtElement(iModel, elementId)} ${scope ? scope.toString() : \"\"}`);\n\n if (logChildren)\n iModel.elements.queryChildren(elementId).forEach((c) => logElement(\" - \", iModel, c, undefined, true));\n}\n\nfunction logModel(op: string, iModel: IModelDb, modelId: Id64String, scope?: ElementTreeWalkerScope, logElements?: boolean): void {\n if (!isTraceEnabled())\n return;\n const model: Model = iModel.models.getModel(modelId);\n Logger.logTrace(loggerCategory, `${op} ${fmtModel(model)} ${scope ? scope.toString() : \"\"}`);\n\n if (logElements) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, modelId);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n logElement(\" - \", iModel, stmt.getValue(0).getId());\n }\n });\n }\n}\n\n/** Does a depth-first search on the tree defined by an element and its sub-models and children.\n * Sub-models are visited before their modeled elements, and children are visited before their parents.\n *\n * The following callbacks allow the subclass to exclude elements and sub-trees from the search:\n * * [[ElementTreeBottomUp.shouldExploreModel]], [[ElementTreeBottomUp.shouldExploreChildren]]\n * * [[ElementTreeBottomUp.shouldVisitElement]], [[ElementTreeBottomUp.shouldVisitModel]]\n *\n * The [[ElementTreeBottomUp.visitElement]] and [[ElementTreeBottomUp.visitModel]] callbacks allow\n * the subclass to process the elements and models that are encountered in the search.\n * @beta\n */\nexport abstract class ElementTreeBottomUp {\n protected readonly txn: EditTxn;\n\n constructor(iModelOrTxn: IModelDb | EditTxn) {\n this.txn = iModelOrTxn instanceof EditTxn ? iModelOrTxn : iModelOrTxn[_implicitTxn];\n }\n\n /** Return true if the search should recurse into this model */\n protected shouldExploreModel(_model: Model, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should recurse into the children (if any) of this element */\n protected shouldExploreChildren(_parentId: Id64String, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should visit this element */\n protected shouldVisitElement(_elementId: Id64String, _scope: ElementTreeWalkerScope): boolean { return true; }\n /** Return true if the search should visit this model */\n protected shouldVisitModel(_model: Model, _scope: ElementTreeWalkerScope): boolean { return true; }\n\n /** Called to visit a model */\n protected abstract visitModel(model: Model, scope: ElementTreeWalkerScope): void;\n\n /** Called to visit an element */\n protected abstract visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void;\n\n /** The main tree-walking function */\n protected processElementTree(element: Id64String, scope: ElementTreeWalkerScope) {\n const subModel = this.txn.iModel.models.tryGetModel<Model>(element);\n if (subModel !== undefined) {\n if (this.shouldExploreModel(subModel, scope))\n this._processSubModel(subModel, scope);\n\n if (this.shouldVisitModel(subModel, scope))\n this.visitModel(subModel, scope);\n }\n\n if (this.shouldExploreChildren(element, scope))\n this._processChildren(element, scope);\n\n if (this.shouldVisitElement(element, scope))\n this.visitElement(element, scope);\n }\n\n /** process the children of the specified parent element */\n private _processChildren(parentElement: Id64String, parentScope: ElementTreeWalkerScope): void {\n const children = this.txn.iModel.elements.queryChildren(parentElement);\n if (children.length === 0)\n return;\n\n const childrenScope = new ElementTreeWalkerScope(parentScope, parentElement);\n\n for (const childElement of children)\n this.processElementTree(childElement, childrenScope);\n }\n\n /** process the elements in the specified model */\n private _processSubModel(model: Model, parenScope: ElementTreeWalkerScope): void {\n const scope = new ElementTreeWalkerScope(parenScope, model);\n // Visit only the top-level parents. processElementTree will visit their children (bottom-up).\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n model.iModel.withPreparedStatement(`select ECInstanceId from bis:Element where Model.id=? and Parent.Id is null`, (stmt) => {\n stmt.bindId(1, model.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, scope);\n }\n });\n }\n}\n\n/** Helper class that manages the deletion of definitions and subjects */\nclass SpecialElements {\n public definitionModels: Id64Array = [];\n public definitions: Id64Array = [];\n public subjects: Id64Array = [];\n\n public constructor(private readonly _txn?: EditTxn) { }\n\n private getTxn(iModel: IModelDb): EditTxn {\n if (undefined !== this._txn)\n return this._txn;\n\n return iModel[_implicitTxn];\n }\n\n public recordSpecialElement(iModel: IModelDb, elementId: Id64String): boolean {\n // Defer Definitions and Subjects\n const cls = classifyElementForPruning(iModel, elementId);\n if (cls === ElementPruningClassification.PRUNING_CLASS_Subject) {\n this.subjects.push(elementId);\n return true;\n } else if (cls === ElementPruningClassification.PRUNING_CLASS_Definition) {\n this.definitions.push(elementId);\n return true;\n } else if (cls === ElementPruningClassification.PRUNING_CLASS_DefinitionPartition) {\n this.definitionModels.push(elementId);\n return true;\n }\n return false; // not a special element\n }\n\n /** Delete special elements - This calls Elements.deleteDefinitionElements to process the collected definition elements as a group and then\n * calls Models.deleteModel on collected definition models. It then deletes all collected Subjects by calling Element.deleteElement on them.\n * @note Caller must ensure that the special elements were recorded in a depth-first search.\n */\n public deleteSpecialElements(iModel: IModelDb) {\n const txn = this.getTxn(iModel);\n // It's dangerous to pass a mixture of SubCategories and Categories to deleteDefinitionElements.\n // That function will delete the Categories first, which automatically deletes all their child\n // SubCategories (in native code). If a SubCategory in the list is one of those children, then\n // deleteDefinitionElements will try and fail with an exception to delete that SubCategory in a subsequent step.\n // To work around this, we delete the SubCategories first, then everything else.\n // A similar problem occurs when you pass other kinds of elements to deleteDefinitionElements, where some are\n // children and others are parents. deleteDefinitionElements does not preserve the order that you specify,\n // and it does not process children before parents.\n for (const definitions of sortChildrenBeforeParents(iModel, this.definitions)) {\n if (isTraceEnabled())\n definitions.forEach((e) => logElement(\"try delete\", iModel, e));\n\n txn.deleteDefinitionElements(definitions); // will not delete definitions that are still in use.\n }\n\n for (const m of this.definitionModels) {\n if (!isModelEmpty(iModel, m)) {\n logModel(\"Model not empty - cannot delete - may contain Definitions that are still in use\", iModel, m, undefined, true);\n } else {\n logModel(\"delete\", iModel, m);\n txn.deleteModel(m);\n txn.deleteElement(m);\n }\n }\n\n for (const e of this.subjects) {\n if (iModel.elements.queryChildren(e).length !== 0) {\n logElement(\"Subject still has children - cannot delete - may have child DefinitionModels\", iModel, e, undefined, true);\n } else {\n logElement(\"delete\", iModel, e);\n txn.deleteElement(e);\n }\n }\n }\n\n}\n\n/** Deletes an entire element tree, including sub-models and child elements.\n * Items are deleted in bottom-up order. Definitions and Subjects are deleted after normal elements.\n * Call deleteNormalElements on each tree. Then call deleteSpecialElements.\n * @see deleteElementTree for a simple way to use this class.\n * @beta\n */\nexport class ElementTreeDeleter extends ElementTreeBottomUp {\n protected _special: SpecialElements;\n\n /**\n * Create an ElementTreeDeleter that uses an explicit EditTxn.\n */\n public constructor(txn: EditTxn);\n /**\n * Create an ElementTreeDeleter.\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit EditTxn.\n */\n public constructor(iModel: IModelDb);\n public constructor(iModelOrTxn: IModelDb | EditTxn) {\n super(iModelOrTxn);\n this._special = new SpecialElements(iModelOrTxn instanceof EditTxn ? iModelOrTxn : undefined);\n }\n\n protected override shouldExploreModel(_model: Model): boolean { return true; }\n protected override shouldVisitElement(_elementId: Id64String): boolean { return true; }\n\n protected override visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\n if (isDefinitionModel(model))\n return; // we recorded definition models in visitElement when we encountered the DefinitionPartition elements.\n\n // visitElement has already deleted the elements in the model. So, now it's safe to delete the model itself.\n logModel(\"delete\", this.txn.iModel, model.id, _scope);\n this.txn.deleteModel(model.id);\n }\n\n protected override visitElement(elementId: Id64String, _scope: ElementTreeWalkerScope): void {\n if (!this._special.recordSpecialElement(this.txn.iModel, elementId)) {\n logElement(\"delete\", this.txn.iModel, elementId, _scope);\n this.txn.deleteElement(elementId);\n }\n }\n\n /**\n * Delete the \"normal\" elements and record the special elements for deferred processing.\n * @param topElement The parent of the sub-tree to be deleted. Top element itself is also deleted.\n * @param scope How the parent was found\n * @see deleteSpecialElements\n */\n public deleteNormalElements(topElement: Id64String, scope?: ElementTreeWalkerScope): void {\n const topScope = scope ?? ElementTreeWalkerScope.createTopScope(this.txn.iModel, topElement);\n this.processElementTree(topElement, topScope); //\n }\n\n /** Delete all special elements that were found and deferred by deleteNormalElements. Call this\n * function once after all element trees are processed by deleteNormalElements.\n */\n public deleteSpecialElements(): void {\n this._special.deleteSpecialElements(this.txn.iModel);\n }\n\n}\n\n/** Does a breadth-first search on the tree defined by an element and its sub-models and children.\n * Parents are visited first, then children, then sub-models.\n * The subclass can \"prune\" sub-trees from the search. When a sub-tree is \"pruned\" the search does *not* recurse into it.\n * If a sub-tree is not pruned, then the search does recurse into it.\n * @beta\n */\nabstract class ElementTreeTopDown {\n constructor(protected _iModel: IModelDb) { }\n\n /** Should the search *not* recurse into this sub-tree? */\n protected shouldPrune(_elementId: Id64String, _scope: ElementTreeWalkerScope): boolean { return false; }\n\n protected abstract prune(_elementId: Id64String, _scope: ElementTreeWalkerScope): void;\n\n protected processElementTree(element: Id64String, scope: ElementTreeWalkerScope) {\n\n if (this.shouldPrune(element, scope)) {\n this.prune(element, scope);\n return;\n }\n\n this._processChildren(element, scope);\n\n const subModel = this._iModel.models.tryGetModel<Model>(element);\n if (subModel !== undefined) {\n this._processSubModel(subModel, scope);\n }\n }\n\n private _processChildren(element: Id64String, scope: ElementTreeWalkerScope) {\n let parentScope: ElementTreeWalkerScope | undefined;\n for (const childElement of this._iModel.elements.queryChildren(element)) {\n if (parentScope === undefined)\n parentScope = new ElementTreeWalkerScope(scope, element);\n this.processElementTree(childElement, parentScope);\n }\n }\n\n private _processSubModel(subModel: Model, scope: ElementTreeWalkerScope) {\n const subModelScope = new ElementTreeWalkerScope(scope, subModel);\n // Visit only the top-level parents. processElementTree will recurse into their children.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._iModel.withPreparedStatement(`select ECInstanceId from bis:Element where Model.id=? and Parent.Id is null`, (stmt) => {\n stmt.bindId(1, subModel.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, subModelScope);\n }\n });\n }\n\n}\n\n/** Signature of the filter function used by ElementSubTreeDeleter.\n * @param elementId The sub-tree parent element.\n * @param scope The path followed by the top-down search to the element\n * @return true if the element and its children and sub-models should be deleted.\n * @beta\n */\nexport type ElementSubTreeDeleteFilter = (elementId: Id64String, scope: ElementTreeWalkerScope) => boolean;\n\n/** Performs a breadth-first search to visit elements in top-down order.\n * When the supplied filter function chooses an element, ElementTreeDeleter is used to delete it and its sub-tree.\n * @beta\n */\nexport class ElementSubTreeDeleter extends ElementTreeTopDown {\n private _treeDeleter: ElementTreeDeleter;\n private _shouldPruneCb: ElementSubTreeDeleteFilter;\n\n /** Construct an ElementSubTreeDeleter.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param shouldPruneCb Callback that selects sub-trees that should be deleted.\n * @param txn The EditTxn used to perform the deletes.\n * @see deleteElementSubTrees for a simple way to use this class.\n */\n public constructor(txn: EditTxn, shouldPruneCb: ElementSubTreeDeleteFilter);\n /** Construct an ElementSubTreeDeleter.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param shouldPruneCb Callback that selects sub-trees that should be deleted.\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit EditTxn.\n * @see deleteElementSubTrees for a simple way to use this class.\n */\n public constructor(iModel: IModelDb, shouldPruneCb: ElementSubTreeDeleteFilter);\n public constructor(iModelOrTxn: IModelDb | EditTxn, shouldPruneCb: ElementSubTreeDeleteFilter) {\n super(iModelOrTxn instanceof EditTxn ? iModelOrTxn.iModel : iModelOrTxn);\n const effectiveTxn = iModelOrTxn instanceof EditTxn ? iModelOrTxn : iModelOrTxn[_implicitTxn];\n this._treeDeleter = new ElementTreeDeleter(effectiveTxn);\n this._shouldPruneCb = shouldPruneCb;\n }\n\n protected override shouldPrune(elementId: Id64String, scope: ElementTreeWalkerScope): boolean { return this._shouldPruneCb(elementId, scope); }\n\n protected prune(elementId: Id64String, scope: ElementTreeWalkerScope): void {\n this._treeDeleter.deleteNormalElements(elementId, scope);\n }\n\n /** Traverses the tree of elements beginning with the top element, and deletes all selected sub-trees.\n * Normal elements are deleted. Any special elements that are encountered are deferred.\n * Call deleteSpecialElementSubTrees after all top elements have been processed. */\n public deleteNormalElementSubTrees(topElement: Id64String, scope?: ElementTreeWalkerScope) {\n const topScope = scope ?? ElementTreeWalkerScope.createTopScope(this._iModel, topElement);\n this.processElementTree(topElement, topScope); // deletes normal elements and their sub-trees, defers special elements\n }\n\n /** Delete all special elements and their sub-trees that were found in the course of processing.\n * The sub-trees were already expanded by ElementTreeDeleter.deleteNormalElements.\n */\n public deleteSpecialElementSubTrees() {\n this._treeDeleter.deleteSpecialElements();\n }\n}\n\n/** Arguments supplied to [[deleteElementTree]].\n * @beta\n */\nexport interface DeleteElementTreeArgs {\n /** The iModel containing the elements to delete. */\n iModel: IModelDb;\n /** The EditTxn used to perform the deletes. */\n txn: EditTxn;\n /** The Id of the root element of the tree to delete. */\n topElement: Id64String;\n /** The maximum number of passes to make when deleting definition elements.\n * Default: 5\n */\n maxPasses?: number;\n}\n\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param txn The EditTxn used to perform the deletes.\n * @param topElement The parent of the sub-tree\n * @param maxPasses The maximum number of passes to make when deleting definition elements.\n * @beta\n */\nexport function deleteElementTree(txn: EditTxn, topElement: Id64String, maxPasses?: number): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param iModel The iModel\n * @param topElement The parent of the sub-tree\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply an explicit `txn`.\n * @beta\n */\nexport function deleteElementTree(iModel: IModelDb, topElement: Id64String): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param args Specifies the transaction and top element.\n * @beta\n */\nexport function deleteElementTree(args: DeleteElementTreeArgs): void;\n/** Deletes an element tree starting with the specified top element. The top element is also deleted. Uses ElementTreeDeleter.\n * @param args Specifies the iModel and top element.\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply `txn` via [[DeleteElementTreeArgs]].\n * @beta\n */\nexport function deleteElementTree(args: { iModel: IModelDb, topElement: Id64String, maxPasses?: number }): void;\n/** @internal */\nexport function deleteElementTree(arg0: DeleteElementTreeArgs | { iModel: IModelDb, topElement: Id64String, maxPasses?: number } | IModelDb | EditTxn, arg1?: Id64String, arg2?: number): void {\n let maxPasses;\n let txn;\n let iModel: IModelDb;\n let topElement: Id64String;\n if (arg0 instanceof EditTxn) {\n assert(typeof arg1 === \"string\");\n txn = arg0;\n iModel = txn.iModel;\n topElement = arg1;\n maxPasses = arg2;\n } else if (arg0 instanceof IModelDb) {\n assert(typeof arg1 === \"string\");\n iModel = arg0;\n topElement = arg1;\n } else {\n iModel = arg0.iModel;\n txn = \"txn\" in arg0 ? arg0.txn : undefined;\n topElement = arg0.topElement;\n maxPasses = arg0.maxPasses;\n }\n\n maxPasses = maxPasses ?? 5;\n let pass = 0;\n do {\n const effectiveTxn = txn ?? iModel[_implicitTxn];\n const del = new ElementTreeDeleter(effectiveTxn);\n del.deleteNormalElements(topElement);\n del.deleteSpecialElements();\n } while ((iModel.elements.tryGetElement(topElement) !== undefined) && (++pass < maxPasses));\n}\n\n/** Deletes all element sub-trees that are selected by the supplied filter. Uses ElementSubTreeDeleter.\n * If the filter selects the top element itself, then the entire tree (including the top element) is deleted.\n * That has the same effect as calling [[deleteElementTree]] on the top element.\n * @note The caller may have to call this function multiple times if there are multiple layers of dependencies among definition elements.\n * @param txn The EditTxn used to perform the deletes.\n * @param topElement Where to start the search.\n * @param filter Callback that selects sub-trees that should be deleted.\n * @beta\n */\nexport function deleteElementSubTrees(txn: EditTxn, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void;\n/** Deletes all element sub-trees that are selected by the supplied filter. Uses ElementSubTreeDeleter.\n * If the filter selects the top element itself, then the entire tree (including the top element) is deleted.\n * That has the same effect as calling [[deleteElementTree]] on the top element.\n * @note The caller may have to call this function multiple times if there are multiple layers of dependencies among definition elements.\n * @param iModel The iModel\n * @param topElement Where to start the search.\n * @param filter Callback that selects sub-trees that should be deleted.\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Supply `txn` explicitly.\n * @beta\n */\nexport function deleteElementSubTrees(iModel: IModelDb, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void;\nexport function deleteElementSubTrees(arg0: EditTxn | IModelDb, topElement: Id64String, filter: ElementSubTreeDeleteFilter): void {\n const effectiveTxn = arg0 instanceof EditTxn ? arg0 : arg0[_implicitTxn];\n const del = new ElementSubTreeDeleter(effectiveTxn, filter);\n del.deleteNormalElementSubTrees(topElement);\n del.deleteSpecialElementSubTrees();\n}\n"]}
@@ -27,7 +27,7 @@ export declare class ExternalSource extends InformationReferenceElement {
27
27
  * @param txn The active EditTxn.
28
28
  */
29
29
  static ensureCodeSpec(txn: EditTxn): Id64String;
30
- /** @deprecated Use ExternalSource.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */
30
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ExternalSource.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */
31
31
  static ensureCodeSpec(iModelDb: IModelDb): Id64String;
32
32
  /** Create a Code for an ExternalSource element given a name that is meant to be unique within the scope of the iModel.
33
33
  * @param iModelDb The IModelDb
@@ -64,7 +64,7 @@ export declare class ExternalSourceAttachment extends InformationReferenceElemen
64
64
  * @param txn The active EditTxn.
65
65
  */
66
66
  static ensureCodeSpec(txn: EditTxn): Id64String;
67
- /** @deprecated Use ExternalSourceAttachment.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */
67
+ /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ExternalSourceAttachment.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */
68
68
  static ensureCodeSpec(iModelDb: IModelDb): Id64String;
69
69
  /** Create a Code for an ExternalSourceAttachment element given a name that is meant to be unique within the scope of its parent [[ExternalSource]].
70
70
  * @param iModelDb The IModelDb
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalSource.d.ts","sourceRoot":"","sources":["../../src/ExternalSource.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACQ,IAAI,EAAiB,kBAAkB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,mBAAmB,EACtI,8BAA8B,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,sCAAsC,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAGhH;;;GAGG;AACH,qBAAa,cAAe,SAAQ,2BAA2B;IAC7D,wDAAwD;IACjD,UAAU,CAAC,EAAE,4BAA4B,CAAC;IACjD,2EAA2E;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAE3E,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;IAMlD,MAAM,IAAI,mBAAmB;IAG7C;;OAEG;WACW,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU;IACtD,uKAAuK;WACzJ,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU;IAW5D;;;;OAIG;WACW,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;cAKlD,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;CAK/E;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,2BAA2B;IACvE,gFAAgF;IACzE,QAAQ,CAAC,EAAE,sCAAsC,CAAC;IACzD,wGAAwG;IACjG,IAAI,CAAC,EAAE,4BAA4B,CAAC;IAC3C,0IAA0I;IACnI,WAAW,CAAC,EAAE,OAAO,CAAC;IAC7B,qHAAqH;IAC9G,GAAG,CAAC,EAAE,MAAM,CAAC;IACpB,uHAAuH;IAChH,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,sHAAsH;IAC/G,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,oGAAoG;IAC7F,KAAK,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAuC;IAErF,SAAS,aAAa,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,QAAQ;IAY5D,MAAM,IAAI,6BAA6B;IAGvD;;OAEG;WACW,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU;IACtD,iLAAiL;WACnK,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU;IAW5D;;;;;OAKG;WACW,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIlG;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAkC;IAEhF,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;CAGnE;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,OAAO;IACpD,6EAA6E;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAwC;IAEtF,SAAS,aAAa,KAAK,EAAE,8BAA8B,EAAE,MAAM,EAAE,QAAQ;IAI7D,MAAM,IAAI,8BAA8B;CAGzD"}
1
+ {"version":3,"file":"ExternalSource.d.ts","sourceRoot":"","sources":["../../src/ExternalSource.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACQ,IAAI,EAAiB,kBAAkB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,mBAAmB,EACtI,8BAA8B,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,sCAAsC,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAGhH;;;GAGG;AACH,qBAAa,cAAe,SAAQ,2BAA2B;IAC7D,wDAAwD;IACjD,UAAU,CAAC,EAAE,4BAA4B,CAAC;IACjD,2EAA2E;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAE3E,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;IAMlD,MAAM,IAAI,mBAAmB;IAG7C;;OAEG;WACW,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU;IACtD,8NAA8N;WAChN,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU;IAW5D;;;;OAIG;WACW,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;cAKlD,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;CAK/E;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,2BAA2B;IACvE,gFAAgF;IACzE,QAAQ,CAAC,EAAE,sCAAsC,CAAC;IACzD,wGAAwG;IACjG,IAAI,CAAC,EAAE,4BAA4B,CAAC;IAC3C,0IAA0I;IACnI,WAAW,CAAC,EAAE,OAAO,CAAC;IAC7B,qHAAqH;IAC9G,GAAG,CAAC,EAAE,MAAM,CAAC;IACpB,uHAAuH;IAChH,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,sHAAsH;IAC/G,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,oGAAoG;IAC7F,KAAK,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAuC;IAErF,SAAS,aAAa,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,QAAQ;IAY5D,MAAM,IAAI,6BAA6B;IAGvD;;OAEG;WACW,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU;IACtD,wOAAwO;WAC1N,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU;IAW5D;;;;;OAKG;WACW,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIlG;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAkC;IAEhF,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;CAGnE;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,OAAO;IACpD,6EAA6E;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAwC;IAEtF,SAAS,aAAa,KAAK,EAAE,8BAA8B,EAAE,MAAM,EAAE,QAAQ;IAI7D,MAAM,IAAI,8BAA8B;CAGzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalSource.js","sourceRoot":"","sources":["../../src/ExternalSource.ts"],"names":[],"mappings":"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","sourcesContent":["\n/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport {\n BisCodeSpec, Code, CodeScopeSpec, EntityReferenceSet, ExternalSourceAttachmentProps, ExternalSourceAttachmentRole, ExternalSourceProps, IModel, RelatedElement,\n SynchronizationConfigLinkProps,\n} from \"@itwin/core-common\";\nimport { InformationReferenceElement, UrlLink } from \"./Element\";\nimport { EditTxn } from \"./EditTxn\";\nimport { IModelDb } from \"./IModelDb\";\nimport { ExternalSourceAttachmentAttachesSource, ExternalSourceIsInRepository } from \"./NavigationRelationship\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\n/** An ExternalSource refers to an 'information container' found in a repository. In some cases, the container is the entire repository.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSource extends InformationReferenceElement {\n /** The repository that contains this ExternalSource. */\n public repository?: ExternalSourceIsInRepository;\n /** The name of the iModel Connecter that processed this ExternalSource. */\n public connectorName?: string;\n /** The version of the iModel Connecter that processed this ExternalSource. */\n public connectorVersion?: string;\n /** @internal */\n public static override get className(): string { return \"ExternalSource\"; }\n\n protected constructor(props: ExternalSourceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.repository)\n this.repository = new ExternalSourceIsInRepository(RelatedElement.idFromJson(props.repository));\n }\n\n public override toJSON(): ExternalSourceProps { // This override only specializes the return type\n return super.toJSON() as ExternalSourceProps; // Entity.toJSON takes care of auto-handled properties\n }\n /** Ensure the [[CodeSpec]] for ExternalSource elements exists, using an explicit transaction.\n * @param txn The active EditTxn.\n */\n public static ensureCodeSpec(txn: EditTxn): Id64String;\n /** @deprecated Use ExternalSource.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\n public static ensureCodeSpec(iModelDb: IModelDb): Id64String;\n public static ensureCodeSpec(txnOrIModel: EditTxn | IModelDb): Id64String {\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\n try {\n const codeSpec = txn.iModel.codeSpecs.getByName(BisCodeSpec.externalSource);\n return codeSpec.id;\n } catch {\n return txn.iModel.codeSpecs.insert(txn, BisCodeSpec.externalSource, CodeScopeSpec.Type.Repository);\n }\n }\n\n /** Create a Code for an ExternalSource element given a name that is meant to be unique within the scope of the iModel.\n * @param iModelDb The IModelDb\n * @param codeValue The ExternalSource name\n * @see [[ensureCodeSpec]]\n */\n public static createCode(iModelDb: IModelDb, codeValue: string): Code {\n const codeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.externalSource);\n return new Code({ spec: codeSpec.id, scope: IModel.rootSubjectId, value: codeValue });\n }\n\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.repository)\n referenceIds.addElement(this.repository.id);\n }\n}\n\n/** Attachment of an ExternalSource\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSourceAttachment extends InformationReferenceElement {\n /** The [[ExternalSource]] that is attached by this ExternalSourceAttachment. */\n public attaches?: ExternalSourceAttachmentAttachesSource;\n /** Specifies whether the attached [[ExternalSource]] provides context or models a part of the whole. */\n public role?: ExternalSourceAttachmentRole;\n /** The translation or offset in global coordinates of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public translation?: Point3d;\n /** The Yaw angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public yaw?: number;\n /** The Pitch angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public pitch?: number;\n /** The Roll angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public roll?: number;\n /** The scale of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public scale?: Point3d;\n /** @internal */\n public static override get className(): string { return \"ExternalSourceAttachment\"; }\n\n protected constructor(props: ExternalSourceAttachmentProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.attaches)\n this.attaches = new ExternalSourceAttachmentAttachesSource(RelatedElement.idFromJson(props.attaches));\n\n if (props.translation)\n this.translation = Point3d.fromJSON(props.translation);\n\n if (props.scale)\n this.scale = Point3d.fromJSON(props.scale);\n }\n\n public override toJSON(): ExternalSourceAttachmentProps { // This override only specializes the return type\n return super.toJSON() as ExternalSourceAttachmentProps; // Entity.toJSON takes care of auto-handled properties\n }\n /** Ensure the [[CodeSpec]] for ExternalSourceAttachment elements exists, using an explicit transaction.\n * @param txn The active EditTxn.\n */\n public static ensureCodeSpec(txn: EditTxn): Id64String;\n /** @deprecated Use ExternalSourceAttachment.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\n public static ensureCodeSpec(iModelDb: IModelDb): Id64String;\n public static ensureCodeSpec(txnOrIModel: EditTxn | IModelDb): Id64String {\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\n try {\n const codeSpec = txn.iModel.codeSpecs.getByName(BisCodeSpec.externalSourceAttachment);\n return codeSpec.id;\n } catch {\n return txn.iModel.codeSpecs.insert(txn, BisCodeSpec.externalSourceAttachment, CodeScopeSpec.Type.ParentElement);\n }\n }\n\n /** Create a Code for an ExternalSourceAttachment element given a name that is meant to be unique within the scope of its parent [[ExternalSource]].\n * @param iModelDb The IModelDb\n * @param scopeElementId The parent ExternalSource\n * @param codeValue The ExternalSourceAttachment name\n * @see [[ensureCodeSpec]]\n */\n public static createCode(iModelDb: IModelDb, scopeElementId: Id64String, codeValue: string): Code {\n const codeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.externalSourceAttachment);\n return new Code({ spec: codeSpec.id, scope: scopeElementId, value: codeValue });\n }\n}\n\n/** A group of ExternalSources that are collectively a source of information for one or more elements.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSourceGroup extends ExternalSource {\n /** @internal */\n public static override get className(): string { return \"ExternalSourceGroup\"; }\n\n protected constructor(props: ExternalSourceProps, iModel: IModelDb) {\n super(props, iModel);\n }\n}\n\n/** Link to the Configuration for an iModel Synchronization Job\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class SynchronizationConfigLink extends UrlLink {\n /** Date/Time of last successful run of this synchronization configuration */\n public lastSuccessfulRun?: string;\n /** @internal */\n public static override get className(): string { return \"SynchronizationConfigLink\"; }\n\n protected constructor(props: SynchronizationConfigLinkProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n public override toJSON(): SynchronizationConfigLinkProps { // This override only specializes the return type\n return super.toJSON() as SynchronizationConfigLinkProps; // Entity.toJSON takes care of auto-handled properties\n }\n}\n\n"]}
1
+ {"version":3,"file":"ExternalSource.js","sourceRoot":"","sources":["../../src/ExternalSource.ts"],"names":[],"mappings":"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","sourcesContent":["\n/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport {\n BisCodeSpec, Code, CodeScopeSpec, EntityReferenceSet, ExternalSourceAttachmentProps, ExternalSourceAttachmentRole, ExternalSourceProps, IModel, RelatedElement,\n SynchronizationConfigLinkProps,\n} from \"@itwin/core-common\";\nimport { InformationReferenceElement, UrlLink } from \"./Element\";\nimport { EditTxn } from \"./EditTxn\";\nimport { IModelDb } from \"./IModelDb\";\nimport { ExternalSourceAttachmentAttachesSource, ExternalSourceIsInRepository } from \"./NavigationRelationship\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\n/** An ExternalSource refers to an 'information container' found in a repository. In some cases, the container is the entire repository.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSource extends InformationReferenceElement {\n /** The repository that contains this ExternalSource. */\n public repository?: ExternalSourceIsInRepository;\n /** The name of the iModel Connecter that processed this ExternalSource. */\n public connectorName?: string;\n /** The version of the iModel Connecter that processed this ExternalSource. */\n public connectorVersion?: string;\n /** @internal */\n public static override get className(): string { return \"ExternalSource\"; }\n\n protected constructor(props: ExternalSourceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.repository)\n this.repository = new ExternalSourceIsInRepository(RelatedElement.idFromJson(props.repository));\n }\n\n public override toJSON(): ExternalSourceProps { // This override only specializes the return type\n return super.toJSON(); // Entity.toJSON takes care of auto-handled properties\n }\n /** Ensure the [[CodeSpec]] for ExternalSource elements exists, using an explicit transaction.\n * @param txn The active EditTxn.\n */\n public static ensureCodeSpec(txn: EditTxn): Id64String;\n /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ExternalSource.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\n public static ensureCodeSpec(iModelDb: IModelDb): Id64String;\n public static ensureCodeSpec(txnOrIModel: EditTxn | IModelDb): Id64String {\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\n try {\n const codeSpec = txn.iModel.codeSpecs.getByName(BisCodeSpec.externalSource);\n return codeSpec.id;\n } catch {\n return txn.iModel.codeSpecs.insert(txn, BisCodeSpec.externalSource, CodeScopeSpec.Type.Repository);\n }\n }\n\n /** Create a Code for an ExternalSource element given a name that is meant to be unique within the scope of the iModel.\n * @param iModelDb The IModelDb\n * @param codeValue The ExternalSource name\n * @see [[ensureCodeSpec]]\n */\n public static createCode(iModelDb: IModelDb, codeValue: string): Code {\n const codeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.externalSource);\n return new Code({ spec: codeSpec.id, scope: IModel.rootSubjectId, value: codeValue });\n }\n\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.repository)\n referenceIds.addElement(this.repository.id);\n }\n}\n\n/** Attachment of an ExternalSource\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSourceAttachment extends InformationReferenceElement {\n /** The [[ExternalSource]] that is attached by this ExternalSourceAttachment. */\n public attaches?: ExternalSourceAttachmentAttachesSource;\n /** Specifies whether the attached [[ExternalSource]] provides context or models a part of the whole. */\n public role?: ExternalSourceAttachmentRole;\n /** The translation or offset in global coordinates of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public translation?: Point3d;\n /** The Yaw angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public yaw?: number;\n /** The Pitch angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public pitch?: number;\n /** The Roll angle (in degrees) of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public roll?: number;\n /** The scale of the attached [[ExternalSource]] relative to the ExternalSource that attaches it. */\n public scale?: Point3d;\n /** @internal */\n public static override get className(): string { return \"ExternalSourceAttachment\"; }\n\n protected constructor(props: ExternalSourceAttachmentProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.attaches)\n this.attaches = new ExternalSourceAttachmentAttachesSource(RelatedElement.idFromJson(props.attaches));\n\n if (props.translation)\n this.translation = Point3d.fromJSON(props.translation);\n\n if (props.scale)\n this.scale = Point3d.fromJSON(props.scale);\n }\n\n public override toJSON(): ExternalSourceAttachmentProps { // This override only specializes the return type\n return super.toJSON(); // Entity.toJSON takes care of auto-handled properties\n }\n /** Ensure the [[CodeSpec]] for ExternalSourceAttachment elements exists, using an explicit transaction.\n * @param txn The active EditTxn.\n */\n public static ensureCodeSpec(txn: EditTxn): Id64String;\n /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use ExternalSourceAttachment.ensureCodeSpec(txn) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */\n public static ensureCodeSpec(iModelDb: IModelDb): Id64String;\n public static ensureCodeSpec(txnOrIModel: EditTxn | IModelDb): Id64String {\n const txn = txnOrIModel instanceof EditTxn ? txnOrIModel : txnOrIModel[_implicitTxn];\n try {\n const codeSpec = txn.iModel.codeSpecs.getByName(BisCodeSpec.externalSourceAttachment);\n return codeSpec.id;\n } catch {\n return txn.iModel.codeSpecs.insert(txn, BisCodeSpec.externalSourceAttachment, CodeScopeSpec.Type.ParentElement);\n }\n }\n\n /** Create a Code for an ExternalSourceAttachment element given a name that is meant to be unique within the scope of its parent [[ExternalSource]].\n * @param iModelDb The IModelDb\n * @param scopeElementId The parent ExternalSource\n * @param codeValue The ExternalSourceAttachment name\n * @see [[ensureCodeSpec]]\n */\n public static createCode(iModelDb: IModelDb, scopeElementId: Id64String, codeValue: string): Code {\n const codeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.externalSourceAttachment);\n return new Code({ spec: codeSpec.id, scope: scopeElementId, value: codeValue });\n }\n}\n\n/** A group of ExternalSources that are collectively a source of information for one or more elements.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSourceGroup extends ExternalSource {\n /** @internal */\n public static override get className(): string { return \"ExternalSourceGroup\"; }\n\n protected constructor(props: ExternalSourceProps, iModel: IModelDb) {\n super(props, iModel);\n }\n}\n\n/** Link to the Configuration for an iModel Synchronization Job\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class SynchronizationConfigLink extends UrlLink {\n /** Date/Time of last successful run of this synchronization configuration */\n public lastSuccessfulRun?: string;\n /** @internal */\n public static override get className(): string { return \"SynchronizationConfigLink\"; }\n\n protected constructor(props: SynchronizationConfigLinkProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n public override toJSON(): SynchronizationConfigLinkProps { // This override only specializes the return type\n return super.toJSON(); // Entity.toJSON takes care of auto-handled properties\n }\n}\n\n"]}
@@ -21,6 +21,10 @@ export interface AvailableCoordinateReferenceSystemProps {
21
21
  * Maximum longitude and latitude correspond to crsExtent.high.x and crsExtent.high.y, respectively.
22
22
  */
23
23
  crsExtent: Range2dProps;
24
+ /** The name of the linear unit used by the coordinate reference system.
25
+ * When returned by [[getAvailableCoordinateReferenceSystems]], the value uses the canonical casing returned by [[getAvailableCRSUnits]].
26
+ */
27
+ unit?: string;
24
28
  }
25
29
  /** Arguments supplied to [[getAvailableCoordinateReferenceSystems]].
26
30
  * @beta
@@ -34,6 +38,12 @@ export interface GetAvailableCoordinateReferenceSystemsArgs {
34
38
  * @default false
35
39
  */
36
40
  includeWorld?: boolean;
41
+ /**
42
+ * If provided, filter coordinate reference systems by unit name.
43
+ * Matching is case-insensitive.
44
+ * Use [[getAvailableCRSUnits]] to get a list of canonical unit names.
45
+ */
46
+ unit?: string;
37
47
  }
38
48
  /** Get a list of Geographic Coordinate Reference Systems.
39
49
  * @param options Specifies the parameters to filter the returned list.
@@ -41,4 +51,9 @@ export interface GetAvailableCoordinateReferenceSystemsArgs {
41
51
  * @beta
42
52
  */
43
53
  export declare function getAvailableCoordinateReferenceSystems(args: GetAvailableCoordinateReferenceSystemsArgs): Promise<AvailableCoordinateReferenceSystemProps[]>;
54
+ /** Get a list of units used by Geographic Coordinate Reference Systems in iTwin.js.
55
+ * @returns An array of canonical unit names.
56
+ * @beta
57
+ */
58
+ export declare function getAvailableCRSUnits(): string[];
44
59
  //# sourceMappingURL=GeographicCRSServices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,mJAAmJ;IACnJ,IAAI,EAAE,MAAM,CAAC;IACb,8JAA8J;IAC9J,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,0CAA0C;IACzD;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAsB,sCAAsC,CAAC,IAAI,EAAE,0CAA0C,GAAG,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAGjK"}
1
+ {"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,mJAAmJ;IACnJ,IAAI,EAAE,MAAM,CAAC;IACb,8JAA8J;IAC9J,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,0CAA0C;IACzD;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,sCAAsC,CAC1D,IAAI,EAAE,0CAA0C,GAC/C,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAOpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C"}
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  /** @packageDocumentation
6
6
  * @module iModels
7
7
  */
@@ -14,6 +14,14 @@ import { GeoCoordConfig } from "./GeoCoordConfig";
14
14
  */
15
15
  export async function getAvailableCoordinateReferenceSystems(args) {
16
16
  GeoCoordConfig.loadDefaultDatabases();
17
- return IModelNative.platform.GeoServices.getListOfCRS(args.extent, args.includeWorld);
17
+ return IModelNative.platform.GeoServices.getListOfCRS(args.extent, args.includeWorld, args.unit);
18
+ }
19
+ /** Get a list of units used by Geographic Coordinate Reference Systems in iTwin.js.
20
+ * @returns An array of canonical unit names.
21
+ * @beta
22
+ */
23
+ export function getAvailableCRSUnits() {
24
+ GeoCoordConfig.loadDefaultDatabases();
25
+ return IModelNative.platform.GeoServices.getAvailableUnitNames();
18
26
  }
19
27
  //# sourceMappingURL=GeographicCRSServices.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqClD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAAC,IAAgD;IAC3G,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACxF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { Range2dProps } from \"@itwin/core-geometry\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\n\n/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].\n * @beta\n */\nexport interface AvailableCoordinateReferenceSystemProps {\n /** The name of the coordinate reference system. It can be presented to the user in the UI as an identifier for the coordinate reference system. */\n name: string;\n /** The description of the coordinate reference system. It can be presented to the user in the UI as extra information for the coordinate reference system. */\n description: string;\n /** Indicate if the coordinate reference system is deprecated. A coordinate reference system is deprecated if it is no longer recommended for use.\n * A deprecated coordinate reference system can usually be substituted by a more accurate one. It is possible that an existing project uses a deprecated coordinate reference system.\n * However, for new projects, it is recommended to use a non-deprecated coordinate reference system.\n */\n deprecated: boolean;\n /** Extent of the coordinate reference system. This is the area where the coordinate reference system can be used.\n * Outside of this area, the coordinate reference system may not be accurate. The extent is defined by a range of longitude and latitude values.\n * Minimum longitude and latitude correspond to crsExtent.low.x and crsExtent.low.y, respectively.\n * Maximum longitude and latitude correspond to crsExtent.high.x and crsExtent.high.y, respectively.\n */\n crsExtent: Range2dProps;\n}\n\n/** Arguments supplied to [[getAvailableCoordinateReferenceSystems]].\n * @beta\n */\nexport interface GetAvailableCoordinateReferenceSystemsArgs {\n /** If provided, only return coordinate reference systems that contain the given extent. Minimum longitude and latitude correspond to extent.low.x and extent.low.y, respectively.\n * Maximum longitude and latitude correspond to extent.high.x and extent.high.y, respectively.\n */\n extent?: Range2dProps;\n /** If true, returns additional coordinate reference systems with extents spanning the entire Earth's surface.\n * @default false\n */\n includeWorld?: boolean\n}\n\n/** Get a list of Geographic Coordinate Reference Systems.\n * @param options Specifies the parameters to filter the returned list.\n * @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.\n * @beta\n */\nexport async function getAvailableCoordinateReferenceSystems(args: GetAvailableCoordinateReferenceSystemsArgs): Promise<AvailableCoordinateReferenceSystemProps[]> {\n GeoCoordConfig.loadDefaultDatabases();\n return IModelNative.platform.GeoServices.getListOfCRS(args.extent, args.includeWorld);\n}\n"]}
1
+ {"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA+ClD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,IAAgD;IAEhD,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CACnD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACnE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { Range2dProps } from \"@itwin/core-geometry\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\n\n/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].\n * @beta\n */\nexport interface AvailableCoordinateReferenceSystemProps {\n /** The name of the coordinate reference system. It can be presented to the user in the UI as an identifier for the coordinate reference system. */\n name: string;\n /** The description of the coordinate reference system. It can be presented to the user in the UI as extra information for the coordinate reference system. */\n description: string;\n /** Indicate if the coordinate reference system is deprecated. A coordinate reference system is deprecated if it is no longer recommended for use.\n * A deprecated coordinate reference system can usually be substituted by a more accurate one. It is possible that an existing project uses a deprecated coordinate reference system.\n * However, for new projects, it is recommended to use a non-deprecated coordinate reference system.\n */\n deprecated: boolean;\n /** Extent of the coordinate reference system. This is the area where the coordinate reference system can be used.\n * Outside of this area, the coordinate reference system may not be accurate. The extent is defined by a range of longitude and latitude values.\n * Minimum longitude and latitude correspond to crsExtent.low.x and crsExtent.low.y, respectively.\n * Maximum longitude and latitude correspond to crsExtent.high.x and crsExtent.high.y, respectively.\n */\n crsExtent: Range2dProps;\n /** The name of the linear unit used by the coordinate reference system.\n * When returned by [[getAvailableCoordinateReferenceSystems]], the value uses the canonical casing returned by [[getAvailableCRSUnits]].\n */\n unit?: string;\n}\n\n/** Arguments supplied to [[getAvailableCoordinateReferenceSystems]].\n * @beta\n */\nexport interface GetAvailableCoordinateReferenceSystemsArgs {\n /** If provided, only return coordinate reference systems that contain the given extent. Minimum longitude and latitude correspond to extent.low.x and extent.low.y, respectively.\n * Maximum longitude and latitude correspond to extent.high.x and extent.high.y, respectively.\n */\n extent?: Range2dProps;\n /** If true, returns additional coordinate reference systems with extents spanning the entire Earth's surface.\n * @default false\n */\n includeWorld?: boolean;\n /**\n * If provided, filter coordinate reference systems by unit name.\n * Matching is case-insensitive.\n * Use [[getAvailableCRSUnits]] to get a list of canonical unit names.\n */\n unit?: string;\n}\n\n/** Get a list of Geographic Coordinate Reference Systems.\n * @param options Specifies the parameters to filter the returned list.\n * @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.\n * @beta\n */\nexport async function getAvailableCoordinateReferenceSystems(\n args: GetAvailableCoordinateReferenceSystemsArgs\n): Promise<AvailableCoordinateReferenceSystemProps[]> {\n GeoCoordConfig.loadDefaultDatabases();\n return IModelNative.platform.GeoServices.getListOfCRS(\n args.extent,\n args.includeWorld,\n args.unit\n );\n}\n\n/** Get a list of units used by Geographic Coordinate Reference Systems in iTwin.js.\n * @returns An array of canonical unit names.\n * @beta\n */\nexport function getAvailableCRSUnits(): string[] {\n GeoCoordConfig.loadDefaultDatabases();\n return IModelNative.platform.GeoServices.getAvailableUnitNames();\n}\n"]}