@itwin/core-backend 5.8.0-dev.9 → 5.8.1

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 (133) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/lib/cjs/IModelDb.d.ts.map +1 -1
  3. package/lib/cjs/IModelDb.js +0 -3
  4. package/lib/cjs/IModelDb.js.map +1 -1
  5. package/lib/cjs/IpcHost.d.ts.map +1 -1
  6. package/lib/cjs/IpcHost.js +28 -4
  7. package/lib/cjs/IpcHost.js.map +1 -1
  8. package/lib/cjs/LineStyle.d.ts +6 -0
  9. package/lib/cjs/LineStyle.d.ts.map +1 -1
  10. package/lib/cjs/LineStyle.js +41 -32
  11. package/lib/cjs/LineStyle.js.map +1 -1
  12. package/lib/cjs/LocalHub.d.ts +17 -10
  13. package/lib/cjs/LocalHub.d.ts.map +1 -1
  14. package/lib/cjs/LocalHub.js +126 -28
  15. package/lib/cjs/LocalHub.js.map +1 -1
  16. package/lib/cjs/core-backend.d.ts +2 -0
  17. package/lib/cjs/core-backend.d.ts.map +1 -1
  18. package/lib/cjs/core-backend.js +2 -0
  19. package/lib/cjs/core-backend.js.map +1 -1
  20. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
  21. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  22. package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
  23. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
  24. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  25. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  26. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
  27. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
  28. package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
  29. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  30. package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
  31. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  32. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  33. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  34. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
  35. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
  36. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
  37. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  38. package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
  39. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  40. package/lib/cjs/workspace/Settings.d.ts +8 -0
  41. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  42. package/lib/cjs/workspace/Settings.js.map +1 -1
  43. package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
  44. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
  45. package/lib/cjs/workspace/SettingsDb.js +19 -0
  46. package/lib/cjs/workspace/SettingsDb.js.map +1 -0
  47. package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
  48. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
  49. package/lib/cjs/workspace/SettingsEditor.js +53 -0
  50. package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
  51. package/lib/cjs/workspace/Workspace.d.ts +42 -19
  52. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  53. package/lib/cjs/workspace/Workspace.js.map +1 -1
  54. package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
  55. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  56. package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
  57. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  58. package/lib/esm/IModelDb.d.ts.map +1 -1
  59. package/lib/esm/IModelDb.js +0 -3
  60. package/lib/esm/IModelDb.js.map +1 -1
  61. package/lib/esm/IpcHost.d.ts.map +1 -1
  62. package/lib/esm/IpcHost.js +28 -4
  63. package/lib/esm/IpcHost.js.map +1 -1
  64. package/lib/esm/LineStyle.d.ts +6 -0
  65. package/lib/esm/LineStyle.d.ts.map +1 -1
  66. package/lib/esm/LineStyle.js +41 -32
  67. package/lib/esm/LineStyle.js.map +1 -1
  68. package/lib/esm/LocalHub.d.ts +17 -10
  69. package/lib/esm/LocalHub.d.ts.map +1 -1
  70. package/lib/esm/LocalHub.js +127 -29
  71. package/lib/esm/LocalHub.js.map +1 -1
  72. package/lib/esm/core-backend.d.ts +2 -0
  73. package/lib/esm/core-backend.d.ts.map +1 -1
  74. package/lib/esm/core-backend.js +2 -0
  75. package/lib/esm/core-backend.js.map +1 -1
  76. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
  77. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  78. package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
  79. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
  80. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  81. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  82. package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
  83. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
  84. package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
  85. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  86. package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
  87. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  88. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  89. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  90. package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
  91. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
  92. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
  93. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  94. package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
  95. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  96. package/lib/esm/test/IpcHost.test.js +64 -13
  97. package/lib/esm/test/IpcHost.test.js.map +1 -1
  98. package/lib/esm/test/ecdb/QueryReaders.test.js +35 -0
  99. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  100. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  101. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
  102. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  103. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +8 -0
  104. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  105. package/lib/esm/test/standalone/HubMock.test.js +177 -7
  106. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  107. package/lib/esm/test/standalone/Settings.test.js +18 -0
  108. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  109. package/lib/esm/test/standalone/Workspace.test.js +160 -0
  110. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  111. package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
  112. package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
  113. package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
  114. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
  115. package/lib/esm/workspace/Settings.d.ts +8 -0
  116. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  117. package/lib/esm/workspace/Settings.js.map +1 -1
  118. package/lib/esm/workspace/SettingsDb.d.ts +109 -0
  119. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
  120. package/lib/esm/workspace/SettingsDb.js +16 -0
  121. package/lib/esm/workspace/SettingsDb.js.map +1 -0
  122. package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
  123. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
  124. package/lib/esm/workspace/SettingsEditor.js +50 -0
  125. package/lib/esm/workspace/SettingsEditor.js.map +1 -0
  126. package/lib/esm/workspace/Workspace.d.ts +42 -19
  127. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  128. package/lib/esm/workspace/Workspace.js.map +1 -1
  129. package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
  130. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  131. package/lib/esm/workspace/WorkspaceEditor.js +19 -0
  132. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  133. package/package.json +15 -15
