@itwin/presentation-core-interop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.mocharc.json +8 -0
  2. package/.nycrc +14 -0
  3. package/CHANGELOG.md +12 -0
  4. package/LICENSE.md +9 -0
  5. package/README.md +99 -0
  6. package/api/presentation-core-interop.api.md +38 -0
  7. package/api/presentation-core-interop.exports.csv +7 -0
  8. package/eslint.config.js +14 -0
  9. package/lib/cjs/core-interop/Formatting.d.ts +44 -0
  10. package/lib/cjs/core-interop/Formatting.d.ts.map +1 -0
  11. package/lib/cjs/core-interop/Formatting.js +147 -0
  12. package/lib/cjs/core-interop/Formatting.js.map +1 -0
  13. package/lib/cjs/core-interop/Logging.d.ts +32 -0
  14. package/lib/cjs/core-interop/Logging.d.ts.map +1 -0
  15. package/lib/cjs/core-interop/Logging.js +47 -0
  16. package/lib/cjs/core-interop/Logging.js.map +1 -0
  17. package/lib/cjs/core-interop/Metadata.d.ts +28 -0
  18. package/lib/cjs/core-interop/Metadata.d.ts.map +1 -0
  19. package/lib/cjs/core-interop/Metadata.js +51 -0
  20. package/lib/cjs/core-interop/Metadata.js.map +1 -0
  21. package/lib/cjs/core-interop/MetadataInternal.d.ts +9 -0
  22. package/lib/cjs/core-interop/MetadataInternal.d.ts.map +1 -0
  23. package/lib/cjs/core-interop/MetadataInternal.js +370 -0
  24. package/lib/cjs/core-interop/MetadataInternal.js.map +1 -0
  25. package/lib/cjs/core-interop/QueryExecutor.d.ts +31 -0
  26. package/lib/cjs/core-interop/QueryExecutor.d.ts.map +1 -0
  27. package/lib/cjs/core-interop/QueryExecutor.js +112 -0
  28. package/lib/cjs/core-interop/QueryExecutor.js.map +1 -0
  29. package/lib/cjs/core-interop/Transactions.d.ts +70 -0
  30. package/lib/cjs/core-interop/Transactions.d.ts.map +1 -0
  31. package/lib/cjs/core-interop/Transactions.js +61 -0
  32. package/lib/cjs/core-interop/Transactions.js.map +1 -0
  33. package/lib/cjs/presentation-core-interop.d.ts +6 -0
  34. package/lib/cjs/presentation-core-interop.d.ts.map +1 -0
  35. package/lib/cjs/presentation-core-interop.js +18 -0
  36. package/lib/cjs/presentation-core-interop.js.map +1 -0
  37. package/lib/cjs/test/Formatting.test.d.ts +2 -0
  38. package/lib/cjs/test/Formatting.test.d.ts.map +1 -0
  39. package/lib/cjs/test/Formatting.test.js +282 -0
  40. package/lib/cjs/test/Formatting.test.js.map +1 -0
  41. package/lib/cjs/test/Logging.test.d.ts +2 -0
  42. package/lib/cjs/test/Logging.test.d.ts.map +1 -0
  43. package/lib/cjs/test/Logging.test.js +57 -0
  44. package/lib/cjs/test/Logging.test.js.map +1 -0
  45. package/lib/cjs/test/Metadata.test.d.ts +2 -0
  46. package/lib/cjs/test/Metadata.test.d.ts.map +1 -0
  47. package/lib/cjs/test/Metadata.test.js +676 -0
  48. package/lib/cjs/test/Metadata.test.js.map +1 -0
  49. package/lib/cjs/test/QueryExecutor.test.d.ts +2 -0
  50. package/lib/cjs/test/QueryExecutor.test.d.ts.map +1 -0
  51. package/lib/cjs/test/QueryExecutor.test.js +178 -0
  52. package/lib/cjs/test/QueryExecutor.test.js.map +1 -0
  53. package/lib/cjs/test/Transactions.test.d.ts +2 -0
  54. package/lib/cjs/test/Transactions.test.d.ts.map +1 -0
  55. package/lib/cjs/test/Transactions.test.js +73 -0
  56. package/lib/cjs/test/Transactions.test.js.map +1 -0
  57. package/lib/cjs/test/index.d.ts +2 -0
  58. package/lib/cjs/test/index.d.ts.map +1 -0
  59. package/lib/cjs/test/index.js +43 -0
  60. package/lib/cjs/test/index.js.map +1 -0
  61. package/lib/esm/core-interop/Formatting.d.ts +44 -0
  62. package/lib/esm/core-interop/Formatting.d.ts.map +1 -0
  63. package/lib/esm/core-interop/Formatting.js +143 -0
  64. package/lib/esm/core-interop/Formatting.js.map +1 -0
  65. package/lib/esm/core-interop/Logging.d.ts +32 -0
  66. package/lib/esm/core-interop/Logging.d.ts.map +1 -0
  67. package/lib/esm/core-interop/Logging.js +43 -0
  68. package/lib/esm/core-interop/Logging.js.map +1 -0
  69. package/lib/esm/core-interop/Metadata.d.ts +28 -0
  70. package/lib/esm/core-interop/Metadata.d.ts.map +1 -0
  71. package/lib/esm/core-interop/Metadata.js +47 -0
  72. package/lib/esm/core-interop/Metadata.js.map +1 -0
  73. package/lib/esm/core-interop/MetadataInternal.d.ts +9 -0
  74. package/lib/esm/core-interop/MetadataInternal.d.ts.map +1 -0
  75. package/lib/esm/core-interop/MetadataInternal.js +364 -0
  76. package/lib/esm/core-interop/MetadataInternal.js.map +1 -0
  77. package/lib/esm/core-interop/QueryExecutor.d.ts +31 -0
  78. package/lib/esm/core-interop/QueryExecutor.d.ts.map +1 -0
  79. package/lib/esm/core-interop/QueryExecutor.js +108 -0
  80. package/lib/esm/core-interop/QueryExecutor.js.map +1 -0
  81. package/lib/esm/core-interop/Transactions.d.ts +70 -0
  82. package/lib/esm/core-interop/Transactions.d.ts.map +1 -0
  83. package/lib/esm/core-interop/Transactions.js +57 -0
  84. package/lib/esm/core-interop/Transactions.js.map +1 -0
  85. package/lib/esm/presentation-core-interop.d.ts +6 -0
  86. package/lib/esm/presentation-core-interop.d.ts.map +1 -0
  87. package/lib/esm/presentation-core-interop.js +10 -0
  88. package/lib/esm/presentation-core-interop.js.map +1 -0
  89. package/lib/esm/test/Formatting.test.d.ts +2 -0
  90. package/lib/esm/test/Formatting.test.d.ts.map +1 -0
  91. package/lib/esm/test/Formatting.test.js +277 -0
  92. package/lib/esm/test/Formatting.test.js.map +1 -0
  93. package/lib/esm/test/Logging.test.d.ts +2 -0
  94. package/lib/esm/test/Logging.test.d.ts.map +1 -0
  95. package/lib/esm/test/Logging.test.js +52 -0
  96. package/lib/esm/test/Logging.test.js.map +1 -0
  97. package/lib/esm/test/Metadata.test.d.ts +2 -0
  98. package/lib/esm/test/Metadata.test.d.ts.map +1 -0
  99. package/lib/esm/test/Metadata.test.js +671 -0
  100. package/lib/esm/test/Metadata.test.js.map +1 -0
  101. package/lib/esm/test/QueryExecutor.test.d.ts +2 -0
  102. package/lib/esm/test/QueryExecutor.test.d.ts.map +1 -0
  103. package/lib/esm/test/QueryExecutor.test.js +173 -0
  104. package/lib/esm/test/QueryExecutor.test.js.map +1 -0
  105. package/lib/esm/test/Transactions.test.d.ts +2 -0
  106. package/lib/esm/test/Transactions.test.d.ts.map +1 -0
  107. package/lib/esm/test/Transactions.test.js +68 -0
  108. package/lib/esm/test/Transactions.test.js.map +1 -0
  109. package/lib/esm/test/index.d.ts +2 -0
  110. package/lib/esm/test/index.d.ts.map +1 -0
  111. package/lib/esm/test/index.js +15 -0
  112. package/lib/esm/test/index.js.map +1 -0
  113. package/package.json +72 -0
  114. package/src/core-interop/Formatting.ts +194 -0
  115. package/src/core-interop/Logging.ts +58 -0
  116. package/src/core-interop/Metadata.ts +56 -0
  117. package/src/core-interop/MetadataInternal.ts +413 -0
  118. package/src/core-interop/QueryExecutor.ts +122 -0
  119. package/src/core-interop/Transactions.ts +92 -0
  120. package/src/presentation-core-interop.ts +10 -0
  121. package/src/test/Formatting.test.ts +358 -0
  122. package/src/test/Logging.test.ts +59 -0
  123. package/src/test/Metadata.test.ts +776 -0
  124. package/src/test/QueryExecutor.test.ts +217 -0
  125. package/src/test/Transactions.test.ts +74 -0
  126. package/src/test/index.ts +17 -0
  127. package/tsconfig.cjs.json +7 -0
  128. package/tsconfig.esm.json +7 -0
  129. package/tsconfig.json +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Metadata.test.js","sourceRoot":"","sources":["../../../src/test/Metadata.test.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 { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n ECClass as CoreClass,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n Enumerator as CoreEnumerator,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Schema as CoreSchema,\n StructArrayProperty as CoreStructArrayProperty,\n StructProperty as CoreStructProperty,\n PrimitiveType,\n RelationshipMultiplicity,\n SchemaContext,\n SchemaItemType,\n SchemaKey,\n StrengthDirection,\n} from \"@itwin/ecschema-metadata\";\nimport { EC } from \"@itwin/presentation-shared\";\nimport { createECSchemaProvider } from \"../core-interop/Metadata\";\nimport { createECClass, createECProperty, createECSchema } from \"../core-interop/MetadataInternal\";\n\ndescribe(\"createECSchemaProvider\", () => {\n describe(\"getSchema\", () => {\n it(\"returns schema from schema context\", async () => {\n const matchSchemaName = sinon.match((key: SchemaKey) => key.compareByName(\"x\"));\n const schemaContext = {\n getSchema: sinon\n .stub<[SchemaKey], CoreSchema>()\n .withArgs(matchSchemaName)\n .resolves({\n name: \"y\",\n } as unknown as CoreSchema),\n };\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n const schema = await provider.getSchema(\"x\");\n assert(schema !== undefined);\n\n expect(schemaContext.getSchema).to.be.calledOnceWith(matchSchemaName);\n expect(schema.name).to.eq(\"y\");\n expect(typeof schema.getClass === \"function\").to.be.true;\n });\n\n // a test for our workaround for https://github.com/iTwin/itwinjs-core/issues/6542\n it(\"handles duplicate schema in cache error\", async () => {\n const schemaContext = {\n getSchema: sinon.stub<[SchemaKey], CoreSchema>(),\n };\n schemaContext.getSchema.onFirstCall().resolves({ name: \"x\" });\n schemaContext.getSchema.onSecondCall().rejects(new Error(\"The schema, x.01.02.03, already exists within this cache\"));\n schemaContext.getSchema.onThirdCall().resolves({ name: \"x\" });\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n await Promise.all([provider.getSchema(\"x\"), provider.getSchema(\"x\")]);\n\n expect(schemaContext.getSchema).to.be.calledThrice;\n });\n\n it(\"re-throws SchemaContext errors\", async () => {\n const schemaContext = {\n getSchema: sinon.stub<[SchemaKey], CoreSchema>(),\n };\n schemaContext.getSchema.rejects(new Error(\"Unknown error\"));\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n await expect(provider.getSchema(\"x\")).to.eventually.be.rejected;\n expect(schemaContext.getSchema).to.be.calledOnce;\n });\n\n it(\"returns undefined from schema context\", async () => {\n const matchSchemaName = sinon.match((key: SchemaKey) => key.compareByName(\"x\"));\n const schemaContext = {\n getSchema: sinon.stub().resolves(undefined),\n };\n\n const provider = createECSchemaProvider(schemaContext);\n const schema = await provider.getSchema(\"x\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(schemaContext.getSchema).to.be.calledOnceWith(matchSchemaName);\n expect(schema).to.be.undefined;\n });\n });\n});\n\ndescribe(\"createECSchema\", () => {\n describe(\"getClass\", () => {\n it(\"returns class from core schema\", async () => {\n const coreSchema = {\n name: \"s\",\n getItem: sinon.stub().resolves({\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.EntityClass,\n }),\n } as unknown as CoreSchema;\n\n const schema = createECSchema(coreSchema);\n const result = await schema.getClass(\"c\");\n assert(result !== undefined);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreSchema.getItem).to.be.calledOnceWith(\"c\");\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"returns undefined from core schema\", async () => {\n const coreSchema = {\n name: \"s\",\n getItem: sinon.stub().resolves(undefined),\n } as unknown as CoreSchema;\n\n const schema = createECSchema(coreSchema);\n const result = await schema.getClass(\"c\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreSchema.getItem).to.be.calledOnceWith(\"c\");\n expect(result).to.be.undefined;\n });\n });\n});\n\ndescribe(\"createECClass\", () => {\n const schema: EC.Schema = {\n name: \"s\",\n async getClass() {\n return undefined;\n },\n };\n\n it(\"creates class using schema from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schema: { name: \"core-schema\" },\n } as unknown as CoreClass;\n const result = createECClass(coreClass);\n expect(result.schema.name).to.eq(\"core-schema\");\n });\n\n it(\"creates entity class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.EntityClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.true;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates relationship class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.RelationshipClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.true;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates struct class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.StructClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.true;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates mixin from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.Mixin,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.true;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"throws when creating class from non-class core schema item\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.Constant,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n } as unknown as CoreClass;\n expect(() => createECClass(coreClass, schema)).to.throw();\n });\n\n describe(\"is\", () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n is: sinon.stub().resolves(true),\n };\n\n beforeEach(() => {\n coreClass.is.resetHistory();\n });\n\n it(\"handles CoreClass override\", async () => {\n const class1 = createECClass(coreClass as unknown as CoreClass, schema);\n const class2 = createECClass(\n {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c2\",\n name: \"c2\",\n label: \"C2\",\n } as unknown as CoreClass,\n schema,\n );\n const result = await class1.is(class2);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.is).to.be.calledOnceWithExactly(\"c2\", \"s\");\n expect(result).to.be.true;\n });\n\n it(\"handles class and schema names override\", async () => {\n const class1 = createECClass(coreClass as unknown as CoreClass, schema);\n const result = await class1.is(\"a\", \"b\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.is).to.be.calledOnceWithExactly(\"a\", \"b\");\n expect(result).to.be.true;\n });\n });\n\n describe(\"getProperties\", () => {\n it(\"returns properties from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperties: sinon.stub().resolves([\n {\n isArray: () => false,\n isStruct: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => true,\n },\n ]),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const properties = await ecClass.getProperties();\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperties).to.be.calledOnce;\n expect(properties).to.not.be.empty;\n });\n });\n\n describe(\"getProperty\", () => {\n it(\"returns property from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperty: sinon.stub().resolves({\n isArray: () => false,\n isStruct: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => true,\n }),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const prop = await ecClass.getProperty(\"p\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperty).to.be.calledOnceWith(\"p\", true);\n expect(prop).to.not.be.undefined;\n });\n\n it(\"returns undefined from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperty: sinon.stub().resolves(undefined),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const prop = await ecClass.getProperty(\"p\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperty).to.be.calledOnceWith(\"p\", true);\n expect(prop).to.be.undefined;\n });\n });\n\n describe(\"Relationship class\", () => {\n const coreRelationshipClass = {\n schemaItemType: SchemaItemType.RelationshipClass,\n fullName: \"Schema.TestRelationship\",\n name: \"TestRelationship\",\n label: \"Test relationship\",\n };\n\n describe(\"direction\", () => {\n it(\"returns forward direction from core relationship\", async () => {\n const rel = createECClass(\n { ...coreRelationshipClass, strengthDirection: StrengthDirection.Forward } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.direction).to.eq(\"Forward\");\n });\n\n it(\"returns backward direction from core relationship\", async () => {\n const rel = createECClass(\n { ...coreRelationshipClass, strengthDirection: StrengthDirection.Backward } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.direction).to.eq(\"Backward\");\n });\n });\n\n describe(\"source & target\", () => {\n it(\"returns source constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, source: {} } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.source).to.not.be.undefined;\n });\n\n it(\"returns target constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, target: {} } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.target).to.not.be.undefined;\n });\n\n describe(\"ECRelationshipConstraint implementation\", () => {\n it(\"returns undefined multiplicity from core constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, source: { multiplicity: undefined } } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.source.multiplicity).to.be.undefined;\n });\n\n it(\"returns multiplicity from core constraint\", () => {\n const rel = createECClass(\n { ...coreRelationshipClass, source: { multiplicity: new RelationshipMultiplicity(123, 456) } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.source.multiplicity).to.deep.eq({ lowerLimit: 123, upperLimit: 456 });\n });\n\n it(\"returns polymorphic flag from core constraint\", () => {\n [\n { in: undefined, expectation: false },\n { in: false, expectation: false },\n { in: true, expectation: true },\n ].forEach((testEntry) => {\n const rel = createECClass(\n { ...coreRelationshipClass, source: { polymorphic: testEntry.in } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.source.polymorphic).to.eq(testEntry.expectation);\n });\n });\n\n it(\"returns abstract constraint from core constraint\", async () => {\n const coreAbstractConstraint = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"Schema.TestAbstractConstraint\",\n name: \"TestAbstractConstraint\",\n label: \"Test abstract constraint\",\n } as unknown as CoreClass;\n const rel = createECClass(\n { ...coreRelationshipClass, source: { abstractConstraint: Promise.resolve(coreAbstractConstraint) } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n const constraint = (await rel.source.abstractConstraint)!;\n expect(constraint.isEntityClass()).to.be.true;\n expect(constraint.fullName).to.eq(coreAbstractConstraint.fullName);\n });\n });\n });\n });\n});\n\ndescribe(\"createECProperty\", () => {\n const propertyClass: EC.Class = {} as unknown as EC.Class;\n const propertyStub = {\n isArray: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => false,\n isStruct: () => false,\n fullName: \"\",\n name: \"\",\n };\n\n describe(\"Primitive property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n label: \"Test property\",\n extendedTypeName: \"extended\",\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.true;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.extendedTypeName).to.eq(coreProperty.extendedTypeName);\n });\n\n it(\"maps primitive types\", async () => {\n const types: [PrimitiveType, EC.PrimitiveType][] = [\n [PrimitiveType.Binary, \"Binary\"],\n [PrimitiveType.Boolean, \"Boolean\"],\n [PrimitiveType.DateTime, \"DateTime\"],\n [PrimitiveType.Double, \"Double\"],\n [PrimitiveType.IGeometry, \"IGeometry\"],\n [PrimitiveType.Integer, \"Integer\"],\n [PrimitiveType.Long, \"Long\"],\n [PrimitiveType.Point2d, \"Point2d\"],\n [PrimitiveType.Point3d, \"Point3d\"],\n [PrimitiveType.String, \"String\"],\n ];\n types.forEach(([coreType, expectation]) => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n primitiveType: coreType,\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n expect(property.primitiveType).to.eq(expectation);\n });\n\n const uninitializedTypes = [undefined, PrimitiveType.Uninitialized];\n uninitializedTypes.forEach((coreType) => {\n const uninitializedProperty = createECProperty(\n {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n primitiveType: coreType,\n } as unknown as CorePrimitiveProperty,\n propertyClass,\n ) as EC.PrimitiveProperty;\n expect(() => uninitializedProperty.primitiveType).to.throw();\n });\n });\n\n it(\"maps kind of quantity\", async () => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n kindOfQuantity: Promise.resolve({\n fullName: \"SchemaName.TestKoq\",\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n const koq = (await property.kindOfQuantity)!;\n expect(koq.fullName).to.eq(\"SchemaName.TestKoq\");\n\n expect(await createECProperty({ ...coreProperty, kindOfQuantity: undefined } as CorePrimitiveProperty, propertyClass).kindOfQuantity).to.be.undefined;\n });\n });\n\n describe(\"Navigation property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n label: \"Test property\",\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.true;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n });\n\n it(\"maps direction\", async () => {\n const map = [\n [StrengthDirection.Backward, \"Backward\"],\n [StrengthDirection.Forward, \"Forward\"],\n ];\n map.forEach(([coreDirection, expectation]) => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n direction: coreDirection,\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n expect(property.direction).to.eq(expectation);\n });\n });\n\n it(\"returns relationship class\", async () => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n relationshipClass: Promise.resolve({\n fullName: \"SchemaName.RelationshipClass\",\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n const relationshipClass = await property.relationshipClass;\n expect(relationshipClass.fullName).to.eq(\"SchemaName.RelationshipClass\");\n });\n });\n\n describe(\"Enumeration property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n label: \"Test property\",\n extendedTypeName: \"extended\",\n } as unknown as CoreEnumerationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.true;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.extendedTypeName).to.eq(coreProperty.extendedTypeName);\n });\n\n it(\"returns enumeration\", async () => {\n const coreProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n enumeration: Promise.resolve({\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CoreEnumerationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationProperty;\n expect(await property.enumeration).to.not.be.undefined;\n });\n\n describe(\"ECEnumeration implementation\", () => {\n const coreEnumeration = {\n schema: {\n name: \"SchemaName\",\n },\n isStrict: false,\n type: undefined,\n enumerators: new Array<CoreEnumerator<number>>(),\n };\n const coreEnumerationProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n enumeration: Promise.resolve(coreEnumeration),\n } as unknown as CoreEnumerationProperty;\n let property: EC.EnumerationProperty;\n\n beforeEach(async () => {\n property = createECProperty(coreEnumerationProperty, propertyClass) as EC.EnumerationProperty;\n });\n\n it(\"returns `isStrict` flag\", async () => {\n coreEnumeration.isStrict = true;\n const enumeration = (await property.enumeration)!;\n expect(enumeration.isStrict).to.be.true;\n });\n\n it(\"maps enumeration type\", async () => {\n const typesMap = [\n [PrimitiveType.String, \"String\"],\n [PrimitiveType.Integer, \"Number\"],\n [undefined, \"Number\"],\n ];\n const typeStub = sinon.stub(coreEnumeration, \"type\");\n for (const [coreType, expectation] of typesMap) {\n typeStub.reset();\n typeStub.get(() => coreType);\n const enumeration = (await property.enumeration)!;\n expect(enumeration.type).to.eq(expectation);\n }\n });\n\n it(\"returns enumerators\", async () => {\n coreEnumeration.enumerators = [\n { name: \"1\", value: 1, label: \"One\", description: \"Test one\" },\n { name: \"2\", value: 2 },\n ];\n const enumeration = (await property.enumeration)!;\n expect(enumeration.enumerators).to.deep.eq(coreEnumeration.enumerators);\n });\n });\n });\n\n describe(\"Struct property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isStruct: () => true,\n name: \"test-property\",\n label: \"Test property\",\n } as unknown as CoreStructProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.true;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n });\n\n it(\"returns struct class\", async () => {\n const coreProperty = {\n ...propertyStub,\n isStruct: () => true,\n name: \"test-property\",\n structClass: {\n fullName: \"SchemaName.StructClass\",\n schema: {\n name: \"SchemaName\",\n },\n },\n } as unknown as CoreStructProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructProperty;\n expect(property.structClass.fullName).to.eq(\"SchemaName.StructClass\");\n });\n });\n\n describe(\"Array property\", () => {\n it(\"creates primitive array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isPrimitive: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CorePrimitiveArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.true;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n\n it(\"creates enumeration array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isEnumeration: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CoreEnumerationArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.true;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n\n it(\"creates struct array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isStruct: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CoreStructArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.true;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n });\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=QueryExecutor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryExecutor.test.d.ts","sourceRoot":"","sources":["../../../src/test/QueryExecutor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { expect } from "chai";
6
+ import sinon from "sinon";
7
+ import { QueryBinder, QueryRowFormat } from "@itwin/core-common";
8
+ import { Point2d, Point3d } from "@itwin/core-geometry";
9
+ import { createECSqlQueryExecutor } from "../core-interop/QueryExecutor";
10
+ describe("createECSqlQueryExecutor", () => {
11
+ describe("createQueryReader", () => {
12
+ it("calls IModel's `createQueryReader` with default params", async () => {
13
+ const imodel = {
14
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),
15
+ };
16
+ const executor = createECSqlQueryExecutor(imodel);
17
+ const reader = executor.createQueryReader({ ecsql: "ecsql" });
18
+ for await (const _ of reader) {
19
+ }
20
+ // eslint-disable-next-line @typescript-eslint/unbound-method
21
+ expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => Object.keys(options).length === 0));
22
+ });
23
+ it("calls IModel's `createQueryReader` with CTEs", async () => {
24
+ const imodel = {
25
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),
26
+ };
27
+ const executor = createECSqlQueryExecutor(imodel);
28
+ const reader = executor.createQueryReader({ ctes: ["cte1", "cte2"], ecsql: "ecsql" });
29
+ for await (const _ of reader) {
30
+ }
31
+ // eslint-disable-next-line @typescript-eslint/unbound-method
32
+ expect(imodel.createQueryReader).to.be.calledOnceWith("WITH RECURSIVE cte1, cte2 ecsql");
33
+ });
34
+ it("calls IModel's `createQueryReader` with `ECSqlPropertyNames` row format", async () => {
35
+ const imodel = {
36
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
37
+ };
38
+ const executor = createECSqlQueryExecutor(imodel);
39
+ const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "ECSqlPropertyNames" });
40
+ for await (const _ of reader) {
41
+ }
42
+ // eslint-disable-next-line @typescript-eslint/unbound-method
43
+ expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => options.rowFormat === QueryRowFormat.UseECSqlPropertyNames));
44
+ });
45
+ it("calls IModel's `createQueryReader` with `Indexes` row format", async () => {
46
+ const imodel = {
47
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
48
+ };
49
+ const executor = createECSqlQueryExecutor(imodel);
50
+ const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "Indexes" });
51
+ for await (const _ of reader) {
52
+ }
53
+ // eslint-disable-next-line @typescript-eslint/unbound-method
54
+ expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes));
55
+ });
56
+ it("calls IModel's `createQueryReader` with different bindings", async () => {
57
+ const imodel = {
58
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
59
+ };
60
+ const bindings = [
61
+ {
62
+ type: "boolean",
63
+ value: true,
64
+ },
65
+ {
66
+ type: "double",
67
+ value: 1.23,
68
+ },
69
+ {
70
+ type: "id",
71
+ value: "0x123",
72
+ },
73
+ {
74
+ type: "idset",
75
+ value: ["0x123", "0x456"],
76
+ },
77
+ {
78
+ type: "int",
79
+ value: 123,
80
+ },
81
+ { type: "long", value: 456 },
82
+ {
83
+ type: "point2d",
84
+ value: { x: 1.23, y: 4.56 },
85
+ },
86
+ {
87
+ type: "point3d",
88
+ value: { x: 1.23, y: 4.56, z: 7.89 },
89
+ },
90
+ {
91
+ type: "string",
92
+ value: "xxx",
93
+ },
94
+ {
95
+ type: "string",
96
+ value: undefined,
97
+ },
98
+ ];
99
+ const expectedBinder = new QueryBinder();
100
+ expectedBinder.bindBoolean(1, true);
101
+ expectedBinder.bindDouble(2, 1.23);
102
+ expectedBinder.bindId(3, "0x123");
103
+ expectedBinder.bindIdSet(4, ["0x123", "0x456"]);
104
+ expectedBinder.bindInt(5, 123);
105
+ expectedBinder.bindLong(6, 456);
106
+ expectedBinder.bindPoint2d(7, Point2d.create(1.23, 4.56));
107
+ expectedBinder.bindPoint3d(8, Point3d.create(1.23, 4.56, 7.89));
108
+ expectedBinder.bindString(9, "xxx");
109
+ expectedBinder.bindNull(10);
110
+ const executor = createECSqlQueryExecutor(imodel);
111
+ const reader = executor.createQueryReader({ ecsql: "ecsql", bindings }, undefined);
112
+ for await (const _ of reader) {
113
+ }
114
+ // eslint-disable-next-line @typescript-eslint/unbound-method
115
+ expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => JSON.stringify(expectedBinder.serialize()) === JSON.stringify(binder.serialize())), sinon.match((options) => Object.keys(options).length === 0));
116
+ });
117
+ it("creates iterable reader for rows as objects", async () => {
118
+ const rows = [{ x: 1 }, { y: 2 }];
119
+ const imodel = {
120
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),
121
+ };
122
+ const executor = createECSqlQueryExecutor(imodel);
123
+ const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "ECSqlPropertyNames" });
124
+ const resultRows = new Array();
125
+ for await (const row of reader) {
126
+ resultRows.push(row);
127
+ }
128
+ expect(resultRows).to.deep.eq(rows);
129
+ });
130
+ it("creates iterable reader for rows as arrays", async () => {
131
+ const rows = [
132
+ [1, 2],
133
+ [3, 4],
134
+ ];
135
+ const imodel = {
136
+ createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),
137
+ };
138
+ const executor = createECSqlQueryExecutor(imodel);
139
+ const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "Indexes" });
140
+ const resultRows = new Array();
141
+ for await (const row of reader) {
142
+ resultRows.push(row);
143
+ }
144
+ expect(resultRows).to.deep.eq(rows);
145
+ });
146
+ });
147
+ });
148
+ function createCoreECSqlReaderStub(rows) {
149
+ let curr = -1;
150
+ const reader = {
151
+ next: sinon.fake(async () => {
152
+ ++curr;
153
+ if (curr < rows.length) {
154
+ return { done: false, value: createQueryRowProxy(rows[curr]) };
155
+ }
156
+ return { done: true, value: undefined };
157
+ }),
158
+ };
159
+ return {
160
+ ...reader,
161
+ async *[Symbol.asyncIterator]() {
162
+ return reader;
163
+ },
164
+ };
165
+ }
166
+ function createQueryRowProxy(data) {
167
+ return {
168
+ ...data,
169
+ toArray: () => data,
170
+ toRow: () => data,
171
+ };
172
+ }
173
+ //# sourceMappingURL=QueryExecutor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryExecutor.test.js","sourceRoot":"","sources":["../../../src/test/QueryExecutor.test.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 { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { QueryBinder, QueryOptions, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { ECSqlBinding } from \"@itwin/presentation-shared\";\nimport { createECSqlQueryExecutor } from \"../core-interop/QueryExecutor\";\n\ndescribe(\"createECSqlQueryExecutor\", () => {\n describe(\"createQueryReader\", () => {\n it(\"calls IModel's `createQueryReader` with default params\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => Object.keys(options).length === 0),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with CTEs\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ctes: [\"cte1\", \"cte2\"], ecsql: \"ecsql\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWith(\"WITH RECURSIVE cte1, cte2 ecsql\");\n });\n\n it(\"calls IModel's `createQueryReader` with `ECSqlPropertyNames` row format\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"ECSqlPropertyNames\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => options.rowFormat === QueryRowFormat.UseECSqlPropertyNames),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with `Indexes` row format\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"Indexes\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with different bindings\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const bindings: ECSqlBinding[] = [\n {\n type: \"boolean\",\n value: true,\n },\n {\n type: \"double\",\n value: 1.23,\n },\n {\n type: \"id\",\n value: \"0x123\",\n },\n {\n type: \"idset\",\n value: [\"0x123\", \"0x456\"],\n },\n {\n type: \"int\",\n value: 123,\n },\n { type: \"long\", value: 456 },\n {\n type: \"point2d\",\n value: { x: 1.23, y: 4.56 },\n },\n {\n type: \"point3d\",\n value: { x: 1.23, y: 4.56, z: 7.89 },\n },\n {\n type: \"string\",\n value: \"xxx\",\n },\n {\n type: \"string\",\n value: undefined,\n },\n ];\n\n const expectedBinder = new QueryBinder();\n expectedBinder.bindBoolean(1, true);\n expectedBinder.bindDouble(2, 1.23);\n expectedBinder.bindId(3, \"0x123\");\n expectedBinder.bindIdSet(4, [\"0x123\", \"0x456\"]);\n expectedBinder.bindInt(5, 123);\n expectedBinder.bindLong(6, 456);\n expectedBinder.bindPoint2d(7, Point2d.create(1.23, 4.56));\n expectedBinder.bindPoint3d(8, Point3d.create(1.23, 4.56, 7.89));\n expectedBinder.bindString(9, \"xxx\");\n expectedBinder.bindNull(10);\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\", bindings }, undefined);\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => JSON.stringify(expectedBinder.serialize()) === JSON.stringify(binder.serialize())),\n sinon.match((options: QueryOptions) => Object.keys(options).length === 0),\n );\n });\n\n it(\"creates iterable reader for rows as objects\", async () => {\n const rows = [{ x: 1 }, { y: 2 }];\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"ECSqlPropertyNames\" });\n\n const resultRows = new Array<any>();\n for await (const row of reader) {\n resultRows.push(row);\n }\n\n expect(resultRows).to.deep.eq(rows);\n });\n\n it(\"creates iterable reader for rows as arrays\", async () => {\n const rows = [\n [1, 2],\n [3, 4],\n ];\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"Indexes\" });\n\n const resultRows = new Array<any>();\n for await (const row of reader) {\n resultRows.push(row);\n }\n\n expect(resultRows).to.deep.eq(rows);\n });\n });\n});\n\nfunction createCoreECSqlReaderStub(rows: object[]) {\n let curr = -1;\n const reader = {\n next: sinon.fake(async () => {\n ++curr;\n if (curr < rows.length) {\n return { done: false, value: createQueryRowProxy(rows[curr]) };\n }\n return { done: true, value: undefined };\n }),\n };\n return {\n ...reader,\n async *[Symbol.asyncIterator]() {\n return reader;\n },\n };\n}\n\nfunction createQueryRowProxy(data: object) {\n return {\n ...data,\n toArray: () => data,\n toRow: () => data,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Transactions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transactions.test.d.ts","sourceRoot":"","sources":["../../../src/test/Transactions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { expect } from "chai";
6
+ import sinon from "sinon";
7
+ import { registerTxnListeners } from "../core-interop/Transactions";
8
+ describe("registerTxnListeners", () => {
9
+ it("calls provided callback on `onAppliedChanges` event", async () => {
10
+ const txns = createCoreTxnManager();
11
+ const callback = sinon.stub();
12
+ registerTxnListeners(txns, callback);
13
+ expect(txns.onChangesApplied.addListener).to.be.calledOnce;
14
+ txns.onChangesApplied.addListener.firstCall.callArg(0);
15
+ expect(callback).to.be.calledOnce;
16
+ });
17
+ it("calls provided callback on `onCommit` and `onCommitted` event", async () => {
18
+ const txns = createCoreTxnManager();
19
+ const callback = sinon.stub();
20
+ registerTxnListeners(txns, callback);
21
+ expect(txns.onCommit.addListener).to.be.calledOnce;
22
+ expect(txns.onCommitted.addListener).to.be.calledOnce;
23
+ txns.onCommit.addListener.firstCall.callArg(0);
24
+ txns.onCommitted.addListener.firstCall.callArg(0);
25
+ expect(callback).to.be.calledOnce;
26
+ });
27
+ it("doesn't call provided callback on `onCommitted` event if there was no `onCommit` event", async () => {
28
+ const txns = createCoreTxnManager();
29
+ const callback = sinon.stub();
30
+ registerTxnListeners(txns, callback);
31
+ expect(txns.onCommit.addListener).to.be.calledOnce;
32
+ expect(txns.onCommitted.addListener).to.be.calledOnce;
33
+ txns.onCommitted.addListener.firstCall.callArg(0);
34
+ expect(callback).to.not.be.called;
35
+ });
36
+ it("unregisters from events when returned function is called", async () => {
37
+ const txns = createCoreTxnManager();
38
+ const unregister = registerTxnListeners(txns, sinon.stub());
39
+ expect(txns.onCommit.hasListeners()).to.be.true;
40
+ expect(txns.onCommitted.hasListeners()).to.be.true;
41
+ expect(txns.onChangesApplied.hasListeners()).to.be.true;
42
+ unregister();
43
+ expect(txns.onCommit.hasListeners()).to.be.false;
44
+ expect(txns.onCommitted.hasListeners()).to.be.false;
45
+ expect(txns.onChangesApplied.hasListeners()).to.be.false;
46
+ });
47
+ function createCoreTxnManager() {
48
+ return {
49
+ onCommit: createEventStub(),
50
+ onCommitted: createEventStub(),
51
+ onChangesApplied: createEventStub(),
52
+ };
53
+ }
54
+ function createEventStub() {
55
+ let hasListeners = false;
56
+ return {
57
+ hasListeners: () => hasListeners,
58
+ addListener: sinon.fake(() => {
59
+ hasListeners = true;
60
+ return () => {
61
+ hasListeners = false;
62
+ };
63
+ }),
64
+ removeListener: sinon.stub(),
65
+ };
66
+ }
67
+ });
68
+ //# sourceMappingURL=Transactions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transactions.test.js","sourceRoot":"","sources":["../../../src/test/Transactions.test.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 { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { registerTxnListeners } from \"../core-interop/Transactions\";\n\ndescribe(\"registerTxnListeners\", () => {\n it(\"calls provided callback on `onAppliedChanges` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onChangesApplied.addListener).to.be.calledOnce;\n txns.onChangesApplied.addListener.firstCall.callArg(0);\n expect(callback).to.be.calledOnce;\n });\n\n it(\"calls provided callback on `onCommit` and `onCommitted` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onCommit.addListener).to.be.calledOnce;\n expect(txns.onCommitted.addListener).to.be.calledOnce;\n txns.onCommit.addListener.firstCall.callArg(0);\n txns.onCommitted.addListener.firstCall.callArg(0);\n expect(callback).to.be.calledOnce;\n });\n\n it(\"doesn't call provided callback on `onCommitted` event if there was no `onCommit` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onCommit.addListener).to.be.calledOnce;\n expect(txns.onCommitted.addListener).to.be.calledOnce;\n txns.onCommitted.addListener.firstCall.callArg(0);\n expect(callback).to.not.be.called;\n });\n\n it(\"unregisters from events when returned function is called\", async () => {\n const txns = createCoreTxnManager();\n const unregister = registerTxnListeners(txns, sinon.stub());\n expect(txns.onCommit.hasListeners()).to.be.true;\n expect(txns.onCommitted.hasListeners()).to.be.true;\n expect(txns.onChangesApplied.hasListeners()).to.be.true;\n unregister();\n expect(txns.onCommit.hasListeners()).to.be.false;\n expect(txns.onCommitted.hasListeners()).to.be.false;\n expect(txns.onChangesApplied.hasListeners()).to.be.false;\n });\n\n function createCoreTxnManager() {\n return {\n onCommit: createEventStub(),\n onCommitted: createEventStub(),\n onChangesApplied: createEventStub(),\n };\n }\n\n function createEventStub() {\n let hasListeners = false;\n return {\n hasListeners: () => hasListeners,\n addListener: sinon.fake(() => {\n hasListeners = true;\n return () => {\n hasListeners = false;\n };\n }),\n removeListener: sinon.stub(),\n };\n }\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import * as chai from "chai";
6
+ import chaiAsPromised from "chai-as-promised";
7
+ import sinon from "sinon";
8
+ import sinonChai from "sinon-chai";
9
+ // setup chai
10
+ chai.use(chaiAsPromised);
11
+ chai.use(sinonChai);
12
+ beforeEach(function () {
13
+ sinon.restore();
14
+ });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,aAAa;AACb,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAEpB,UAAU,CAAC;IACT,KAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC","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 * as chai from \"chai\";\nimport chaiAsPromised from \"chai-as-promised\";\nimport sinon from \"sinon\";\nimport sinonChai from \"sinon-chai\";\n\n// setup chai\nchai.use(chaiAsPromised);\nchai.use(sinonChai);\n\nbeforeEach(function () {\n sinon.restore();\n});\n"]}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@itwin/presentation-core-interop",
3
+ "version": "0.1.0",
4
+ "description": "The package acts as a layer between iTwin.js Core and Presentation packages.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/iTwin/presentation.git",
9
+ "directory": "packages/core-interop"
10
+ },
11
+ "keywords": [
12
+ "Bentley",
13
+ "iModel",
14
+ "iTwin.js",
15
+ "Presentation"
16
+ ],
17
+ "author": {
18
+ "name": "Bentley Systems, Inc.",
19
+ "url": "http://www.bentley.com"
20
+ },
21
+ "main": "lib/cjs/presentation-core-interop.js",
22
+ "module": "lib/esm/presentation-core-interop.js",
23
+ "types": "lib/cjs/presentation-core-interop.d.ts",
24
+ "dependencies": {
25
+ "rxjs": "^7.8.1",
26
+ "@itwin/presentation-shared": "~0.1.0"
27
+ },
28
+ "peerDependencies": {
29
+ "@itwin/core-bentley": "^4.1.0",
30
+ "@itwin/core-common": "^4.1.0",
31
+ "@itwin/core-geometry": "^4.1.0",
32
+ "@itwin/core-quantity": "^4.1.0",
33
+ "@itwin/ecschema-metadata": "^4.1.0"
34
+ },
35
+ "devDependencies": {
36
+ "@itwin/build-tools": "^4.5.2",
37
+ "@itwin/core-bentley": "^4.5.2",
38
+ "@itwin/core-common": "^4.5.2",
39
+ "@itwin/core-geometry": "^4.5.2",
40
+ "@itwin/core-quantity": "^4.5.2",
41
+ "@itwin/ecschema-metadata": "^4.5.2",
42
+ "@itwin/eslint-plugin": "^4.0.0",
43
+ "@types/chai": "^4.3.14",
44
+ "@types/chai-as-promised": "^7.1.8",
45
+ "@types/mocha": "^10.0.6",
46
+ "@types/sinon": "^17.0.3",
47
+ "@types/sinon-chai": "^3.2.12",
48
+ "chai": "^4.4.1",
49
+ "chai-as-promised": "^7.1.1",
50
+ "cpx2": "^7.0.1",
51
+ "eslint": "^8.57.0",
52
+ "mocha": "^10.4.0",
53
+ "nyc": "^15.1.0",
54
+ "rimraf": "^5.0.5",
55
+ "rxjs-for-await": "^1.0.0",
56
+ "sinon": "^17.0.1",
57
+ "sinon-chai": "^3.7.0",
58
+ "typescript": "~5.4.5"
59
+ },
60
+ "scripts": {
61
+ "build": "npm run -s build:cjs && npm run -s build:esm",
62
+ "build:cjs": "tsc -p tsconfig.cjs.json",
63
+ "build:esm": "tsc -p tsconfig.esm.json",
64
+ "build:watch": "npm run -s build:cjs -- -w",
65
+ "clean": "rimraf lib",
66
+ "cover": "nyc npm -s test",
67
+ "lint": "eslint ./src/**/*.ts",
68
+ "test": "mocha --enable-source-maps --config ./.mocharc.json \"./lib/cjs/test/**/*.test.js\"",
69
+ "extract-api": "betools extract-api --entry=presentation-core-interop --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api",
70
+ "check-internal": "node ../../scripts/checkInternal.js --apiSummary ./api/presentation-core-interop.api.md"
71
+ }
72
+ }