@itwin/core-backend 5.0.0-dev.40 → 5.0.0-dev.49

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 (50) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/lib/cjs/BlobContainerService.d.ts +4 -4
  3. package/lib/cjs/BlobContainerService.d.ts.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  6. package/lib/cjs/ChangeSummaryManager.js +86 -18
  7. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  8. package/lib/cjs/ChangedElementsDb.d.ts +3 -3
  9. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.d.ts +3 -3
  13. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.js +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  16. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  17. package/lib/cjs/CheckpointManager.js +2 -0
  18. package/lib/cjs/CheckpointManager.js.map +1 -1
  19. package/lib/cjs/ECDb.d.ts +3 -5
  20. package/lib/cjs/ECDb.d.ts.map +1 -1
  21. package/lib/cjs/ECDb.js +7 -3
  22. package/lib/cjs/ECDb.js.map +1 -1
  23. package/lib/cjs/ECSqlStatement.d.ts +4 -2
  24. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  25. package/lib/cjs/ECSqlStatement.js +5 -1
  26. package/lib/cjs/ECSqlStatement.js.map +1 -1
  27. package/lib/cjs/IModelDb.js +2 -2
  28. package/lib/cjs/IModelDb.js.map +1 -1
  29. package/lib/cjs/IModelElementCloneContext.d.ts +2 -0
  30. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  31. package/lib/cjs/IModelElementCloneContext.js +5 -1
  32. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  33. package/lib/cjs/PromiseMemoizer.d.ts +2 -3
  34. package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
  35. package/lib/cjs/PromiseMemoizer.js +1 -1
  36. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  37. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  38. package/lib/cjs/SQLiteDb.js +60 -3
  39. package/lib/cjs/SQLiteDb.js.map +1 -1
  40. package/lib/cjs/SqliteChangesetReader.d.ts +3 -3
  41. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  42. package/lib/cjs/SqliteChangesetReader.js +1 -1
  43. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  44. package/lib/cjs/SqliteStatement.d.ts +4 -2
  45. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  46. package/lib/cjs/SqliteStatement.js +5 -1
  47. package/lib/cjs/SqliteStatement.js.map +1 -1
  48. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +2 -2
  49. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  50. package/package.json +13 -14
package/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Change Log - @itwin/core-backend
2
2
 
3
- This log was last generated on Mon, 13 Jan 2025 14:09:29 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 24 Jan 2025 08:05:17 GMT and should not be manually modified.
4
+
5
+ ## 4.10.6
6
+ Fri, 24 Jan 2025 08:02:40 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 4.10.5
11
+ Tue, 21 Jan 2025 21:56:45 GMT
12
+
13
+ _Version update only_
4
14
 
5
15
  ## 4.10.4
6
16
  Mon, 13 Jan 2025 14:06:43 GMT