@@ -1,11 +1,31 @@
1
1
  import * as sinon from "sinon";
2
2
  import { expect } from "chai";
3
3
  import { IpcHandler, IpcHost } from "../IpcHost";
4
+ class OuterError extends Error {
5
+ originalError;
6
+ context;
7
+ errors;
8
+ constructor(originalError) {
9
+ super("outer");
10
+ this.originalError = originalError;
11
+ this.context = { cause: originalError };
12
+ this.errors = [new Error("array-child-1"), new Error("array-child-2")];
13
+ }
14
+ }
4
15
  class MockIpcHandler extends IpcHandler {
5
16
  get channelName() { return "mock-channel"; }
6
17
  mockMethod() {
7
18
  return "mock-value";
8
19
  }
20
+ throwNestedError() {
21
+ const inner = new Error("inner-message");
22
+ throw new OuterError(inner);
23
+ }
24
+ throwCircularError() {
25
+ const err = new Error("circular");
26
+ err.cause = err; // circular reference
27
+ throw err;
28
+ }
9
29
  #privateFunction() { }
10
30
  }
11
31
  describe("IpcHost", () => {
@@ -20,36 +40,67 @@ describe("IpcHost", () => {
20
40
  await IpcHost.startup({ ipcHost: { socket } });
21
41
  });
22
42
  describe("IpcHandler", () => {
23
- it("should call public methods", async () => {
43
+ let handler;
44
+ beforeEach(() => {
24
45
  MockIpcHandler.register();
25
46
  const handleCall = socket.handle.getCalls().find((call) => call.args[0] === "itwin.mock-channel");
26
47
  expect(handleCall).to.not.be.undefined;
27
- const handler = handleCall.args[1];
28
- expect(typeof handler).to.equal("function");
48
+ handler = handleCall.args[1];
49
+ });
50
+ it("should call public methods", async () => {
29
51
  const ipcReturn = await handler(undefined, "mockMethod");
30
52
  expect(ipcReturn.result).to.equal("mock-value");
31
53
  expect(ipcReturn.error).to.be.undefined;
32
54
  });
33
55
  it("should not call private methods", async () => {
34
- MockIpcHandler.register();
35
- const handleCall = socket.handle.getCalls().find((call) => call.args[0] === "itwin.mock-channel");
36
- expect(handleCall).to.not.be.undefined;
37
- const handler = handleCall.args[1];
38
- expect(typeof handler).to.equal("function");
39
56
  const ipcReturn = await handler(undefined, "#privateFunction");
40
57
  expect(ipcReturn.result).to.be.undefined;
41
58
  expect(ipcReturn.error).to.not.be.undefined;
42
59
  });
43
60
  it("should not call methods inherited from Object", async () => {
44
- MockIpcHandler.register();
45
- const handleCall = socket.handle.getCalls().find((call) => call.args[0] === "itwin.mock-channel");
46
- expect(handleCall).to.not.be.undefined;
47
- const handler = handleCall.args[1];
48
- expect(typeof handler).to.equal("function");
49
61
  const ipcReturn = await handler(undefined, "toString");
50
62
  expect(ipcReturn.result).to.be.undefined;
51
63
  expect(ipcReturn.error).to.not.be.undefined;
52
64
  });
65
+ it("should serialize nested Error properties preserving message and stack", async () => {
66
+ const ipcReturn = await handler(undefined, "throwNestedError");
67
+ const error = ipcReturn.error;
68
+ // Top-level error
69
+ expect(error.message).to.equal("outer");
70
+ expect(error.stack).to.be.a("string");
71
+ // Direct Error property
72
+ expect(error.originalError.message).to.equal("inner-message");
73
+ expect(error.originalError.stack).to.be.a("string");
74
+ // Error nested inside a plain-object property
75
+ expect(error.context.cause.message).to.equal("inner-message");
76
+ expect(error.context.cause.stack).to.be.a("string");
77
+ // Array of Errors stays an array
78
+ expect(Array.isArray(error.errors)).to.be.true;
79
+ expect(error.errors[0].message).to.equal("array-child-1");
80
+ expect(error.errors[1].message).to.equal("array-child-2");
81
+ });
82
+ it("should omit stack on nested Errors when IpcHost.noStack is set", async () => {
83
+ const originalNoStack = IpcHost.noStack;
84
+ IpcHost.noStack = true;
85
+ try {
86
+ const ipcReturn = await handler(undefined, "throwNestedError");
87
+ const error = ipcReturn.error;
88
+ expect(error.stack).to.be.undefined;
89
+ expect(error.originalError.stack).to.be.undefined;
90
+ expect(error.context.cause.stack).to.be.undefined;
91
+ expect(error.errors[0].stack).to.be.undefined;
92
+ expect(error.errors[1].stack).to.be.undefined;
93
+ }
94
+ finally {
95
+ IpcHost.noStack = originalNoStack;
96
+ }
97
+ });
98
+ it("should not infinitely recurse on circular Error references", async () => {
99
+ const ipcReturn = await handler(undefined, "throwCircularError");
100
+ const error = ipcReturn.error;
101
+ expect(error.message).to.equal("circular");
102
+ expect(error.cause).to.be.undefined;
103
+ });
53
104
  });
54
105
  });
55
106
  //# sourceMappingURL=IpcHost.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IpcHost.test.js","sourceRoot":"","sources":["../../../src/test/IpcHost.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sinon from \"sinon\";\r\nimport { expect } from \"chai\";\r\nimport { IpcInvokeReturn, IpcSocketBackend } from \"@itwin/core-common\";\r\nimport { IpcHandler, IpcHost } from \"../IpcHost\";\r\n\r\ninterface MockIpcInterface {\r\n mockMethod: () => string;\r\n}\r\n\r\nclass MockIpcHandler extends IpcHandler implements MockIpcInterface {\r\n public override get channelName() { return \"mock-channel\"; }\r\n\r\n public mockMethod(): string {\r\n return \"mock-value\";\r\n }\r\n\r\n #privateFunction(): void { }\r\n}\r\n\r\ndescribe(\"IpcHost\", () => {\r\n let socket: sinon.SinonStubbedInstance<IpcSocketBackend>;\r\n\r\n beforeEach(async () => {\r\n socket = {\r\n send: sinon.stub(),\r\n addListener: sinon.stub(),\r\n removeListener: sinon.stub(),\r\n handle: sinon.stub(),\r\n };\r\n\r\n await IpcHost.startup({ ipcHost: { socket } });\r\n });\r\n\r\n describe(\"IpcHandler\", () => {\r\n it(\"should call public methods\", async () => {\r\n MockIpcHandler.register();\r\n\r\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\r\n expect(handleCall).to.not.be.undefined;\r\n\r\n const handler = handleCall.args[1];\r\n expect(typeof handler).to.equal(\"function\");\r\n\r\n const ipcReturn: IpcInvokeReturn = await handler(undefined, \"mockMethod\");\r\n\r\n expect(ipcReturn.result).to.equal(\"mock-value\");\r\n expect(ipcReturn.error).to.be.undefined;\r\n });\r\n\r\n it(\"should not call private methods\", async () => {\r\n MockIpcHandler.register();\r\n\r\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\r\n expect(handleCall).to.not.be.undefined;\r\n\r\n const handler = handleCall.args[1];\r\n expect(typeof handler).to.equal(\"function\");\r\n\r\n const ipcReturn: IpcInvokeReturn = await handler(undefined, \"#privateFunction\");\r\n\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n\r\n it(\"should not call methods inherited from Object\", async () => {\r\n MockIpcHandler.register();\r\n\r\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\r\n expect(handleCall).to.not.be.undefined;\r\n\r\n const handler = handleCall.args[1];\r\n expect(typeof handler).to.equal(\"function\");\r\n\r\n const ipcReturn: IpcInvokeReturn = await handler(undefined, \"toString\");\r\n\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"IpcHost.test.js","sourceRoot":"","sources":["../../../src/test/IpcHost.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sinon from \"sinon\";\r\nimport { expect } from \"chai\";\r\nimport { IpcInvokeReturn, IpcSocketBackend } from \"@itwin/core-common\";\r\nimport { IpcHandler, IpcHost } from \"../IpcHost\";\r\n\r\ninterface MockIpcInterface {\r\n mockMethod: () => string;\r\n throwNestedError: () => never;\r\n throwCircularError: () => never;\r\n}\r\n\r\nclass OuterError extends Error {\r\n public readonly context: { cause: Error };\r\n public readonly errors: Error[];\r\n constructor(public readonly originalError: Error) {\r\n super(\"outer\");\r\n this.context = { cause: originalError };\r\n this.errors = [new Error(\"array-child-1\"), new Error(\"array-child-2\")];\r\n }\r\n}\r\n\r\nclass MockIpcHandler extends IpcHandler implements MockIpcInterface {\r\n public override get channelName() { return \"mock-channel\"; }\r\n\r\n public mockMethod(): string {\r\n return \"mock-value\";\r\n }\r\n\r\n public throwNestedError(): never {\r\n const inner = new Error(\"inner-message\");\r\n throw new OuterError(inner);\r\n }\r\n\r\n public throwCircularError(): never {\r\n const err = new Error(\"circular\") as any;\r\n err.cause = err; // circular reference\r\n throw err;\r\n }\r\n\r\n #privateFunction(): void { }\r\n}\r\n\r\ndescribe(\"IpcHost\", () => {\r\n let socket: sinon.SinonStubbedInstance<IpcSocketBackend>;\r\n\r\n beforeEach(async () => {\r\n socket = {\r\n send: sinon.stub(),\r\n addListener: sinon.stub(),\r\n removeListener: sinon.stub(),\r\n handle: sinon.stub(),\r\n };\r\n\r\n await IpcHost.startup({ ipcHost: { socket } });\r\n });\r\n\r\n describe(\"IpcHandler\", () => {\r\n let handler: (...args: any[]) => Promise<IpcInvokeReturn>;\r\n\r\n beforeEach(() => {\r\n MockIpcHandler.register();\r\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\r\n expect(handleCall).to.not.be.undefined;\r\n handler = handleCall.args[1];\r\n });\r\n\r\n it(\"should call public methods\", async () => {\r\n const ipcReturn = await handler(undefined, \"mockMethod\");\r\n expect(ipcReturn.result).to.equal(\"mock-value\");\r\n expect(ipcReturn.error).to.be.undefined;\r\n });\r\n\r\n it(\"should not call private methods\", async () => {\r\n const ipcReturn = await handler(undefined, \"#privateFunction\");\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n\r\n it(\"should not call methods inherited from Object\", async () => {\r\n const ipcReturn = await handler(undefined, \"toString\");\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n\r\n it(\"should serialize nested Error properties preserving message and stack\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwNestedError\");\r\n const error = ipcReturn.error as any;\r\n // Top-level error\r\n expect(error.message).to.equal(\"outer\");\r\n expect(error.stack).to.be.a(\"string\");\r\n // Direct Error property\r\n expect(error.originalError.message).to.equal(\"inner-message\");\r\n expect(error.originalError.stack).to.be.a(\"string\");\r\n // Error nested inside a plain-object property\r\n expect(error.context.cause.message).to.equal(\"inner-message\");\r\n expect(error.context.cause.stack).to.be.a(\"string\");\r\n // Array of Errors stays an array\r\n expect(Array.isArray(error.errors)).to.be.true;\r\n expect(error.errors[0].message).to.equal(\"array-child-1\");\r\n expect(error.errors[1].message).to.equal(\"array-child-2\");\r\n });\r\n\r\n it(\"should omit stack on nested Errors when IpcHost.noStack is set\", async () => {\r\n const originalNoStack = IpcHost.noStack;\r\n IpcHost.noStack = true;\r\n try {\r\n const ipcReturn = await handler(undefined, \"throwNestedError\");\r\n const error = ipcReturn.error as any;\r\n expect(error.stack).to.be.undefined;\r\n expect(error.originalError.stack).to.be.undefined;\r\n expect(error.context.cause.stack).to.be.undefined;\r\n expect(error.errors[0].stack).to.be.undefined;\r\n expect(error.errors[1].stack).to.be.undefined;\r\n } finally {\r\n IpcHost.noStack = originalNoStack;\r\n }\r\n });\r\n\r\n it(\"should not infinitely recurse on circular Error references\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwCircularError\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"circular\");\r\n expect(error.cause).to.be.undefined;\r\n });\r\n });\r\n});\r\n"]}
@@ -60,6 +60,7 @@ import { DefinitionModel, ElementTreeDeleter, ElementTreeWalkerScope, PhysicalMo
60
60
  import { IModelTestUtils } from "../IModelTestUtils";
61
61
  import { KnownTestLocations } from "../KnownTestLocations";
62
62
  import { ECDbTestHelper } from "./ECDbTestHelper";
63
+ import { Range3d } from "@itwin/core-geometry";
63
64
  import * as chai from "chai";
64
65
  import * as chaiAsPromised from "chai-as-promised";
65
66
  chai.use(chaiAsPromised);
@@ -263,6 +264,40 @@ describe("QueryReaders - createQueryReader() and withQueryReader() api tests", (
263
264
  const reader = iModel.createQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId", params, { limit: { count: 1 } });
264
265
  await readerCallback(reader);
265
266
  });
267
+ it("should bind Range3d", async () => {
268
+ const env_5 = { stack: [], error: void 0, hasError: false };
269
+ try {
270
+ const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);
271
+ const ecdb = __addDisposableResource(env_5, ECDbTestHelper.createECDb(outDir, "bindrange3d.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
272
+ <ECEntityClass typeName="Foo" modifier="Sealed">
273
+ <ECProperty propertyName="Range3d" typeName="binary"/>
274
+ </ECEntityClass>
275
+ </ECSchema>`), false);
276
+ assert.isTrue(ecdb.isOpen);
277
+ ecdb.withCachedWriteStatement("INSERT INTO test.Foo([Range3d]) VALUES(?)", (stmt) => {
278
+ stmt.bindRange3d(1, testRange);
279
+ const res = stmt.stepForInsert();
280
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
281
+ });
282
+ ecdb.saveChanges();
283
+ const params = new QueryBinder();
284
+ params.bindRange3d(1, testRange);
285
+ const reader = ecdb.createQueryReader("SELECT ECInstanceId, [Range3d] FROM test.Foo WHERE Range3d=?", params);
286
+ const rows = await reader.toArray();
287
+ const rangeBlob = rows[0][1];
288
+ const rangeFloatArray = new Float64Array(rangeBlob.buffer);
289
+ assert.equal(rangeFloatArray.length, 6);
290
+ const actualRange = new Range3d(...rangeFloatArray);
291
+ assert.isTrue(actualRange.isAlmostEqual(testRange));
292
+ }
293
+ catch (e_5) {
294
+ env_5.error = e_5;
295
+ env_5.hasError = true;
296
+ }
297
+ finally {
298
+ __disposeResources(env_5);
299
+ }
300
+ });
266
301
  });
267
302
  describe("Works as iterable iterator", () => {
268
303
  it("iterable in for loop", async () => {