@itwin/core-backend 5.8.0-dev.8 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChannelControl.js.map +1 -1
  15. package/lib/cjs/CheckpointManager.js.map +1 -1
  16. package/lib/cjs/ClassRegistry.js +5 -5
  17. package/lib/cjs/ClassRegistry.js.map +1 -1
  18. package/lib/cjs/CloudSqlite.js.map +1 -1
  19. package/lib/cjs/CodeService.js.map +1 -1
  20. package/lib/cjs/CodeSpecs.js.map +1 -1
  21. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  22. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  23. package/lib/cjs/DevTools.js.map +1 -1
  24. package/lib/cjs/DisplayStyle.js.map +1 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  27. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  28. package/lib/cjs/ECSqlStatement.js.map +1 -1
  29. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/FontFile.js.map +1 -1
  39. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  40. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  41. package/lib/cjs/GeometrySummary.js +47 -47
  42. package/lib/cjs/GeometrySummary.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts +5 -0
  44. package/lib/cjs/IModelDb.d.ts.map +1 -1
  45. package/lib/cjs/IModelDb.js +20 -11
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelDbFonts.js.map +1 -1
  48. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  49. package/lib/cjs/IModelHost.js.map +1 -1
  50. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  51. package/lib/cjs/IModelJsFs.js.map +1 -1
  52. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  53. package/lib/cjs/IpcHost.d.ts.map +1 -1
  54. package/lib/cjs/IpcHost.js +28 -4
  55. package/lib/cjs/IpcHost.js.map +1 -1
  56. package/lib/cjs/LineStyle.d.ts +6 -0
  57. package/lib/cjs/LineStyle.d.ts.map +1 -1
  58. package/lib/cjs/LineStyle.js +41 -32
  59. package/lib/cjs/LineStyle.js.map +1 -1
  60. package/lib/cjs/LocalHub.d.ts +17 -10
  61. package/lib/cjs/LocalHub.d.ts.map +1 -1
  62. package/lib/cjs/LocalHub.js +127 -29
  63. package/lib/cjs/LocalHub.js.map +1 -1
  64. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  65. package/lib/cjs/LockControl.js.map +1 -1
  66. package/lib/cjs/Material.js.map +1 -1
  67. package/lib/cjs/Model.js.map +1 -1
  68. package/lib/cjs/NativeAppStorage.js.map +1 -1
  69. package/lib/cjs/NativeHost.js.map +1 -1
  70. package/lib/cjs/NavigationRelationship.js.map +1 -1
  71. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  72. package/lib/cjs/PropertyStore.js.map +1 -1
  73. package/lib/cjs/Relationship.js.map +1 -1
  74. package/lib/cjs/RpcBackend.js.map +1 -1
  75. package/lib/cjs/SQLiteDb.js.map +1 -1
  76. package/lib/cjs/Schema.js.map +1 -1
  77. package/lib/cjs/SchemaSync.js.map +1 -1
  78. package/lib/cjs/SchemaUtils.js.map +1 -1
  79. package/lib/cjs/SheetIndex.js.map +1 -1
  80. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  81. package/lib/cjs/SqliteStatement.js.map +1 -1
  82. package/lib/cjs/StashManager.js.map +1 -1
  83. package/lib/cjs/Texture.js.map +1 -1
  84. package/lib/cjs/TileStorage.js.map +1 -1
  85. package/lib/cjs/TxnManager.js.map +1 -1
  86. package/lib/cjs/ViewDefinition.js.map +1 -1
  87. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  88. package/lib/cjs/ViewStore.js.map +1 -1
  89. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  90. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  93. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  94. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  95. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  96. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  97. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  98. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  99. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  100. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  101. package/lib/cjs/core-backend.d.ts +2 -0
  102. package/lib/cjs/core-backend.d.ts.map +1 -1
  103. package/lib/cjs/core-backend.js +2 -0
  104. package/lib/cjs/core-backend.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  106. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  107. package/lib/cjs/domains/GenericElements.js.map +1 -1
  108. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  109. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  110. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  111. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  112. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  113. package/lib/cjs/internal/HubMock.js.map +1 -1
  114. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  115. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  116. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  117. package/lib/cjs/internal/NoLocks.js.map +1 -1
  118. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  119. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  120. package/lib/cjs/internal/Symbols.js.map +1 -1
  121. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  122. package/lib/cjs/internal/cross-package.js.map +1 -1
  123. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
  124. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  125. package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
  126. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
  127. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  128. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  129. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
  130. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
  131. package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
  132. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  133. package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
  134. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  135. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  136. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  137. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  138. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
  139. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
  140. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
  141. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  142. package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
  143. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  144. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  145. package/lib/cjs/rpc/multipart.js.map +1 -1
  146. package/lib/cjs/rpc/tracing.js.map +1 -1
  147. package/lib/cjs/rpc/web/logging.js.map +1 -1
  148. package/lib/cjs/rpc/web/request.js.map +1 -1
  149. package/lib/cjs/rpc/web/response.js.map +1 -1
  150. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  151. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  152. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  153. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  154. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  155. package/lib/cjs/workspace/Settings.d.ts +8 -0
  156. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  157. package/lib/cjs/workspace/Settings.js.map +1 -1
  158. package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
  159. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
  160. package/lib/cjs/workspace/SettingsDb.js +19 -0
  161. package/lib/cjs/workspace/SettingsDb.js.map +1 -0
  162. package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
  163. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
  164. package/lib/cjs/workspace/SettingsEditor.js +53 -0
  165. package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
  166. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  167. package/lib/cjs/workspace/Workspace.d.ts +42 -19
  168. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  169. package/lib/cjs/workspace/Workspace.js.map +1 -1
  170. package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
  171. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  172. package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
  173. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  174. package/lib/esm/BackendHubAccess.js.map +1 -1
  175. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  176. package/lib/esm/BisCoreSchema.js.map +1 -1
  177. package/lib/esm/BlobContainerService.js.map +1 -1
  178. package/lib/esm/BriefcaseManager.js.map +1 -1
  179. package/lib/esm/CatalogDb.js.map +1 -1
  180. package/lib/esm/Category.js.map +1 -1
  181. package/lib/esm/ChangeSummaryManager.js +2 -2
  182. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  183. package/lib/esm/ChangedElementsDb.js.map +1 -1
  184. package/lib/esm/ChangesetECAdaptor.js +248 -248
  185. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  186. package/lib/esm/ChannelControl.js.map +1 -1
  187. package/lib/esm/CheckpointManager.js.map +1 -1
  188. package/lib/esm/ClassRegistry.js +5 -5
  189. package/lib/esm/ClassRegistry.js.map +1 -1
  190. package/lib/esm/CloudSqlite.js.map +1 -1
  191. package/lib/esm/CodeService.js.map +1 -1
  192. package/lib/esm/CodeSpecs.js.map +1 -1
  193. package/lib/esm/ConcurrentQuery.js.map +1 -1
  194. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  195. package/lib/esm/DevTools.js.map +1 -1
  196. package/lib/esm/DisplayStyle.js.map +1 -1
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  199. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  200. package/lib/esm/ECSqlStatement.js.map +1 -1
  201. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  202. package/lib/esm/Element.js.map +1 -1
  203. package/lib/esm/ElementAspect.js.map +1 -1
  204. package/lib/esm/ElementGraphics.js.map +1 -1
  205. package/lib/esm/ElementTreeWalker.js.map +1 -1
  206. package/lib/esm/Entity.js.map +1 -1
  207. package/lib/esm/EntityReferences.js.map +1 -1
  208. package/lib/esm/ExportGraphics.js.map +1 -1
  209. package/lib/esm/ExternalSource.js.map +1 -1
  210. package/lib/esm/FontFile.js.map +1 -1
  211. package/lib/esm/GeoCoordConfig.js.map +1 -1
  212. package/lib/esm/GeographicCRSServices.js.map +1 -1
  213. package/lib/esm/GeometrySummary.js +47 -47
  214. package/lib/esm/GeometrySummary.js.map +1 -1
  215. package/lib/esm/IModelDb.d.ts +5 -0
  216. package/lib/esm/IModelDb.d.ts.map +1 -1
  217. package/lib/esm/IModelDb.js +20 -11
  218. package/lib/esm/IModelDb.js.map +1 -1
  219. package/lib/esm/IModelDbFonts.js.map +1 -1
  220. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  221. package/lib/esm/IModelHost.js.map +1 -1
  222. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  223. package/lib/esm/IModelJsFs.js.map +1 -1
  224. package/lib/esm/ImageSourceConversion.js.map +1 -1
  225. package/lib/esm/IpcHost.d.ts.map +1 -1
  226. package/lib/esm/IpcHost.js +28 -4
  227. package/lib/esm/IpcHost.js.map +1 -1
  228. package/lib/esm/LineStyle.d.ts +6 -0
  229. package/lib/esm/LineStyle.d.ts.map +1 -1
  230. package/lib/esm/LineStyle.js +41 -32
  231. package/lib/esm/LineStyle.js.map +1 -1
  232. package/lib/esm/LocalHub.d.ts +17 -10
  233. package/lib/esm/LocalHub.d.ts.map +1 -1
  234. package/lib/esm/LocalHub.js +128 -30
  235. package/lib/esm/LocalHub.js.map +1 -1
  236. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  237. package/lib/esm/LockControl.js.map +1 -1
  238. package/lib/esm/Material.js.map +1 -1
  239. package/lib/esm/Model.js.map +1 -1
  240. package/lib/esm/NativeAppStorage.js.map +1 -1
  241. package/lib/esm/NativeHost.js.map +1 -1
  242. package/lib/esm/NavigationRelationship.js.map +1 -1
  243. package/lib/esm/PromiseMemoizer.js.map +1 -1
  244. package/lib/esm/PropertyStore.js.map +1 -1
  245. package/lib/esm/Relationship.js.map +1 -1
  246. package/lib/esm/RpcBackend.js.map +1 -1
  247. package/lib/esm/SQLiteDb.js.map +1 -1
  248. package/lib/esm/Schema.js.map +1 -1
  249. package/lib/esm/SchemaSync.js.map +1 -1
  250. package/lib/esm/SchemaUtils.js.map +1 -1
  251. package/lib/esm/SheetIndex.js.map +1 -1
  252. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  253. package/lib/esm/SqliteStatement.js.map +1 -1
  254. package/lib/esm/StashManager.js.map +1 -1
  255. package/lib/esm/Texture.js.map +1 -1
  256. package/lib/esm/TileStorage.js.map +1 -1
  257. package/lib/esm/TxnManager.js.map +1 -1
  258. package/lib/esm/ViewDefinition.js.map +1 -1
  259. package/lib/esm/ViewStateHydrator.js.map +1 -1
  260. package/lib/esm/ViewStore.js.map +1 -1
  261. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  262. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  263. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  264. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  265. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  266. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  267. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  268. package/lib/esm/core-backend.d.ts +2 -0
  269. package/lib/esm/core-backend.d.ts.map +1 -1
  270. package/lib/esm/core-backend.js +2 -0
  271. package/lib/esm/core-backend.js.map +1 -1
  272. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  273. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  274. package/lib/esm/domains/GenericElements.js.map +1 -1
  275. package/lib/esm/domains/GenericSchema.js.map +1 -1
  276. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  277. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  278. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  279. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  280. package/lib/esm/internal/HubMock.js.map +1 -1
  281. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  282. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  283. package/lib/esm/internal/NativePlatform.js.map +1 -1
  284. package/lib/esm/internal/NoLocks.js.map +1 -1
  285. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  286. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  287. package/lib/esm/internal/Symbols.js.map +1 -1
  288. package/lib/esm/internal/annotations/fields.js.map +1 -1
  289. package/lib/esm/internal/cross-package.js.map +1 -1
  290. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
  291. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  292. package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
  293. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
  294. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  295. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  296. package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
  297. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
  298. package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
  299. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  300. package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
  301. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  302. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  303. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  304. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  305. package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
  306. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
  307. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
  308. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  309. package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
  310. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  311. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  312. package/lib/esm/rpc/multipart.js.map +1 -1
  313. package/lib/esm/rpc/tracing.js.map +1 -1
  314. package/lib/esm/rpc/web/logging.js.map +1 -1
  315. package/lib/esm/rpc/web/request.js.map +1 -1
  316. package/lib/esm/rpc/web/response.js.map +1 -1
  317. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  318. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  319. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  320. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  321. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  322. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  323. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  324. package/lib/esm/test/AttachDb.test.js +11 -11
  325. package/lib/esm/test/AttachDb.test.js.map +1 -1
  326. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  327. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  328. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  329. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  330. package/lib/esm/test/IModelHost.test.js.map +1 -1
  331. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  332. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  333. package/lib/esm/test/IpcHost.test.js +64 -13
  334. package/lib/esm/test/IpcHost.test.js.map +1 -1
  335. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  336. package/lib/esm/test/PrintElementTree.js.map +1 -1
  337. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  338. package/lib/esm/test/RevisionUtility.js.map +1 -1
  339. package/lib/esm/test/SchemaUtils.test.js +25 -25
  340. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  341. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  342. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  343. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  344. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  345. package/lib/esm/test/TestUtils.js.map +1 -1
  346. package/lib/esm/test/annotations/Fields.test.js +53 -53
  347. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  348. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  349. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  350. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  351. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  352. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  353. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  354. package/lib/esm/test/categories/Category.test.js.map +1 -1
  355. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  356. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  357. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  358. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  359. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  360. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  361. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  362. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  363. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  364. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  365. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  366. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  367. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  368. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  369. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  371. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  373. package/lib/esm/test/ecdb/QueryReaders.test.js +62 -27
  374. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  375. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  376. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  377. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
  378. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  379. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  380. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  381. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
  382. package/lib/esm/test/ecsql/src/ECSqlTestParser.js +4 -0
  383. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  384. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +14 -2
  385. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  386. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  387. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  388. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  389. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  390. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  391. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  392. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  393. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  394. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  395. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  396. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  397. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  398. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  399. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  400. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  401. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  402. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  403. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  404. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  405. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  406. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  407. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  408. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  409. package/lib/esm/test/imageData.js.map +1 -1
  410. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  411. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  412. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  413. package/lib/esm/test/imodel/IModel.test.js +44 -44
  414. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  415. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  416. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  417. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  418. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  419. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  420. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  421. package/lib/esm/test/index.js.map +1 -1
  422. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  423. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  424. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  425. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  426. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  427. package/lib/esm/test/rpc/response.test.js.map +1 -1
  428. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  429. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  430. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  431. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  432. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  433. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  434. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  435. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  436. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  437. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  438. package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
  439. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  440. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  441. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  442. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  443. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  444. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  445. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  446. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  447. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  448. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  449. package/lib/esm/test/standalone/HubMock.test.js +177 -7
  450. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  451. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  452. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  453. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  454. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  455. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  456. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  457. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  458. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  459. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  460. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  461. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  462. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  464. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  465. package/lib/esm/test/standalone/Settings.test.js +18 -0
  466. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  467. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  468. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  469. package/lib/esm/test/standalone/StandaloneDb.test.js +51 -1
  470. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  471. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  472. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  473. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  474. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  475. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  476. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  477. package/lib/esm/test/standalone/Workspace.test.js +160 -0
  478. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  479. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  480. package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
  481. package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
  482. package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
  483. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
  484. package/lib/esm/workspace/Settings.d.ts +8 -0
  485. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  486. package/lib/esm/workspace/Settings.js.map +1 -1
  487. package/lib/esm/workspace/SettingsDb.d.ts +109 -0
  488. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
  489. package/lib/esm/workspace/SettingsDb.js +16 -0
  490. package/lib/esm/workspace/SettingsDb.js.map +1 -0
  491. package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
  492. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
  493. package/lib/esm/workspace/SettingsEditor.js +50 -0
  494. package/lib/esm/workspace/SettingsEditor.js.map +1 -0
  495. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  496. package/lib/esm/workspace/Workspace.d.ts +42 -19
  497. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  498. package/lib/esm/workspace/Workspace.js.map +1 -1
  499. package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
  500. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  501. package/lib/esm/workspace/WorkspaceEditor.js +19 -0
  502. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  503. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDependencyGraph.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,yDAAyD;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAyB,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,EAA0C,qBAAqB,GAElJ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,cAAc,EAA6B,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpJ,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,kBAAkB,EAA2B,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,UAAkB;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;IACT,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAyB,EAAE,IAAiC;IAC9E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,yBAAyB;IACtB,aAAa,GAAc,EAAE,CAAC;IAC9B,gBAAgB,GAAc,EAAE,CAAC;IACjC,WAAW,GAAwB,EAAE,CAAC;IACtC,iBAAiB,GAAwB,EAAE,CAAC;CACpD;AASD,MAAM,UAAU;IACP,EAAE,CAAe;IACjB,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IACtC,QAAQ,GAAmB,EAAE,CAAC;IAC9B,UAAU,GAAe,EAAE,CAAC;IAC5B,eAAe,GAAe,EAAE,CAAC;IACjC,iBAAiB,GAAe,EAAE,CAAC;IAE3C,YAAY,QAAgB,EAAE,MAAc;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAElD,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,QAAQ,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAErE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,6CAA6C,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/H,IAAI,CAAC,kCAAkC,EAAE,CAAC;IAC5C,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,qCAAqC,EAAE,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,SAAiB,EAAE,MAA4B;QAChE,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5F,OAAO;YACL,aAAa,EAAE,4BAA4B;YAC3C,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE;YAC9E,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE;gBACT,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5B,MAAM,EAAE,IAAI,kBAAkB,EAAE;aACjC;YACD,IAAI,EAAE,OAAO,CAAC,cAAc;YAC5B,MAAM;SACP,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,SAAiB,EAAE,MAA4B;QAClE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEM,aAAa,CAAC,IAAgB,EAAE,QAAgB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEM,OAAO,CAAC,IAAgB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,KAAwB,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3I,sBAAsB;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAC9C,CAAC;IAEM,kCAAkC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;YACpF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,wBAAwB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACnF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9E,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1E,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEM,qCAAqC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,YAAoB,CAAC;IACzB,IAAI,MAAc,CAAC;IAEnB,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnD,MAAM,cAAc,GAAmB;YACrC,MAAM,EAAE,aAAa,CAAC,OAAO;YAC7B,cAAc,EAAE,IAAI;SACrB,CAAC;QACF,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAClE,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,eAAe,CAAC,qBAAqB,EAAE,CAAC;QACxC,6EAA6E;QAC7E,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxG,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,eAAe,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAChF,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAChD,cAAc,CAAC,YAAY,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACxF,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,wBAAwB,EAAE,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnK,MAAM,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;QACxF,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,oBAAoB;QAEpB,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,uCAAuC;QAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,oFAAoF;QAE/J,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,kBAAkB;QAClB,oBAAoB;QACpB,OAAO;QACP,MAAM;QACN,EAAE;QACF,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,oFAAoF;QAE7H,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,gDAAgD;QACjG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,iFAAiF;QAEjF,kBAAkB;QAClB,8BAA8B;QAC9B,OAAO;QACP,0BAA0B;QAC1B,EAAE;QACF,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,uCAAuC;QAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,oFAAoF;QAEnL,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9F,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExD,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEpD,kBAAkB;QAClB,gFAAgF;QAChF,kDAAkD;QAClD,4CAA4C;QAC5C,4CAA4C;QAC5C,qCAAqC;QAErC,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAClI,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAChJ,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,+BAA+B,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC3I,MAAM,mCAAmC,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACnJ,KAAK,MAAM,GAAG,IAAI,CAAC,+BAA+B,EAAE,mCAAmC,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAElD,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iDAAiD;QAC1G,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACjH,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,+BAA+B,CAAC,MAAM,EAAE,EAAE,mCAAmC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9H,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,aAAa;QACb,eAAe;QACf,2BAA2B;QAC3B,SAAS;QACT,OAAO;QAEP,qFAAqF;QACrF,mBAAmB;QACnB,aAAa;QACb,eAAe;QACf,2BAA2B;QAC3B,SAAS;QACT,OAAO;QACP,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACpH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAElI,sEAAsE;QACtE,sBAAsB;QACtB,yBAAyB;QACzB,0BAA0B;QAC1B,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,iDAAiD;QAClG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,sBAAsB;QACtB,sBAAsB;QACtB,EAAE;QACF,EAAE;QACF,kBAAkB;QAClB,0BAA0B;QAC1B,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExD,6FAA6F;QAC7F,sBAAsB;QACtB,EAAE;QACF,YAAY;QACZ,2BAA2B;QAC3B,EAAE;QACF,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACrG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,sHAAsH;QACtH,mBAAmB;QACnB,EAAE;QACF,OAAO;QACP,6BAA6B;QAC7B,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACrG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE5F,uHAAuH;QACvH,mBAAmB;QACnB,EAAE;QACF,2BAA2B;QAC3B,SAAS;QACT,OAAO;QACP,KAAK;QACL,EAAE;QACF,4HAA4H;QAC5H,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE1C,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,4IAA4I;QAC5I,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7F,4MAA4M;QAE5M,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { assert } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { Guid, Id64Array, Id64String, Logger, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, RelatedElementProps, RelationshipProps, SubCategoryAppearance,\r\n UpgradeOptions,\r\n} from \"@itwin/core-common\";\r\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { _nativeDb, ChannelControl, ElementDrivesElementProps, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from \"../../core-backend\";\r\nimport { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject, TestPhysicalObjectProps } from \"../IModelTestUtils\";\r\nimport { IModelNative } from \"../../internal/NativePlatform\";\r\n\r\nexport function copyFile(newName: string, pathToCopy: string): string {\r\n const newPath = path.join(path.dirname(pathToCopy), newName);\r\n try {\r\n fs.unlinkSync(newPath);\r\n } catch {\r\n }\r\n fs.copyFileSync(pathToCopy, newPath);\r\n return newPath;\r\n}\r\n\r\nfunction assertRels(list: RelationshipProps[], rels: ElementDrivesElementProps[]) {\r\n assert.equal(list.length, rels.length);\r\n for (let i = 0; i < rels.length; ++i) {\r\n assert.equal(list[i].id, rels[i].id);\r\n }\r\n}\r\n\r\nclass DependencyCallbackResults {\r\n public beforeOutputs: Id64Array = [];\r\n public allInputsHandled: Id64Array = [];\r\n public rootChanged: RelationshipProps[] = [];\r\n public deletedDependency: RelationshipProps[] = [];\r\n}\r\n\r\ninterface DbInfo {\r\n seedFileName: string;\r\n codeSpecId: Id64String;\r\n physicalModelId: Id64String;\r\n spatialCategoryId: Id64String;\r\n}\r\n\r\nclass TestHelper {\r\n public db: StandaloneDb;\r\n public dres = new DependencyCallbackResults();\r\n private removals: VoidFunction[] = [];\r\n private codeSpecId: Id64String = \"\";\r\n private physicalModelId: Id64String = \"\";\r\n private spatialCategoryid: Id64String = \"\";\r\n\r\n constructor(testName: string, dbInfo: DbInfo) {\r\n this.codeSpecId = dbInfo.codeSpecId;\r\n this.physicalModelId = dbInfo.physicalModelId;\r\n this.spatialCategoryid = dbInfo.spatialCategoryId;\r\n\r\n const writeDbFileName = copyFile(`${testName}.bim`, dbInfo.seedFileName);\r\n this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);\r\n assert.isTrue(this.db !== undefined);\r\n this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n this.db[_nativeDb].enableTxnTesting();\r\n assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship(\"TestBim\", \"ChildPropagatesChangesToParent\"), 0);\r\n this.setElementDependencyGraphCallbacks();\r\n }\r\n\r\n public terminate() {\r\n this.db.close();\r\n assert.isFalse(this.db.isOpen);\r\n this.removeElementDependencyGraphCallbacks();\r\n }\r\n\r\n public makeElement(codeValue: string, parent?: RelatedElementProps): TestPhysicalObjectProps {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(5, 0, 0)));\r\n\r\n return {\r\n classFullName: \"TestBim:TestPhysicalObject\",\r\n model: this.physicalModelId,\r\n category: this.spatialCategoryid,\r\n code: { spec: this.codeSpecId, scope: this.physicalModelId, value: codeValue },\r\n intProperty: 100,\r\n placement: {\r\n origin: new Point3d(0, 0, 0),\r\n angles: new YawPitchRollAngles(),\r\n },\r\n geom: builder.geometryStream,\r\n parent,\r\n };\r\n }\r\n\r\n public insertElement(codeValue: string, parent?: RelatedElementProps): Id64String {\r\n return this.db.elements.insertElement(this.makeElement(codeValue, parent));\r\n }\r\n\r\n public updateElement(elid: Id64String, newLabel: string) {\r\n const ed2 = this.db.elements.getElement({ id: elid });\r\n ed2.userLabel = newLabel;\r\n this.db.elements.updateElement(ed2.toJSON());\r\n }\r\n\r\n public fmtElem(elId: Id64String) { return this.db.elements.getElement(elId).code.value; }\r\n public fmtRel(props: RelationshipProps) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }\r\n\r\n public resetDependencyResults() {\r\n this.dres = new DependencyCallbackResults();\r\n }\r\n\r\n public setElementDependencyGraphCallbacks() {\r\n this.removals.push(TestElementDrivesElement.deletedDependency.addListener((evProps) => {\r\n Logger.logTrace(\"EDGTest\", `_onDeletedDependency ${this.fmtRel(evProps)}`);\r\n this.dres.deletedDependency.push(evProps);\r\n }));\r\n this.removals.push(TestElementDrivesElement.rootChanged.addListener((evProps, _im) => {\r\n Logger.logTrace(\"EDGTest\", `_onRootChanged ${this.fmtRel(evProps)}`);\r\n this.dres.rootChanged.push(evProps);\r\n }));\r\n this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((elId) => {\r\n Logger.logTrace(\"EDGTest\", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);\r\n this.dres.beforeOutputs.push(elId);\r\n }));\r\n this.removals.push(TestPhysicalObject.allInputsHandled.addListener((elId) => {\r\n Logger.logTrace(\"EDGTest\", `_onAllInputsHandled ${this.fmtElem(elId)}`);\r\n this.dres.allInputsHandled.push(elId);\r\n }));\r\n }\r\n\r\n public removeElementDependencyGraphCallbacks() {\r\n this.removals.forEach((drop) => drop());\r\n }\r\n}\r\n\r\ndescribe(\"ElementDependencyGraph\", () => {\r\n let testFileName: string;\r\n let dbInfo: DbInfo;\r\n\r\n const performUpgrade = (pathname: string) => {\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n const upgradeOptions: UpgradeOptions = {\r\n domain: DomainOptions.Upgrade,\r\n schemaLockHeld: true,\r\n };\r\n nativeDb.openIModel(pathname, OpenMode.ReadWrite, upgradeOptions);\r\n nativeDb.deleteAllTxns();\r\n nativeDb.closeFile();\r\n };\r\n\r\n before(async () => {\r\n IModelTestUtils.registerTestBimSchema();\r\n // make a unique name for the output file so this test can be run in parallel\r\n testFileName = IModelTestUtils.prepareOutputFile(\"ElementDependencyGraph\", `${Guid.createValue()}.bim`);\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const schemaFileName = IModelTestUtils.resolveAssetFile(\"TestBim.ecschema.xml\");\r\n IModelJsFs.copySync(seedFileName, testFileName);\r\n performUpgrade(testFileName);\r\n const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\r\n await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails\r\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const physicalModelId = PhysicalModel.insert(imodel, IModel.rootSubjectId, \"EDGTestModel\");\r\n const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, \"EDGTestCodeSpec\", CodeScopeSpec.Type.Model));\r\n const spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, \"EDGTestSpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\r\n dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };\r\n imodel.saveChanges(\"\");\r\n imodel[_nativeDb].deleteAllTxns();\r\n imodel.close();\r\n });\r\n\r\n after(() => {\r\n IModelJsFs.removeSync(testFileName);\r\n });\r\n\r\n it(\"should invokeCallbacks EDE only\", () => {\r\n const helper = new TestHelper(\"EDE\", dbInfo);\r\n\r\n const e1id = helper.insertElement(\"e1\");\r\n const e2id = helper.insertElement(\"e2\");\r\n const e3id = helper.insertElement(\"e3\");\r\n helper.db.saveChanges(); // get the elements into the iModel\r\n\r\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\r\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\r\n for (const ede of [ede_1_2, ede_2_3]) {\r\n ede.insert();\r\n }\r\n\r\n // The full graph:\r\n // e1 --> e2 --> e3\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges(); // this will react to EDE inserts only.\r\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\r\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\r\n\r\n helper.updateElement(e1id, \"change e1\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);\r\n\r\n helper.terminate();\r\n });\r\n\r\n it(\"should invokeCallbacks through parents only\", () => {\r\n const helper = new TestHelper(\"Parents\", dbInfo);\r\n\r\n const p2id = helper.insertElement(\"p2\");\r\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\r\n helper.db.saveChanges(); // get the elements into the iModel\r\n\r\n // The full graph:\r\n // .-parent-> p2\r\n // /\r\n // e1\r\n //\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\r\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\r\n assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.\r\n\r\n helper.updateElement(e1id, \"change e1\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [p2id]);\r\n assertRels(helper.dres.rootChanged, []);\r\n\r\n helper.updateElement(p2id, \"change p2\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements\r\n assert.deepEqual(helper.dres.allInputsHandled, []);\r\n assertRels(helper.dres.rootChanged, []);\r\n\r\n helper.terminate();\r\n });\r\n\r\n it(\"should invokeCallbacks through EDEs and parents\", () => {\r\n const helper = new TestHelper(\"EDEsAndParents\", dbInfo);\r\n\r\n const p2id = helper.insertElement(\"p2\");\r\n const p3id = helper.insertElement(\"p3\");\r\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\r\n const e2id = helper.insertElement(\"e2\");\r\n const e3id = helper.insertElement(\"e3\");\r\n helper.db.saveChanges(); // get the elements into the iModel\r\n\r\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\r\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\r\n const ede_p2_p3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, p2id, p3id);\r\n for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {\r\n ede.insert();\r\n }\r\n\r\n // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);\r\n\r\n // The full graph:\r\n // .-parent-> p2 -EDE-> p3\r\n // /\r\n // e1 -EDE-> e2 -EDE-> e3\r\n //\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges(); // this will react to EDE inserts only.\r\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\r\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\r\n\r\n helper.updateElement(e1id, \"change e1\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);\r\n\r\n helper.updateElement(p2id, \"change p2\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [p3id]);\r\n assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);\r\n\r\n helper.updateElement(e2id, \"change e2\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [e3id]);\r\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);\r\n\r\n helper.terminate();\r\n });\r\n\r\n it(\"should invokeCallbacks through parents - geomodeler schema\", () => {\r\n const helper = new TestHelper(\"GeoModeler\", dbInfo);\r\n\r\n // The full graph:\r\n // BoreholeSource -EDE-> GroundGeneration\r\n // / parent\r\n // Borehole\r\n // / parent\r\n // Material -EDE-> MaterialDepthRange\r\n\r\n const boreholeSource = helper.insertElement(\"BoreholeSource\");\r\n const borehole = helper.insertElement(\"Borehole\", { id: boreholeSource, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\r\n const materialDepthRange = helper.insertElement(\"MaterialDepthRange\", { id: borehole, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\r\n const material = helper.insertElement(\"Material\");\r\n const groundGeneration = helper.insertElement(\"GroundGeneration\");\r\n helper.db.saveChanges(); // get the elements into the iModel\r\n\r\n const ede_material_materialDepthRange = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, material, materialDepthRange);\r\n const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, boreholeSource, groundGeneration);\r\n for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {\r\n ede.insert();\r\n }\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n helper.updateElement(material, \"change material\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);\r\n assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);\r\n\r\n helper.terminate();\r\n });\r\n\r\n it(\"should invokeCallbacks many:1\", () => {\r\n const helper = new TestHelper(\"ManyToOne\", dbInfo);\r\n\r\n const e1id = helper.insertElement(\"e1\");\r\n const e11id = helper.insertElement(\"e11\");\r\n const e2id = helper.insertElement(\"e2\");\r\n const e21id = helper.insertElement(\"e21\");\r\n const e3id = helper.insertElement(\"e3\");\r\n const e4id = helper.insertElement(\"e4\");\r\n\r\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\r\n const ede_11_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e11id, e2id);\r\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\r\n const ede_21_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e21id, e3id);\r\n const ede_3_4 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e3id, e4id);\r\n for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {\r\n ede.insert();\r\n }\r\n\r\n // The full graph:\r\n // e21\r\n // \\\r\n // e1 --> e2 --> e3 --> e4\r\n // /\r\n // e11\r\n\r\n // On the very first validation, everything is new and is considered directly changed\r\n // resulting graph:\r\n // e21\r\n // \\\r\n // e1 --> e2 --> e3 --> e4\r\n // /\r\n // e11\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);\r\n\r\n // modify e4 directly. That is a leaf. None of its inputs are changed.\r\n // resulting subgraph:\r\n // *\r\n // e4\r\n //\r\n //\r\n helper.updateElement(e4id, \"change e4\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, []);\r\n assertRels(helper.dres.rootChanged, []);\r\n\r\n // modify e3 directly.\r\n // resulting subgraph:\r\n //\r\n //\r\n // *\r\n // e3 --> e4\r\n //\r\n //\r\n helper.updateElement(e3id, \"change e3\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.\r\n assert.deepEqual(helper.dres.allInputsHandled, [e4id]);\r\n assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);\r\n\r\n // modify e2 directly. That is a node in middle of the graph. None of its inputs is modified.\r\n // resulting subgraph:\r\n //\r\n // *\r\n // e2 --> e3 --> e4\r\n //\r\n //\r\n //\r\n helper.updateElement(e2id, \"change e2\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements\r\n assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);\r\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);\r\n\r\n // Modify e1 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\r\n // resulting graph:\r\n //\r\n // *\r\n // e1 --> e2 --> e3 --> e4\r\n //\r\n helper.updateElement(e1id, \"change e1\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements\r\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\r\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\r\n\r\n // Modify e11 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\r\n // resulting graph:\r\n //\r\n // > e2 --> e3 --> e4\r\n // /\r\n // e11\r\n // *\r\n //\r\n // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD\r\n helper.updateElement(e11id, \"change e11\");\r\n\r\n helper.resetDependencyResults();\r\n helper.db.saveChanges();\r\n\r\n // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs\r\n assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements\r\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\r\n assertRels(helper.dres.rootChanged, [ede_11_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\r\n // assertRels(helper.dres.validateOutput, [ede_1_2, ede_21_3]); // this callback is made only on rels that not in the graph but share an output with another rel or have an output that was directly changed\r\n\r\n helper.terminate();\r\n });\r\n\r\n});\r\n"]}
