@itwin/presentation-core-interop 2.0.0-alpha.1 → 2.0.0-alpha.2

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 CHANGED
@@ -1,5 +1,20 @@
1
1
  # @itwin/presentation-core-interop
2
2
 
3
+ ## 2.0.0-alpha.2
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1445](https://github.com/iTwin/presentation/pull/1445): `EC.Class`: Added `getOwnProperties` method that returns only the properties defined directly on the class, excluding those inherited from base classes.
8
+ - [#1350](https://github.com/iTwin/presentation/pull/1350): `createECSqlQueryExecutor`: Updated to handle both positional and named bindings when creating query readers.
9
+ - [#1444](https://github.com/iTwin/presentation/pull/1444): `EC.Property`: Added `category` attribute that provides access to the property's `EC.PropertyCategory`. Also added a `description` attribute to `EC.SchemaItem`.
10
+ - [#1363](https://github.com/iTwin/presentation/pull/1363): `createECSchemaProvider`: Populate `version` property on `EC.Schema` objects from the underlying `@itwin/ecschema-metadata` schema version fields.
11
+
12
+ ### Patch Changes
13
+
14
+ - [#1377](https://github.com/iTwin/presentation/pull/1377): `createECSqlQueryExecutor`: queries are now automatically cancelled when consumers break out of iteration.
15
+ - Updated dependencies:
16
+ - @itwin/presentation-shared@2.0.0-alpha.11
17
+
3
18
  ## 2.0.0-alpha.1
4
19
 
5
20
  ### Patch Changes
@@ -99,6 +114,22 @@
99
114
  - Updated dependencies:
100
115
  - @itwin/presentation-shared@2.0.0-alpha.0
101
116
 
117
+ ## 1.3.13
118
+
119
+ ### Patch Changes
120
+
121
+ - [#1338](https://github.com/iTwin/presentation/pull/1338): Bump iTwin.js core dependencies to `^5.9.1`.
122
+ - Updated dependencies:
123
+ - @itwin/presentation-shared@1.2.13
124
+
125
+ ## 1.3.12
126
+
127
+ ### Patch Changes
128
+
129
+ - [#1313](https://github.com/iTwin/presentation/pull/1313): Bump dependencies.
130
+ - Updated dependencies:
131
+ - @itwin/presentation-shared@1.2.12
132
+
102
133
  ## 1.3.11
103
134
 
104
135
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataInternal.d.ts","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAoD,MAAM,0BAA0B,CAAC;AAGlH,OAAO,KAAK,EAUV,QAAQ,IAAI,YAAY,EAGxB,MAAM,IAAI,UAAU,EAMrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAErD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,CAW5D;AAwBD,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAYhF;AAoGD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAqB3F"}
1
+ {"version":3,"file":"MetadataInternal.d.ts","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAoD,MAAM,0BAA0B,CAAC;AAGlH,OAAO,KAAK,EAUV,QAAQ,IAAI,YAAY,EAIxB,MAAM,IAAI,UAAU,EAMrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAErD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,CAY5D;AA2BD,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAYhF;AA4GD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAqB3F"}
@@ -14,6 +14,7 @@ const presentation_shared_1 = require("@itwin/presentation-shared");
14
14
  function createECSchema(schema) {
15
15
  return {
16
16
  name: schema.name,
17
+ version: schema.schemaKey.version,
17
18
  async getClass(name) {
18
19
  const item = await schema.getItem(name, ecschema_metadata_1.ECClass);
19
20
  return item ? createECClass(item, this) : undefined;
@@ -42,6 +43,9 @@ class ECSchemaItemImpl {
42
43
  get label() {
43
44
  return this._coreSchemaItem.label;
44
45
  }
46
+ get description() {
47
+ return this._coreSchemaItem.description;
48
+ }
45
49
  }
46
50
  /** @internal */
47
51
  function createECClass(coreClass, schema) {
@@ -94,6 +98,14 @@ class ECClassImpl extends ECSchemaItemImpl {
94
98
  }
95
99
  return result;
96
100
  }
101
+ async getOwnProperties() {
102
+ const coreProperties = await this._coreSchemaItem.getProperties(true);
103
+ const result = new Array();
104
+ for (const coreProperty of coreProperties) {
105
+ result.push(createECProperty(coreProperty, this));
106
+ }
107
+ return result;
108
+ }
97
109
  async getDerivedClasses() {
98
110
  const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();
99
111
  return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];
@@ -205,6 +217,9 @@ class ECPropertyImpl {
205
217
  get kindOfQuantity() {
206
218
  return createFromOptionalLazyLoaded(this._coreProperty.kindOfQuantity, (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity));
207
219
  }
220
+ get category() {
221
+ return createFromOptionalLazyLoaded(this._coreProperty.category, (coreCategory) => new ECPropertyCategoryImpl(coreCategory));
222
+ }
208
223
  async getCustomAttributes() {
209
224
  return createCustomAttributesSet(this._coreProperty.customAttributes);
210
225
  }
@@ -381,6 +396,14 @@ class ECKindOfQuantityImpl extends ECSchemaItemImpl {
381
396
  super(coreKindOfQuantity);
382
397
  }
383
398
  }
399
+ class ECPropertyCategoryImpl extends ECSchemaItemImpl {
400
+ constructor(coreCategory) {
401
+ super(coreCategory);
402
+ }
403
+ get priority() {
404
+ return this._coreSchemaItem.priority;
405
+ }
406
+ }
384
407
  class ECEnumerationImpl extends ECSchemaItemImpl {
385
408
  constructor(coreEnumeration) {
386
409
  super(coreEnumeration);
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataInternal.js","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { ECClass as CoreClass, PrimitiveType, SchemaItemType, StrengthDirection } from \"@itwin/ecschema-metadata\";\nimport { normalizeFullClassName } from \"@itwin/presentation-shared\";\n\nimport type {\n EntityClass as CoreEntityClass,\n Enumeration as CoreEnumeration,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n KindOfQuantity as CoreKindOfQuantity,\n Mixin as CoreMixin,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Property as CoreProperty,\n RelationshipClass as CoreRelationshipClass,\n RelationshipConstraint as CoreRelationshipConstraint,\n Schema as CoreSchema,\n SchemaItem as CoreSchemaItem,\n StructArrayProperty as CoreStructArrayProperty,\n StructClass as CoreStructClass,\n StructProperty as CoreStructProperty,\n LazyLoadedSchemaItem,\n} from \"@itwin/ecschema-metadata\";\nimport type { EC } from \"@itwin/presentation-shared\";\n\n/** @internal */\nexport function createECSchema(schema: CoreSchema): EC.Schema {\n return {\n name: schema.name,\n async getClass(name) {\n const item = await schema.getItem(name, CoreClass);\n return item ? createECClass(item, this) : undefined;\n },\n async getCustomAttributes() {\n return createCustomAttributesSet(schema.customAttributes);\n },\n };\n}\n\nabstract class ECSchemaItemImpl<TCoreSchemaItem extends CoreSchemaItem> implements EC.SchemaItem {\n private _schema: EC.Schema;\n protected constructor(\n protected _coreSchemaItem: TCoreSchemaItem,\n schema?: EC.Schema,\n ) {\n this._schema = schema ?? createECSchema(this._coreSchemaItem.schema);\n }\n public get schema() {\n return this._schema;\n }\n public get fullName() {\n return normalizeFullClassName(this._coreSchemaItem.fullName);\n }\n public get name() {\n return this._coreSchemaItem.name;\n }\n public get label() {\n return this._coreSchemaItem.label;\n }\n}\n\n/** @internal */\nexport function createECClass(coreClass: CoreClass, schema?: EC.Schema): EC.Class {\n switch (coreClass.schemaItemType) {\n case SchemaItemType.EntityClass:\n return new ECEntityClassImpl(coreClass as CoreEntityClass, schema);\n case SchemaItemType.RelationshipClass:\n return new ECRelationshipClassImpl(coreClass as CoreRelationshipClass, schema);\n case SchemaItemType.StructClass:\n return new ECStructClassImpl(coreClass as CoreStructClass, schema);\n case SchemaItemType.Mixin:\n return new ECMixinImpl(coreClass as CoreMixin, schema);\n }\n throw new Error(`Invalid class type \"${coreClass.schemaItemType}\" for class ${coreClass.fullName}`);\n}\n\nabstract class ECClassImpl<TCoreClass extends CoreClass> extends ECSchemaItemImpl<TCoreClass> implements EC.Class {\n protected constructor(coreClass: TCoreClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public isEntityClass(): this is EC.EntityClass {\n return false;\n }\n public isRelationshipClass(): this is EC.RelationshipClass {\n return false;\n }\n public isStructClass(): this is EC.StructClass {\n return false;\n }\n public isMixin(): this is EC.Mixin {\n return false;\n }\n public get baseClass(): Promise<EC.Class | undefined> {\n return createFromOptionalLazyLoaded(this._coreSchemaItem.baseClass, (coreBaseClass) =>\n createECClass(coreBaseClass, this.schema),\n );\n }\n public async is(classOrClassName: EC.Class | string, schemaName?: string) {\n if (typeof classOrClassName === \"string\") {\n return this._coreSchemaItem.is(classOrClassName, schemaName!);\n }\n return this._coreSchemaItem.is(classOrClassName.name, classOrClassName.schema.name);\n }\n public async getProperty(name: string): Promise<EC.Property | undefined> {\n const coreProperty = await this._coreSchemaItem.getProperty(name, false);\n return coreProperty ? createECProperty(coreProperty, this) : undefined;\n }\n public async getProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties();\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getDerivedClasses(): Promise<EC.Class[]> {\n const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();\n return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreSchemaItem.customAttributes);\n }\n}\n\nclass ECEntityClassImpl extends ECClassImpl<CoreEntityClass> implements EC.EntityClass {\n constructor(coreClass: CoreEntityClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isEntityClass(): this is EC.EntityClass {\n return true;\n }\n}\n\nclass ECRelationshipClassImpl extends ECClassImpl<CoreRelationshipClass> implements EC.RelationshipClass {\n constructor(coreClass: CoreRelationshipClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isRelationshipClass(): this is EC.RelationshipClass {\n return true;\n }\n public get direction() {\n switch (this._coreSchemaItem.strengthDirection) {\n case StrengthDirection.Forward:\n return \"Forward\";\n case StrengthDirection.Backward:\n return \"Backward\";\n }\n }\n public get source() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.source, this.schema);\n }\n public get target() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.target, this.schema);\n }\n}\n\nclass ECStructClassImpl extends ECClassImpl<CoreStructClass> implements EC.StructClass {\n constructor(coreClass: CoreStructClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isStructClass(): this is EC.StructClass {\n return true;\n }\n}\n\nclass ECMixinImpl extends ECClassImpl<CoreMixin> implements EC.Mixin {\n constructor(coreClass: CoreMixin, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isMixin(): this is EC.Mixin {\n return true;\n }\n}\n\n/** @internal */\nexport function createECProperty(coreProperty: CoreProperty, ecClass: EC.Class): EC.Property {\n if (coreProperty.isArray()) {\n if (coreProperty.isPrimitive()) {\n return new ECPrimitivesArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationArrayPropertyImpl(coreProperty, ecClass);\n }\n return new ECStructArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isStruct()) {\n return new ECStructPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isNavigation()) {\n return new ECNavigationPropertyImpl(coreProperty, ecClass);\n }\n assert(coreProperty.isPrimitive());\n return new ECPrimitivePropertyImpl(coreProperty, ecClass);\n}\n\nabstract class ECPropertyImpl<TCoreProperty extends CoreProperty> implements EC.Property {\n protected constructor(\n protected _coreProperty: TCoreProperty,\n protected _class: EC.Class,\n ) {}\n public isArray(): this is EC.ArrayProperty {\n return false;\n }\n public isStruct(): this is EC.StructProperty {\n return false;\n }\n public isPrimitive(): this is EC.PrimitiveProperty {\n return false;\n }\n public isEnumeration(): this is EC.EnumerationProperty {\n return false;\n }\n public isNavigation(): this is EC.NavigationProperty {\n return false;\n }\n public get class() {\n return this._class;\n }\n public get name() {\n return this._coreProperty.name;\n }\n public get label() {\n return this._coreProperty.label;\n }\n public get kindOfQuantity(): Promise<EC.KindOfQuantity | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.kindOfQuantity,\n (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity),\n );\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreProperty.customAttributes);\n }\n}\n\nclass ECPrimitivePropertyImpl<TCoreProperty extends CorePrimitiveProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.PrimitiveProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isPrimitive(): this is EC.PrimitiveProperty {\n return true;\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n public get primitiveType() {\n switch (this._coreProperty.primitiveType) {\n case PrimitiveType.Binary:\n return \"Binary\";\n case PrimitiveType.Boolean:\n return \"Boolean\";\n case PrimitiveType.DateTime:\n return \"DateTime\";\n case PrimitiveType.Double:\n return \"Double\";\n case PrimitiveType.IGeometry:\n return \"IGeometry\";\n case PrimitiveType.Integer:\n return \"Integer\";\n case PrimitiveType.Long:\n return \"Long\";\n case PrimitiveType.Point2d:\n return \"Point2d\";\n case PrimitiveType.Point3d:\n return \"Point3d\";\n case PrimitiveType.String:\n return \"String\";\n }\n throw new Error(\"Primitive property is not initialized\");\n }\n}\n\nclass ECNavigationPropertyImpl extends ECPropertyImpl<CoreNavigationProperty> implements EC.NavigationProperty {\n constructor(coreProperty: CoreNavigationProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isNavigation(): this is EC.NavigationProperty {\n return true;\n }\n public get relationshipClass() {\n return createFromLazyLoaded(this._coreProperty.relationshipClass, (r) => new ECRelationshipClassImpl(r));\n }\n public get direction() {\n switch (this._coreProperty.direction) {\n case StrengthDirection.Backward:\n return \"Backward\";\n case StrengthDirection.Forward:\n return \"Forward\";\n }\n }\n}\n\nclass ECEnumerationPropertyImpl<TCoreProperty extends CoreEnumerationProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.EnumerationProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isEnumeration(): this is EC.EnumerationProperty {\n return true;\n }\n public get enumeration() {\n return createFromOptionalLazyLoaded(\n this._coreProperty.enumeration,\n (coreEnumeration) => new ECEnumerationImpl(coreEnumeration),\n );\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n}\n\nclass ECStructPropertyImpl<TCoreProperty extends CoreStructProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.StructProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isStruct(): this is EC.StructProperty {\n return true;\n }\n public get structClass(): EC.StructClass {\n return new ECStructClassImpl(this._coreProperty.structClass);\n }\n}\n\nclass ECPrimitivesArrayPropertyImpl\n extends ECPrimitivePropertyImpl<CorePrimitiveArrayProperty>\n implements EC.PrimitiveArrayProperty\n{\n constructor(coreProperty: CorePrimitiveArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECEnumerationArrayPropertyImpl\n extends ECEnumerationPropertyImpl<CoreEnumerationArrayProperty>\n implements EC.EnumerationArrayProperty\n{\n constructor(coreProperty: CoreEnumerationArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECStructArrayPropertyImpl\n extends ECStructPropertyImpl<CoreStructArrayProperty>\n implements EC.StructArrayProperty\n{\n constructor(coreProperty: CoreStructArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nasync function createFromLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource>,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget> {\n return source.then(convert);\n}\n\nasync function createFromOptionalLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource> | undefined,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget | undefined> {\n if (!source) {\n return undefined;\n }\n return source.then(convert);\n}\n\nconst EMPTY_MAP: ReadonlyMap<EC.FullClassName, EC.CustomAttribute> = new Map();\nasync function createCustomAttributesSet(\n coreCustomAttributes: CoreClass[\"customAttributes\"],\n): Promise<EC.CustomAttributeSet> {\n if (!coreCustomAttributes) {\n return EMPTY_MAP;\n }\n return {\n *[Symbol.iterator]() {\n for (const [className, ca] of coreCustomAttributes) {\n const normalizedClassName = normalizeFullClassName(className);\n yield [normalizedClassName, { ...ca, className: normalizedClassName }];\n }\n },\n get(className: EC.FullClassName) {\n const normalizedClassName = normalizeFullClassName(className);\n const coreCustomAttribute = coreCustomAttributes.get(normalizedClassName);\n return coreCustomAttribute ? { ...coreCustomAttribute, className: normalizedClassName } : undefined;\n },\n };\n}\n\nclass ECRelationshipConstraintImpl implements EC.RelationshipConstraint {\n constructor(\n private _coreConstraint: CoreRelationshipConstraint,\n private _schema: EC.Schema,\n ) {}\n public get multiplicity() {\n return this._coreConstraint.multiplicity;\n }\n public get polymorphic() {\n return this._coreConstraint.polymorphic;\n }\n public get abstractConstraint(): Promise<EC.EntityClass | EC.Mixin | EC.RelationshipClass | undefined> {\n return createFromOptionalLazyLoaded(this._coreConstraint.abstractConstraint, (coreConstraint) =>\n createECClass(coreConstraint, this._schema),\n );\n }\n}\n\nclass ECKindOfQuantityImpl extends ECSchemaItemImpl<CoreKindOfQuantity> implements EC.KindOfQuantity {\n constructor(coreKindOfQuantity: CoreKindOfQuantity) {\n super(coreKindOfQuantity);\n }\n}\n\nclass ECEnumerationImpl extends ECSchemaItemImpl<CoreEnumeration> implements EC.Enumeration {\n constructor(coreEnumeration: CoreEnumeration) {\n super(coreEnumeration);\n }\n public get enumerators() {\n return this._coreSchemaItem.enumerators.map((coreEnumerator) => ({ ...coreEnumerator }));\n }\n public get type() {\n switch (this._coreSchemaItem.type) {\n case PrimitiveType.String:\n return \"String\";\n case PrimitiveType.Integer:\n default:\n return \"Number\";\n }\n }\n public get isStrict() {\n return this._coreSchemaItem.isStrict;\n }\n}\n"]}
1
+ {"version":3,"file":"MetadataInternal.js","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { ECClass as CoreClass, PrimitiveType, SchemaItemType, StrengthDirection } from \"@itwin/ecschema-metadata\";\nimport { normalizeFullClassName } from \"@itwin/presentation-shared\";\n\nimport type {\n EntityClass as CoreEntityClass,\n Enumeration as CoreEnumeration,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n KindOfQuantity as CoreKindOfQuantity,\n Mixin as CoreMixin,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Property as CoreProperty,\n PropertyCategory as CorePropertyCategory,\n RelationshipClass as CoreRelationshipClass,\n RelationshipConstraint as CoreRelationshipConstraint,\n Schema as CoreSchema,\n SchemaItem as CoreSchemaItem,\n StructArrayProperty as CoreStructArrayProperty,\n StructClass as CoreStructClass,\n StructProperty as CoreStructProperty,\n LazyLoadedSchemaItem,\n} from \"@itwin/ecschema-metadata\";\nimport type { EC } from \"@itwin/presentation-shared\";\n\n/** @internal */\nexport function createECSchema(schema: CoreSchema): EC.Schema {\n return {\n name: schema.name,\n version: schema.schemaKey.version,\n async getClass(name) {\n const item = await schema.getItem(name, CoreClass);\n return item ? createECClass(item, this) : undefined;\n },\n async getCustomAttributes() {\n return createCustomAttributesSet(schema.customAttributes);\n },\n };\n}\n\nabstract class ECSchemaItemImpl<TCoreSchemaItem extends CoreSchemaItem> implements EC.SchemaItem {\n private _schema: EC.Schema;\n protected constructor(\n protected _coreSchemaItem: TCoreSchemaItem,\n schema?: EC.Schema,\n ) {\n this._schema = schema ?? createECSchema(this._coreSchemaItem.schema);\n }\n public get schema() {\n return this._schema;\n }\n public get fullName() {\n return normalizeFullClassName(this._coreSchemaItem.fullName);\n }\n public get name() {\n return this._coreSchemaItem.name;\n }\n public get label() {\n return this._coreSchemaItem.label;\n }\n public get description() {\n return this._coreSchemaItem.description;\n }\n}\n\n/** @internal */\nexport function createECClass(coreClass: CoreClass, schema?: EC.Schema): EC.Class {\n switch (coreClass.schemaItemType) {\n case SchemaItemType.EntityClass:\n return new ECEntityClassImpl(coreClass as CoreEntityClass, schema);\n case SchemaItemType.RelationshipClass:\n return new ECRelationshipClassImpl(coreClass as CoreRelationshipClass, schema);\n case SchemaItemType.StructClass:\n return new ECStructClassImpl(coreClass, schema);\n case SchemaItemType.Mixin:\n return new ECMixinImpl(coreClass as CoreMixin, schema);\n }\n throw new Error(`Invalid class type \"${coreClass.schemaItemType}\" for class ${coreClass.fullName}`);\n}\n\nabstract class ECClassImpl<TCoreClass extends CoreClass> extends ECSchemaItemImpl<TCoreClass> implements EC.Class {\n protected constructor(coreClass: TCoreClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public isEntityClass(): this is EC.EntityClass {\n return false;\n }\n public isRelationshipClass(): this is EC.RelationshipClass {\n return false;\n }\n public isStructClass(): this is EC.StructClass {\n return false;\n }\n public isMixin(): this is EC.Mixin {\n return false;\n }\n public get baseClass(): Promise<EC.Class | undefined> {\n return createFromOptionalLazyLoaded(this._coreSchemaItem.baseClass, (coreBaseClass) =>\n createECClass(coreBaseClass, this.schema),\n );\n }\n public async is(classOrClassName: EC.Class | string, schemaName?: string) {\n if (typeof classOrClassName === \"string\") {\n return this._coreSchemaItem.is(classOrClassName, schemaName!);\n }\n return this._coreSchemaItem.is(classOrClassName.name, classOrClassName.schema.name);\n }\n public async getProperty(name: string): Promise<EC.Property | undefined> {\n const coreProperty = await this._coreSchemaItem.getProperty(name, false);\n return coreProperty ? createECProperty(coreProperty, this) : undefined;\n }\n public async getProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties();\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getOwnProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties(true);\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getDerivedClasses(): Promise<EC.Class[]> {\n const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();\n return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreSchemaItem.customAttributes);\n }\n}\n\nclass ECEntityClassImpl extends ECClassImpl<CoreEntityClass> implements EC.EntityClass {\n constructor(coreClass: CoreEntityClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isEntityClass(): this is EC.EntityClass {\n return true;\n }\n}\n\nclass ECRelationshipClassImpl extends ECClassImpl<CoreRelationshipClass> implements EC.RelationshipClass {\n constructor(coreClass: CoreRelationshipClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isRelationshipClass(): this is EC.RelationshipClass {\n return true;\n }\n public get direction() {\n switch (this._coreSchemaItem.strengthDirection) {\n case StrengthDirection.Forward:\n return \"Forward\";\n case StrengthDirection.Backward:\n return \"Backward\";\n }\n }\n public get source() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.source, this.schema);\n }\n public get target() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.target, this.schema);\n }\n}\n\nclass ECStructClassImpl extends ECClassImpl<CoreStructClass> implements EC.StructClass {\n constructor(coreClass: CoreStructClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isStructClass(): this is EC.StructClass {\n return true;\n }\n}\n\nclass ECMixinImpl extends ECClassImpl<CoreMixin> implements EC.Mixin {\n constructor(coreClass: CoreMixin, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isMixin(): this is EC.Mixin {\n return true;\n }\n}\n\n/** @internal */\nexport function createECProperty(coreProperty: CoreProperty, ecClass: EC.Class): EC.Property {\n if (coreProperty.isArray()) {\n if (coreProperty.isPrimitive()) {\n return new ECPrimitivesArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationArrayPropertyImpl(coreProperty, ecClass);\n }\n return new ECStructArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isStruct()) {\n return new ECStructPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isNavigation()) {\n return new ECNavigationPropertyImpl(coreProperty, ecClass);\n }\n assert(coreProperty.isPrimitive());\n return new ECPrimitivePropertyImpl(coreProperty, ecClass);\n}\n\nabstract class ECPropertyImpl<TCoreProperty extends CoreProperty> implements EC.Property {\n protected constructor(\n protected _coreProperty: TCoreProperty,\n protected _class: EC.Class,\n ) {}\n public isArray(): this is EC.ArrayProperty {\n return false;\n }\n public isStruct(): this is EC.StructProperty {\n return false;\n }\n public isPrimitive(): this is EC.PrimitiveProperty {\n return false;\n }\n public isEnumeration(): this is EC.EnumerationProperty {\n return false;\n }\n public isNavigation(): this is EC.NavigationProperty {\n return false;\n }\n public get class() {\n return this._class;\n }\n public get name() {\n return this._coreProperty.name;\n }\n public get label() {\n return this._coreProperty.label;\n }\n public get kindOfQuantity(): Promise<EC.KindOfQuantity | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.kindOfQuantity,\n (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity),\n );\n }\n public get category(): Promise<EC.PropertyCategory | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.category,\n (coreCategory) => new ECPropertyCategoryImpl(coreCategory),\n );\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreProperty.customAttributes);\n }\n}\n\nclass ECPrimitivePropertyImpl<TCoreProperty extends CorePrimitiveProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.PrimitiveProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isPrimitive(): this is EC.PrimitiveProperty {\n return true;\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n public get primitiveType() {\n switch (this._coreProperty.primitiveType) {\n case PrimitiveType.Binary:\n return \"Binary\";\n case PrimitiveType.Boolean:\n return \"Boolean\";\n case PrimitiveType.DateTime:\n return \"DateTime\";\n case PrimitiveType.Double:\n return \"Double\";\n case PrimitiveType.IGeometry:\n return \"IGeometry\";\n case PrimitiveType.Integer:\n return \"Integer\";\n case PrimitiveType.Long:\n return \"Long\";\n case PrimitiveType.Point2d:\n return \"Point2d\";\n case PrimitiveType.Point3d:\n return \"Point3d\";\n case PrimitiveType.String:\n return \"String\";\n }\n throw new Error(\"Primitive property is not initialized\");\n }\n}\n\nclass ECNavigationPropertyImpl extends ECPropertyImpl<CoreNavigationProperty> implements EC.NavigationProperty {\n constructor(coreProperty: CoreNavigationProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isNavigation(): this is EC.NavigationProperty {\n return true;\n }\n public get relationshipClass() {\n return createFromLazyLoaded(this._coreProperty.relationshipClass, (r) => new ECRelationshipClassImpl(r));\n }\n public get direction() {\n switch (this._coreProperty.direction) {\n case StrengthDirection.Backward:\n return \"Backward\";\n case StrengthDirection.Forward:\n return \"Forward\";\n }\n }\n}\n\nclass ECEnumerationPropertyImpl<TCoreProperty extends CoreEnumerationProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.EnumerationProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isEnumeration(): this is EC.EnumerationProperty {\n return true;\n }\n public get enumeration() {\n return createFromOptionalLazyLoaded(\n this._coreProperty.enumeration,\n (coreEnumeration) => new ECEnumerationImpl(coreEnumeration),\n );\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n}\n\nclass ECStructPropertyImpl<TCoreProperty extends CoreStructProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.StructProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isStruct(): this is EC.StructProperty {\n return true;\n }\n public get structClass(): EC.StructClass {\n return new ECStructClassImpl(this._coreProperty.structClass);\n }\n}\n\nclass ECPrimitivesArrayPropertyImpl\n extends ECPrimitivePropertyImpl<CorePrimitiveArrayProperty>\n implements EC.PrimitiveArrayProperty\n{\n constructor(coreProperty: CorePrimitiveArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECEnumerationArrayPropertyImpl\n extends ECEnumerationPropertyImpl<CoreEnumerationArrayProperty>\n implements EC.EnumerationArrayProperty\n{\n constructor(coreProperty: CoreEnumerationArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECStructArrayPropertyImpl\n extends ECStructPropertyImpl<CoreStructArrayProperty>\n implements EC.StructArrayProperty\n{\n constructor(coreProperty: CoreStructArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nasync function createFromLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource>,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget> {\n return source.then(convert);\n}\n\nasync function createFromOptionalLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource> | undefined,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget | undefined> {\n if (!source) {\n return undefined;\n }\n return source.then(convert);\n}\n\nconst EMPTY_MAP: ReadonlyMap<EC.FullClassName, EC.CustomAttribute> = new Map();\nasync function createCustomAttributesSet(\n coreCustomAttributes: CoreClass[\"customAttributes\"],\n): Promise<EC.CustomAttributeSet> {\n if (!coreCustomAttributes) {\n return EMPTY_MAP;\n }\n return {\n *[Symbol.iterator]() {\n for (const [className, ca] of coreCustomAttributes) {\n const normalizedClassName = normalizeFullClassName(className);\n yield [normalizedClassName, { ...ca, className: normalizedClassName }];\n }\n },\n get(className: EC.FullClassName) {\n const normalizedClassName = normalizeFullClassName(className);\n const coreCustomAttribute = coreCustomAttributes.get(normalizedClassName);\n return coreCustomAttribute ? { ...coreCustomAttribute, className: normalizedClassName } : undefined;\n },\n };\n}\n\nclass ECRelationshipConstraintImpl implements EC.RelationshipConstraint {\n constructor(\n private _coreConstraint: CoreRelationshipConstraint,\n private _schema: EC.Schema,\n ) {}\n public get multiplicity() {\n return this._coreConstraint.multiplicity;\n }\n public get polymorphic() {\n return this._coreConstraint.polymorphic;\n }\n public get abstractConstraint(): Promise<EC.EntityClass | EC.Mixin | EC.RelationshipClass | undefined> {\n return createFromOptionalLazyLoaded(this._coreConstraint.abstractConstraint, (coreConstraint) =>\n createECClass(coreConstraint, this._schema),\n );\n }\n}\n\nclass ECKindOfQuantityImpl extends ECSchemaItemImpl<CoreKindOfQuantity> implements EC.KindOfQuantity {\n constructor(coreKindOfQuantity: CoreKindOfQuantity) {\n super(coreKindOfQuantity);\n }\n}\n\nclass ECPropertyCategoryImpl extends ECSchemaItemImpl<CorePropertyCategory> implements EC.PropertyCategory {\n constructor(coreCategory: CorePropertyCategory) {\n super(coreCategory);\n }\n public get priority() {\n return this._coreSchemaItem.priority;\n }\n}\n\nclass ECEnumerationImpl extends ECSchemaItemImpl<CoreEnumeration> implements EC.Enumeration {\n constructor(coreEnumeration: CoreEnumeration) {\n super(coreEnumeration);\n }\n public get enumerators() {\n return this._coreSchemaItem.enumerators.map((coreEnumerator) => ({ ...coreEnumerator }));\n }\n public get type() {\n switch (this._coreSchemaItem.type) {\n case PrimitiveType.String:\n return \"String\";\n case PrimitiveType.Integer:\n default:\n return \"Number\";\n }\n }\n public get isStrict() {\n return this._coreSchemaItem.isStrict;\n }\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  import { QueryBinder } from "@itwin/core-common";
2
- import type { ECSqlReader, QueryOptions } from "@itwin/core-common";
2
+ import type { QueryOptions, QueryRowProxy } from "@itwin/core-common";
3
3
  import type { ECSqlQueryExecutor } from "@itwin/presentation-shared";
4
+ export declare const QUERY_CANCEL_DELAY_MS = 100;
4
5
  /**
5
6
  * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)
6
7
  * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).
7
8
  * @public
8
9
  */
9
10
  interface CoreECSqlReaderFactory {
10
- createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): ECSqlReader;
11
+ createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): AsyncIterableIterator<QueryRowProxy>;
11
12
  }
12
13
  /**
13
14
  * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or
@@ -1 +1 @@
1
- {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAItF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CAC7F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,kBAAkB,CAsB3F"}
1
+ {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAItF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;CACtH;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,kBAAkB,CA8C3F"}
@@ -4,11 +4,13 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.QUERY_CANCEL_DELAY_MS = void 0;
7
8
  exports.createECSqlQueryExecutor = createECSqlQueryExecutor;
8
9
  const core_bentley_1 = require("@itwin/core-bentley");
9
10
  const core_common_1 = require("@itwin/core-common");
10
11
  const core_geometry_1 = require("@itwin/core-geometry");
11
12
  const presentation_shared_1 = require("@itwin/presentation-shared");
13
+ exports.QUERY_CANCEL_DELAY_MS = 100;
12
14
  /**
13
15
  * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or
14
16
  * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).
@@ -41,19 +43,39 @@ function createECSqlQueryExecutor(imodel) {
41
43
  opts.setRowFormat(core_common_1.QueryRowFormat.UseECSqlPropertyIndexes);
42
44
  break;
43
45
  }
44
- if (config?.restartToken) {
45
- opts.setRestartToken(config.restartToken);
46
- }
47
- return new ECSqlQueryReaderImpl(imodel.createQueryReader((0, presentation_shared_1.trimWhitespace)(addCTEs(ecsql, ctes)), bind(bindings ?? []), opts.getOptions()), config?.rowFormat === "Indexes" ? "array" : "object");
46
+ const restartToken = config?.restartToken ?? core_bentley_1.Guid.createValue();
47
+ opts.setRestartToken(restartToken);
48
+ const onCancel = () => {
49
+ try {
50
+ const cancelReader = imodel.createQueryReader("SELECT 1", undefined, new core_common_1.QueryOptionsBuilder().setRestartToken(restartToken).getOptions());
51
+ void (async () => {
52
+ try {
53
+ for await (const _ of cancelReader) {
54
+ /* drain */
55
+ }
56
+ }
57
+ catch {
58
+ /* expected */
59
+ }
60
+ })();
61
+ }
62
+ catch {
63
+ /* ignore */
64
+ }
65
+ };
66
+ return new ECSqlQueryReaderImpl(imodel.createQueryReader((0, presentation_shared_1.trimWhitespace)(addCTEs(ecsql, ctes)), bindings ? bind(bindings) : undefined, opts.getOptions()), config?.rowFormat === "Indexes" ? "array" : "object", onCancel);
48
67
  },
49
68
  };
50
69
  }
