@itwin/core-backend 4.10.0-dev.3 → 4.10.0-dev.30
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.
- package/CHANGELOG.md +40 -1
- package/lib/cjs/BlobContainerService.d.ts +1 -1
- package/lib/cjs/BlobContainerService.d.ts.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/ChangedElementsManager.d.ts +4 -2
- package/lib/cjs/ChangedElementsManager.d.ts.map +1 -1
- package/lib/cjs/ChangedElementsManager.js +4 -2
- package/lib/cjs/ChangedElementsManager.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +0 -2
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +23 -0
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +5 -4
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +17 -22
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +7 -0
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +10 -2
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +4 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +2 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/Model.d.ts +14 -0
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +28 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NavigationRelationship.d.ts +28 -0
- package/lib/cjs/NavigationRelationship.d.ts.map +1 -1
- package/lib/cjs/NavigationRelationship.js +41 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +148 -0
- package/lib/cjs/SheetIndex.d.ts.map +1 -0
- package/lib/cjs/SheetIndex.js +230 -0
- package/lib/cjs/SheetIndex.js.map +1 -0
- package/lib/cjs/SqliteChangesetReader.d.ts +9 -9
- package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js +12 -5
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/rpc/web/response.js +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -0
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +1 -0
- package/lib/cjs/rpc-impl/WipRpcImpl.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/WipRpcImpl.js +2 -0
- package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
- package/package.json +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
# Change Log - @itwin/core-backend
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 09 Oct 2024 20:23:41 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.9.4
|
|
6
|
+
Wed, 09 Oct 2024 20:22:04 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- fix regression related to classid
|
|
11
|
+
|
|
12
|
+
## 4.9.3
|
|
13
|
+
Thu, 03 Oct 2024 19:15:45 GMT
|
|
14
|
+
|
|
15
|
+
_Version update only_
|
|
16
|
+
|
|
17
|
+
## 4.9.2
|
|
18
|
+
Wed, 02 Oct 2024 15:14:43 GMT
|
|
19
|
+
|
|
20
|
+
_Version update only_
|
|
21
|
+
|
|
22
|
+
## 4.9.1
|
|
23
|
+
Wed, 25 Sep 2024 20:10:58 GMT
|
|
24
|
+
|
|
25
|
+
### Updates
|
|
26
|
+
|
|
27
|
+
- Removed added tests for boolean exps in select statement
|
|
28
|
+
|
|
29
|
+
## 4.9.0
|
|
30
|
+
Mon, 23 Sep 2024 13:44:01 GMT
|
|
31
|
+
|
|
32
|
+
### Updates
|
|
33
|
+
|
|
34
|
+
- Added tests cases as we now support boolean exps in select statements
|
|
35
|
+
- Added support for CTE in subquery for the command "PRAGMA parseTree"
|
|
36
|
+
- Added support for CTE without columns and also for insert statement to use ONLY keyword
|
|
37
|
+
- Add openGroup() and writeToFile to sqliteChagnesetReader
|
|
38
|
+
- Exposing a new function `computeGraphemeOffsets` that calculates the grapheme offsets for a RunLayoutResult.
|
|
39
|
+
- set LogMask to ALl if CloudSqlite LoggerCatetory is Trace
|
|
40
|
+
- Optional base uri added to TokenProps interface
|
|
41
|
+
- base uri added to BlobContainer.TokenProps interface
|
|
42
|
+
- Newly created WorkspaceDbs will have version 0.0.0. All prerelease (0.x.x or x.x.x-identifier) WorkspaceDbs can be edited.
|
|
4
43
|
|
|
5
44
|
## 4.8.7
|
|
6
45
|
Fri, 13 Sep 2024 15:11:17 GMT
|
|
@@ -94,7 +94,7 @@ export declare namespace BlobContainer {
|
|
|
94
94
|
*/
|
|
95
95
|
type RequestAccessLevel = "write" | "read" | "admin" | "writeIfPossible";
|
|
96
96
|
/** Information required to request an access token for a container. */
|
|
97
|
-
interface RequestTokenProps extends AccessContainerProps {
|
|
97
|
+
interface RequestTokenProps extends Omit<AccessContainerProps, "baseUri"> {
|
|
98
98
|
/** the level of access requested. If not specified, defaults to `"writeIfPossible"`. */
|
|
99
99
|
accessLevel?: RequestAccessLevel;
|
|
100
100
|
/** the number of seconds before the token should expire.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlobContainerService.d.ts","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;GAGG;AACH,yBAAiB,aAAa,CAAC;IAE7B,+FAA+F;IACxF,IAAI,OAAO,EAAE,aAAa,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAE/D,8CAA8C;IAC9C,KAAY,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE1C,mDAAmD;IACnD,KAAY,WAAW,GAAG,MAAM,CAAC;IAEjC,4FAA4F;IAC5F,KAAY,SAAS,GAAG,WAAW,CAAC;IAEpC,+EAA+E;IAC/E,KAAY,cAAc,GAAG,WAAW,CAAC;IAEzC;;;;;;;;OAQG;IACH,UAAiB,KAAK;QACpB,8CAA8C;QAC9C,OAAO,EAAE,UAAU,CAAC;QACpB,6GAA6G;QAC7G,QAAQ,CAAC,EAAE,UAAU,CAAC;QACtB,iEAAiE;QACjE,SAAS,CAAC,EAAE,UAAU,CAAC;KACxB;IAED;;;;;;OAMG;IACH,UAAiB,QAAQ;QACvB,yIAAyI;QACzI,aAAa,EAAE,MAAM,CAAC;QACtB,qJAAqJ;QACrJ,KAAK,EAAE,MAAM,CAAC;QACd,kKAAkK;QAClK,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,4CAA4C;QAC5C,IAAI,CAAC,EAAE,iBAAiB,CAAC;KAC1B;IAED,oDAAoD;IACpD,UAAiB,UAAU;QACzB;;;WAGG;QACH,KAAK,EAAE,cAAc,CAAC;QACtB,8BAA8B;QAC9B,KAAK,EAAE,KAAK,CAAC;QACb,yCAAyC;QACzC,QAAQ,EAAE,QAAQ,CAAC;QACnB,sIAAsI;QACtI,UAAU,EAAE,IAAI,CAAC;QACjB,iCAAiC;QACjC,QAAQ,EAAE,QAAQ,CAAC;QACnB,4BAA4B;QAC5B,OAAO,EAAE,MAAM,CAAC;KACjB;IAED,uCAAuC;IACvC,UAAiB,QAAQ;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,WAAW,CAAC;KAC1B;IAED,4DAA4D;IAC5D,UAAiB,oBAAqB,SAAQ,QAAQ;QACpD,SAAS,EAAE,SAAS,CAAC;KACtB;IAED,mDAAmD;IACnD,UAAiB,qBAAsB,SAAQ,QAAQ;QACrD,yCAAyC;QACzC,QAAQ,EAAE,QAAQ,CAAC;KACpB;IAED;;;;;;;OAOG;IACH,KAAY,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,iBAAiB,CAAC;IAEhF,uEAAuE;IACvE,UAAiB,iBAAkB,SAAQ,oBAAoB;
|
|
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,CAmJ7B;AAnJD,WAAiB,aAAa;AAmJ9B,CAAC,EAnJgB,aAAa,6BAAb,aAAa,QAmJ7B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module BlobContainers\r\n */\r\n\r\n// spell:ignore datacenter\r\n\r\nimport { AccessToken, GuidString, Id64String } from \"@itwin/core-bentley\";\r\nimport { SettingsContainer } from \"./workspace/Settings\";\r\n\r\n/**\r\n * Types and functions for creating, deleting and authorizing access to cloud-based blob containers for an iTwin.\r\n * @beta\r\n */\r\nexport namespace BlobContainer {\r\n\r\n /** Object that implements the methods to create, delete, and request access to a container. */\r\n export let service: BlobContainer.ContainerService | undefined;\r\n\r\n /** name of cloud provider for a container. */\r\n export type Provider = \"azure\" | \"google\";\r\n\r\n /** the name of the container within its `Scope` */\r\n export type ContainerId = string;\r\n\r\n /** token that authenticates a user. This token is required to obtain a `ContainerToken`. */\r\n export type UserToken = AccessToken;\r\n\r\n /** token that authenticates access to a container for either read or write. */\r\n export type ContainerToken = AccessToken;\r\n\r\n /**\r\n * The scope for a container. This determines:\r\n * - the \"owner\" organization, including the contract that governs its legal and commercial terms and obligations\r\n * - the administrators who may configure RBAC permissions\r\n * - the datacenter for the container. Every container resides in a datacenter as determined by the iTwinId. This\r\n * determines the region for data residency requirements.\r\n * - the lifecycle constraints for the container. No container can outlive its iTwin or its iModel (if defined). That is,\r\n * when the iTwin/iModel is deleted (either explicitly or due to contract expiration), the container is also deleted.\r\n */\r\n export interface Scope {\r\n /** iTwinId of the owner of this container. */\r\n iTwinId: Id64String;\r\n /** optionally, an iModelId within the iTwin. If present, container is deleted when the iModel is deleted. */\r\n iModelId?: Id64String;\r\n /** the user GUID an individual, if this container is private. */\r\n ownerGuid?: GuidString;\r\n }\r\n\r\n /**\r\n * Metadata about the use of a container so that:\r\n * - administrators can understand why a container exists for assigning RBAC permissions appropriately\r\n * - usage reports can aggregate types of containers\r\n * - applications can identify their containers\r\n * - applications can store properties about their containers\r\n */\r\n export interface Metadata {\r\n /** The machine-readable string that describes what the container is being used for (e.g. \"workspace\"). Always lowercase and singular. */\r\n containerType: string;\r\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.*/\r\n label: string;\r\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. */\r\n description?: string;\r\n /** optional properties for the container */\r\n json?: SettingsContainer;\r\n }\r\n\r\n /** Properties returned by `Service.requestToken` */\r\n export interface TokenProps {\r\n /**\r\n * expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,\r\n * and must be refreshed before it expires\r\n */\r\n token: ContainerToken;\r\n /** scope of the container. */\r\n scope: Scope;\r\n /** name of the blob storage provider. */\r\n provider: Provider;\r\n /** Time at which the token will expire. The token should be refreshed (that is, a new token should be requested) before this time. */\r\n expiration: Date;\r\n /** Metadata of the container. */\r\n metadata: Metadata;\r\n /** Base URI of container */\r\n baseUri: string;\r\n }\r\n\r\n /** The URI and Id of the container. */\r\n export interface UriAndId {\r\n baseUri: string;\r\n containerId: ContainerId;\r\n }\r\n\r\n /** Information required to access an existing container. */\r\n export interface AccessContainerProps extends UriAndId {\r\n userToken: UserToken;\r\n }\r\n\r\n /** Information about a newly created container. */\r\n export interface CreatedContainerProps extends UriAndId {\r\n /** name of the blob storage provider. */\r\n provider: Provider;\r\n }\r\n\r\n /**\r\n * Access level to request for token.\r\n * - `\"write\"`: request a writeable AccessToken.\r\n * - `\"read\"`: request a read-only AccessToken.\r\n * - `\"admin\"`: request a admin AccessToken.\r\n * - `\"writeIfPossible\"`: first request a writeable AccessToken. If the user is not authorized for write, request a read-only AccessToken.\r\n * If the user is not authorized for the level requested, an exception is thrown.\r\n */\r\n export type RequestAccessLevel = \"write\" | \"read\" | \"admin\" | \"writeIfPossible\";\r\n\r\n /** Information required to request an access token for a container. */\r\n export interface RequestTokenProps extends AccessContainerProps
|
|
1
|
+
{"version":3,"file":"BlobContainerService.js","sourceRoot":"","sources":["../../src/BlobContainerService.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAOH;;;GAGG;AACH,IAAiB,aAAa,CAmJ7B;AAnJD,WAAiB,aAAa;AAmJ9B,CAAC,EAnJgB,aAAa,6BAAb,aAAa,QAmJ7B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module BlobContainers\r\n */\r\n\r\n// spell:ignore datacenter\r\n\r\nimport { AccessToken, GuidString, Id64String } from \"@itwin/core-bentley\";\r\nimport { SettingsContainer } from \"./workspace/Settings\";\r\n\r\n/**\r\n * Types and functions for creating, deleting and authorizing access to cloud-based blob containers for an iTwin.\r\n * @beta\r\n */\r\nexport namespace BlobContainer {\r\n\r\n /** Object that implements the methods to create, delete, and request access to a container. */\r\n export let service: BlobContainer.ContainerService | undefined;\r\n\r\n /** name of cloud provider for a container. */\r\n export type Provider = \"azure\" | \"google\";\r\n\r\n /** the name of the container within its `Scope` */\r\n export type ContainerId = string;\r\n\r\n /** token that authenticates a user. This token is required to obtain a `ContainerToken`. */\r\n export type UserToken = AccessToken;\r\n\r\n /** token that authenticates access to a container for either read or write. */\r\n export type ContainerToken = AccessToken;\r\n\r\n /**\r\n * The scope for a container. This determines:\r\n * - the \"owner\" organization, including the contract that governs its legal and commercial terms and obligations\r\n * - the administrators who may configure RBAC permissions\r\n * - the datacenter for the container. Every container resides in a datacenter as determined by the iTwinId. This\r\n * determines the region for data residency requirements.\r\n * - the lifecycle constraints for the container. No container can outlive its iTwin or its iModel (if defined). That is,\r\n * when the iTwin/iModel is deleted (either explicitly or due to contract expiration), the container is also deleted.\r\n */\r\n export interface Scope {\r\n /** iTwinId of the owner of this container. */\r\n iTwinId: Id64String;\r\n /** optionally, an iModelId within the iTwin. If present, container is deleted when the iModel is deleted. */\r\n iModelId?: Id64String;\r\n /** the user GUID an individual, if this container is private. */\r\n ownerGuid?: GuidString;\r\n }\r\n\r\n /**\r\n * Metadata about the use of a container so that:\r\n * - administrators can understand why a container exists for assigning RBAC permissions appropriately\r\n * - usage reports can aggregate types of containers\r\n * - applications can identify their containers\r\n * - applications can store properties about their containers\r\n */\r\n export interface Metadata {\r\n /** The machine-readable string that describes what the container is being used for (e.g. \"workspace\"). Always lowercase and singular. */\r\n containerType: string;\r\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.*/\r\n label: string;\r\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. */\r\n description?: string;\r\n /** optional properties for the container */\r\n json?: SettingsContainer;\r\n }\r\n\r\n /** Properties returned by `Service.requestToken` */\r\n export interface TokenProps {\r\n /**\r\n * expiring token that provides the requested access to the container. Should be used in all subsequent requests for blobs within the container,\r\n * and must be refreshed before it expires\r\n */\r\n token: ContainerToken;\r\n /** scope of the container. */\r\n scope: Scope;\r\n /** name of the blob storage provider. */\r\n provider: Provider;\r\n /** Time at which the token will expire. The token should be refreshed (that is, a new token should be requested) before this time. */\r\n expiration: Date;\r\n /** Metadata of the container. */\r\n metadata: Metadata;\r\n /** Base URI of container */\r\n baseUri: string;\r\n }\r\n\r\n /** The URI and Id of the container. */\r\n export interface UriAndId {\r\n baseUri: string;\r\n containerId: ContainerId;\r\n }\r\n\r\n /** Information required to access an existing container. */\r\n export interface AccessContainerProps extends UriAndId {\r\n userToken: UserToken;\r\n }\r\n\r\n /** Information about a newly created container. */\r\n export interface CreatedContainerProps extends UriAndId {\r\n /** name of the blob storage provider. */\r\n provider: Provider;\r\n }\r\n\r\n /**\r\n * Access level to request for token.\r\n * - `\"write\"`: request a writeable AccessToken.\r\n * - `\"read\"`: request a read-only AccessToken.\r\n * - `\"admin\"`: request a admin AccessToken.\r\n * - `\"writeIfPossible\"`: first request a writeable AccessToken. If the user is not authorized for write, request a read-only AccessToken.\r\n * If the user is not authorized for the level requested, an exception is thrown.\r\n */\r\n export type RequestAccessLevel = \"write\" | \"read\" | \"admin\" | \"writeIfPossible\";\r\n\r\n /** Information required to request an access token for a container. */\r\n export interface RequestTokenProps extends Omit<AccessContainerProps,\"baseUri\"> {\r\n /** the level of access requested. If not specified, defaults to `\"writeIfPossible\"`. */\r\n accessLevel?: RequestAccessLevel;\r\n /** the number of seconds before the token should expire.\r\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.\r\n */\r\n durationSeconds?: number;\r\n }\r\n\r\n /** Information required to create a new container. */\r\n export interface CreateNewContainerProps {\r\n /** the scope of the new container */\r\n scope: Scope;\r\n /** metadata to be stored on the new container */\r\n metadata: Metadata;\r\n /** The user's access token. The user must be authorized with \"create container\" RBAC role for the iTwin. */\r\n userToken: UserToken;\r\n /**\r\n * the id for the container. Useful for tests.\r\n * @internal\r\n */\r\n containerId?: ContainerId;\r\n }\r\n\r\n /** Methods to create, delete, and access blob containers. */\r\n export interface ContainerService {\r\n /** Create a new blob container. Throws on failure (e.g. access denied or container already exists.) */\r\n create(props: CreateNewContainerProps): Promise<CreatedContainerProps>;\r\n\r\n /**\r\n * Delete an existing blob container.\r\n * @note This method requires that the user be authorized with \"delete container\" RBAC role for the iTwin.\r\n */\r\n delete(container: AccessContainerProps): Promise<void>;\r\n\r\n /** query the Scope for a container */\r\n queryScope(container: AccessContainerProps): Promise<Scope>;\r\n\r\n /** query the Metadata for a container */\r\n queryMetadata(container: AccessContainerProps): Promise<Metadata>;\r\n\r\n /** update the json properties of this container */\r\n updateJson(container: AccessContainerProps, json: SettingsContainer): Promise<void>;\r\n\r\n /** Request a `ContainerToken` for a container. Throws on failure. */\r\n requestToken(props: RequestTokenProps): Promise<TokenProps>;\r\n }\r\n}\r\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { GuidString } from "@itwin/core-bentley";
|
|
2
2
|
import { ChangeData, ChangedElements, ChangedModels } from "@itwin/core-common";
|
|
3
|
-
/** Utilities for querying changed elements caches
|
|
4
|
-
|
|
3
|
+
/** Utilities for querying changed elements caches
|
|
4
|
+
* @internal
|
|
5
|
+
* @deprecated in 4.10. Call methods on [[IModelDb]] instance directly.
|
|
6
|
+
*/
|
|
5
7
|
export declare class ChangedElementsManager {
|
|
6
8
|
/** Maintains a single entry since we will only have a cache per iModel, which means a ChangedElementsDb per backend instance */
|
|
7
9
|
private static _entry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangedElementsManager.d.ts","sourceRoot":"","sources":["../../src/ChangedElementsManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChangedElementsManager.d.ts","sourceRoot":"","sources":["../../src/ChangedElementsManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAahF;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,gIAAgI;IAChI,OAAO,CAAC,MAAM,CAAC,MAAM,CAA0C;WAEjD,0BAA0B,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM;IAEtE,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,oBAAoB;WAyBrB,OAAO;IAQrB;;;;;OAKG;WACW,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQrI;;;;;OAKG;WACW,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQjI;;;;;OAKG;WACW,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAQ3H;;;;OAIG;WACW,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAO9E"}
|
|
@@ -4,8 +4,10 @@ exports.ChangedElementsManager = void 0;
|
|
|
4
4
|
const BriefcaseManager_1 = require("./BriefcaseManager");
|
|
5
5
|
const ChangedElementsDb_1 = require("./ChangedElementsDb");
|
|
6
6
|
const IModelJsFs_1 = require("./IModelJsFs");
|
|
7
|
-
/** Utilities for querying changed elements caches
|
|
8
|
-
|
|
7
|
+
/** Utilities for querying changed elements caches
|
|
8
|
+
* @internal
|
|
9
|
+
* @deprecated in 4.10. Call methods on [[IModelDb]] instance directly.
|
|
10
|
+
*/
|
|
9
11
|
class ChangedElementsManager {
|
|
10
12
|
static getChangedElementsPathName(iModelId) { return BriefcaseManager_1.BriefcaseManager.getChangedElementsPathName(iModelId); }
|
|
11
13
|
/** Get changed elements Db */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangedElementsManager.js","sourceRoot":"","sources":["../../src/ChangedElementsManager.ts"],"names":[],"mappings":";;;AAMA,yDAAsD;AACtD,2DAAwD;AACxD,6CAA0C;
|
|
1
|
+
{"version":3,"file":"ChangedElementsManager.js","sourceRoot":"","sources":["../../src/ChangedElementsManager.ts"],"names":[],"mappings":";;;AAMA,yDAAsD;AACtD,2DAAwD;AACxD,6CAA0C;AAU1C;;;GAGG;AACH,MAAa,sBAAsB;IAI1B,MAAM,CAAC,0BAA0B,CAAC,QAAoB,IAAY,OAAO,mCAAgB,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExI,8BAA8B;IACtB,MAAM,CAAC,oBAAoB,CAAC,QAAoB;QACtD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,sBAAsB,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACzE,IAAI,CAAC,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC9B,OAAO,SAAS,CAAC;YAEnB,MAAM,EAAE,GAAsB,qCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,GAAG;gBACZ,QAAQ;gBACR,EAAE;aACH,CAAC;YAEF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,OAAO;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,kBAAkB,CAAC,QAAoB,EAAE,gBAAwB,EAAE,cAAsB;QACrG,MAAM,EAAE,GAAkC,sBAAsB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,EAAE;YACL,OAAO,SAAS,CAAC;QAEnB,OAAO,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,QAAoB,EAAE,gBAAwB,EAAE,cAAsB;QACnG,MAAM,EAAE,GAAkC,sBAAsB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,EAAE;YACL,OAAO,SAAS,CAAC;QAEnB,OAAO,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,aAAa,CAAC,QAAoB,EAAE,gBAAwB,EAAE,cAAsB;QAChG,MAAM,EAAE,GAAkC,sBAAsB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,EAAE;YACL,OAAO,SAAS,CAAC;QAEnB,OAAO,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,QAAoB,EAAE,WAAmB;QACjE,MAAM,EAAE,GAAkC,sBAAsB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,EAAE;YACL,OAAO,KAAK,CAAC;QAEf,OAAO,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;CACF;AA9FD,wDA8FC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { ChangeData, ChangedElements, ChangedModels } from \"@itwin/core-common\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { ChangedElementsDb } from \"./ChangedElementsDb\";\r\nimport { IModelJsFs } from \"./IModelJsFs\";\r\n\r\n/* eslint-disable deprecation/deprecation */\r\n\r\n/** @internal */\r\ninterface ChangedElementsDbCacheEntry {\r\n iModelId: GuidString;\r\n db: ChangedElementsDb;\r\n}\r\n\r\n/** Utilities for querying changed elements caches\r\n * @internal\r\n * @deprecated in 4.10. Call methods on [[IModelDb]] instance directly.\r\n */\r\nexport class ChangedElementsManager {\r\n /** Maintains a single entry since we will only have a cache per iModel, which means a ChangedElementsDb per backend instance */\r\n private static _entry: ChangedElementsDbCacheEntry | undefined;\r\n\r\n public static getChangedElementsPathName(iModelId: GuidString): string { return BriefcaseManager.getChangedElementsPathName(iModelId); }\r\n\r\n /** Get changed elements Db */\r\n private static getChangedElementsDb(iModelId: GuidString): ChangedElementsDb | undefined {\r\n if (this._entry && this._entry.iModelId === iModelId)\r\n return this._entry.db;\r\n if (this._entry && this._entry.iModelId !== iModelId) {\r\n this._entry.db.closeDb();\r\n this._entry.db.cleanCaches();\r\n this._entry = undefined;\r\n }\r\n if (!this._entry) {\r\n const path = ChangedElementsManager.getChangedElementsPathName(iModelId);\r\n if (!IModelJsFs.existsSync(path))\r\n return undefined;\r\n\r\n const db: ChangedElementsDb = ChangedElementsDb.openDb(path);\r\n this._entry = {\r\n iModelId,\r\n db,\r\n };\r\n\r\n return db;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public static cleanUp() {\r\n if (this._entry) {\r\n this._entry.db.closeDb();\r\n this._entry.db.cleanCaches();\r\n this._entry = undefined;\r\n }\r\n }\r\n\r\n /** Gets the changed elements from the cache if found\r\n * @param iModelId Id of the iModel\r\n * @param startChangesetId Start changeset Id\r\n * @param endChangesetId End changeset Id\r\n * @returns Changed elements if found\r\n */\r\n public static getChangedElements(iModelId: GuidString, startChangesetId: string, endChangesetId: string): ChangedElements | undefined {\r\n const db: ChangedElementsDb | undefined = ChangedElementsManager.getChangedElementsDb(iModelId);\r\n if (!db)\r\n return undefined;\r\n\r\n return db.getChangedElements(startChangesetId, endChangesetId);\r\n }\r\n\r\n /** Gets the changed models from the cache if found\r\n * @param iModelId Id of the iModel\r\n * @param startChangesetId Start changeset Id\r\n * @param endChangesetId End changeset Id\r\n * @returns Changed models if found\r\n */\r\n public static getChangedModels(iModelId: GuidString, startChangesetId: string, endChangesetId: string): ChangedModels | undefined {\r\n const db: ChangedElementsDb | undefined = ChangedElementsManager.getChangedElementsDb(iModelId);\r\n if (!db)\r\n return undefined;\r\n\r\n return db.getChangedModels(startChangesetId, endChangesetId);\r\n }\r\n\r\n /** Gets the change data (models and elements) from the cache if found\r\n * @param iModelId Id of the iModel\r\n * @param startChangesetId Start changeset Id\r\n * @param endChangesetId End changeset Id\r\n * @returns Changed models if found\r\n */\r\n public static getChangeData(iModelId: GuidString, startChangesetId: string, endChangesetId: string): ChangeData | undefined {\r\n const db: ChangedElementsDb | undefined = ChangedElementsManager.getChangedElementsDb(iModelId);\r\n if (!db)\r\n return undefined;\r\n\r\n return db.getChangeData(startChangesetId, endChangesetId);\r\n }\r\n\r\n /** Checks if the cache contains information about the changeset\r\n * @param iModelId Id of the iModel\r\n * @param changesetId Changeset to check for\r\n * @returns true if the changeset has been processed and exists in the cache\r\n */\r\n public static isProcessed(iModelId: GuidString, changesetId: string): boolean {\r\n const db: ChangedElementsDb | undefined = ChangedElementsManager.getChangedElementsDb(iModelId);\r\n if (!db)\r\n return false;\r\n\r\n return db.isProcessed(changesetId);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangesetECAdaptor.d.ts","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAwB,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAuB,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAoVvH;;;KAGK;AACL,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,EAAE,EAAE,cAAc,CAAC;IACnB,mDAAmD;IACnD,KAAK,EAAE,gBAAgB,CAAC;IACxB,sFAAsF;IACtF,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,iEAAiE;IACjE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAEhC,YAAY,EAAE,UAAU,CAAC;IAEzB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AA4BD;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAgC7B;;;OAGG;IACH,OAAO,CAAC,OAAO;IAiCf;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAYvB;;;;;;OAMG;IACI,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAiBpD;;OAEG;IACI,aAAa,IAAI,IAAI;IAQ5B;;;OAGG;IACH,IAAW,SAAS,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CAAiC;CAC7F;AAED;;;;;;EAME;AACF,qBAAa,kBAAmB,YAAW,WAAW;aA4EjB,MAAM,EAAE,qBAAqB;aAAkB,eAAe;IA3EjG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,eAAe,CAAqB;IAC5C;;OAEG;IACH,SAAgB,UAAU;;;;MAIxB;IACF;;;OAGG;IACI,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACpC;;;OAGG;IACI,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAEnC;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAKrD;;;;;OAKG;IACI,QAAQ,CAAC,EAAE,EAAE,cAAc,GAAG,kBAAkB;IAKvD;;;;;OAKG;IACI,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB;IAO7D,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;gBACgC,MAAM,EAAE,qBAAqB,EAAkB,eAAe,UAAQ;
|
|
1
|
+
{"version":3,"file":"ChangesetECAdaptor.d.ts","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -537,8 +537,6 @@ class ChangesetECAdaptor {
|
|
|
537
537
|
replaceGeomWithEllipsis: false, // replace geom with ... for debugging
|
|
538
538
|
replaceGuidWithEllipsis: false, // replace geom with ... for debugging
|
|
539
539
|
};
|
|
540
|
-
if (!reader.db)
|
|
541
|
-
throw new Error("SqliteChangesetReader, 'db' param must be set to a valid IModelDb or ECDb.");
|
|
542
540
|
if (!reader.disableSchemaCheck)
|
|
543
541
|
throw new Error("SqliteChangesetReader, 'disableSchemaCheck' param must be set to false.");
|
|
544
542
|
this._mapCache = new ECDbMap(reader.db);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangesetECAdaptor.js","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ECDb\r\n */\r\nimport { DbResult, GuidString, Id64String, IDisposable } from \"@itwin/core-bentley\";\r\nimport { AnyDb, SqliteChange, SqliteChangeOp, SqliteChangesetReader, SqliteValueStage } from \"./SqliteChangesetReader\";\r\n\r\ninterface IClassRef {\r\n classId: Id64String;\r\n classFullName: string;\r\n}\r\n\r\ninterface IClassMap {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly mapStrategy: \"NotMapped\" | \"OwnTable\" | \"TablePerHierarchy\" | \"ExistingTable\" | \"ForeignKeyInTargetTable\" | \"ForeignKeyInSourceTable\";\r\n readonly type: \"Entity\" | \"Relationship\" | \"Struct\" | \"CustomAttribute\";\r\n readonly modifier: \"None\" | \"Abstract\" | \"Sealed\";\r\n readonly properties: IProperty[];\r\n}\r\n\r\ninterface IDateTimeInfo {\r\n readonly dateTimeKind?: \"Utc\" | \"Local\" | \"Unspecified\";\r\n readonly dateTimeComponent?: \"DateTime\" | \"Date\" | \"TimeOfDay\";\r\n}\r\n\r\ninterface IProperty {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly kind: \"Primitive\" | \"Struct\" | \"PrimitiveArray\" | \"StructArray\" | \"Navigation\";\r\n readonly primitiveType?: \"Binary\" | \"Boolean\" | \"DateTime\" | \"Double\" | \"Integer\" | \"Long\" | \"Point2d\" | \"Point3d\" | \"String\" | \"IGeometry\";\r\n readonly extendedTypeName?: string;\r\n readonly navigationRelationship?: IClassRef;\r\n readonly structClass?: IClassRef;\r\n readonly dateTimeInfo?: IDateTimeInfo;\r\n readonly columns: IColumn[];\r\n\r\n}\r\n\r\ninterface IColumn {\r\n readonly table: string;\r\n readonly column: string;\r\n readonly type: \"Any\" | \"Boolean\" | \"Blob\" | \"Timestamp\" | \"Real\" | \"Integer\" | \"Text\";\r\n readonly columnKind: \"Default\" | \"Id\" | \"ClassId\" | \"Shared\";\r\n readonly accessString: string;\r\n readonly isVirtual: boolean;\r\n}\r\n\r\ninterface ITable {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly type: \"Primary\" | \"Joined\" | \"Existing\" | \"Overflow\" | \"Virtual\";\r\n readonly exclusiveRootClassId: Id64String;\r\n readonly isClassIdVirtual: boolean;\r\n}\r\n\r\nclass ECDbMap {\r\n private _cachedClassMaps = new Map<Id64String, IClassMap>();\r\n private _cacheTables = new Map<string, ITable>();\r\n public constructor(public readonly db: AnyDb) { }\r\n public getAllDerivedClasses(classFullName: string) {\r\n const sql = `\r\n SELECT format('0x%x', ch.ClassId)\r\n FROM [ec_cache_ClassHierarchy] [ch]\r\n JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]\r\n WHERE (([sc].[Alias] = :schemaNameOrAlias\r\n OR [sc].[Name] = :schemaNameOrAlias)\r\n AND ([cs].[Name] = :className))\r\n `;\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n const parts = classFullName.indexOf(\".\") !== -1 ? classFullName.split(\".\") : classFullName.split(\":\");\r\n stmt.bindString(\":schemaNameOrAlias\", parts[0]);\r\n stmt.bindString(\":className\", parts[1]);\r\n const classIds = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n classIds.push(stmt.getValueString(0));\r\n return classIds;\r\n });\r\n }\r\n public getTable(tableName: string): ITable | undefined {\r\n if (this._cacheTables.has(tableName))\r\n return this._cacheTables.get(tableName);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT (\r\n 'id', FORMAT ('0x%x', [t].[id]),\r\n 'name', [t].[Name],\r\n 'type', (\r\n CASE\r\n [t].[type]\r\n WHEN 0 THEN 'Primary'\r\n WHEN 1 THEN 'Joined'\r\n WHEN 2 THEN 'Existing'\r\n WHEN 3 THEN 'Overflow'\r\n WHEN 4 THEN 'Virtual'\r\n END\r\n ),\r\n 'exclusiveRootClassId', FORMAT ('0x%x',\r\n COALESCE (\r\n [t].[ExclusiveRootClassId], (\r\n SELECT [parent].[ExclusiveRootClassId]\r\n FROM [ec_Table] [parent]\r\n WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),\r\n 'isClassIdVirtual', (\r\n SELECT\r\n [c].[IsVirtual]\r\n FROM\r\n [ec_Column] [c]\r\n WHERE\r\n [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]\r\n )\r\n )\r\n FROM [ec_Table] [t]\r\n WHERE\r\n [t].[Name] = ?;\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindString(1, tableName);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const table = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null)\r\n return undefined;\r\n\r\n if (key === \"isClassIdVirtual\")\r\n return value === 0 ? false : true;\r\n\r\n return value;\r\n }) as ITable;\r\n\r\n this._cacheTables.set(tableName, table);\r\n return table;\r\n }\r\n return undefined;\r\n });\r\n }\r\n public getClassMap(classId: Id64String): IClassMap | undefined {\r\n if (this._cachedClassMaps.has(classId))\r\n return this._cachedClassMaps.get(classId);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', cs.id),\r\n 'name', format('%s:%s', ss.Name, cs.Name),\r\n 'mapStrategy',\r\n (\r\n CASE cm.MapStrategy\r\n WHEN 0 THEN 'NotMapped'\r\n WHEN 1 THEN 'OwnTable'\r\n WHEN 2 THEN 'TablePerHierarchy'\r\n WHEN 3 THEN 'ExistingTable'\r\n WHEN 10 THEN 'ForeignKeyInTargetTable'\r\n WHEN 11 THEN 'ForeignKeyInSourceTable'\r\n END\r\n ),\r\n 'type',\r\n (\r\n CASE cs.Type\r\n WHEN 0 THEN 'Entity'\r\n WHEN 1 THEN 'Relationship'\r\n WHEN 2 THEN 'Struct'\r\n WHEN 3 THEN 'CustomAttribute'\r\n END\r\n ),\r\n 'modifier',\r\n (\r\n CASE cs.Modifier\r\n WHEN 0 THEN 'None'\r\n WHEN 1 THEN 'Abstract'\r\n WHEN 2 THEN 'Sealed'\r\n END\r\n ),\r\n 'properties',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(propJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', pt.id),\r\n 'name', pt.Name,\r\n 'kind',\r\n (\r\n CASE pt.Kind\r\n WHEN 0 THEN 'Primitive'\r\n WHEN 1 THEN 'Struct'\r\n WHEN 2 THEN 'PrimitiveArray'\r\n WHEN 3 THEN 'StructArray'\r\n WHEN 4 THEN 'Navigation'\r\n END\r\n ),\r\n 'primitiveType',\r\n (\r\n CASE pt.PrimitiveType\r\n WHEN 0x101 THEN 'Binary'\r\n WHEN 0x201 THEN 'Boolean'\r\n WHEN 0x301 THEN 'DateTime'\r\n WHEN 0x401 THEN 'Double'\r\n WHEN 0x501 THEN 'Integer'\r\n WHEN 0x601 THEN 'Long'\r\n WHEN 0x701 THEN 'Point2d'\r\n WHEN 0x801 THEN 'Point3d'\r\n WHEN 0x901 THEN 'String'\r\n WHEN 0xa01 THEN 'IGeometry'\r\n END\r\n ),\r\n 'extendedTypeName', ExtendedTypeName,\r\n 'navigationRelationship',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.NavigationRelationshipClassId\r\n ),\r\n 'structClass',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.StructClassId\r\n ),\r\n 'dateTimeInfo', (\r\n SELECT\r\n JSON_OBJECT (\r\n 'dateTimeKind', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'\r\n ELSE 'Unspecified'\r\n END\r\n ),\r\n 'dateTimeComponent', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'\r\n ELSE 'DateTime'\r\n END\r\n )\r\n )\r\n FROM\r\n [ec_CustomAttribute] [ca]\r\n JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]\r\n WHERE\r\n [ca].[ContainerType] = 992\r\n AND [cl].[Name] = 'DateTimeInfo'\r\n AND [sc].[Name] = 'CoreCustomAttributes'\r\n AND [ca].[ContainerId] = [pt].[Id]\r\n ),\r\n 'columns',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(columnJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'table', tb.Name,\r\n 'column', cc.Name,\r\n 'type',\r\n (\r\n CASE cc.Type\r\n WHEN 0 THEN 'Any'\r\n WHEN 1 THEN 'Boolean'\r\n WHEN 2 THEN 'Blob'\r\n WHEN 3 THEN 'Timestamp'\r\n WHEN 4 THEN 'Real'\r\n WHEN 5 THEN 'Integer'\r\n WHEN 6 THEN 'Text'\r\n END\r\n ),\r\n 'columnKind',\r\n (\r\n CASE cc.ColumnKind\r\n WHEN 0 THEN 'Default'\r\n WHEN 1 THEN 'Id'\r\n WHEN 2 THEN 'ClassId'\r\n WHEN 4 THEN 'SharedData'\r\n END\r\n ),\r\n 'accessString', pp0.AccessString,\r\n 'isVirtual', cc.IsVirtual OR tb.Type = 4\r\n ) columnJson\r\n FROM [ec_PropertyMap] [pm0]\r\n JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]\r\n JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]\r\n JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]\r\n WHERE\r\n [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id\r\n )\r\n )\r\n ) propJson\r\n FROM [ec_PropertyMap] [pm]\r\n JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]\r\n JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]\r\n WHERE\r\n pm.ClassId = cs.Id\r\n GROUP BY\r\n pt.Id\r\n )\r\n )\r\n ) classDef\r\n FROM [ec_Class] [cs]\r\n JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]\r\n WHERE\r\n [cs].[Id] = ?\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const classMap = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null) {\r\n return undefined;\r\n }\r\n if (key === \"isVirtual\") {\r\n return value === 0 ? false : true;\r\n }\r\n return value;\r\n }) as IClassMap;\r\n\r\n this._cachedClassMaps.set(classId, classMap);\r\n return classMap;\r\n }\r\n return undefined;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Record meta data for the change.\r\n * @beta\r\n * */\r\nexport interface ChangeMetaData {\r\n /** list of tables making up this EC change */\r\n tables: string[];\r\n /** full name of the class of this EC change */\r\n classFullName?: string;\r\n /** sqlite operation that caused the change */\r\n op: SqliteChangeOp;\r\n /** version of the value read from sqlite change */\r\n stage: SqliteValueStage;\r\n /** if classId for the change was not found in db then fallback class for the table */\r\n fallbackClassId?: Id64String;\r\n /** list of change index making up this change (one per table) */\r\n changeIndexes: number[];\r\n}\r\n\r\n/**\r\n * Represent EC change derived from low level sqlite change\r\n * @beta\r\n */\r\nexport interface ChangedECInstance {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECInstanceId: Id64String;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECClassId?: Id64String;\r\n $meta?: ChangeMetaData;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Helper function to convert between JS DateTime & SQLite JulianDay values.\r\n * @beta\r\n * */\r\nnamespace DateTime {\r\n /**\r\n * Convert JS date to JulianDay value.\r\n * @param dt JS Date object.\r\n * @param convertToUtc convert the input value to UTC.\r\n * @returns julian day value\r\n */\r\n export function toJulianDay(dt: Date, convertToUtc = true): number {\r\n const utcOffset = convertToUtc ? dt.getTimezoneOffset() / 1440 : 0;\r\n return (dt.valueOf() / 86400000) - utcOffset + 2440587.5;\r\n }\r\n /**\r\n * Convert Julian day to JS Date object\r\n * @param jd JulianDay value for date/time\r\n * @param isLocalTime if julian day is local time or UTC\r\n * @returns JS Date object.\r\n */\r\n export function fromJulianDay(jd: number, isLocalTime: boolean): Date {\r\n const utcOffset = isLocalTime ? 0 : new Date().getTimezoneOffset() / 1440;\r\n return new Date((jd - 2440587.5 + utcOffset) * 86400000);\r\n }\r\n}\r\n/**\r\n * Combine partial changed instance into single instance.\r\n * Partial changes is per table and a single instance can\r\n * span multiple tables.\r\n * @beta\r\n */\r\nexport class PartialECChangeUnifier {\r\n private _cache = new Map<string, ChangedECInstance>();\r\n private _readonly = false;\r\n /**\r\n * Get root class id for a given class\r\n * @param classId given class id\r\n * @param db use to find root class\r\n * @returns return root class id\r\n */\r\n private static getRootClassId(classId: Id64String, db: AnyDb): Id64String | undefined {\r\n const sql = `\r\n WITH\r\n [base_class]([classId], [baseClassId], [Level]) AS(\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], 0\r\n FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?\r\n UNION ALL\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1\r\n FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]\r\n\r\n )\r\n SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass\r\n FROM [base_class] [bc]\r\n WHERE [bc].[ClassId] <> [bc].[BaseClassId]\r\n AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]\r\n FROM [ec_CustomAttribute] [ca]\r\n WHERE [ca].[ContainerType] = 30\r\n AND [ca].[ClassId] IN (SELECT [cc].[Id]\r\n FROM [ec_Class] [cc]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]\r\n WHERE [cc].[Name] = 'IsMixIn'\r\n AND [ss].[Name] = 'CoreCustomAttributes'))\r\n ORDER BY [Level] DESC`;\r\n\r\n return db.withSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW && !stmt.isValueNull(0)) {\r\n return stmt.getValueString(0);\r\n }\r\n return classId;\r\n });\r\n }\r\n /**\r\n * Combine partial instance with instance with same key if already exists.\r\n * @param rhs partial instance\r\n */\r\n private combine(rhs: ChangedECInstance, db?: AnyDb): void {\r\n if (!rhs.$meta) {\r\n throw new Error(\"PartialECChange being combine must have '$meta' property\");\r\n }\r\n const key = PartialECChangeUnifier.buildKey(rhs, db);\r\n const lhs = this._cache.get(key);\r\n if (lhs) {\r\n const { $meta: _, ...restOfRhs } = rhs;\r\n Object.assign(lhs, restOfRhs);\r\n if (lhs.$meta && rhs.$meta) {\r\n lhs.$meta.tables = [...rhs.$meta?.tables, ...lhs.$meta?.tables];\r\n lhs.$meta.changeIndexes = [...rhs.$meta?.changeIndexes, ...lhs.$meta?.changeIndexes];\r\n\r\n // we preserve child class name & id when merging instance.\r\n if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && db && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {\r\n const lhsClassId = lhs.$meta.fallbackClassId;\r\n const rhsClassId = rhs.$meta.fallbackClassId;\r\n const isRhsIsSubClassOfLhs = db.withPreparedStatement(\"SELECT ec_instanceof(?,?)\", (stmt) => {\r\n stmt.bindId(1, rhsClassId);\r\n stmt.bindId(2, lhsClassId);\r\n stmt.step();\r\n return stmt.getValue(0).getInteger() === 1;\r\n });\r\n if (isRhsIsSubClassOfLhs) {\r\n lhs.$meta.fallbackClassId = rhs.$meta.fallbackClassId;\r\n lhs.$meta.classFullName = rhs.$meta.classFullName;\r\n }\r\n }\r\n }\r\n } else {\r\n this._cache.set(key, rhs);\r\n }\r\n }\r\n /**\r\n * Build key from EC change.\r\n * @param change EC change\r\n * @returns key created from EC change.\r\n */\r\n private static buildKey(change: ChangedECInstance, db?: AnyDb): string {\r\n let classId = change.ECClassId;\r\n if (typeof classId === \"undefined\") {\r\n if (db && change.$meta?.fallbackClassId) {\r\n classId = this.getRootClassId(change.$meta.fallbackClassId, db);\r\n }\r\n if (typeof classId === \"undefined\") {\r\n throw new Error(`unable to resolve ECClassId to root class id.`);\r\n }\r\n }\r\n return `${change.ECInstanceId}-${classId}-${change.$meta?.stage}`.toLowerCase();\r\n }\r\n /**\r\n * Append partial changes which will be combine using there instance key.\r\n * @note $meta property must be present on partial change as information\r\n * in it is used to combine partial instances.\r\n * @param adaptor changeset adaptor is use to read the partial EC change.\r\n * @beta\r\n */\r\n public appendFrom(adaptor: ChangesetECAdaptor): void {\r\n if (adaptor.disableMetaData) {\r\n throw new Error(\"change adaptor property 'disableMetaData' must be set to 'false'\");\r\n }\r\n if (this._readonly) {\r\n throw new Error(\"this instance is marked as readonly.\");\r\n }\r\n\r\n if (adaptor.op === \"Updated\" && adaptor.inserted && adaptor.deleted) {\r\n this.combine(adaptor.inserted, adaptor.reader.db);\r\n this.combine(adaptor.deleted, adaptor.reader.db);\r\n } else if (adaptor.op === \"Inserted\" && adaptor.inserted) {\r\n this.combine(adaptor.inserted, adaptor.reader.db);\r\n } else if (adaptor.op === \"Deleted\" && adaptor.deleted) {\r\n this.combine(adaptor.deleted, adaptor.reader.db);\r\n }\r\n }\r\n /**\r\n * Delete $meta from all the instances.\r\n */\r\n public stripMetaData(): void {\r\n for (const inst of this._cache.values()) {\r\n if (\"$meta\" in inst) {\r\n delete inst.$meta;\r\n }\r\n }\r\n this._readonly = true;\r\n }\r\n /**\r\n * Returns complete EC change instances.\r\n * @beta\r\n */\r\n public get instances(): IterableIterator<ChangedECInstance> { return this._cache.values(); }\r\n}\r\n\r\n/**\r\n * Transform sqlite change to ec change. EC change is partial change as\r\n * it is per table while a single instance can span multiple table.\r\n * @note PrimitiveArray and StructArray are not supported types.\r\n * @beta\r\n *\r\n*/\r\nexport class ChangesetECAdaptor implements IDisposable {\r\n private readonly _mapCache: ECDbMap;\r\n private readonly _tableFilter = new Set<string>();\r\n private readonly _opFilter = new Set<SqliteChangeOp>();\r\n private readonly _classFilter = new Set<string>();\r\n private _allowedClasses = new Set<string>();\r\n /**\r\n * set debug flags\r\n */\r\n public readonly debugFlags = {\r\n replaceBlobWithEllipsis: false, // replace bolb with ... for debugging\r\n replaceGeomWithEllipsis: false, // replace geom with ... for debugging\r\n replaceGuidWithEllipsis: false, // replace geom with ... for debugging\r\n };\r\n /**\r\n * Return partial inserted instance\r\n * For updates inserted represent new version of instance after update.\r\n */\r\n public inserted?: ChangedECInstance;\r\n /**\r\n * Return partial deleted instance.\r\n * For updates deleted represent old version of instance before update.\r\n */\r\n public deleted?: ChangedECInstance;\r\n\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of tables added by acceptTable().\r\n * @param table Name of the table\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptTable(table: string): ChangesetECAdaptor {\r\n if (!this._tableFilter.has(table))\r\n this._tableFilter.add(table);\r\n return this;\r\n }\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of op added by acceptOp().\r\n * @param op\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptOp(op: SqliteChangeOp): ChangesetECAdaptor {\r\n if (!this._opFilter.has(op))\r\n this._opFilter.add(op);\r\n return this;\r\n }\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of class and its derived classes added by acceptClass().\r\n * @param classFullName\r\n * @returns\r\n */\r\n public acceptClass(classFullName: string): ChangesetECAdaptor {\r\n if (!this._classFilter.has(classFullName))\r\n this._classFilter.add(classFullName);\r\n\r\n this._allowedClasses.clear();\r\n return this;\r\n }\r\n private buildClassFilter() {\r\n if (this._allowedClasses.size !== 0 || this._classFilter.size === 0)\r\n return;\r\n\r\n this._classFilter.forEach((className) => {\r\n this._mapCache.getAllDerivedClasses(className).forEach((classId) => {\r\n this._allowedClasses.add(classId);\r\n });\r\n });\r\n }\r\n /**\r\n * Construct adaptor with a initialized reader.\r\n * @note the changeset reader must have disableSchemaCheck\r\n * set to false and db must also be set.\r\n * @param reader wrap changeset reader.\r\n */\r\n public constructor(public readonly reader: SqliteChangesetReader, public readonly disableMetaData = false) {\r\n if (!reader.db)\r\n throw new Error(\"SqliteChangesetReader, 'db' param must be set to a valid IModelDb or ECDb.\");\r\n\r\n if (!reader.disableSchemaCheck)\r\n throw new Error(\"SqliteChangesetReader, 'disableSchemaCheck' param must be set to false.\");\r\n\r\n this._mapCache = new ECDbMap(reader.db);\r\n }\r\n /**\r\n * dispose current instance and it will also dispose the changeset reader.\r\n */\r\n public dispose(): void {\r\n this.close();\r\n }\r\n /**\r\n * close current instance and it will also close the changeset reader.\r\n */\r\n public close(): void {\r\n this.reader.close();\r\n }\r\n /**\r\n * Convert binary GUID into string GUID.\r\n * @param binaryGUID binary version of guid.\r\n * @returns GUID string.\r\n */\r\n private static convertBinaryToGuid(binaryGUID: Uint8Array): GuidString {\r\n // Check if the array has 16 elements\r\n if (binaryGUID.length !== 16) {\r\n throw new Error(\"Invalid array length for Guid\");\r\n }\r\n // Convert each element to a two-digit hexadecimal string\r\n const hex = Array.from(binaryGUID, (byte) => byte.toString(16).padStart(2, \"0\"));\r\n // Join the hexadecimal strings and insert hyphens\r\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(6, 8).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10, 16).join(\"\")}`;\r\n\r\n }\r\n /**\r\n * Set value use access string in a JS object.\r\n * @param targetObj object that will be updated.\r\n * @param accessString access string token separated by '.'.\r\n */\r\n private static setValue(targetObj: any, accessString: string, value: any): void {\r\n let cursor = targetObj;\r\n const propPath = accessString.split(\".\");\r\n propPath.forEach((propertyName) => {\r\n if (propertyName === \"__proto__\")\r\n throw new Error(\"access string cannot container __proto__\");\r\n });\r\n\r\n const leafProp = propPath.splice(-1).shift();\r\n if (!leafProp)\r\n throw new Error(\"not access string was specified.\");\r\n\r\n for (const elem of propPath) {\r\n if (typeof cursor[elem] === \"undefined\")\r\n cursor[elem] = {};\r\n cursor = cursor[elem];\r\n }\r\n cursor[leafProp] = value;\r\n }\r\n\r\n /**\r\n * Check if sqlite change table is a EC data table\r\n * @param tableName name of the table.\r\n * @returns true if table has EC data.\r\n */\r\n public isECTable(tableName: string) {\r\n return typeof this._mapCache.getTable(tableName) !== \"undefined\";\r\n }\r\n /**\r\n * Attempt find ECClassId from ECInstanceId for a change of type 'updated'.\r\n * @param tableName name of the table to find ECClassId from given ECInstanceId\r\n * @param instanceId instance id for which we need ECClassId for.\r\n * @returns if successful returns ECClassId else return undefined.\r\n */\r\n private getClassIdFromDb(tableName: string, instanceId: Id64String): Id64String | undefined {\r\n try {\r\n return this.reader.db?.withPreparedSqliteStatement(`SELECT [ECClassId] FROM [${tableName}] WHERE [rowId]=?`, (stmt) => {\r\n stmt.bindId(1, instanceId);\r\n return stmt.step() === DbResult.BE_SQLITE_ROW ? stmt.getValueId(0) : undefined;\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n /** helper method around reader.op */\r\n public get op() { return this.reader.op; }\r\n /** Return true if current change is of type \"Inserted\" */\r\n public get isInserted() { return this.op === \"Inserted\"; }\r\n /** Return true if current change is of type \"Deleted\" */\r\n public get isDeleted() { return this.op === \"Deleted\"; }\r\n /** Return true if current change is of type \"Updated\" */\r\n public get isUpdated() { return this.op === \"Updated\"; }\r\n\r\n /**\r\n * Advance reader to next change or a change that meets the filter set in the current adaptor\r\n * @returns return false if no more changes to read.\r\n */\r\n public step(): boolean {\r\n this.inserted = undefined;\r\n this.deleted = undefined;\r\n this.buildClassFilter();\r\n while (this.reader.step()) {\r\n if (!this.isECTable(this.reader.tableName))\r\n continue;\r\n\r\n if (this._tableFilter.size > 0) {\r\n if (!this._tableFilter.has(this.reader.tableName))\r\n continue;\r\n }\r\n\r\n if (this._opFilter.size > 0) {\r\n if (!this._opFilter.has(this.reader.op))\r\n continue;\r\n }\r\n\r\n if (this.reader.hasRow) {\r\n const table = this._mapCache.getTable(this.reader.tableName);\r\n if (!table || table.type === \"Virtual\") {\r\n throw new Error(`table in changeset not found or is virtual ${this.reader.tableName}`);\r\n }\r\n\r\n const change = {\r\n inserted: this.reader.getChangeValuesObject(\"New\", { includePrimaryKeyInUpdateNew: true }),\r\n deleted: this.reader.getChangeValuesObject(\"Old\", { includePrimaryKeyInUpdateNew: true }),\r\n };\r\n\r\n if (!change.inserted && !change.deleted) {\r\n throw new Error(`unable to get change from changeset reader`);\r\n }\r\n\r\n let ecClassId: Id64String | undefined = this.reader.op === \"Inserted\" ? change.inserted?.ECClassId : change.deleted?.ECClassId;\r\n const classIdPresentInChange = typeof ecClassId !== \"undefined\";\r\n let classMap: IClassMap | undefined;\r\n let fallbackClassId: Id64String | undefined;\r\n if (table.isClassIdVirtual) {\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n } else {\r\n if (!ecClassId) {\r\n // attempt to find ECClassId against row from the db.\r\n const primaryKeys = this.reader.primaryKeyValues;\r\n if (primaryKeys.length === 1) {\r\n ecClassId = this.getClassIdFromDb(this.reader.tableName, this.reader.primaryKeyValues[0] as Id64String);\r\n }\r\n }\r\n if (ecClassId)\r\n classMap = this._mapCache.getClassMap(ecClassId);\r\n if (!classMap) {\r\n // fallback to root map for table.\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n if (classMap)\r\n fallbackClassId = table.exclusiveRootClassId;\r\n }\r\n }\r\n\r\n if (!classMap)\r\n throw new Error(`unable to load class map`);\r\n\r\n if (!classIdPresentInChange && !ecClassId && !fallbackClassId)\r\n ecClassId = classMap.id;\r\n\r\n if (this._allowedClasses.size !== 0) {\r\n if (!this._allowedClasses.has(classMap.id))\r\n continue;\r\n }\r\n\r\n const $meta = {\r\n tables: [this.reader.tableName],\r\n op: this.reader.op,\r\n classFullName: classMap.name,\r\n fallbackClassId,\r\n changeIndexes: [this.reader.changeIndex],\r\n };\r\n\r\n if (this.reader.op === \"Inserted\" && change.inserted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n } else if (this.reader.op === \"Deleted\" && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else if (change.inserted && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else {\r\n throw new Error(\"unable to read EC changes\");\r\n }\r\n break;\r\n }\r\n }\r\n return this.reader.hasRow;\r\n }\r\n /**\r\n * Transform nav change column into navigation EC property\r\n * @param prop navigation property definition.\r\n * @param change sqlite change.\r\n * @param out ec instance that will be updated with navigation property.\r\n */\r\n private transformNavigationProperty(prop: IProperty, change: SqliteChange, out: ChangedECInstance): void {\r\n const idCol = prop.columns.filter(($) => $.accessString.endsWith(\".Id\")).at(0);\r\n if (!idCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const idValue = change[idCol.column];\r\n if (typeof idValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, idCol.accessString, idValue);\r\n\r\n const relClassIdCol = prop.columns.filter(($) => $.accessString.endsWith(\".RelECClassId\")).at(0);\r\n if (!relClassIdCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const relClassIdValue = relClassIdCol.isVirtual ? prop.navigationRelationship?.classId : change[relClassIdCol.column];\r\n if (typeof relClassIdValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, relClassIdCol.accessString, relClassIdValue);\r\n }\r\n /**\r\n * Transform sqlite change into EC change.\r\n * @param classMap classMap use to deserialize sqlite change into EC change.\r\n * @param change sqlite change from changeset.\r\n * @param table table definition of sqlite change provided.\r\n * @param out EC changeset that will be updated with properties.\r\n */\r\n private transform(classMap: IClassMap, change: SqliteChange, table: ITable, out: ChangedECInstance): void {\r\n // transform change row to instance\r\n for (const prop of classMap.properties) {\r\n if (prop.kind === \"PrimitiveArray\" || prop.kind === \"StructArray\") {\r\n // Arrays not supported\r\n continue;\r\n }\r\n if (prop.columns.filter((_) => _.isVirtual).length === prop.columns.length) {\r\n continue;\r\n }\r\n if (prop.kind === \"Navigation\") {\r\n this.transformNavigationProperty(prop, change, out);\r\n } else {\r\n for (const col of prop.columns) {\r\n if (col.table !== table.name)\r\n continue;\r\n\r\n const columnValue = change[col.column];\r\n if (typeof columnValue === \"undefined\")\r\n continue;\r\n\r\n if (columnValue !== null) {\r\n if (prop.primitiveType === \"DateTime\") {\r\n const dt = DateTime.fromJulianDay(columnValue, prop.dateTimeInfo?.dateTimeKind === \"Local\");\r\n ChangesetECAdaptor.setValue(out, col.accessString, dt.toISOString());\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"BeGuid\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGuidWithEllipsis ? \"...\" : ChangesetECAdaptor.convertBinaryToGuid(columnValue));\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"GeometryStream\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGeomWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n if (prop.primitiveType === \"Binary\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceBlobWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n }\r\n ChangesetECAdaptor.setValue(out, col.accessString, columnValue);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ChangesetECAdaptor.js","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ECDb\r\n */\r\nimport { DbResult, GuidString, Id64String, IDisposable } from \"@itwin/core-bentley\";\r\nimport { AnyDb, SqliteChange, SqliteChangeOp, SqliteChangesetReader, SqliteValueStage } from \"./SqliteChangesetReader\";\r\n\r\ninterface IClassRef {\r\n classId: Id64String;\r\n classFullName: string;\r\n}\r\n\r\ninterface IClassMap {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly mapStrategy: \"NotMapped\" | \"OwnTable\" | \"TablePerHierarchy\" | \"ExistingTable\" | \"ForeignKeyInTargetTable\" | \"ForeignKeyInSourceTable\";\r\n readonly type: \"Entity\" | \"Relationship\" | \"Struct\" | \"CustomAttribute\";\r\n readonly modifier: \"None\" | \"Abstract\" | \"Sealed\";\r\n readonly properties: IProperty[];\r\n}\r\n\r\ninterface IDateTimeInfo {\r\n readonly dateTimeKind?: \"Utc\" | \"Local\" | \"Unspecified\";\r\n readonly dateTimeComponent?: \"DateTime\" | \"Date\" | \"TimeOfDay\";\r\n}\r\n\r\ninterface IProperty {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly kind: \"Primitive\" | \"Struct\" | \"PrimitiveArray\" | \"StructArray\" | \"Navigation\";\r\n readonly primitiveType?: \"Binary\" | \"Boolean\" | \"DateTime\" | \"Double\" | \"Integer\" | \"Long\" | \"Point2d\" | \"Point3d\" | \"String\" | \"IGeometry\";\r\n readonly extendedTypeName?: string;\r\n readonly navigationRelationship?: IClassRef;\r\n readonly structClass?: IClassRef;\r\n readonly dateTimeInfo?: IDateTimeInfo;\r\n readonly columns: IColumn[];\r\n\r\n}\r\n\r\ninterface IColumn {\r\n readonly table: string;\r\n readonly column: string;\r\n readonly type: \"Any\" | \"Boolean\" | \"Blob\" | \"Timestamp\" | \"Real\" | \"Integer\" | \"Text\";\r\n readonly columnKind: \"Default\" | \"Id\" | \"ClassId\" | \"Shared\";\r\n readonly accessString: string;\r\n readonly isVirtual: boolean;\r\n}\r\n\r\ninterface ITable {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly type: \"Primary\" | \"Joined\" | \"Existing\" | \"Overflow\" | \"Virtual\";\r\n readonly exclusiveRootClassId: Id64String;\r\n readonly isClassIdVirtual: boolean;\r\n}\r\n\r\nclass ECDbMap {\r\n private _cachedClassMaps = new Map<Id64String, IClassMap>();\r\n private _cacheTables = new Map<string, ITable>();\r\n public constructor(public readonly db: AnyDb) { }\r\n public getAllDerivedClasses(classFullName: string) {\r\n const sql = `\r\n SELECT format('0x%x', ch.ClassId)\r\n FROM [ec_cache_ClassHierarchy] [ch]\r\n JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]\r\n WHERE (([sc].[Alias] = :schemaNameOrAlias\r\n OR [sc].[Name] = :schemaNameOrAlias)\r\n AND ([cs].[Name] = :className))\r\n `;\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n const parts = classFullName.indexOf(\".\") !== -1 ? classFullName.split(\".\") : classFullName.split(\":\");\r\n stmt.bindString(\":schemaNameOrAlias\", parts[0]);\r\n stmt.bindString(\":className\", parts[1]);\r\n const classIds = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n classIds.push(stmt.getValueString(0));\r\n return classIds;\r\n });\r\n }\r\n public getTable(tableName: string): ITable | undefined {\r\n if (this._cacheTables.has(tableName))\r\n return this._cacheTables.get(tableName);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT (\r\n 'id', FORMAT ('0x%x', [t].[id]),\r\n 'name', [t].[Name],\r\n 'type', (\r\n CASE\r\n [t].[type]\r\n WHEN 0 THEN 'Primary'\r\n WHEN 1 THEN 'Joined'\r\n WHEN 2 THEN 'Existing'\r\n WHEN 3 THEN 'Overflow'\r\n WHEN 4 THEN 'Virtual'\r\n END\r\n ),\r\n 'exclusiveRootClassId', FORMAT ('0x%x',\r\n COALESCE (\r\n [t].[ExclusiveRootClassId], (\r\n SELECT [parent].[ExclusiveRootClassId]\r\n FROM [ec_Table] [parent]\r\n WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),\r\n 'isClassIdVirtual', (\r\n SELECT\r\n [c].[IsVirtual]\r\n FROM\r\n [ec_Column] [c]\r\n WHERE\r\n [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]\r\n )\r\n )\r\n FROM [ec_Table] [t]\r\n WHERE\r\n [t].[Name] = ?;\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindString(1, tableName);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const table = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null)\r\n return undefined;\r\n\r\n if (key === \"isClassIdVirtual\")\r\n return value === 0 ? false : true;\r\n\r\n return value;\r\n }) as ITable;\r\n\r\n this._cacheTables.set(tableName, table);\r\n return table;\r\n }\r\n return undefined;\r\n });\r\n }\r\n public getClassMap(classId: Id64String): IClassMap | undefined {\r\n if (this._cachedClassMaps.has(classId))\r\n return this._cachedClassMaps.get(classId);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', cs.id),\r\n 'name', format('%s:%s', ss.Name, cs.Name),\r\n 'mapStrategy',\r\n (\r\n CASE cm.MapStrategy\r\n WHEN 0 THEN 'NotMapped'\r\n WHEN 1 THEN 'OwnTable'\r\n WHEN 2 THEN 'TablePerHierarchy'\r\n WHEN 3 THEN 'ExistingTable'\r\n WHEN 10 THEN 'ForeignKeyInTargetTable'\r\n WHEN 11 THEN 'ForeignKeyInSourceTable'\r\n END\r\n ),\r\n 'type',\r\n (\r\n CASE cs.Type\r\n WHEN 0 THEN 'Entity'\r\n WHEN 1 THEN 'Relationship'\r\n WHEN 2 THEN 'Struct'\r\n WHEN 3 THEN 'CustomAttribute'\r\n END\r\n ),\r\n 'modifier',\r\n (\r\n CASE cs.Modifier\r\n WHEN 0 THEN 'None'\r\n WHEN 1 THEN 'Abstract'\r\n WHEN 2 THEN 'Sealed'\r\n END\r\n ),\r\n 'properties',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(propJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', pt.id),\r\n 'name', pt.Name,\r\n 'kind',\r\n (\r\n CASE pt.Kind\r\n WHEN 0 THEN 'Primitive'\r\n WHEN 1 THEN 'Struct'\r\n WHEN 2 THEN 'PrimitiveArray'\r\n WHEN 3 THEN 'StructArray'\r\n WHEN 4 THEN 'Navigation'\r\n END\r\n ),\r\n 'primitiveType',\r\n (\r\n CASE pt.PrimitiveType\r\n WHEN 0x101 THEN 'Binary'\r\n WHEN 0x201 THEN 'Boolean'\r\n WHEN 0x301 THEN 'DateTime'\r\n WHEN 0x401 THEN 'Double'\r\n WHEN 0x501 THEN 'Integer'\r\n WHEN 0x601 THEN 'Long'\r\n WHEN 0x701 THEN 'Point2d'\r\n WHEN 0x801 THEN 'Point3d'\r\n WHEN 0x901 THEN 'String'\r\n WHEN 0xa01 THEN 'IGeometry'\r\n END\r\n ),\r\n 'extendedTypeName', ExtendedTypeName,\r\n 'navigationRelationship',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.NavigationRelationshipClassId\r\n ),\r\n 'structClass',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.StructClassId\r\n ),\r\n 'dateTimeInfo', (\r\n SELECT\r\n JSON_OBJECT (\r\n 'dateTimeKind', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'\r\n ELSE 'Unspecified'\r\n END\r\n ),\r\n 'dateTimeComponent', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'\r\n ELSE 'DateTime'\r\n END\r\n )\r\n )\r\n FROM\r\n [ec_CustomAttribute] [ca]\r\n JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]\r\n WHERE\r\n [ca].[ContainerType] = 992\r\n AND [cl].[Name] = 'DateTimeInfo'\r\n AND [sc].[Name] = 'CoreCustomAttributes'\r\n AND [ca].[ContainerId] = [pt].[Id]\r\n ),\r\n 'columns',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(columnJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'table', tb.Name,\r\n 'column', cc.Name,\r\n 'type',\r\n (\r\n CASE cc.Type\r\n WHEN 0 THEN 'Any'\r\n WHEN 1 THEN 'Boolean'\r\n WHEN 2 THEN 'Blob'\r\n WHEN 3 THEN 'Timestamp'\r\n WHEN 4 THEN 'Real'\r\n WHEN 5 THEN 'Integer'\r\n WHEN 6 THEN 'Text'\r\n END\r\n ),\r\n 'columnKind',\r\n (\r\n CASE cc.ColumnKind\r\n WHEN 0 THEN 'Default'\r\n WHEN 1 THEN 'Id'\r\n WHEN 2 THEN 'ClassId'\r\n WHEN 4 THEN 'SharedData'\r\n END\r\n ),\r\n 'accessString', pp0.AccessString,\r\n 'isVirtual', cc.IsVirtual OR tb.Type = 4\r\n ) columnJson\r\n FROM [ec_PropertyMap] [pm0]\r\n JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]\r\n JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]\r\n JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]\r\n WHERE\r\n [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id\r\n )\r\n )\r\n ) propJson\r\n FROM [ec_PropertyMap] [pm]\r\n JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]\r\n JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]\r\n WHERE\r\n pm.ClassId = cs.Id\r\n GROUP BY\r\n pt.Id\r\n )\r\n )\r\n ) classDef\r\n FROM [ec_Class] [cs]\r\n JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]\r\n WHERE\r\n [cs].[Id] = ?\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const classMap = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null) {\r\n return undefined;\r\n }\r\n if (key === \"isVirtual\") {\r\n return value === 0 ? false : true;\r\n }\r\n return value;\r\n }) as IClassMap;\r\n\r\n this._cachedClassMaps.set(classId, classMap);\r\n return classMap;\r\n }\r\n return undefined;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Record meta data for the change.\r\n * @beta\r\n * */\r\nexport interface ChangeMetaData {\r\n /** list of tables making up this EC change */\r\n tables: string[];\r\n /** full name of the class of this EC change */\r\n classFullName?: string;\r\n /** sqlite operation that caused the change */\r\n op: SqliteChangeOp;\r\n /** version of the value read from sqlite change */\r\n stage: SqliteValueStage;\r\n /** if classId for the change was not found in db then fallback class for the table */\r\n fallbackClassId?: Id64String;\r\n /** list of change index making up this change (one per table) */\r\n changeIndexes: number[];\r\n}\r\n\r\n/**\r\n * Represent EC change derived from low level sqlite change\r\n * @beta\r\n */\r\nexport interface ChangedECInstance {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECInstanceId: Id64String;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECClassId?: Id64String;\r\n $meta?: ChangeMetaData;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Helper function to convert between JS DateTime & SQLite JulianDay values.\r\n * @beta\r\n * */\r\nnamespace DateTime {\r\n /**\r\n * Convert JS date to JulianDay value.\r\n * @param dt JS Date object.\r\n * @param convertToUtc convert the input value to UTC.\r\n * @returns julian day value\r\n */\r\n export function toJulianDay(dt: Date, convertToUtc = true): number {\r\n const utcOffset = convertToUtc ? dt.getTimezoneOffset() / 1440 : 0;\r\n return (dt.valueOf() / 86400000) - utcOffset + 2440587.5;\r\n }\r\n /**\r\n * Convert Julian day to JS Date object\r\n * @param jd JulianDay value for date/time\r\n * @param isLocalTime if julian day is local time or UTC\r\n * @returns JS Date object.\r\n */\r\n export function fromJulianDay(jd: number, isLocalTime: boolean): Date {\r\n const utcOffset = isLocalTime ? 0 : new Date().getTimezoneOffset() / 1440;\r\n return new Date((jd - 2440587.5 + utcOffset) * 86400000);\r\n }\r\n}\r\n/**\r\n * Combine partial changed instance into single instance.\r\n * Partial changes is per table and a single instance can\r\n * span multiple tables.\r\n * @beta\r\n */\r\nexport class PartialECChangeUnifier {\r\n private _cache = new Map<string, ChangedECInstance>();\r\n private _readonly = false;\r\n /**\r\n * Get root class id for a given class\r\n * @param classId given class id\r\n * @param db use to find root class\r\n * @returns return root class id\r\n */\r\n private static getRootClassId(classId: Id64String, db: AnyDb): Id64String | undefined {\r\n const sql = `\r\n WITH\r\n [base_class]([classId], [baseClassId], [Level]) AS(\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], 0\r\n FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?\r\n UNION ALL\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1\r\n FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]\r\n\r\n )\r\n SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass\r\n FROM [base_class] [bc]\r\n WHERE [bc].[ClassId] <> [bc].[BaseClassId]\r\n AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]\r\n FROM [ec_CustomAttribute] [ca]\r\n WHERE [ca].[ContainerType] = 30\r\n AND [ca].[ClassId] IN (SELECT [cc].[Id]\r\n FROM [ec_Class] [cc]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]\r\n WHERE [cc].[Name] = 'IsMixIn'\r\n AND [ss].[Name] = 'CoreCustomAttributes'))\r\n ORDER BY [Level] DESC`;\r\n\r\n return db.withSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW && !stmt.isValueNull(0)) {\r\n return stmt.getValueString(0);\r\n }\r\n return classId;\r\n });\r\n }\r\n /**\r\n * Combine partial instance with instance with same key if already exists.\r\n * @param rhs partial instance\r\n */\r\n private combine(rhs: ChangedECInstance, db?: AnyDb): void {\r\n if (!rhs.$meta) {\r\n throw new Error(\"PartialECChange being combine must have '$meta' property\");\r\n }\r\n const key = PartialECChangeUnifier.buildKey(rhs, db);\r\n const lhs = this._cache.get(key);\r\n if (lhs) {\r\n const { $meta: _, ...restOfRhs } = rhs;\r\n Object.assign(lhs, restOfRhs);\r\n if (lhs.$meta && rhs.$meta) {\r\n lhs.$meta.tables = [...rhs.$meta?.tables, ...lhs.$meta?.tables];\r\n lhs.$meta.changeIndexes = [...rhs.$meta?.changeIndexes, ...lhs.$meta?.changeIndexes];\r\n\r\n // we preserve child class name & id when merging instance.\r\n if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && db && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {\r\n const lhsClassId = lhs.$meta.fallbackClassId;\r\n const rhsClassId = rhs.$meta.fallbackClassId;\r\n const isRhsIsSubClassOfLhs = db.withPreparedStatement(\"SELECT ec_instanceof(?,?)\", (stmt) => {\r\n stmt.bindId(1, rhsClassId);\r\n stmt.bindId(2, lhsClassId);\r\n stmt.step();\r\n return stmt.getValue(0).getInteger() === 1;\r\n });\r\n if (isRhsIsSubClassOfLhs) {\r\n lhs.$meta.fallbackClassId = rhs.$meta.fallbackClassId;\r\n lhs.$meta.classFullName = rhs.$meta.classFullName;\r\n }\r\n }\r\n }\r\n } else {\r\n this._cache.set(key, rhs);\r\n }\r\n }\r\n /**\r\n * Build key from EC change.\r\n * @param change EC change\r\n * @returns key created from EC change.\r\n */\r\n private static buildKey(change: ChangedECInstance, db?: AnyDb): string {\r\n let classId = change.ECClassId;\r\n if (typeof classId === \"undefined\") {\r\n if (db && change.$meta?.fallbackClassId) {\r\n classId = this.getRootClassId(change.$meta.fallbackClassId, db);\r\n }\r\n if (typeof classId === \"undefined\") {\r\n throw new Error(`unable to resolve ECClassId to root class id.`);\r\n }\r\n }\r\n return `${change.ECInstanceId}-${classId}-${change.$meta?.stage}`.toLowerCase();\r\n }\r\n /**\r\n * Append partial changes which will be combine using there instance key.\r\n * @note $meta property must be present on partial change as information\r\n * in it is used to combine partial instances.\r\n * @param adaptor changeset adaptor is use to read the partial EC change.\r\n * @beta\r\n */\r\n public appendFrom(adaptor: ChangesetECAdaptor): void {\r\n if (adaptor.disableMetaData) {\r\n throw new Error(\"change adaptor property 'disableMetaData' must be set to 'false'\");\r\n }\r\n if (this._readonly) {\r\n throw new Error(\"this instance is marked as readonly.\");\r\n }\r\n\r\n if (adaptor.op === \"Updated\" && adaptor.inserted && adaptor.deleted) {\r\n this.combine(adaptor.inserted, adaptor.reader.db);\r\n this.combine(adaptor.deleted, adaptor.reader.db);\r\n } else if (adaptor.op === \"Inserted\" && adaptor.inserted) {\r\n this.combine(adaptor.inserted, adaptor.reader.db);\r\n } else if (adaptor.op === \"Deleted\" && adaptor.deleted) {\r\n this.combine(adaptor.deleted, adaptor.reader.db);\r\n }\r\n }\r\n /**\r\n * Delete $meta from all the instances.\r\n */\r\n public stripMetaData(): void {\r\n for (const inst of this._cache.values()) {\r\n if (\"$meta\" in inst) {\r\n delete inst.$meta;\r\n }\r\n }\r\n this._readonly = true;\r\n }\r\n /**\r\n * Returns complete EC change instances.\r\n * @beta\r\n */\r\n public get instances(): IterableIterator<ChangedECInstance> { return this._cache.values(); }\r\n}\r\n\r\n/**\r\n * Transform sqlite change to ec change. EC change is partial change as\r\n * it is per table while a single instance can span multiple table.\r\n * @note PrimitiveArray and StructArray are not supported types.\r\n * @beta\r\n *\r\n*/\r\nexport class ChangesetECAdaptor implements IDisposable {\r\n private readonly _mapCache: ECDbMap;\r\n private readonly _tableFilter = new Set<string>();\r\n private readonly _opFilter = new Set<SqliteChangeOp>();\r\n private readonly _classFilter = new Set<string>();\r\n private _allowedClasses = new Set<string>();\r\n /**\r\n * set debug flags\r\n */\r\n public readonly debugFlags = {\r\n replaceBlobWithEllipsis: false, // replace bolb with ... for debugging\r\n replaceGeomWithEllipsis: false, // replace geom with ... for debugging\r\n replaceGuidWithEllipsis: false, // replace geom with ... for debugging\r\n };\r\n /**\r\n * Return partial inserted instance\r\n * For updates inserted represent new version of instance after update.\r\n */\r\n public inserted?: ChangedECInstance;\r\n /**\r\n * Return partial deleted instance.\r\n * For updates deleted represent old version of instance before update.\r\n */\r\n public deleted?: ChangedECInstance;\r\n\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of tables added by acceptTable().\r\n * @param table Name of the table\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptTable(table: string): ChangesetECAdaptor {\r\n if (!this._tableFilter.has(table))\r\n this._tableFilter.add(table);\r\n return this;\r\n }\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of op added by acceptOp().\r\n * @param op\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptOp(op: SqliteChangeOp): ChangesetECAdaptor {\r\n if (!this._opFilter.has(op))\r\n this._opFilter.add(op);\r\n return this;\r\n }\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of class and its derived classes added by acceptClass().\r\n * @param classFullName\r\n * @returns\r\n */\r\n public acceptClass(classFullName: string): ChangesetECAdaptor {\r\n if (!this._classFilter.has(classFullName))\r\n this._classFilter.add(classFullName);\r\n\r\n this._allowedClasses.clear();\r\n return this;\r\n }\r\n private buildClassFilter() {\r\n if (this._allowedClasses.size !== 0 || this._classFilter.size === 0)\r\n return;\r\n\r\n this._classFilter.forEach((className) => {\r\n this._mapCache.getAllDerivedClasses(className).forEach((classId) => {\r\n this._allowedClasses.add(classId);\r\n });\r\n });\r\n }\r\n /**\r\n * Construct adaptor with a initialized reader.\r\n * @note the changeset reader must have disableSchemaCheck\r\n * set to false and db must also be set.\r\n * @param reader wrap changeset reader.\r\n */\r\n public constructor(public readonly reader: SqliteChangesetReader, public readonly disableMetaData = false) {\r\n if (!reader.disableSchemaCheck)\r\n throw new Error(\"SqliteChangesetReader, 'disableSchemaCheck' param must be set to false.\");\r\n\r\n this._mapCache = new ECDbMap(reader.db);\r\n }\r\n /**\r\n * dispose current instance and it will also dispose the changeset reader.\r\n */\r\n public dispose(): void {\r\n this.close();\r\n }\r\n /**\r\n * close current instance and it will also close the changeset reader.\r\n */\r\n public close(): void {\r\n this.reader.close();\r\n }\r\n /**\r\n * Convert binary GUID into string GUID.\r\n * @param binaryGUID binary version of guid.\r\n * @returns GUID string.\r\n */\r\n private static convertBinaryToGuid(binaryGUID: Uint8Array): GuidString {\r\n // Check if the array has 16 elements\r\n if (binaryGUID.length !== 16) {\r\n throw new Error(\"Invalid array length for Guid\");\r\n }\r\n // Convert each element to a two-digit hexadecimal string\r\n const hex = Array.from(binaryGUID, (byte) => byte.toString(16).padStart(2, \"0\"));\r\n // Join the hexadecimal strings and insert hyphens\r\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(6, 8).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10, 16).join(\"\")}`;\r\n\r\n }\r\n /**\r\n * Set value use access string in a JS object.\r\n * @param targetObj object that will be updated.\r\n * @param accessString access string token separated by '.'.\r\n */\r\n private static setValue(targetObj: any, accessString: string, value: any): void {\r\n let cursor = targetObj;\r\n const propPath = accessString.split(\".\");\r\n propPath.forEach((propertyName) => {\r\n if (propertyName === \"__proto__\")\r\n throw new Error(\"access string cannot container __proto__\");\r\n });\r\n\r\n const leafProp = propPath.splice(-1).shift();\r\n if (!leafProp)\r\n throw new Error(\"not access string was specified.\");\r\n\r\n for (const elem of propPath) {\r\n if (typeof cursor[elem] === \"undefined\")\r\n cursor[elem] = {};\r\n cursor = cursor[elem];\r\n }\r\n cursor[leafProp] = value;\r\n }\r\n\r\n /**\r\n * Check if sqlite change table is a EC data table\r\n * @param tableName name of the table.\r\n * @returns true if table has EC data.\r\n */\r\n public isECTable(tableName: string) {\r\n return typeof this._mapCache.getTable(tableName) !== \"undefined\";\r\n }\r\n /**\r\n * Attempt find ECClassId from ECInstanceId for a change of type 'updated'.\r\n * @param tableName name of the table to find ECClassId from given ECInstanceId\r\n * @param instanceId instance id for which we need ECClassId for.\r\n * @returns if successful returns ECClassId else return undefined.\r\n */\r\n private getClassIdFromDb(tableName: string, instanceId: Id64String): Id64String | undefined {\r\n try {\r\n return this.reader.db?.withPreparedSqliteStatement(`SELECT [ECClassId] FROM [${tableName}] WHERE [rowId]=?`, (stmt) => {\r\n stmt.bindId(1, instanceId);\r\n return stmt.step() === DbResult.BE_SQLITE_ROW ? stmt.getValueId(0) : undefined;\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n /** helper method around reader.op */\r\n public get op() { return this.reader.op; }\r\n /** Return true if current change is of type \"Inserted\" */\r\n public get isInserted() { return this.op === \"Inserted\"; }\r\n /** Return true if current change is of type \"Deleted\" */\r\n public get isDeleted() { return this.op === \"Deleted\"; }\r\n /** Return true if current change is of type \"Updated\" */\r\n public get isUpdated() { return this.op === \"Updated\"; }\r\n\r\n /**\r\n * Advance reader to next change or a change that meets the filter set in the current adaptor\r\n * @returns return false if no more changes to read.\r\n */\r\n public step(): boolean {\r\n this.inserted = undefined;\r\n this.deleted = undefined;\r\n this.buildClassFilter();\r\n while (this.reader.step()) {\r\n if (!this.isECTable(this.reader.tableName))\r\n continue;\r\n\r\n if (this._tableFilter.size > 0) {\r\n if (!this._tableFilter.has(this.reader.tableName))\r\n continue;\r\n }\r\n\r\n if (this._opFilter.size > 0) {\r\n if (!this._opFilter.has(this.reader.op))\r\n continue;\r\n }\r\n\r\n if (this.reader.hasRow) {\r\n const table = this._mapCache.getTable(this.reader.tableName);\r\n if (!table || table.type === \"Virtual\") {\r\n throw new Error(`table in changeset not found or is virtual ${this.reader.tableName}`);\r\n }\r\n\r\n const change = {\r\n inserted: this.reader.getChangeValuesObject(\"New\", { includePrimaryKeyInUpdateNew: true }),\r\n deleted: this.reader.getChangeValuesObject(\"Old\", { includePrimaryKeyInUpdateNew: true }),\r\n };\r\n\r\n if (!change.inserted && !change.deleted) {\r\n throw new Error(`unable to get change from changeset reader`);\r\n }\r\n\r\n let ecClassId: Id64String | undefined = this.reader.op === \"Inserted\" ? change.inserted?.ECClassId : change.deleted?.ECClassId;\r\n const classIdPresentInChange = typeof ecClassId !== \"undefined\";\r\n let classMap: IClassMap | undefined;\r\n let fallbackClassId: Id64String | undefined;\r\n if (table.isClassIdVirtual) {\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n } else {\r\n if (!ecClassId) {\r\n // attempt to find ECClassId against row from the db.\r\n const primaryKeys = this.reader.primaryKeyValues;\r\n if (primaryKeys.length === 1) {\r\n ecClassId = this.getClassIdFromDb(this.reader.tableName, this.reader.primaryKeyValues[0] as Id64String);\r\n }\r\n }\r\n if (ecClassId)\r\n classMap = this._mapCache.getClassMap(ecClassId);\r\n if (!classMap) {\r\n // fallback to root map for table.\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n if (classMap)\r\n fallbackClassId = table.exclusiveRootClassId;\r\n }\r\n }\r\n\r\n if (!classMap)\r\n throw new Error(`unable to load class map`);\r\n\r\n if (!classIdPresentInChange && !ecClassId && !fallbackClassId)\r\n ecClassId = classMap.id;\r\n\r\n if (this._allowedClasses.size !== 0) {\r\n if (!this._allowedClasses.has(classMap.id))\r\n continue;\r\n }\r\n\r\n const $meta = {\r\n tables: [this.reader.tableName],\r\n op: this.reader.op,\r\n classFullName: classMap.name,\r\n fallbackClassId,\r\n changeIndexes: [this.reader.changeIndex],\r\n };\r\n\r\n if (this.reader.op === \"Inserted\" && change.inserted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n } else if (this.reader.op === \"Deleted\" && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else if (change.inserted && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else {\r\n throw new Error(\"unable to read EC changes\");\r\n }\r\n break;\r\n }\r\n }\r\n return this.reader.hasRow;\r\n }\r\n /**\r\n * Transform nav change column into navigation EC property\r\n * @param prop navigation property definition.\r\n * @param change sqlite change.\r\n * @param out ec instance that will be updated with navigation property.\r\n */\r\n private transformNavigationProperty(prop: IProperty, change: SqliteChange, out: ChangedECInstance): void {\r\n const idCol = prop.columns.filter(($) => $.accessString.endsWith(\".Id\")).at(0);\r\n if (!idCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const idValue = change[idCol.column];\r\n if (typeof idValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, idCol.accessString, idValue);\r\n\r\n const relClassIdCol = prop.columns.filter(($) => $.accessString.endsWith(\".RelECClassId\")).at(0);\r\n if (!relClassIdCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const relClassIdValue = relClassIdCol.isVirtual ? prop.navigationRelationship?.classId : change[relClassIdCol.column];\r\n if (typeof relClassIdValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, relClassIdCol.accessString, relClassIdValue);\r\n }\r\n /**\r\n * Transform sqlite change into EC change.\r\n * @param classMap classMap use to deserialize sqlite change into EC change.\r\n * @param change sqlite change from changeset.\r\n * @param table table definition of sqlite change provided.\r\n * @param out EC changeset that will be updated with properties.\r\n */\r\n private transform(classMap: IClassMap, change: SqliteChange, table: ITable, out: ChangedECInstance): void {\r\n // transform change row to instance\r\n for (const prop of classMap.properties) {\r\n if (prop.kind === \"PrimitiveArray\" || prop.kind === \"StructArray\") {\r\n // Arrays not supported\r\n continue;\r\n }\r\n if (prop.columns.filter((_) => _.isVirtual).length === prop.columns.length) {\r\n continue;\r\n }\r\n if (prop.kind === \"Navigation\") {\r\n this.transformNavigationProperty(prop, change, out);\r\n } else {\r\n for (const col of prop.columns) {\r\n if (col.table !== table.name)\r\n continue;\r\n\r\n const columnValue = change[col.column];\r\n if (typeof columnValue === \"undefined\")\r\n continue;\r\n\r\n if (columnValue !== null) {\r\n if (prop.primitiveType === \"DateTime\") {\r\n const dt = DateTime.fromJulianDay(columnValue, prop.dateTimeInfo?.dateTimeKind === \"Local\");\r\n ChangesetECAdaptor.setValue(out, col.accessString, dt.toISOString());\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"BeGuid\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGuidWithEllipsis ? \"...\" : ChangesetECAdaptor.convertBinaryToGuid(columnValue));\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"GeometryStream\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGeomWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n if (prop.primitiveType === \"Binary\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceBlobWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n }\r\n ChangesetECAdaptor.setValue(out, col.accessString, columnValue);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayStyle.d.ts","sourceRoot":"","sources":["../../src/DisplayStyle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsC,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EACQ,IAAI,EAAE,cAAc,EAAY,QAAQ,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,2BAA2B,EAC/H,iBAAiB,EAAE,oBAAoB,EAAgC,kBAAkB,EAA+B,cAAc,EAAoB,SAAS,EACpK,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;;GAIG;AACH,8BAAsB,YAAa,SAAQ,iBAAiB;IAC1D,WAA2B,SAAS,IAAI,MAAM,CAA2B;IACzE,aAAoB,QAAQ,IAAI,oBAAoB,CAAC;IAErD,SAAS,aAAa,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ;IAIhE;;;;OAIG;WACW,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;cAK9E,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAkB9E,aAAa;qBACa,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,IAAI;IAgDnJ,kBAAkB,IAAI,cAAc,CAAC,eAAe,GAAG,SAAS;CAgBxE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAEjD,IAAW,QAAQ,IAAI,oBAAoB,CAA2B;IAEtE,SAAS,aAAa,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ;IAIhE;;;;;;OAMG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAgBrG;;;;;;OAMG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;CAIlG;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,2BAA2B,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;IAC1H;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,IAAW,QAAQ,IAAI,sBAAsB,CAA2B;IAExE,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;cAK/C,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"DisplayStyle.d.ts","sourceRoot":"","sources":["../../src/DisplayStyle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsC,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EACQ,IAAI,EAAE,cAAc,EAAY,QAAQ,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,2BAA2B,EAC/H,iBAAiB,EAAE,oBAAoB,EAAgC,kBAAkB,EAA+B,cAAc,EAAoB,SAAS,EACpK,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;;GAIG;AACH,8BAAsB,YAAa,SAAQ,iBAAiB;IAC1D,WAA2B,SAAS,IAAI,MAAM,CAA2B;IACzE,aAAoB,QAAQ,IAAI,oBAAoB,CAAC;IAErD,SAAS,aAAa,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ;IAIhE;;;;OAIG;WACW,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;cAK9E,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAkB9E,aAAa;qBACa,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,IAAI;IAgDnJ,kBAAkB,IAAI,cAAc,CAAC,eAAe,GAAG,SAAS;CAgBxE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAEjD,IAAW,QAAQ,IAAI,oBAAoB,CAA2B;IAEtE,SAAS,aAAa,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ;IAIhE;;;;;;OAMG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAgBrG;;;;;;OAMG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;CAIlG;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,2BAA2B,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;IAC1H;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,WAA2B,SAAS,IAAI,MAAM,CAA6B;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,IAAW,QAAQ,IAAI,sBAAsB,CAA2B;IAExE,SAAS,aAAa,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ;cAK/C,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAkB9E,aAAa;qBACa,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,GAAG,IAAI;IAgD9J;;;;;;OAMG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,cAAc;IAyB5I;;;;;;;OAOG;WACW,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,UAAU;CAIzI"}
|
package/lib/cjs/DisplayStyle.js
CHANGED
|
@@ -172,6 +172,13 @@ class DisplayStyle3d extends DisplayStyle {
|
|
|
172
172
|
if (this.settings.planProjectionSettings)
|
|
173
173
|
for (const planProjectionSetting of this.settings.planProjectionSettings)
|
|
174
174
|
referenceIds.addElement(planProjectionSetting[0]);
|
|
175
|
+
const groups = this.settings.contours.groups;
|
|
176
|
+
for (const group of groups) {
|
|
177
|
+
const subCategories = group.subCategories;
|
|
178
|
+
for (const subCategoryId of subCategories) {
|
|
179
|
+
referenceIds.addElement(subCategoryId);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
175
182
|
}
|
|
176
183
|
/** @alpha */
|
|
177
184
|
static onCloned(context, sourceElementProps, targetElementProps) {
|
|
@@ -199,6 +206,22 @@ class DisplayStyle3d extends DisplayStyle {
|
|
|
199
206
|
}
|
|
200
207
|
targetElementProps.jsonProperties.styles.planProjections = remappedPlanProjections;
|
|
201
208
|
}
|
|
209
|
+
const groups = targetElementProps?.jsonProperties?.styles?.contours?.groups;
|
|
210
|
+
if (groups) {
|
|
211
|
+
for (const group of groups) {
|
|
212
|
+
if (group.subCategories) {
|
|
213
|
+
const subCategories = core_bentley_1.CompressedId64Set.decompressArray(group.subCategories);
|
|
214
|
+
const remappedSubCategories = [];
|
|
215
|
+
for (const subCategoryId of subCategories) {
|
|
216
|
+
const remappedSubCategoryId = context.findTargetElementId(subCategoryId);
|
|
217
|
+
if (core_bentley_1.Id64.isValidId64(remappedSubCategoryId)) {
|
|
218
|
+
remappedSubCategories.push(remappedSubCategoryId);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
group.subCategories = core_bentley_1.CompressedId64Set.sortAndCompress(remappedSubCategories);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
202
225
|
}
|
|
203
226
|
}
|
|
204
227
|
/** Create a DisplayStyle3d for use by a ViewDefinition.
|