@itwin/core-backend 5.1.0-dev.4 → 5.1.0-dev.41

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 (284) hide show
  1. package/CHANGELOG.md +109 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BisCoreSchema.js +1 -1
  6. package/lib/cjs/BisCoreSchema.js.map +1 -1
  7. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  8. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  9. package/lib/cjs/BriefcaseManager.js +12 -0
  10. package/lib/cjs/BriefcaseManager.js.map +1 -1
  11. package/lib/cjs/Category.d.ts +4 -4
  12. package/lib/cjs/Category.js +4 -4
  13. package/lib/cjs/Category.js.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.d.ts +67 -8
  15. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  16. package/lib/cjs/ChangesetECAdaptor.js +248 -33
  17. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.d.ts +1 -1
  19. package/lib/cjs/ClassRegistry.js +1 -1
  20. package/lib/cjs/ClassRegistry.js.map +1 -1
  21. package/lib/cjs/CloudSqlite.js +1 -1
  22. package/lib/cjs/CloudSqlite.js.map +1 -1
  23. package/lib/cjs/CodeSpecs.d.ts +1 -1
  24. package/lib/cjs/CodeSpecs.js +1 -1
  25. package/lib/cjs/CodeSpecs.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.d.ts +4 -4
  27. package/lib/cjs/DisplayStyle.js +3 -3
  28. package/lib/cjs/DisplayStyle.js.map +1 -1
  29. package/lib/cjs/ECDb.d.ts +4 -4
  30. package/lib/cjs/ECDb.d.ts.map +1 -1
  31. package/lib/cjs/ECDb.js +4 -4
  32. package/lib/cjs/ECDb.js.map +1 -1
  33. package/lib/cjs/ECSqlStatement.d.ts +15 -6
  34. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  35. package/lib/cjs/ECSqlStatement.js +18 -4
  36. package/lib/cjs/ECSqlStatement.js.map +1 -1
  37. package/lib/cjs/Element.d.ts +51 -51
  38. package/lib/cjs/Element.js +51 -51
  39. package/lib/cjs/Element.js.map +1 -1
  40. package/lib/cjs/ElementAspect.d.ts +8 -8
  41. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  42. package/lib/cjs/ElementAspect.js +8 -8
  43. package/lib/cjs/ElementAspect.js.map +1 -1
  44. package/lib/cjs/Entity.d.ts +3 -3
  45. package/lib/cjs/Entity.js +2 -2
  46. package/lib/cjs/Entity.js.map +1 -1
  47. package/lib/cjs/ExportGraphics.d.ts +54 -8
  48. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  49. package/lib/cjs/ExportGraphics.js +158 -59
  50. package/lib/cjs/ExportGraphics.js.map +1 -1
  51. package/lib/cjs/GeographicCRSServices.d.ts +6 -2
  52. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  53. package/lib/cjs/GeographicCRSServices.js +1 -1
  54. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  55. package/lib/cjs/IModelDb.d.ts +23 -21
  56. package/lib/cjs/IModelDb.d.ts.map +1 -1
  57. package/lib/cjs/IModelDb.js +57 -31
  58. package/lib/cjs/IModelDb.js.map +1 -1
  59. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  60. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  61. package/lib/cjs/IModelElementCloneContext.js +1 -1
  62. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  63. package/lib/cjs/IModelHost.d.ts +2 -2
  64. package/lib/cjs/IModelHost.js +2 -2
  65. package/lib/cjs/IModelHost.js.map +1 -1
  66. package/lib/cjs/Material.d.ts +1 -1
  67. package/lib/cjs/Material.js +1 -1
  68. package/lib/cjs/Material.js.map +1 -1
  69. package/lib/cjs/Model.d.ts +22 -22
  70. package/lib/cjs/Model.js +22 -22
  71. package/lib/cjs/Model.js.map +1 -1
  72. package/lib/cjs/SQLiteDb.d.ts +1 -1
  73. package/lib/cjs/SQLiteDb.js +1 -1
  74. package/lib/cjs/SQLiteDb.js.map +1 -1
  75. package/lib/cjs/SqliteStatement.d.ts +1 -1
  76. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  77. package/lib/cjs/SqliteStatement.js +1 -1
  78. package/lib/cjs/SqliteStatement.js.map +1 -1
  79. package/lib/cjs/Texture.d.ts +1 -1
  80. package/lib/cjs/Texture.js +1 -1
  81. package/lib/cjs/Texture.js.map +1 -1
  82. package/lib/cjs/TxnManager.d.ts +4 -4
  83. package/lib/cjs/TxnManager.js +1 -1
  84. package/lib/cjs/TxnManager.js.map +1 -1
  85. package/lib/cjs/ViewDefinition.d.ts +40 -14
  86. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  87. package/lib/cjs/ViewDefinition.js +42 -14
  88. package/lib/cjs/ViewDefinition.js.map +1 -1
  89. package/lib/cjs/annotations/FrameGeometry.d.ts +52 -0
  90. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
  91. package/lib/cjs/annotations/FrameGeometry.js +250 -0
  92. package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
  93. package/lib/cjs/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  94. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
  95. package/lib/cjs/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +20 -26
  96. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
  97. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +31 -0
  98. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  99. package/lib/cjs/annotations/TextAnnotationGeometry.js +83 -0
  100. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
  101. package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
  102. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
  103. package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
  104. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
  105. package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
  106. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
  107. package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
  108. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
  109. package/lib/cjs/core-backend.d.ts +5 -3
  110. package/lib/cjs/core-backend.d.ts.map +1 -1
  111. package/lib/cjs/core-backend.js +25 -6
  112. package/lib/cjs/core-backend.js.map +1 -1
  113. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  114. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -1
  115. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  116. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  117. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  118. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  119. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  120. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  121. package/lib/esm/BackendHubAccess.d.ts +1 -1
  122. package/lib/esm/BackendHubAccess.js +1 -1
  123. package/lib/esm/BackendHubAccess.js.map +1 -1
  124. package/lib/esm/BisCoreSchema.js +1 -1
  125. package/lib/esm/BisCoreSchema.js.map +1 -1
  126. package/lib/esm/BriefcaseManager.d.ts +10 -2
  127. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  128. package/lib/esm/BriefcaseManager.js +12 -0
  129. package/lib/esm/BriefcaseManager.js.map +1 -1
  130. package/lib/esm/Category.d.ts +4 -4
  131. package/lib/esm/Category.js +4 -4
  132. package/lib/esm/Category.js.map +1 -1
  133. package/lib/esm/ChangesetECAdaptor.d.ts +67 -8
  134. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  135. package/lib/esm/ChangesetECAdaptor.js +248 -33
  136. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  137. package/lib/esm/ClassRegistry.d.ts +1 -1
  138. package/lib/esm/ClassRegistry.js +1 -1
  139. package/lib/esm/ClassRegistry.js.map +1 -1
  140. package/lib/esm/CloudSqlite.js +1 -1
  141. package/lib/esm/CloudSqlite.js.map +1 -1
  142. package/lib/esm/CodeSpecs.d.ts +1 -1
  143. package/lib/esm/CodeSpecs.js +1 -1
  144. package/lib/esm/CodeSpecs.js.map +1 -1
  145. package/lib/esm/DisplayStyle.d.ts +4 -4
  146. package/lib/esm/DisplayStyle.js +3 -3
  147. package/lib/esm/DisplayStyle.js.map +1 -1
  148. package/lib/esm/ECDb.d.ts +4 -4
  149. package/lib/esm/ECDb.d.ts.map +1 -1
  150. package/lib/esm/ECDb.js +4 -4
  151. package/lib/esm/ECDb.js.map +1 -1
  152. package/lib/esm/ECSqlStatement.d.ts +15 -6
  153. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  154. package/lib/esm/ECSqlStatement.js +18 -4
  155. package/lib/esm/ECSqlStatement.js.map +1 -1
  156. package/lib/esm/Element.d.ts +51 -51
  157. package/lib/esm/Element.js +51 -51
  158. package/lib/esm/Element.js.map +1 -1
  159. package/lib/esm/ElementAspect.d.ts +8 -8
  160. package/lib/esm/ElementAspect.d.ts.map +1 -1
  161. package/lib/esm/ElementAspect.js +8 -8
  162. package/lib/esm/ElementAspect.js.map +1 -1
  163. package/lib/esm/Entity.d.ts +3 -3
  164. package/lib/esm/Entity.js +2 -2
  165. package/lib/esm/Entity.js.map +1 -1
  166. package/lib/esm/ExportGraphics.d.ts +54 -8
  167. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  168. package/lib/esm/ExportGraphics.js +156 -58
  169. package/lib/esm/ExportGraphics.js.map +1 -1
  170. package/lib/esm/GeographicCRSServices.d.ts +6 -2
  171. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  172. package/lib/esm/GeographicCRSServices.js +1 -1
  173. package/lib/esm/GeographicCRSServices.js.map +1 -1
  174. package/lib/esm/IModelDb.d.ts +23 -21
  175. package/lib/esm/IModelDb.d.ts.map +1 -1
  176. package/lib/esm/IModelDb.js +58 -32
  177. package/lib/esm/IModelDb.js.map +1 -1
  178. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  179. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  180. package/lib/esm/IModelElementCloneContext.js +1 -1
  181. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  182. package/lib/esm/IModelHost.d.ts +2 -2
  183. package/lib/esm/IModelHost.js +2 -2
  184. package/lib/esm/IModelHost.js.map +1 -1
  185. package/lib/esm/Material.d.ts +1 -1
  186. package/lib/esm/Material.js +1 -1
  187. package/lib/esm/Material.js.map +1 -1
  188. package/lib/esm/Model.d.ts +22 -22
  189. package/lib/esm/Model.js +22 -22
  190. package/lib/esm/Model.js.map +1 -1
  191. package/lib/esm/SQLiteDb.d.ts +1 -1
  192. package/lib/esm/SQLiteDb.js +1 -1
  193. package/lib/esm/SQLiteDb.js.map +1 -1
  194. package/lib/esm/SqliteStatement.d.ts +1 -1
  195. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  196. package/lib/esm/SqliteStatement.js +1 -1
  197. package/lib/esm/SqliteStatement.js.map +1 -1
  198. package/lib/esm/Texture.d.ts +1 -1
  199. package/lib/esm/Texture.js +1 -1
  200. package/lib/esm/Texture.js.map +1 -1
  201. package/lib/esm/TxnManager.d.ts +4 -4
  202. package/lib/esm/TxnManager.js +1 -1
  203. package/lib/esm/TxnManager.js.map +1 -1
  204. package/lib/esm/ViewDefinition.d.ts +40 -14
  205. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  206. package/lib/esm/ViewDefinition.js +42 -14
  207. package/lib/esm/ViewDefinition.js.map +1 -1
  208. package/lib/esm/annotations/FrameGeometry.d.ts +52 -0
  209. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
  210. package/lib/esm/annotations/FrameGeometry.js +245 -0
  211. package/lib/esm/annotations/FrameGeometry.js.map +1 -0
  212. package/lib/esm/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  213. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
  214. package/lib/esm/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +22 -28
  215. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
  216. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +31 -0
  217. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  218. package/lib/esm/annotations/TextAnnotationGeometry.js +80 -0
  219. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
  220. package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
  221. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
  222. package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
  223. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
  224. package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
  225. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
  226. package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
  227. package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
  228. package/lib/esm/core-backend.d.ts +5 -3
  229. package/lib/esm/core-backend.d.ts.map +1 -1
  230. package/lib/esm/core-backend.js +25 -3
  231. package/lib/esm/core-backend.js.map +1 -1
  232. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  233. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -1
  234. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  235. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  236. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  237. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  238. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  239. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  240. package/lib/esm/test/TestUtils.d.ts +1 -1
  241. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  242. package/lib/esm/test/TestUtils.js +1 -1
  243. package/lib/esm/test/TestUtils.js.map +1 -1
  244. package/lib/esm/test/annotations/TextAnnotation.test.js +190 -1025
  245. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  246. package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
  247. package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
  248. package/lib/esm/test/annotations/TextBlock.test.js +969 -0
  249. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
  250. package/lib/esm/test/ecdb/ECDb.test.js +29 -8
  251. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  252. package/lib/esm/test/ecdb/ECSqlStatement.test.js +192 -0
  253. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  254. package/lib/esm/test/imodel/IModel.test.js +228 -5
  255. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  256. package/lib/esm/test/misc/GeoServices.test.js +23 -9
  257. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  258. package/lib/esm/test/standalone/ChangesetReader.test.js +451 -136
  259. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  260. package/lib/esm/test/standalone/ExportGraphics.test.js +53 -1
  261. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  262. package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
  263. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  264. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  265. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  266. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  267. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  268. package/lib/esm/test/standalone/SnapshotDb.test.js +19 -1
  269. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  270. package/package.json +13 -13
  271. package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
  272. package/lib/cjs/TextAnnotationElement.js.map +0 -1
  273. package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
  274. package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
  275. package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
  276. package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
  277. package/lib/cjs/TextAnnotationLayout.js.map +0 -1
  278. package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
  279. package/lib/esm/TextAnnotationElement.js.map +0 -1
  280. package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
  281. package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
  282. package/lib/esm/TextAnnotationGeometry.js.map +0 -1
  283. package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
  284. package/lib/esm/TextAnnotationLayout.js.map +0 -1
