@itwin/core-backend 5.3.0-dev.21 → 5.3.0-dev.23

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 (31) hide show
  1. package/lib/cjs/IModelDb.d.ts.map +1 -1
  2. package/lib/cjs/IModelDb.js +11 -0
  3. package/lib/cjs/IModelDb.js.map +1 -1
  4. package/lib/cjs/TxnManager.d.ts +2 -0
  5. package/lib/cjs/TxnManager.d.ts.map +1 -1
  6. package/lib/cjs/TxnManager.js +10 -2
  7. package/lib/cjs/TxnManager.js.map +1 -1
  8. package/lib/esm/IModelDb.d.ts.map +1 -1
  9. package/lib/esm/IModelDb.js +11 -0
  10. package/lib/esm/IModelDb.js.map +1 -1
  11. package/lib/esm/TxnManager.d.ts +2 -0
  12. package/lib/esm/TxnManager.d.ts.map +1 -1
  13. package/lib/esm/TxnManager.js +10 -2
  14. package/lib/esm/TxnManager.js.map +1 -1
  15. package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
  16. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
  17. package/lib/esm/test/ElementDrivesElement.test.js +862 -0
  18. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
  19. package/lib/esm/test/ElementLRUCache.test.js +13 -0
  20. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  21. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +2 -2
  22. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  23. package/lib/esm/test/hubaccess/Rebase.test.js +30 -2
  24. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  25. package/lib/esm/test/imodel/IModel.test.js +27 -0
  26. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  27. package/lib/esm/test/standalone/ChangesetReader.test.js +40 -46
  28. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  29. package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
  30. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  31. package/package.json +13 -13
@@ -3,10 +3,11 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { expect } from "chai";
6
- import { assert } from "@itwin/core-bentley";
7
- import { CurrentImdlVersion, ElementGeometry, GeometryStreamIterator } from "@itwin/core-common";
6
+ import { assert, ByteStream, utf8ToString } from "@itwin/core-bentley";
7
+ import { CurrentImdlVersion, ElementGeometry, FeatureTableHeader, GeometryStreamIterator, GltfHeader, ImdlHeader, } from "@itwin/core-common";
8
8
  import { _nativeDb, GeometricElement3d } from "../../core-backend";
9
9
  import { IModelTestUtils } from "../IModelTestUtils";
