@itwin/core-backend 3.4.0-dev.9 → 3.4.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 (130) hide show
  1. package/CHANGELOG.md +90 -1
  2. package/lib/cjs/AliCloudStorageService.d.ts +8 -2
  3. package/lib/cjs/AliCloudStorageService.d.ts.map +1 -1
  4. package/lib/cjs/AliCloudStorageService.js +4 -1
  5. package/lib/cjs/AliCloudStorageService.js.map +1 -1
  6. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  7. package/lib/cjs/BackendHubAccess.js.map +1 -1
  8. package/lib/cjs/BackendLoggerCategory.d.ts +9 -5
  9. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  10. package/lib/cjs/BackendLoggerCategory.js +9 -5
  11. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  12. package/lib/cjs/ChangedElementsDb.d.ts +1 -0
  13. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -1
  14. package/lib/cjs/ChangedElementsDb.js +2 -2
  15. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  16. package/lib/cjs/CheckpointManager.d.ts +2 -4
  17. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  18. package/lib/cjs/CheckpointManager.js +8 -19
  19. package/lib/cjs/CheckpointManager.js.map +1 -1
  20. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  21. package/lib/cjs/ClassRegistry.js +3 -1
  22. package/lib/cjs/ClassRegistry.js.map +1 -1
  23. package/lib/cjs/CloudSqlite.d.ts +350 -0
  24. package/lib/cjs/CloudSqlite.d.ts.map +1 -0
  25. package/lib/cjs/CloudSqlite.js +152 -0
  26. package/lib/cjs/CloudSqlite.js.map +1 -0
  27. package/lib/cjs/CloudStorageBackend.d.ts +16 -4
  28. package/lib/cjs/CloudStorageBackend.d.ts.map +1 -1
  29. package/lib/cjs/CloudStorageBackend.js +12 -3
  30. package/lib/cjs/CloudStorageBackend.js.map +1 -1
  31. package/lib/cjs/CodeService.d.ts +397 -0
  32. package/lib/cjs/CodeService.d.ts.map +1 -0
  33. package/lib/cjs/CodeService.js +64 -0
  34. package/lib/cjs/CodeService.js.map +1 -0
  35. package/lib/cjs/CodeSpecs.js.map +1 -1
  36. package/lib/cjs/CustomViewState3dCreator.d.ts.map +1 -1
  37. package/lib/cjs/CustomViewState3dCreator.js +15 -0
  38. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  39. package/lib/cjs/DevTools.d.ts.map +1 -1
  40. package/lib/cjs/DevTools.js.map +1 -1
  41. package/lib/cjs/Element.d.ts.map +1 -1
  42. package/lib/cjs/Element.js +20 -17
  43. package/lib/cjs/Element.js.map +1 -1
  44. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  45. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  46. package/lib/cjs/ExportGraphics.d.ts +9 -9
  47. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  48. package/lib/cjs/ExportGraphics.js.map +1 -1
  49. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  50. package/lib/cjs/ExternalSource.js.map +1 -1
  51. package/lib/cjs/GeoCoordConfig.d.ts +7 -1
  52. package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
  53. package/lib/cjs/GeoCoordConfig.js +16 -7
  54. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  55. package/lib/cjs/GeometrySummary.js +1 -1
  56. package/lib/cjs/GeometrySummary.js.map +1 -1
  57. package/lib/cjs/HubMock.d.ts.map +1 -1
  58. package/lib/cjs/HubMock.js +7 -7
  59. package/lib/cjs/HubMock.js.map +1 -1
  60. package/lib/cjs/IModelDb.d.ts +18 -5
  61. package/lib/cjs/IModelDb.d.ts.map +1 -1
  62. package/lib/cjs/IModelDb.js +63 -25
  63. package/lib/cjs/IModelDb.js.map +1 -1
  64. package/lib/cjs/IModelHost.d.ts +20 -6
  65. package/lib/cjs/IModelHost.d.ts.map +1 -1
  66. package/lib/cjs/IModelHost.js +56 -22
  67. package/lib/cjs/IModelHost.js.map +1 -1
  68. package/lib/cjs/IModelJsFs.d.ts +1 -1
  69. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  70. package/lib/cjs/IModelJsFs.js +2 -2
  71. package/lib/cjs/IModelJsFs.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/Material.d.ts +3 -1
  75. package/lib/cjs/Material.d.ts.map +1 -1
  76. package/lib/cjs/Material.js +3 -1
  77. package/lib/cjs/Material.js.map +1 -1
  78. package/lib/cjs/Model.d.ts.map +1 -1
  79. package/lib/cjs/Model.js +5 -2
  80. package/lib/cjs/Model.js.map +1 -1
  81. package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
  82. package/lib/cjs/PromiseMemoizer.js +10 -4
  83. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  84. package/lib/cjs/PropertyStore.d.ts +133 -0
  85. package/lib/cjs/PropertyStore.d.ts.map +1 -0
  86. package/lib/cjs/PropertyStore.js +12 -0
  87. package/lib/cjs/PropertyStore.js.map +1 -0
  88. package/lib/cjs/SQLiteDb.d.ts +110 -64
  89. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  90. package/lib/cjs/SQLiteDb.js +61 -58
  91. package/lib/cjs/SQLiteDb.js.map +1 -1
  92. package/lib/cjs/SqliteStatement.d.ts +14 -2
  93. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  94. package/lib/cjs/SqliteStatement.js +50 -28
  95. package/lib/cjs/SqliteStatement.js.map +1 -1
  96. package/lib/cjs/TileStorage.d.ts +19 -0
  97. package/lib/cjs/TileStorage.d.ts.map +1 -0
  98. package/lib/cjs/TileStorage.js +91 -0
  99. package/lib/cjs/TileStorage.js.map +1 -0
  100. package/lib/cjs/TxnManager.d.ts.map +1 -1
  101. package/lib/cjs/TxnManager.js +5 -2
  102. package/lib/cjs/TxnManager.js.map +1 -1
  103. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  104. package/lib/cjs/ViewDefinition.js +8 -2
  105. package/lib/cjs/ViewDefinition.js.map +1 -1
  106. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +10 -0
  107. package/lib/cjs/assets/Settings/backend.setting.json5 +1 -1
  108. package/lib/cjs/core-backend.d.ts +9 -2
  109. package/lib/cjs/core-backend.d.ts.map +1 -1
  110. package/lib/cjs/core-backend.js +10 -3
  111. package/lib/cjs/core-backend.js.map +1 -1
  112. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +2 -0
  113. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -1
  114. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +11 -2
  115. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  116. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  117. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +3 -0
  118. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  119. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  120. package/lib/cjs/workspace/Settings.js +4 -1
  121. package/lib/cjs/workspace/Settings.js.map +1 -1
  122. package/lib/cjs/workspace/Workspace.d.ts +31 -18
  123. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  124. package/lib/cjs/workspace/Workspace.js +34 -25
  125. package/lib/cjs/workspace/Workspace.js.map +1 -1
  126. package/package.json +18 -19
  127. package/lib/cjs/IModelSchemaLoader.d.ts +0 -26
  128. package/lib/cjs/IModelSchemaLoader.d.ts.map +0 -1
  129. package/lib/cjs/IModelSchemaLoader.js +0 -122
  130. package/lib/cjs/IModelSchemaLoader.js.map +0 -1