@@ -62,7 +62,7 @@ import { DbResult, Guid, Id64, IModelStatus, Logger, OpenMode, ProcessDetector }
62
62
  import { BisCodeSpec, BriefcaseIdValue, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DisplayStyleSettings, EcefLocation, FontMap, FontType, GeoCoordStatus, GeographicCRS, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, RelatedElement, RenderMode, SchemaState, SubCategoryAppearance, TextureMapping, TextureMapUnits, ViewFlags, } from "@itwin/core-common";
63
63
  import { Geometry, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, YawPitchRollAngles, } from "@itwin/core-geometry";
64
64
  import { V2CheckpointManager } from "../../CheckpointManager";
65
- import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
65
+ import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
66
66
  import { BriefcaseDb } from "../../IModelDb";
67
67
  import { HubMock } from "../../internal/HubMock";
68
68
  import { KnownTestLocations } from "../KnownTestLocations";
@@ -1301,12 +1301,15 @@ describe("iModel", () => {
1301
1301
  // Delete the model
1302
1302
  testImodel.models.deleteModel(newModelId);
1303
1303
  // Test insertModel error handling
1304
- assert.throws(() => {
1304
+ try {
1305
1305
  testImodel.models.insertModel({
1306
1306
  classFullName: DefinitionModel.classFullName,
1307
1307
  modeledElement: { id: "0x10000000bad" },
1308
1308
  });
1309
- }, IModelError);
1309
+ }
1310
+ catch (error) {
1311
+ assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);
1312
+ }
1310
1313
  });