@@ -61,19 +61,19 @@ export declare namespace BlobContainer {
61
61
  /** Properties returned by `Service.requestToken` */
62
62
  interface TokenProps {
63
63
  /**
64
- * expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,
64
+ * Expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,
65
65
  * and must be refreshed before it expires
66
66
  */
67
67
  token: ContainerToken;
68
- /** scope of the container. */
68
+ /** Scope of the container. */
69
69
  scope: Scope;
70
- /** name of the blob storage provider. */
70
+ /** Name of the blob storage provider. */
71
71
  provider: Provider;
72
72
  /** Time at which the token will expire. The token should be refreshed (that is, a new token should be requested) before this time. */
73
73
  expiration: Date;
74
74
  /** Metadata of the container. */
75
75
  metadata: Metadata;
76
- /** Base URI of container */
76
+ /** Base URI of the storage account that hosts the container */
77
77
  baseUri: string;
78
78
  }
79
79
  /** The URI and Id of the container. */
@@ -1 +1 @@
1
- {"version":3,"file":"BlobContainerService.d.ts","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlobContainerService.d.ts","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BlobContainerService.js","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAOH;;;GAGG;AACH,IAAiB,aAAa,CA2K7B;AA3KD,WAAiB,aAAa;AA2K9B,CAAC,EA3KgB,aAAa,6BAAb,aAAa,QA2K7B","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/** @packageDocumentation\n * @module BlobContainers\n */\n\n// spell:ignore datacenter\n\nimport { AccessToken, GuidString, Id64String } from \"@itwin/core-bentley\";\nimport { SettingsContainer } from \"./workspace/Settings\";\n\n/**\n * Types and functions for creating, deleting and authorizing access to cloud-based blob containers for an iTwin.\n * @beta\n */\nexport namespace BlobContainer {\n\n /** Object that implements the methods to create, delete, and request access to a container. */\n export let service: BlobContainer.ContainerService | undefined;\n\n /** name of cloud provider for a container. */\n export type Provider = \"azure\" | \"google\";\n\n /** the name of the container within its `Scope` */\n export type ContainerId = string;\n\n /** token that authenticates a user. This token is required to obtain a `ContainerToken`. */\n export type UserToken = AccessToken;\n\n /** token that authenticates access to a container for either read or write. */\n export type ContainerToken = AccessToken;\n\n /**\n * The scope for a container. This determines:\n * - the \"owner\" organization, including the contract that governs its legal and commercial terms and obligations\n * - the administrators who may configure RBAC permissions\n * - the datacenter for the container. Every container resides in a datacenter as determined by the iTwinId. This\n * determines the region for data residency requirements.\n * - the lifecycle constraints for the container. No container can outlive its iTwin or its iModel (if defined). That is,\n * when the iTwin/iModel is deleted (either explicitly or due to contract expiration), the container is also deleted.\n */\n export interface Scope {\n /** iTwinId of the owner of this container. */\n iTwinId: Id64String;\n /** optionally, an iModelId within the iTwin. If present, container is deleted when the iModel is deleted. */\n iModelId?: Id64String;\n /** the user GUID an individual, if this container is private. */\n ownerGuid?: GuidString;\n }\n\n /**\n * Metadata about the use of a container so that:\n * - administrators can understand why a container exists for assigning RBAC permissions appropriately\n * - usage reports can aggregate types of containers\n * - applications can identify their containers\n * - applications can store properties about their containers\n */\n export interface Metadata {\n /** The machine-readable string that describes what the container is being used for (e.g. \"workspace\"). Always lowercase and singular. */\n containerType: string;\n /** Human-readable name for the container. This will be displayed in the administrator RBAC panel, and on usage reports. Not required to be unique.*/\n label: string;\n /** Optional human-readable explanation of the information held in the container. This will be displayed in the administrator RBAC panel, and on usage reports. */\n description?: string;\n /** optional properties for the container */\n json?: SettingsContainer;\n }\n\n /**\n * Properties returned by queryContainersMetadata\n */\n export interface MetadataResponse extends Metadata {\n containerId: string;\n }\n\n /** Properties returned by `Service.requestToken` */\n export interface TokenProps {\n /**\n * expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,\n * and must be refreshed before it expires\n */\n token: ContainerToken;\n /** scope of the container. */\n scope: Scope;\n /** name of the blob storage provider. */\n provider: Provider;\n /** Time at which the token will expire. The token should be refreshed (that is, a new token should be requested) before this time. */\n expiration: Date;\n /** Metadata of the container. */\n metadata: Metadata;\n /** Base URI of container */\n baseUri: string;\n }\n\n /** The URI and Id of the container. */\n export interface UriAndId {\n baseUri: string;\n containerId: ContainerId;\n }\n\n /** Information required to access an existing container. */\n export interface AccessContainerProps extends UriAndId {\n userToken: UserToken;\n }\n\n /** Information about a newly created container. */\n export interface CreatedContainerProps extends UriAndId {\n /** name of the blob storage provider. */\n provider: Provider;\n }\n\n /**\n * Access level to request for token.\n * - `\"write\"`: request a writeable AccessToken.\n * - `\"read\"`: request a read-only AccessToken.\n * - `\"admin\"`: request a admin AccessToken.\n * - `\"writeIfPossible\"`: first request a writeable AccessToken. If the user is not authorized for write, request a read-only AccessToken.\n * If the user is not authorized for the level requested, an exception is thrown.\n */\n export type RequestAccessLevel = \"write\" | \"read\" | \"admin\" | \"writeIfPossible\";\n\n /** Information required to request an access token for a container. */\n export interface RequestTokenProps extends Omit<AccessContainerProps, \"baseUri\"> {\n /** the level of access requested. If not specified, defaults to `\"writeIfPossible\"`. */\n accessLevel?: RequestAccessLevel;\n /** the number of seconds before the token should expire.\n * @note A maximum duration is determined by the service. If no value is supplied, or the value is larger than the maximum, the maximum duration is used.\n */\n durationSeconds?: number;\n }\n\n /** Information required to create a new container. */\n export interface CreateNewContainerProps {\n /** the scope of the new container */\n scope: Scope;\n /** metadata to be stored on the new container */\n metadata: Metadata;\n /** The user's access token. The user must be authorized with \"create container\" RBAC role for the iTwin. */\n userToken: UserToken;\n /**\n * the id for the container. Useful for tests.\n * @internal\n */\n containerId?: ContainerId;\n }\n\n /**\n * Query Parameters for querying containers\n */\n export interface QueryContainerProps {\n /** the iTwinId of the containers to query */\n iTwinId: GuidString;\n /** optional iModelId of the containers to query */\n iModelId?: GuidString;\n /** optional containerType of the containers to query */\n containerType?: GuidString;\n /** optional label of the containers to query */\n label?: GuidString;\n }\n\n /** Methods to create, delete, and access blob containers. */\n export interface ContainerService {\n /** Create a new blob container. Throws on failure (e.g. access denied or container already exists.) */\n create(props: CreateNewContainerProps): Promise<CreatedContainerProps>;\n\n /**\n * Delete an existing blob container.\n * @note This method requires that the user be authorized with \"delete container\" RBAC role for the iTwin.\n */\n delete(container: AccessContainerProps): Promise<void>;\n\n /** query the Scope for a container */\n queryScope(container: AccessContainerProps): Promise<Scope>;\n\n /** query the Metadata for a specific container */\n queryMetadata(container: AccessContainerProps): Promise<Metadata>;\n\n /** Returns all containers and their metadata associated with a given iTwinId. Can be further queried by label and containerType. */\n queryContainersMetadata(userToken: UserToken, args: QueryContainerProps): Promise<MetadataResponse[]>;\n\n /** update the json properties of this container */\n updateJson(container: AccessContainerProps, json: SettingsContainer): Promise<void>;\n\n /** Request a `ContainerToken` for a container. Throws on failure. */\n requestToken(props: RequestTokenProps): Promise<TokenProps>;\n }\n}\n"]}
1
+ {"version":3,"file":"BlobContainerService.js","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAOH;;;GAGG;AACH,IAAiB,aAAa,CA2K7B;AA3KD,WAAiB,aAAa;AA2K9B,CAAC,EA3KgB,aAAa,6BAAb,aAAa,QA2K7B","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/** @packageDocumentation\n * @module BlobContainers\n */\n\n// spell:ignore datacenter\n\nimport { AccessToken, GuidString, Id64String } from \"@itwin/core-bentley\";\nimport { SettingsContainer } from \"./workspace/Settings\";\n\n/**\n * Types and functions for creating, deleting and authorizing access to cloud-based blob containers for an iTwin.\n * @beta\n */\nexport namespace BlobContainer {\n\n /** Object that implements the methods to create, delete, and request access to a container. */\n export let service: BlobContainer.ContainerService | undefined;\n\n /** name of cloud provider for a container. */\n export type Provider = \"azure\" | \"google\";\n\n /** the name of the container within its `Scope` */\n export type ContainerId = string;\n\n /** token that authenticates a user. This token is required to obtain a `ContainerToken`. */\n export type UserToken = AccessToken;\n\n /** token that authenticates access to a container for either read or write. */\n export type ContainerToken = AccessToken;\n\n /**\n * The scope for a container. This determines:\n * - the \"owner\" organization, including the contract that governs its legal and commercial terms and obligations\n * - the administrators who may configure RBAC permissions\n * - the datacenter for the container. Every container resides in a datacenter as determined by the iTwinId. This\n * determines the region for data residency requirements.\n * - the lifecycle constraints for the container. No container can outlive its iTwin or its iModel (if defined). That is,\n * when the iTwin/iModel is deleted (either explicitly or due to contract expiration), the container is also deleted.\n */\n export interface Scope {\n /** iTwinId of the owner of this container. */\n iTwinId: Id64String;\n /** optionally, an iModelId within the iTwin. If present, container is deleted when the iModel is deleted. */\n iModelId?: Id64String;\n /** the user GUID an individual, if this container is private. */\n ownerGuid?: GuidString;\n }\n\n /**\n * Metadata about the use of a container so that:\n * - administrators can understand why a container exists for assigning RBAC permissions appropriately\n * - usage reports can aggregate types of containers\n * - applications can identify their containers\n * - applications can store properties about their containers\n */\n export interface Metadata {\n /** The machine-readable string that describes what the container is being used for (e.g. \"workspace\"). Always lowercase and singular. */\n containerType: string;\n /** Human-readable name for the container. This will be displayed in the administrator RBAC panel, and on usage reports. Not required to be unique.*/\n label: string;\n /** Optional human-readable explanation of the information held in the container. This will be displayed in the administrator RBAC panel, and on usage reports. */\n description?: string;\n /** optional properties for the container */\n json?: SettingsContainer;\n }\n\n /**\n * Properties returned by queryContainersMetadata\n */\n export interface MetadataResponse extends Metadata {\n containerId: string;\n }\n\n /** Properties returned by `Service.requestToken` */\n export interface TokenProps {\n /**\n * Expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,\n * and must be refreshed before it expires\n */\n token: ContainerToken;\n /** Scope of the container. */\n scope: Scope;\n /** Name of the blob storage provider. */\n provider: Provider;\n /** Time at which the token will expire. The token should be refreshed (that is, a new token should be requested) before this time. */\n expiration: Date;\n /** Metadata of the container. */\n metadata: Metadata;\n /** Base URI of the storage account that hosts the container */\n baseUri: string;\n }\n\n /** The URI and Id of the container. */\n export interface UriAndId {\n baseUri: string;\n containerId: ContainerId;\n }\n\n /** Information required to access an existing container. */\n export interface AccessContainerProps extends UriAndId {\n userToken: UserToken;\n }\n\n /** Information about a newly created container. */\n export interface CreatedContainerProps extends UriAndId {\n /** name of the blob storage provider. */\n provider: Provider;\n }\n\n /**\n * Access level to request for token.\n * - `\"write\"`: request a writeable AccessToken.\n * - `\"read\"`: request a read-only AccessToken.\n * - `\"admin\"`: request a admin AccessToken.\n * - `\"writeIfPossible\"`: first request a writeable AccessToken. If the user is not authorized for write, request a read-only AccessToken.\n * If the user is not authorized for the level requested, an exception is thrown.\n */\n export type RequestAccessLevel = \"write\" | \"read\" | \"admin\" | \"writeIfPossible\";\n\n /** Information required to request an access token for a container. */\n export interface RequestTokenProps extends Omit<AccessContainerProps, \"baseUri\"> {\n /** the level of access requested. If not specified, defaults to `\"writeIfPossible\"`. */\n accessLevel?: RequestAccessLevel;\n /** the number of seconds before the token should expire.\n * @note A maximum duration is determined by the service. If no value is supplied, or the value is larger than the maximum, the maximum duration is used.\n */\n durationSeconds?: number;\n }\n\n /** Information required to create a new container. */\n export interface CreateNewContainerProps {\n /** the scope of the new container */\n scope: Scope;\n /** metadata to be stored on the new container */\n metadata: Metadata;\n /** The user's access token. The user must be authorized with \"create container\" RBAC role for the iTwin. */\n userToken: UserToken;\n /**\n * the id for the container. Useful for tests.\n * @internal\n */\n containerId?: ContainerId;\n }\n\n /**\n * Query Parameters for querying containers\n */\n export interface QueryContainerProps {\n /** the iTwinId of the containers to query */\n iTwinId: GuidString;\n /** optional iModelId of the containers to query */\n iModelId?: GuidString;\n /** optional containerType of the containers to query */\n containerType?: GuidString;\n /** optional label of the containers to query */\n label?: GuidString;\n }\n\n /** Methods to create, delete, and access blob containers. */\n export interface ContainerService {\n /** Create a new blob container. Throws on failure (e.g. access denied or container already exists.) */\n create(props: CreateNewContainerProps): Promise<CreatedContainerProps>;\n\n /**\n * Delete an existing blob container.\n * @note This method requires that the user be authorized with \"delete container\" RBAC role for the iTwin.\n */\n delete(container: AccessContainerProps): Promise<void>;\n\n /** query the Scope for a container */\n queryScope(container: AccessContainerProps): Promise<Scope>;\n\n /** query the Metadata for a specific container */\n queryMetadata(container: AccessContainerProps): Promise<Metadata>;\n\n /** Returns all containers and their metadata associated with a given iTwinId. Can be further queried by label and containerType. */\n queryContainersMetadata(userToken: UserToken, args: QueryContainerProps): Promise<MetadataResponse[]>;\n\n /** update the json properties of this container */\n updateJson(container: AccessContainerProps, json: SettingsContainer): Promise<void>;\n\n /** Request a `ContainerToken` for a container. Throws on failure. */\n requestToken(props: RequestTokenProps): Promise<TokenProps>;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeSummaryManager.d.ts","sourceRoot":"","sources":["../../src/ChangeSummaryManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAoB,UAAU,EAAE,UAAU,EAA+B,MAAM,qBAAqB,CAAC;AACzH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAA8B,MAAM,oBAAoB,CAAC;AAMjH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO7D;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,UAAU,CAAA;KAAE,CAAC;CAC3H;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,QAAQ;IACvD,+CAA+C;IAC/C,OAAO,EAAE,UAAU,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,EAAE,UAAU,CAAC;IAErB;;;;OAIG;IACH,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAmC;IAE5F;;;OAGG;WACW,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAO9D;;;;OAIG;WACW,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAoBvD;;;;OAIG;WACW,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAUvD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuBtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAYpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmBlC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAEpC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAWxC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuB/B;;;;;;;;;;OAUG;WACW,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,GAAG,aAAa;IAejG;;;;;;;;;;OAUG;WACW,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,GAAG,cAAc;IA0BpG;;;;;;;OAOG;WACW,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,GAAG,MAAM,EAAE;IA4BpG;;;;;;;;;;;;;;;OAeG;WACW,8BAA8B,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,eAAe,EAAE;YAAE,EAAE,EAAE,UAAU,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAyBpQ;;;;;;OAMG;WACiB,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA4C3G;;;;OAIG;WACiB,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAyChG"}
1
+ {"version":3,"file":"ChangeSummaryManager.d.ts","sourceRoot":"","sources":["../../src/ChangeSummaryManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAoB,UAAU,EAAE,UAAU,EAAwB,MAAM,qBAAqB,CAAC;AAClH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAA8B,MAAM,oBAAoB,CAAC;AAMjH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO7D;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,UAAU,CAAA;KAAE,CAAC;CAC3H;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,QAAQ;IACvD,+CAA+C;IAC/C,OAAO,EAAE,UAAU,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,EAAE,UAAU,CAAC;IAErB;;;;OAIG;IACH,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAmC;IAE5F;;;OAGG;WACW,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAO9D;;;;OAIG;WACW,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAmBvD;;;;OAIG;WACW,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAUvD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuBtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAYpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmBlC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAEpC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAWxC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuB/B;;;;;;;;;;OAUG;WACW,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,GAAG,aAAa;IAejG;;;;;;;;;;OAUG;WACW,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,GAAG,cAAc;IA0BpG;;;;;;;OAOG;WACW,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,GAAG,MAAM,EAAE;IA4BpG;;;;;;;;;;;;;;;OAeG;WACW,8BAA8B,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,eAAe,EAAE;YAAE,EAAE,EAAE,UAAU,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAyBpQ;;;;;;OAMG;WACiB,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAyC3G;;;;OAIG;WACiB,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAyChG"}
@@ -6,6 +6,58 @@
6
6
  /** @packageDocumentation
7
7
  * @module iModels
8
8
  */
9
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
10
+ if (value !== null && value !== void 0) {
11
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
12
+ var dispose, inner;
13
+ if (async) {
14
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
15
+ dispose = value[Symbol.asyncDispose];
16
+ }
17
+ if (dispose === void 0) {
18
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
19
+ dispose = value[Symbol.dispose];
20
+ if (async) inner = dispose;
21
+ }
22
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
23
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
24
+ env.stack.push({ value: value, dispose: dispose, async: async });
25
+ }
26
+ else if (async) {
27
+ env.stack.push({ async: true });
28
+ }
29
+ return value;
30
+ };
31
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
32
+ return function (env) {
33
+ function fail(e) {
34
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
35
+ env.hasError = true;
36
+ }
37
+ var r, s = 0;
38
+ function next() {
39
+ while (r = env.stack.pop()) {
40
+ try {
41
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
42
+ if (r.dispose) {
43
+ var result = r.dispose.call(r.value);
44
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
45
+ }
46
+ else s |= 1;
47
+ }
48
+ catch (e) {
49
+ fail(e);
50
+ }
51
+ }
52
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
53
+ if (env.hasError) throw env.error;
54
+ }
55
+ return next();
56
+ };
57
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
58
+ var e = new Error(message);
59
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
60
+ });
9
61
  Object.defineProperty(exports, "__esModule", { value: true });
10
62
  exports.ChangeSummaryManager = void 0;
11
63
  const core_bentley_1 = require("@itwin/core-bentley");