1
+ {"version":3,"file":"ElementDependencyGraph.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.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/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { Guid, Id64Array, Id64String, Logger, OpenMode } from \"@itwin/core-bentley\";\nimport {\n CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, RelatedElementProps, RelationshipProps, SubCategoryAppearance,\n UpgradeOptions,\n} from \"@itwin/core-common\";\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { _nativeDb, ChannelControl, ElementDrivesElementProps, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from \"../../core-backend\";\nimport { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject, TestPhysicalObjectProps } from \"../IModelTestUtils\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\n\nexport function copyFile(newName: string, pathToCopy: string): string {\n const newPath = path.join(path.dirname(pathToCopy), newName);\n try {\n fs.unlinkSync(newPath);\n } catch {\n }\n fs.copyFileSync(pathToCopy, newPath);\n return newPath;\n}\n\nfunction assertRels(list: RelationshipProps[], rels: ElementDrivesElementProps[]) {\n assert.equal(list.length, rels.length);\n for (let i = 0; i < rels.length; ++i) {\n assert.equal(list[i].id, rels[i].id);\n }\n}\n\nclass DependencyCallbackResults {\n public beforeOutputs: Id64Array = [];\n public allInputsHandled: Id64Array = [];\n public rootChanged: RelationshipProps[] = [];\n public deletedDependency: RelationshipProps[] = [];\n}\n\ninterface DbInfo {\n seedFileName: string;\n codeSpecId: Id64String;\n physicalModelId: Id64String;\n spatialCategoryId: Id64String;\n}\n\nclass TestHelper {\n public db: StandaloneDb;\n public dres = new DependencyCallbackResults();\n private removals: VoidFunction[] = [];\n private codeSpecId: Id64String = \"\";\n private physicalModelId: Id64String = \"\";\n private spatialCategoryid: Id64String = \"\";\n\n constructor(testName: string, dbInfo: DbInfo) {\n this.codeSpecId = dbInfo.codeSpecId;\n this.physicalModelId = dbInfo.physicalModelId;\n this.spatialCategoryid = dbInfo.spatialCategoryId;\n\n const writeDbFileName = copyFile(`${testName}.bim`, dbInfo.seedFileName);\n this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);\n assert.isTrue(this.db !== undefined);\n this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n this.db[_nativeDb].enableTxnTesting();\n assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship(\"TestBim\", \"ChildPropagatesChangesToParent\"), 0);\n this.setElementDependencyGraphCallbacks();\n }\n\n public terminate() {\n this.db.close();\n assert.isFalse(this.db.isOpen);\n this.removeElementDependencyGraphCallbacks();\n }\n\n public makeElement(codeValue: string, parent?: RelatedElementProps): TestPhysicalObjectProps {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(5, 0, 0)));\n\n return {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: this.physicalModelId,\n category: this.spatialCategoryid,\n code: { spec: this.codeSpecId, scope: this.physicalModelId, value: codeValue },\n intProperty: 100,\n placement: {\n origin: new Point3d(0, 0, 0),\n angles: new YawPitchRollAngles(),\n },\n geom: builder.geometryStream,\n parent,\n };\n }\n\n public insertElement(codeValue: string, parent?: RelatedElementProps): Id64String {\n return this.db.elements.insertElement(this.makeElement(codeValue, parent));\n }\n\n public updateElement(elid: Id64String, newLabel: string) {\n const ed2 = this.db.elements.getElement({ id: elid });\n ed2.userLabel = newLabel;\n this.db.elements.updateElement(ed2.toJSON());\n }\n\n public fmtElem(elId: Id64String) { return this.db.elements.getElement(elId).code.value; }\n public fmtRel(props: RelationshipProps) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }\n\n public resetDependencyResults() {\n this.dres = new DependencyCallbackResults();\n }\n\n public setElementDependencyGraphCallbacks() {\n this.removals.push(TestElementDrivesElement.deletedDependency.addListener((evProps) => {\n Logger.logTrace(\"EDGTest\", `_onDeletedDependency ${this.fmtRel(evProps)}`);\n this.dres.deletedDependency.push(evProps);\n }));\n this.removals.push(TestElementDrivesElement.rootChanged.addListener((evProps, _im) => {\n Logger.logTrace(\"EDGTest\", `_onRootChanged ${this.fmtRel(evProps)}`);\n this.dres.rootChanged.push(evProps);\n }));\n this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((elId) => {\n Logger.logTrace(\"EDGTest\", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);\n this.dres.beforeOutputs.push(elId);\n }));\n this.removals.push(TestPhysicalObject.allInputsHandled.addListener((elId) => {\n Logger.logTrace(\"EDGTest\", `_onAllInputsHandled ${this.fmtElem(elId)}`);\n this.dres.allInputsHandled.push(elId);\n }));\n }\n\n public removeElementDependencyGraphCallbacks() {\n this.removals.forEach((drop) => drop());\n }\n}\n\ndescribe(\"ElementDependencyGraph\", () => {\n let testFileName: string;\n let dbInfo: DbInfo;\n\n const performUpgrade = (pathname: string) => {\n const nativeDb = new IModelNative.platform.DgnDb();\n const upgradeOptions: UpgradeOptions = {\n domain: DomainOptions.Upgrade,\n schemaLockHeld: true,\n };\n nativeDb.openIModel(pathname, OpenMode.ReadWrite, upgradeOptions);\n nativeDb.deleteAllTxns();\n nativeDb.closeFile();\n };\n\n before(async () => {\n IModelTestUtils.registerTestBimSchema();\n // make a unique name for the output file so this test can be run in parallel\n testFileName = IModelTestUtils.prepareOutputFile(\"ElementDependencyGraph\", `${Guid.createValue()}.bim`);\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const schemaFileName = IModelTestUtils.resolveAssetFile(\"TestBim.ecschema.xml\");\n IModelJsFs.copySync(seedFileName, testFileName);\n performUpgrade(testFileName);\n const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const physicalModelId = PhysicalModel.insert(imodel, IModel.rootSubjectId, \"EDGTestModel\");\n const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, \"EDGTestCodeSpec\", CodeScopeSpec.Type.Model));\n const spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, \"EDGTestSpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };\n imodel.saveChanges(\"\");\n imodel[_nativeDb].deleteAllTxns();\n imodel.close();\n });\n\n after(() => {\n IModelJsFs.removeSync(testFileName);\n });\n\n it(\"should invokeCallbacks EDE only\", () => {\n const helper = new TestHelper(\"EDE\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n for (const ede of [ede_1_2, ede_2_3]) {\n ede.insert();\n }\n\n // The full graph:\n // e1 --> e2 --> e3\n\n helper.resetDependencyResults();\n helper.db.saveChanges(); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents only\", () => {\n const helper = new TestHelper(\"Parents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n helper.db.saveChanges(); // get the elements into the iModel\n\n // The full graph:\n // .-parent-> p2\n // /\n // e1\n //\n helper.resetDependencyResults();\n helper.db.saveChanges();\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p2id]);\n assertRels(helper.dres.rootChanged, []);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through EDEs and parents\", () => {\n const helper = new TestHelper(\"EDEsAndParents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const p3id = helper.insertElement(\"p3\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_p2_p3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, p2id, p3id);\n for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {\n ede.insert();\n }\n\n // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);\n\n // The full graph:\n // .-parent-> p2 -EDE-> p3\n // /\n // e1 -EDE-> e2 -EDE-> e3\n //\n helper.resetDependencyResults();\n helper.db.saveChanges(); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p3id]);\n assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);\n\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e3id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents - geomodeler schema\", () => {\n const helper = new TestHelper(\"GeoModeler\", dbInfo);\n\n // The full graph:\n // BoreholeSource -EDE-> GroundGeneration\n // / parent\n // Borehole\n // / parent\n // Material -EDE-> MaterialDepthRange\n\n const boreholeSource = helper.insertElement(\"BoreholeSource\");\n const borehole = helper.insertElement(\"Borehole\", { id: boreholeSource, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const materialDepthRange = helper.insertElement(\"MaterialDepthRange\", { id: borehole, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const material = helper.insertElement(\"Material\");\n const groundGeneration = helper.insertElement(\"GroundGeneration\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_material_materialDepthRange = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, material, materialDepthRange);\n const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, boreholeSource, groundGeneration);\n for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {\n ede.insert();\n }\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n helper.updateElement(material, \"change material\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);\n assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks many:1\", () => {\n const helper = new TestHelper(\"ManyToOne\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e11id = helper.insertElement(\"e11\");\n const e2id = helper.insertElement(\"e2\");\n const e21id = helper.insertElement(\"e21\");\n const e3id = helper.insertElement(\"e3\");\n const e4id = helper.insertElement(\"e4\");\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_11_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e11id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_21_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e21id, e3id);\n const ede_3_4 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e3id, e4id);\n for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {\n ede.insert();\n }\n\n // The full graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n\n // On the very first validation, everything is new and is considered directly changed\n // resulting graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n helper.resetDependencyResults();\n helper.db.saveChanges();\n assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);\n\n // modify e4 directly. That is a leaf. None of its inputs are changed.\n // resulting subgraph:\n // *\n // e4\n //\n //\n helper.updateElement(e4id, \"change e4\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n // modify e3 directly.\n // resulting subgraph:\n //\n //\n // *\n // e3 --> e4\n //\n //\n helper.updateElement(e3id, \"change e3\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e4id]);\n assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);\n\n // modify e2 directly. That is a node in middle of the graph. None of its inputs is modified.\n // resulting subgraph:\n //\n // *\n // e2 --> e3 --> e4\n //\n //\n //\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e1 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // *\n // e1 --> e2 --> e3 --> e4\n //\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e11 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // > e2 --> e3 --> e4\n // /\n // e11\n // *\n //\n // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD\n helper.updateElement(e11id, \"change e11\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs\n assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_11_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n // assertRels(helper.dres.validateOutput, [ede_1_2, ede_21_3]); // this callback is made only on rels that not in the graph but share an output with another rel or have an output that was directly changed\n\n helper.terminate();\n });\n\n});\n"]}
@@ -256,145 +256,145 @@ function initElementRefersToElementsProps(className, _iModelName, elId1, elId2,
256
256
  return result;
257
257
  }