1311
1314
  it("should create model with custom relationship to modeled element", async () => {
1312
1315
  const testImodel = imodel1;
@@ -2086,10 +2089,41 @@ describe("iModel", () => {
2086
2089
  db.abandonChanges();
2087
2090
  db.close();
2088
2091
  });
2092
+ it("Cache cleared on abandonChanges", () => {
2093
+ const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "StandaloneReadWrite.bim");
2094
+ const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "Standalone" } });
2095
+ db.saveChanges();
2096
+ const code = Code.createEmpty();
2097
+ code.value = "foo";
2098
+ const props = {
2099
+ classFullName: GenericGraphicalType2d.classFullName,
2100
+ model: IModel.dictionaryId,
2101
+ code,
2102
+ };
2103
+ const id = db.elements.insertElement(props);
2104
+ const element1 = db.elements.getElementProps(id);
2105
+ db.abandonChanges();
2106
+ code.value = "bar";
2107
+ const props2 = {
2108
+ classFullName: GenericGraphicalType2d.classFullName,
2109
+ model: IModel.dictionaryId,
2110
+ code,
2111
+ };
2112
+ const id2 = db.elements.insertElement(props2);
2113
+ expect(id2).to.equal(id);
2114
+ const element2 = db.elements.getElementProps(id2);
2115
+ expect(element2).to.not.equal(element1);
2116
+ db.abandonChanges();
2117
+ db.close();
2118
+ });
2089
2119
  it("Standalone iModel properties", () => {
2090
2120
  const standaloneRootSubjectName = "Standalone";
2091
2121
  const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");
2092
- let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName } });
2122
+ const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
2123
+ const geographicCoordinateSystem = {
2124
+ horizontalCRS: { id: "10TM115-27" },
2125
+ };
2126
+ let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });
2093
2127
  assert.isTrue(standaloneDb1.isStandaloneDb());
