@itwin/core-backend 3.4.0-dev.2 → 3.4.0-dev.20

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 (55) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  3. package/lib/cjs/BackendHubAccess.js.map +1 -1
  4. package/lib/cjs/CodeService.d.ts +404 -0
  5. package/lib/cjs/CodeService.d.ts.map +1 -0
  6. package/lib/cjs/CodeService.js +62 -0
  7. package/lib/cjs/CodeService.js.map +1 -0
  8. package/lib/cjs/CodeSpecs.js.map +1 -1
  9. package/lib/cjs/Element.d.ts.map +1 -1
  10. package/lib/cjs/Element.js +4 -0
  11. package/lib/cjs/Element.js.map +1 -1
  12. package/lib/cjs/ElementTreeWalker.d.ts +163 -0
  13. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -0
  14. package/lib/cjs/ElementTreeWalker.js +410 -0
  15. package/lib/cjs/ElementTreeWalker.js.map +1 -0
  16. package/lib/cjs/GeoCoordConfig.d.ts +7 -1
  17. package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
  18. package/lib/cjs/GeoCoordConfig.js +15 -6
  19. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  20. package/lib/cjs/HubMock.d.ts.map +1 -1
  21. package/lib/cjs/HubMock.js +7 -7
  22. package/lib/cjs/HubMock.js.map +1 -1
  23. package/lib/cjs/IModelDb.d.ts +17 -4
  24. package/lib/cjs/IModelDb.d.ts.map +1 -1
  25. package/lib/cjs/IModelDb.js +53 -11
  26. package/lib/cjs/IModelDb.js.map +1 -1
  27. package/lib/cjs/IModelHost.d.ts.map +1 -1
  28. package/lib/cjs/IModelHost.js +3 -1
  29. package/lib/cjs/IModelHost.js.map +1 -1
  30. package/lib/cjs/IModelSchemaLoader.d.ts.map +1 -1
  31. package/lib/cjs/IModelSchemaLoader.js +10 -18
  32. package/lib/cjs/IModelSchemaLoader.js.map +1 -1
  33. package/lib/cjs/LocalHub.js +1 -1
  34. package/lib/cjs/LocalHub.js.map +1 -1
  35. package/lib/cjs/SQLiteDb.d.ts +62 -40
  36. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  37. package/lib/cjs/SQLiteDb.js +57 -40
  38. package/lib/cjs/SQLiteDb.js.map +1 -1
  39. package/lib/cjs/SqliteStatement.d.ts +14 -2
  40. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  41. package/lib/cjs/SqliteStatement.js +50 -28
  42. package/lib/cjs/SqliteStatement.js.map +1 -1
  43. package/lib/cjs/TxnManager.js +1 -1
  44. package/lib/cjs/TxnManager.js.map +1 -1
  45. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +10 -0
  46. package/lib/cjs/assets/Settings/backend.setting.json5 +1 -1
  47. package/lib/cjs/core-backend.d.ts +3 -0
  48. package/lib/cjs/core-backend.d.ts.map +1 -1
  49. package/lib/cjs/core-backend.js +3 -0
  50. package/lib/cjs/core-backend.js.map +1 -1
  51. package/lib/cjs/workspace/Workspace.d.ts +7 -3
  52. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  53. package/lib/cjs/workspace/Workspace.js +17 -18
  54. package/lib/cjs/workspace/Workspace.js.map +1 -1
  55. package/package.json +15 -15
@@ -16,11 +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");
23
+ const Element_1 = require("./Element");
22
24
  const ElementAspect_1 = require("./ElementAspect");
23
25
  const ElementGraphics_1 = require("./ElementGraphics");
26
+ const GeoCoordConfig_1 = require("./GeoCoordConfig");
24
27
  const IModelHost_1 = require("./IModelHost");
25
28
  const IModelJsFs_1 = require("./IModelJsFs");
26
29
  const IpcHost_1 = require("./IpcHost");
@@ -32,7 +35,7 @@ const TxnManager_1 = require("./TxnManager");
32
35
  const ViewDefinition_1 = require("./ViewDefinition");
33
36
  const Settings_1 = require("./workspace/Settings");
34
37
  const Workspace_1 = require("./workspace/Workspace");
