@itwin/core-backend 5.2.0-dev.8 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/CHANGELOG.md +59 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +2 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
  6. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  7. package/lib/cjs/BackendLoggerCategory.js +6 -0
  8. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  9. package/lib/cjs/BisCoreSchema.js.map +1 -1
  10. package/lib/cjs/BlobContainerService.js.map +1 -1
  11. package/lib/cjs/BriefcaseManager.d.ts +57 -3
  12. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  13. package/lib/cjs/BriefcaseManager.js +151 -42
  14. package/lib/cjs/BriefcaseManager.js.map +1 -1
  15. package/lib/cjs/CatalogDb.js.map +1 -1
  16. package/lib/cjs/Category.js.map +1 -1
  17. package/lib/cjs/ChangeSummaryManager.js +2 -2
  18. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  19. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  20. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  21. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  22. package/lib/cjs/ChannelControl.js.map +1 -1
  23. package/lib/cjs/CheckpointManager.js.map +1 -1
  24. package/lib/cjs/ClassRegistry.js +5 -5
  25. package/lib/cjs/ClassRegistry.js.map +1 -1
  26. package/lib/cjs/CloudSqlite.d.ts +4 -0
  27. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  28. package/lib/cjs/CloudSqlite.js.map +1 -1
  29. package/lib/cjs/CodeService.js.map +1 -1
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.js.map +1 -1
  35. package/lib/cjs/ECDb.d.ts +8 -0
  36. package/lib/cjs/ECDb.d.ts.map +1 -1
  37. package/lib/cjs/ECDb.js +22 -0
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlStatement.js.map +1 -1
  41. package/lib/cjs/Element.js.map +1 -1
  42. package/lib/cjs/ElementAspect.js.map +1 -1
  43. package/lib/cjs/ElementGraphics.js.map +1 -1
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/Entity.js.map +1 -1
  46. package/lib/cjs/EntityReferences.js.map +1 -1
  47. package/lib/cjs/ExportGraphics.js.map +1 -1
  48. package/lib/cjs/ExternalSource.js.map +1 -1
  49. package/lib/cjs/FontFile.js.map +1 -1
  50. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/GeometrySummary.js +47 -47
  53. package/lib/cjs/GeometrySummary.js.map +1 -1
  54. package/lib/cjs/IModelDb.d.ts +54 -3
  55. package/lib/cjs/IModelDb.d.ts.map +1 -1
  56. package/lib/cjs/IModelDb.js +96 -18
  57. package/lib/cjs/IModelDb.js.map +1 -1
  58. package/lib/cjs/IModelDbFonts.js.map +1 -1
  59. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  60. package/lib/cjs/IModelHost.d.ts +11 -1
  61. package/lib/cjs/IModelHost.d.ts.map +1 -1
  62. package/lib/cjs/IModelHost.js +5 -0
  63. package/lib/cjs/IModelHost.js.map +1 -1
  64. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
  65. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  66. package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
  67. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  68. package/lib/cjs/IModelJsFs.js.map +1 -1
  69. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  70. package/lib/cjs/IpcHost.js.map +1 -1
  71. package/lib/cjs/LineStyle.js.map +1 -1
  72. package/lib/cjs/LocalHub.js +1 -1
  73. package/lib/cjs/LocalHub.js.map +1 -1
  74. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  75. package/lib/cjs/LockControl.js.map +1 -1
  76. package/lib/cjs/Material.js.map +1 -1
  77. package/lib/cjs/Model.js.map +1 -1
  78. package/lib/cjs/NativeAppStorage.js.map +1 -1
  79. package/lib/cjs/NativeHost.js.map +1 -1
  80. package/lib/cjs/NavigationRelationship.js.map +1 -1
  81. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  82. package/lib/cjs/PropertyStore.js.map +1 -1
  83. package/lib/cjs/Relationship.js.map +1 -1
  84. package/lib/cjs/RpcBackend.js.map +1 -1
  85. package/lib/cjs/SQLiteDb.js.map +1 -1
  86. package/lib/cjs/Schema.js.map +1 -1
  87. package/lib/cjs/SchemaSync.js.map +1 -1
  88. package/lib/cjs/SchemaUtils.js.map +1 -1
  89. package/lib/cjs/SheetIndex.js.map +1 -1
  90. package/lib/cjs/SqliteChangesetReader.d.ts +8 -0
  91. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  92. package/lib/cjs/SqliteChangesetReader.js +11 -0
  93. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  94. package/lib/cjs/SqliteStatement.js.map +1 -1
  95. package/lib/cjs/StashManager.d.ts +175 -0
  96. package/lib/cjs/StashManager.d.ts.map +1 -0
  97. package/lib/cjs/StashManager.js +306 -0
  98. package/lib/cjs/StashManager.js.map +1 -0
  99. package/lib/cjs/Texture.js.map +1 -1
  100. package/lib/cjs/TileStorage.js.map +1 -1
  101. package/lib/cjs/TxnManager.d.ts +226 -15
  102. package/lib/cjs/TxnManager.d.ts.map +1 -1
  103. package/lib/cjs/TxnManager.js +249 -23
  104. package/lib/cjs/TxnManager.js.map +1 -1
  105. package/lib/cjs/ViewDefinition.js.map +1 -1
  106. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  107. package/lib/cjs/ViewStore.js.map +1 -1
  108. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
  109. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +40 -6
  111. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  112. package/lib/cjs/annotations/FrameGeometry.js +6 -6
  113. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  114. package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
  115. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  116. package/lib/cjs/annotations/LeaderGeometry.js +8 -7
  117. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  118. package/lib/cjs/annotations/TextAnnotationElement.d.ts +164 -36
  119. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  120. package/lib/cjs/annotations/TextAnnotationElement.js +315 -105
  121. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  122. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
  123. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  124. package/lib/cjs/annotations/TextAnnotationGeometry.js +26 -19
  125. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  126. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -1
  127. package/lib/cjs/annotations/TextBlockGeometry.js +11 -3
  128. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  129. package/lib/cjs/annotations/TextBlockLayout.d.ts +51 -38
  130. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  131. package/lib/cjs/annotations/TextBlockLayout.js +252 -156
  132. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  133. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  134. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  135. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  136. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  137. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  138. package/lib/cjs/core-backend.js.map +1 -1
  139. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  140. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  141. package/lib/cjs/domains/GenericElements.js.map +1 -1
  142. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  143. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  144. package/lib/cjs/internal/ChannelAdmin.js +1 -1
  145. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  146. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  147. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  148. package/lib/cjs/internal/HubMock.js.map +1 -1
  149. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  150. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  151. package/lib/cjs/internal/NoLocks.js.map +1 -1
  152. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  153. package/lib/cjs/internal/Symbols.d.ts +1 -0
  154. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  155. package/lib/cjs/internal/Symbols.js +2 -1
  156. package/lib/cjs/internal/Symbols.js.map +1 -1
  157. package/lib/cjs/internal/annotations/fields.d.ts +2 -12
  158. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  159. package/lib/cjs/internal/annotations/fields.js +50 -45
  160. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  161. package/lib/cjs/internal/cross-package.js.map +1 -1
  162. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  163. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  164. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  165. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  166. package/lib/cjs/rpc/multipart.js.map +1 -1
  167. package/lib/cjs/rpc/tracing.js.map +1 -1
  168. package/lib/cjs/rpc/web/logging.js.map +1 -1
  169. package/lib/cjs/rpc/web/request.js.map +1 -1
  170. package/lib/cjs/rpc/web/response.js.map +1 -1
  171. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  172. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  173. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  174. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  175. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  176. package/lib/cjs/workspace/Settings.js.map +1 -1
  177. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  178. package/lib/cjs/workspace/Workspace.d.ts +1 -1
  179. package/lib/cjs/workspace/Workspace.js.map +1 -1
  180. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  181. package/lib/esm/BackendHubAccess.d.ts +2 -0
  182. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  183. package/lib/esm/BackendHubAccess.js.map +1 -1
  184. package/lib/esm/BackendLoggerCategory.d.ts +6 -0
  185. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
  186. package/lib/esm/BackendLoggerCategory.js +6 -0
  187. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  188. package/lib/esm/BisCoreSchema.js.map +1 -1
  189. package/lib/esm/BlobContainerService.js.map +1 -1
  190. package/lib/esm/BriefcaseManager.d.ts +57 -3
  191. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  192. package/lib/esm/BriefcaseManager.js +152 -43
  193. package/lib/esm/BriefcaseManager.js.map +1 -1
  194. package/lib/esm/CatalogDb.js.map +1 -1
  195. package/lib/esm/Category.js.map +1 -1
  196. package/lib/esm/ChangeSummaryManager.js +2 -2
  197. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  198. package/lib/esm/ChangedElementsDb.js.map +1 -1
  199. package/lib/esm/ChangesetECAdaptor.js +248 -248
  200. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  201. package/lib/esm/ChannelControl.js.map +1 -1
  202. package/lib/esm/CheckpointManager.js.map +1 -1
  203. package/lib/esm/ClassRegistry.js +5 -5
  204. package/lib/esm/ClassRegistry.js.map +1 -1
  205. package/lib/esm/CloudSqlite.d.ts +4 -0
  206. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  207. package/lib/esm/CloudSqlite.js.map +1 -1
  208. package/lib/esm/CodeService.js.map +1 -1
  209. package/lib/esm/CodeSpecs.js.map +1 -1
  210. package/lib/esm/ConcurrentQuery.js.map +1 -1
  211. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  212. package/lib/esm/DevTools.js.map +1 -1
  213. package/lib/esm/DisplayStyle.js.map +1 -1
  214. package/lib/esm/ECDb.d.ts +8 -0
  215. package/lib/esm/ECDb.d.ts.map +1 -1
  216. package/lib/esm/ECDb.js +22 -0
  217. package/lib/esm/ECDb.js.map +1 -1
  218. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  219. package/lib/esm/ECSqlStatement.js.map +1 -1
  220. package/lib/esm/Element.js.map +1 -1
  221. package/lib/esm/ElementAspect.js.map +1 -1
  222. package/lib/esm/ElementGraphics.js.map +1 -1
  223. package/lib/esm/ElementTreeWalker.js.map +1 -1
  224. package/lib/esm/Entity.js.map +1 -1
  225. package/lib/esm/EntityReferences.js.map +1 -1
  226. package/lib/esm/ExportGraphics.js.map +1 -1
  227. package/lib/esm/ExternalSource.js.map +1 -1
  228. package/lib/esm/FontFile.js.map +1 -1
  229. package/lib/esm/GeoCoordConfig.js.map +1 -1
  230. package/lib/esm/GeographicCRSServices.js.map +1 -1
  231. package/lib/esm/GeometrySummary.js +47 -47
  232. package/lib/esm/GeometrySummary.js.map +1 -1
  233. package/lib/esm/IModelDb.d.ts +54 -3
  234. package/lib/esm/IModelDb.d.ts.map +1 -1
  235. package/lib/esm/IModelDb.js +97 -19
  236. package/lib/esm/IModelDb.js.map +1 -1
  237. package/lib/esm/IModelDbFonts.js.map +1 -1
  238. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  239. package/lib/esm/IModelHost.d.ts +11 -1
  240. package/lib/esm/IModelHost.d.ts.map +1 -1
  241. package/lib/esm/IModelHost.js +5 -0
  242. package/lib/esm/IModelHost.js.map +1 -1
  243. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
  244. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  245. package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
  246. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  247. package/lib/esm/IModelJsFs.js.map +1 -1
  248. package/lib/esm/ImageSourceConversion.js.map +1 -1
  249. package/lib/esm/IpcHost.js.map +1 -1
  250. package/lib/esm/LineStyle.js.map +1 -1
  251. package/lib/esm/LocalHub.js +1 -1
  252. package/lib/esm/LocalHub.js.map +1 -1
  253. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  254. package/lib/esm/LockControl.js.map +1 -1
  255. package/lib/esm/Material.js.map +1 -1
  256. package/lib/esm/Model.js.map +1 -1
  257. package/lib/esm/NativeAppStorage.js.map +1 -1
  258. package/lib/esm/NativeHost.js.map +1 -1
  259. package/lib/esm/NavigationRelationship.js.map +1 -1
  260. package/lib/esm/PromiseMemoizer.js.map +1 -1
  261. package/lib/esm/PropertyStore.js.map +1 -1
  262. package/lib/esm/Relationship.js.map +1 -1
  263. package/lib/esm/RpcBackend.js.map +1 -1
  264. package/lib/esm/SQLiteDb.js.map +1 -1
  265. package/lib/esm/Schema.js.map +1 -1
  266. package/lib/esm/SchemaSync.js.map +1 -1
  267. package/lib/esm/SchemaUtils.js.map +1 -1
  268. package/lib/esm/SheetIndex.js.map +1 -1
  269. package/lib/esm/SqliteChangesetReader.d.ts +8 -0
  270. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  271. package/lib/esm/SqliteChangesetReader.js +11 -0
  272. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  273. package/lib/esm/SqliteStatement.js.map +1 -1
  274. package/lib/esm/StashManager.d.ts +175 -0
  275. package/lib/esm/StashManager.d.ts.map +1 -0
  276. package/lib/esm/StashManager.js +301 -0
  277. package/lib/esm/StashManager.js.map +1 -0
  278. package/lib/esm/Texture.js.map +1 -1
  279. package/lib/esm/TileStorage.js.map +1 -1
  280. package/lib/esm/TxnManager.d.ts +226 -15
  281. package/lib/esm/TxnManager.d.ts.map +1 -1
  282. package/lib/esm/TxnManager.js +247 -21
  283. package/lib/esm/TxnManager.js.map +1 -1
  284. package/lib/esm/ViewDefinition.js.map +1 -1
  285. package/lib/esm/ViewStateHydrator.js.map +1 -1
  286. package/lib/esm/ViewStore.js.map +1 -1
  287. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
  288. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  289. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +38 -5
  290. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  291. package/lib/esm/annotations/FrameGeometry.js +6 -6
  292. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  293. package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
  294. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  295. package/lib/esm/annotations/LeaderGeometry.js +8 -7
  296. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  297. package/lib/esm/annotations/TextAnnotationElement.d.ts +164 -36
  298. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  299. package/lib/esm/annotations/TextAnnotationElement.js +317 -108
  300. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  301. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
  302. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  303. package/lib/esm/annotations/TextAnnotationGeometry.js +26 -19
  304. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  305. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -1
  306. package/lib/esm/annotations/TextBlockGeometry.js +11 -3
  307. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  308. package/lib/esm/annotations/TextBlockLayout.d.ts +51 -38
  309. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  310. package/lib/esm/annotations/TextBlockLayout.js +253 -157
  311. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  312. package/lib/esm/core-backend.js.map +1 -1
  313. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  314. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  315. package/lib/esm/domains/GenericElements.js.map +1 -1
  316. package/lib/esm/domains/GenericSchema.js.map +1 -1
  317. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  318. package/lib/esm/internal/ChannelAdmin.js +1 -1
  319. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  320. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  321. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  322. package/lib/esm/internal/HubMock.js.map +1 -1
  323. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  324. package/lib/esm/internal/NativePlatform.js.map +1 -1
  325. package/lib/esm/internal/NoLocks.js.map +1 -1
  326. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  327. package/lib/esm/internal/Symbols.d.ts +1 -0
  328. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  329. package/lib/esm/internal/Symbols.js +1 -0
  330. package/lib/esm/internal/Symbols.js.map +1 -1
  331. package/lib/esm/internal/annotations/fields.d.ts +2 -12
  332. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  333. package/lib/esm/internal/annotations/fields.js +52 -47
  334. package/lib/esm/internal/annotations/fields.js.map +1 -1
  335. package/lib/esm/internal/cross-package.js.map +1 -1
  336. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  337. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  338. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  339. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  340. package/lib/esm/rpc/multipart.js.map +1 -1
  341. package/lib/esm/rpc/tracing.js.map +1 -1
  342. package/lib/esm/rpc/web/logging.js.map +1 -1
  343. package/lib/esm/rpc/web/request.js.map +1 -1
  344. package/lib/esm/rpc/web/response.js.map +1 -1
  345. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  346. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  347. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  348. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  349. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  350. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  351. package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
  352. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
  353. package/lib/esm/test/AnnotationTestUtils.js +7 -2
  354. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  355. package/lib/esm/test/AttachDb.test.js +11 -11
  356. package/lib/esm/test/AttachDb.test.js.map +1 -1
  357. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  358. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  359. package/lib/esm/test/IModelHost.test.js.map +1 -1
  360. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  361. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  362. package/lib/esm/test/IpcHost.test.js.map +1 -1
  363. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  364. package/lib/esm/test/PrintElementTree.js.map +1 -1
  365. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  366. package/lib/esm/test/RevisionUtility.js.map +1 -1
  367. package/lib/esm/test/SchemaUtils.test.js +25 -25
  368. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  369. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  370. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  371. package/lib/esm/test/TestUtils.js.map +1 -1
  372. package/lib/esm/test/annotations/Fields.test.js +338 -126
  373. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  374. package/lib/esm/test/annotations/FrameGeometry.test.js +4 -4
  375. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  376. package/lib/esm/test/annotations/LeaderGeometry.test.js +19 -17
  377. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  378. package/lib/esm/test/annotations/TextAnnotation.test.js +636 -60
  379. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  380. package/lib/esm/test/annotations/TextBlock.test.js +627 -193
  381. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  382. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  383. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +46 -0
  384. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
  385. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
  386. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  387. package/lib/esm/test/categories/Category.test.js.map +1 -1
  388. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  389. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  390. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  391. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  392. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  393. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  394. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  395. package/lib/esm/test/ecdb/ECDb.test.js +128 -58
  396. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  397. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  398. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  399. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  400. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  401. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  402. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  403. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  404. package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
  405. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  406. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  407. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  408. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  409. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  410. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  411. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  412. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  413. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  414. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  415. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  416. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  417. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  418. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  419. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  420. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  421. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  422. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  423. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  424. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  425. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  426. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  427. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  428. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  429. package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
  430. package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
  431. package/lib/esm/test/hubaccess/Rebase.test.js +680 -0
  432. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
  433. package/lib/esm/test/imageData.js.map +1 -1
  434. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  435. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  436. package/lib/esm/test/imodel/IModel.test.js +44 -44
  437. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  438. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  439. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  440. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
  441. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  442. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
  443. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  444. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  445. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  446. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
  447. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
  448. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
  449. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  450. package/lib/esm/test/index.js.map +1 -1
  451. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  452. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  453. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  454. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  455. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  456. package/lib/esm/test/rpc/response.test.js.map +1 -1
  457. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  458. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  459. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  460. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  461. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  462. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
  464. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  465. package/lib/esm/test/standalone/ChangesetReader.test.js +248 -118
  466. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  467. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  468. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  469. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  470. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  471. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  472. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  473. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  474. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  475. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  476. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  477. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  478. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  479. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  480. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  481. package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
  482. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  483. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  484. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  485. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  486. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  487. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  488. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  490. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  491. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  492. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  493. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  494. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  495. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  496. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  497. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  498. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  499. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  500. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  501. package/lib/esm/workspace/Settings.js.map +1 -1
  502. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  503. package/lib/esm/workspace/Workspace.d.ts +1 -1
  504. package/lib/esm/workspace/Workspace.js.map +1 -1
  505. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  506. package/package.json +14 -14