2094
2128
  assert.isTrue(standaloneDb1.isStandalone);
2095
2129
  assert.isFalse(standaloneDb1.isReadonly, "Expect standalone iModels to be read-write during create");
@@ -2102,6 +2136,8 @@ describe("iModel", () => {
2102
2136
  assert.equal(standaloneDb1.iTwinId, Guid.empty);
2103
2137
  assert.strictEqual("", standaloneDb1.changeset.id);
2104
2138
  assert.strictEqual(0, standaloneDb1.changeset.index);
2139
+ assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, "standalone ecefLocation should be set");
2140
+ assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "standalone coordinate system should be set");
2105
2141
  assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);
2106
2142
  standaloneDb1.close();
2107
2143
  assert.isFalse(standaloneDb1.isOpen);
@@ -2119,7 +2155,11 @@ describe("iModel", () => {
2119
2155
  const snapshotFile2 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot2.bim");
2120
2156
  const snapshotFile3 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot3.bim");
2121
2157
  const imodel = await generateTestSnapshot("test_for_snapshot.bim", "test.bim");
2122
- let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true });
2158
+ const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
2159
+ const geographicCoordinateSystem = {
2160
+ horizontalCRS: { id: "10TM115-27" },
2161
+ };
2162
+ let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });
2123
2163
  let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);