@@ -16,12 +16,14 @@ const BackendLoggerCategory_1 = require("./BackendLoggerCategory");
16
16
  const BriefcaseManager_1 = require("./BriefcaseManager");
17
17
  const CheckpointManager_1 = require("./CheckpointManager");
18
18
  const ClassRegistry_1 = require("./ClassRegistry");
19
+ const CodeService_1 = require("./CodeService");
19
20
  const CodeSpecs_1 = require("./CodeSpecs");
20
21
  const ConcurrentQuery_1 = require("./ConcurrentQuery");
21
22
  const ECSqlStatement_1 = require("./ECSqlStatement");
22
23
  const Element_1 = require("./Element");
23
24
  const ElementAspect_1 = require("./ElementAspect");
24
25
  const ElementGraphics_1 = require("./ElementGraphics");
26
+ const GeoCoordConfig_1 = require("./GeoCoordConfig");
25
27
  const IModelHost_1 = require("./IModelHost");
26
28
  const IModelJsFs_1 = require("./IModelJsFs");
27
29
  const IpcHost_1 = require("./IpcHost");
@@ -33,7 +35,7 @@ const TxnManager_1 = require("./TxnManager");
33
35
  const ViewDefinition_1 = require("./ViewDefinition");
34
36
  const Settings_1 = require("./workspace/Settings");