258
258
  describe("Element and ElementAspect roundtrip test for all type of properties", () => {
259
- const testSchema = `<?xml version="1.0" encoding="UTF-8"?>
260
- <ECSchema schemaName="ElementRoundTripTest" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
261
- <ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
262
- <ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
263
- <ECEntityClass typeName="TestElement" modifier="None">
264
- <BaseClass>bis:PhysicalElement</BaseClass>
265
- <BaseClass>IPrimitive</BaseClass>
266
- <BaseClass>IPrimitiveArray</BaseClass>
267
- </ECEntityClass>
268
- <ECEntityClass typeName="TestElementAspect" modifier="None">
269
- <BaseClass>bis:ElementUniqueAspect</BaseClass>
270
- <BaseClass>IPrimitiveAspect</BaseClass>
271
- <BaseClass>IPrimitiveArrayAspect</BaseClass>
272
- </ECEntityClass>
273
- <ECRelationshipClass typeName="TestElementRefersToElements" strength="referencing" modifier="Sealed">
274
- <BaseClass>bis:ElementRefersToElements</BaseClass>
275
- <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
276
- <Class class="TestElement"/>
277
- </Source>
278
- <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
279
- <Class class="TestElement"/>
280
- </Target>
281
- <ECProperty propertyName="i" typeName="int"/>
282
- <ECProperty propertyName="l" typeName="long"/>
283
- <ECProperty propertyName="d" typeName="double"/>
284
- <ECProperty propertyName="b" typeName="boolean"/>
285
- <ECProperty propertyName="dt" typeName="dateTime"/>
286
- <ECProperty propertyName="s" typeName="string"/>
287
- <ECProperty propertyName="bin" typeName="binary"/>
288
- <ECProperty propertyName="p2d" typeName="point2d"/>
289
- <ECProperty propertyName="p3d" typeName="point3d"/>
290
- <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
291
- <!--<ECStructProperty propertyName="st" typeName="ComplexStruct"/>-->
292
- <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
293
- <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
294
- <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
295
- <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
296
- <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
297
- <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
298
- <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
299
- <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
300
- <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
301
- <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
302
- <!--<ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>-->
303
- </ECRelationshipClass>
304
- <ECEntityClass typeName="IPrimitive" modifier="Abstract">
305
- <ECCustomAttributes>
306
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
307
- <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>
308
- </IsMixin>
309
- </ECCustomAttributes>
310
- <ECProperty propertyName="i" typeName="int"/>
311
- <ECProperty propertyName="l" typeName="long"/>
312
- <ECProperty propertyName="d" typeName="double"/>
313
- <ECProperty propertyName="b" typeName="boolean"/>
314
- <ECProperty propertyName="dt" typeName="dateTime"/>
315
- <ECProperty propertyName="s" typeName="string"/>
316
- <ECProperty propertyName="bin" typeName="binary"/>
317
- <ECProperty propertyName="p2d" typeName="point2d"/>
318
- <ECProperty propertyName="p3d" typeName="point3d"/>
319
- <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
320
- <ECStructProperty propertyName="st" typeName="ComplexStruct"/>
321
- </ECEntityClass>
322
- <ECEntityClass typeName="IPrimitiveAspect" modifier="Abstract">
323
- <ECCustomAttributes>
324
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
325
- <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
326
- </IsMixin>
327
- </ECCustomAttributes>
328
- <ECProperty propertyName="i" typeName="int"/>
329
- <ECProperty propertyName="l" typeName="long"/>
330
- <ECProperty propertyName="d" typeName="double"/>
331
- <ECProperty propertyName="b" typeName="boolean"/>
332
- <ECProperty propertyName="dt" typeName="dateTime"/>
333
- <ECProperty propertyName="s" typeName="string"/>
334
- <ECProperty propertyName="bin" typeName="binary"/>
335
- <ECProperty propertyName="p2d" typeName="point2d"/>
336
- <ECProperty propertyName="p3d" typeName="point3d"/>
337
- <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
338
- <ECStructProperty propertyName="st" typeName="ComplexStruct"/>
339
- </ECEntityClass>
340
- <ECEntityClass typeName="IPrimitiveArray" modifier="Abstract">
341
- <ECCustomAttributes>
342
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
343
- <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>
344
- </IsMixin>
345
- </ECCustomAttributes>
346
- <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
347
- <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
348
- <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
349
- <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
350
- <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
351
- <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
352
- <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
353
- <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
354
- <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
355
- <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
356
- <ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>
357
- </ECEntityClass>
358
- <ECEntityClass typeName="IPrimitiveArrayAspect" modifier="Abstract">
359
- <ECCustomAttributes>
360
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
361
- <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
362
- </IsMixin>
363
- </ECCustomAttributes>
364
- <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
365
- <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
366
- <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
367
- <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
368
- <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
369
- <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
370
- <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
371
- <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
372
- <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
373
- <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
374
- <ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>
375
- </ECEntityClass>
376
- <ECStructClass typeName="ComplexStruct" modifier="None">
377
- <ECProperty propertyName="i" typeName="int"/>
378
- <ECProperty propertyName="l" typeName="long"/>
379
- <ECProperty propertyName="d" typeName="double"/>
380
- <ECProperty propertyName="b" typeName="boolean"/>
381
- <ECProperty propertyName="dt" typeName="dateTime"/>
382
- <ECProperty propertyName="s" typeName="string"/>
383
- <ECProperty propertyName="bin" typeName="binary"/>
384
- <ECProperty propertyName="p2d" typeName="point2d"/>
385
- <ECProperty propertyName="p3d" typeName="point3d"/>
386
- <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
387
- <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
388
- <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
389
- <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
390
- <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
391
- <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
392
- <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
393
- <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
394
- <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
395
- <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
396
- <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
397
- </ECStructClass>
259
+ const testSchema = `<?xml version="1.0" encoding="UTF-8"?>
260
+ <ECSchema schemaName="ElementRoundTripTest" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
261
+ <ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
262
+ <ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
263
+ <ECEntityClass typeName="TestElement" modifier="None">
264
+ <BaseClass>bis:PhysicalElement</BaseClass>
265
+ <BaseClass>IPrimitive</BaseClass>
266
+ <BaseClass>IPrimitiveArray</BaseClass>
267
+ </ECEntityClass>
268
+ <ECEntityClass typeName="TestElementAspect" modifier="None">
269
+ <BaseClass>bis:ElementUniqueAspect</BaseClass>
270
+ <BaseClass>IPrimitiveAspect</BaseClass>
271
+ <BaseClass>IPrimitiveArrayAspect</BaseClass>
272
+ </ECEntityClass>
273
+ <ECRelationshipClass typeName="TestElementRefersToElements" strength="referencing" modifier="Sealed">
274
+ <BaseClass>bis:ElementRefersToElements</BaseClass>
275
+ <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
276
+ <Class class="TestElement"/>
277
+ </Source>
278
+ <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
279
+ <Class class="TestElement"/>
280
+ </Target>
281
+ <ECProperty propertyName="i" typeName="int"/>
282
+ <ECProperty propertyName="l" typeName="long"/>
283
+ <ECProperty propertyName="d" typeName="double"/>
284
+ <ECProperty propertyName="b" typeName="boolean"/>
285
+ <ECProperty propertyName="dt" typeName="dateTime"/>
286
+ <ECProperty propertyName="s" typeName="string"/>
287
+ <ECProperty propertyName="bin" typeName="binary"/>
288
+ <ECProperty propertyName="p2d" typeName="point2d"/>
289
+ <ECProperty propertyName="p3d" typeName="point3d"/>
290
+ <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
291
+ <!--<ECStructProperty propertyName="st" typeName="ComplexStruct"/>-->
292
+ <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
293
+ <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
294
+ <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
295
+ <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
296
+ <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
297
+ <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
298
+ <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
299
+ <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
300
+ <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
301
+ <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
302
+ <!--<ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>-->
303
+ </ECRelationshipClass>
304
+ <ECEntityClass typeName="IPrimitive" modifier="Abstract">
305
+ <ECCustomAttributes>
306
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
307
+ <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>
308
+ </IsMixin>
309
+ </ECCustomAttributes>
310
+ <ECProperty propertyName="i" typeName="int"/>
311
+ <ECProperty propertyName="l" typeName="long"/>
312
+ <ECProperty propertyName="d" typeName="double"/>
313
+ <ECProperty propertyName="b" typeName="boolean"/>
314
+ <ECProperty propertyName="dt" typeName="dateTime"/>
315
+ <ECProperty propertyName="s" typeName="string"/>
316
+ <ECProperty propertyName="bin" typeName="binary"/>
317
+ <ECProperty propertyName="p2d" typeName="point2d"/>
318
+ <ECProperty propertyName="p3d" typeName="point3d"/>
319
+ <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
320
+ <ECStructProperty propertyName="st" typeName="ComplexStruct"/>
321
+ </ECEntityClass>
322
+ <ECEntityClass typeName="IPrimitiveAspect" modifier="Abstract">
323
+ <ECCustomAttributes>
324
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
325
+ <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
326
+ </IsMixin>
327
+ </ECCustomAttributes>
328
+ <ECProperty propertyName="i" typeName="int"/>
329
+ <ECProperty propertyName="l" typeName="long"/>
330
+ <ECProperty propertyName="d" typeName="double"/>
331
+ <ECProperty propertyName="b" typeName="boolean"/>
332
+ <ECProperty propertyName="dt" typeName="dateTime"/>
333
+ <ECProperty propertyName="s" typeName="string"/>
334
+ <ECProperty propertyName="bin" typeName="binary"/>
335
+ <ECProperty propertyName="p2d" typeName="point2d"/>
336
+ <ECProperty propertyName="p3d" typeName="point3d"/>
337
+ <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
338
+ <ECStructProperty propertyName="st" typeName="ComplexStruct"/>
339
+ </ECEntityClass>
340
+ <ECEntityClass typeName="IPrimitiveArray" modifier="Abstract">
341
+ <ECCustomAttributes>
342
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
343
+ <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>
344
+ </IsMixin>
345
+ </ECCustomAttributes>
346
+ <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
347
+ <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
348
+ <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
349
+ <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
350
+ <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
351
+ <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
352
+ <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
353
+ <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
354
+ <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
355
+ <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
356
+ <ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>
357
+ </ECEntityClass>
358
+ <ECEntityClass typeName="IPrimitiveArrayAspect" modifier="Abstract">
359
+ <ECCustomAttributes>
360
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
361
+ <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
362
+ </IsMixin>
363
+ </ECCustomAttributes>
364
+ <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
365
+ <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
366
+ <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
367
+ <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
368
+ <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
369
+ <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
370
+ <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
371
+ <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
372
+ <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
373
+ <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
374
+ <ECStructArrayProperty propertyName="array_st" typeName="ComplexStruct" minOccurs="0" maxOccurs="unbounded"/>
375
+ </ECEntityClass>
376
+ <ECStructClass typeName="ComplexStruct" modifier="None">
377
+ <ECProperty propertyName="i" typeName="int"/>
378
+ <ECProperty propertyName="l" typeName="long"/>
379
+ <ECProperty propertyName="d" typeName="double"/>
380
+ <ECProperty propertyName="b" typeName="boolean"/>
381
+ <ECProperty propertyName="dt" typeName="dateTime"/>
382
+ <ECProperty propertyName="s" typeName="string"/>
383
+ <ECProperty propertyName="bin" typeName="binary"/>
384
+ <ECProperty propertyName="p2d" typeName="point2d"/>
385
+ <ECProperty propertyName="p3d" typeName="point3d"/>
386
+ <ECProperty propertyName="g" typeName="Bentley.Geometry.Common.IGeometry"/>
387
+ <ECArrayProperty propertyName="array_i" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
388
+ <ECArrayProperty propertyName="array_l" typeName="long" minOccurs="0" maxOccurs="unbounded"/>
389
+ <ECArrayProperty propertyName="array_d" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
390
+ <ECArrayProperty propertyName="array_b" typeName="boolean" minOccurs="0" maxOccurs="unbounded"/>
391
+ <ECArrayProperty propertyName="array_dt" typeName="dateTime" minOccurs="0" maxOccurs="unbounded"/>
392
+ <ECArrayProperty propertyName="array_s" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
393
+ <ECArrayProperty propertyName="array_bin" typeName="binary" minOccurs="0" maxOccurs="unbounded"/>
394
+ <ECArrayProperty propertyName="array_p2d" typeName="point2d" minOccurs="0" maxOccurs="unbounded"/>
395
+ <ECArrayProperty propertyName="array_p3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
396
+ <ECArrayProperty propertyName="array_g" typeName="Bentley.Geometry.Common.IGeometry" minOccurs="0" maxOccurs="unbounded"/>
397
+ </ECStructClass>
398
398
  </ECSchema>`;
399
399
  const schemaFileName = "ElementRoundTripTest.01.00.00.xml";
400
400
  const iModelFileName = "ElementRoundTripTest.bim";