2124
2164
  let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });
2125
2165
  assert.isTrue(snapshotDb1.isSnapshotDb());
@@ -2156,6 +2196,8 @@ describe("iModel", () => {
2156
2196
  assert.isTrue(snapshotDb1.isOpen);
2157
2197
  assert.isTrue(snapshotDb2.isOpen);
2158
2198
  assert.isTrue(snapshotDb3.isOpen);
2199
+ assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, "snapshot ecefLocation should be set");
2200
+ assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "snapshot coordinate system should be set");
2159
2201
  snapshotDb1.close();
2160
2202
  snapshotDb2.close();
2161
2203
  snapshotDb3.close();
@@ -2587,6 +2629,32 @@ describe("iModel", () => {
2587
2629
  expect(categ3.code.value).to.equal(code3.trimmedCodeVal);
2588
2630
  imodel.close();
2589
2631
  });
2632
+ it("should throw iTwinErrors on element CRUD opertion fails", async () => {
2633
+ const code = Code.createEmpty();
2634
+ code.value = "foo";
2635
+ const props = {
2636
+ classFullName: GenericGraphicalType2d.classFullName,
2637
+ model: IModel.dictionaryId,
2638
+ code,
2639
+ };
2640
+ imodel1.elements.insertElement(props);
2641
+ expect(() => imodel1.elements.insertElement(props)).throws("Error inserting element [duplicate code]").to.have.property("iTwinErrorId");
2642
+ const updateProps = {
2643
+ id: Id64.fromString("0x111111"),
2644
+ classFullName: GenericGraphicalType2d.classFullName,
2645
+ model: IModel.dictionaryId,
2646
+ code,
2647
+ };
2648
+ expect(() => imodel1.elements.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
2649
+ expect(() => imodel1.elements.deleteElement(updateProps.id)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
2650
+ expect(() => imodel1.models.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: "0x10000000bad" } })).throws("Error inserting model [error=10004], class=BisCore:DefinitionModel").to.have.property("iTwinErrorId");
2651
+ expect(() => imodel1.models.updateModel({
2652
+ id: Id64.fromString("0x111111"),
2653
+ modeledElement: { id: Id64.fromString("0x111111") },
2654
+ classFullName: ""
2655
+ })).throws(`Error updating model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
2656
+ expect(() => imodel1.models.deleteModel(Id64.fromString("0x111111"))).throws(`Error deleting model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
2657
+ });
2590
2658
  it("throws NotFound when attempting to access element props after closing the iModel", () => {
2591
2659
  const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "accessAfterClose.bim");
2592
2660
  const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "accessAfterClose" } });