35
- const GeoCoordConfig_1 = require("./GeoCoordConfig");
38
+ // spell:ignore fontid fontmap
36
39
  const loggerCategory = BackendLoggerCategory_1.BackendLoggerCategory.IModelDb;
37
40
  /** A null-implementation of LockControl that does not attempt to limit access between briefcases. This relies on change-merging to resolve conflicts. */
38
41
  class NoLocks {
@@ -119,6 +122,8 @@ class IModelDb extends core_common_1.IModel {
119
122
  });
120
123
  }
121
124
  }
125
+ /** @alpha */
126
+ get codeService() { return this._codeService; }
122
127
  /**
123
128
  * Get the [[LockControl]] for this iModel.
124
129
  * @beta
@@ -130,7 +135,7 @@ class IModelDb extends core_common_1.IModel {
130
135
  */
131
136
  get workspace() {
132
137
  if (undefined === this._workspace)
133
- this._workspace = new Workspace_1.ITwinWorkspace(new IModelSettings(), IModelHost_1.IModelHost.appWorkspace);
138
+ this._workspace = new Workspace_1.ITwinWorkspace(new IModelSettings());
134
139
  return this._workspace;
135
140
  }
136
141
  /** Acquire the exclusive schema lock on this iModel.
@@ -185,7 +190,7 @@ class IModelDb extends core_common_1.IModel {
185
190
  get pathName() { return this.nativeDb.getFilePath(); }
186
191
  /** Close this IModel, if it is currently open. */
187
192
  close() {
188
- var _a;
193
+ var _a, _b;
189
194
  if (!this.isOpen)
190
195
  return; // don't continue if already closed
191
196
  this.beforeClose();
@@ -193,6 +198,8 @@ class IModelDb extends core_common_1.IModel {
193
198
  (_a = this._workspace) === null || _a === void 0 ? void 0 : _a.close();
194
199
  this.locks.close();
195
200
  this._locks = undefined;
201
+ (_b = this._codeService) === null || _b === void 0 ? void 0 : _b.close();
202
+ this._codeService = undefined;
196
203
  this.nativeDb.closeIModel();
197
204
  this._nativeDb = undefined; // the underlying nativeDb has been freed by closeIModel
198
205
  }
@@ -1289,11 +1296,14 @@ IModelDb._settingPropNamespace = "settings";
1289
1296
  * @throws [[IModelError]] if the element is not found or cannot be loaded.
1290
1297
  * @see tryGetElementProps
1291
1298
  */
1292
- getElementProps(elementId) {
1293
- const elementProps = this.tryGetElementProps(elementId);
1294
- if (undefined === elementProps)
1295
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `reading element=${elementId}`);
1296
- return elementProps;
1299
+ getElementProps(props) {
1300
+ if (typeof props === "string") {
1301
+ props = core_bentley_1.Id64.isId64(props) ? { id: props } : { federationGuid: props };
1302
+ }
1303
+ else if (props instanceof core_common_1.Code) {
1304
+ props = { code: props };
1305
+ }
1306
+ return this._iModel.nativeDb.getElement(props);
1297
1307
  }
1298
1308
  /** Get properties of an Element by Id, FederationGuid, or Code
1299
1309
  * @returns The properties of the element or `undefined` if the element is not found.
@@ -1335,6 +1345,8 @@ IModelDb._settingPropNamespace = "settings";
1335
1345
  elementId = core_bentley_1.Id64.isId64(elementId) ? { id: elementId } : { federationGuid: elementId };
1336
1346
  else if (elementId instanceof core_common_1.Code)
1337
1347
  elementId = { code: elementId };
1348
+ else
1349
+ elementId.onlyBaseProperties = false; // we must load all properties to construct the element.
1338
1350
  const elementProps = this.tryGetElementJson(elementId);
1339
1351
  if (undefined === elementProps)
1340
1352
  return undefined; // no Element with that elementId found
@@ -1395,7 +1407,8 @@ IModelDb._settingPropNamespace = "settings";
1395
1407
  return elProps.id = this._iModel.nativeDb.insertElement(elProps);
1396
1408
  }
1397
1409
  catch (err) {
1398
- throw new core_common_1.IModelError(err.errorNumber, `insertElement with class=${elProps.classFullName}: ${err.message}`);
1410
+ err.message = `error inserting element: ${err.message}`;
1411
+ throw err;
1399
1412
  }
1400
1413
  }
1401
1414
  /** Update some properties of an existing element.
@@ -1410,7 +1423,8 @@ IModelDb._settingPropNamespace = "settings";
1410
1423
  this._iModel.nativeDb.updateElement(elProps);
1411
1424
  }
1412
1425
  catch (err) {
1413
- throw new core_common_1.IModelError(err.errorNumber, `Error updating element [${err.message}], id:${elProps.id}`);
1426
+ err.message = `error updating element: ${err.message}`;
1427
+ throw err;
1414
1428
  }
1415
1429
  }
1416
1430
  /** Delete one or more elements from this iModel.
@@ -1425,7 +1439,8 @@ IModelDb._settingPropNamespace = "settings";
1425
1439
  iModel.nativeDb.deleteElement(id);
1426
1440
  }
1427
1441
  catch (err) {
1428
- throw new core_common_1.IModelError(err.errorNumber, `Error deleting element [${err.message}], id:${id}`);
1442
+ err.message = `error deleting element: ${err.message}`;
1443
+ throw err;
1429
1444
  }
1430
1445
  });
1431
1446
  }
@@ -1520,6 +1535,20 @@ IModelDb._settingPropNamespace = "settings";
1520
1535
  return childIds;
1521
1536
  });
1522
1537
  }
1538
+ /** Query for the parent of the specified element.
1539
+ * @param elementId The element to check for a parent
1540
+ * @returns The identifier of the element's parent or undefined if the element has no parent
1541
+ * @throws [[IModelError]] if the element does not exist
1542
+ */
1543
+ queryParent(elementId) {
1544
+ return this._iModel.withPreparedStatement(`select parent.id from ${Element_1.Element.classFullName} where ecinstanceid=?`, (stmt) => {
1545
+ stmt.bindId(1, elementId);
1546
+ if (stmt.step() !== core_bentley_1.DbResult.BE_SQLITE_ROW)
1547
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `Element=${elementId}`);
1548
+ const value = stmt.getValue(0);
1549
+ return value.isNull ? undefined : value.getId();
1550
+ });
1551
+ }
1523
1552
  /** Returns true if the specified Element has a sub-model.
1524
1553
  * @see [[IModelDb.Models.getSubModel]]
1525
1554
  */