35
37
  const Workspace_1 = require("./workspace/Workspace");
36
- const GeoCoordConfig_1 = require("./GeoCoordConfig");
38
+ // spell:ignore fontid fontmap
37
39
  const loggerCategory = BackendLoggerCategory_1.BackendLoggerCategory.IModelDb;
38
40
  /** A null-implementation of LockControl that does not attempt to limit access between briefcases. This relies on change-merging to resolve conflicts. */
39
41
  class NoLocks {
@@ -120,6 +122,8 @@ class IModelDb extends core_common_1.IModel {
120
122
  });
121
123
  }
122
124
  }
125
+ /** @alpha */
126
+ get codeService() { return this._codeService; }
123
127
  /**
124
128
  * Get the [[LockControl]] for this iModel.
125
129
  * @beta
@@ -131,7 +135,7 @@ class IModelDb extends core_common_1.IModel {
131
135
  */
132
136
  get workspace() {
133
137
  if (undefined === this._workspace)
134
- this._workspace = new Workspace_1.ITwinWorkspace(new IModelSettings(), IModelHost_1.IModelHost.appWorkspace);
138
+ this._workspace = new Workspace_1.ITwinWorkspace(new IModelSettings());
135
139
  return this._workspace;
136
140
  }
137
141
  /** Acquire the exclusive schema lock on this iModel.
@@ -186,7 +190,7 @@ class IModelDb extends core_common_1.IModel {
186
190
  get pathName() { return this.nativeDb.getFilePath(); }
187
191
  /** Close this IModel, if it is currently open. */
