@itwin/ecschema-metadata 4.11.0-dev.5 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -1
- package/lib/cjs/Metadata/Class.d.ts +2 -1
- package/lib/cjs/Metadata/Class.d.ts.map +1 -1
- package/lib/cjs/Metadata/Class.js +28 -11
- package/lib/cjs/Metadata/Class.js.map +1 -1
- package/lib/cjs/Metadata/EntityClass.d.ts +1 -1
- package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
- package/lib/cjs/Metadata/EntityClass.js +7 -7
- package/lib/cjs/Metadata/EntityClass.js.map +1 -1
- package/lib/esm/Metadata/Class.d.ts +2 -1
- package/lib/esm/Metadata/Class.d.ts.map +1 -1
- package/lib/esm/Metadata/Class.js +28 -11
- package/lib/esm/Metadata/Class.js.map +1 -1
- package/lib/esm/Metadata/EntityClass.d.ts +1 -1
- package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
- package/lib/esm/Metadata/EntityClass.js +7 -7
- package/lib/esm/Metadata/EntityClass.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Change Log - @itwin/ecschema-metadata
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 16 Apr 2025 15:50:28 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.11.0
|
|
6
|
+
Wed, 16 Apr 2025 15:50:28 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- **BREAKING:** The signature of protected method `ECClass.buildPropertyCache()` has been changed to take less arguments and return a `Promise<Property[]>`.
|
|
4
11
|
|
|
5
12
|
## 4.10.13
|
|
6
13
|
Thu, 10 Apr 2025 17:47:21 GMT
|
|
@@ -19,6 +19,7 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
|
|
|
19
19
|
protected _properties?: Map<string, Property>;
|
|
20
20
|
private _customAttributes?;
|
|
21
21
|
private _mergedPropertyCache?;
|
|
22
|
+
private _propertyCachePromise?;
|
|
22
23
|
get modifier(): ECClassModifier;
|
|
23
24
|
get baseClass(): LazyLoadedECClass | undefined;
|
|
24
25
|
set baseClass(baseClass: LazyLoadedECClass | undefined);
|
|
@@ -140,7 +141,7 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
|
|
|
140
141
|
getAllBaseClasses(): AsyncIterableIterator<ECClass>;
|
|
141
142
|
getAllBaseClassesSync(): Iterable<AnyClass>;
|
|
142
143
|
protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean): void;
|
|
143
|
-
protected buildPropertyCache(
|
|
144
|
+
protected buildPropertyCache(resetBaseCaches?: boolean): Promise<Property[]>;
|
|
144
145
|
protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): void;
|
|
145
146
|
/**
|
|
146
147
|
* Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAyB,eAAe,EAA0C,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7I,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,kBAAkB,EAA6B,MAAM,mBAAmB,CAAC;AAClI,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,wBAAwB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EACxI,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;GAGG;AACH,8BAAsB,OAAQ,SAAQ,UAAW,YAAW,6BAA6B;IACvF,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;IACrC,SAAS,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACzC,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAA+B;IACzD,OAAO,CAAC,oBAAoB,CAAC,CAAa;
|
|
1
|
+
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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"}
|
|
@@ -392,16 +392,16 @@ class ECClass extends SchemaItem_1.SchemaItem {
|
|
|
392
392
|
}
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
|
-
async buildPropertyCache(
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
}
|
|
395
|
+
async buildPropertyCache(resetBaseCaches = false) {
|
|
396
|
+
const result = [];
|
|
397
|
+
const existingValues = new Map();
|
|
399
398
|
if (this.baseClass) {
|
|
400
399
|
ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);
|
|
401
400
|
}
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
|
|
401
|
+
if (this.properties) {
|
|
402
|
+
ECClass.mergeProperties(result, existingValues, [...this.properties], true);
|
|
403
|
+
}
|
|
404
|
+
return result;
|
|
405
405
|
}
|
|
406
406
|
buildPropertyCacheSync(result, existingValues, resetBaseCaches = false) {
|
|
407
407
|
if (!existingValues) {
|
|
@@ -433,11 +433,28 @@ class ECClass extends SchemaItem_1.SchemaItem {
|
|
|
433
433
|
* @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
|
|
434
434
|
*/
|
|
435
435
|
async getProperties(resetCache = false) {
|
|
436
|
-
if (
|
|
437
|
-
this._mergedPropertyCache =
|
|
438
|
-
|
|
436
|
+
if (resetCache) {
|
|
437
|
+
this._mergedPropertyCache = undefined;
|
|
438
|
+
this._propertyCachePromise = undefined;
|
|
439
439
|
}
|
|
440
|
-
return
|
|
440
|
+
//If we already have a cache, just return it
|
|
441
|
+
if (this._mergedPropertyCache) {
|
|
442
|
+
return this._mergedPropertyCache;
|
|
443
|
+
}
|
|
444
|
+
//If we already a promise, just return it
|
|
445
|
+
//This is to prevent multiple calls to buildPropertyCache()
|
|
446
|
+
if (this._propertyCachePromise) {
|
|
447
|
+
return this._propertyCachePromise;
|
|
448
|
+
}
|
|
449
|
+
//If not then, build the property cache and return it
|
|
450
|
+
//We use a promise to prevent multiple calls to buildPropertyCache() and to allow the caller to await the result
|
|
451
|
+
this._propertyCachePromise = this.buildPropertyCache(resetCache).then((result) => {
|
|
452
|
+
this._mergedPropertyCache = result;
|
|
453
|
+
return result;
|
|
454
|
+
}).finally(() => {
|
|
455
|
+
this._propertyCachePromise = undefined;
|
|
456
|
+
});
|
|
457
|
+
return this._propertyCachePromise;
|
|
441
458
|
}
|
|
442
459
|
/**
|
|
443
460
|
* Retrieve all custom attributes in the current class and its bases
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { ClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { AnyClass, LazyLoadedECClass } from \"../Interfaces\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\nimport { Enumeration } from \"./Enumeration\";\nimport {\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\n} from \"./Property\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\n\n/**\n * A common abstract class for all of the ECClass types.\n * @beta\n */\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\n protected _modifier: ECClassModifier;\n protected _baseClass?: LazyLoadedECClass;\n protected _properties?: Map<string, Property>;\n private _customAttributes?: Map<string, CustomAttribute>;\n private _mergedPropertyCache?: Property[];\n\n public get modifier() { return this._modifier; }\n public get baseClass(): LazyLoadedECClass | undefined { return this._baseClass; }\n public set baseClass(baseClass: LazyLoadedECClass | undefined) { this._baseClass = baseClass; }\n public get properties(): IterableIterator<Property> | undefined { return this._properties?.values(); }\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name);\n\n if (modifier)\n this._modifier = modifier;\n else\n this._modifier = ECClassModifier.None;\n }\n\n /**\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\n * @param prop The property to add.\n * @return The property that was added.\n */\n protected addProperty<T extends Property>(prop: T): T {\n if (!this._properties)\n this._properties = new Map<string, Property>();\n\n this._properties.set(prop.name.toUpperCase(), prop);\n return prop;\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected async deleteProperty(name: string): Promise<void> {\n if (this._properties) {\n const property = await this.getProperty(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected deletePropertySync(name: string): void {\n if (this._properties) {\n const property = this.getPropertySync(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n public getBaseClassSync(): ECClass | undefined {\n if (!this.baseClass) {\n return undefined;\n }\n\n return this.schema.lookupItemSync<ECClass>(this.baseClass);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedProperty(name);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedPropertySync(name);\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\n if (this.baseClass) {\n const baseClassObj = await this.baseClass;\n return baseClassObj.getProperty(name, true);\n }\n\n return undefined;\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public getInheritedPropertySync(name: string): Property | undefined {\n const baseClassObj = this.getBaseClassSync();\n if (baseClassObj)\n return baseClassObj.getPropertySync(name, true);\n\n return undefined;\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = await schema.lookupItem<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = schema.lookupItemSync<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = await schema.lookupItem<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = schema.lookupItemSync<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n /**\n * Save this Classes properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\n schemaJson.modifier = classModifierToString(this.modifier);\n if (this.baseClass !== undefined)\n schemaJson.baseClass = this.baseClass.fullName;\n if (this._properties !== undefined && this._properties.size > 0)\n schemaJson.properties = [...this.properties!].map((prop) => prop.toJSON());\n\n const customAttributes = serializeCustomAttributes(this.customAttributes);\n if (customAttributes !== undefined)\n schemaJson.customAttributes = customAttributes;\n return schemaJson as ClassProps;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n if (undefined !== this.modifier)\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\n\n if (undefined !== this.baseClass) {\n const baseClass = await this.baseClass;\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\n baseClassElement.textContent = baseClassName;\n itemElement.appendChild(baseClassElement);\n }\n\n if (undefined !== this.properties) {\n for (const prop of this.properties) {\n const propXml = await prop.toXml(schemaXml);\n itemElement.appendChild(propXml);\n }\n }\n\n if (this._customAttributes) {\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\n for (const [name, attribute] of this._customAttributes) {\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\n caContainerElement.appendChild(caElement);\n }\n itemElement.appendChild(caContainerElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(classProps: ClassProps) {\n super.fromJSONSync(classProps);\n\n if (undefined !== classProps.modifier) {\n const modifier = parseClassModifier(classProps.modifier);\n if (undefined === modifier) {\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion} as ECSpecVersion))\n this._modifier = ECClassModifier.None;\n else\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\n } else {\n this._modifier = modifier;\n }\n }\n\n if (undefined !== classProps.baseClass) {\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\n if (!ecClassSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n this._baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n const baseClass = await this.schema.lookupItem<ECClass>(ecClassSchemaItemKey);\n if (undefined === baseClass)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n return baseClass;\n });\n }\n }\n\n public override async fromJSON(classProps: ClassProps): Promise<void> {\n this.fromJSONSync(classProps);\n }\n\n protected addCustomAttribute(customAttribute: CustomAttribute) {\n if (!this._customAttributes)\n this._customAttributes = new Map<string, CustomAttribute>();\n\n this._customAttributes.set(customAttribute.className, customAttribute);\n }\n\n /**\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\n * This is essentially a depth-first traversal through the inheritance tree.\n */\n public async *getAllBaseClasses(): AsyncIterableIterator<ECClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = async (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {\n baseClasses.push(await (ecClass).mixins[i]);\n }\n }\n\n if (ecClass.baseClass)\n baseClasses.push(await ecClass.baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n await addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass as ECClass;\n }\n }\n\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {\n baseClasses.push(m);\n }\n }\n\n const baseClass = ecClass.getBaseClassSync();\n if (baseClass)\n baseClasses.push(baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass;\n }\n }\n\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean) {\n for (const property of propertiesToMerge) {\n const upperCaseName = property.name.toUpperCase();\n const existing = existingValues.get(upperCaseName);\n if (existing !== undefined) {\n if (overwriteExisting) {\n target[existing] = property;\n }\n } else {\n existingValues.set(upperCaseName, target.length);\n target.push(property);\n }\n }\n }\n\n protected async buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): Promise<void> {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public getPropertiesSync(resetCache: boolean = false): Property[] {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public async getProperties(resetCache: boolean = false): Promise<Property[]> {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n await this.buildPropertyCache(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases\n * This is the async version of getCustomAttributesSync()\n */\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\n return this.getCustomAttributesSync();\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases.\n */\n public getCustomAttributesSync(): CustomAttributeSet {\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\n if (undefined === customAttributes) {\n customAttributes = new Map<string, CustomAttribute>();\n }\n\n this.traverseBaseClassesSync((ecClass: ECClass) => {\n if (undefined === ecClass.customAttributes)\n return false;\n\n for (const [className, customAttribute] of ecClass.customAttributes) {\n if (customAttributes.has(className))\n continue;\n customAttributes.set(className, customAttribute);\n }\n\n return false;\n });\n\n return customAttributes;\n }\n\n /**\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\n for await (const baseClass of this.getAllBaseClasses()) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\n const baseClasses = this.getAllBaseClassesSync();\n if (!baseClasses)\n return false;\n\n for (const baseClass of baseClasses) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Indicates if the targetClass is of this type.\n * @param targetClass The ECClass or ECClass name to check.\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\n */\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\n public async is(targetClass: ECClass): Promise<boolean>;\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\n if (schemaName !== undefined) {\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\n\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\n if (SchemaItem.equalByKey(this, key))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\n } else {\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\n\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n }\n\n /**\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\n * @param targetClass The class to check.\n */\n public isSync(targetClass: ECClass): boolean {\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n\n /**\n * @internal\n */\n public static isECClass(object: any): object is ECClass {\n if (!SchemaItem.isSchemaItem(object))\n return false;\n\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\n }\n\n /**\n * @alpha\n * A setter method for the ECClass modifier, used specifically for schema editing.\n * @param modifier\n */\n protected setModifier(modifier: ECClassModifier) {\n this._modifier = modifier;\n }\n}\n\n/**\n * A Typescript class representation of an ECStructClass.\n * @beta\n */\nexport class StructClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.StructClass;\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.StructClass;\n }\n}\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableStructClass extends StructClass {\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableClass extends ECClass {\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\n public abstract override setModifier(modifier: ECClassModifier): void;\n public abstract override setName(name: string): void;\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\n\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\n\n public abstract override deleteProperty(name: string): Promise<void>;\n public abstract override deletePropertySync(name: string): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { ClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { AnyClass, LazyLoadedECClass } from \"../Interfaces\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\nimport { Enumeration } from \"./Enumeration\";\nimport {\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\n} from \"./Property\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\n\n/**\n * A common abstract class for all of the ECClass types.\n * @beta\n */\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\n protected _modifier: ECClassModifier;\n protected _baseClass?: LazyLoadedECClass;\n protected _properties?: Map<string, Property>;\n private _customAttributes?: Map<string, CustomAttribute>;\n private _mergedPropertyCache?: Property[];\n private _propertyCachePromise?: Promise<Property[]>;\n\n public get modifier() { return this._modifier; }\n public get baseClass(): LazyLoadedECClass | undefined { return this._baseClass; }\n public set baseClass(baseClass: LazyLoadedECClass | undefined) { this._baseClass = baseClass; }\n public get properties(): IterableIterator<Property> | undefined { return this._properties?.values(); }\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name);\n\n if (modifier)\n this._modifier = modifier;\n else\n this._modifier = ECClassModifier.None;\n }\n\n /**\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\n * @param prop The property to add.\n * @return The property that was added.\n */\n protected addProperty<T extends Property>(prop: T): T {\n if (!this._properties)\n this._properties = new Map<string, Property>();\n\n this._properties.set(prop.name.toUpperCase(), prop);\n return prop;\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected async deleteProperty(name: string): Promise<void> {\n if (this._properties) {\n const property = await this.getProperty(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected deletePropertySync(name: string): void {\n if (this._properties) {\n const property = this.getPropertySync(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n public getBaseClassSync(): ECClass | undefined {\n if (!this.baseClass) {\n return undefined;\n }\n\n return this.schema.lookupItemSync<ECClass>(this.baseClass);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedProperty(name);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedPropertySync(name);\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\n if (this.baseClass) {\n const baseClassObj = await this.baseClass;\n return baseClassObj.getProperty(name, true);\n }\n\n return undefined;\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public getInheritedPropertySync(name: string): Property | undefined {\n const baseClassObj = this.getBaseClassSync();\n if (baseClassObj)\n return baseClassObj.getPropertySync(name, true);\n\n return undefined;\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = await schema.lookupItem<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = schema.lookupItemSync<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = await schema.lookupItem<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = schema.lookupItemSync<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n /**\n * Save this Classes properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\n schemaJson.modifier = classModifierToString(this.modifier);\n if (this.baseClass !== undefined)\n schemaJson.baseClass = this.baseClass.fullName;\n if (this._properties !== undefined && this._properties.size > 0)\n schemaJson.properties = [...this.properties!].map((prop) => prop.toJSON());\n\n const customAttributes = serializeCustomAttributes(this.customAttributes);\n if (customAttributes !== undefined)\n schemaJson.customAttributes = customAttributes;\n return schemaJson as ClassProps;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n if (undefined !== this.modifier)\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\n\n if (undefined !== this.baseClass) {\n const baseClass = await this.baseClass;\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\n baseClassElement.textContent = baseClassName;\n itemElement.appendChild(baseClassElement);\n }\n\n if (undefined !== this.properties) {\n for (const prop of this.properties) {\n const propXml = await prop.toXml(schemaXml);\n itemElement.appendChild(propXml);\n }\n }\n\n if (this._customAttributes) {\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\n for (const [name, attribute] of this._customAttributes) {\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\n caContainerElement.appendChild(caElement);\n }\n itemElement.appendChild(caContainerElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(classProps: ClassProps) {\n super.fromJSONSync(classProps);\n\n if (undefined !== classProps.modifier) {\n const modifier = parseClassModifier(classProps.modifier);\n if (undefined === modifier) {\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion} as ECSpecVersion))\n this._modifier = ECClassModifier.None;\n else\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\n } else {\n this._modifier = modifier;\n }\n }\n\n if (undefined !== classProps.baseClass) {\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\n if (!ecClassSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n this._baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n const baseClass = await this.schema.lookupItem<ECClass>(ecClassSchemaItemKey);\n if (undefined === baseClass)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n return baseClass;\n });\n }\n }\n\n public override async fromJSON(classProps: ClassProps): Promise<void> {\n this.fromJSONSync(classProps);\n }\n\n protected addCustomAttribute(customAttribute: CustomAttribute) {\n if (!this._customAttributes)\n this._customAttributes = new Map<string, CustomAttribute>();\n\n this._customAttributes.set(customAttribute.className, customAttribute);\n }\n\n /**\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\n * This is essentially a depth-first traversal through the inheritance tree.\n */\n public async *getAllBaseClasses(): AsyncIterableIterator<ECClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = async (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {\n baseClasses.push(await (ecClass).mixins[i]);\n }\n }\n\n if (ecClass.baseClass)\n baseClasses.push(await ecClass.baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n await addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass as ECClass;\n }\n }\n\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {\n baseClasses.push(m);\n }\n }\n\n const baseClass = ecClass.getBaseClassSync();\n if (baseClass)\n baseClasses.push(baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass;\n }\n }\n\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean) {\n for (const property of propertiesToMerge) {\n const upperCaseName = property.name.toUpperCase();\n const existing = existingValues.get(upperCaseName);\n if (existing !== undefined) {\n if (overwriteExisting) {\n target[existing] = property;\n }\n } else {\n existingValues.set(upperCaseName, target.length);\n target.push(property);\n }\n }\n }\n\n protected async buildPropertyCache(resetBaseCaches: boolean = false): Promise<Property[]> {\n const result: Property[] = [];\n const existingValues = new Map<string, number>();\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n if (this.properties) {\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n return result;\n }\n\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public getPropertiesSync(resetCache: boolean = false): Property[] {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public async getProperties(resetCache: boolean = false): Promise<Property[]> {\n if (resetCache) {\n this._mergedPropertyCache = undefined;\n this._propertyCachePromise = undefined;\n }\n\n //If we already have a cache, just return it\n if (this._mergedPropertyCache) {\n return this._mergedPropertyCache;\n }\n\n //If we already a promise, just return it\n //This is to prevent multiple calls to buildPropertyCache()\n if (this._propertyCachePromise) {\n return this._propertyCachePromise;\n }\n\n //If not then, build the property cache and return it\n //We use a promise to prevent multiple calls to buildPropertyCache() and to allow the caller to await the result\n this._propertyCachePromise = this.buildPropertyCache(resetCache).then((result) => {\n this._mergedPropertyCache = result;\n return result;\n }).finally(() => {\n this._propertyCachePromise = undefined;\n });\n\n return this._propertyCachePromise;\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases\n * This is the async version of getCustomAttributesSync()\n */\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\n return this.getCustomAttributesSync();\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases.\n */\n public getCustomAttributesSync(): CustomAttributeSet {\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\n if (undefined === customAttributes) {\n customAttributes = new Map<string, CustomAttribute>();\n }\n\n this.traverseBaseClassesSync((ecClass: ECClass) => {\n if (undefined === ecClass.customAttributes)\n return false;\n\n for (const [className, customAttribute] of ecClass.customAttributes) {\n if (customAttributes.has(className))\n continue;\n customAttributes.set(className, customAttribute);\n }\n\n return false;\n });\n\n return customAttributes;\n }\n\n /**\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\n for await (const baseClass of this.getAllBaseClasses()) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\n const baseClasses = this.getAllBaseClassesSync();\n if (!baseClasses)\n return false;\n\n for (const baseClass of baseClasses) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Indicates if the targetClass is of this type.\n * @param targetClass The ECClass or ECClass name to check.\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\n */\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\n public async is(targetClass: ECClass): Promise<boolean>;\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\n if (schemaName !== undefined) {\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\n\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\n if (SchemaItem.equalByKey(this, key))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\n } else {\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\n\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n }\n\n /**\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\n * @param targetClass The class to check.\n */\n public isSync(targetClass: ECClass): boolean {\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n\n /**\n * @internal\n */\n public static isECClass(object: any): object is ECClass {\n if (!SchemaItem.isSchemaItem(object))\n return false;\n\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\n }\n\n /**\n * @alpha\n * A setter method for the ECClass modifier, used specifically for schema editing.\n * @param modifier\n */\n protected setModifier(modifier: ECClassModifier) {\n this._modifier = modifier;\n }\n}\n\n/**\n * A Typescript class representation of an ECStructClass.\n * @beta\n */\nexport class StructClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.StructClass;\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.StructClass;\n }\n}\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableStructClass extends StructClass {\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableClass extends ECClass {\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\n public abstract override setModifier(modifier: ECClassModifier): void;\n public abstract override setName(name: string): void;\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\n\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\n\n public abstract override deleteProperty(name: string): Promise<void>;\n public abstract override deletePropertySync(name: string): void;\n}\n"]}
|
|
@@ -34,7 +34,7 @@ export declare class EntityClass extends ECClass {
|
|
|
34
34
|
* @param name The name of the property to find.
|
|
35
35
|
*/
|
|
36
36
|
getInheritedPropertySync(name: string): Property | undefined;
|
|
37
|
-
protected buildPropertyCache(
|
|
37
|
+
protected buildPropertyCache(resetBaseCaches?: boolean): Promise<Property[]>;
|
|
38
38
|
protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): void;
|
|
39
39
|
/**
|
|
40
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityClass.d.ts","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAA0B,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE1G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,OAAO;IACtC,SAAyB,cAAc,EAAG,cAAc,CAAC,WAAW,CAAC;IACrE,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;gBAE1B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;IAKpE,IAAW,MAAM,IAAI,eAAe,EAAE,CAIrC;IAEO,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC;IAYxC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAQ/B;;;OAGG;IACmB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAc1F;;;OAGG;IACa,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;cAsBnD,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"EntityClass.d.ts","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,19 +87,19 @@ class EntityClass extends Class_1.ECClass {
|
|
|
87
87
|
}
|
|
88
88
|
return undefined;
|
|
89
89
|
}
|
|
90
|
-
async buildPropertyCache(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
90
|
+
async buildPropertyCache(resetBaseCaches = false) {
|
|
91
|
+
const result = [];
|
|
92
|
+
const existingValues = new Map();
|
|
94
93
|
if (this.baseClass) {
|
|
95
94
|
Class_1.ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);
|
|
96
95
|
}
|
|
97
96
|
for (const mixin of this.mixins) {
|
|
98
97
|
Class_1.ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);
|
|
99
98
|
}
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
if (this.properties) {
|
|
100
|
+
Class_1.ECClass.mergeProperties(result, existingValues, [...this.properties], true);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
103
|
}
|
|
104
104
|
buildPropertyCacheSync(result, existingValues, resetBaseCaches = false) {
|
|
105
105
|
if (!existingValues) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { ECClassModifier, parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { Schema } from \"./Schema\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @beta\n */\nexport class EntityClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.EntityClass;\n protected _mixins?: LazyLoadedMixin[];\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.EntityClass;\n }\n\n public get mixins(): LazyLoadedMixin[] {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return function* (): Iterable<Mixin> { }(); // empty iterable\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<Mixin>(mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<ECClass>(mixin);\n if (mObj) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n protected override async buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): Promise<void> {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n for (const mixin of this.mixins) {\n ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n protected override buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n for (const mixin of this.getMixinsSync()) {\n ECClass.mergeProperties(result, existingValues, mixin.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const mixin of this.getMixinsSync()) {\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem<Mixin>(mixinSchemaItemKey);\n if (undefined === mixin)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { ECClassModifier, parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { Schema } from \"./Schema\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @beta\n */\nexport class EntityClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.EntityClass;\n protected _mixins?: LazyLoadedMixin[];\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.EntityClass;\n }\n\n public get mixins(): LazyLoadedMixin[] {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return function* (): Iterable<Mixin> { }(); // empty iterable\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<Mixin>(mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<ECClass>(mixin);\n if (mObj) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n protected override async buildPropertyCache(resetBaseCaches: boolean = false): Promise<Property[]> {\n const result: Property[] = [];\n const existingValues = new Map<string, number>();\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n for (const mixin of this.mixins) {\n ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);\n }\n\n if (this.properties) {\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n return result;\n }\n\n protected override buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n for (const mixin of this.getMixinsSync()) {\n ECClass.mergeProperties(result, existingValues, mixin.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const mixin of this.getMixinsSync()) {\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem<Mixin>(mixinSchemaItemKey);\n if (undefined === mixin)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
|
|
@@ -19,6 +19,7 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
|
|
|
19
19
|
protected _properties?: Map<string, Property>;
|
|
20
20
|
private _customAttributes?;
|
|
21
21
|
private _mergedPropertyCache?;
|
|
22
|
+
private _propertyCachePromise?;
|
|
22
23
|
get modifier(): ECClassModifier;
|
|
23
24
|
get baseClass(): LazyLoadedECClass | undefined;
|
|
24
25
|
set baseClass(baseClass: LazyLoadedECClass | undefined);
|
|
@@ -140,7 +141,7 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
|
|
|
140
141
|
getAllBaseClasses(): AsyncIterableIterator<ECClass>;
|
|
141
142
|
getAllBaseClassesSync(): Iterable<AnyClass>;
|
|
142
143
|
protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean): void;
|
|
143
|
-
protected buildPropertyCache(
|
|
144
|
+
protected buildPropertyCache(resetBaseCaches?: boolean): Promise<Property[]>;
|
|
144
145
|
protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): void;
|
|
145
146
|
/**
|
|
146
147
|
* Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAyB,eAAe,EAA0C,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7I,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,kBAAkB,EAA6B,MAAM,mBAAmB,CAAC;AAClI,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,wBAAwB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EACxI,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;GAGG;AACH,8BAAsB,OAAQ,SAAQ,UAAW,YAAW,6BAA6B;IACvF,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;IACrC,SAAS,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACzC,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAA+B;IACzD,OAAO,CAAC,oBAAoB,CAAC,CAAa;
|
|
1
|
+
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAyB,eAAe,EAA0C,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7I,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,kBAAkB,EAA6B,MAAM,mBAAmB,CAAC;AAClI,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,wBAAwB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EACxI,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;GAGG;AACH,8BAAsB,OAAQ,SAAQ,UAAW,YAAW,6BAA6B;IACvF,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;IACrC,SAAS,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACzC,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAA+B;IACzD,OAAO,CAAC,oBAAoB,CAAC,CAAa;IAC1C,OAAO,CAAC,qBAAqB,CAAC,CAAsB;IAEpD,IAAW,QAAQ,oBAA6B;IAChD,IAAW,SAAS,IAAI,iBAAiB,GAAG,SAAS,CAA4B;IACjF,IAAW,SAAS,CAAC,SAAS,EAAE,iBAAiB,GAAG,SAAS,EAAkC;IAC/F,IAAW,UAAU,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAuC;IACtG,IAAW,gBAAgB,IAAI,kBAAkB,GAAG,SAAS,CAAmC;gBAEpF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;IASpE;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAQrD;;;;OAIG;cACa,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQzC,gBAAgB,IAAI,OAAO,GAAG,SAAS;IAQ9C;;;OAGG;IACU,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,GAAE,OAAe,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAexG;;;OAGG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,GAAE,OAAe,GAAG,QAAQ,GAAG,SAAS;IAe7F;;;OAGG;IACU,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAS9E;;;OAGG;IACI,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQnE;;;;;OAKG;cACa,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;cAC/F,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAY/G;;;;;OAKG;IACH,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,iBAAiB;IACpG,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,mBAAmB;IAYpG;;;;OAIG;cACa,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;cACzG,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAYzH;;;;OAIG;IACH,SAAS,CAAC,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,sBAAsB;IAC9G,SAAS,CAAC,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,wBAAwB;IAY9G;;;;OAIG;cACa,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAO7G;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc;IAOlG;;;;OAIG;cACa,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOvH;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,mBAAmB;cAO5F,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAalH,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;cAavF,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,WAAW,CAAC;IAuBxJ,SAAS,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW;IAmB7I;;;;OAIG;IACa,MAAM,CAAC,UAAU,GAAE,OAAe,EAAE,oBAAoB,GAAE,OAAe,GAAG,UAAU;IAiBtG,gBAAgB;IACM,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAiClD,YAAY,CAAC,UAAU,EAAE,UAAU;IA6B7B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,SAAS,CAAC,kBAAkB,CAAC,eAAe,EAAE,eAAe;IAO7D;;;OAGG;IACW,iBAAiB,IAAI,qBAAqB,CAAC,OAAO,CAAC;IAqBzD,qBAAqB,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAsBnD,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,OAAO;cAenI,kBAAkB,CAAC,eAAe,GAAE,OAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAczF,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAE,OAAe,GAAG,IAAI;IAgBlI;;;;OAIG;IACI,iBAAiB,CAAC,UAAU,GAAE,OAAe,GAAG,QAAQ,EAAE;IASjE;;;;OAIG;IACU,aAAa,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA6B5E;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAI/D;;OAEG;IACI,uBAAuB,IAAI,kBAAkB;IAsBpD;;;;;OAKG;IACU,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IASjH;;;;;OAKG;IACI,uBAAuB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO;IAatG;;;;OAIG;IACU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC7D,EAAE,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBvD;;;OAGG;IACI,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAO5C;;OAEG;WACW,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,OAAO;IAQvD;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,eAAe;CAGhD;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,OAAO;IACtC,SAAyB,cAAc,EAAG,cAAc,CAAC,WAAW,CAAC;gBAEzD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;CAIrE;AAED;;;GAGG;AACH,8BAAsB,kBAAmB,SAAQ,WAAW;aACjC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE;AAED;;;GAGG;AACH,8BAAsB,YAAa,SAAQ,OAAO;aACvB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;aAC1D,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;aAC5C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;aAC3B,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;aAC/F,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;aAC/F,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;aAE9G,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,iBAAiB;aAC1F,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,mBAAmB;aAC1F,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ;aAEzG,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;aACzG,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;aACzG,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;aAEnH,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,sBAAsB;aACpG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,wBAAwB;aACpG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ;aAE9G,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;aAC7F,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc;aAExF,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;aACvG,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,mBAAmB;aAElG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;aAC3C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAChE"}
|
|
@@ -389,16 +389,16 @@ export class ECClass extends SchemaItem {
|
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
|
-
async buildPropertyCache(
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
392
|
+
async buildPropertyCache(resetBaseCaches = false) {
|
|
393
|
+
const result = [];
|
|
394
|
+
const existingValues = new Map();
|
|
396
395
|
if (this.baseClass) {
|
|
397
396
|
ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);
|
|
398
397
|
}
|
|
399
|
-
if (
|
|
400
|
-
|
|
401
|
-
|
|
398
|
+
if (this.properties) {
|
|
399
|
+
ECClass.mergeProperties(result, existingValues, [...this.properties], true);
|
|
400
|
+
}
|
|
401
|
+
return result;
|
|
402
402
|
}
|
|
403
403
|
buildPropertyCacheSync(result, existingValues, resetBaseCaches = false) {
|
|
404
404
|
if (!existingValues) {
|
|
@@ -430,11 +430,28 @@ export class ECClass extends SchemaItem {
|
|
|
430
430
|
* @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
|
|
431
431
|
*/
|
|
432
432
|
async getProperties(resetCache = false) {
|
|
433
|
-
if (
|
|
434
|
-
this._mergedPropertyCache =
|
|
435
|
-
|
|
433
|
+
if (resetCache) {
|
|
434
|
+
this._mergedPropertyCache = undefined;
|
|
435
|
+
this._propertyCachePromise = undefined;
|
|
436
436
|
}
|
|
437
|
-
return
|
|
437
|
+
//If we already have a cache, just return it
|
|
438
|
+
if (this._mergedPropertyCache) {
|
|
439
|
+
return this._mergedPropertyCache;
|
|
440
|
+
}
|
|
441
|
+
//If we already a promise, just return it
|
|
442
|
+
//This is to prevent multiple calls to buildPropertyCache()
|
|
443
|
+
if (this._propertyCachePromise) {
|
|
444
|
+
return this._propertyCachePromise;
|
|
445
|
+
}
|
|
446
|
+
//If not then, build the property cache and return it
|
|
447
|
+
//We use a promise to prevent multiple calls to buildPropertyCache() and to allow the caller to await the result
|
|
448
|
+
this._propertyCachePromise = this.buildPropertyCache(resetCache).then((result) => {
|
|
449
|
+
this._mergedPropertyCache = result;
|
|
450
|
+
return result;
|
|
451
|
+
}).finally(() => {
|
|
452
|
+
this._propertyCachePromise = undefined;
|
|
453
|
+
});
|
|
454
|
+
return this._propertyCachePromise;
|
|
438
455
|
}
|
|
439
456
|
/**
|
|
440
457
|
* Retrieve all custom attributes in the current class and its bases
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { ClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { AnyClass, LazyLoadedECClass } from \"../Interfaces\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\nimport { Enumeration } from \"./Enumeration\";\nimport {\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\n} from \"./Property\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\n\n/**\n * A common abstract class for all of the ECClass types.\n * @beta\n */\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\n protected _modifier: ECClassModifier;\n protected _baseClass?: LazyLoadedECClass;\n protected _properties?: Map<string, Property>;\n private _customAttributes?: Map<string, CustomAttribute>;\n private _mergedPropertyCache?: Property[];\n\n public get modifier() { return this._modifier; }\n public get baseClass(): LazyLoadedECClass | undefined { return this._baseClass; }\n public set baseClass(baseClass: LazyLoadedECClass | undefined) { this._baseClass = baseClass; }\n public get properties(): IterableIterator<Property> | undefined { return this._properties?.values(); }\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name);\n\n if (modifier)\n this._modifier = modifier;\n else\n this._modifier = ECClassModifier.None;\n }\n\n /**\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\n * @param prop The property to add.\n * @return The property that was added.\n */\n protected addProperty<T extends Property>(prop: T): T {\n if (!this._properties)\n this._properties = new Map<string, Property>();\n\n this._properties.set(prop.name.toUpperCase(), prop);\n return prop;\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected async deleteProperty(name: string): Promise<void> {\n if (this._properties) {\n const property = await this.getProperty(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected deletePropertySync(name: string): void {\n if (this._properties) {\n const property = this.getPropertySync(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n public getBaseClassSync(): ECClass | undefined {\n if (!this.baseClass) {\n return undefined;\n }\n\n return this.schema.lookupItemSync<ECClass>(this.baseClass);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedProperty(name);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedPropertySync(name);\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\n if (this.baseClass) {\n const baseClassObj = await this.baseClass;\n return baseClassObj.getProperty(name, true);\n }\n\n return undefined;\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public getInheritedPropertySync(name: string): Property | undefined {\n const baseClassObj = this.getBaseClassSync();\n if (baseClassObj)\n return baseClassObj.getPropertySync(name, true);\n\n return undefined;\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = await schema.lookupItem<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = schema.lookupItemSync<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = await schema.lookupItem<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = schema.lookupItemSync<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n /**\n * Save this Classes properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\n schemaJson.modifier = classModifierToString(this.modifier);\n if (this.baseClass !== undefined)\n schemaJson.baseClass = this.baseClass.fullName;\n if (this._properties !== undefined && this._properties.size > 0)\n schemaJson.properties = [...this.properties!].map((prop) => prop.toJSON());\n\n const customAttributes = serializeCustomAttributes(this.customAttributes);\n if (customAttributes !== undefined)\n schemaJson.customAttributes = customAttributes;\n return schemaJson as ClassProps;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n if (undefined !== this.modifier)\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\n\n if (undefined !== this.baseClass) {\n const baseClass = await this.baseClass;\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\n baseClassElement.textContent = baseClassName;\n itemElement.appendChild(baseClassElement);\n }\n\n if (undefined !== this.properties) {\n for (const prop of this.properties) {\n const propXml = await prop.toXml(schemaXml);\n itemElement.appendChild(propXml);\n }\n }\n\n if (this._customAttributes) {\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\n for (const [name, attribute] of this._customAttributes) {\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\n caContainerElement.appendChild(caElement);\n }\n itemElement.appendChild(caContainerElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(classProps: ClassProps) {\n super.fromJSONSync(classProps);\n\n if (undefined !== classProps.modifier) {\n const modifier = parseClassModifier(classProps.modifier);\n if (undefined === modifier) {\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion} as ECSpecVersion))\n this._modifier = ECClassModifier.None;\n else\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\n } else {\n this._modifier = modifier;\n }\n }\n\n if (undefined !== classProps.baseClass) {\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\n if (!ecClassSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n this._baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n const baseClass = await this.schema.lookupItem<ECClass>(ecClassSchemaItemKey);\n if (undefined === baseClass)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n return baseClass;\n });\n }\n }\n\n public override async fromJSON(classProps: ClassProps): Promise<void> {\n this.fromJSONSync(classProps);\n }\n\n protected addCustomAttribute(customAttribute: CustomAttribute) {\n if (!this._customAttributes)\n this._customAttributes = new Map<string, CustomAttribute>();\n\n this._customAttributes.set(customAttribute.className, customAttribute);\n }\n\n /**\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\n * This is essentially a depth-first traversal through the inheritance tree.\n */\n public async *getAllBaseClasses(): AsyncIterableIterator<ECClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = async (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {\n baseClasses.push(await (ecClass).mixins[i]);\n }\n }\n\n if (ecClass.baseClass)\n baseClasses.push(await ecClass.baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n await addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass as ECClass;\n }\n }\n\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {\n baseClasses.push(m);\n }\n }\n\n const baseClass = ecClass.getBaseClassSync();\n if (baseClass)\n baseClasses.push(baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass;\n }\n }\n\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean) {\n for (const property of propertiesToMerge) {\n const upperCaseName = property.name.toUpperCase();\n const existing = existingValues.get(upperCaseName);\n if (existing !== undefined) {\n if (overwriteExisting) {\n target[existing] = property;\n }\n } else {\n existingValues.set(upperCaseName, target.length);\n target.push(property);\n }\n }\n }\n\n protected async buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): Promise<void> {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public getPropertiesSync(resetCache: boolean = false): Property[] {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public async getProperties(resetCache: boolean = false): Promise<Property[]> {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n await this.buildPropertyCache(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases\n * This is the async version of getCustomAttributesSync()\n */\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\n return this.getCustomAttributesSync();\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases.\n */\n public getCustomAttributesSync(): CustomAttributeSet {\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\n if (undefined === customAttributes) {\n customAttributes = new Map<string, CustomAttribute>();\n }\n\n this.traverseBaseClassesSync((ecClass: ECClass) => {\n if (undefined === ecClass.customAttributes)\n return false;\n\n for (const [className, customAttribute] of ecClass.customAttributes) {\n if (customAttributes.has(className))\n continue;\n customAttributes.set(className, customAttribute);\n }\n\n return false;\n });\n\n return customAttributes;\n }\n\n /**\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\n for await (const baseClass of this.getAllBaseClasses()) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\n const baseClasses = this.getAllBaseClassesSync();\n if (!baseClasses)\n return false;\n\n for (const baseClass of baseClasses) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Indicates if the targetClass is of this type.\n * @param targetClass The ECClass or ECClass name to check.\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\n */\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\n public async is(targetClass: ECClass): Promise<boolean>;\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\n if (schemaName !== undefined) {\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\n\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\n if (SchemaItem.equalByKey(this, key))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\n } else {\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\n\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n }\n\n /**\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\n * @param targetClass The class to check.\n */\n public isSync(targetClass: ECClass): boolean {\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n\n /**\n * @internal\n */\n public static isECClass(object: any): object is ECClass {\n if (!SchemaItem.isSchemaItem(object))\n return false;\n\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\n }\n\n /**\n * @alpha\n * A setter method for the ECClass modifier, used specifically for schema editing.\n * @param modifier\n */\n protected setModifier(modifier: ECClassModifier) {\n this._modifier = modifier;\n }\n}\n\n/**\n * A Typescript class representation of an ECStructClass.\n * @beta\n */\nexport class StructClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.StructClass;\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.StructClass;\n }\n}\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableStructClass extends StructClass {\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableClass extends ECClass {\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\n public abstract override setModifier(modifier: ECClassModifier): void;\n public abstract override setName(name: string): void;\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\n\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\n\n public abstract override deleteProperty(name: string): Promise<void>;\n public abstract override deletePropertySync(name: string): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { ClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { AnyClass, LazyLoadedECClass } from \"../Interfaces\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\nimport { Enumeration } from \"./Enumeration\";\nimport {\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\n} from \"./Property\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\n\n/**\n * A common abstract class for all of the ECClass types.\n * @beta\n */\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\n protected _modifier: ECClassModifier;\n protected _baseClass?: LazyLoadedECClass;\n protected _properties?: Map<string, Property>;\n private _customAttributes?: Map<string, CustomAttribute>;\n private _mergedPropertyCache?: Property[];\n private _propertyCachePromise?: Promise<Property[]>;\n\n public get modifier() { return this._modifier; }\n public get baseClass(): LazyLoadedECClass | undefined { return this._baseClass; }\n public set baseClass(baseClass: LazyLoadedECClass | undefined) { this._baseClass = baseClass; }\n public get properties(): IterableIterator<Property> | undefined { return this._properties?.values(); }\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name);\n\n if (modifier)\n this._modifier = modifier;\n else\n this._modifier = ECClassModifier.None;\n }\n\n /**\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\n * @param prop The property to add.\n * @return The property that was added.\n */\n protected addProperty<T extends Property>(prop: T): T {\n if (!this._properties)\n this._properties = new Map<string, Property>();\n\n this._properties.set(prop.name.toUpperCase(), prop);\n return prop;\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected async deleteProperty(name: string): Promise<void> {\n if (this._properties) {\n const property = await this.getProperty(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected deletePropertySync(name: string): void {\n if (this._properties) {\n const property = this.getPropertySync(name);\n if (property)\n this._properties.delete(name.toUpperCase());\n }\n }\n\n public getBaseClassSync(): ECClass | undefined {\n if (!this.baseClass) {\n return undefined;\n }\n\n return this.schema.lookupItemSync<ECClass>(this.baseClass);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedProperty(name);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedPropertySync(name);\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\n if (this.baseClass) {\n const baseClassObj = await this.baseClass;\n return baseClassObj.getProperty(name, true);\n }\n\n return undefined;\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public getInheritedPropertySync(name: string): Property | undefined {\n const baseClassObj = this.getBaseClassSync();\n if (baseClassObj)\n return baseClassObj.getPropertySync(name, true);\n\n return undefined;\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = await schema.lookupItem<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = schema.lookupItemSync<StructClass>(structType);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = await schema.lookupItem<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = schema.lookupItemSync<Enumeration>(primitiveType);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n /**\n * Save this Classes properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\n schemaJson.modifier = classModifierToString(this.modifier);\n if (this.baseClass !== undefined)\n schemaJson.baseClass = this.baseClass.fullName;\n if (this._properties !== undefined && this._properties.size > 0)\n schemaJson.properties = [...this.properties!].map((prop) => prop.toJSON());\n\n const customAttributes = serializeCustomAttributes(this.customAttributes);\n if (customAttributes !== undefined)\n schemaJson.customAttributes = customAttributes;\n return schemaJson as ClassProps;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n if (undefined !== this.modifier)\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\n\n if (undefined !== this.baseClass) {\n const baseClass = await this.baseClass;\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\n baseClassElement.textContent = baseClassName;\n itemElement.appendChild(baseClassElement);\n }\n\n if (undefined !== this.properties) {\n for (const prop of this.properties) {\n const propXml = await prop.toXml(schemaXml);\n itemElement.appendChild(propXml);\n }\n }\n\n if (this._customAttributes) {\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\n for (const [name, attribute] of this._customAttributes) {\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\n caContainerElement.appendChild(caElement);\n }\n itemElement.appendChild(caContainerElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(classProps: ClassProps) {\n super.fromJSONSync(classProps);\n\n if (undefined !== classProps.modifier) {\n const modifier = parseClassModifier(classProps.modifier);\n if (undefined === modifier) {\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion} as ECSpecVersion))\n this._modifier = ECClassModifier.None;\n else\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\n } else {\n this._modifier = modifier;\n }\n }\n\n if (undefined !== classProps.baseClass) {\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\n if (!ecClassSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n this._baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n const baseClass = await this.schema.lookupItem<ECClass>(ecClassSchemaItemKey);\n if (undefined === baseClass)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n return baseClass;\n });\n }\n }\n\n public override async fromJSON(classProps: ClassProps): Promise<void> {\n this.fromJSONSync(classProps);\n }\n\n protected addCustomAttribute(customAttribute: CustomAttribute) {\n if (!this._customAttributes)\n this._customAttributes = new Map<string, CustomAttribute>();\n\n this._customAttributes.set(customAttribute.className, customAttribute);\n }\n\n /**\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\n * This is essentially a depth-first traversal through the inheritance tree.\n */\n public async *getAllBaseClasses(): AsyncIterableIterator<ECClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = async (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {\n baseClasses.push(await (ecClass).mixins[i]);\n }\n }\n\n if (ecClass.baseClass)\n baseClasses.push(await ecClass.baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n await addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass as ECClass;\n }\n }\n\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {\n baseClasses.push(m);\n }\n }\n\n const baseClass = ecClass.getBaseClassSync();\n if (baseClass)\n baseClasses.push(baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass;\n }\n }\n\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean) {\n for (const property of propertiesToMerge) {\n const upperCaseName = property.name.toUpperCase();\n const existing = existingValues.get(upperCaseName);\n if (existing !== undefined) {\n if (overwriteExisting) {\n target[existing] = property;\n }\n } else {\n existingValues.set(upperCaseName, target.length);\n target.push(property);\n }\n }\n }\n\n protected async buildPropertyCache(resetBaseCaches: boolean = false): Promise<Property[]> {\n const result: Property[] = [];\n const existingValues = new Map<string, number>();\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n if (this.properties) {\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n return result;\n }\n\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public getPropertiesSync(resetCache: boolean = false): Property[] {\n if (!this._mergedPropertyCache || resetCache) {\n this._mergedPropertyCache = [];\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\n * Since this is an expensive operation, results will be cached after first call.\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\n */\n public async getProperties(resetCache: boolean = false): Promise<Property[]> {\n if (resetCache) {\n this._mergedPropertyCache = undefined;\n this._propertyCachePromise = undefined;\n }\n\n //If we already have a cache, just return it\n if (this._mergedPropertyCache) {\n return this._mergedPropertyCache;\n }\n\n //If we already a promise, just return it\n //This is to prevent multiple calls to buildPropertyCache()\n if (this._propertyCachePromise) {\n return this._propertyCachePromise;\n }\n\n //If not then, build the property cache and return it\n //We use a promise to prevent multiple calls to buildPropertyCache() and to allow the caller to await the result\n this._propertyCachePromise = this.buildPropertyCache(resetCache).then((result) => {\n this._mergedPropertyCache = result;\n return result;\n }).finally(() => {\n this._propertyCachePromise = undefined;\n });\n\n return this._propertyCachePromise;\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases\n * This is the async version of getCustomAttributesSync()\n */\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\n return this.getCustomAttributesSync();\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases.\n */\n public getCustomAttributesSync(): CustomAttributeSet {\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\n if (undefined === customAttributes) {\n customAttributes = new Map<string, CustomAttribute>();\n }\n\n this.traverseBaseClassesSync((ecClass: ECClass) => {\n if (undefined === ecClass.customAttributes)\n return false;\n\n for (const [className, customAttribute] of ecClass.customAttributes) {\n if (customAttributes.has(className))\n continue;\n customAttributes.set(className, customAttribute);\n }\n\n return false;\n });\n\n return customAttributes;\n }\n\n /**\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\n for await (const baseClass of this.getAllBaseClasses()) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\n const baseClasses = this.getAllBaseClassesSync();\n if (!baseClasses)\n return false;\n\n for (const baseClass of baseClasses) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Indicates if the targetClass is of this type.\n * @param targetClass The ECClass or ECClass name to check.\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\n */\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\n public async is(targetClass: ECClass): Promise<boolean>;\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\n if (schemaName !== undefined) {\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\n\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\n if (SchemaItem.equalByKey(this, key))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\n } else {\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\n\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n }\n\n /**\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\n * @param targetClass The class to check.\n */\n public isSync(targetClass: ECClass): boolean {\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n\n /**\n * @internal\n */\n public static isECClass(object: any): object is ECClass {\n if (!SchemaItem.isSchemaItem(object))\n return false;\n\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\n }\n\n /**\n * @alpha\n * A setter method for the ECClass modifier, used specifically for schema editing.\n * @param modifier\n */\n protected setModifier(modifier: ECClassModifier) {\n this._modifier = modifier;\n }\n}\n\n/**\n * A Typescript class representation of an ECStructClass.\n * @beta\n */\nexport class StructClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.StructClass;\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.StructClass;\n }\n}\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableStructClass extends StructClass {\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableClass extends ECClass {\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\n public abstract override setModifier(modifier: ECClassModifier): void;\n public abstract override setName(name: string): void;\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\n\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\n\n public abstract override deleteProperty(name: string): Promise<void>;\n public abstract override deletePropertySync(name: string): void;\n}\n"]}
|
|
@@ -34,7 +34,7 @@ export declare class EntityClass extends ECClass {
|
|
|
34
34
|
* @param name The name of the property to find.
|
|
35
35
|
*/
|
|
36
36
|
getInheritedPropertySync(name: string): Property | undefined;
|
|
37
|
-
protected buildPropertyCache(
|
|
37
|
+
protected buildPropertyCache(resetBaseCaches?: boolean): Promise<Property[]>;
|
|
38
38
|
protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): void;
|
|
39
39
|
/**
|
|
40
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityClass.d.ts","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAA0B,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE1G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,OAAO;IACtC,SAAyB,cAAc,EAAG,cAAc,CAAC,WAAW,CAAC;IACrE,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;gBAE1B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;IAKpE,IAAW,MAAM,IAAI,eAAe,EAAE,CAIrC;IAEO,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC;IAYxC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAQ/B;;;OAGG;IACmB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAc1F;;;OAGG;IACa,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;cAsBnD,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"EntityClass.d.ts","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,19 +82,19 @@ export class EntityClass extends ECClass {
|
|
|
82
82
|
}
|
|
83
83
|
return undefined;
|
|
84
84
|
}
|
|
85
|
-
async buildPropertyCache(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
85
|
+
async buildPropertyCache(resetBaseCaches = false) {
|
|
86
|
+
const result = [];
|
|
87
|
+
const existingValues = new Map();
|
|
89
88
|
if (this.baseClass) {
|
|
90
89
|
ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);
|
|
91
90
|
}
|
|
92
91
|
for (const mixin of this.mixins) {
|
|
93
92
|
ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);
|
|
94
93
|
}
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
if (this.properties) {
|
|
95
|
+
ECClass.mergeProperties(result, existingValues, [...this.properties], true);
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
98
|
}
|
|
99
99
|
buildPropertyCacheSync(result, existingValues, resetBaseCaches = false) {
|
|
100
100
|
if (!existingValues) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { ECClassModifier, parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { Schema } from \"./Schema\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @beta\n */\nexport class EntityClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.EntityClass;\n protected _mixins?: LazyLoadedMixin[];\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.EntityClass;\n }\n\n public get mixins(): LazyLoadedMixin[] {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return function* (): Iterable<Mixin> { }(); // empty iterable\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<Mixin>(mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<ECClass>(mixin);\n if (mObj) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n protected override async buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): Promise<void> {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n for (const mixin of this.mixins) {\n ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n protected override buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n for (const mixin of this.getMixinsSync()) {\n ECClass.mergeProperties(result, existingValues, mixin.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const mixin of this.getMixinsSync()) {\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem<Mixin>(mixinSchemaItemKey);\n if (undefined === mixin)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { ECClassModifier, parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { Schema } from \"./Schema\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @beta\n */\nexport class EntityClass extends ECClass {\n public override readonly schemaItemType!: SchemaItemType.EntityClass;\n protected _mixins?: LazyLoadedMixin[];\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name, modifier);\n this.schemaItemType = SchemaItemType.EntityClass;\n }\n\n public get mixins(): LazyLoadedMixin[] {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return function* (): Iterable<Mixin> { }(); // empty iterable\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<Mixin>(mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync<ECClass>(mixin);\n if (mObj) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n protected override async buildPropertyCache(resetBaseCaches: boolean = false): Promise<Property[]> {\n const result: Property[] = [];\n const existingValues = new Map<string, number>();\n\n if (this.baseClass) {\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\n }\n\n for (const mixin of this.mixins) {\n ECClass.mergeProperties(result, existingValues, await (await mixin).getProperties(resetBaseCaches), false);\n }\n\n if (this.properties) {\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n return result;\n }\n\n protected override buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\n }\n\n for (const mixin of this.getMixinsSync()) {\n ECClass.mergeProperties(result, existingValues, mixin.getPropertiesSync(resetBaseCaches), false);\n }\n\n if (!this.properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const mixin of this.getMixinsSync()) {\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem<Mixin>(mixinSchemaItemKey);\n if (undefined === mixin)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync<RelationshipClass>(relationship);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECObjectsError(ECObjectsStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/ecschema-metadata",
|
|
3
|
-
"version": "4.11.0
|
|
3
|
+
"version": "4.11.0",
|
|
4
4
|
"description": "ECObjects core concepts in typescript",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/cjs/ecschema-metadata.js",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"rimraf": "^3.0.2",
|
|
43
43
|
"sinon": "^17.0.2",
|
|
44
44
|
"typescript": "~5.6.2",
|
|
45
|
-
"@itwin/build-tools": "4.11.0
|
|
46
|
-
"@itwin/core-quantity": "4.11.0
|
|
47
|
-
"@itwin/core-bentley": "4.11.0
|
|
45
|
+
"@itwin/build-tools": "4.11.0",
|
|
46
|
+
"@itwin/core-quantity": "4.11.0",
|
|
47
|
+
"@itwin/core-bentley": "4.11.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@itwin/core-bentley": "^4.11.0
|
|
51
|
-
"@itwin/core-quantity": "^4.11.0
|
|
50
|
+
"@itwin/core-bentley": "^4.11.0",
|
|
51
|
+
"@itwin/core-quantity": "^4.11.0"
|
|
52
52
|
},
|
|
53
53
|
"nyc": {
|
|
54
54
|
"extends": "./node_modules/@itwin/build-tools/.nycrc"
|