@@ -7,14 +7,69 @@ import { Code, FieldRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextR
7
7
  import { StandaloneDb } from "../../IModelDb";
8
8
  import { IModelTestUtils } from "../IModelTestUtils";
9
9
  import { createUpdateContext, updateField, updateFields } from "../../internal/annotations/fields";
10
- import { DbResult, Id64 } from "@itwin/core-bentley";
10
+ import { DbResult, Id64, ProcessDetector } from "@itwin/core-bentley";
11
11
  import { SpatialCategory } from "../../Category";
12
12
  import { Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
13
13
  import { Schema, Schemas } from "../../Schema";
14
14
  import { ClassRegistry } from "../../ClassRegistry";
15
15
  import { PhysicalElement } from "../../Element";
16
- import { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, TextAnnotation3d } from "../../core-backend";
17
- import { ElementDrivesTextAnnotation } from "../../annotations/ElementDrivesTextAnnotation";
16
+ import { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, IModelElementCloneContext, TextAnnotation3d } from "../../core-backend";
17
+ import { ElementDrivesTextAnnotation, TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementDrivesTextAnnotation";
18
+ function isIntlSupported() {
19
+ // Node in the mobile add-on does not include Intl, so this test fails. Right now, mobile
20
+ // users are not expected to do any editing, but long term we will attempt to find a better
21
+ // solution.
22
+ return !ProcessDetector.isMobileAppBackend;
23
+ }
24
+ function createTestElement(imodel, model, category, overrides, aspectProp = 999) {
25
+ const props = {
26
+ classFullName: "Fields:TestElement",
27
+ model,
28
+ category,
29
+ code: Code.createEmpty(),
30
+ intProp: 100,
31
+ point: { x: 1, y: 2, z: 3 },
32
+ strings: ["a", "b", `"name": "c"`],
33
+ datetime: new Date("2025-08-28T13:45:30.123Z"),
34
+ intEnum: 1,
35
+ outerStruct: {
36
+ innerStruct: { bool: false, doubles: [1, 2, 3] },
37
+ innerStructs: [{ bool: true, doubles: [] }, { bool: false, doubles: [5, 4, 3, 2, 1] }],
38
+ },
39
+ outerStructs: [{
40
+ innerStruct: { bool: true, doubles: [10, 9] },
41
+ innerStructs: [{ bool: false, doubles: [5] }],
42
+ }],
43
+ placement: {
44
+ origin: new Point3d(1, 2, 0),
45
+ angles: new YawPitchRollAngles(),
46
+ },
47
+ jsonProperties: {
48
+ stringProp: "abc",
49
+ ints: [10, 11, 12, 13],
50
+ bool: true,
51
+ zoo: {
52
+ address: {
53
+ zipcode: 12345,
54
+ },
55
+ birds: [
56
+ { name: "duck", sound: "quack" },
57
+ { name: "hawk", sound: "scree!" },
58
+ ],
59
+ },
60
+ },
61
+ ...overrides,
62
+ };
63
+ const id = imodel.elements.insertElement(props);
64
+ const aspectProps = {
65
+ classFullName: TestAspect.classFullName,
66
+ aspectProp,
67
+ element: new ElementOwnsUniqueAspect(id),
68
+ };
69
+ imodel.elements.insertAspect(aspectProps);
70
+ imodel.saveChanges();
71
+ return id;
72
+ }
18
73
  describe("updateField", () => {
19
74
  const mockElementId = "0x1";
20
75
  const mockPath = {
@@ -31,7 +86,7 @@ describe("updateField", () => {
31
86
  propertyPath.accessors?.[0] === 0 &&
32
87
  propertyPath.accessors?.[1] === "nestedProperty" &&
33
88
  propertyValue !== undefined) {
34
- return { value: propertyValue, metadata: {} };
89
+ return { value: propertyValue, type: "string" };
35
90
  }
36
91
  return undefined;
37
92
  },
@@ -97,36 +152,43 @@ describe("updateField", () => {
97
152
  expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);
98
153
  });
99
154
  });
100
- const fieldsSchemaXml = `
101
- <?xml version="1.0" encoding="UTF-8"?>
102
- <ECSchema schemaName="Fields" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
103
- <ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
104
-
105
- <ECStructClass typeName="InnerStruct" modifier="None">
106
- <ECProperty propertyName="bool" typeName="boolean"/>
107
- <ECArrayProperty propertyName="doubles" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
108
- </ECStructClass>
109
-
110
- <ECStructClass typeName="OuterStruct" modifier="None">
111
- <ECStructProperty propertyName="innerStruct" typeName="InnerStruct"/>
112
- <ECStructArrayProperty propertyName="innerStructs" typeName="InnerStruct" minOccurs="0" maxOccurs="unbounded"/>
113
- </ECStructClass>
114
-
115
- <ECEntityClass typeName="TestElement" modifier="None">
116
- <BaseClass>bis:PhysicalElement</BaseClass>
117
- <ECProperty propertyName="intProp" typeName="int"/>
118
- <ECProperty propertyName="point" typeName="point3d"/>
119
- <ECProperty propertyName="maybeNull" typeName="int"/>
120
- <ECArrayProperty propertyName="strings" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
121
- <ECStructProperty propertyName="outerStruct" typeName="OuterStruct"/>
122
- <ECStructArrayProperty propertyName="outerStructs" typeName="OuterStruct" minOccurs="0" maxOccurs="unbounded"/>
123
- </ECEntityClass>
124
-
125
- <ECEntityClass typeName="TestAspect" modifier="None">
126
- <BaseClass>bis:ElementUniqueAspect</BaseClass>
127
- <ECProperty propertyName="aspectProp" typeName="int"/>
128
- </ECEntityClass>
129
- </ECSchema>
155
+ const fieldsSchemaXml = `
156
+ <?xml version="1.0" encoding="UTF-8"?>
157
+ <ECSchema schemaName="Fields" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
158
+ <ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
159
+
160
+ <ECEnumeration typeName="IntEnum" backingTypeName="int">
161
+ <ECEnumerator name="one" displayLabel="One" value="1" />
162
+ <ECEnumerator name="two" displayLabel="Two" value="2"/>
163
+ </ECEnumeration>
164
+
165
+ <ECStructClass typeName="InnerStruct" modifier="None">
166
+ <ECProperty propertyName="bool" typeName="boolean"/>
167
+ <ECArrayProperty propertyName="doubles" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
168
+ </ECStructClass>
169
+
170
+ <ECStructClass typeName="OuterStruct" modifier="None">
171
+ <ECStructProperty propertyName="innerStruct" typeName="InnerStruct"/>
172
+ <ECStructArrayProperty propertyName="innerStructs" typeName="InnerStruct" minOccurs="0" maxOccurs="unbounded"/>
173
+ </ECStructClass>
174
+
175
+ <ECEntityClass typeName="TestElement" modifier="None">
176
+ <BaseClass>bis:PhysicalElement</BaseClass>
177
+ <ECProperty propertyName="intProp" typeName="int"/>
178
+ <ECProperty propertyName="point" typeName="point3d"/>
179
+ <ECProperty propertyName="maybeNull" typeName="int"/>
180
+ <ECProperty propertyName="datetime" typeName="dateTime"/>
181
+ <ECArrayProperty propertyName="strings" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
182
+ <ECStructProperty propertyName="outerStruct" typeName="OuterStruct"/>
183
+ <ECStructArrayProperty propertyName="outerStructs" typeName="OuterStruct" minOccurs="0" maxOccurs="unbounded"/>
184
+ <ECProperty propertyName="intEnum" typeName="IntEnum"/>
185
+ </ECEntityClass>
186
+
187
+ <ECEntityClass typeName="TestAspect" modifier="None">
188
+ <BaseClass>bis:ElementUniqueAspect</BaseClass>
189
+ <ECProperty propertyName="aspectProp" typeName="int"/>
190
+ </ECEntityClass>
191
+ </ECSchema>
130
192
  `;
131
193
  class TestElement extends PhysicalElement {
132
194
  static get className() { return "TestElement"; }
@@ -165,67 +227,30 @@ describe("Field evaluation", () => {
165
227
  after(() => {
166
228
  imodel.close();
167
229
  });
168
- function insertTestElement() {
169
- const props = {
170
- classFullName: "Fields:TestElement",
171
- model,
172
- category,
173
- code: Code.createEmpty(),
174
- intProp: 100,
175
- point: { x: 1, y: 2, z: 3 },
176
- strings: ["a", "b", `"name": "c"`],
177
- outerStruct: {
178
- innerStruct: { bool: false, doubles: [1, 2, 3] },
179
- innerStructs: [{ bool: true, doubles: [] }, { bool: false, doubles: [5, 4, 3, 2, 1] }],
180
- },
181
- outerStructs: [{
182
- innerStruct: { bool: true, doubles: [10, 9] },
183
- innerStructs: [{ bool: false, doubles: [5] }],
184
- }],
185
- placement: {
186
- origin: new Point3d(1, 2, 0),
187
- angles: new YawPitchRollAngles(),
188
- },
189
- jsonProperties: {
190
- stringProp: "abc",
191
- ints: [10, 11, 12, 13],
192
- zoo: {
193
- address: {
194
- zipcode: 12345,
195
- },
196
- birds: [
197
- { name: "duck", sound: "quack" },
198
- { name: "hawk", sound: "scree!" },
199
- ],
200
- },
201
- },
202
- };
203
- const id = imodel.elements.insertElement(props);
204
- const aspectProps = {
205
- classFullName: TestAspect.classFullName,
206
- aspectProp: 999,
207
- element: new ElementOwnsUniqueAspect(id),
208
- };
209
- imodel.elements.insertAspect(aspectProps);
210
- imodel.saveChanges();
211
- return id;
230
+ function insertTestElement(overrides, aspectProp) {
231
+ return createTestElement(imodel, model, category, overrides, aspectProp);
232
+ }
233
+ function evaluateField(propertyPath, propertyHost, deletedDependency = false) {
234
+ if (typeof propertyHost === "string") {
235
+ propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
236
+ }
237
+ const field = FieldRun.create({
238
+ propertyPath,
239
+ propertyHost,
240
+ });
241
+ const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);
242
+ return context.getProperty(field);
212
243
  }
213
244
  describe("getProperty", () => {
214
245
  function expectValue(expected, propertyPath, propertyHost, deletedDependency = false) {
215
- if (typeof propertyHost === "string") {
216
- propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
217
- }
218
- const field = FieldRun.create({
219
- propertyPath,
220
- propertyHost,
221
- });
222
- const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);
223
- const actual = context.getProperty(field);
224
- expect(actual?.value).to.deep.equal(expected);
246
+ expect(evaluateField(propertyPath, propertyHost, deletedDependency)?.value).to.deep.equal(expected);
225
247
  }
226
248
  it("returns a primitive property value", () => {
227
249
  expectValue(100, { propertyName: "intProp" }, sourceElementId);
228
250
  });
251
+ it("returns an integer enum property value", () => {
252
+ expectValue(1, { propertyName: "intEnum" }, sourceElementId);
253
+ });
229
254
  it("treats points as primitive values", () => {
230
255
  expectValue({ x: 1, y: 2, z: 3 }, { propertyName: "point" }, sourceElementId);
231
256
  expectValue(undefined, { propertyName: "point", accessors: ["x"] }, sourceElementId);
@@ -284,28 +309,62 @@ describe("Field evaluation", () => {
284
309
  expectValue(false, { propertyName: "outerStructs", accessors: [0, "innerStructs", -1, "bool"] }, sourceElementId);
285
310
  expectValue(5, { propertyName: "outerStructs", accessors: [0, "innerStructs", 0, "doubles", 0] }, sourceElementId);
286
311
  });
287
- it("returns arbitrarily-nested JSON properties", () => {
288
- expectValue("abc", { propertyName: "jsonProperties", jsonAccessors: ["stringProp"] }, sourceElementId);
289
- expectValue(10, { propertyName: "jsonProperties", jsonAccessors: ["ints", 0] }, sourceElementId);
290
- expectValue(13, { propertyName: "jsonProperties", jsonAccessors: ["ints", 3] }, sourceElementId);
291
- expectValue(13, { propertyName: "jsonProperties", jsonAccessors: ["ints", -1] }, sourceElementId);
292
- expectValue(11, { propertyName: "jsonProperties", jsonAccessors: ["ints", -3] }, sourceElementId);
293
- expectValue(12345, { propertyName: "jsonProperties", jsonAccessors: ["zoo", "address", "zipcode"] }, sourceElementId);
294
- expectValue("scree!", { propertyName: "jsonProperties", jsonAccessors: ["zoo", "birds", 1, "sound"] }, sourceElementId);
295
- });
296
- it("returns undefined if JSON accessors applied to non-JSON property", () => {
297
- expectValue(undefined, { propertyName: "int", jsonAccessors: ["whatever"] }, sourceElementId);
298
- expectValue(undefined, { propertyName: "strings", accessors: [2, "name"] }, sourceElementId);
299
- expectValue(undefined, { propertyName: "outerStruct", accessors: ["innerStruct"], jsonAccessors: ["bool"] }, sourceElementId);
300
- });
301
312
  it("returns the value of a property of an aspect", () => {
302
313
  expect(imodel.elements.getAspects(sourceElementId, "Fields:TestAspect").length).to.equal(1);
303
314
  expectValue(999, { propertyName: "aspectProp" }, { elementId: sourceElementId, schemaName: "Fields", className: "TestAspect" });
304
315
  });
316
+ it("should fail to evaluate if prop type does not match", () => {
317
+ const fieldRun = FieldRun.create({
318
+ propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
319
+ propertyPath: { propertyName: "string", accessors: [0] },
320
+ cachedContent: "oldValue",
321
+ formatOptions: {
322
+ case: "upper",
323
+ prefix: "Value: ",
324
+ suffix: "!"
325
+ }
326
+ });
327
+ const context = createUpdateContext(sourceElementId, imodel, false);
328
+ const updated = updateField(fieldRun, context);
329
+ expect(updated).to.be.true;
330
+ expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);
331
+ });
332
+ function getPropertyType(propertyHost, propertyPath) {
333
+ if (typeof propertyPath === "string") {
334
+ propertyPath = { propertyName: propertyPath };
335
+ }
336
+ return evaluateField(propertyPath, propertyHost)?.type;
337
+ }
338
+ it("deduces type for primitive properties", () => {
339
+ const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
340
+ expect(getPropertyType(propertyHost, "intProp")).to.equal("string");
341
+ expect(getPropertyType(propertyHost, "point")).to.equal("coordinate");
342
+ expect(getPropertyType(propertyHost, { propertyName: "strings", accessors: [0] })).to.equal("string");
343
+ expect(getPropertyType(propertyHost, "intEnum")).to.equal("int-enum");
344
+ expect(getPropertyType(propertyHost, { propertyName: "outerStruct", accessors: ["innerStruct", "doubles", 0] })).to.equal("quantity");
345
+ expect(getPropertyType(propertyHost, { propertyName: "outerStruct", accessors: ["innerStruct", "bool"] })).to.equal("boolean");
346
+ propertyHost.schemaName = "BisCore";
347
+ propertyHost.className = "GeometricElement3d";
348
+ expect(getPropertyType(propertyHost, "LastMod")).to.equal("datetime");
349
+ expect(getPropertyType(propertyHost, "FederationGuid")).to.equal("string");
350
+ });
351
+ it("returns undefined for non-primitive properties", () => {
352
+ const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
353
+ expect(getPropertyType(propertyHost, "outerStruct")).to.equal(undefined);
354
+ expect(getPropertyType(propertyHost, "outerStructs")).to.equal(undefined);
355
+ });
356
+ it("returns undefined for invalid property paths", () => {
357
+ const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
358
+ expect(getPropertyType(propertyHost, "unknownPropertyName")).to.be.undefined;
359
+ });
360
+ it("should return undefined for unsupported primitive types", () => {
361
+ const host = { elementId: sourceElementId, schemaName: "BisCore", className: "GeometricElement3d" };
362
+ expect(getPropertyType(host, "GeometryStream")).to.be.undefined;
363
+ });
305
364
  });
306
365
  describe("updateFields", () => {
307
366
  it("recomputes cached content", () => {
308
- const textBlock = TextBlock.create({ styleId: "0x123" });
367
+ const textBlock = TextBlock.create();
309
368
  const fieldRun = FieldRun.create({
310
369
  propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
311
370
  propertyPath: { propertyName: "intProp" },
@@ -318,7 +377,7 @@ describe("Field evaluation", () => {
318
377
  expect(fieldRun.cachedContent).to.equal("100"); // `intProp` value from the test element
319
378
  });
320
379
  it("does not update a field if recomputed content matches cached content", () => {
321
- const textBlock = TextBlock.create({ styleId: "0x123" });
380
+ const textBlock = TextBlock.create();
322
381
  const fieldRun = FieldRun.create({
323
382
  propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
324
383
  propertyPath: { propertyName: "intProp" },
@@ -331,7 +390,7 @@ describe("Field evaluation", () => {
331
390
  expect(fieldRun.cachedContent).to.equal("100");
332
391
  });
333
392
  it("returns the number of fields updated", () => {
334
- const textBlock = TextBlock.create({ styleId: "0x123" });
393
+ const textBlock = TextBlock.create();
335
394
  const fieldRun1 = FieldRun.create({
336
395
  propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
337
396
  propertyPath: { propertyName: "intProp" },
@@ -351,7 +410,7 @@ describe("Field evaluation", () => {
351
410
  expect(fieldRun2.cachedContent).to.equal("a");
352
411
  });
353
412
  });
354
- function insertAnnotationElement(textBlock) {
413
+ function createAnnotationElement(textBlock) {
355
414
  const elem = TextAnnotation3d.fromJSON({
356
415
  model,
357
416
  category,
@@ -361,11 +420,16 @@ describe("Field evaluation", () => {
361
420
  angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),
362
421
  },
363
422
  classFullName: TextAnnotation3d.classFullName,
423
+ defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x123").toJSON(),
364
424
  }, imodel);
365
425
  if (textBlock) {
366
426
  const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });
367
427
  elem.setAnnotation(annotation);
368
428
  }
429
+ return elem;
430
+ }
431
+ function insertAnnotationElement(textBlock) {
432
+ const elem = createAnnotationElement(textBlock);
369
433
  return elem.insert();
370
434
  }
371
435
  describe("ElementDrivesTextAnnotation", () => {
@@ -395,21 +459,21 @@ describe("Field evaluation", () => {
395
459
  expect(relationship.sourceId).to.equal(sourceElementId);
396
460
  expect(relationship.targetId).to.equal(targetId);
397
461
  });
398
- function createField(propertyHost, cachedContent, propertyName = "intProp", accessors, jsonAccessors) {
462
+ function createField(propertyHost, cachedContent, propertyName = "intProp", accessors) {
399
463
  if (typeof propertyHost === "string") {
400
464
  propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
401
465
  }
402
466
  return FieldRun.create({
403
- styleOverrides: { fontName: "Karla" },
467
+ styleOverrides: { font: { name: "Karla" } },
404
468
  propertyHost,
405
469
  cachedContent,
406
- propertyPath: { propertyName, accessors, jsonAccessors },
470
+ propertyPath: { propertyName, accessors },
407
471
  });
408
472
  }
409
473
  describe("updateFieldDependencies", () => {
410
474
  it("creates exactly one relationship for each unique source element on insert and update", () => {
411
475
  const source1 = insertTestElement();
412
- const block = TextBlock.create({ styleId: "0x123" });
476
+ const block = TextBlock.create();
413
477
  block.appendRun(createField(source1, "1"));
414
478
  const targetId = insertAnnotationElement(block);
415
479
  imodel.saveChanges();
@@ -437,7 +501,7 @@ describe("Field evaluation", () => {
437
501
  it("deletes stale relationships", () => {
438
502
  const sourceA = insertTestElement();
439
503
  const sourceB = insertTestElement();
440
- const block = TextBlock.create({ styleId: "0x123" });
504
+ const block = TextBlock.create();
441
505
  block.appendRun(createField(sourceA, "A"));
442
506
  block.appendRun(createField(sourceB, "B"));
443
507
  const targetId = insertAnnotationElement(block);
@@ -447,14 +511,16 @@ describe("Field evaluation", () => {
447
511
  expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;
448
512
  const target = imodel.elements.getElement(targetId);
449
513
  const anno = target.getAnnotation();
450
- anno.textBlock.paragraphs[0].runs.shift();
514
+ // Remove the sourceA FieldRun from the first paragraph.
515
+ const p1 = anno.textBlock.children[0];
516
+ p1.children.shift();
451
517
  target.setAnnotation(anno);
452
518
  target.update();
453
519
  imodel.saveChanges();
454
520
  expectNumRelationships(1, targetId);
455
521
  expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;
456
522
  expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;
457
- anno.textBlock.paragraphs.length = 0;
523
+ anno.textBlock.children.length = 0;
458
524
  anno.textBlock.appendRun(createField(sourceA, "A2"));
459
525
  target.setAnnotation(anno);
460
526
  target.update();
@@ -462,9 +528,9 @@ describe("Field evaluation", () => {
462
528
  expectNumRelationships(1, targetId);
463
529
  expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;
464
530
  expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;
465
- anno.textBlock.paragraphs.length = 0;
531
+ anno.textBlock.children.length = 0;
466
532
  anno.textBlock.appendRun(TextRun.create({
467
- styleOverrides: { fontName: "Karla" },
533
+ styleOverrides: { font: { name: "Karla" } },
468
534
  content: "not a field",
469
535
  }));
470
536
  target.setAnnotation(anno);
@@ -476,7 +542,7 @@ describe("Field evaluation", () => {
476
542
  });
477
543
  it("ignores invalid source element Ids", () => {
478
544
  const source = insertTestElement();
479
- const block = TextBlock.create({ styleId: "0x123" });
545
+ const block = TextBlock.create();
480
546
  block.appendRun(createField(Id64.invalid, "invalid"));
481
547
  block.appendRun(createField("0xbaadf00d", "non-existent"));
482
548
  block.appendRun(createField(source, "valid"));
@@ -485,15 +551,26 @@ describe("Field evaluation", () => {
485
551
  expectNumRelationships(1, targetId);
486
552
  });
487
553
  });
488
- function expectText(expected, elemId) {
489
- const elem = imodel.elements.getElement(elemId);
554
+ function expectText(expected, elemId, db) {
555
+ db = db ?? imodel;
556
+ const elem = db.elements.getElement(elemId);
490
557
  const anno = elem.getAnnotation();
491
558
  const actual = anno.textBlock.stringify();
492
559
  expect(actual).to.equal(expected);
493
560
  }
561
+ it("evaluates cachedContent when annotation element is inserted", () => {
562
+ const sourceId = insertTestElement();
563
+ const block = TextBlock.create();
564
+ block.appendRun(createField(sourceId, "initial cached content"));
565
+ expect(block.stringify()).to.equal("initial cached content");
566
+ const targetId = insertAnnotationElement(block);
567
+ imodel.saveChanges();
568
+ const target = imodel.elements.getElement(targetId);
569
+ expect(target.getAnnotation().textBlock.stringify()).to.equal("100");
570
+ });
494
571
  it("updates fields when source element is modified or deleted", () => {
495
572
  const sourceId = insertTestElement();
496
- const block = TextBlock.create({ styleId: "0x123" });
573
+ const block = TextBlock.create();
497
574
  block.appendRun(createField(sourceId, "old value"));
498
575
  ;
499
576
  const targetId = insertAnnotationElement(block);
@@ -516,7 +593,7 @@ describe("Field evaluation", () => {
516
593
  });
517
594
  it("updates fields when source element aspect is modified, deleted, or recreated", () => {
518
595
  const sourceId = insertTestElement();
519
- const block = TextBlock.create({ styleId: "0x123" });
596
+ const block = TextBlock.create();
520
597
  block.appendRun(createField({ elementId: sourceId, schemaName: "Fields", className: "TestAspect" }, "", "aspectProp"));
521
598
  const targetId = insertAnnotationElement(block);
522
599
  imodel.saveChanges();
@@ -544,7 +621,7 @@ describe("Field evaluation", () => {
544
621
  it("updates only fields for specific modified element", () => {
545
622
  const sourceA = insertTestElement();
546
623
  const sourceB = insertTestElement();
547
- const block = TextBlock.create({ styleId: "0x123" });
624
+ const block = TextBlock.create();
548
625
  block.appendRun(createField(sourceA, "A"));
549
626
  block.appendRun(createField(sourceB, "B"));
550
627
  const targetId = insertAnnotationElement(block);
@@ -558,18 +635,153 @@ describe("Field evaluation", () => {
558
635
  });
559
636
  it("supports complex property paths", () => {
560
637
  const sourceId = insertTestElement();
561
- const block = TextBlock.create({ styleId: "0x123" });
638
+ const block = TextBlock.create();
562
639
  block.appendRun(createField(sourceId, "", "outerStruct", ["innerStructs", 1, "doubles", -2]));
563
- block.appendRun(createField(sourceId, "", "jsonProperties", undefined, ["zoo", "birds", 0, "name"]));
564
640
  const targetId = insertAnnotationElement(block);
565
641
  imodel.saveChanges();
566
- expectText("2duck", targetId);
642
+ expectText("2", targetId);
567
643
  const source = imodel.elements.getElement(sourceId);
568
644
  source.outerStruct.innerStructs[1].doubles[3] = 12.5;
569
- source.jsonProperties.zoo.birds[0].name = "parrot";
570
645
  source.update();
571
646
  imodel.saveChanges();
572
- expectText("12.5parrot", targetId);
647
+ expectText("12.5", targetId);
648
+ });
649
+ describe("remapFields", () => {
650
+ let dstIModel;
651
+ let dstModel;
652
+ let dstCategory;
653
+ let dstSourceElementId;
654
+ before(async () => {
655
+ const path = IModelTestUtils.prepareOutputFile("RemapFields", `dst.bim`);
656
+ dstIModel = StandaloneDb.createEmpty(path, { rootSubject: { name: `RemapFields-dst` }, allowEdit: JSON.stringify({ txns: true }) });
657
+ await registerTestSchema(dstIModel);
658
+ // Insert additional unused elements to ensure element Ids differ between src and dst iModels
659
+ for (let i = 0; i < 3; i++) {
660
+ IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);
661
+ }
662
+ const modelAndElement = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);
663
+ expect(modelAndElement[0]).to.equal(modelAndElement[1]);
664
+ dstModel = modelAndElement[1];
665
+ dstCategory = SpatialCategory.insert(dstIModel, StandaloneDb.dictionaryId, `dstCat`, new SubCategoryAppearance());
666
+ dstSourceElementId = createTestElement(dstIModel, dstModel, dstCategory, {
667
+ intProp: 200,
668
+ point: { x: -1, y: -2, z: -3 },
669
+ strings: ["x", "y", "z"],
670
+ intEnum: 2,
671
+ }, 1234);
672
+ await dstIModel.fonts.embedFontFile({
673
+ file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile("Karla-Regular.ttf"))
674
+ });
675
+ expect(dstCategory).not.to.equal(category);
676
+ expect(dstModel).not.to.equal(model);
677
+ expect(dstSourceElementId).not.to.equal(sourceElementId);
678
+ });
679
+ after(() => {
680
+ dstIModel.close();
681
+ });
682
+ function getTextBlockJson() {
683
+ return {
684
+ children: [{
685
+ children: [{
686
+ type: "field",
687
+ propertyHost: {
688
+ elementId: sourceElementId,
689
+ schemaName: "Fields",
690
+ className: "TestElement",
691
+ },
692
+ propertyPath: { propertyName: "intProp" },
693
+ cachedContent: "intProp",
694
+ }, {
695
+ type: "field",
696
+ propertyHost: {
697
+ elementId: category,
698
+ schemaName: "BisCore",
699
+ className: "Element",
700
+ },
701
+ propertyPath: { propertyName: "CodeValue" },
702
+ cachedContent: "CodeValue"
703
+ }],
704
+ }],
705
+ };
706
+ }
707
+ function expectHostIds(elem, host1, host2) {
708
+ const anno = elem.getAnnotation();
709
+ expect(anno.textBlock.children.length).to.equal(1);
710
+ const para = anno.textBlock.children[0];
711
+ expect(para.children.length).to.equal(2);
712
+ expect(para.children.every((x) => x.type === "field"));
713
+ const field1 = para.children[0];
714
+ expect(field1.propertyHost.elementId).to.equal(host1);
715
+ const field2 = para.children[1];
716
+ expect(field2.propertyHost.elementId).to.equal(host2);
717
+ }
718
+ it("remaps field hosts", () => {
719
+ const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));
720
+ expectHostIds(elem, sourceElementId, category);
721
+ const context = new IModelElementCloneContext(imodel, dstIModel);
722
+ context.remapElement(sourceElementId, dstSourceElementId);
723
+ context.remapElement(category, dstCategory);
724
+ ElementDrivesTextAnnotation.remapFields(elem, context);
725
+ expectHostIds(elem, dstSourceElementId, dstCategory);
726
+ });
727
+ it("invalidates field host if source element not remapped", () => {
728
+ const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));
729
+ expectHostIds(elem, sourceElementId, category);
730
+ const context = new IModelElementCloneContext(imodel, dstIModel);
731
+ ElementDrivesTextAnnotation.remapFields(elem, context);
732
+ expectHostIds(elem, Id64.invalid, Id64.invalid);
733
+ });
734
+ });
735
+ });
736
+ describe("Format Validation", () => {
737
+ it("validates formatting options for string property type", () => {
738
+ // Create a FieldRun with string property type and some format options
739
+ const fieldRun = FieldRun.create({
740
+ propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
741
+ propertyPath: { propertyName: "strings", accessors: [0] },
742
+ cachedContent: "oldValue",
743
+ formatOptions: {
744
+ case: "upper",
745
+ prefix: "Value: ",
746
+ suffix: "!"
747
+ }
748
+ });
749
+ // Context returns a string value for the property
750
+ const context = {
751
+ hostElementId: sourceElementId,
752
+ getProperty: () => { return { value: "abc", type: "string" }; },
753
+ };
754
+ // Update the field and check the result
755
+ const updated = updateField(fieldRun, context);
756
+ // The formatted value should be uppercased and have prefix/suffix applied
757
+ expect(updated).to.be.true;
758
+ expect(fieldRun.cachedContent).to.equal("Value: ABC!");
759
+ });
760
+ it("validates formatting options for datetime objects", function () {
761
+ if (!isIntlSupported()) {
762
+ this.skip();
763
+ }
764
+ const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
765
+ const fieldRun = FieldRun.create({
766
+ propertyHost,
767
+ propertyPath: { propertyName: "datetime" },
768
+ cachedContent: "oldval",
769
+ formatOptions: {
770
+ dateTime: {
771
+ formatOptions: {
772
+ month: "short",
773
+ day: "2-digit",
774
+ year: "numeric",
775
+ timeZone: "UTC"
776
+ },
777
+ locale: "en-US",
778
+ },
779
+ },
780
+ });
781
+ const context = createUpdateContext(sourceElementId, imodel, false);
782
+ const updated = updateField(fieldRun, context);
783
+ expect(updated).to.be.true;
784
+ expect(fieldRun.cachedContent).to.equal("Aug 28, 2025");
573
785
  });
574
786
  });
575
787
  });