@@ -48,9 +100,18 @@ class ChangeSummaryManager {
48
100
  return;
49
101
  const changesCacheFilePath = BriefcaseManager_1.BriefcaseManager.getChangeCachePathName(iModel.iModelId);
50
102
  if (!IModelJsFs_1.IModelJsFs.existsSync(changesCacheFilePath)) {
51
- (0, core_bentley_1.using)(new ECDb_1.ECDb(), (changeCacheFile) => {
103
+ const env_1 = { stack: [], error: void 0, hasError: false };
104
+ try {
105
+ const changeCacheFile = __addDisposableResource(env_1, new ECDb_1.ECDb(), false);
52
106
  ChangeSummaryManager.createChangeCacheFile(iModel, changeCacheFile, changesCacheFilePath);
53
- });
107
+ }
108
+ catch (e_1) {
109
+ env_1.error = e_1;
110
+ env_1.hasError = true;
111
+ }
112
+ finally {
113
+ __disposeResources(env_1);
114
+ }
54
115
  }
55
116
  (0, core_bentley_1.assert)(IModelJsFs_1.IModelJsFs.existsSync(changesCacheFilePath));
56
117
  const res = iModel[Symbols_1._nativeDb].attachChangeCache(changesCacheFilePath);
@@ -279,27 +340,34 @@ class ChangeSummaryManager {
279
340
  const changeset = await IModelHost_1.IModelHost.hubAccess.downloadChangeset({ accessToken: IModelHost_1.IModelHost.authorizationClient ? undefined : accessToken, iModelId, changeset: { id: iModel.changeset.id }, targetDir: changesetsFolder });
280
341
  if (!IModelJsFs_1.IModelJsFs.existsSync(changeset.pathname))
281
342
  throw new core_common_1.IModelError(core_bentley_1.IModelStatus.FileNotFound, `Failed to download change set: ${changeset.pathname}`);
282
- let changesFile;
283
343
  try {
284
- changesFile = ChangeSummaryManager.openOrCreateChangesFile(iModel);
285
- (0, core_bentley_1.assert)(changesFile[Symbols_1._nativeDb] !== undefined, "Invalid changesFile - should've caused an exception");
286
- let changeSummaryId = ChangeSummaryManager.isSummaryAlreadyExtracted(changesFile, changesetId);
287
- if (changeSummaryId !== undefined) {
288
- core_bentley_1.Logger.logInfo(loggerCategory, `Change Summary for changeset already exists. It is not extracted again.`, () => ({ iModelId, changeSetId: changesetId }));
344
+ const env_2 = { stack: [], error: void 0, hasError: false };
345
+ try {
346
+ const changesFile = __addDisposableResource(env_2, ChangeSummaryManager.openOrCreateChangesFile(iModel), false);
347
+ (0, core_bentley_1.assert)(changesFile[Symbols_1._nativeDb] !== undefined, "Invalid changesFile - should've caused an exception");
348
+ let changeSummaryId = ChangeSummaryManager.isSummaryAlreadyExtracted(changesFile, changesetId);
349
+ if (changeSummaryId !== undefined) {
350
+ core_bentley_1.Logger.logInfo(loggerCategory, `Change Summary for changeset already exists. It is not extracted again.`, () => ({ iModelId, changeSetId: changesetId }));
351
+ return changeSummaryId;
352
+ }
353
+ const stat = iModel[Symbols_1._nativeDb].extractChangeSummary(changesFile[Symbols_1._nativeDb], changeset.pathname);
354
+ if (stat.error && stat.error.status !== core_bentley_1.DbResult.BE_SQLITE_OK)
355
+ throw new core_common_1.IModelError(stat.error.status, stat.error.message);
356
+ (0, core_bentley_1.assert)(undefined !== stat.result);
357
+ changeSummaryId = stat.result;
358
+ ChangeSummaryManager.addExtendedInfos(changesFile, changeSummaryId, changesetId, changeset.parentId, changeset.description, changeset.pushDate, changeset.userCreated);
359
+ changesFile.saveChanges();
289
360
  return changeSummaryId;
290
361
  }
291
- const stat = iModel[Symbols_1._nativeDb].extractChangeSummary(changesFile[Symbols_1._nativeDb], changeset.pathname);
292
- if (stat.error && stat.error.status !== core_bentley_1.DbResult.BE_SQLITE_OK)
293
- throw new core_common_1.IModelError(stat.error.status, stat.error.message);
294
- (0, core_bentley_1.assert)(undefined !== stat.result);
295
- changeSummaryId = stat.result;
296
- ChangeSummaryManager.addExtendedInfos(changesFile, changeSummaryId, changesetId, changeset.parentId, changeset.description, changeset.pushDate, changeset.userCreated);
297
- changesFile.saveChanges();
298
- return changeSummaryId;
362
+ catch (e_2) {
363
+ env_2.error = e_2;
364
+ env_2.hasError = true;
365
+ }
366
+ finally {
367
+ __disposeResources(env_2);
368
+ }
299
369
  }
300
370
  finally {
301
- if (changesFile !== undefined)
302
- changesFile.dispose();
303
371
  IModelJsFs_1.IModelJsFs.unlinkSync(changeset.pathname);
304
372
  }
305
373
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeSummaryManager.js","sourceRoot":"","sources":["../../src/ChangeSummaryManager.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/** @packageDocumentation\n * @module iModels\n */\n\nimport { AccessToken, assert, DbResult, GuidString, Id64String, IModelStatus, Logger, using } from \"@itwin/core-bentley\";\nimport { ChangedValueState, ChangeOpCode, ChangesetRange, IModelError, IModelVersion } from \"@itwin/core-common\";\nimport * as path from \"path\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { ECDb, ECDbOpenMode } from \"./ECDb\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { BriefcaseDb, IModelDb, TokenArg } from \"./IModelDb\";\nimport { IModelHost, KnownLocations } from \"./IModelHost\";\nimport { IModelJsFs } from \"./IModelJsFs\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\nconst loggerCategory: string = BackendLoggerCategory.ECDb;\n\n/** Represents an instance of the `ChangeSummary` ECClass from the `ECDbChange` ECSchema\n * combined with the information from the related `Changeset` instance (from the `IModelChange` ECSchema) from\n * which the Change Summary was extracted.\n *\n * See also\n * - [ChangeSummaryManager.queryChangeSummary]($backend)\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport interface ChangeSummary {\n id: Id64String;\n changeSet: { wsgId: GuidString, parentWsgId: GuidString, description: string, pushDate: string, userCreated: GuidString };\n}\n\n/** Represents an instance of the `InstanceChange` ECClass from the `ECDbChange` ECSchema\n *\n * See also\n * - [ChangeSummaryManager.queryInstanceChange]($backend)\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport interface InstanceChange {\n id: Id64String;\n summaryId: Id64String;\n changedInstance: { id: Id64String, className: string };\n opCode: ChangeOpCode;\n isIndirect: boolean;\n}\n\n/** Options for [ChangeSummaryManager.createChangeSummaries]($backend).\n * @beta\n */\nexport interface CreateChangeSummaryArgs extends TokenArg {\n /** Id of the iTwin that contains the iModel */\n iTwinId: GuidString;\n\n /** Id of the iModel */\n iModelId: GuidString;\n\n /**\n * Range of change sets\n * - the Change Summary for the first and last versions are also included\n * - if unspecified, all change sets until the latest version are processed\n */\n range: ChangesetRange;\n}\n\n/** Class to extract Change Summaries for a briefcase.\n *\n * See also:\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport class ChangeSummaryManager {\n private static readonly _currentIModelChangeSchemaVersion = { read: 2, write: 0, minor: 0 };\n\n /** Determines whether the *Change Cache file* is attached to the specified iModel or not\n * @param iModel iModel to check whether a *Change Cache file* is attached\n * @returns Returns true if the *Change Cache file* is attached to the iModel. false otherwise\n */\n public static isChangeCacheAttached(iModel: IModelDb): boolean {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n return iModel[_nativeDb].isChangeCacheAttached();\n }\n\n /** Attaches the *Change Cache file* to the specified iModel if it hasn't been attached yet.\n * A new *Change Cache file* will be created for the iModel if it hasn't existed before.\n * @param iModel iModel to attach the *Change Cache file* file to\n * @throws [IModelError]($common)\n */\n public static attachChangeCache(iModel: IModelDb): void {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n if (ChangeSummaryManager.isChangeCacheAttached(iModel))\n return;\n\n const changesCacheFilePath: string = BriefcaseManager.getChangeCachePathName(iModel.iModelId);\n if (!IModelJsFs.existsSync(changesCacheFilePath)) {\n using(new ECDb(), (changeCacheFile: ECDb) => {\n ChangeSummaryManager.createChangeCacheFile(iModel, changeCacheFile, changesCacheFilePath);\n });\n }\n\n assert(IModelJsFs.existsSync(changesCacheFilePath));\n const res: DbResult = iModel[_nativeDb].attachChangeCache(changesCacheFilePath);\n if (res !== DbResult.BE_SQLITE_OK)\n throw new IModelError(res, `Failed to attach Change Cache file to ${iModel.pathName}.`);\n }\n\n /** Detaches the *Change Cache file* from the specified iModel.\n * - note that this method will cause any pending (currently running or queued) queries to fail\n * @param iModel iModel to detach the *Change Cache file* to\n * @throws [IModelError]($common) in case of errors, e.g. if no *Change Cache file* was attached before.\n */\n public static detachChangeCache(iModel: IModelDb): void {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n iModel.clearCaches();\n const res: DbResult = iModel[_nativeDb].detachChangeCache();\n if (res !== DbResult.BE_SQLITE_OK)\n throw new IModelError(res, `Failed to detach Change Cache file from ${iModel.pathName}.`);\n }\n\n private static openOrCreateChangesFile(iModel: BriefcaseDb): ECDb {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadArg, \"Invalid iModel handle. iModel must be open.\");\n\n const changesFile = new ECDb();\n const changeCacheFilePath = BriefcaseManager.getChangeCachePathName(iModel.iModelId);\n if (IModelJsFs.existsSync(changeCacheFilePath)) {\n ChangeSummaryManager.openChangeCacheFile(changesFile, changeCacheFilePath);\n return changesFile;\n }\n\n try {\n ChangeSummaryManager.createChangeCacheFile(iModel, changesFile, changeCacheFilePath);\n return changesFile;\n } catch (e) {\n // delete cache file again in case it was created but schema import failed\n if (IModelJsFs.existsSync(changeCacheFilePath))\n IModelJsFs.removeSync(changeCacheFilePath);\n\n throw e;\n }\n }\n\n private static createChangeCacheFile(iModel: IModelDb, changesFile: ECDb, changeCacheFilePath: string): void {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadArg, \"Invalid iModel object. iModel must be open.\");\n\n const stat: DbResult = iModel[_nativeDb].createChangeCache(changesFile[_nativeDb], changeCacheFilePath);\n if (stat !== DbResult.BE_SQLITE_OK)\n throw new IModelError(stat, `Failed to create Change Cache file at \"${changeCacheFilePath}\".`);\n\n // Extended information like changeset ids, push dates are persisted in the IModelChange ECSchema\n changesFile.importSchema(ChangeSummaryManager.getExtendedSchemaPath());\n }\n\n private static openChangeCacheFile(changesFile: ECDb, changeCacheFilePath: string): void {\n changesFile.openDb(changeCacheFilePath, ECDbOpenMode.FileUpgrade);\n\n const actualSchemaVersion: { read: number, write: number, minor: number } = changesFile.withPreparedStatement(\"SELECT VersionMajor read,VersionWrite write,VersionMinor minor FROM meta.ECSchemaDef WHERE Name='IModelChange'\",\n (stmt: ECSqlStatement) => {\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"File is not a valid Change Cache file.\");\n\n return stmt.getRow();\n });\n\n if (actualSchemaVersion.read === ChangeSummaryManager._currentIModelChangeSchemaVersion.read &&\n actualSchemaVersion.write === ChangeSummaryManager._currentIModelChangeSchemaVersion.write &&\n actualSchemaVersion.minor === ChangeSummaryManager._currentIModelChangeSchemaVersion.minor)\n return;\n\n changesFile.importSchema(ChangeSummaryManager.getExtendedSchemaPath());\n }\n\n private static getExtendedSchemaPath(): string { return path.join(KnownLocations.packageAssetsDir, \"IModelChange.02.00.00.ecschema.xml\"); }\n\n private static isSummaryAlreadyExtracted(changesFile: ECDb, changeSetId: GuidString): Id64String | undefined {\n return changesFile.withPreparedStatement(\"SELECT Summary.Id summaryid FROM imodelchange.ChangeSet WHERE WsgId=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindString(1, changeSetId);\n if (DbResult.BE_SQLITE_ROW === stmt.step())\n return stmt.getValue(0).getId();\n\n return undefined;\n });\n }\n\n private static addExtendedInfos(changesFile: ECDb, changeSummaryId: Id64String, changesetWsgId: GuidString, changesetParentWsgId?: GuidString, description?: string, changesetPushDate?: string, changeSetUserCreated?: GuidString): void {\n changesFile.withPreparedStatement(\"INSERT INTO imodelchange.ChangeSet(Summary.Id,WsgId,ParentWsgId,Description,PushDate,UserCreated) VALUES(?,?,?,?,?,?)\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, changeSummaryId);\n stmt.bindString(2, changesetWsgId);\n if (changesetParentWsgId)\n stmt.bindString(3, changesetParentWsgId);\n\n if (description)\n stmt.bindString(4, description);\n\n if (changesetPushDate)\n stmt.bindDateTime(5, changesetPushDate);\n\n if (changeSetUserCreated)\n stmt.bindString(6, changeSetUserCreated);\n\n const r: DbResult = stmt.step();\n if (r !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(r, `Failed to add changeset information to extracted change summary ${changeSummaryId}`);\n });\n }\n\n /** Queries the ChangeSummary for the specified change summary id\n *\n * See also\n * - `ECDbChange.ChangeSummary` ECClass in the *ECDbChange* ECSchema\n * - [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param changeSummaryId ECInstanceId of the ChangeSummary\n * @returns Returns the requested ChangeSummary object\n * @throws [IModelError]($common) If change summary does not exist for the specified id, or if the\n * change cache file hasn't been attached, or in case of other errors.\n */\n public static queryChangeSummary(iModel: BriefcaseDb, changeSummaryId: Id64String): ChangeSummary {\n if (!ChangeSummaryManager.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadArg, \"Change Cache file must be attached to iModel.\");\n\n return iModel.withPreparedStatement(\"SELECT WsgId,ParentWsgId,Description,PushDate,UserCreated FROM ecchange.imodelchange.ChangeSet WHERE Summary.Id=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, changeSummaryId);\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(IModelStatus.BadArg, `No ChangeSet information found for ChangeSummary ${changeSummaryId}.`);\n\n const row = stmt.getRow();\n return { id: changeSummaryId, changeSet: { wsgId: row.wsgId, parentWsgId: row.parentWsgId, description: row.description, pushDate: row.pushDate, userCreated: row.userCreated } };\n });\n }\n\n /** Queries the InstanceChange for the specified instance change id.\n *\n * See also\n * - `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema\n * - [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeId ECInstanceId of the InstanceChange (see `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema)\n * @returns Returns the requested InstanceChange object (see `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema)\n * @throws [IModelError]($common) if instance change does not exist for the specified id, or if the\n * change cache file hasn't been attached, or in case of other errors.\n */\n public static queryInstanceChange(iModel: BriefcaseDb, instanceChangeId: Id64String): InstanceChange {\n if (!ChangeSummaryManager.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadArg, \"Change Cache file must be attached to iModel.\");\n\n // query instance changes\n const instanceChange: InstanceChange = iModel.withPreparedStatement(`SELECT ic.Summary.Id summaryId, s.Name changedInstanceSchemaName, c.Name changedInstanceClassName, ic.ChangedInstance.Id changedInstanceId,\n ic.OpCode, ic.IsIndirect FROM ecchange.change.InstanceChange ic JOIN main.meta.ECClassDef c ON c.ECInstanceId = ic.ChangedInstance.ClassId\n JOIN main.meta.ECSchemaDef s ON c.Schema.Id = s.ECInstanceId WHERE ic.ECInstanceId =? `, (stmt: ECSqlStatement) => {\n stmt.bindId(1, instanceChangeId);\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(IModelStatus.BadArg, `No InstanceChange found for id ${instanceChangeId}.`);\n\n const row = stmt.getRow();\n const changedInstanceId: Id64String = row.changedInstanceId;\n const changedInstanceClassName: string = `[${row.changedInstanceSchemaName}].[${row.changedInstanceClassName}]`;\n const op: ChangeOpCode = row.opCode as ChangeOpCode;\n\n return {\n id: instanceChangeId, summaryId: row.summaryId, changedInstance: { id: changedInstanceId, className: changedInstanceClassName },\n opCode: op, isIndirect: row.isIndirect,\n };\n });\n\n return instanceChange;\n }\n\n /** Retrieves the names of the properties whose values have changed for the given instance change\n *\n * See also [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeId Id of the InstanceChange to query the properties whose values have changed\n * @returns Returns names of the properties whose values have changed for the given instance change\n * @throws [IModelError]($common) if the change cache file hasn't been attached, or in case of other errors.\n */\n public static getChangedPropertyValueNames(iModel: IModelDb, instanceChangeId: Id64String): string[] {\n return iModel.withPreparedStatement(\"SELECT AccessString FROM ecchange.change.PropertyValueChange WHERE InstanceChange.Id=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, instanceChangeId);\n\n const selectClauseItems: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n // access string tokens need to be escaped as they might collide with reserved words in ECSQL or SQLite\n const accessString: string = stmt.getValue(0).getString();\n const accessStringTokens: string[] = accessString.split(\".\");\n assert(accessStringTokens.length > 0);\n\n let isFirstToken: boolean = true;\n let item: string = \"\";\n for (const token of accessStringTokens) {\n if (!isFirstToken)\n item += \".\";\n\n item += `[${token}]`;\n isFirstToken = false;\n }\n selectClauseItems.push(item);\n }\n\n return selectClauseItems;\n });\n }\n\n /** Builds the ECSQL to query the property value changes for the specified instance change and the specified ChangedValueState.\n *\n * See also [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeInfo InstanceChange to query the property value changes for\n * changedInstance.className must be fully qualified and schema and class name must be escaped with square brackets if they collide with reserved ECSQL words: `[schema name].[class name]`\n * @param changedValueState The Changed State to query the values for. This must correspond to the [InstanceChange.OpCode]($backend) of the InstanceChange.\n * @param changedPropertyNames List of the property names for which values have changed for the specified instance change.\n * The list can be obtained by calling [ChangeSummaryManager.getChangedPropertyValueNames]($core-backend).\n * If omitted, the method will call the above method by itself. The parameter allows for checking first whether\n * an instance change has any property value changes at all. If there are no property value changes, this method\n * should not be called, as it will throw an error.\n * @returns Returns the ECSQL that will retrieve the property value changes\n * @throws [IModelError]($common) if instance change does not exist, if there are not property value changes for the instance change,\n * if the change cache file hasn't been attached, or in case of other errors.\n */\n public static buildPropertyValueChangesECSql(iModel: IModelDb, instanceChangeInfo: { id: Id64String, summaryId: Id64String, changedInstance: { id: Id64String, className: string } }, changedValueState: ChangedValueState, changedPropertyNames?: string[]): string {\n let selectClauseItems: string[];\n if (!changedPropertyNames) {\n // query property value changes just to build a SELECT statement against the class of the changed instance\n selectClauseItems = ChangeSummaryManager.getChangedPropertyValueNames(iModel, instanceChangeInfo.id);\n } else\n selectClauseItems = changedPropertyNames;\n\n if (selectClauseItems.length === 0)\n throw new IModelError(IModelStatus.BadArg, `No property value changes found for InstanceChange ${instanceChangeInfo.id}.`);\n\n let ecsql: string = \"SELECT \";\n selectClauseItems.map((item: string, index: number) => {\n if (index !== 0)\n ecsql += \",\";\n\n ecsql += item;\n });\n\n // Avoiding parameters in the Changes function speeds up performance because ECDb can do optimizations\n // if it knows the function args at prepare time\n ecsql += ` FROM main.${instanceChangeInfo.changedInstance.className}.Changes(${instanceChangeInfo.summaryId},${changedValueState}) WHERE ECInstanceId=${instanceChangeInfo.changedInstance.id}`;\n return ecsql;\n }\n\n /**\n * Creates a change summary for the last applied change set to the iModel\n * @param accessToken A valid access token string\n * @param iModel iModel to extract change summaries for. The iModel must not be a standalone iModel, and must have at least one change set applied to it.\n * @returns The id of the extracted change summary.\n * @beta\n */\n public static async createChangeSummary(accessToken: AccessToken, iModel: BriefcaseDb): Promise<Id64String> {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n const changesetId = iModel.changeset.id;\n if (!changesetId)\n throw new IModelError(IModelStatus.BadRequest, \"No change set was applied to the iModel\");\n if (this.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadRequest, \"Change cache must be detached before extraction\");\n\n const iModelId = iModel.iModelId;\n const changesetsFolder: string = BriefcaseManager.getChangeSetsPath(iModelId);\n const changeset = await IModelHost.hubAccess.downloadChangeset({ accessToken: IModelHost.authorizationClient ? undefined : accessToken, iModelId, changeset: { id: iModel.changeset.id }, targetDir: changesetsFolder });\n\n if (!IModelJsFs.existsSync(changeset.pathname))\n throw new IModelError(IModelStatus.FileNotFound, `Failed to download change set: ${changeset.pathname}`);\n\n let changesFile: ECDb | undefined;\n try {\n changesFile = ChangeSummaryManager.openOrCreateChangesFile(iModel);\n assert(changesFile[_nativeDb] !== undefined, \"Invalid changesFile - should've caused an exception\");\n\n let changeSummaryId = ChangeSummaryManager.isSummaryAlreadyExtracted(changesFile, changesetId);\n if (changeSummaryId !== undefined) {\n Logger.logInfo(loggerCategory, `Change Summary for changeset already exists. It is not extracted again.`, () => ({ iModelId, changeSetId: changesetId }));\n return changeSummaryId;\n }\n\n const stat = iModel[_nativeDb].extractChangeSummary(changesFile[_nativeDb], changeset.pathname);\n if (stat.error && stat.error.status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(stat.error.status, stat.error.message);\n\n assert(undefined !== stat.result);\n changeSummaryId = stat.result;\n ChangeSummaryManager.addExtendedInfos(changesFile, changeSummaryId, changesetId, changeset.parentId, changeset.description, changeset.pushDate, changeset.userCreated);\n\n changesFile.saveChanges();\n return changeSummaryId;\n } finally {\n if (changesFile !== undefined)\n changesFile.dispose();\n IModelJsFs.unlinkSync(changeset.pathname);\n }\n }\n\n /**\n * Creates change summaries for the specified iModel and a specified range of versions\n * @note This may be an expensive operation - downloads the first version and starts applying the change sets, extracting summaries one by one\n * @param args Arguments including the range of versions for which Change Summaries are to be created, and other necessary input for creation\n */\n public static async createChangeSummaries(args: CreateChangeSummaryArgs): Promise<Id64String[]> {\n // if we pass undefined to hubAccess methods they will use our authorizationClient to refresh the token as needed.\n const accessToken = IModelHost.authorizationClient ? undefined : args.accessToken ?? \"\";\n const { iModelId, iTwinId, range } = args;\n range.end = range.end ?? (await IModelHost.hubAccess.getChangesetFromVersion({ accessToken, iModelId, version: IModelVersion.latest() })).index;\n if (range.first > range.end)\n throw new IModelError(IModelStatus.BadArg, \"Invalid range of changesets\");\n if (range.first === 0 && range.end === 0)\n return []; // no changesets exist, so the inclusive range is empty\n\n const changesets = await IModelHost.hubAccess.queryChangesets({ accessToken, iModelId, range });\n\n // Setup a temporary briefcase to help with extracting change summaries\n const briefcasePath = BriefcaseManager.getBriefcaseBasePath(iModelId);\n const fileName: string = path.join(briefcasePath, `ChangeSummaryBriefcase.bim`);\n if (IModelJsFs.existsSync(fileName))\n IModelJsFs.removeSync(fileName);\n\n let iModel: BriefcaseDb | undefined;\n try {\n // Download a version that has the first change set applied\n const props = await BriefcaseManager.downloadBriefcase({ accessToken, iTwinId, iModelId, asOf: { afterChangeSetId: changesets[0].id }, briefcaseId: 0, fileName });\n iModel = await BriefcaseDb.open({ fileName: props.fileName });\n\n const summaryIds = new Array<Id64String>();\n for (let index = 0; index < changesets.length; index++) {\n // Apply a change set if necessary\n if (index > 0)\n await iModel.pullChanges({ accessToken, toIndex: changesets[index].index });\n\n // Create a change summary for the last change set that was applied\n const summaryId = await this.createChangeSummary(accessToken ?? await IModelHost.authorizationClient?.getAccessToken() ?? \"\", iModel);\n summaryIds.push(summaryId);\n }\n return summaryIds;\n } finally {\n if (iModel !== undefined)\n iModel.close();\n IModelJsFs.removeSync(fileName);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ChangeSummaryManager.js","sourceRoot":"","sources":["../../src/ChangeSummaryManager.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/** @packageDocumentation\n * @module iModels\n */\n\nimport { AccessToken, assert, DbResult, GuidString, Id64String, IModelStatus, Logger } from \"@itwin/core-bentley\";\nimport { ChangedValueState, ChangeOpCode, ChangesetRange, IModelError, IModelVersion } from \"@itwin/core-common\";\nimport * as path from \"path\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { ECDb, ECDbOpenMode } from \"./ECDb\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { BriefcaseDb, IModelDb, TokenArg } from \"./IModelDb\";\nimport { IModelHost, KnownLocations } from \"./IModelHost\";\nimport { IModelJsFs } from \"./IModelJsFs\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\nconst loggerCategory: string = BackendLoggerCategory.ECDb;\n\n/** Represents an instance of the `ChangeSummary` ECClass from the `ECDbChange` ECSchema\n * combined with the information from the related `Changeset` instance (from the `IModelChange` ECSchema) from\n * which the Change Summary was extracted.\n *\n * See also\n * - [ChangeSummaryManager.queryChangeSummary]($backend)\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport interface ChangeSummary {\n id: Id64String;\n changeSet: { wsgId: GuidString, parentWsgId: GuidString, description: string, pushDate: string, userCreated: GuidString };\n}\n\n/** Represents an instance of the `InstanceChange` ECClass from the `ECDbChange` ECSchema\n *\n * See also\n * - [ChangeSummaryManager.queryInstanceChange]($backend)\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport interface InstanceChange {\n id: Id64String;\n summaryId: Id64String;\n changedInstance: { id: Id64String, className: string };\n opCode: ChangeOpCode;\n isIndirect: boolean;\n}\n\n/** Options for [ChangeSummaryManager.createChangeSummaries]($backend).\n * @beta\n */\nexport interface CreateChangeSummaryArgs extends TokenArg {\n /** Id of the iTwin that contains the iModel */\n iTwinId: GuidString;\n\n /** Id of the iModel */\n iModelId: GuidString;\n\n /**\n * Range of change sets\n * - the Change Summary for the first and last versions are also included\n * - if unspecified, all change sets until the latest version are processed\n */\n range: ChangesetRange;\n}\n\n/** Class to extract Change Summaries for a briefcase.\n *\n * See also:\n * - [ChangeSummary Overview]($docs/learning/ChangeSummaries)\n * @beta\n */\nexport class ChangeSummaryManager {\n private static readonly _currentIModelChangeSchemaVersion = { read: 2, write: 0, minor: 0 };\n\n /** Determines whether the *Change Cache file* is attached to the specified iModel or not\n * @param iModel iModel to check whether a *Change Cache file* is attached\n * @returns Returns true if the *Change Cache file* is attached to the iModel. false otherwise\n */\n public static isChangeCacheAttached(iModel: IModelDb): boolean {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n return iModel[_nativeDb].isChangeCacheAttached();\n }\n\n /** Attaches the *Change Cache file* to the specified iModel if it hasn't been attached yet.\n * A new *Change Cache file* will be created for the iModel if it hasn't existed before.\n * @param iModel iModel to attach the *Change Cache file* file to\n * @throws [IModelError]($common)\n */\n public static attachChangeCache(iModel: IModelDb): void {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n if (ChangeSummaryManager.isChangeCacheAttached(iModel))\n return;\n\n const changesCacheFilePath: string = BriefcaseManager.getChangeCachePathName(iModel.iModelId);\n if (!IModelJsFs.existsSync(changesCacheFilePath)) {\n using changeCacheFile = new ECDb();\n ChangeSummaryManager.createChangeCacheFile(iModel, changeCacheFile, changesCacheFilePath);\n }\n\n assert(IModelJsFs.existsSync(changesCacheFilePath));\n const res: DbResult = iModel[_nativeDb].attachChangeCache(changesCacheFilePath);\n if (res !== DbResult.BE_SQLITE_OK)\n throw new IModelError(res, `Failed to attach Change Cache file to ${iModel.pathName}.`);\n }\n\n /** Detaches the *Change Cache file* from the specified iModel.\n * - note that this method will cause any pending (currently running or queued) queries to fail\n * @param iModel iModel to detach the *Change Cache file* to\n * @throws [IModelError]($common) in case of errors, e.g. if no *Change Cache file* was attached before.\n */\n public static detachChangeCache(iModel: IModelDb): void {\n if (!iModel || !iModel.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n\n iModel.clearCaches();\n const res: DbResult = iModel[_nativeDb].detachChangeCache();\n if (res !== DbResult.BE_SQLITE_OK)\n throw new IModelError(res, `Failed to detach Change Cache file from ${iModel.pathName}.`);\n }\n\n private static openOrCreateChangesFile(iModel: BriefcaseDb): ECDb {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadArg, \"Invalid iModel handle. iModel must be open.\");\n\n const changesFile = new ECDb();\n const changeCacheFilePath = BriefcaseManager.getChangeCachePathName(iModel.iModelId);\n if (IModelJsFs.existsSync(changeCacheFilePath)) {\n ChangeSummaryManager.openChangeCacheFile(changesFile, changeCacheFilePath);\n return changesFile;\n }\n\n try {\n ChangeSummaryManager.createChangeCacheFile(iModel, changesFile, changeCacheFilePath);\n return changesFile;\n } catch (e) {\n // delete cache file again in case it was created but schema import failed\n if (IModelJsFs.existsSync(changeCacheFilePath))\n IModelJsFs.removeSync(changeCacheFilePath);\n\n throw e;\n }\n }\n\n private static createChangeCacheFile(iModel: IModelDb, changesFile: ECDb, changeCacheFilePath: string): void {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadArg, \"Invalid iModel object. iModel must be open.\");\n\n const stat: DbResult = iModel[_nativeDb].createChangeCache(changesFile[_nativeDb], changeCacheFilePath);\n if (stat !== DbResult.BE_SQLITE_OK)\n throw new IModelError(stat, `Failed to create Change Cache file at \"${changeCacheFilePath}\".`);\n\n // Extended information like changeset ids, push dates are persisted in the IModelChange ECSchema\n changesFile.importSchema(ChangeSummaryManager.getExtendedSchemaPath());\n }\n\n private static openChangeCacheFile(changesFile: ECDb, changeCacheFilePath: string): void {\n changesFile.openDb(changeCacheFilePath, ECDbOpenMode.FileUpgrade);\n\n const actualSchemaVersion: { read: number, write: number, minor: number } = changesFile.withPreparedStatement(\"SELECT VersionMajor read,VersionWrite write,VersionMinor minor FROM meta.ECSchemaDef WHERE Name='IModelChange'\",\n (stmt: ECSqlStatement) => {\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"File is not a valid Change Cache file.\");\n\n return stmt.getRow();\n });\n\n if (actualSchemaVersion.read === ChangeSummaryManager._currentIModelChangeSchemaVersion.read &&\n actualSchemaVersion.write === ChangeSummaryManager._currentIModelChangeSchemaVersion.write &&\n actualSchemaVersion.minor === ChangeSummaryManager._currentIModelChangeSchemaVersion.minor)\n return;\n\n changesFile.importSchema(ChangeSummaryManager.getExtendedSchemaPath());\n }\n\n private static getExtendedSchemaPath(): string { return path.join(KnownLocations.packageAssetsDir, \"IModelChange.02.00.00.ecschema.xml\"); }\n\n private static isSummaryAlreadyExtracted(changesFile: ECDb, changeSetId: GuidString): Id64String | undefined {\n return changesFile.withPreparedStatement(\"SELECT Summary.Id summaryid FROM imodelchange.ChangeSet WHERE WsgId=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindString(1, changeSetId);\n if (DbResult.BE_SQLITE_ROW === stmt.step())\n return stmt.getValue(0).getId();\n\n return undefined;\n });\n }\n\n private static addExtendedInfos(changesFile: ECDb, changeSummaryId: Id64String, changesetWsgId: GuidString, changesetParentWsgId?: GuidString, description?: string, changesetPushDate?: string, changeSetUserCreated?: GuidString): void {\n changesFile.withPreparedStatement(\"INSERT INTO imodelchange.ChangeSet(Summary.Id,WsgId,ParentWsgId,Description,PushDate,UserCreated) VALUES(?,?,?,?,?,?)\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, changeSummaryId);\n stmt.bindString(2, changesetWsgId);\n if (changesetParentWsgId)\n stmt.bindString(3, changesetParentWsgId);\n\n if (description)\n stmt.bindString(4, description);\n\n if (changesetPushDate)\n stmt.bindDateTime(5, changesetPushDate);\n\n if (changeSetUserCreated)\n stmt.bindString(6, changeSetUserCreated);\n\n const r: DbResult = stmt.step();\n if (r !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(r, `Failed to add changeset information to extracted change summary ${changeSummaryId}`);\n });\n }\n\n /** Queries the ChangeSummary for the specified change summary id\n *\n * See also\n * - `ECDbChange.ChangeSummary` ECClass in the *ECDbChange* ECSchema\n * - [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param changeSummaryId ECInstanceId of the ChangeSummary\n * @returns Returns the requested ChangeSummary object\n * @throws [IModelError]($common) If change summary does not exist for the specified id, or if the\n * change cache file hasn't been attached, or in case of other errors.\n */\n public static queryChangeSummary(iModel: BriefcaseDb, changeSummaryId: Id64String): ChangeSummary {\n if (!ChangeSummaryManager.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadArg, \"Change Cache file must be attached to iModel.\");\n\n return iModel.withPreparedStatement(\"SELECT WsgId,ParentWsgId,Description,PushDate,UserCreated FROM ecchange.imodelchange.ChangeSet WHERE Summary.Id=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, changeSummaryId);\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(IModelStatus.BadArg, `No ChangeSet information found for ChangeSummary ${changeSummaryId}.`);\n\n const row = stmt.getRow();\n return { id: changeSummaryId, changeSet: { wsgId: row.wsgId, parentWsgId: row.parentWsgId, description: row.description, pushDate: row.pushDate, userCreated: row.userCreated } };\n });\n }\n\n /** Queries the InstanceChange for the specified instance change id.\n *\n * See also\n * - `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema\n * - [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeId ECInstanceId of the InstanceChange (see `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema)\n * @returns Returns the requested InstanceChange object (see `ECDbChange.InstanceChange` ECClass in the *ECDbChange* ECSchema)\n * @throws [IModelError]($common) if instance change does not exist for the specified id, or if the\n * change cache file hasn't been attached, or in case of other errors.\n */\n public static queryInstanceChange(iModel: BriefcaseDb, instanceChangeId: Id64String): InstanceChange {\n if (!ChangeSummaryManager.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadArg, \"Change Cache file must be attached to iModel.\");\n\n // query instance changes\n const instanceChange: InstanceChange = iModel.withPreparedStatement(`SELECT ic.Summary.Id summaryId, s.Name changedInstanceSchemaName, c.Name changedInstanceClassName, ic.ChangedInstance.Id changedInstanceId,\n ic.OpCode, ic.IsIndirect FROM ecchange.change.InstanceChange ic JOIN main.meta.ECClassDef c ON c.ECInstanceId = ic.ChangedInstance.ClassId\n JOIN main.meta.ECSchemaDef s ON c.Schema.Id = s.ECInstanceId WHERE ic.ECInstanceId =? `, (stmt: ECSqlStatement) => {\n stmt.bindId(1, instanceChangeId);\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(IModelStatus.BadArg, `No InstanceChange found for id ${instanceChangeId}.`);\n\n const row = stmt.getRow();\n const changedInstanceId: Id64String = row.changedInstanceId;\n const changedInstanceClassName: string = `[${row.changedInstanceSchemaName}].[${row.changedInstanceClassName}]`;\n const op: ChangeOpCode = row.opCode as ChangeOpCode;\n\n return {\n id: instanceChangeId, summaryId: row.summaryId, changedInstance: { id: changedInstanceId, className: changedInstanceClassName },\n opCode: op, isIndirect: row.isIndirect,\n };\n });\n\n return instanceChange;\n }\n\n /** Retrieves the names of the properties whose values have changed for the given instance change\n *\n * See also [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeId Id of the InstanceChange to query the properties whose values have changed\n * @returns Returns names of the properties whose values have changed for the given instance change\n * @throws [IModelError]($common) if the change cache file hasn't been attached, or in case of other errors.\n */\n public static getChangedPropertyValueNames(iModel: IModelDb, instanceChangeId: Id64String): string[] {\n return iModel.withPreparedStatement(\"SELECT AccessString FROM ecchange.change.PropertyValueChange WHERE InstanceChange.Id=?\",\n (stmt: ECSqlStatement) => {\n stmt.bindId(1, instanceChangeId);\n\n const selectClauseItems: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n // access string tokens need to be escaped as they might collide with reserved words in ECSQL or SQLite\n const accessString: string = stmt.getValue(0).getString();\n const accessStringTokens: string[] = accessString.split(\".\");\n assert(accessStringTokens.length > 0);\n\n let isFirstToken: boolean = true;\n let item: string = \"\";\n for (const token of accessStringTokens) {\n if (!isFirstToken)\n item += \".\";\n\n item += `[${token}]`;\n isFirstToken = false;\n }\n selectClauseItems.push(item);\n }\n\n return selectClauseItems;\n });\n }\n\n /** Builds the ECSQL to query the property value changes for the specified instance change and the specified ChangedValueState.\n *\n * See also [Change Summary Overview]($docs/learning/ChangeSummaries)\n * @param iModel iModel\n * @param instanceChangeInfo InstanceChange to query the property value changes for\n * changedInstance.className must be fully qualified and schema and class name must be escaped with square brackets if they collide with reserved ECSQL words: `[schema name].[class name]`\n * @param changedValueState The Changed State to query the values for. This must correspond to the [InstanceChange.OpCode]($backend) of the InstanceChange.\n * @param changedPropertyNames List of the property names for which values have changed for the specified instance change.\n * The list can be obtained by calling [ChangeSummaryManager.getChangedPropertyValueNames]($core-backend).\n * If omitted, the method will call the above method by itself. The parameter allows for checking first whether\n * an instance change has any property value changes at all. If there are no property value changes, this method\n * should not be called, as it will throw an error.\n * @returns Returns the ECSQL that will retrieve the property value changes\n * @throws [IModelError]($common) if instance change does not exist, if there are not property value changes for the instance change,\n * if the change cache file hasn't been attached, or in case of other errors.\n */\n public static buildPropertyValueChangesECSql(iModel: IModelDb, instanceChangeInfo: { id: Id64String, summaryId: Id64String, changedInstance: { id: Id64String, className: string } }, changedValueState: ChangedValueState, changedPropertyNames?: string[]): string {\n let selectClauseItems: string[];\n if (!changedPropertyNames) {\n // query property value changes just to build a SELECT statement against the class of the changed instance\n selectClauseItems = ChangeSummaryManager.getChangedPropertyValueNames(iModel, instanceChangeInfo.id);\n } else\n selectClauseItems = changedPropertyNames;\n\n if (selectClauseItems.length === 0)\n throw new IModelError(IModelStatus.BadArg, `No property value changes found for InstanceChange ${instanceChangeInfo.id}.`);\n\n let ecsql: string = \"SELECT \";\n selectClauseItems.map((item: string, index: number) => {\n if (index !== 0)\n ecsql += \",\";\n\n ecsql += item;\n });\n\n // Avoiding parameters in the Changes function speeds up performance because ECDb can do optimizations\n // if it knows the function args at prepare time\n ecsql += ` FROM main.${instanceChangeInfo.changedInstance.className}.Changes(${instanceChangeInfo.summaryId},${changedValueState}) WHERE ECInstanceId=${instanceChangeInfo.changedInstance.id}`;\n return ecsql;\n }\n\n /**\n * Creates a change summary for the last applied change set to the iModel\n * @param accessToken A valid access token string\n * @param iModel iModel to extract change summaries for. The iModel must not be a standalone iModel, and must have at least one change set applied to it.\n * @returns The id of the extracted change summary.\n * @beta\n */\n public static async createChangeSummary(accessToken: AccessToken, iModel: BriefcaseDb): Promise<Id64String> {\n if (!iModel?.isOpen)\n throw new IModelError(IModelStatus.BadRequest, \"Briefcase must be open\");\n const changesetId = iModel.changeset.id;\n if (!changesetId)\n throw new IModelError(IModelStatus.BadRequest, \"No change set was applied to the iModel\");\n if (this.isChangeCacheAttached(iModel))\n throw new IModelError(IModelStatus.BadRequest, \"Change cache must be detached before extraction\");\n\n const iModelId = iModel.iModelId;\n const changesetsFolder: string = BriefcaseManager.getChangeSetsPath(iModelId);\n const changeset = await IModelHost.hubAccess.downloadChangeset({ accessToken: IModelHost.authorizationClient ? undefined : accessToken, iModelId, changeset: { id: iModel.changeset.id }, targetDir: changesetsFolder });\n\n if (!IModelJsFs.existsSync(changeset.pathname))\n throw new IModelError(IModelStatus.FileNotFound, `Failed to download change set: ${changeset.pathname}`);\n\n try {\n using changesFile = ChangeSummaryManager.openOrCreateChangesFile(iModel);\n assert(changesFile[_nativeDb] !== undefined, \"Invalid changesFile - should've caused an exception\");\n\n let changeSummaryId = ChangeSummaryManager.isSummaryAlreadyExtracted(changesFile, changesetId);\n if (changeSummaryId !== undefined) {\n Logger.logInfo(loggerCategory, `Change Summary for changeset already exists. It is not extracted again.`, () => ({ iModelId, changeSetId: changesetId }));\n return changeSummaryId;\n }\n\n const stat = iModel[_nativeDb].extractChangeSummary(changesFile[_nativeDb], changeset.pathname);\n if (stat.error && stat.error.status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(stat.error.status, stat.error.message);\n\n assert(undefined !== stat.result);\n changeSummaryId = stat.result;\n ChangeSummaryManager.addExtendedInfos(changesFile, changeSummaryId, changesetId, changeset.parentId, changeset.description, changeset.pushDate, changeset.userCreated);\n\n changesFile.saveChanges();\n return changeSummaryId;\n } finally {\n IModelJsFs.unlinkSync(changeset.pathname);\n }\n }\n\n /**\n * Creates change summaries for the specified iModel and a specified range of versions\n * @note This may be an expensive operation - downloads the first version and starts applying the change sets, extracting summaries one by one\n * @param args Arguments including the range of versions for which Change Summaries are to be created, and other necessary input for creation\n */\n public static async createChangeSummaries(args: CreateChangeSummaryArgs): Promise<Id64String[]> {\n // if we pass undefined to hubAccess methods they will use our authorizationClient to refresh the token as needed.\n const accessToken = IModelHost.authorizationClient ? undefined : args.accessToken ?? \"\";\n const { iModelId, iTwinId, range } = args;\n range.end = range.end ?? (await IModelHost.hubAccess.getChangesetFromVersion({ accessToken, iModelId, version: IModelVersion.latest() })).index;\n if (range.first > range.end)\n throw new IModelError(IModelStatus.BadArg, \"Invalid range of changesets\");\n if (range.first === 0 && range.end === 0)\n return []; // no changesets exist, so the inclusive range is empty\n\n const changesets = await IModelHost.hubAccess.queryChangesets({ accessToken, iModelId, range });\n\n // Setup a temporary briefcase to help with extracting change summaries\n const briefcasePath = BriefcaseManager.getBriefcaseBasePath(iModelId);\n const fileName: string = path.join(briefcasePath, `ChangeSummaryBriefcase.bim`);\n if (IModelJsFs.existsSync(fileName))\n IModelJsFs.removeSync(fileName);\n\n let iModel: BriefcaseDb | undefined;\n try {\n // Download a version that has the first change set applied\n const props = await BriefcaseManager.downloadBriefcase({ accessToken, iTwinId, iModelId, asOf: { afterChangeSetId: changesets[0].id }, briefcaseId: 0, fileName });\n iModel = await BriefcaseDb.open({ fileName: props.fileName });\n\n const summaryIds = new Array<Id64String>();\n for (let index = 0; index < changesets.length; index++) {\n // Apply a change set if necessary\n if (index > 0)\n await iModel.pullChanges({ accessToken, toIndex: changesets[index].index });\n\n // Create a change summary for the last change set that was applied\n const summaryId = await this.createChangeSummary(accessToken ?? await IModelHost.authorizationClient?.getAccessToken() ?? \"\", iModel);\n summaryIds.push(summaryId);\n }\n return summaryIds;\n } finally {\n if (iModel !== undefined)\n iModel.close();\n IModelJsFs.removeSync(fileName);\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module ChangedElementsDb
3
3
  */
4
- import { AccessToken, DbResult, IDisposable } from "@itwin/core-bentley";
4
+ import { AccessToken, DbResult } from "@itwin/core-bentley";
5
5
  import { ChangeData, ChangedElements, ChangedModels } from "@itwin/core-common";
6
6
  import { IModelJsNative } from "@bentley/imodeljs-native";
7
7
  import { ECDbOpenMode } from "./ECDb";
@@ -27,10 +27,10 @@ export interface ProcessChangesetOptions {
27
27
  /** An ChangedElementsDb file
28
28
  * @internal
29
29
  */
30
- export declare class ChangedElementsDb implements IDisposable {
30
+ export declare class ChangedElementsDb implements Disposable {
31
31
  private _nativeDb;
32
32
  constructor();
33
- dispose(): void;
33
+ [Symbol.dispose](): void;
34
34
  /** Create a ChangedElementsDb
35
35
  * @param pathName The path to the ECDb file to create.
36
36
  * @throws [IModelError]($common) if the operation failed.
@@ -1 +1 @@
1
- {"version":3,"file":"ChangedElementsDb.d.ts","sourceRoot":"","sources":["../../src/ChangedElementsDb.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAA0B,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKtC;;;KAGK;AACL,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,SAAS,CAAiD;;IAM3D,OAAO,IAAI,IAAI;IAStB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAQf;;;;OAIG;WACW,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAoC,GAAG,iBAAiB;IAMzG;;;;OAIG;WACW,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAMhF;;;OAGG;IACU,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBlI;;;;OAIG;IACU,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiCzI;;;;;OAKG;IACI,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAOxG;;;;;OAKG;IACI,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAOpG;;;;;OAKG;IACI,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAO9F,sDAAsD;IACtD,IAAW,MAAM,IAAI,OAAO,CAAmC;IAE/D,mEAAmE;IAC5D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAEhD;;OAEG;IACI,OAAO,IAAI,IAAI;IAIf,WAAW,IAAI,IAAI;IAI1B,gBAAgB;IAChB,IAAW,QAAQ,IAAI,cAAc,CAAC,mBAAmB,CAKxD;CACF"}
1
+ {"version":3,"file":"ChangedElementsDb.d.ts","sourceRoot":"","sources":["../../src/ChangedElementsDb.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAA0B,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKtC;;;KAGK;AACL,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAClD,OAAO,CAAC,SAAS,CAAiD;;IAM3D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAS/B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAQf;;;;OAIG;WACW,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAoC,GAAG,iBAAiB;IAMzG;;;;OAIG;WACW,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAMhF;;;OAGG;IACU,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBlI;;;;OAIG;IACU,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiCzI;;;;;OAKG;IACI,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAOxG;;;;;OAKG;IACI,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAOpG;;;;;OAKG;IACI,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAO9F,sDAAsD;IACtD,IAAW,MAAM,IAAI,OAAO,CAAmC;IAE/D,mEAAmE;IAC5D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAEhD;;OAEG;IACI,OAAO,IAAI,IAAI;IAIf,WAAW,IAAI,IAAI;IAI1B,gBAAgB;IAChB,IAAW,QAAQ,IAAI,cAAc,CAAC,mBAAmB,CAKxD;CACF"}
@@ -22,7 +22,7 @@ class ChangedElementsDb {
22
22
  constructor() {
23
23
  this._nativeDb = new NativePlatform_1.IModelNative.platform.ChangedElementsECDb();
24
24
  }
25
- dispose() {
25
+ [Symbol.dispose]() {
26
26
  if (!this._nativeDb)
27
27
  return;
28
28
  this.closeDb();
@@ -1 +1 @@
1
- {"version":3,"file":"ChangedElementsDb.js","sourceRoot":"","sources":["../../src/ChangedElementsDb.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/** @packageDocumentation\n * @module ChangedElementsDb\n */\n\nimport { AccessToken, DbResult, IDisposable, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\nimport { ChangeData, ChangedElements, ChangedModels, IModelError } from \"@itwin/core-common\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { ECDbOpenMode } from \"./ECDb\";\nimport { IModelDb } from \"./IModelDb\";\nimport { IModelHost } from \"./IModelHost\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/**\n * Options for processChangesets function\n * @internal\n * */\nexport interface ProcessChangesetOptions {\n startChangesetId: string;\n endChangesetId: string;\n rulesetId: string;\n filterSpatial?: boolean;\n wantParents?: boolean;\n wantPropertyChecksums?: boolean;\n rulesetDir?: string;\n tempDir?: string;\n wantRelationshipCaching?: boolean;\n relationshipCacheSize?: number;\n wantChunkTraversal?: boolean;\n wantBoundingBoxes?: boolean;\n}\n\n/** An ChangedElementsDb file\n * @internal\n */\nexport class ChangedElementsDb implements IDisposable {\n private _nativeDb: IModelJsNative.ChangedElementsECDb | undefined;\n\n constructor() {\n this._nativeDb = new IModelNative.platform.ChangedElementsECDb();\n }\n\n public dispose(): void {\n if (!this._nativeDb)\n return;\n\n this.closeDb();\n this._nativeDb.dispose();\n this._nativeDb = undefined;\n }\n\n /** Create a ChangedElementsDb\n * @param pathName The path to the ECDb file to create.\n * @throws [IModelError]($common) if the operation failed.\n */\n private _createDb(briefcase: IModelDb, pathName: string): void {\n const status: DbResult = this.nativeDb.createDb(briefcase[_nativeDb], pathName);\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to created ECDb\");\n }\n\n /** Open the Changed Elements Db.\n * @param pathName The path to the ECDb file to open\n * @param openMode Open mode\n * @throws [IModelError]($common) if the operation failed.\n */\n private _openDb(pathName: string, openMode: ECDbOpenMode = ECDbOpenMode.Readonly): void {\n const nativeOpenMode = openMode === ECDbOpenMode.Readonly ? OpenMode.Readonly : OpenMode.ReadWrite;\n const tryUpgrade = openMode === ECDbOpenMode.FileUpgrade;\n const status = this.nativeDb.openDb(pathName, nativeOpenMode, tryUpgrade);\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to open ECDb\");\n }\n\n /** Open the Changed Elements Db.\n * @param pathName The path to the ECDb file to open\n * @param openMode Open mode\n * @returns ChangedElementsDb\n */\n public static openDb(pathName: string, openMode: ECDbOpenMode = ECDbOpenMode.Readonly): ChangedElementsDb {\n const cacheDb = new ChangedElementsDb();\n cacheDb._openDb(pathName, openMode);\n return cacheDb;\n }\n\n /** Create the changed elements cache db\n * @param briefcase IModelDb to use\n * @param pathName The path to the ECDb file to create.\n * @returns The new cache db\n */\n public static createDb(briefcase: IModelDb, pathName: string): ChangedElementsDb {\n const cacheDb = new ChangedElementsDb();\n cacheDb._createDb(briefcase, pathName);\n return cacheDb;\n }\n\n /** Processes a range of changesets and adds it to the changed elements cache\n * @param briefcase iModel briefcase to use\n * @param options Options for processing\n */\n public async processChangesets(accessToken: AccessToken, briefcase: IModelDb, options: ProcessChangesetOptions): Promise<DbResult> {\n const iModelId = briefcase.iModelId;\n const first = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.startChangesetId }, accessToken })).index;\n const end = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.endChangesetId }, accessToken })).index;\n const changesets = await IModelHost.hubAccess.downloadChangesets({ accessToken, iModelId, range: { first, end }, targetDir: BriefcaseManager.getChangeSetsPath(iModelId) });\n\n // ChangeSets need to be processed from newest to oldest\n changesets.reverse();\n const status = this.nativeDb.processChangesets(\n briefcase[_nativeDb],\n changesets,\n options.rulesetId,\n options.filterSpatial,\n options.wantParents,\n options.wantPropertyChecksums,\n options.rulesetDir,\n options.tempDir,\n options.wantChunkTraversal,\n );\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to process changesets\");\n return status;\n }\n\n /** Processes a range of changesets and adds it to the changed elements cache\n * This call will close the IModelDb object as it is required for processing and applying changesets\n * @param briefcase iModel briefcase to use\n * @param options options for processing\n */\n public async processChangesetsAndRoll(accessToken: AccessToken, briefcase: IModelDb, options: ProcessChangesetOptions): Promise<DbResult> {\n const iModelId = briefcase.iModelId;\n const first = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.startChangesetId }, accessToken })).index;\n const end = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.endChangesetId }, accessToken })).index;\n const changesets = await IModelHost.hubAccess.downloadChangesets({ accessToken, iModelId, range: { first, end }, targetDir: BriefcaseManager.getChangeSetsPath(iModelId) });\n\n // ChangeSets need to be processed from newest to oldest\n changesets.reverse();\n // Close briefcase before doing processing and rolling briefcase\n const dbFilename = briefcase.pathName;\n const dbGuid = briefcase.iModelId;\n briefcase.close();\n // Process changesets\n const status = this.nativeDb.processChangesetsAndRoll(\n dbFilename,\n dbGuid,\n changesets,\n options.rulesetId,\n options.filterSpatial,\n options.wantParents,\n options.wantPropertyChecksums,\n options.rulesetDir,\n options.tempDir,\n options.wantRelationshipCaching,\n options.relationshipCacheSize,\n options.wantChunkTraversal,\n options.wantBoundingBoxes,\n );\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to process changesets\");\n return status;\n }\n\n /** Get changed elements between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed elements between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangedElements(startChangesetId: string, endChangesetId: string): ChangedElements | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error || !result.result)\n throw new IModelError(result.error ? result.error.status : -1, result.error ? result.error.message : \"Problem getting changed elements\");\n return (result.result.changedElements) as ChangedElements;\n }\n\n /** Get changed models between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed models between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangedModels(startChangesetId: string, endChangesetId: string): ChangedModels | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error || !result.result)\n throw new IModelError(result.error ? result.error.status : -1, result.error ? result.error.message : \"Problem getting changed models\");\n return (result.result.changedModels) as ChangedModels;\n }\n\n /** Get changed models between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed models between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangeData(startChangesetId: string, endChangesetId: string): ChangeData | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error)\n throw new IModelError(result.error.status, result.error.message);\n return result.result as ChangeData;\n }\n\n /** Returns true if the Changed Elements Db is open */\n public get isOpen(): boolean { return this.nativeDb.isOpen(); }\n\n /** Returns true if the cache already contains this changeset Id */\n public isProcessed(changesetId: string): boolean { return this.nativeDb.isProcessed(changesetId); }\n\n /** Close the Db after saving any uncommitted changes.\n * @throws [IModelError]($common) if the database is not open.\n */\n public closeDb(): void {\n this.nativeDb.closeDb();\n }\n\n public cleanCaches(): void {\n this.nativeDb.cleanCaches();\n }\n\n /** @internal */\n public get nativeDb(): IModelJsNative.ChangedElementsECDb {\n if (!this._nativeDb)\n throw new IModelError(IModelStatus.BadRequest, \"ChangedElementsDb object has already been disposed.\");\n\n return this._nativeDb;\n }\n}\n"]}
1
+ {"version":3,"file":"ChangedElementsDb.js","sourceRoot":"","sources":["../../src/ChangedElementsDb.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/** @packageDocumentation\n * @module ChangedElementsDb\n */\n\nimport { AccessToken, DbResult, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\nimport { ChangeData, ChangedElements, ChangedModels, IModelError } from \"@itwin/core-common\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { ECDbOpenMode } from \"./ECDb\";\nimport { IModelDb } from \"./IModelDb\";\nimport { IModelHost } from \"./IModelHost\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/**\n * Options for processChangesets function\n * @internal\n * */\nexport interface ProcessChangesetOptions {\n startChangesetId: string;\n endChangesetId: string;\n rulesetId: string;\n filterSpatial?: boolean;\n wantParents?: boolean;\n wantPropertyChecksums?: boolean;\n rulesetDir?: string;\n tempDir?: string;\n wantRelationshipCaching?: boolean;\n relationshipCacheSize?: number;\n wantChunkTraversal?: boolean;\n wantBoundingBoxes?: boolean;\n}\n\n/** An ChangedElementsDb file\n * @internal\n */\nexport class ChangedElementsDb implements Disposable {\n private _nativeDb: IModelJsNative.ChangedElementsECDb | undefined;\n\n constructor() {\n this._nativeDb = new IModelNative.platform.ChangedElementsECDb();\n }\n\n public [Symbol.dispose](): void {\n if (!this._nativeDb)\n return;\n\n this.closeDb();\n this._nativeDb.dispose();\n this._nativeDb = undefined;\n }\n\n /** Create a ChangedElementsDb\n * @param pathName The path to the ECDb file to create.\n * @throws [IModelError]($common) if the operation failed.\n */\n private _createDb(briefcase: IModelDb, pathName: string): void {\n const status: DbResult = this.nativeDb.createDb(briefcase[_nativeDb], pathName);\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to created ECDb\");\n }\n\n /** Open the Changed Elements Db.\n * @param pathName The path to the ECDb file to open\n * @param openMode Open mode\n * @throws [IModelError]($common) if the operation failed.\n */\n private _openDb(pathName: string, openMode: ECDbOpenMode = ECDbOpenMode.Readonly): void {\n const nativeOpenMode = openMode === ECDbOpenMode.Readonly ? OpenMode.Readonly : OpenMode.ReadWrite;\n const tryUpgrade = openMode === ECDbOpenMode.FileUpgrade;\n const status = this.nativeDb.openDb(pathName, nativeOpenMode, tryUpgrade);\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to open ECDb\");\n }\n\n /** Open the Changed Elements Db.\n * @param pathName The path to the ECDb file to open\n * @param openMode Open mode\n * @returns ChangedElementsDb\n */\n public static openDb(pathName: string, openMode: ECDbOpenMode = ECDbOpenMode.Readonly): ChangedElementsDb {\n const cacheDb = new ChangedElementsDb();\n cacheDb._openDb(pathName, openMode);\n return cacheDb;\n }\n\n /** Create the changed elements cache db\n * @param briefcase IModelDb to use\n * @param pathName The path to the ECDb file to create.\n * @returns The new cache db\n */\n public static createDb(briefcase: IModelDb, pathName: string): ChangedElementsDb {\n const cacheDb = new ChangedElementsDb();\n cacheDb._createDb(briefcase, pathName);\n return cacheDb;\n }\n\n /** Processes a range of changesets and adds it to the changed elements cache\n * @param briefcase iModel briefcase to use\n * @param options Options for processing\n */\n public async processChangesets(accessToken: AccessToken, briefcase: IModelDb, options: ProcessChangesetOptions): Promise<DbResult> {\n const iModelId = briefcase.iModelId;\n const first = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.startChangesetId }, accessToken })).index;\n const end = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.endChangesetId }, accessToken })).index;\n const changesets = await IModelHost.hubAccess.downloadChangesets({ accessToken, iModelId, range: { first, end }, targetDir: BriefcaseManager.getChangeSetsPath(iModelId) });\n\n // ChangeSets need to be processed from newest to oldest\n changesets.reverse();\n const status = this.nativeDb.processChangesets(\n briefcase[_nativeDb],\n changesets,\n options.rulesetId,\n options.filterSpatial,\n options.wantParents,\n options.wantPropertyChecksums,\n options.rulesetDir,\n options.tempDir,\n options.wantChunkTraversal,\n );\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to process changesets\");\n return status;\n }\n\n /** Processes a range of changesets and adds it to the changed elements cache\n * This call will close the IModelDb object as it is required for processing and applying changesets\n * @param briefcase iModel briefcase to use\n * @param options options for processing\n */\n public async processChangesetsAndRoll(accessToken: AccessToken, briefcase: IModelDb, options: ProcessChangesetOptions): Promise<DbResult> {\n const iModelId = briefcase.iModelId;\n const first = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.startChangesetId }, accessToken })).index;\n const end = (await IModelHost.hubAccess.queryChangeset({ iModelId, changeset: { id: options.endChangesetId }, accessToken })).index;\n const changesets = await IModelHost.hubAccess.downloadChangesets({ accessToken, iModelId, range: { first, end }, targetDir: BriefcaseManager.getChangeSetsPath(iModelId) });\n\n // ChangeSets need to be processed from newest to oldest\n changesets.reverse();\n // Close briefcase before doing processing and rolling briefcase\n const dbFilename = briefcase.pathName;\n const dbGuid = briefcase.iModelId;\n briefcase.close();\n // Process changesets\n const status = this.nativeDb.processChangesetsAndRoll(\n dbFilename,\n dbGuid,\n changesets,\n options.rulesetId,\n options.filterSpatial,\n options.wantParents,\n options.wantPropertyChecksums,\n options.rulesetDir,\n options.tempDir,\n options.wantRelationshipCaching,\n options.relationshipCacheSize,\n options.wantChunkTraversal,\n options.wantBoundingBoxes,\n );\n if (status !== DbResult.BE_SQLITE_OK)\n throw new IModelError(status, \"Failed to process changesets\");\n return status;\n }\n\n /** Get changed elements between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed elements between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangedElements(startChangesetId: string, endChangesetId: string): ChangedElements | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error || !result.result)\n throw new IModelError(result.error ? result.error.status : -1, result.error ? result.error.message : \"Problem getting changed elements\");\n return (result.result.changedElements) as ChangedElements;\n }\n\n /** Get changed models between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed models between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangedModels(startChangesetId: string, endChangesetId: string): ChangedModels | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error || !result.result)\n throw new IModelError(result.error ? result.error.status : -1, result.error ? result.error.message : \"Problem getting changed models\");\n return (result.result.changedModels) as ChangedModels;\n }\n\n /** Get changed models between two changesets\n * @param startChangesetId Start Changeset Id\n * @param endChangesetId End Changeset Id\n * @returns Returns the changed models between the changesets provided\n * @throws [IModelError]($common) if the operation failed.\n */\n public getChangeData(startChangesetId: string, endChangesetId: string): ChangeData | undefined {\n const result = this.nativeDb.getChangedElements(startChangesetId, endChangesetId);\n if (result.error)\n throw new IModelError(result.error.status, result.error.message);\n return result.result as ChangeData;\n }\n\n /** Returns true if the Changed Elements Db is open */\n public get isOpen(): boolean { return this.nativeDb.isOpen(); }\n\n /** Returns true if the cache already contains this changeset Id */\n public isProcessed(changesetId: string): boolean { return this.nativeDb.isProcessed(changesetId); }\n\n /** Close the Db after saving any uncommitted changes.\n * @throws [IModelError]($common) if the database is not open.\n */\n public closeDb(): void {\n this.nativeDb.closeDb();\n }\n\n public cleanCaches(): void {\n this.nativeDb.cleanCaches();\n }\n\n /** @internal */\n public get nativeDb(): IModelJsNative.ChangedElementsECDb {\n if (!this._nativeDb)\n throw new IModelError(IModelStatus.BadRequest, \"ChangedElementsDb object has already been disposed.\");\n\n return this._nativeDb;\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module ECDb
3
3
  */
4
- import { Id64String, IDisposable } from "@itwin/core-bentley";
4
+ import { Id64String } from "@itwin/core-bentley";
5
5
  import { SqliteChangeOp, SqliteChangesetReader, SqliteValueStage } from "./SqliteChangesetReader";
6
6
  /**
7
7
  * Record meta data for the change.
@@ -83,7 +83,7 @@ export declare class PartialECChangeUnifier {
83
83
  * @beta
84
84
  *
85
85
  */
86
- export declare class ChangesetECAdaptor implements IDisposable {
86
+ export declare class ChangesetECAdaptor implements Disposable {
87
87
  readonly reader: SqliteChangesetReader;
88
88
  readonly disableMetaData: boolean;
89
89
  private readonly _mapCache;
@@ -141,7 +141,7 @@ export declare class ChangesetECAdaptor implements IDisposable {
141
141
  /**
142
142
  * dispose current instance and it will also dispose the changeset reader.
143
143
  */
144
- dispose(): void;
144
+ [Symbol.dispose](): void;
145
145
  /**
146
146
  * close current instance and it will also close the changeset reader.
147
147
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ChangesetECAdaptor.d.ts","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChangesetECAdaptor.d.ts","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"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"}
@@ -544,7 +544,7 @@ class ChangesetECAdaptor {
544
544
  /**
545
545
  * dispose current instance and it will also dispose the changeset reader.
546
546
  */
547
- dispose() {
547
+ [Symbol.dispose]() {
548
548
  this.close();
549
549
  }
550
550
  /**