188
192
  close() {
189
- var _a;
193
+ var _a, _b;
190
194
  if (!this.isOpen)
191
195
  return; // don't continue if already closed
192
196
  this.beforeClose();
@@ -194,6 +198,8 @@ class IModelDb extends core_common_1.IModel {
194
198
  (_a = this._workspace) === null || _a === void 0 ? void 0 : _a.close();
195
199
  this.locks.close();
196
200
  this._locks = undefined;
201
+ (_b = this._codeService) === null || _b === void 0 ? void 0 : _b.close();
202
+ this._codeService = undefined;
197
203
  this.nativeDb.closeIModel();
198
204
  this._nativeDb = undefined; // the underlying nativeDb has been freed by closeIModel
199
205
  }
@@ -740,9 +746,13 @@ class IModelDb extends core_common_1.IModel {
740
746
  return this._classMetaDataRegistry;
741
747
  }
742
748
  /** Get the linkTableRelationships for this IModel */
743
- get relationships() { return this._relationships || (this._relationships = new Relationship_1.Relationships(this)); }
749
+ get relationships() {
750
+ return this._relationships || (this._relationships = new Relationship_1.Relationships(this));
751
+ }
744
752
  /** Get the CodeSpecs in this IModel. */
745
- get codeSpecs() { return (this._codeSpecs !== undefined) ? this._codeSpecs : (this._codeSpecs = new CodeSpecs_1.CodeSpecs(this)); }
753
+ get codeSpecs() {
754
+ return (this._codeSpecs !== undefined) ? this._codeSpecs : (this._codeSpecs = new CodeSpecs_1.CodeSpecs(this));
755
+ }
746
756
  /** @internal */
747
757
  insertCodeSpec(codeSpec) {
748
758
  return this.nativeDb.insertCodeSpec(codeSpec.name, codeSpec.properties);
@@ -834,6 +844,14 @@ class IModelDb extends core_common_1.IModel {
834
844
  if (metaData.baseClasses !== undefined && metaData.baseClasses.length > 0)
835
845
  metaData.baseClasses.forEach((baseClassName) => this.loadMetaData(baseClassName));
836
846
  }
847
+ /** Returns the full schema for the input name.
848
+ * @param name The name of the schema e.g. 'BisCore'
849
+ * @returns The SchemaProps for the requested schema
850
+ * @throws if the schema can not be found or loaded.
851
+ */
852
+ getSchemaProps(name) {
853
+ return this.nativeDb.getSchemaProps(name);
854
+ }
837
855
  /** Query if this iModel contains the definition of the specified class.
838
856
  * @param classFullName The full name of the class, for example, SomeSchema:SomeClass
839
857
  * @returns true if the iModel contains the class definition or false if not.
@@ -1290,11 +1308,14 @@ IModelDb._settingPropNamespace = "settings";
1290
1308
  * @throws [[IModelError]] if the element is not found or cannot be loaded.
1291
1309
  * @see tryGetElementProps
1292
1310
  */
1293
- getElementProps(elementId) {
1294
- const elementProps = this.tryGetElementProps(elementId);
1295
- if (undefined === elementProps)
1296
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `reading element=${elementId}`);
1297
- return elementProps;
1311
+ getElementProps(props) {
1312
+ if (typeof props === "string") {
1313
+ props = core_bentley_1.Id64.isId64(props) ? { id: props } : { federationGuid: props };
1314
+ }
1315
+ else if (props instanceof core_common_1.Code) {
1316
+ props = { code: props };
1317
+ }
1318
+ return this._iModel.nativeDb.getElement(props);
1298
1319
  }
1299
1320
  /** Get properties of an Element by Id, FederationGuid, or Code
1300
1321
  * @returns The properties of the element or `undefined` if the element is not found.
@@ -1336,6 +1357,8 @@ IModelDb._settingPropNamespace = "settings";
1336
1357
  elementId = core_bentley_1.Id64.isId64(elementId) ? { id: elementId } : { federationGuid: elementId };
1337
1358
  else if (elementId instanceof core_common_1.Code)
1338
1359
  elementId = { code: elementId };
1360
+ else
1361
+ elementId.onlyBaseProperties = false; // we must load all properties to construct the element.
1339
1362
  const elementProps = this.tryGetElementJson(elementId);
1340
1363
  if (undefined === elementProps)
1341
1364
  return undefined; // no Element with that elementId found
@@ -1396,7 +1419,8 @@ IModelDb._settingPropNamespace = "settings";
1396
1419
  return elProps.id = this._iModel.nativeDb.insertElement(elProps);
1397
1420
  }
1398
1421
  catch (err) {
1399
- throw new core_common_1.IModelError(err.errorNumber, `insertElement with class=${elProps.classFullName}: ${err.message}`);
1422
+ err.message = `error inserting element: ${err.message}`;
1423
+ throw err;
1400
1424
  }
1401
1425
  }
1402
1426
  /** Update some properties of an existing element.
@@ -1411,7 +1435,8 @@ IModelDb._settingPropNamespace = "settings";
1411
1435
  this._iModel.nativeDb.updateElement(elProps);
1412
1436
  }
1413
1437
  catch (err) {
1414
- throw new core_common_1.IModelError(err.errorNumber, `Error updating element [${err.message}], id:${elProps.id}`);
1438
+ err.message = `error updating element: ${err.message}`;
1439
+ throw err;
1415
1440
  }
1416
1441
  }
1417
1442
  /** Delete one or more elements from this iModel.
@@ -1426,7 +1451,8 @@ IModelDb._settingPropNamespace = "settings";
1426
1451
  iModel.nativeDb.deleteElement(id);
1427
1452
  }
1428
1453
  catch (err) {
1429
- throw new core_common_1.IModelError(err.errorNumber, `Error deleting element [${err.message}], id:${id}`);
1454
+ err.message = `error deleting element: ${err.message}`;
1455
+ throw err;
1430
1456
  }
1431
1457
  });
1432
1458
  }
@@ -1448,9 +1474,10 @@ IModelDb._settingPropNamespace = "settings";
1448
1474
  const usedIdSet = usageInfo.usedIds ? core_bentley_1.Id64.toIdSet(usageInfo.usedIds) : new Set();
1449
1475
  const deleteIfUnused = (ids, used) => {
1450
1476
  if (ids) {
1451
- ids.forEach((id) => { if (!used.has(id)) {
1452
- this._iModel.elements.deleteElement(id);
1453
- } });
1477
+ ids.forEach((id) => {
1478
+ if (!used.has(id))
1479
+ this._iModel.elements.deleteElement(id);
1480
+ });
1454
1481
  }
1455
1482
  };
1456
1483
  try {
@@ -1476,15 +1503,12 @@ IModelDb._settingPropNamespace = "settings";
1476
1503
  if (usageInfo.viewDefinitionIds) {
1477
1504
  // take another pass in case a deleted ViewDefinition was the only usage of these view-related DefinitionElements
1478
1505
  let viewRelatedIds = [];
1479
- if (usageInfo.displayStyleIds) {
1506
+ if (usageInfo.displayStyleIds)
1480
1507
  viewRelatedIds = viewRelatedIds.concat(usageInfo.displayStyleIds.filter((id) => usedIdSet.has(id)));
1481
- }
1482
- if (usageInfo.categorySelectorIds) {
1508
+ if (usageInfo.categorySelectorIds)
1483
1509
  viewRelatedIds = viewRelatedIds.concat(usageInfo.categorySelectorIds.filter((id) => usedIdSet.has(id)));
1484
- }
1485
- if (usageInfo.modelSelectorIds) {
1510
+ if (usageInfo.modelSelectorIds)
1486
1511
  viewRelatedIds = viewRelatedIds.concat(usageInfo.modelSelectorIds.filter((id) => usedIdSet.has(id)));
1487
- }
1488
1512
  if (viewRelatedIds.length > 0) {
1489
1513
  const viewRelatedUsageInfo = this._iModel.nativeDb.queryDefinitionElementUsage(viewRelatedIds);
1490
1514
  if (viewRelatedUsageInfo) {
@@ -1498,9 +1522,10 @@ IModelDb._settingPropNamespace = "settings";
1498
1522
  finally {
1499
1523
  this._iModel.nativeDb.endPurgeOperation();
1500
1524
  }
1501
- viewRelatedIds.forEach((id) => { if (!usedViewRelatedIdSet.has(id)) {
1502
- usedIdSet.delete(id);
1503
- } });
1525
+ viewRelatedIds.forEach((id) => {
1526
+ if (!usedViewRelatedIdSet.has(id))
1527
+ usedIdSet.delete(id);
1528
+ });
1504
1529
  }
1505
1530
  }
1506
1531
  }
@@ -1965,6 +1990,17 @@ class BriefcaseDb extends IModelDb {
1965
1990
  const openMode = args.readonly ? core_bentley_1.OpenMode.Readonly : core_bentley_1.OpenMode.ReadWrite;
1966
1991
  const nativeDb = this.openDgnDb(file, openMode, undefined, args);
1967
1992
  const briefcaseDb = new BriefcaseDb({ nativeDb, key: (_a = file.key) !== null && _a !== void 0 ? _a : core_bentley_1.Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });
1993
+ if (openMode === core_bentley_1.OpenMode.ReadWrite && CodeService_1.CodeService.createForIModel) {
1994
+ try {
1995
+ const codeService = CodeService_1.CodeService.createForIModel(briefcaseDb);
1996
+ briefcaseDb._codeService = codeService;
1997
+ this.onCodeServiceCreated.raiseEvent(codeService);
1998
+ }
1999
+ catch (e) {
2000
+ if (e.errorId !== "NoCodeIndex") // no code index means iModel isn't enforcing codes.
2001
+ throw e;
2002
+ }
2003
+ }
1968
2004
  BriefcaseManager_1.BriefcaseManager.logUsage(briefcaseDb);
1969
2005
  this.onOpened.raiseEvent(briefcaseDb, args);
1970
2006
  return briefcaseDb;
@@ -2022,6 +2058,8 @@ BriefcaseDb.onOpen = new core_bentley_1.BeEvent();
2022
2058
  * ```
2023
2059
  */
2024
2060
  BriefcaseDb.onOpened = new core_bentley_1.BeEvent();
2061
+ /** @alpha */
2062
+ BriefcaseDb.onCodeServiceCreated = new core_bentley_1.BeEvent();
2025
2063
  /** Used to reattach Daemon from a user's accessToken for V2 checkpoints.
2026
2064
  * @note Reattach only happens if the previous access token either has expired or is about to expire within an application-supplied safety duration.
2027
2065
  */