@itwin/core-backend 4.0.0-dev.52 → 4.0.0-dev.55
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/lib/cjs/AliCloudStorageService.d.ts +23 -23
- package/lib/cjs/AliCloudStorageService.js +71 -71
- package/lib/cjs/AliCloudStorageService.js.map +1 -1
- package/lib/cjs/BackendHubAccess.d.ts +224 -224
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js +41 -41
- package/lib/cjs/BackendLoggerCategory.d.ts +90 -91
- package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js +98 -99
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.d.ts +21 -21
- package/lib/cjs/BisCoreSchema.js +60 -60
- package/lib/cjs/BriefcaseManager.d.ts +170 -170
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +408 -408
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +153 -153
- package/lib/cjs/Category.js +243 -243
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.d.ts +187 -187
- package/lib/cjs/ChangeSummaryManager.js +444 -444
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.d.ts +99 -99
- package/lib/cjs/ChangedElementsDb.js +165 -165
- package/lib/cjs/ChangedElementsManager.d.ts +39 -39
- package/lib/cjs/ChangedElementsManager.js +88 -88
- package/lib/cjs/ChannelControl.d.ts +69 -69
- package/lib/cjs/ChannelControl.d.ts.map +1 -1
- package/lib/cjs/ChannelControl.js +88 -88
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.d.ts +121 -121
- package/lib/cjs/CheckpointManager.d.ts.map +1 -1
- package/lib/cjs/CheckpointManager.js +351 -351
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +79 -79
- package/lib/cjs/ClassRegistry.js +249 -244
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +355 -355
- package/lib/cjs/CloudSqlite.js +154 -154
- package/lib/cjs/CloudStorageBackend.d.ts +58 -58
- package/lib/cjs/CloudStorageBackend.js +170 -170
- package/lib/cjs/CodeService.d.ts +396 -396
- package/lib/cjs/CodeService.js +63 -63
- package/lib/cjs/CodeSpecs.d.ts +55 -55
- package/lib/cjs/CodeSpecs.js +124 -124
- package/lib/cjs/ConcurrentQuery.d.ts +13 -13
- package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
- package/lib/cjs/ConcurrentQuery.js +36 -36
- package/lib/cjs/CustomViewState3dCreator.d.ts +21 -21
- package/lib/cjs/CustomViewState3dCreator.js +82 -82
- package/lib/cjs/DevTools.d.ts +74 -73
- package/lib/cjs/DevTools.d.ts.map +1 -1
- package/lib/cjs/DevTools.js +156 -156
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +106 -106
- package/lib/cjs/DisplayStyle.js +253 -253
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +194 -194
- package/lib/cjs/ECDb.js +353 -353
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.d.ts +18 -18
- package/lib/cjs/ECSchemaXmlContext.d.ts.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js +41 -41
- package/lib/cjs/ECSqlStatement.d.ts +473 -473
- package/lib/cjs/ECSqlStatement.js +791 -791
- package/lib/cjs/Element.d.ts +1113 -1113
- package/lib/cjs/Element.js +1424 -1424
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +176 -176
- package/lib/cjs/ElementAspect.js +203 -203
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.d.ts +9 -9
- package/lib/cjs/ElementGraphics.js +41 -41
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +162 -162
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +409 -409
- package/lib/cjs/Entity.d.ts +106 -106
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +134 -134
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.d.ts +49 -49
- package/lib/cjs/EntityReferences.d.ts.map +1 -1
- package/lib/cjs/EntityReferences.js +95 -95
- package/lib/cjs/ExportGraphics.d.ts +317 -317
- package/lib/cjs/ExportGraphics.d.ts.map +1 -1
- package/lib/cjs/ExportGraphics.js +208 -208
- package/lib/cjs/ExternalSource.d.ts +96 -96
- package/lib/cjs/ExternalSource.js +131 -131
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.d.ts +19 -19
- package/lib/cjs/GeoCoordConfig.js +85 -85
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeometrySummary.d.ts +4 -4
- package/lib/cjs/GeometrySummary.js +333 -333
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/HubMock.d.ts +94 -94
- package/lib/cjs/HubMock.js +220 -220
- package/lib/cjs/HubMock.js.map +1 -1
- package/lib/cjs/IModelCloneContext.d.ts +8 -8
- package/lib/cjs/IModelCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelCloneContext.js +15 -15
- package/lib/cjs/IModelDb.d.ts +1216 -1216
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +2387 -2386
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +89 -89
- package/lib/cjs/IModelElementCloneContext.js +159 -159
- package/lib/cjs/IModelHost.d.ts +369 -369
- package/lib/cjs/IModelHost.js +488 -488
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelJsFs.d.ts +62 -62
- package/lib/cjs/IModelJsFs.js +139 -139
- package/lib/cjs/IpcHost.d.ts +104 -104
- package/lib/cjs/IpcHost.js +276 -276
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +311 -311
- package/lib/cjs/LineStyle.js +295 -295
- package/lib/cjs/LocalHub.d.ts +162 -162
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +579 -579
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.d.ts +20 -20
- package/lib/cjs/LocalhostIpcHost.js +79 -79
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/Material.d.ts +131 -131
- package/lib/cjs/Material.js +180 -180
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +392 -392
- package/lib/cjs/Model.js +489 -489
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.d.ts +51 -51
- package/lib/cjs/NativeAppStorage.js +202 -202
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.d.ts +52 -52
- package/lib/cjs/NativeHost.js +160 -160
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.d.ts +156 -156
- package/lib/cjs/NavigationRelationship.js +225 -225
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.d.ts +51 -51
- package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
- package/lib/cjs/PromiseMemoizer.js +101 -101
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.d.ts +132 -132
- package/lib/cjs/PropertyStore.js +11 -11
- package/lib/cjs/Relationship.d.ts +416 -416
- package/lib/cjs/Relationship.js +494 -494
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.d.ts +5 -5
- package/lib/cjs/RpcBackend.js +32 -32
- package/lib/cjs/SQLiteDb.d.ts +219 -219
- package/lib/cjs/SQLiteDb.js +212 -212
- package/lib/cjs/Schema.d.ts +55 -55
- package/lib/cjs/Schema.js +83 -83
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/ServerBasedLocks.d.ts +57 -57
- package/lib/cjs/ServerBasedLocks.js +168 -168
- package/lib/cjs/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/SqliteStatement.d.ts +360 -360
- package/lib/cjs/SqliteStatement.d.ts.map +1 -1
- package/lib/cjs/SqliteStatement.js +586 -586
- package/lib/cjs/Texture.d.ts +58 -58
- package/lib/cjs/Texture.js +82 -82
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.d.ts +18 -18
- package/lib/cjs/TileStorage.js +87 -87
- package/lib/cjs/TxnManager.d.ts +202 -202
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +356 -356
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +435 -435
- package/lib/cjs/ViewDefinition.js +646 -646
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.d.ts +13 -13
- package/lib/cjs/ViewStateHydrator.js +103 -103
- package/lib/cjs/core-backend.d.ts +185 -185
- package/lib/cjs/core-backend.js +209 -205
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +101 -101
- package/lib/cjs/domains/FunctionalElements.js +145 -145
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.d.ts +13 -13
- package/lib/cjs/domains/FunctionalSchema.js +39 -39
- package/lib/cjs/domains/GenericElements.d.ts +177 -177
- package/lib/cjs/domains/GenericElements.js +263 -263
- package/lib/cjs/domains/GenericSchema.d.ts +10 -10
- package/lib/cjs/domains/GenericSchema.js +28 -28
- package/lib/cjs/rpc/multipart.d.ts +11 -11
- package/lib/cjs/rpc/multipart.js +71 -71
- package/lib/cjs/rpc/tracing.d.ts +28 -28
- package/lib/cjs/rpc/tracing.js +73 -73
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.d.ts +9 -9
- package/lib/cjs/rpc/web/logging.js +43 -43
- package/lib/cjs/rpc/web/request.d.ts +6 -6
- package/lib/cjs/rpc/web/request.js +73 -73
- package/lib/cjs/rpc/web/response.d.ts +6 -6
- package/lib/cjs/rpc/web/response.js +105 -105
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +15 -15
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +32 -32
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +47 -47
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +293 -293
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +22 -22
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +202 -202
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +36 -36
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +166 -166
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +16 -16
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +42 -42
- package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +15 -15
- package/lib/cjs/rpc-impl/WipRpcImpl.js +37 -37
- package/lib/cjs/workspace/Settings.d.ts +186 -186
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js +154 -154
- package/lib/cjs/workspace/SettingsSchemas.d.ts +75 -75
- package/lib/cjs/workspace/SettingsSchemas.js +190 -190
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +414 -414
- package/lib/cjs/workspace/Workspace.js +537 -537
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/package.json +12 -12
package/lib/cjs/Entity.d.ts
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module Schema
|
|
3
|
-
*/
|
|
4
|
-
import { Id64String } from "@itwin/core-bentley";
|
|
5
|
-
import { EntityProps, EntityReferenceSet, PropertyCallback } from "@itwin/core-common";
|
|
6
|
-
import { IModelDb } from "./IModelDb";
|
|
7
|
-
import { Schema } from "./Schema";
|
|
8
|
-
/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].
|
|
9
|
-
* Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).
|
|
10
|
-
* An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].
|
|
11
|
-
* @public
|
|
12
|
-
*/
|
|
13
|
-
export declare class Entity {
|
|
14
|
-
/** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types
|
|
15
|
-
* are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].
|
|
16
|
-
*/
|
|
17
|
-
readonly isInstanceOfEntity: true;
|
|
18
|
-
/** The Schema that defines this class. */
|
|
19
|
-
static schema: typeof Schema;
|
|
20
|
-
private get _ctor();
|
|
21
|
-
/** The name of the BIS class associated with this class.
|
|
22
|
-
* @note Every subclass of Entity **MUST** override this method to identify its BIS class.
|
|
23
|
-
* Failure to do so will ordinarily result in an error when the class is registered, since there may only
|
|
24
|
-
* be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)
|
|
25
|
-
*/
|
|
26
|
-
static get className(): string;
|
|
27
|
-
/** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.
|
|
28
|
-
* This property makes such code slightly less tedious to read and write.
|
|
29
|
-
* @internal
|
|
30
|
-
*/
|
|
31
|
-
get asAny(): any;
|
|
32
|
-
/** The name of the BIS Schema that defines this class */
|
|
33
|
-
get schemaName(): string;
|
|
34
|
-
/** The name of the BIS class associated with this class. */
|
|
35
|
-
get className(): string;
|
|
36
|
-
/** The [[IModelDb]] that contains this Entity */
|
|
37
|
-
iModel: IModelDb;
|
|
38
|
-
/** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */
|
|
39
|
-
id: Id64String;
|
|
40
|
-
/** @internal */
|
|
41
|
-
constructor(props: EntityProps, iModel: IModelDb);
|
|
42
|
-
/** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -
|
|
43
|
-
* for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).
|
|
44
|
-
*/
|
|
45
|
-
toJSON(): EntityProps;
|
|
46
|
-
/** Call a function for each property of this Entity.
|
|
47
|
-
* @param func The callback to be invoked on each property
|
|
48
|
-
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
49
|
-
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
50
|
-
*/
|
|
51
|
-
forEachProperty(func: PropertyCallback, includeCustom?: boolean): void;
|
|
52
|
-
/** Get the full BIS class name of this Entity in the form "schema:class" */
|
|
53
|
-
static get classFullName(): string;
|
|
54
|
-
/** Get the full BIS class name of this Entity in the form "schema:class". */
|
|
55
|
-
get classFullName(): string;
|
|
56
|
-
/** @internal */
|
|
57
|
-
static get protectedOperations(): string[];
|
|
58
|
-
/** return whether this Entity class is a subclass of another Entity class
|
|
59
|
-
* @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's
|
|
60
|
-
* inheritance, you can use [ECClass.is]($ecschema-metadata)
|
|
61
|
-
* @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of
|
|
62
|
-
* typescript's restriction on the `this` type in static methods
|
|
63
|
-
*/
|
|
64
|
-
static is(otherClass: typeof Entity): boolean;
|
|
65
|
-
/** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation
|
|
66
|
-
* ClassRegistry overrides this when generating a class
|
|
67
|
-
* @internal
|
|
68
|
-
*/
|
|
69
|
-
static get isGeneratedClass(): boolean;
|
|
70
|
-
/** Get the Ids of this element's *references*. A *reference* is an element that this element references.
|
|
71
|
-
* This is important for cloning operations but can be useful in other situations as well.
|
|
72
|
-
* @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet
|
|
73
|
-
* which does not iterate plain Id64s, see [EntityReferenceSet]($backend).
|
|
74
|
-
* @see collectReferenceIds
|
|
75
|
-
* @beta
|
|
76
|
-
*/
|
|
77
|
-
getReferenceIds(): Set<Id64String>;
|
|
78
|
-
/** This is the intended and future behavior of [[getReferenceIds]].
|
|
79
|
-
* In the next breaking change it will replace getReferenceIds, and is already used by the transformer
|
|
80
|
-
* @internal
|
|
81
|
-
*/
|
|
82
|
-
getReferenceConcreteIds(): EntityReferenceSet;
|
|
83
|
-
/** Collect the Ids of this entity's *references* at this level of the class hierarchy.
|
|
84
|
-
* A *reference* is any entity referenced by this entity's EC Data
|
|
85
|
-
* This is important for cloning operations but can be useful in other situations as well.
|
|
86
|
-
* @param _referenceIds The Id64Set to populate with reference Ids.
|
|
87
|
-
* @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,
|
|
88
|
-
* which does not accept plain Id64s, see EntityReferenceSet.
|
|
89
|
-
* @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).
|
|
90
|
-
* @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.
|
|
91
|
-
* @see getReferenceIds
|
|
92
|
-
* @beta
|
|
93
|
-
*/
|
|
94
|
-
protected collectReferenceIds(referenceIds: Set<Id64String>): void;
|
|
95
|
-
/** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.
|
|
96
|
-
* In the next breaking change it will replace getReferenceIds
|
|
97
|
-
* @internal
|
|
98
|
-
*/
|
|
99
|
-
protected collectReferenceConcreteIds(_referenceIds: EntityReferenceSet): void;
|
|
100
|
-
}
|
|
101
|
-
/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.
|
|
102
|
-
* @public
|
|
103
|
-
*/
|
|
104
|
-
export
|
|
105
|
-
prototype: T;
|
|
106
|
-
};
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Schema
|
|
3
|
+
*/
|
|
4
|
+
import { Id64String } from "@itwin/core-bentley";
|
|
5
|
+
import { EntityProps, EntityReferenceSet, PropertyCallback } from "@itwin/core-common";
|
|
6
|
+
import { IModelDb } from "./IModelDb";
|
|
7
|
+
import { Schema } from "./Schema";
|
|
8
|
+
/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].
|
|
9
|
+
* Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).
|
|
10
|
+
* An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export declare class Entity {
|
|
14
|
+
/** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types
|
|
15
|
+
* are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].
|
|
16
|
+
*/
|
|
17
|
+
readonly isInstanceOfEntity: true;
|
|
18
|
+
/** The Schema that defines this class. */
|
|
19
|
+
static schema: typeof Schema;
|
|
20
|
+
private get _ctor();
|
|
21
|
+
/** The name of the BIS class associated with this class.
|
|
22
|
+
* @note Every subclass of Entity **MUST** override this method to identify its BIS class.
|
|
23
|
+
* Failure to do so will ordinarily result in an error when the class is registered, since there may only
|
|
24
|
+
* be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)
|
|
25
|
+
*/
|
|
26
|
+
static get className(): string;
|
|
27
|
+
/** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.
|
|
28
|
+
* This property makes such code slightly less tedious to read and write.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
get asAny(): any;
|
|
32
|
+
/** The name of the BIS Schema that defines this class */
|
|
33
|
+
get schemaName(): string;
|
|
34
|
+
/** The name of the BIS class associated with this class. */
|
|
35
|
+
get className(): string;
|
|
36
|
+
/** The [[IModelDb]] that contains this Entity */
|
|
37
|
+
iModel: IModelDb;
|
|
38
|
+
/** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */
|
|
39
|
+
id: Id64String;
|
|
40
|
+
/** @internal */
|
|
41
|
+
constructor(props: EntityProps, iModel: IModelDb);
|
|
42
|
+
/** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -
|
|
43
|
+
* for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).
|
|
44
|
+
*/
|
|
45
|
+
toJSON(): EntityProps;
|
|
46
|
+
/** Call a function for each property of this Entity.
|
|
47
|
+
* @param func The callback to be invoked on each property
|
|
48
|
+
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
49
|
+
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
50
|
+
*/
|
|
51
|
+
forEachProperty(func: PropertyCallback, includeCustom?: boolean): void;
|
|
52
|
+
/** Get the full BIS class name of this Entity in the form "schema:class" */
|
|
53
|
+
static get classFullName(): string;
|
|
54
|
+
/** Get the full BIS class name of this Entity in the form "schema:class". */
|
|
55
|
+
get classFullName(): string;
|
|
56
|
+
/** @internal */
|
|
57
|
+
static get protectedOperations(): string[];
|
|
58
|
+
/** return whether this Entity class is a subclass of another Entity class
|
|
59
|
+
* @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's
|
|
60
|
+
* inheritance, you can use [ECClass.is]($ecschema-metadata)
|
|
61
|
+
* @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of
|
|
62
|
+
* typescript's restriction on the `this` type in static methods
|
|
63
|
+
*/
|
|
64
|
+
static is(otherClass: typeof Entity): boolean;
|
|
65
|
+
/** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation
|
|
66
|
+
* ClassRegistry overrides this when generating a class
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
static get isGeneratedClass(): boolean;
|
|
70
|
+
/** Get the Ids of this element's *references*. A *reference* is an element that this element references.
|
|
71
|
+
* This is important for cloning operations but can be useful in other situations as well.
|
|
72
|
+
* @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet
|
|
73
|
+
* which does not iterate plain Id64s, see [EntityReferenceSet]($backend).
|
|
74
|
+
* @see collectReferenceIds
|
|
75
|
+
* @beta
|
|
76
|
+
*/
|
|
77
|
+
getReferenceIds(): Set<Id64String>;
|
|
78
|
+
/** This is the intended and future behavior of [[getReferenceIds]].
|
|
79
|
+
* In the next breaking change it will replace getReferenceIds, and is already used by the transformer
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
getReferenceConcreteIds(): EntityReferenceSet;
|
|
83
|
+
/** Collect the Ids of this entity's *references* at this level of the class hierarchy.
|
|
84
|
+
* A *reference* is any entity referenced by this entity's EC Data
|
|
85
|
+
* This is important for cloning operations but can be useful in other situations as well.
|
|
86
|
+
* @param _referenceIds The Id64Set to populate with reference Ids.
|
|
87
|
+
* @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,
|
|
88
|
+
* which does not accept plain Id64s, see EntityReferenceSet.
|
|
89
|
+
* @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).
|
|
90
|
+
* @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.
|
|
91
|
+
* @see getReferenceIds
|
|
92
|
+
* @beta
|
|
93
|
+
*/
|
|
94
|
+
protected collectReferenceIds(referenceIds: Set<Id64String>): void;
|
|
95
|
+
/** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.
|
|
96
|
+
* In the next breaking change it will replace getReferenceIds
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
protected collectReferenceConcreteIds(_referenceIds: EntityReferenceSet): void;
|
|
100
|
+
}
|
|
101
|
+
/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
export type EntityClassType<T> = Function & {
|
|
105
|
+
prototype: T;
|
|
106
|
+
};
|
|
107
107
|
//# sourceMappingURL=Entity.d.ts.map
|
package/lib/cjs/Entity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../src/Entity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,UAAU,EAAgB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;GAIG;AACH,qBAAa,MAAM;IACjB;;OAEG;IACH,SAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../src/Entity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,UAAU,EAAgB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;GAIG;AACH,qBAAa,MAAM;IACjB;;OAEG;IACH,SAAgB,kBAAkB,OAAiB;IACnD,0CAA0C;IAC1C,OAAc,MAAM,EAAE,OAAO,MAAM,CAAC;IAEpC,OAAO,KAAK,KAAK,GAA+D;IAEhF;;;;OAIG;IACH,WAAkB,SAAS,IAAI,MAAM,CAAqB;IAE1D;;;OAGG;IACH,IAAW,KAAK,IAAI,GAAG,CAAiB;IAExC,yDAAyD;IACzD,IAAW,UAAU,IAAI,MAAM,CAAyC;IAExE,4DAA4D;IAC5D,IAAW,SAAS,IAAI,MAAM,CAAiC;IAE/D,iDAAiD;IAC1C,MAAM,EAAE,QAAQ,CAAC;IAExB,kGAAkG;IAC3F,EAAE,EAAE,UAAU,CAAC;IAEtB,gBAAgB;gBACJ,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ;IAOhD;;OAEG;IACI,MAAM,IAAI,WAAW;IAS5B;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,GAAE,OAAc;IAE5E,4EAA4E;IAC5E,WAAkB,aAAa,IAAI,MAAM,CAA0D;IAEnG,6EAA6E;IAC7E,IAAW,aAAa,IAAI,MAAM,CAAqC;IAEvE,gBAAgB;IAChB,WAAkB,mBAAmB,IAAI,MAAM,EAAE,CAAe;IAEhE;;;;;OAKG;WACW,EAAE,CAAC,UAAU,EAAE,OAAO,MAAM,GAAG,OAAO;IAEpD;;;OAGG;IACH,WAAkB,gBAAgB,YAAoB;IAGtD;;;;;;OAMG;IACI,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC;IAMzC;;;OAGG;IACI,uBAAuB,IAAI,kBAAkB;IAMpD;;;;;;;;;;OAUG;IACH,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;IAYlE;;;OAGG;IACH,SAAS,CAAC,2BAA2B,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI;CAG/E;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,QAAQ,GAAG;IAAE,SAAS,EAAE,CAAC,CAAA;CAAE,CAAC"}
|
package/lib/cjs/Entity.js
CHANGED
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
/** @packageDocumentation
|
|
7
|
-
* @module Schema
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.Entity = void 0;
|
|
11
|
-
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
-
const core_common_1 = require("@itwin/core-common");
|
|
13
|
-
const IModelDb_1 = require("./IModelDb");
|
|
14
|
-
/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].
|
|
15
|
-
* Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).
|
|
16
|
-
* An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].
|
|
17
|
-
* @public
|
|
18
|
-
*/
|
|
19
|
-
class Entity {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
get
|
|
32
|
-
/** The name of the BIS
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -
|
|
48
|
-
* for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).
|
|
49
|
-
*/
|
|
50
|
-
toJSON() {
|
|
51
|
-
const val = {};
|
|
52
|
-
val.classFullName = this.classFullName;
|
|
53
|
-
if (core_bentley_1.Id64.isValid(this.id))
|
|
54
|
-
val.id = this.id;
|
|
55
|
-
this.forEachProperty((propName) => val[propName] = this[propName], false);
|
|
56
|
-
return val;
|
|
57
|
-
}
|
|
58
|
-
/** Call a function for each property of this Entity.
|
|
59
|
-
* @param func The callback to be invoked on each property
|
|
60
|
-
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
61
|
-
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
62
|
-
*/
|
|
63
|
-
forEachProperty(func, includeCustom = true) { IModelDb_1.IModelDb.forEachMetaData(this.iModel, this.classFullName, true, func, includeCustom); }
|
|
64
|
-
/** Get the full BIS class name of this Entity in the form "schema:class" */
|
|
65
|
-
static get classFullName() { return `${this.schema.schemaName}:${this.className}`; }
|
|
66
|
-
/** Get the full BIS class name of this Entity in the form "schema:class". */
|
|
67
|
-
get classFullName() { return this._ctor.classFullName; }
|
|
68
|
-
/** @internal */
|
|
69
|
-
static get protectedOperations() { return []; }
|
|
70
|
-
/** return whether this Entity class is a subclass of another Entity class
|
|
71
|
-
* @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's
|
|
72
|
-
* inheritance, you can use [ECClass.is]($ecschema-metadata)
|
|
73
|
-
* @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of
|
|
74
|
-
* typescript's restriction on the `this` type in static methods
|
|
75
|
-
*/
|
|
76
|
-
static is(otherClass) { return (0, core_bentley_1.isSubclassOf)(this, otherClass); }
|
|
77
|
-
/** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation
|
|
78
|
-
* ClassRegistry overrides this when generating a class
|
|
79
|
-
* @internal
|
|
80
|
-
*/
|
|
81
|
-
static get isGeneratedClass() { return false; }
|
|
82
|
-
// NOTE: will also consider using generated collectReferences everywhere and a separate collectJsonPropertyReferenceIds
|
|
83
|
-
/** Get the Ids of this element's *references*. A *reference* is an element that this element references.
|
|
84
|
-
* This is important for cloning operations but can be useful in other situations as well.
|
|
85
|
-
* @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet
|
|
86
|
-
* which does not iterate plain Id64s, see [EntityReferenceSet]($backend).
|
|
87
|
-
* @see collectReferenceIds
|
|
88
|
-
* @beta
|
|
89
|
-
*/
|
|
90
|
-
getReferenceIds() {
|
|
91
|
-
const referenceIds = new Set();
|
|
92
|
-
this.collectReferenceIds(referenceIds); // eslint-disable-line deprecation/deprecation
|
|
93
|
-
return referenceIds;
|
|
94
|
-
}
|
|
95
|
-
/** This is the intended and future behavior of [[getReferenceIds]].
|
|
96
|
-
* In the next breaking change it will replace getReferenceIds, and is already used by the transformer
|
|
97
|
-
* @internal
|
|
98
|
-
*/
|
|
99
|
-
getReferenceConcreteIds() {
|
|
100
|
-
const referenceIds = new core_common_1.EntityReferenceSet();
|
|
101
|
-
this.collectReferenceConcreteIds(referenceIds);
|
|
102
|
-
return referenceIds;
|
|
103
|
-
}
|
|
104
|
-
/** Collect the Ids of this entity's *references* at this level of the class hierarchy.
|
|
105
|
-
* A *reference* is any entity referenced by this entity's EC Data
|
|
106
|
-
* This is important for cloning operations but can be useful in other situations as well.
|
|
107
|
-
* @param _referenceIds The Id64Set to populate with reference Ids.
|
|
108
|
-
* @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,
|
|
109
|
-
* which does not accept plain Id64s, see EntityReferenceSet.
|
|
110
|
-
* @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).
|
|
111
|
-
* @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.
|
|
112
|
-
* @see getReferenceIds
|
|
113
|
-
* @beta
|
|
114
|
-
*/
|
|
115
|
-
collectReferenceIds(referenceIds) {
|
|
116
|
-
const concreteEntityIds = this.getReferenceConcreteIds();
|
|
117
|
-
for (const entity of concreteEntityIds) {
|
|
118
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/naming-convention
|
|
119
|
-
const EntityReferences = require("./EntityReferences").EntityReferences;
|
|
120
|
-
// the old [[collectReferenceIds]] only supported elements/models, and the id spaces can overlap so dont include anything else
|
|
121
|
-
if (EntityReferences.isElement(entity) || EntityReferences.isModel(entity)) {
|
|
122
|
-
referenceIds.add(EntityReferences.toId64(entity));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.
|
|
127
|
-
* In the next breaking change it will replace getReferenceIds
|
|
128
|
-
* @internal
|
|
129
|
-
*/
|
|
130
|
-
collectReferenceConcreteIds(_referenceIds) {
|
|
131
|
-
return; // no references by default
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
exports.Entity = Entity;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module Schema
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.Entity = void 0;
|
|
11
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
+
const core_common_1 = require("@itwin/core-common");
|
|
13
|
+
const IModelDb_1 = require("./IModelDb");
|
|
14
|
+
/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].
|
|
15
|
+
* Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).
|
|
16
|
+
* An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
class Entity {
|
|
20
|
+
get _ctor() { return this.constructor; }
|
|
21
|
+
/** The name of the BIS class associated with this class.
|
|
22
|
+
* @note Every subclass of Entity **MUST** override this method to identify its BIS class.
|
|
23
|
+
* Failure to do so will ordinarily result in an error when the class is registered, since there may only
|
|
24
|
+
* be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)
|
|
25
|
+
*/
|
|
26
|
+
static get className() { return "Entity"; }
|
|
27
|
+
/** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.
|
|
28
|
+
* This property makes such code slightly less tedious to read and write.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
get asAny() { return this; }
|
|
32
|
+
/** The name of the BIS Schema that defines this class */
|
|
33
|
+
get schemaName() { return this._ctor.schema.schemaName; }
|
|
34
|
+
/** The name of the BIS class associated with this class. */
|
|
35
|
+
get className() { return this._ctor.className; }
|
|
36
|
+
/** @internal */
|
|
37
|
+
constructor(props, iModel) {
|
|
38
|
+
/** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types
|
|
39
|
+
* are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].
|
|
40
|
+
*/
|
|
41
|
+
this.isInstanceOfEntity = true;
|
|
42
|
+
this.iModel = iModel;
|
|
43
|
+
this.id = core_bentley_1.Id64.fromJSON(props.id);
|
|
44
|
+
// copy all auto-handled properties from input to the object being constructed
|
|
45
|
+
this.forEachProperty((propName, meta) => this[propName] = meta.createProperty(props[propName]), false);
|
|
46
|
+
}
|
|
47
|
+
/** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -
|
|
48
|
+
* for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).
|
|
49
|
+
*/
|
|
50
|
+
toJSON() {
|
|
51
|
+
const val = {};
|
|
52
|
+
val.classFullName = this.classFullName;
|
|
53
|
+
if (core_bentley_1.Id64.isValid(this.id))
|
|
54
|
+
val.id = this.id;
|
|
55
|
+
this.forEachProperty((propName) => val[propName] = this[propName], false);
|
|
56
|
+
return val;
|
|
57
|
+
}
|
|
58
|
+
/** Call a function for each property of this Entity.
|
|
59
|
+
* @param func The callback to be invoked on each property
|
|
60
|
+
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
61
|
+
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
62
|
+
*/
|
|
63
|
+
forEachProperty(func, includeCustom = true) { IModelDb_1.IModelDb.forEachMetaData(this.iModel, this.classFullName, true, func, includeCustom); }
|
|
64
|
+
/** Get the full BIS class name of this Entity in the form "schema:class" */
|
|
65
|
+
static get classFullName() { return `${this.schema.schemaName}:${this.className}`; }
|
|
66
|
+
/** Get the full BIS class name of this Entity in the form "schema:class". */
|
|
67
|
+
get classFullName() { return this._ctor.classFullName; }
|
|
68
|
+
/** @internal */
|
|
69
|
+
static get protectedOperations() { return []; }
|
|
70
|
+
/** return whether this Entity class is a subclass of another Entity class
|
|
71
|
+
* @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's
|
|
72
|
+
* inheritance, you can use [ECClass.is]($ecschema-metadata)
|
|
73
|
+
* @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of
|
|
74
|
+
* typescript's restriction on the `this` type in static methods
|
|
75
|
+
*/
|
|
76
|
+
static is(otherClass) { return (0, core_bentley_1.isSubclassOf)(this, otherClass); }
|
|
77
|
+
/** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation
|
|
78
|
+
* ClassRegistry overrides this when generating a class
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
static get isGeneratedClass() { return false; }
|
|
82
|
+
// NOTE: will also consider using generated collectReferences everywhere and a separate collectJsonPropertyReferenceIds
|
|
83
|
+
/** Get the Ids of this element's *references*. A *reference* is an element that this element references.
|
|
84
|
+
* This is important for cloning operations but can be useful in other situations as well.
|
|
85
|
+
* @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet
|
|
86
|
+
* which does not iterate plain Id64s, see [EntityReferenceSet]($backend).
|
|
87
|
+
* @see collectReferenceIds
|
|
88
|
+
* @beta
|
|
89
|
+
*/
|
|
90
|
+
getReferenceIds() {
|
|
91
|
+
const referenceIds = new Set();
|
|
92
|
+
this.collectReferenceIds(referenceIds); // eslint-disable-line deprecation/deprecation
|
|
93
|
+
return referenceIds;
|
|
94
|
+
}
|
|
95
|
+
/** This is the intended and future behavior of [[getReferenceIds]].
|
|
96
|
+
* In the next breaking change it will replace getReferenceIds, and is already used by the transformer
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
getReferenceConcreteIds() {
|
|
100
|
+
const referenceIds = new core_common_1.EntityReferenceSet();
|
|
101
|
+
this.collectReferenceConcreteIds(referenceIds);
|
|
102
|
+
return referenceIds;
|
|
103
|
+
}
|
|
104
|
+
/** Collect the Ids of this entity's *references* at this level of the class hierarchy.
|
|
105
|
+
* A *reference* is any entity referenced by this entity's EC Data
|
|
106
|
+
* This is important for cloning operations but can be useful in other situations as well.
|
|
107
|
+
* @param _referenceIds The Id64Set to populate with reference Ids.
|
|
108
|
+
* @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,
|
|
109
|
+
* which does not accept plain Id64s, see EntityReferenceSet.
|
|
110
|
+
* @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).
|
|
111
|
+
* @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.
|
|
112
|
+
* @see getReferenceIds
|
|
113
|
+
* @beta
|
|
114
|
+
*/
|
|
115
|
+
collectReferenceIds(referenceIds) {
|
|
116
|
+
const concreteEntityIds = this.getReferenceConcreteIds();
|
|
117
|
+
for (const entity of concreteEntityIds) {
|
|
118
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/naming-convention
|
|
119
|
+
const EntityReferences = require("./EntityReferences").EntityReferences;
|
|
120
|
+
// the old [[collectReferenceIds]] only supported elements/models, and the id spaces can overlap so dont include anything else
|
|
121
|
+
if (EntityReferences.isElement(entity) || EntityReferences.isModel(entity)) {
|
|
122
|
+
referenceIds.add(EntityReferences.toId64(entity));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.
|
|
127
|
+
* In the next breaking change it will replace getReferenceIds
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
collectReferenceConcreteIds(_referenceIds) {
|
|
131
|
+
return; // no references by default
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.Entity = Entity;
|
|
135
135
|
//# sourceMappingURL=Entity.js.map
|
package/lib/cjs/Entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/Entity.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 Schema\r\n */\r\n\r\nimport { Id64, Id64String, isSubclassOf } from \"@itwin/core-bentley\";\r\nimport { EntityProps, EntityReferenceSet, PropertyCallback, PropertyMetaData } from \"@itwin/core-common\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { Schema } from \"./Schema\";\r\n\r\n/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].\r\n * Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).\r\n * An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].\r\n * @public\r\n */\r\nexport class Entity {\r\n /** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types\r\n * are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].\r\n */\r\n public readonly isInstanceOfEntity: true = true;\r\n /** The Schema that defines this class. */\r\n public static schema: typeof Schema;\r\n\r\n private get _ctor(): typeof Entity { return this.constructor as typeof Entity; }\r\n\r\n /** The name of the BIS class associated with this class.\r\n * @note Every subclass of Entity **MUST** override this method to identify its BIS class.\r\n * Failure to do so will ordinarily result in an error when the class is registered, since there may only\r\n * be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)\r\n */\r\n public static get className(): string { return \"Entity\"; }\r\n\r\n /** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.\r\n * This property makes such code slightly less tedious to read and write.\r\n * @internal\r\n */\r\n public get asAny(): any { return this; }\r\n\r\n /** The name of the BIS Schema that defines this class */\r\n public get schemaName(): string { return this._ctor.schema.schemaName; }\r\n\r\n /** The name of the BIS class associated with this class. */\r\n public get className(): string { return this._ctor.className; }\r\n\r\n /** The [[IModelDb]] that contains this Entity */\r\n public iModel: IModelDb;\r\n\r\n /** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */\r\n public id: Id64String;\r\n\r\n /** @internal */\r\n constructor(props: EntityProps, iModel: IModelDb) {\r\n this.iModel = iModel;\r\n this.id = Id64.fromJSON(props.id);\r\n // copy all auto-handled properties from input to the object being constructed\r\n this.forEachProperty((propName: string, meta: PropertyMetaData) => (this as any)[propName] = meta.createProperty((props as any)[propName]), false);\r\n }\r\n\r\n /** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -\r\n * for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).\r\n */\r\n public toJSON(): EntityProps {\r\n const val: any = {};\r\n val.classFullName = this.classFullName;\r\n if (Id64.isValid(this.id))\r\n val.id = this.id;\r\n this.forEachProperty((propName: string) => val[propName] = (this as any)[propName], false);\r\n return val;\r\n }\r\n\r\n /** Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n */\r\n public forEachProperty(func: PropertyCallback, includeCustom: boolean = true) { IModelDb.forEachMetaData(this.iModel, this.classFullName, true, func, includeCustom); }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\" */\r\n public static get classFullName(): string { return `${this.schema.schemaName}:${this.className}`; }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\". */\r\n public get classFullName(): string { return this._ctor.classFullName; }\r\n\r\n /** @internal */\r\n public static get protectedOperations(): string[] { return []; }\r\n\r\n /** return whether this Entity class is a subclass of another Entity class\r\n * @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's\r\n * inheritance, you can use [ECClass.is]($ecschema-metadata)\r\n * @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of\r\n * typescript's restriction on the `this` type in static methods\r\n */\r\n public static is(otherClass: typeof Entity): boolean { return isSubclassOf(this, otherClass); }\r\n\r\n /** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation\r\n * ClassRegistry overrides this when generating a class\r\n * @internal\r\n */\r\n public static get isGeneratedClass() { return false; }\r\n\r\n // NOTE: will also consider using generated collectReferences everywhere and a separate collectJsonPropertyReferenceIds\r\n /** Get the Ids of this element's *references*. A *reference* is an element that this element references.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet\r\n * which does not iterate plain Id64s, see [EntityReferenceSet]($backend).\r\n * @see collectReferenceIds\r\n * @beta\r\n */\r\n public getReferenceIds(): Set<Id64String> {\r\n const referenceIds = new Set<Id64String>();\r\n this.collectReferenceIds(referenceIds); // eslint-disable-line deprecation/deprecation\r\n return referenceIds;\r\n }\r\n\r\n /** This is the intended and future behavior of [[getReferenceIds]].\r\n * In the next breaking change it will replace getReferenceIds, and is already used by the transformer\r\n * @internal\r\n */\r\n public getReferenceConcreteIds(): EntityReferenceSet {\r\n const referenceIds = new EntityReferenceSet();\r\n this.collectReferenceConcreteIds(referenceIds);\r\n return referenceIds;\r\n }\r\n\r\n /** Collect the Ids of this entity's *references* at this level of the class hierarchy.\r\n * A *reference* is any entity referenced by this entity's EC Data\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @param _referenceIds The Id64Set to populate with reference Ids.\r\n * @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,\r\n * which does not accept plain Id64s, see EntityReferenceSet.\r\n * @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).\r\n * @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.\r\n * @see getReferenceIds\r\n * @beta\r\n */\r\n protected collectReferenceIds(referenceIds: Set<Id64String>): void {\r\n const concreteEntityIds = this.getReferenceConcreteIds();\r\n for (const entity of concreteEntityIds) {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/naming-convention\r\n const EntityReferences = (require(\"./EntityReferences\") as typeof import(\"./EntityReferences\")).EntityReferences;\r\n // the old [[collectReferenceIds]] only supported elements/models, and the id spaces can overlap so dont include anything else\r\n if (EntityReferences.isElement(entity) || EntityReferences.isModel(entity)) {\r\n referenceIds.add(EntityReferences.toId64(entity));\r\n }\r\n }\r\n }\r\n\r\n /** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.\r\n * In the next breaking change it will replace getReferenceIds\r\n * @internal\r\n */\r\n protected collectReferenceConcreteIds(_referenceIds: EntityReferenceSet): void {\r\n return; // no references by default\r\n }\r\n}\r\n\r\n/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.\r\n * @public\r\n */\r\nexport type EntityClassType<T> = Function & { prototype: T };\r\n"]}
|
|
1
|
+
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/Entity.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 Schema\r\n */\r\n\r\nimport { Id64, Id64String, isSubclassOf } from \"@itwin/core-bentley\";\r\nimport { EntityProps, EntityReferenceSet, PropertyCallback, PropertyMetaData } from \"@itwin/core-common\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { Schema } from \"./Schema\";\r\n\r\n/** Represents an entity in an [[IModelDb]] such as an [[Element]], [[Model]], or [[Relationship]].\r\n * Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).\r\n * An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].\r\n * @public\r\n */\r\nexport class Entity {\r\n /** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types\r\n * are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].\r\n */\r\n public readonly isInstanceOfEntity = true as const;\r\n /** The Schema that defines this class. */\r\n public static schema: typeof Schema;\r\n\r\n private get _ctor(): typeof Entity { return this.constructor as typeof Entity; }\r\n\r\n /** The name of the BIS class associated with this class.\r\n * @note Every subclass of Entity **MUST** override this method to identify its BIS class.\r\n * Failure to do so will ordinarily result in an error when the class is registered, since there may only\r\n * be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)\r\n */\r\n public static get className(): string { return \"Entity\"; }\r\n\r\n /** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.\r\n * This property makes such code slightly less tedious to read and write.\r\n * @internal\r\n */\r\n public get asAny(): any { return this; }\r\n\r\n /** The name of the BIS Schema that defines this class */\r\n public get schemaName(): string { return this._ctor.schema.schemaName; }\r\n\r\n /** The name of the BIS class associated with this class. */\r\n public get className(): string { return this._ctor.className; }\r\n\r\n /** The [[IModelDb]] that contains this Entity */\r\n public iModel: IModelDb;\r\n\r\n /** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */\r\n public id: Id64String;\r\n\r\n /** @internal */\r\n constructor(props: EntityProps, iModel: IModelDb) {\r\n this.iModel = iModel;\r\n this.id = Id64.fromJSON(props.id);\r\n // copy all auto-handled properties from input to the object being constructed\r\n this.forEachProperty((propName: string, meta: PropertyMetaData) => (this as any)[propName] = meta.createProperty((props as any)[propName]), false);\r\n }\r\n\r\n /** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -\r\n * for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).\r\n */\r\n public toJSON(): EntityProps {\r\n const val: any = {};\r\n val.classFullName = this.classFullName;\r\n if (Id64.isValid(this.id))\r\n val.id = this.id;\r\n this.forEachProperty((propName: string) => val[propName] = (this as any)[propName], false);\r\n return val;\r\n }\r\n\r\n /** Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n */\r\n public forEachProperty(func: PropertyCallback, includeCustom: boolean = true) { IModelDb.forEachMetaData(this.iModel, this.classFullName, true, func, includeCustom); }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\" */\r\n public static get classFullName(): string { return `${this.schema.schemaName}:${this.className}`; }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\". */\r\n public get classFullName(): string { return this._ctor.classFullName; }\r\n\r\n /** @internal */\r\n public static get protectedOperations(): string[] { return []; }\r\n\r\n /** return whether this Entity class is a subclass of another Entity class\r\n * @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's\r\n * inheritance, you can use [ECClass.is]($ecschema-metadata)\r\n * @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of\r\n * typescript's restriction on the `this` type in static methods\r\n */\r\n public static is(otherClass: typeof Entity): boolean { return isSubclassOf(this, otherClass); }\r\n\r\n /** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation\r\n * ClassRegistry overrides this when generating a class\r\n * @internal\r\n */\r\n public static get isGeneratedClass() { return false; }\r\n\r\n // NOTE: will also consider using generated collectReferences everywhere and a separate collectJsonPropertyReferenceIds\r\n /** Get the Ids of this element's *references*. A *reference* is an element that this element references.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @note In the next breaking change, the behavior of this function will change to return a EntityReferenceSet\r\n * which does not iterate plain Id64s, see [EntityReferenceSet]($backend).\r\n * @see collectReferenceIds\r\n * @beta\r\n */\r\n public getReferenceIds(): Set<Id64String> {\r\n const referenceIds = new Set<Id64String>();\r\n this.collectReferenceIds(referenceIds); // eslint-disable-line deprecation/deprecation\r\n return referenceIds;\r\n }\r\n\r\n /** This is the intended and future behavior of [[getReferenceIds]].\r\n * In the next breaking change it will replace getReferenceIds, and is already used by the transformer\r\n * @internal\r\n */\r\n public getReferenceConcreteIds(): EntityReferenceSet {\r\n const referenceIds = new EntityReferenceSet();\r\n this.collectReferenceConcreteIds(referenceIds);\r\n return referenceIds;\r\n }\r\n\r\n /** Collect the Ids of this entity's *references* at this level of the class hierarchy.\r\n * A *reference* is any entity referenced by this entity's EC Data\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @param _referenceIds The Id64Set to populate with reference Ids.\r\n * @note In the next breaking change, the behavior of this function will change to require a EntityReferenceSet argument,\r\n * which does not accept plain Id64s, see EntityReferenceSet.\r\n * @note In order to clone/transform an entity, all referenced elements must have been previously cloned and remapped within the [IModelCloneContext]($backend).\r\n * @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.\r\n * @see getReferenceIds\r\n * @beta\r\n */\r\n protected collectReferenceIds(referenceIds: Set<Id64String>): void {\r\n const concreteEntityIds = this.getReferenceConcreteIds();\r\n for (const entity of concreteEntityIds) {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/naming-convention\r\n const EntityReferences = (require(\"./EntityReferences\") as typeof import(\"./EntityReferences\")).EntityReferences;\r\n // the old [[collectReferenceIds]] only supported elements/models, and the id spaces can overlap so dont include anything else\r\n if (EntityReferences.isElement(entity) || EntityReferences.isModel(entity)) {\r\n referenceIds.add(EntityReferences.toId64(entity));\r\n }\r\n }\r\n }\r\n\r\n /** This is the intended and future behavior of [[getReferenceIds]], and is used in the transformer already.\r\n * In the next breaking change it will replace getReferenceIds\r\n * @internal\r\n */\r\n protected collectReferenceConcreteIds(_referenceIds: EntityReferenceSet): void {\r\n return; // no references by default\r\n }\r\n}\r\n\r\n/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.\r\n * @public\r\n */\r\nexport type EntityClassType<T> = Function & { prototype: T };\r\n"]}
|