UNPKG

@itwin/core-common

Version:

iTwin.js components common to frontend and backend

151 lines 6.76 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Entities */ import { Id64 } from "@itwin/core-bentley"; import { Point2d, Point3d } from "@itwin/core-geometry"; import { RelatedElement } from "./ElementProps"; /** The primitive types of an Entity property. * @beta */ export var PrimitiveTypeCode; (function (PrimitiveTypeCode) { PrimitiveTypeCode[PrimitiveTypeCode["Uninitialized"] = 0] = "Uninitialized"; PrimitiveTypeCode[PrimitiveTypeCode["Binary"] = 257] = "Binary"; PrimitiveTypeCode[PrimitiveTypeCode["Boolean"] = 513] = "Boolean"; PrimitiveTypeCode[PrimitiveTypeCode["DateTime"] = 769] = "DateTime"; PrimitiveTypeCode[PrimitiveTypeCode["Double"] = 1025] = "Double"; PrimitiveTypeCode[PrimitiveTypeCode["Integer"] = 1281] = "Integer"; PrimitiveTypeCode[PrimitiveTypeCode["Long"] = 1537] = "Long"; PrimitiveTypeCode[PrimitiveTypeCode["Point2d"] = 1793] = "Point2d"; PrimitiveTypeCode[PrimitiveTypeCode["Point3d"] = 2049] = "Point3d"; PrimitiveTypeCode[PrimitiveTypeCode["String"] = 2305] = "String"; PrimitiveTypeCode[PrimitiveTypeCode["IGeometry"] = 2561] = "IGeometry"; })(PrimitiveTypeCode || (PrimitiveTypeCode = {})); /** Metadata for a property. * @beta * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `Property` class from @itwin/ecschema-metadata` instead. */ // eslint-disable-next-line @typescript-eslint/no-deprecated export class PropertyMetaData { primitiveType; structName; extendedType; description; displayLabel; minimumValue; maximumValue; minimumLength; maximumLength; readOnly; kindOfQuantity; isCustomHandled; isCustomHandledOrphan; minOccurs; maxOccurs; direction; relationshipClass; // eslint-disable-next-line @typescript-eslint/no-deprecated customAttributes; // eslint-disable-next-line @typescript-eslint/no-deprecated constructor(jsonObj) { this.primitiveType = jsonObj.primitiveType; if (jsonObj.structName) this.structName = jsonObj.structName; this.extendedType = jsonObj.extendedType; this.description = jsonObj.description; this.displayLabel = jsonObj.displayLabel; if (undefined !== jsonObj.minimumValue) this.minimumValue = jsonObj.minimumValue; if (undefined !== jsonObj.maximumValue) this.maximumValue = jsonObj.maximumValue; if (undefined !== jsonObj.minimumLength) this.minimumLength = jsonObj.minimumLength; if (undefined !== jsonObj.maximumLength) this.maximumLength = jsonObj.maximumLength; this.readOnly = jsonObj.readOnly; this.kindOfQuantity = jsonObj.kindOfQuantity; this.isCustomHandled = jsonObj.isCustomHandled; if (undefined !== jsonObj.minOccurs) this.minOccurs = jsonObj.minOccurs; if (undefined !== jsonObj.maxOccurs) this.maxOccurs = jsonObj.maxOccurs; this.direction = jsonObj.direction; this.relationshipClass = jsonObj.relationshipClass; this.customAttributes = jsonObj.customAttributes; } /** Create a typed value, or array of values, from a factory and an input object */ createValueOrArray(func, jsonObj) { if (undefined === this.minOccurs) return func(jsonObj); // not an array const val = []; jsonObj.forEach((element) => val.push(func(element))); return val; } /** construct a single property from an input object according to this metadata */ createProperty(jsonObj) { if (jsonObj === undefined) return undefined; if (undefined !== this.primitiveType) { switch (this.primitiveType) { case PrimitiveTypeCode.Boolean: case PrimitiveTypeCode.Double: case PrimitiveTypeCode.Integer: case PrimitiveTypeCode.String: return jsonObj; // this works even for arrays or strings that are JSON because the parsed JSON is already the right type case PrimitiveTypeCode.Point2d: return this.createValueOrArray((obj) => Point2d.fromJSON(obj), jsonObj); case PrimitiveTypeCode.Point3d: return this.createValueOrArray((obj) => Point3d.fromJSON(obj), jsonObj); } } if (this.isNavigation) return jsonObj.id !== undefined ? new RelatedElement(jsonObj) : Id64.fromJSON(jsonObj); return jsonObj; } /** Return `true` if this property is a NavigationProperty. */ get isNavigation() { return (this.direction !== undefined); // the presence of `direction` means it is a navigation property } } /** Metadata for an Entity. * @beta * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `EntityClass` class from `@itwin/ecschema-metadata` instead. */ // eslint-disable-next-line @typescript-eslint/no-deprecated export class EntityMetaData { /** The Id of the class in the [[IModelDb]] from which the metadata was obtained. */ classId; /** The Entity name */ ecclass; description; modifier; displayLabel; /** The base class that this class is derives from. If more than one, the first is the actual base class and the others are mixins. */ baseClasses; /** The Custom Attributes for this class */ // eslint-disable-next-line @typescript-eslint/no-deprecated customAttributes; /** An object whose properties correspond by name to the properties of this class. */ // eslint-disable-next-line @typescript-eslint/no-deprecated properties; // eslint-disable-next-line @typescript-eslint/no-deprecated constructor(jsonObj) { this.classId = jsonObj.classId; this.ecclass = jsonObj.ecclass; this.description = jsonObj.description; this.modifier = jsonObj.modifier; this.displayLabel = jsonObj.displayLabel; this.baseClasses = jsonObj.baseClasses; this.customAttributes = jsonObj.customAttributes; this.properties = {}; for (const propName in jsonObj.properties) { // eslint-disable-line guard-for-in // eslint-disable-next-line @typescript-eslint/no-deprecated this.properties[propName] = new PropertyMetaData(jsonObj.properties[propName]); } } } //# sourceMappingURL=EntityProps.js.map