51
70
  class ECSqlQueryReaderImpl {
52
71
  _coreReader;
53
72
  _format;
54
- constructor(_coreReader, _format) {
73
+ _onCancel;
74
+ _cancelTimer;
75
+ constructor(_coreReader, _format, _onCancel) {
55
76
  this._coreReader = _coreReader;
56
77
  this._format = _format;
78
+ this._onCancel = _onCancel;
57
79
  }
58
80
  [Symbol.asyncIterator]() {
59
81
  return this;
@@ -61,48 +83,64 @@ class ECSqlQueryReaderImpl {
61
83
  async next() {
62
84
  const res = await this._coreReader.next();
63
85
  if (res.done) {
86
+ if (this._cancelTimer) {
87
+ clearTimeout(this._cancelTimer);
88
+ this._cancelTimer = undefined;
89
+ }
64
90
  return { done: true, value: undefined };
65
91
  }
66
92
  return { done: false, value: this._format === "array" ? res.value.toArray() : res.value.toRow() };
67
93
  }
94
+ async return() {
95
+ if (this._coreReader.return) {
96
+ await this._coreReader.return();
97
+ }
98
+ else {
99
+ this._cancelTimer = setTimeout(() => this._onCancel(), exports.QUERY_CANCEL_DELAY_MS);
100
+ }
101
+ return { done: true, value: undefined };
102
+ }
68
103
  }
69
104
  function bind(bindings) {
70
105
  const binder = new core_common_1.QueryBinder();
71
- bindings.forEach((b, i) => {
106
+ const entries = Array.isArray(bindings)
107
+ ? bindings.map((b, i) => [i + 1, b])
108
+ : Object.entries(bindings);
109
+ for (const [key, b] of entries) {
72
110
  if (b.value === undefined) {
73
- binder.bindNull(i + 1);
74
- return;
111
+ binder.bindNull(key);
112
+ continue;
75
113
  }
76
114
  switch (b.type) {
77
115
  case "boolean":
78
- binder.bindBoolean(i + 1, b.value);
116
+ binder.bindBoolean(key, b.value);
79
117
  break;
80
118
  case "double":
81
- binder.bindDouble(i + 1, b.value);
119
+ binder.bindDouble(key, b.value);
82
120
  break;
83
121
  case "id":
84
- binder.bindId(i + 1, b.value);
122
+ binder.bindId(key, b.value);
85
123
  break;
86
124
  case "idset":
87
- binder.bindIdSet(i + 1, core_bentley_1.OrderedId64Iterable.sortArray(b.value));
125
+ binder.bindIdSet(key, core_bentley_1.OrderedId64Iterable.sortArray(b.value));
88
126
  break;
89
127
  case "int":
90
- binder.bindInt(i + 1, b.value);
128
+ binder.bindInt(key, b.value);
91
129
  break;
92
130
  case "long":
93
- binder.bindLong(i + 1, b.value);
131
+ binder.bindLong(key, b.value);
94
132
  break;
95
133
  case "point2d":
96
- binder.bindPoint2d(i + 1, core_geometry_1.Point2d.fromJSON(b.value));
134
+ binder.bindPoint2d(key, core_geometry_1.Point2d.fromJSON(b.value));
97
135
  break;
98
136
  case "point3d":
99
- binder.bindPoint3d(i + 1, core_geometry_1.Point3d.fromJSON(b.value));
137
+ binder.bindPoint3d(key, core_geometry_1.Point3d.fromJSON(b.value));
100
138
  break;
101
139
  case "string":
102
- binder.bindString(i + 1, b.value);
140
+ binder.bindString(key, b.value);
103
141
  break;
104
142
  }
105
- });
143
+ }
106
144
  return binder;
107
145
  }
108
146
  function addCTEs(ecsql, ctes) {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryExecutor.js","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.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\nimport { OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { trimWhitespace } from \"@itwin/presentation-shared\";\n\nimport type { ECSqlReader, QueryOptions } from \"@itwin/core-common\";\nimport type {\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n} from \"@itwin/presentation-shared\";\n\n/**\n * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)\n * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n * @public\n */\ninterface CoreECSqlReaderFactory {\n createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): ECSqlReader;\n}\n\n/**\n * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or\n * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n *\n * Usage example:\n *\n * ```ts\n * import { IModelDb } from \"@itwin/core-backend\";\n * import { createECSqlQueryExecutor } from \"@itwin/presentation-core-interop\";\n *\n * const imodel: IModelDb = getIModelDb();\n * const executor = createECSqlQueryExecutor(imodel);\n * for await (const row of executor.createQueryReader(MY_QUERY)) {\n * // TODO: do something with `row`\n * }\n * ```\n *\n * @public\n */\nexport function createECSqlQueryExecutor(imodel: CoreECSqlReaderFactory): ECSqlQueryExecutor {\n return {\n createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions) {\n const { ctes, ecsql, bindings } = query;\n const opts = new QueryOptionsBuilder();\n switch (config?.rowFormat) {\n case \"ECSqlPropertyNames\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n break;\n case \"Indexes\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes);\n break;\n }\n if (config?.restartToken) {\n opts.setRestartToken(config.restartToken);\n }\n return new ECSqlQueryReaderImpl(\n imodel.createQueryReader(trimWhitespace(addCTEs(ecsql, ctes)), bind(bindings ?? []), opts.getOptions()),\n config?.rowFormat === \"Indexes\" ? \"array\" : \"object\",\n );\n },\n };\n}\n\nclass ECSqlQueryReaderImpl implements ReturnType<ECSqlQueryExecutor[\"createQueryReader\"]> {\n public constructor(\n private _coreReader: ECSqlReader,\n private _format: \"array\" | \"object\",\n ) {}\n public [Symbol.asyncIterator](): AsyncIterableIterator<ECSqlQueryRow> {\n return this;\n }\n public async next(): Promise<IteratorResult<ECSqlQueryRow>> {\n const res = await this._coreReader.next();\n if (res.done) {\n return { done: true, value: undefined };\n }\n return { done: false, value: this._format === \"array\" ? res.value.toArray() : res.value.toRow() };\n }\n}\n\nfunction bind(bindings: ECSqlBinding[]): QueryBinder {\n const binder = new QueryBinder();\n bindings.forEach((b, i) => {\n if (b.value === undefined) {\n binder.bindNull(i + 1);\n return;\n }\n switch (b.type) {\n case \"boolean\":\n binder.bindBoolean(i + 1, b.value);\n break;\n case \"double\":\n binder.bindDouble(i + 1, b.value);\n break;\n case \"id\":\n binder.bindId(i + 1, b.value);\n break;\n case \"idset\":\n binder.bindIdSet(i + 1, OrderedId64Iterable.sortArray(b.value));\n break;\n case \"int\":\n binder.bindInt(i + 1, b.value);\n break;\n case \"long\":\n binder.bindLong(i + 1, b.value);\n break;\n case \"point2d\":\n binder.bindPoint2d(i + 1, Point2d.fromJSON(b.value));\n break;\n case \"point3d\":\n binder.bindPoint3d(i + 1, Point3d.fromJSON(b.value));\n break;\n case \"string\":\n binder.bindString(i + 1, b.value);\n break;\n }\n });\n return binder;\n}\n\nfunction addCTEs(ecsql: string, ctes: string[] | undefined) {\n const ctesPrefix = ctes?.length ? `WITH RECURSIVE ${ctes.join(\", \")} ` : \"\";\n return `${ctesPrefix}${ecsql}`;\n}\n"]}
1
+ {"version":3,"file":"QueryExecutor.js","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.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\nimport { Guid, OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { trimWhitespace } from \"@itwin/presentation-shared\";\n\nimport type { QueryOptions, QueryRowProxy } from \"@itwin/core-common\";\nimport type {\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n} from \"@itwin/presentation-shared\";\n\nexport const QUERY_CANCEL_DELAY_MS = 100;\n\n/**\n * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)\n * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n * @public\n */\ninterface CoreECSqlReaderFactory {\n createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): AsyncIterableIterator<QueryRowProxy>;\n}\n\n/**\n * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or\n * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n *\n * Usage example:\n *\n * ```ts\n * import { IModelDb } from \"@itwin/core-backend\";\n * import { createECSqlQueryExecutor } from \"@itwin/presentation-core-interop\";\n *\n * const imodel: IModelDb = getIModelDb();\n * const executor = createECSqlQueryExecutor(imodel);\n * for await (const row of executor.createQueryReader(MY_QUERY)) {\n * // TODO: do something with `row`\n * }\n * ```\n *\n * @public\n */\nexport function createECSqlQueryExecutor(imodel: CoreECSqlReaderFactory): ECSqlQueryExecutor {\n return {\n createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions) {\n const { ctes, ecsql, bindings } = query;\n const opts = new QueryOptionsBuilder();\n switch (config?.rowFormat) {\n case \"ECSqlPropertyNames\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n break;\n case \"Indexes\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes);\n break;\n }\n const restartToken = config?.restartToken ?? Guid.createValue();\n opts.setRestartToken(restartToken);\n const onCancel = () => {\n try {\n const cancelReader = imodel.createQueryReader(\n \"SELECT 1\",\n undefined,\n new QueryOptionsBuilder().setRestartToken(restartToken).getOptions(),\n );\n void (async () => {\n try {\n for await (const _ of cancelReader) {\n /* drain */\n }\n } catch {\n /* expected */\n }\n })();\n } catch {\n /* ignore */\n }\n };\n return new ECSqlQueryReaderImpl(\n imodel.createQueryReader(\n trimWhitespace(addCTEs(ecsql, ctes)),\n bindings ? bind(bindings) : undefined,\n opts.getOptions(),\n ),\n config?.rowFormat === \"Indexes\" ? \"array\" : \"object\",\n onCancel,\n );\n },\n };\n}\n\nclass ECSqlQueryReaderImpl implements ReturnType<ECSqlQueryExecutor[\"createQueryReader\"]> {\n private _cancelTimer: ReturnType<typeof setTimeout> | undefined;\n\n public constructor(\n private _coreReader: AsyncIterableIterator<QueryRowProxy>,\n private _format: \"array\" | \"object\",\n private _onCancel: () => void,\n ) {}\n\n public [Symbol.asyncIterator](): AsyncIterableIterator<ECSqlQueryRow> {\n return this;\n }\n\n public async next(): Promise<IteratorResult<ECSqlQueryRow>> {\n const res = await this._coreReader.next();\n if (res.done) {\n if (this._cancelTimer) {\n clearTimeout(this._cancelTimer);\n this._cancelTimer = undefined;\n }\n return { done: true, value: undefined };\n }\n return { done: false, value: this._format === \"array\" ? res.value.toArray() : res.value.toRow() };\n }\n\n public async return(): Promise<IteratorResult<ECSqlQueryRow>> {\n if (this._coreReader.return) {\n await this._coreReader.return();\n } else {\n this._cancelTimer = setTimeout(() => this._onCancel(), QUERY_CANCEL_DELAY_MS);\n }\n return { done: true, value: undefined };\n }\n}\n\nfunction bind(bindings: ECSqlBinding[] | Record<string, ECSqlBinding>): QueryBinder {\n const binder = new QueryBinder();\n const entries: Array<[string | number, ECSqlBinding]> = Array.isArray(bindings)\n ? bindings.map((b, i) => [i + 1, b])\n : Object.entries(bindings);\n for (const [key, b] of entries) {\n if (b.value === undefined) {\n binder.bindNull(key);\n continue;\n }\n switch (b.type) {\n case \"boolean\":\n binder.bindBoolean(key, b.value);\n break;\n case \"double\":\n binder.bindDouble(key, b.value);\n break;\n case \"id\":\n binder.bindId(key, b.value);\n break;\n case \"idset\":\n binder.bindIdSet(key, OrderedId64Iterable.sortArray(b.value));\n break;\n case \"int\":\n binder.bindInt(key, b.value);\n break;\n case \"long\":\n binder.bindLong(key, b.value);\n break;\n case \"point2d\":\n binder.bindPoint2d(key, Point2d.fromJSON(b.value));\n break;\n case \"point3d\":\n binder.bindPoint3d(key, Point3d.fromJSON(b.value));\n break;\n case \"string\":\n binder.bindString(key, b.value);\n break;\n }\n }\n return binder;\n}\n\nfunction addCTEs(ecsql: string, ctes: string[] | undefined) {\n const ctesPrefix = ctes?.length ? `WITH RECURSIVE ${ctes.join(\", \")} ` : \"\";\n return `${ctesPrefix}${ecsql}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataInternal.d.ts","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAoD,MAAM,0BAA0B,CAAC;AAGlH,OAAO,KAAK,EAUV,QAAQ,IAAI,YAAY,EAGxB,MAAM,IAAI,UAAU,EAMrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAErD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,CAW5D;AAwBD,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAYhF;AAoGD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAqB3F"}
1
+ {"version":3,"file":"MetadataInternal.d.ts","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAoD,MAAM,0BAA0B,CAAC;AAGlH,OAAO,KAAK,EAUV,QAAQ,IAAI,YAAY,EAIxB,MAAM,IAAI,UAAU,EAMrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAErD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,CAY5D;AA2BD,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAYhF;AA4GD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAqB3F"}
@@ -9,6 +9,7 @@ import { normalizeFullClassName } from "@itwin/presentation-shared";
9
9
  export function createECSchema(schema) {
10
10
  return {
11
11
  name: schema.name,
12
+ version: schema.schemaKey.version,
12
13
  async getClass(name) {
13
14
  const item = await schema.getItem(name, CoreClass);
14
15
  return item ? createECClass(item, this) : undefined;
@@ -37,6 +38,9 @@ class ECSchemaItemImpl {
37
38
  get label() {
38
39
  return this._coreSchemaItem.label;
39
40
  }
41
+ get description() {
42
+ return this._coreSchemaItem.description;
43
+ }
40
44
  }
41
45
  /** @internal */
42
46
  export function createECClass(coreClass, schema) {
@@ -89,6 +93,14 @@ class ECClassImpl extends ECSchemaItemImpl {
89
93
  }
90
94
  return result;
91
95
  }
96
+ async getOwnProperties() {
97
+ const coreProperties = await this._coreSchemaItem.getProperties(true);
98
+ const result = new Array();
99
+ for (const coreProperty of coreProperties) {
100
+ result.push(createECProperty(coreProperty, this));
101
+ }
102
+ return result;
103
+ }
92
104
  async getDerivedClasses() {
93
105
  const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();
94
106
  return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];
@@ -200,6 +212,9 @@ class ECPropertyImpl {
200
212
  get kindOfQuantity() {
201
213
  return createFromOptionalLazyLoaded(this._coreProperty.kindOfQuantity, (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity));
202
214
  }
215
+ get category() {
216
+ return createFromOptionalLazyLoaded(this._coreProperty.category, (coreCategory) => new ECPropertyCategoryImpl(coreCategory));
217
+ }
203
218
  async getCustomAttributes() {
204
219
  return createCustomAttributesSet(this._coreProperty.customAttributes);
205
220
  }
@@ -376,6 +391,14 @@ class ECKindOfQuantityImpl extends ECSchemaItemImpl {
376
391
  super(coreKindOfQuantity);
377
392
  }
378
393
  }
394
+ class ECPropertyCategoryImpl extends ECSchemaItemImpl {
395
+ constructor(coreCategory) {
396
+ super(coreCategory);
397
+ }
398
+ get priority() {
399
+ return this._coreSchemaItem.priority;
400
+ }
401
+ }
379
402
  class ECEnumerationImpl extends ECSchemaItemImpl {
380
403
  constructor(coreEnumeration) {
381
404
  super(coreEnumeration);
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataInternal.js","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { ECClass as CoreClass, PrimitiveType, SchemaItemType, StrengthDirection } from \"@itwin/ecschema-metadata\";\nimport { normalizeFullClassName } from \"@itwin/presentation-shared\";\n\nimport type {\n EntityClass as CoreEntityClass,\n Enumeration as CoreEnumeration,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n KindOfQuantity as CoreKindOfQuantity,\n Mixin as CoreMixin,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Property as CoreProperty,\n RelationshipClass as CoreRelationshipClass,\n RelationshipConstraint as CoreRelationshipConstraint,\n Schema as CoreSchema,\n SchemaItem as CoreSchemaItem,\n StructArrayProperty as CoreStructArrayProperty,\n StructClass as CoreStructClass,\n StructProperty as CoreStructProperty,\n LazyLoadedSchemaItem,\n} from \"@itwin/ecschema-metadata\";\nimport type { EC } from \"@itwin/presentation-shared\";\n\n/** @internal */\nexport function createECSchema(schema: CoreSchema): EC.Schema {\n return {\n name: schema.name,\n async getClass(name) {\n const item = await schema.getItem(name, CoreClass);\n return item ? createECClass(item, this) : undefined;\n },\n async getCustomAttributes() {\n return createCustomAttributesSet(schema.customAttributes);\n },\n };\n}\n\nabstract class ECSchemaItemImpl<TCoreSchemaItem extends CoreSchemaItem> implements EC.SchemaItem {\n private _schema: EC.Schema;\n protected constructor(\n protected _coreSchemaItem: TCoreSchemaItem,\n schema?: EC.Schema,\n ) {\n this._schema = schema ?? createECSchema(this._coreSchemaItem.schema);\n }\n public get schema() {\n return this._schema;\n }\n public get fullName() {\n return normalizeFullClassName(this._coreSchemaItem.fullName);\n }\n public get name() {\n return this._coreSchemaItem.name;\n }\n public get label() {\n return this._coreSchemaItem.label;\n }\n}\n\n/** @internal */\nexport function createECClass(coreClass: CoreClass, schema?: EC.Schema): EC.Class {\n switch (coreClass.schemaItemType) {\n case SchemaItemType.EntityClass:\n return new ECEntityClassImpl(coreClass as CoreEntityClass, schema);\n case SchemaItemType.RelationshipClass:\n return new ECRelationshipClassImpl(coreClass as CoreRelationshipClass, schema);\n case SchemaItemType.StructClass:\n return new ECStructClassImpl(coreClass as CoreStructClass, schema);\n case SchemaItemType.Mixin:\n return new ECMixinImpl(coreClass as CoreMixin, schema);\n }\n throw new Error(`Invalid class type \"${coreClass.schemaItemType}\" for class ${coreClass.fullName}`);\n}\n\nabstract class ECClassImpl<TCoreClass extends CoreClass> extends ECSchemaItemImpl<TCoreClass> implements EC.Class {\n protected constructor(coreClass: TCoreClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public isEntityClass(): this is EC.EntityClass {\n return false;\n }\n public isRelationshipClass(): this is EC.RelationshipClass {\n return false;\n }\n public isStructClass(): this is EC.StructClass {\n return false;\n }\n public isMixin(): this is EC.Mixin {\n return false;\n }\n public get baseClass(): Promise<EC.Class | undefined> {\n return createFromOptionalLazyLoaded(this._coreSchemaItem.baseClass, (coreBaseClass) =>\n createECClass(coreBaseClass, this.schema),\n );\n }\n public async is(classOrClassName: EC.Class | string, schemaName?: string) {\n if (typeof classOrClassName === \"string\") {\n return this._coreSchemaItem.is(classOrClassName, schemaName!);\n }\n return this._coreSchemaItem.is(classOrClassName.name, classOrClassName.schema.name);\n }\n public async getProperty(name: string): Promise<EC.Property | undefined> {\n const coreProperty = await this._coreSchemaItem.getProperty(name, false);\n return coreProperty ? createECProperty(coreProperty, this) : undefined;\n }\n public async getProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties();\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getDerivedClasses(): Promise<EC.Class[]> {\n const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();\n return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreSchemaItem.customAttributes);\n }\n}\n\nclass ECEntityClassImpl extends ECClassImpl<CoreEntityClass> implements EC.EntityClass {\n constructor(coreClass: CoreEntityClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isEntityClass(): this is EC.EntityClass {\n return true;\n }\n}\n\nclass ECRelationshipClassImpl extends ECClassImpl<CoreRelationshipClass> implements EC.RelationshipClass {\n constructor(coreClass: CoreRelationshipClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isRelationshipClass(): this is EC.RelationshipClass {\n return true;\n }\n public get direction() {\n switch (this._coreSchemaItem.strengthDirection) {\n case StrengthDirection.Forward:\n return \"Forward\";\n case StrengthDirection.Backward:\n return \"Backward\";\n }\n }\n public get source() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.source, this.schema);\n }\n public get target() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.target, this.schema);\n }\n}\n\nclass ECStructClassImpl extends ECClassImpl<CoreStructClass> implements EC.StructClass {\n constructor(coreClass: CoreStructClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isStructClass(): this is EC.StructClass {\n return true;\n }\n}\n\nclass ECMixinImpl extends ECClassImpl<CoreMixin> implements EC.Mixin {\n constructor(coreClass: CoreMixin, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isMixin(): this is EC.Mixin {\n return true;\n }\n}\n\n/** @internal */\nexport function createECProperty(coreProperty: CoreProperty, ecClass: EC.Class): EC.Property {\n if (coreProperty.isArray()) {\n if (coreProperty.isPrimitive()) {\n return new ECPrimitivesArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationArrayPropertyImpl(coreProperty, ecClass);\n }\n return new ECStructArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isStruct()) {\n return new ECStructPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isNavigation()) {\n return new ECNavigationPropertyImpl(coreProperty, ecClass);\n }\n assert(coreProperty.isPrimitive());\n return new ECPrimitivePropertyImpl(coreProperty, ecClass);\n}\n\nabstract class ECPropertyImpl<TCoreProperty extends CoreProperty> implements EC.Property {\n protected constructor(\n protected _coreProperty: TCoreProperty,\n protected _class: EC.Class,\n ) {}\n public isArray(): this is EC.ArrayProperty {\n return false;\n }\n public isStruct(): this is EC.StructProperty {\n return false;\n }\n public isPrimitive(): this is EC.PrimitiveProperty {\n return false;\n }\n public isEnumeration(): this is EC.EnumerationProperty {\n return false;\n }\n public isNavigation(): this is EC.NavigationProperty {\n return false;\n }\n public get class() {\n return this._class;\n }\n public get name() {\n return this._coreProperty.name;\n }\n public get label() {\n return this._coreProperty.label;\n }\n public get kindOfQuantity(): Promise<EC.KindOfQuantity | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.kindOfQuantity,\n (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity),\n );\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreProperty.customAttributes);\n }\n}\n\nclass ECPrimitivePropertyImpl<TCoreProperty extends CorePrimitiveProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.PrimitiveProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isPrimitive(): this is EC.PrimitiveProperty {\n return true;\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n public get primitiveType() {\n switch (this._coreProperty.primitiveType) {\n case PrimitiveType.Binary:\n return \"Binary\";\n case PrimitiveType.Boolean:\n return \"Boolean\";\n case PrimitiveType.DateTime:\n return \"DateTime\";\n case PrimitiveType.Double:\n return \"Double\";\n case PrimitiveType.IGeometry:\n return \"IGeometry\";\n case PrimitiveType.Integer:\n return \"Integer\";\n case PrimitiveType.Long:\n return \"Long\";\n case PrimitiveType.Point2d:\n return \"Point2d\";\n case PrimitiveType.Point3d:\n return \"Point3d\";\n case PrimitiveType.String:\n return \"String\";\n }\n throw new Error(\"Primitive property is not initialized\");\n }\n}\n\nclass ECNavigationPropertyImpl extends ECPropertyImpl<CoreNavigationProperty> implements EC.NavigationProperty {\n constructor(coreProperty: CoreNavigationProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isNavigation(): this is EC.NavigationProperty {\n return true;\n }\n public get relationshipClass() {\n return createFromLazyLoaded(this._coreProperty.relationshipClass, (r) => new ECRelationshipClassImpl(r));\n }\n public get direction() {\n switch (this._coreProperty.direction) {\n case StrengthDirection.Backward:\n return \"Backward\";\n case StrengthDirection.Forward:\n return \"Forward\";\n }\n }\n}\n\nclass ECEnumerationPropertyImpl<TCoreProperty extends CoreEnumerationProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.EnumerationProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isEnumeration(): this is EC.EnumerationProperty {\n return true;\n }\n public get enumeration() {\n return createFromOptionalLazyLoaded(\n this._coreProperty.enumeration,\n (coreEnumeration) => new ECEnumerationImpl(coreEnumeration),\n );\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n}\n\nclass ECStructPropertyImpl<TCoreProperty extends CoreStructProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.StructProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isStruct(): this is EC.StructProperty {\n return true;\n }\n public get structClass(): EC.StructClass {\n return new ECStructClassImpl(this._coreProperty.structClass);\n }\n}\n\nclass ECPrimitivesArrayPropertyImpl\n extends ECPrimitivePropertyImpl<CorePrimitiveArrayProperty>\n implements EC.PrimitiveArrayProperty\n{\n constructor(coreProperty: CorePrimitiveArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECEnumerationArrayPropertyImpl\n extends ECEnumerationPropertyImpl<CoreEnumerationArrayProperty>\n implements EC.EnumerationArrayProperty\n{\n constructor(coreProperty: CoreEnumerationArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECStructArrayPropertyImpl\n extends ECStructPropertyImpl<CoreStructArrayProperty>\n implements EC.StructArrayProperty\n{\n constructor(coreProperty: CoreStructArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nasync function createFromLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource>,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget> {\n return source.then(convert);\n}\n\nasync function createFromOptionalLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource> | undefined,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget | undefined> {\n if (!source) {\n return undefined;\n }\n return source.then(convert);\n}\n\nconst EMPTY_MAP: ReadonlyMap<EC.FullClassName, EC.CustomAttribute> = new Map();\nasync function createCustomAttributesSet(\n coreCustomAttributes: CoreClass[\"customAttributes\"],\n): Promise<EC.CustomAttributeSet> {\n if (!coreCustomAttributes) {\n return EMPTY_MAP;\n }\n return {\n *[Symbol.iterator]() {\n for (const [className, ca] of coreCustomAttributes) {\n const normalizedClassName = normalizeFullClassName(className);\n yield [normalizedClassName, { ...ca, className: normalizedClassName }];\n }\n },\n get(className: EC.FullClassName) {\n const normalizedClassName = normalizeFullClassName(className);\n const coreCustomAttribute = coreCustomAttributes.get(normalizedClassName);\n return coreCustomAttribute ? { ...coreCustomAttribute, className: normalizedClassName } : undefined;\n },\n };\n}\n\nclass ECRelationshipConstraintImpl implements EC.RelationshipConstraint {\n constructor(\n private _coreConstraint: CoreRelationshipConstraint,\n private _schema: EC.Schema,\n ) {}\n public get multiplicity() {\n return this._coreConstraint.multiplicity;\n }\n public get polymorphic() {\n return this._coreConstraint.polymorphic;\n }\n public get abstractConstraint(): Promise<EC.EntityClass | EC.Mixin | EC.RelationshipClass | undefined> {\n return createFromOptionalLazyLoaded(this._coreConstraint.abstractConstraint, (coreConstraint) =>\n createECClass(coreConstraint, this._schema),\n );\n }\n}\n\nclass ECKindOfQuantityImpl extends ECSchemaItemImpl<CoreKindOfQuantity> implements EC.KindOfQuantity {\n constructor(coreKindOfQuantity: CoreKindOfQuantity) {\n super(coreKindOfQuantity);\n }\n}\n\nclass ECEnumerationImpl extends ECSchemaItemImpl<CoreEnumeration> implements EC.Enumeration {\n constructor(coreEnumeration: CoreEnumeration) {\n super(coreEnumeration);\n }\n public get enumerators() {\n return this._coreSchemaItem.enumerators.map((coreEnumerator) => ({ ...coreEnumerator }));\n }\n public get type() {\n switch (this._coreSchemaItem.type) {\n case PrimitiveType.String:\n return \"String\";\n case PrimitiveType.Integer:\n default:\n return \"Number\";\n }\n }\n public get isStrict() {\n return this._coreSchemaItem.isStrict;\n }\n}\n"]}
1
+ {"version":3,"file":"MetadataInternal.js","sourceRoot":"","sources":["../../../src/core-interop/MetadataInternal.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { ECClass as CoreClass, PrimitiveType, SchemaItemType, StrengthDirection } from \"@itwin/ecschema-metadata\";\nimport { normalizeFullClassName } from \"@itwin/presentation-shared\";\n\nimport type {\n EntityClass as CoreEntityClass,\n Enumeration as CoreEnumeration,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n KindOfQuantity as CoreKindOfQuantity,\n Mixin as CoreMixin,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Property as CoreProperty,\n PropertyCategory as CorePropertyCategory,\n RelationshipClass as CoreRelationshipClass,\n RelationshipConstraint as CoreRelationshipConstraint,\n Schema as CoreSchema,\n SchemaItem as CoreSchemaItem,\n StructArrayProperty as CoreStructArrayProperty,\n StructClass as CoreStructClass,\n StructProperty as CoreStructProperty,\n LazyLoadedSchemaItem,\n} from \"@itwin/ecschema-metadata\";\nimport type { EC } from \"@itwin/presentation-shared\";\n\n/** @internal */\nexport function createECSchema(schema: CoreSchema): EC.Schema {\n return {\n name: schema.name,\n version: schema.schemaKey.version,\n async getClass(name) {\n const item = await schema.getItem(name, CoreClass);\n return item ? createECClass(item, this) : undefined;\n },\n async getCustomAttributes() {\n return createCustomAttributesSet(schema.customAttributes);\n },\n };\n}\n\nabstract class ECSchemaItemImpl<TCoreSchemaItem extends CoreSchemaItem> implements EC.SchemaItem {\n private _schema: EC.Schema;\n protected constructor(\n protected _coreSchemaItem: TCoreSchemaItem,\n schema?: EC.Schema,\n ) {\n this._schema = schema ?? createECSchema(this._coreSchemaItem.schema);\n }\n public get schema() {\n return this._schema;\n }\n public get fullName() {\n return normalizeFullClassName(this._coreSchemaItem.fullName);\n }\n public get name() {\n return this._coreSchemaItem.name;\n }\n public get label() {\n return this._coreSchemaItem.label;\n }\n public get description() {\n return this._coreSchemaItem.description;\n }\n}\n\n/** @internal */\nexport function createECClass(coreClass: CoreClass, schema?: EC.Schema): EC.Class {\n switch (coreClass.schemaItemType) {\n case SchemaItemType.EntityClass:\n return new ECEntityClassImpl(coreClass as CoreEntityClass, schema);\n case SchemaItemType.RelationshipClass:\n return new ECRelationshipClassImpl(coreClass as CoreRelationshipClass, schema);\n case SchemaItemType.StructClass:\n return new ECStructClassImpl(coreClass, schema);\n case SchemaItemType.Mixin:\n return new ECMixinImpl(coreClass as CoreMixin, schema);\n }\n throw new Error(`Invalid class type \"${coreClass.schemaItemType}\" for class ${coreClass.fullName}`);\n}\n\nabstract class ECClassImpl<TCoreClass extends CoreClass> extends ECSchemaItemImpl<TCoreClass> implements EC.Class {\n protected constructor(coreClass: TCoreClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public isEntityClass(): this is EC.EntityClass {\n return false;\n }\n public isRelationshipClass(): this is EC.RelationshipClass {\n return false;\n }\n public isStructClass(): this is EC.StructClass {\n return false;\n }\n public isMixin(): this is EC.Mixin {\n return false;\n }\n public get baseClass(): Promise<EC.Class | undefined> {\n return createFromOptionalLazyLoaded(this._coreSchemaItem.baseClass, (coreBaseClass) =>\n createECClass(coreBaseClass, this.schema),\n );\n }\n public async is(classOrClassName: EC.Class | string, schemaName?: string) {\n if (typeof classOrClassName === \"string\") {\n return this._coreSchemaItem.is(classOrClassName, schemaName!);\n }\n return this._coreSchemaItem.is(classOrClassName.name, classOrClassName.schema.name);\n }\n public async getProperty(name: string): Promise<EC.Property | undefined> {\n const coreProperty = await this._coreSchemaItem.getProperty(name, false);\n return coreProperty ? createECProperty(coreProperty, this) : undefined;\n }\n public async getProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties();\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getOwnProperties(): Promise<Array<EC.Property>> {\n const coreProperties = await this._coreSchemaItem.getProperties(true);\n const result = new Array<EC.Property>();\n for (const coreProperty of coreProperties) {\n result.push(createECProperty(coreProperty, this));\n }\n return result;\n }\n public async getDerivedClasses(): Promise<EC.Class[]> {\n const coreDerivedClasses = await this._coreSchemaItem.getDerivedClasses();\n return coreDerivedClasses ? coreDerivedClasses.map((coreClass) => createECClass(coreClass, this.schema)) : [];\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreSchemaItem.customAttributes);\n }\n}\n\nclass ECEntityClassImpl extends ECClassImpl<CoreEntityClass> implements EC.EntityClass {\n constructor(coreClass: CoreEntityClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isEntityClass(): this is EC.EntityClass {\n return true;\n }\n}\n\nclass ECRelationshipClassImpl extends ECClassImpl<CoreRelationshipClass> implements EC.RelationshipClass {\n constructor(coreClass: CoreRelationshipClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isRelationshipClass(): this is EC.RelationshipClass {\n return true;\n }\n public get direction() {\n switch (this._coreSchemaItem.strengthDirection) {\n case StrengthDirection.Forward:\n return \"Forward\";\n case StrengthDirection.Backward:\n return \"Backward\";\n }\n }\n public get source() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.source, this.schema);\n }\n public get target() {\n return new ECRelationshipConstraintImpl(this._coreSchemaItem.target, this.schema);\n }\n}\n\nclass ECStructClassImpl extends ECClassImpl<CoreStructClass> implements EC.StructClass {\n constructor(coreClass: CoreStructClass, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isStructClass(): this is EC.StructClass {\n return true;\n }\n}\n\nclass ECMixinImpl extends ECClassImpl<CoreMixin> implements EC.Mixin {\n constructor(coreClass: CoreMixin, schema?: EC.Schema) {\n super(coreClass, schema);\n }\n public override isMixin(): this is EC.Mixin {\n return true;\n }\n}\n\n/** @internal */\nexport function createECProperty(coreProperty: CoreProperty, ecClass: EC.Class): EC.Property {\n if (coreProperty.isArray()) {\n if (coreProperty.isPrimitive()) {\n return new ECPrimitivesArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationArrayPropertyImpl(coreProperty, ecClass);\n }\n return new ECStructArrayPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isStruct()) {\n return new ECStructPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isEnumeration()) {\n return new ECEnumerationPropertyImpl(coreProperty, ecClass);\n }\n if (coreProperty.isNavigation()) {\n return new ECNavigationPropertyImpl(coreProperty, ecClass);\n }\n assert(coreProperty.isPrimitive());\n return new ECPrimitivePropertyImpl(coreProperty, ecClass);\n}\n\nabstract class ECPropertyImpl<TCoreProperty extends CoreProperty> implements EC.Property {\n protected constructor(\n protected _coreProperty: TCoreProperty,\n protected _class: EC.Class,\n ) {}\n public isArray(): this is EC.ArrayProperty {\n return false;\n }\n public isStruct(): this is EC.StructProperty {\n return false;\n }\n public isPrimitive(): this is EC.PrimitiveProperty {\n return false;\n }\n public isEnumeration(): this is EC.EnumerationProperty {\n return false;\n }\n public isNavigation(): this is EC.NavigationProperty {\n return false;\n }\n public get class() {\n return this._class;\n }\n public get name() {\n return this._coreProperty.name;\n }\n public get label() {\n return this._coreProperty.label;\n }\n public get kindOfQuantity(): Promise<EC.KindOfQuantity | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.kindOfQuantity,\n (coreKindOfQuantity) => new ECKindOfQuantityImpl(coreKindOfQuantity),\n );\n }\n public get category(): Promise<EC.PropertyCategory | undefined> {\n return createFromOptionalLazyLoaded(\n this._coreProperty.category,\n (coreCategory) => new ECPropertyCategoryImpl(coreCategory),\n );\n }\n public async getCustomAttributes(): Promise<EC.CustomAttributeSet> {\n return createCustomAttributesSet(this._coreProperty.customAttributes);\n }\n}\n\nclass ECPrimitivePropertyImpl<TCoreProperty extends CorePrimitiveProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.PrimitiveProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isPrimitive(): this is EC.PrimitiveProperty {\n return true;\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n public get primitiveType() {\n switch (this._coreProperty.primitiveType) {\n case PrimitiveType.Binary:\n return \"Binary\";\n case PrimitiveType.Boolean:\n return \"Boolean\";\n case PrimitiveType.DateTime:\n return \"DateTime\";\n case PrimitiveType.Double:\n return \"Double\";\n case PrimitiveType.IGeometry:\n return \"IGeometry\";\n case PrimitiveType.Integer:\n return \"Integer\";\n case PrimitiveType.Long:\n return \"Long\";\n case PrimitiveType.Point2d:\n return \"Point2d\";\n case PrimitiveType.Point3d:\n return \"Point3d\";\n case PrimitiveType.String:\n return \"String\";\n }\n throw new Error(\"Primitive property is not initialized\");\n }\n}\n\nclass ECNavigationPropertyImpl extends ECPropertyImpl<CoreNavigationProperty> implements EC.NavigationProperty {\n constructor(coreProperty: CoreNavigationProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isNavigation(): this is EC.NavigationProperty {\n return true;\n }\n public get relationshipClass() {\n return createFromLazyLoaded(this._coreProperty.relationshipClass, (r) => new ECRelationshipClassImpl(r));\n }\n public get direction() {\n switch (this._coreProperty.direction) {\n case StrengthDirection.Backward:\n return \"Backward\";\n case StrengthDirection.Forward:\n return \"Forward\";\n }\n }\n}\n\nclass ECEnumerationPropertyImpl<TCoreProperty extends CoreEnumerationProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.EnumerationProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isEnumeration(): this is EC.EnumerationProperty {\n return true;\n }\n public get enumeration() {\n return createFromOptionalLazyLoaded(\n this._coreProperty.enumeration,\n (coreEnumeration) => new ECEnumerationImpl(coreEnumeration),\n );\n }\n public get extendedTypeName() {\n return this._coreProperty.extendedTypeName;\n }\n}\n\nclass ECStructPropertyImpl<TCoreProperty extends CoreStructProperty>\n extends ECPropertyImpl<TCoreProperty>\n implements EC.StructProperty\n{\n constructor(coreProperty: TCoreProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isStruct(): this is EC.StructProperty {\n return true;\n }\n public get structClass(): EC.StructClass {\n return new ECStructClassImpl(this._coreProperty.structClass);\n }\n}\n\nclass ECPrimitivesArrayPropertyImpl\n extends ECPrimitivePropertyImpl<CorePrimitiveArrayProperty>\n implements EC.PrimitiveArrayProperty\n{\n constructor(coreProperty: CorePrimitiveArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECEnumerationArrayPropertyImpl\n extends ECEnumerationPropertyImpl<CoreEnumerationArrayProperty>\n implements EC.EnumerationArrayProperty\n{\n constructor(coreProperty: CoreEnumerationArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nclass ECStructArrayPropertyImpl\n extends ECStructPropertyImpl<CoreStructArrayProperty>\n implements EC.StructArrayProperty\n{\n constructor(coreProperty: CoreStructArrayProperty, c: EC.Class) {\n super(coreProperty, c);\n }\n public override isArray(): this is EC.ArrayProperty {\n return true;\n }\n public get minOccurs() {\n return this._coreProperty.minOccurs;\n }\n public get maxOccurs() {\n return this._coreProperty.maxOccurs;\n }\n}\n\nasync function createFromLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource>,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget> {\n return source.then(convert);\n}\n\nasync function createFromOptionalLazyLoaded<TSource extends CoreSchemaItem, TTarget>(\n source: LazyLoadedSchemaItem<TSource> | undefined,\n convert: (source: TSource) => TTarget,\n): Promise<TTarget | undefined> {\n if (!source) {\n return undefined;\n }\n return source.then(convert);\n}\n\nconst EMPTY_MAP: ReadonlyMap<EC.FullClassName, EC.CustomAttribute> = new Map();\nasync function createCustomAttributesSet(\n coreCustomAttributes: CoreClass[\"customAttributes\"],\n): Promise<EC.CustomAttributeSet> {\n if (!coreCustomAttributes) {\n return EMPTY_MAP;\n }\n return {\n *[Symbol.iterator]() {\n for (const [className, ca] of coreCustomAttributes) {\n const normalizedClassName = normalizeFullClassName(className);\n yield [normalizedClassName, { ...ca, className: normalizedClassName }];\n }\n },\n get(className: EC.FullClassName) {\n const normalizedClassName = normalizeFullClassName(className);\n const coreCustomAttribute = coreCustomAttributes.get(normalizedClassName);\n return coreCustomAttribute ? { ...coreCustomAttribute, className: normalizedClassName } : undefined;\n },\n };\n}\n\nclass ECRelationshipConstraintImpl implements EC.RelationshipConstraint {\n constructor(\n private _coreConstraint: CoreRelationshipConstraint,\n private _schema: EC.Schema,\n ) {}\n public get multiplicity() {\n return this._coreConstraint.multiplicity;\n }\n public get polymorphic() {\n return this._coreConstraint.polymorphic;\n }\n public get abstractConstraint(): Promise<EC.EntityClass | EC.Mixin | EC.RelationshipClass | undefined> {\n return createFromOptionalLazyLoaded(this._coreConstraint.abstractConstraint, (coreConstraint) =>\n createECClass(coreConstraint, this._schema),\n );\n }\n}\n\nclass ECKindOfQuantityImpl extends ECSchemaItemImpl<CoreKindOfQuantity> implements EC.KindOfQuantity {\n constructor(coreKindOfQuantity: CoreKindOfQuantity) {\n super(coreKindOfQuantity);\n }\n}\n\nclass ECPropertyCategoryImpl extends ECSchemaItemImpl<CorePropertyCategory> implements EC.PropertyCategory {\n constructor(coreCategory: CorePropertyCategory) {\n super(coreCategory);\n }\n public get priority() {\n return this._coreSchemaItem.priority;\n }\n}\n\nclass ECEnumerationImpl extends ECSchemaItemImpl<CoreEnumeration> implements EC.Enumeration {\n constructor(coreEnumeration: CoreEnumeration) {\n super(coreEnumeration);\n }\n public get enumerators() {\n return this._coreSchemaItem.enumerators.map((coreEnumerator) => ({ ...coreEnumerator }));\n }\n public get type() {\n switch (this._coreSchemaItem.type) {\n case PrimitiveType.String:\n return \"String\";\n case PrimitiveType.Integer:\n default:\n return \"Number\";\n }\n }\n public get isStrict() {\n return this._coreSchemaItem.isStrict;\n }\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  import { QueryBinder } from "@itwin/core-common";
2
- import type { ECSqlReader, QueryOptions } from "@itwin/core-common";
2
+ import type { QueryOptions, QueryRowProxy } from "@itwin/core-common";
3
3
  import type { ECSqlQueryExecutor } from "@itwin/presentation-shared";
4
+ export declare const QUERY_CANCEL_DELAY_MS = 100;
4
5
  /**
5
6
  * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)
6
7
  * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).
7
8
  * @public
8
9
  */
9
10
  interface CoreECSqlReaderFactory {
10
- createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): ECSqlReader;
11
+ createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): AsyncIterableIterator<QueryRowProxy>;
11
12
  }
12
13
  /**
13
14
  * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or
@@ -1 +1 @@
1
- {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAItF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CAC7F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,kBAAkB,CAsB3F"}
1
+ {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAItF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;CACtH;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,kBAAkB,CA8C3F"}
@@ -2,10 +2,11 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { OrderedId64Iterable } from "@itwin/core-bentley";
5
+ import { Guid, OrderedId64Iterable } from "@itwin/core-bentley";
6
6
  import { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from "@itwin/core-common";
7
7
  import { Point2d, Point3d } from "@itwin/core-geometry";
8
8
  import { trimWhitespace } from "@itwin/presentation-shared";
9
+ export const QUERY_CANCEL_DELAY_MS = 100;
9
10
  /**
10
11
  * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or
11
12
  * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).
@@ -38,19 +39,39 @@ export function createECSqlQueryExecutor(imodel) {
38
39
  opts.setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes);
39
40
  break;
40
41
  }
41
- if (config?.restartToken) {
42
- opts.setRestartToken(config.restartToken);
43
- }
44
- return new ECSqlQueryReaderImpl(imodel.createQueryReader(trimWhitespace(addCTEs(ecsql, ctes)), bind(bindings ?? []), opts.getOptions()), config?.rowFormat === "Indexes" ? "array" : "object");
42
+ const restartToken = config?.restartToken ?? Guid.createValue();
43
+ opts.setRestartToken(restartToken);
44
+ const onCancel = () => {
45
+ try {
46
+ const cancelReader = imodel.createQueryReader("SELECT 1", undefined, new QueryOptionsBuilder().setRestartToken(restartToken).getOptions());
47
+ void (async () => {
48
+ try {
49
+ for await (const _ of cancelReader) {
50
+ /* drain */
51
+ }
52
+ }
53
+ catch {
54
+ /* expected */
55
+ }
56
+ })();
57
+ }
58
+ catch {
59
+ /* ignore */
60
+ }
61
+ };
62
+ return new ECSqlQueryReaderImpl(imodel.createQueryReader(trimWhitespace(addCTEs(ecsql, ctes)), bindings ? bind(bindings) : undefined, opts.getOptions()), config?.rowFormat === "Indexes" ? "array" : "object", onCancel);
45
63
  },