@@ -2622,5 +2690,160 @@ describe("iModel", () => {
2622
2690
  expect(() => imodel.relationships.insertInstance(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);
2623
2691
  imodel.close();
2624
2692
  });
2693
+ function createElemProps(_imodel, modId, catId, className) {
2694
+ // Create props
2695
+ const elementProps = {
2696
+ classFullName: className,
2697
+ model: modId,
2698
+ category: catId,
2699
+ code: Code.createEmpty(),
2700
+ };
2701
+ return elementProps;
2702
+ }
2703
+ function insertElement(imodel, mId, cId, cName, propName) {
2704
+ const elementProps = createElemProps(imodel, mId, cId, cName);
2705
+ const geomElement = imodel.elements.createElement(elementProps);
2706
+ geomElement.name = propName; // Add a custom property to the element
2707
+ const id = imodel.elements.insertElement(geomElement.toJSON());
2708
+ assert.isTrue(Id64.isValidId64(id), "insert failed");
2709
+ return id;
2710
+ }
2711
+ function validateADrivesBRowCount(imodel, expectedRows) {
2712
+ const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);
2713
+ assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);
2714
+ }
2715
+ function validateNavProp(imodel, expectedNavPropValue) {
2716
+ const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);
2717
+ assert.strictEqual(reader.length, 1);
2718
+ assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be "${expectedNavPropValue}"`);
2719
+ }
2720
+ it("Validate invalid relationship classes being inserted/updated", async () => {
2721
+ const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "invalidRelationshipClass.bim");
2722
+ if (IModelJsFs.existsSync(imodelPath))
2723
+ IModelJsFs.unlinkSync(imodelPath);
2724
+ const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "invalidRelationshipClass" } });
2725
+ await testImodel.importSchemaStrings([
2726
+ `<?xml version="1.0" encoding="UTF-8"?>
2727
+ <ECSchema schemaName="TestRelationSchema" alias="trs" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2728
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
2729
+ <ECEntityClass typeName="TestElement">
2730
+ <BaseClass>bis:PhysicalElement</BaseClass>
2731
+ <ECProperty propertyName="Name" typeName="string" />
2732
+ </ECEntityClass>
2733
+
2734
+ <ECEntityClass typeName="ChildA" >
2735
+ <BaseClass>TestElement</BaseClass>
2736
+ <ECNavigationProperty propertyName="NavPropChildB" relationshipName="ADrivesB" direction="Forward" readOnly="True">
2737
+ </ECNavigationProperty>
2738
+ </ECEntityClass>
2739
+
2740
+ <ECEntityClass typeName="ChildB" >
2741
+ <BaseClass>TestElement</BaseClass>
2742
+ </ECEntityClass>
2743
+
2744
+ <ECRelationshipClass typeName="ADrivesB" strengthDirection="Backward" strength="referencing" modifier="Sealed">
2745
+ <Source multiplicity="(0..*)" polymorphic="true" roleLabel="drives">
2746
+ <Class class="ChildA"/>
2747
+ </Source>
2748
+ <Target multiplicity="(0..1)" polymorphic="true" roleLabel="is driven by">
2749
+ <Class class="ChildB"/>
2750
+ </Target>
2751
+ </ECRelationshipClass>
2752
+
2753
+ <ECEntityClass typeName="ChildC">
2754
+ <BaseClass>TestElement</BaseClass>
2755
+ </ECEntityClass>
2756
+
2757
+ <ECEntityClass typeName="ChildD">
2758
+ <BaseClass>TestElement</BaseClass>
2759
+ </ECEntityClass>
2760
+
2761
+ <ECRelationshipClass typeName="CIsRelatedToD" strength="referencing" modifier="Sealed">
2762
+ <BaseClass>bis:ElementRefersToElements</BaseClass>
2763
+ <Source multiplicity="(0..*)" roleLabel="IsRelatedTo" polymorphic="true">
2764
+ <Class class="ChildC"/>
2765
+ </Source>
2766
+ <Target multiplicity="(0..*)" roleLabel="IsRelatedTo (Reversed)" polymorphic="true">
2767
+ <Class class="ChildD"/>
2768
+ </Target>
2769
+ </ECRelationshipClass>
2770
+ </ECSchema>`
2771
+ ]);
2772
+ // Enable ECSQL write validation and verify it's set
2773
+ const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);
2774
+ assert.exists(pragmaRows);
2775
+ assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);
2776
+ // Ensure ADrivesB table is empty before test
2777
+ validateADrivesBRowCount(testImodel, 0);
2778
+ // Create a physical model and spatial category if needed
2779
+ const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(testImodel, Code.createEmpty(), true);
2780
+ let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, "MySpatialCategory");
2781
+ if (!spatialCategoryId) {
2782
+ spatialCategoryId = SpatialCategory.insert(testImodel, IModel.dictionaryId, "MySpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
2783
+ }
2784
+ // Insert a ChildB element to be referenced by ChildA
2785
+ const idB = insertElement(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildB", "ChildBElement");
2786
+ assert.isTrue(Id64.isValidId64(idB), "Insert ChildBElement failed");
2787
+ testImodel.saveChanges();
2788
+ // Prepare base props for ChildA
2789
+ const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildA");
2790
+ // Test various relationship class names for navigation property
2791
+ const testCases = [
2792
+ { name: "trs:ADrivesB", shouldSucceed: true, expectedRows: 1 },
2793
+ { name: "trs.FakeClass", shouldSucceed: true, expectedRows: 0 },
2794
+ { name: "trs:ChildA", shouldSucceed: false, expectedRows: 0 },
2795
+ { name: "trs:ChildB", shouldSucceed: false, expectedRows: 0 },
2796
+ { name: "trs:CIsRelatedToD", shouldSucceed: false, expectedRows: 0 },
2797
+ ];
2798
+ for (const { name, shouldSucceed, expectedRows } of testCases) {
2799
+ const elemRef = new RelatedElement({ id: idB, relClassName: name });
2800
+ elementProps.navPropChildB = elemRef;
2801
+ elementProps.name = "ChildAElement";
2802
+ const geomElement = testImodel.elements.createElement(elementProps);
2803
+ let idA;
2804
+ try {
2805
+ idA = testImodel.elements.insertElement(geomElement.toJSON());
2806
+ if (shouldSucceed)
2807
+ assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);
2808
+ else
2809
+ assert.fail(`Insert should have failed for ${name}.`);
2810
+ }
2811
+ catch (err) {
2812
+ if (shouldSucceed)
2813
+ assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);
2814
+ // If should not succeed, error is expected
2815
+ }
2816
+ // Validate row count in ADrivesB table
2817
+ validateADrivesBRowCount(testImodel, expectedRows);
2818
+ // If insert succeeded, test update and delete scenarios
2819
+ if (expectedRows === 1 && idA !== undefined) {
2820
+ validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
2821
+ const editElem = testImodel.elements.getElement(idA);
2822
+ editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: "trs.FakeClass" });
2823
+ editElem.name = "ChildAElementUpdated";
2824
+ testImodel.elements.updateElement(editElem);
2825
+ validateADrivesBRowCount(testImodel, 1);
2826
+ validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
2827
+ const editedElem = testImodel.elements.getElement(idA);
2828
+ assert.equal(editedElem.name, "ChildAElementUpdated", `Expected name to be "ChildAElementUpdated" after update, but got "${editedElem.name}"`);
2829
+ assert.strictEqual(editedElem.navPropChildB.relClassName, "TestRelationSchema.ADrivesB", `Expected navPropChildB to be "TestRelationSchema.ADrivesB" after update, but got "${editedElem.navPropChildB}"`);
2830
+ // Set the nav prop value to null
2831
+ editElem.name = "ChildAElementNulled";
2832
+ editElem.navPropChildB = null;
2833
+ testImodel.elements.updateElement(editElem);
2834
+ validateADrivesBRowCount(testImodel, 0);
2835
+ const nulledElem = testImodel.elements.getElement(idA);
2836
+ assert.equal(nulledElem.name, "ChildAElementNulled", `Expected name to be "ChildAElementNulled" after nulling, but got "${nulledElem.name}"`);
2837
+ assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got "${nulledElem.navPropChildB}"`);
2838
+ if (shouldSucceed) {
2839
+ // Delete the element
2840
+ testImodel.elements.deleteElement(idA);
2841
+ assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);
2842
+ }
2843
+ }
2844
+ testImodel.abandonChanges();
2845
+ }
2846
+ testImodel.close();
2847
+ });
2625
2848
  });
2626
2849
  //# sourceMappingURL=IModel.test.js.map