10
+ import { LineSegment3d } from "@itwin/core-geometry";
10
11
  describe("ElementGraphics", () => {
11
12
  let imodel;
12
13
  before(() => {
@@ -27,7 +28,7 @@ describe("ElementGraphics", () => {
27
28
  toleranceLog10: -2,
28
29
  formatVersion: CurrentImdlVersion.Major,
29
30
  };
30
- const result = await imodel[_nativeDb].generateElementGraphics(request); // ###TODO update package versions in addon
31
+ const result = await imodel[_nativeDb].generateElementGraphics(request);
31
32
  expect(result.status).to.equal(0 /* ElementGraphicsStatus.Success */);
32
33
  assert(result.status === 0 /* ElementGraphicsStatus.Success */);
33
34
  const content = result.content;
@@ -52,7 +53,7 @@ describe("ElementGraphics", () => {
52
53
  categoryId: element.category,
53
54
  geometry: { format: "json", data: element.geom },
54
55
  };
55
- const result = await imodel[_nativeDb].generateElementGraphics(request); // ###TODO update package versions in addon
56
+ const result = await imodel[_nativeDb].generateElementGraphics(request);
56
57
  expect(result.status).to.equal(0 /* ElementGraphicsStatus.Success */);
57
58
  assert(result.status === 0 /* ElementGraphicsStatus.Success */);
58
59
  const content = result.content;
@@ -88,7 +89,7 @@ describe("ElementGraphics", () => {
88
89
  categoryId: element.category,
89
90
  geometry: { format: "flatbuffer", data: entries },
90
91
  };
91
- const result = await imodel[_nativeDb].generateElementGraphics(request); // ###TODO update package versions in addon
92
+ const result = await imodel[_nativeDb].generateElementGraphics(request);
92
93
  expect(result.status).to.equal(0 /* ElementGraphicsStatus.Success */);
93
94
  assert(result.status === 0 /* ElementGraphicsStatus.Success */);
94
95
  const content = result.content;
@@ -96,6 +97,74 @@ describe("ElementGraphics", () => {
96
97
  expect(content instanceof Uint8Array).to.be.true;
97
98
  expect(content.length).least(40);
98
99
  });
100
+ it("supports an unlimited number of flatbuffer geometry stream entries", async () => {
101
+ async function getElementGraphics(numCopies) {
102
+ const elementId = "0x29";
103
+ const element = imodel.elements.tryGetElement({ id: elementId, wantGeometry: true });
104
+ expect(element).not.to.be.undefined;
105
+ expect(element).instanceof(GeometricElement3d);
106
+ expect(element?.geom).not.to.be.undefined;
107
+ expect(element?.placement).not.to.be.undefined;
108
+ const entries = [];
109
+ const it = new GeometryStreamIterator(element.geom, element.category);
110
+ for (const entry of it) {
111
+ if ("geometryQuery" !== entry.primitive.type)
112
+ continue;
113
+ for (let i = 0; i < numCopies; i++) {
114
+ const segment = LineSegment3d.createXYXY(i, i, i + 1, i);
115
+ const geomEntry = ElementGeometry.fromGeometryQuery(segment);
116
+ expect(geomEntry).not.to.be.undefined;
117
+ entries.push(geomEntry);
118
+ }
119
+ break;
120
+ }
121
+ const request = {
122
+ id: "test",
123
+ elementId,
124
+ toleranceLog10: -2,
125
+ formatVersion: CurrentImdlVersion.Major,
126
+ type: "3d",
127
+ placement: element.placement,
128
+ categoryId: element.category,
129
+ geometry: { format: "flatbuffer", data: entries },
130
+ };
131
+ const result = await imodel[_nativeDb].generateElementGraphics(request);
132
+ expect(result.status).to.equal(0 /* ElementGraphicsStatus.Success */);
133
+ assert(result.status === 0 /* ElementGraphicsStatus.Success */);
134
+ const content = result.content;
135
+ expect(content).not.to.be.undefined;
136
+ expect(content instanceof Uint8Array).to.be.true;
137
+ expect(content.length).least(40);
138
+ return content;
139
+ }
140
+ let prevGraphics = [];
141
+ let prevRangeDiagonalMagnitude = 0;
142
+ for (const numCopies of [1, 2, 3, 10, 100, 1000, 2000, 2047, 2048, 2049, 2050, 2500, 2501, 2600, 3000, 10000]) {
143
+ const tileBytes = await getElementGraphics(numCopies);
144
+ const newGraphics = Array.from(tileBytes);
145
+ expect(newGraphics).not.to.deep.equal(prevGraphics);
146
+ // Extract metadata from the tile graphics.
147
+ const stream = ByteStream.fromUint8Array(tileBytes);
148
+ const header = new ImdlHeader(stream);
149
+ const featureTableStartPos = stream.curPos;
150
+ const featureTableHeader = FeatureTableHeader.readFrom(stream);
151
+ expect(featureTableHeader).not.to.be.undefined;
152
+ stream.curPos = featureTableStartPos + featureTableHeader.length;
153
+ const gltfHeader = new GltfHeader(stream);
154
+ expect(gltfHeader.isValid).to.be.true;
155
+ stream.curPos = gltfHeader.scenePosition;
156
+ const sceneStrData = stream.nextBytes(gltfHeader.sceneStrLength);
157
+ const sceneStr = utf8ToString(sceneStrData);
158
+ expect(sceneStr).not.to.be.undefined;
159
+ const json = JSON.parse(sceneStr);
160
+ // The tile should have two unique vertices per line segment in the input geometry stream.
161
+ expect(json.meshes.Mesh_Root.primitives[0].vertices.count).to.equal(numCopies * 2);
162
+ expect(header.contentRange.diagonal().magnitude()).greaterThan(prevRangeDiagonalMagnitude);
163
+ prevRangeDiagonalMagnitude = header.contentRange.diagonal().magnitude();
164
+ expect(newGraphics.length).greaterThan(prevGraphics.length);
165
+ prevGraphics = newGraphics;
166
+ }
167
+ });
99
168
  it("produces expected errors", async () => {
100
169
  const testCases = [
101
170
  [5 /* ElementGraphicsStatus.ElementNotFound */, { elementId: "0" }],
@@ -117,7 +186,7 @@ describe("ElementGraphics", () => {
117
186
  formatVersion: CurrentImdlVersion.Major,
118
187
  ...testCase[1],
119
188
  };
120
- const result = await imodel[_nativeDb].generateElementGraphics(request); // ###TODO update package versions in addon
189
+ const result = await imodel[_nativeDb].generateElementGraphics(request);
121
190
  expect(result.status).to.equal(testCase[0]);
122
191
  if (result.status === 0 /* ElementGraphicsStatus.Success */)
123
192
  expect(result.content).not.to.be.undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGraphics.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ElementGraphics.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { CurrentImdlVersion, DynamicGraphicsRequest3dProps, ElementGeometry, ElementGeometryDataEntry, ElementGraphicsRequestProps, GeometryStreamIterator } from \"@itwin/core-common\";\r\nimport { ElementGraphicsStatus } from \"@bentley/imodeljs-native\";\r\nimport { _nativeDb, GeometricElement3d, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"ElementGraphics\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\r\n });\r\n\r\n after(() => {\r\n if (imodel && imodel.isOpen)\r\n imodel.close();\r\n });\r\n\r\n it(\"obtains graphics for elements\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>(elementId);\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n\r\n const request: ElementGraphicsRequestProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request as any); // ###TODO update package versions in addon\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"obtains graphics for dynamics from json format geometry stream\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>({ id: elementId, wantGeometry: true });\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n expect(element?.geom).not.to.be.undefined;\r\n expect(element?.placement).not.to.be.undefined;\r\n\r\n const request: DynamicGraphicsRequest3dProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n type: \"3d\",\r\n placement: element!.placement,\r\n categoryId: element!.category,\r\n geometry: { format: \"json\", data: element!.geom! },\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request as any); // ###TODO update package versions in addon\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"obtains graphics for dynamics from flatbuffers format geometry stream\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>({ id: elementId, wantGeometry: true });\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n expect(element?.geom).not.to.be.undefined;\r\n expect(element?.placement).not.to.be.undefined;\r\n\r\n const entries: ElementGeometryDataEntry[] = [];\r\n const it = new GeometryStreamIterator(element!.geom!, element!.category);\r\n for (const entry of it) {\r\n if (\"geometryQuery\" !== entry.primitive.type)\r\n continue;\r\n\r\n if (!ElementGeometry.appendGeometryParams(entry.geomParams, entries))\r\n continue;\r\n\r\n const geomEntry = ElementGeometry.fromGeometryQuery(entry.primitive.geometry);\r\n expect(geomEntry).not.to.be.undefined;\r\n entries.push(geomEntry!);\r\n }\r\n\r\n const request: DynamicGraphicsRequest3dProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n type: \"3d\",\r\n placement: element!.placement,\r\n categoryId: element!.category,\r\n geometry: { format: \"flatbuffer\", data: entries },\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request as any); // ###TODO update package versions in addon\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"produces expected errors\", async () => {\r\n type TestCase = [ElementGraphicsStatus, Partial<ElementGraphicsRequestProps>];\r\n const testCases: TestCase[] = [\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: \"0\" }],\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: \"0x12345678\" }],\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: undefined }],\r\n\r\n [ElementGraphicsStatus.InvalidJson, { id: undefined }],\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: undefined }],\r\n\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: 12.5 }],\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: \"tol\" as any }],\r\n\r\n [ElementGraphicsStatus.Success, { formatVersion: undefined }],\r\n [ElementGraphicsStatus.UnknownMajorFormatVersion, { formatVersion: CurrentImdlVersion.Major + 1 }],\r\n [ElementGraphicsStatus.UnknownMajorFormatVersion, { formatVersion: \"latest\" as any }],\r\n ];\r\n\r\n for (const testCase of testCases) {\r\n const request: ElementGraphicsRequestProps = {\r\n id: \"test\",\r\n elementId: \"0x29\",\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n ...testCase[1],\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request as any); // ###TODO update package versions in addon\r\n expect(result.status).to.equal(testCase[0]);\r\n if (result.status === ElementGraphicsStatus.Success)\r\n expect(result.content).not.to.be.undefined;\r\n }\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ElementGraphics.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ElementGraphics.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { assert, ByteStream, utf8ToString } from \"@itwin/core-bentley\";\r\nimport {\r\n CurrentImdlVersion, DynamicGraphicsRequest3dProps, ElementGeometry, ElementGeometryDataEntry, ElementGraphicsRequestProps, FeatureTableHeader, GeometryStreamIterator, GltfHeader, ImdlHeader,\r\n} from \"@itwin/core-common\";\r\nimport { ElementGraphicsStatus } from \"@bentley/imodeljs-native\";\r\nimport { _nativeDb, GeometricElement3d, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { LineSegment3d } from \"@itwin/core-geometry\";\r\n\r\ndescribe(\"ElementGraphics\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\r\n });\r\n\r\n after(() => {\r\n if (imodel && imodel.isOpen)\r\n imodel.close();\r\n });\r\n\r\n it(\"obtains graphics for elements\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>(elementId);\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n\r\n const request: ElementGraphicsRequestProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request);\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"obtains graphics for dynamics from json format geometry stream\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>({ id: elementId, wantGeometry: true });\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n expect(element?.geom).not.to.be.undefined;\r\n expect(element?.placement).not.to.be.undefined;\r\n\r\n const request: DynamicGraphicsRequest3dProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n type: \"3d\",\r\n placement: element!.placement,\r\n categoryId: element!.category,\r\n geometry: { format: \"json\", data: element!.geom! },\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request);\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"obtains graphics for dynamics from flatbuffers format geometry stream\", async () => {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>({ id: elementId, wantGeometry: true });\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n expect(element?.geom).not.to.be.undefined;\r\n expect(element?.placement).not.to.be.undefined;\r\n\r\n const entries: ElementGeometryDataEntry[] = [];\r\n const it = new GeometryStreamIterator(element!.geom!, element!.category);\r\n for (const entry of it) {\r\n if (\"geometryQuery\" !== entry.primitive.type)\r\n continue;\r\n\r\n if (!ElementGeometry.appendGeometryParams(entry.geomParams, entries))\r\n continue;\r\n\r\n const geomEntry = ElementGeometry.fromGeometryQuery(entry.primitive.geometry);\r\n expect(geomEntry).not.to.be.undefined;\r\n entries.push(geomEntry!);\r\n }\r\n\r\n const request: DynamicGraphicsRequest3dProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n type: \"3d\",\r\n placement: element!.placement,\r\n categoryId: element!.category,\r\n geometry: { format: \"flatbuffer\", data: entries },\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request);\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n });\r\n\r\n it(\"supports an unlimited number of flatbuffer geometry stream entries\", async () => {\r\n async function getElementGraphics(numCopies: number): Promise<Uint8Array> {\r\n const elementId = \"0x29\";\r\n const element = imodel.elements.tryGetElement<GeometricElement3d>({ id: elementId, wantGeometry: true });\r\n expect(element).not.to.be.undefined;\r\n expect(element).instanceof(GeometricElement3d);\r\n expect(element?.geom).not.to.be.undefined;\r\n expect(element?.placement).not.to.be.undefined;\r\n\r\n const entries: ElementGeometryDataEntry[] = [];\r\n const it = new GeometryStreamIterator(element!.geom!, element!.category);\r\n for (const entry of it) {\r\n if (\"geometryQuery\" !== entry.primitive.type)\r\n continue;\r\n\r\n for (let i = 0; i < numCopies; i++) {\r\n const segment = LineSegment3d.createXYXY(i, i, i+1, i);\r\n const geomEntry = ElementGeometry.fromGeometryQuery(segment);\r\n expect(geomEntry).not.to.be.undefined;\r\n entries.push(geomEntry!);\r\n }\r\n\r\n break;\r\n }\r\n\r\n const request: DynamicGraphicsRequest3dProps = {\r\n id: \"test\",\r\n elementId,\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n type: \"3d\",\r\n placement: element!.placement,\r\n categoryId: element!.category,\r\n geometry: { format: \"flatbuffer\", data: entries },\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request);\r\n expect(result.status).to.equal(ElementGraphicsStatus.Success);\r\n assert(result.status === ElementGraphicsStatus.Success);\r\n\r\n const content = result.content;\r\n expect(content).not.to.be.undefined;\r\n expect(content instanceof Uint8Array).to.be.true;\r\n expect(content.length).least(40);\r\n\r\n return content;\r\n }\r\n\r\n let prevGraphics: number[] = [];\r\n let prevRangeDiagonalMagnitude = 0;\r\n for (const numCopies of [1, 2, 3, 10, 100, 1000, 2000, 2047,2048, 2049, 2050, 2500, 2501, 2600, 3000, 10000]) {\r\n const tileBytes = await getElementGraphics(numCopies);\r\n const newGraphics = Array.from(tileBytes);\r\n\r\n expect(newGraphics).not.to.deep.equal(prevGraphics);\r\n\r\n // Extract metadata from the tile graphics.\r\n const stream = ByteStream.fromUint8Array(tileBytes);\r\n const header = new ImdlHeader(stream);\r\n\r\n const featureTableStartPos = stream.curPos;\r\n const featureTableHeader = FeatureTableHeader.readFrom(stream);\r\n expect(featureTableHeader).not.to.be.undefined;\r\n stream.curPos = featureTableStartPos + featureTableHeader!.length;\r\n const gltfHeader = new GltfHeader(stream);\r\n expect(gltfHeader.isValid).to.be.true;\r\n stream.curPos = gltfHeader.scenePosition;\r\n const sceneStrData = stream.nextBytes(gltfHeader.sceneStrLength);\r\n const sceneStr = utf8ToString(sceneStrData);\r\n expect(sceneStr).not.to.be.undefined;\r\n const json = JSON.parse(sceneStr!);\r\n\r\n // The tile should have two unique vertices per line segment in the input geometry stream.\r\n expect(json.meshes.Mesh_Root.primitives[0].vertices.count).to.equal(numCopies * 2);\r\n\r\n expect(header.contentRange.diagonal().magnitude()).greaterThan(prevRangeDiagonalMagnitude);\r\n prevRangeDiagonalMagnitude = header.contentRange.diagonal().magnitude();\r\n\r\n expect(newGraphics.length).greaterThan(prevGraphics.length);\r\n\r\n prevGraphics = newGraphics;\r\n }\r\n });\r\n\r\n it(\"produces expected errors\", async () => {\r\n type TestCase = [ElementGraphicsStatus, Partial<ElementGraphicsRequestProps>];\r\n const testCases: TestCase[] = [\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: \"0\" }],\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: \"0x12345678\" }],\r\n [ElementGraphicsStatus.ElementNotFound, { elementId: undefined }],\r\n\r\n [ElementGraphicsStatus.InvalidJson, { id: undefined }],\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: undefined }],\r\n\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: 12.5 }],\r\n [ElementGraphicsStatus.InvalidJson, { toleranceLog10: \"tol\" as any }],\r\n\r\n [ElementGraphicsStatus.Success, { formatVersion: undefined }],\r\n [ElementGraphicsStatus.UnknownMajorFormatVersion, { formatVersion: CurrentImdlVersion.Major + 1 }],\r\n [ElementGraphicsStatus.UnknownMajorFormatVersion, { formatVersion: \"latest\" as any }],\r\n ];\r\n\r\n for (const testCase of testCases) {\r\n const request: ElementGraphicsRequestProps = {\r\n id: \"test\",\r\n elementId: \"0x29\",\r\n toleranceLog10: -2,\r\n formatVersion: CurrentImdlVersion.Major,\r\n ...testCase[1],\r\n };\r\n\r\n const result = await imodel[_nativeDb].generateElementGraphics(request);\r\n expect(result.status).to.equal(testCase[0]);\r\n if (result.status === ElementGraphicsStatus.Success)\r\n expect(result.content).not.to.be.undefined;\r\n }\r\n });\r\n});\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "5.3.0-dev.21",
3
+ "version": "5.3.0-dev.23",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "module": "lib/esm/core-backend.js",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@opentelemetry/api": "^1.0.4",
30
- "@itwin/core-bentley": "5.3.0-dev.21",
31
- "@itwin/core-geometry": "5.3.0-dev.21",
32
- "@itwin/ecschema-metadata": "5.3.0-dev.21",
33
- "@itwin/core-common": "5.3.0-dev.21"
30
+ "@itwin/core-common": "5.3.0-dev.23",
31
+ "@itwin/core-geometry": "5.3.0-dev.23",
32
+ "@itwin/core-bentley": "5.3.0-dev.23",
33
+ "@itwin/ecschema-metadata": "5.3.0-dev.23"
34
34
  },
35
35
  "peerDependenciesMeta": {
36
36
  "@opentelemetry/api": {
@@ -77,17 +77,17 @@
77
77
  "marked": "^14.1.3",
78
78
  "sql-formatter": "^15.4.6",
79
79
  "webpack": "^5.97.1",
80
- "@itwin/core-common": "5.3.0-dev.21",
81
- "@itwin/core-geometry": "5.3.0-dev.21",
82
- "@itwin/ecsql-common": "5.3.0-dev.21",
83
- "@itwin/core-bentley": "5.3.0-dev.21",
84
- "@itwin/ecschema-locaters": "5.3.0-dev.21",
85
- "@itwin/build-tools": "5.3.0-dev.21",
80
+ "@itwin/core-common": "5.3.0-dev.23",
81
+ "@itwin/core-bentley": "5.3.0-dev.23",
82
+ "@itwin/ecschema-locaters": "5.3.0-dev.23",
83
+ "@itwin/ecsql-common": "5.3.0-dev.23",
84
+ "@itwin/build-tools": "5.3.0-dev.23",
85
+ "@itwin/ecschema-metadata": "5.3.0-dev.23",
86
86
  "internal-tools": "3.0.0-dev.69",
87
- "@itwin/ecschema-metadata": "5.3.0-dev.21"
87
+ "@itwin/core-geometry": "5.3.0-dev.23"
88
88
  },
89
89
  "dependencies": {
90
- "@bentley/imodeljs-native": "5.3.20",
90
+ "@bentley/imodeljs-native": "5.3.24",
91
91
  "@itwin/object-storage-azure": "^3.0.4",
92
92
  "@azure/storage-blob": "^12.28.0",
93
93
  "form-data": "^4.0.4",