@@ -1950,6 +1979,17 @@ class BriefcaseDb extends IModelDb {
1950
1979
  const openMode = args.readonly ? core_bentley_1.OpenMode.Readonly : core_bentley_1.OpenMode.ReadWrite;
1951
1980
  const nativeDb = this.openDgnDb(file, openMode, undefined, args);
1952
1981
  const briefcaseDb = new BriefcaseDb({ nativeDb, key: (_a = file.key) !== null && _a !== void 0 ? _a : core_bentley_1.Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });
1982
+ if (openMode === core_bentley_1.OpenMode.ReadWrite && CodeService_1.CodeService.createForBriefcase) {
1983
+ try {
1984
+ const codeService = CodeService_1.CodeService.createForBriefcase(briefcaseDb);
1985
+ briefcaseDb._codeService = codeService;
1986
+ this.onCodeServiceCreated.raiseEvent(codeService);
1987
+ }
1988
+ catch (e) {
1989
+ if (e.errorId !== "NoCodeIndex") // no code index means iModel isn't enforcing codes.
1990
+ throw e;
1991
+ }
1992
+ }
1953
1993
  BriefcaseManager_1.BriefcaseManager.logUsage(briefcaseDb);
1954
1994
  this.onOpened.raiseEvent(briefcaseDb, args);
1955
1995
  return briefcaseDb;
@@ -2007,6 +2047,8 @@ BriefcaseDb.onOpen = new core_bentley_1.BeEvent();
2007
2047
  * ```
2008
2048
  */
2009
2049
  BriefcaseDb.onOpened = new core_bentley_1.BeEvent();
2050
+ /** @alpha */
2051
+ BriefcaseDb.onCodeServiceCreated = new core_bentley_1.BeEvent();
2010
2052
  /** Used to reattach Daemon from a user's accessToken for V2 checkpoints.
2011
2053
  * @note Reattach only happens if the previous access token either has expired or is about to expire within an application-supplied safety duration.
2012
2054
  */