46
64
  };
47
65
  }
48
66
  class ECSqlQueryReaderImpl {
49
67
  _coreReader;
50
68
  _format;
51
- constructor(_coreReader, _format) {
69
+ _onCancel;
70
+ _cancelTimer;
71
+ constructor(_coreReader, _format, _onCancel) {
52
72
  this._coreReader = _coreReader;
53
73
  this._format = _format;
74
+ this._onCancel = _onCancel;
54
75
  }
55
76
  [Symbol.asyncIterator]() {
56
77
  return this;
@@ -58,48 +79,64 @@ class ECSqlQueryReaderImpl {
58
79
  async next() {
59
80
  const res = await this._coreReader.next();
60
81
  if (res.done) {
82
+ if (this._cancelTimer) {
83
+ clearTimeout(this._cancelTimer);
84
+ this._cancelTimer = undefined;
85
+ }
61
86
  return { done: true, value: undefined };
62
87
  }
63
88
  return { done: false, value: this._format === "array" ? res.value.toArray() : res.value.toRow() };
64
89
  }
90
+ async return() {
91
+ if (this._coreReader.return) {
92
+ await this._coreReader.return();
93
+ }
94
+ else {
95
+ this._cancelTimer = setTimeout(() => this._onCancel(), QUERY_CANCEL_DELAY_MS);
96
+ }
97
+ return { done: true, value: undefined };
98
+ }
65
99
  }
66
100
  function bind(bindings) {
67
101
  const binder = new QueryBinder();
68
- bindings.forEach((b, i) => {
102
+ const entries = Array.isArray(bindings)
103
+ ? bindings.map((b, i) => [i + 1, b])
104
+ : Object.entries(bindings);
105
+ for (const [key, b] of entries) {
69
106
  if (b.value === undefined) {
70
- binder.bindNull(i + 1);
71
- return;
107
+ binder.bindNull(key);
108
+ continue;
72
109
  }
73
110
  switch (b.type) {
74
111
  case "boolean":
75
- binder.bindBoolean(i + 1, b.value);
112
+ binder.bindBoolean(key, b.value);
76
113
  break;
77
114
  case "double":
78
- binder.bindDouble(i + 1, b.value);
115
+ binder.bindDouble(key, b.value);
79
116
  break;
80
117
  case "id":
81
- binder.bindId(i + 1, b.value);
118
+ binder.bindId(key, b.value);
82
119
  break;
83
120
  case "idset":
84
- binder.bindIdSet(i + 1, OrderedId64Iterable.sortArray(b.value));
121
+ binder.bindIdSet(key, OrderedId64Iterable.sortArray(b.value));
85
122
  break;
86
123
  case "int":
87
- binder.bindInt(i + 1, b.value);
124
+ binder.bindInt(key, b.value);
88
125
  break;
89
126
  case "long":
90
- binder.bindLong(i + 1, b.value);
127
+ binder.bindLong(key, b.value);
91
128
  break;
92
129
  case "point2d":
93
- binder.bindPoint2d(i + 1, Point2d.fromJSON(b.value));
130
+ binder.bindPoint2d(key, Point2d.fromJSON(b.value));
94
131
  break;
95
132
  case "point3d":
96
- binder.bindPoint3d(i + 1, Point3d.fromJSON(b.value));
133
+ binder.bindPoint3d(key, Point3d.fromJSON(b.value));
97
134
  break;
98
135
  case "string":
99
- binder.bindString(i + 1, b.value);
136
+ binder.bindString(key, b.value);
100
137
  break;
101
138
  }
102
- });
139
+ }
103
140
  return binder;
104
141
  }
105
142
  function addCTEs(ecsql, ctes) {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryExecutor.js","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.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\nimport { OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { trimWhitespace } from \"@itwin/presentation-shared\";\n\nimport type { ECSqlReader, QueryOptions } from \"@itwin/core-common\";\nimport type {\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n} from \"@itwin/presentation-shared\";\n\n/**\n * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)\n * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n * @public\n */\ninterface CoreECSqlReaderFactory {\n createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): ECSqlReader;\n}\n\n/**\n * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or\n * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n *\n * Usage example:\n *\n * ```ts\n * import { IModelDb } from \"@itwin/core-backend\";\n * import { createECSqlQueryExecutor } from \"@itwin/presentation-core-interop\";\n *\n * const imodel: IModelDb = getIModelDb();\n * const executor = createECSqlQueryExecutor(imodel);\n * for await (const row of executor.createQueryReader(MY_QUERY)) {\n * // TODO: do something with `row`\n * }\n * ```\n *\n * @public\n */\nexport function createECSqlQueryExecutor(imodel: CoreECSqlReaderFactory): ECSqlQueryExecutor {\n return {\n createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions) {\n const { ctes, ecsql, bindings } = query;\n const opts = new QueryOptionsBuilder();\n switch (config?.rowFormat) {\n case \"ECSqlPropertyNames\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n break;\n case \"Indexes\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes);\n break;\n }\n if (config?.restartToken) {\n opts.setRestartToken(config.restartToken);\n }\n return new ECSqlQueryReaderImpl(\n imodel.createQueryReader(trimWhitespace(addCTEs(ecsql, ctes)), bind(bindings ?? []), opts.getOptions()),\n config?.rowFormat === \"Indexes\" ? \"array\" : \"object\",\n );\n },\n };\n}\n\nclass ECSqlQueryReaderImpl implements ReturnType<ECSqlQueryExecutor[\"createQueryReader\"]> {\n public constructor(\n private _coreReader: ECSqlReader,\n private _format: \"array\" | \"object\",\n ) {}\n public [Symbol.asyncIterator](): AsyncIterableIterator<ECSqlQueryRow> {\n return this;\n }\n public async next(): Promise<IteratorResult<ECSqlQueryRow>> {\n const res = await this._coreReader.next();\n if (res.done) {\n return { done: true, value: undefined };\n }\n return { done: false, value: this._format === \"array\" ? res.value.toArray() : res.value.toRow() };\n }\n}\n\nfunction bind(bindings: ECSqlBinding[]): QueryBinder {\n const binder = new QueryBinder();\n bindings.forEach((b, i) => {\n if (b.value === undefined) {\n binder.bindNull(i + 1);\n return;\n }\n switch (b.type) {\n case \"boolean\":\n binder.bindBoolean(i + 1, b.value);\n break;\n case \"double\":\n binder.bindDouble(i + 1, b.value);\n break;\n case \"id\":\n binder.bindId(i + 1, b.value);\n break;\n case \"idset\":\n binder.bindIdSet(i + 1, OrderedId64Iterable.sortArray(b.value));\n break;\n case \"int\":\n binder.bindInt(i + 1, b.value);\n break;\n case \"long\":\n binder.bindLong(i + 1, b.value);\n break;\n case \"point2d\":\n binder.bindPoint2d(i + 1, Point2d.fromJSON(b.value));\n break;\n case \"point3d\":\n binder.bindPoint3d(i + 1, Point3d.fromJSON(b.value));\n break;\n case \"string\":\n binder.bindString(i + 1, b.value);\n break;\n }\n });\n return binder;\n}\n\nfunction addCTEs(ecsql: string, ctes: string[] | undefined) {\n const ctesPrefix = ctes?.length ? `WITH RECURSIVE ${ctes.join(\", \")} ` : \"\";\n return `${ctesPrefix}${ecsql}`;\n}\n"]}
1
+ {"version":3,"file":"QueryExecutor.js","sourceRoot":"","sources":["../../../src/core-interop/QueryExecutor.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\nimport { Guid, OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { trimWhitespace } from \"@itwin/presentation-shared\";\n\nimport type { QueryOptions, QueryRowProxy } from \"@itwin/core-common\";\nimport type {\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n} from \"@itwin/presentation-shared\";\n\nexport const QUERY_CANCEL_DELAY_MS = 100;\n\n/**\n * Defines input for `createECSqlQueryExecutor`. Generally, this is an instance of either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/)\n * or [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n * @public\n */\ninterface CoreECSqlReaderFactory {\n createQueryReader(ecsql: string, binder?: QueryBinder, options?: QueryOptions): AsyncIterableIterator<QueryRowProxy>;\n}\n\n/**\n * Creates an `ECSqlQueryExecutor` from either [IModelDb](https://www.itwinjs.org/reference/core-backend/imodels/imodeldb/) or\n * [IModelConnection](https://www.itwinjs.org/reference/core-frontend/imodelconnection/imodelconnection/).\n *\n * Usage example:\n *\n * ```ts\n * import { IModelDb } from \"@itwin/core-backend\";\n * import { createECSqlQueryExecutor } from \"@itwin/presentation-core-interop\";\n *\n * const imodel: IModelDb = getIModelDb();\n * const executor = createECSqlQueryExecutor(imodel);\n * for await (const row of executor.createQueryReader(MY_QUERY)) {\n * // TODO: do something with `row`\n * }\n * ```\n *\n * @public\n */\nexport function createECSqlQueryExecutor(imodel: CoreECSqlReaderFactory): ECSqlQueryExecutor {\n return {\n createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions) {\n const { ctes, ecsql, bindings } = query;\n const opts = new QueryOptionsBuilder();\n switch (config?.rowFormat) {\n case \"ECSqlPropertyNames\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n break;\n case \"Indexes\":\n opts.setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes);\n break;\n }\n const restartToken = config?.restartToken ?? Guid.createValue();\n opts.setRestartToken(restartToken);\n const onCancel = () => {\n try {\n const cancelReader = imodel.createQueryReader(\n \"SELECT 1\",\n undefined,\n new QueryOptionsBuilder().setRestartToken(restartToken).getOptions(),\n );\n void (async () => {\n try {\n for await (const _ of cancelReader) {\n /* drain */\n }\n } catch {\n /* expected */\n }\n })();\n } catch {\n /* ignore */\n }\n };\n return new ECSqlQueryReaderImpl(\n imodel.createQueryReader(\n trimWhitespace(addCTEs(ecsql, ctes)),\n bindings ? bind(bindings) : undefined,\n opts.getOptions(),\n ),\n config?.rowFormat === \"Indexes\" ? \"array\" : \"object\",\n onCancel,\n );\n },\n };\n}\n\nclass ECSqlQueryReaderImpl implements ReturnType<ECSqlQueryExecutor[\"createQueryReader\"]> {\n private _cancelTimer: ReturnType<typeof setTimeout> | undefined;\n\n public constructor(\n private _coreReader: AsyncIterableIterator<QueryRowProxy>,\n private _format: \"array\" | \"object\",\n private _onCancel: () => void,\n ) {}\n\n public [Symbol.asyncIterator](): AsyncIterableIterator<ECSqlQueryRow> {\n return this;\n }\n\n public async next(): Promise<IteratorResult<ECSqlQueryRow>> {\n const res = await this._coreReader.next();\n if (res.done) {\n if (this._cancelTimer) {\n clearTimeout(this._cancelTimer);\n this._cancelTimer = undefined;\n }\n return { done: true, value: undefined };\n }\n return { done: false, value: this._format === \"array\" ? res.value.toArray() : res.value.toRow() };\n }\n\n public async return(): Promise<IteratorResult<ECSqlQueryRow>> {\n if (this._coreReader.return) {\n await this._coreReader.return();\n } else {\n this._cancelTimer = setTimeout(() => this._onCancel(), QUERY_CANCEL_DELAY_MS);\n }\n return { done: true, value: undefined };\n }\n}\n\nfunction bind(bindings: ECSqlBinding[] | Record<string, ECSqlBinding>): QueryBinder {\n const binder = new QueryBinder();\n const entries: Array<[string | number, ECSqlBinding]> = Array.isArray(bindings)\n ? bindings.map((b, i) => [i + 1, b])\n : Object.entries(bindings);\n for (const [key, b] of entries) {\n if (b.value === undefined) {\n binder.bindNull(key);\n continue;\n }\n switch (b.type) {\n case \"boolean\":\n binder.bindBoolean(key, b.value);\n break;\n case \"double\":\n binder.bindDouble(key, b.value);\n break;\n case \"id\":\n binder.bindId(key, b.value);\n break;\n case \"idset\":\n binder.bindIdSet(key, OrderedId64Iterable.sortArray(b.value));\n break;\n case \"int\":\n binder.bindInt(key, b.value);\n break;\n case \"long\":\n binder.bindLong(key, b.value);\n break;\n case \"point2d\":\n binder.bindPoint2d(key, Point2d.fromJSON(b.value));\n break;\n case \"point3d\":\n binder.bindPoint3d(key, Point3d.fromJSON(b.value));\n break;\n case \"string\":\n binder.bindString(key, b.value);\n break;\n }\n }\n return binder;\n}\n\nfunction addCTEs(ecsql: string, ctes: string[] | undefined) {\n const ctesPrefix = ctes?.length ? `WITH RECURSIVE ${ctes.join(\", \")} ` : \"\";\n return `${ctesPrefix}${ecsql}`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/presentation-core-interop",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0-alpha.2",
4
4
  "description": "The package acts as a layer between iTwin.js Core and Presentation packages.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "rxjs": "^7.8.2",
34
- "@itwin/presentation-shared": "2.0.0-alpha.10"
34
+ "@itwin/presentation-shared": "2.0.0-alpha.11"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "@itwin/core-bentley": "^5.0.0",
@@ -41,20 +41,20 @@
41
41
  "@itwin/ecschema-metadata": "^5.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@itwin/build-tools": "^5.8.0",
45
- "@itwin/core-bentley": "^5.8.0",
46
- "@itwin/core-common": "^5.8.0",
47
- "@itwin/core-geometry": "^5.8.0",
48
- "@itwin/core-quantity": "^5.8.0",
49
- "@itwin/ecschema-metadata": "^5.8.0",
50
- "@itwin/eslint-plugin": "5.1.0",
51
- "@vitest/coverage-v8": "^4.1.3",
44
+ "@itwin/build-tools": "^5.10.0",
45
+ "@itwin/core-bentley": "^5.10.0",
46
+ "@itwin/core-common": "^5.10.0",
47
+ "@itwin/core-geometry": "^5.10.0",
48
+ "@itwin/core-quantity": "^5.10.0",
49
+ "@itwin/ecschema-metadata": "^5.10.0",
50
+ "@itwin/eslint-plugin": "^6.1.0",
51
+ "@vitest/coverage-v8": "^4.1.8",
52
52
  "cpx2": "^7.0.2",
53
53
  "eslint": "^9.39.4",
54
54
  "rimraf": "^6.1.3",
55
55
  "rxjs-for-await": "^1.0.0",
56
- "typescript": "~5.7.3",
57
- "vitest": "^4.1.3"
56
+ "typescript": "~6.0.3",
57
+ "vitest": "^4.1.8"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "npm run -s typecheck && npm run -s build:cjs && npm run -s build:esm",