@itwin/core-common 3.0.0-extension.0 → 3.1.0-dev.11

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 (301) hide show
  1. package/CHANGELOG.md +84 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/BackgroundMapSettings.d.ts +1 -1
  4. package/lib/cjs/BackgroundMapSettings.d.ts.map +1 -1
  5. package/lib/cjs/BackgroundMapSettings.js.map +1 -1
  6. package/lib/cjs/ConcurrentQuery.d.ts +28 -11
  7. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
  8. package/lib/cjs/ConcurrentQuery.js +26 -12
  9. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  10. package/lib/cjs/ContextRealityModel.d.ts +36 -16
  11. package/lib/cjs/ContextRealityModel.d.ts.map +1 -1
  12. package/lib/cjs/ContextRealityModel.js +46 -7
  13. package/lib/cjs/ContextRealityModel.js.map +1 -1
  14. package/lib/cjs/DisplayStyleSettings.d.ts +30 -24
  15. package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
  16. package/lib/cjs/DisplayStyleSettings.js +43 -16
  17. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  18. package/lib/cjs/ECSqlReader.d.ts +17 -5
  19. package/lib/cjs/ECSqlReader.d.ts.map +1 -1
  20. package/lib/cjs/ECSqlReader.js +55 -22
  21. package/lib/cjs/ECSqlReader.js.map +1 -1
  22. package/lib/cjs/ECSqlTypes.d.ts +3 -3
  23. package/lib/cjs/ECSqlTypes.js +3 -3
  24. package/lib/cjs/ECSqlTypes.js.map +1 -1
  25. package/lib/cjs/ElementProps.d.ts +9 -0
  26. package/lib/cjs/ElementProps.d.ts.map +1 -1
  27. package/lib/cjs/ElementProps.js.map +1 -1
  28. package/lib/cjs/EntityProps.d.ts +8 -1
  29. package/lib/cjs/EntityProps.d.ts.map +1 -1
  30. package/lib/cjs/EntityProps.js.map +1 -1
  31. package/lib/cjs/Environment.d.ts +61 -0
  32. package/lib/cjs/Environment.d.ts.map +1 -0
  33. package/lib/cjs/Environment.js +74 -0
  34. package/lib/cjs/Environment.js.map +1 -0
  35. package/lib/cjs/FeatureSymbology.d.ts +97 -18
  36. package/lib/cjs/FeatureSymbology.d.ts.map +1 -1
  37. package/lib/cjs/FeatureSymbology.js +83 -27
  38. package/lib/cjs/FeatureSymbology.js.map +1 -1
  39. package/lib/cjs/GeoCoordinateServices.d.ts +66 -1
  40. package/lib/cjs/GeoCoordinateServices.d.ts.map +1 -1
  41. package/lib/cjs/GeoCoordinateServices.js +39 -1
  42. package/lib/cjs/GeoCoordinateServices.js.map +1 -1
  43. package/lib/cjs/Gradient.d.ts.map +1 -1
  44. package/lib/cjs/Gradient.js +20 -18
  45. package/lib/cjs/Gradient.js.map +1 -1
  46. package/lib/cjs/GroundPlane.d.ts +26 -15
  47. package/lib/cjs/GroundPlane.d.ts.map +1 -1
  48. package/lib/cjs/GroundPlane.js +40 -39
  49. package/lib/cjs/GroundPlane.js.map +1 -1
  50. package/lib/cjs/IModel.d.ts +33 -4
  51. package/lib/cjs/IModel.d.ts.map +1 -1
  52. package/lib/cjs/IModel.js +27 -10
  53. package/lib/cjs/IModel.js.map +1 -1
  54. package/lib/cjs/LightSettings.d.ts +59 -0
  55. package/lib/cjs/LightSettings.d.ts.map +1 -1
  56. package/lib/cjs/LightSettings.js +75 -6
  57. package/lib/cjs/LightSettings.js.map +1 -1
  58. package/lib/cjs/Localization.d.ts +1 -1
  59. package/lib/cjs/Localization.js.map +1 -1
  60. package/lib/cjs/MapLayerSettings.d.ts +2 -2
  61. package/lib/cjs/MapLayerSettings.js +2 -2
  62. package/lib/cjs/MapLayerSettings.js.map +1 -1
  63. package/lib/cjs/NativeAppProps.d.ts +2 -36
  64. package/lib/cjs/NativeAppProps.d.ts.map +1 -1
  65. package/lib/cjs/NativeAppProps.js.map +1 -1
  66. package/lib/cjs/PlanarClipMask.d.ts +73 -8
  67. package/lib/cjs/PlanarClipMask.d.ts.map +1 -1
  68. package/lib/cjs/PlanarClipMask.js +17 -24
  69. package/lib/cjs/PlanarClipMask.js.map +1 -1
  70. package/lib/cjs/RealityDataAccessProps.d.ts +42 -0
  71. package/lib/cjs/RealityDataAccessProps.d.ts.map +1 -0
  72. package/lib/cjs/RealityDataAccessProps.js +20 -0
  73. package/lib/cjs/RealityDataAccessProps.js.map +1 -0
  74. package/lib/cjs/RenderMaterial.d.ts +7 -7
  75. package/lib/cjs/RenderMaterial.d.ts.map +1 -1
  76. package/lib/cjs/RenderMaterial.js +10 -5
  77. package/lib/cjs/RenderMaterial.js.map +1 -1
  78. package/lib/cjs/RenderSchedule.d.ts +4 -0
  79. package/lib/cjs/RenderSchedule.d.ts.map +1 -1
  80. package/lib/cjs/RenderSchedule.js +5 -1
  81. package/lib/cjs/RenderSchedule.js.map +1 -1
  82. package/lib/cjs/RenderTexture.d.ts +8 -1
  83. package/lib/cjs/RenderTexture.d.ts.map +1 -1
  84. package/lib/cjs/RenderTexture.js.map +1 -1
  85. package/lib/cjs/SkyBox.d.ts +142 -34
  86. package/lib/cjs/SkyBox.d.ts.map +1 -1
  87. package/lib/cjs/SkyBox.js +192 -6
  88. package/lib/cjs/SkyBox.js.map +1 -1
  89. package/lib/cjs/TextureMapping.d.ts +3 -1
  90. package/lib/cjs/TextureMapping.d.ts.map +1 -1
  91. package/lib/cjs/TextureMapping.js +9 -6
  92. package/lib/cjs/TextureMapping.js.map +1 -1
  93. package/lib/cjs/TextureProps.d.ts +21 -2
  94. package/lib/cjs/TextureProps.d.ts.map +1 -1
  95. package/lib/cjs/TextureProps.js +19 -0
  96. package/lib/cjs/TextureProps.js.map +1 -1
  97. package/lib/cjs/ThematicDisplay.d.ts +6 -0
  98. package/lib/cjs/ThematicDisplay.d.ts.map +1 -1
  99. package/lib/cjs/ThematicDisplay.js +26 -0
  100. package/lib/cjs/ThematicDisplay.js.map +1 -1
  101. package/lib/cjs/TileProps.d.ts +6 -0
  102. package/lib/cjs/TileProps.d.ts.map +1 -1
  103. package/lib/cjs/TileProps.js.map +1 -1
  104. package/lib/cjs/ViewFlags.d.ts +8 -0
  105. package/lib/cjs/ViewFlags.d.ts.map +1 -1
  106. package/lib/cjs/ViewFlags.js +30 -10
  107. package/lib/cjs/ViewFlags.js.map +1 -1
  108. package/lib/cjs/core-common.d.ts +7 -0
  109. package/lib/cjs/core-common.d.ts.map +1 -1
  110. package/lib/cjs/core-common.js +7 -0
  111. package/lib/cjs/core-common.js.map +1 -1
  112. package/lib/cjs/geometry/AdditionalTransform.d.ts +1 -1
  113. package/lib/cjs/geometry/AdditionalTransform.js +1 -1
  114. package/lib/cjs/geometry/AdditionalTransform.js.map +1 -1
  115. package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts +25 -10
  116. package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  117. package/lib/cjs/geometry/CoordinateReferenceSystem.js +9 -7
  118. package/lib/cjs/geometry/CoordinateReferenceSystem.js.map +1 -1
  119. package/lib/cjs/geometry/ElementGeometry.d.ts +12 -8
  120. package/lib/cjs/geometry/ElementGeometry.d.ts.map +1 -1
  121. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  122. package/lib/cjs/geometry/FrustumPlanes.d.ts +1 -1
  123. package/lib/cjs/geometry/FrustumPlanes.d.ts.map +1 -1
  124. package/lib/cjs/geometry/FrustumPlanes.js +26 -13
  125. package/lib/cjs/geometry/FrustumPlanes.js.map +1 -1
  126. package/lib/cjs/geometry/GeometryStream.d.ts +3 -3
  127. package/lib/cjs/geometry/GeometryStream.d.ts.map +1 -1
  128. package/lib/cjs/geometry/GeometryStream.js.map +1 -1
  129. package/lib/cjs/ipc/IpcWebSocket.d.ts +12 -5
  130. package/lib/cjs/ipc/IpcWebSocket.d.ts.map +1 -1
  131. package/lib/cjs/ipc/IpcWebSocket.js +32 -8
  132. package/lib/cjs/ipc/IpcWebSocket.js.map +1 -1
  133. package/lib/cjs/ipc/IpcWebSocketTransport.d.ts +15 -0
  134. package/lib/cjs/ipc/IpcWebSocketTransport.d.ts.map +1 -0
  135. package/lib/cjs/ipc/IpcWebSocketTransport.js +142 -0
  136. package/lib/cjs/ipc/IpcWebSocketTransport.js.map +1 -0
  137. package/lib/cjs/rpc/core/RpcInvocation.d.ts +4 -4
  138. package/lib/cjs/rpc/core/RpcInvocation.d.ts.map +1 -1
  139. package/lib/cjs/rpc/core/RpcInvocation.js +3 -1
  140. package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
  141. package/lib/cjs/tile/ElementGraphics.d.ts +5 -1
  142. package/lib/cjs/tile/ElementGraphics.d.ts.map +1 -1
  143. package/lib/cjs/tile/ElementGraphics.js.map +1 -1
  144. package/lib/cjs/tile/GltfTileIO.d.ts +16 -79
  145. package/lib/cjs/tile/GltfTileIO.d.ts.map +1 -1
  146. package/lib/cjs/tile/GltfTileIO.js +72 -153
  147. package/lib/cjs/tile/GltfTileIO.js.map +1 -1
  148. package/lib/cjs/tile/TileMetadata.d.ts +20 -8
  149. package/lib/cjs/tile/TileMetadata.d.ts.map +1 -1
  150. package/lib/cjs/tile/TileMetadata.js +50 -53
  151. package/lib/cjs/tile/TileMetadata.js.map +1 -1
  152. package/lib/esm/BackgroundMapSettings.d.ts +1 -1
  153. package/lib/esm/BackgroundMapSettings.d.ts.map +1 -1
  154. package/lib/esm/BackgroundMapSettings.js.map +1 -1
  155. package/lib/esm/ConcurrentQuery.d.ts +28 -11
  156. package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
  157. package/lib/esm/ConcurrentQuery.js +26 -12
  158. package/lib/esm/ConcurrentQuery.js.map +1 -1
  159. package/lib/esm/ContextRealityModel.d.ts +36 -16
  160. package/lib/esm/ContextRealityModel.d.ts.map +1 -1
  161. package/lib/esm/ContextRealityModel.js +45 -6
  162. package/lib/esm/ContextRealityModel.js.map +1 -1
  163. package/lib/esm/DisplayStyleSettings.d.ts +30 -24
  164. package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
  165. package/lib/esm/DisplayStyleSettings.js +43 -16
  166. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  167. package/lib/esm/ECSqlReader.d.ts +17 -5
  168. package/lib/esm/ECSqlReader.d.ts.map +1 -1
  169. package/lib/esm/ECSqlReader.js +56 -23
  170. package/lib/esm/ECSqlReader.js.map +1 -1
  171. package/lib/esm/ECSqlTypes.d.ts +3 -3
  172. package/lib/esm/ECSqlTypes.js +3 -3
  173. package/lib/esm/ECSqlTypes.js.map +1 -1
  174. package/lib/esm/ElementProps.d.ts +9 -0
  175. package/lib/esm/ElementProps.d.ts.map +1 -1
  176. package/lib/esm/ElementProps.js.map +1 -1
  177. package/lib/esm/EntityProps.d.ts +8 -1
  178. package/lib/esm/EntityProps.d.ts.map +1 -1
  179. package/lib/esm/EntityProps.js.map +1 -1
  180. package/lib/esm/Environment.d.ts +61 -0
  181. package/lib/esm/Environment.d.ts.map +1 -0
  182. package/lib/esm/Environment.js +70 -0
  183. package/lib/esm/Environment.js.map +1 -0
  184. package/lib/esm/FeatureSymbology.d.ts +97 -18
  185. package/lib/esm/FeatureSymbology.d.ts.map +1 -1
  186. package/lib/esm/FeatureSymbology.js +84 -28
  187. package/lib/esm/FeatureSymbology.js.map +1 -1
  188. package/lib/esm/GeoCoordinateServices.d.ts +66 -1
  189. package/lib/esm/GeoCoordinateServices.d.ts.map +1 -1
  190. package/lib/esm/GeoCoordinateServices.js +39 -1
  191. package/lib/esm/GeoCoordinateServices.js.map +1 -1
  192. package/lib/esm/Gradient.d.ts.map +1 -1
  193. package/lib/esm/Gradient.js +20 -18
  194. package/lib/esm/Gradient.js.map +1 -1
  195. package/lib/esm/GroundPlane.d.ts +26 -15
  196. package/lib/esm/GroundPlane.d.ts.map +1 -1
  197. package/lib/esm/GroundPlane.js +40 -39
  198. package/lib/esm/GroundPlane.js.map +1 -1
  199. package/lib/esm/IModel.d.ts +33 -4
  200. package/lib/esm/IModel.d.ts.map +1 -1
  201. package/lib/esm/IModel.js +27 -10
  202. package/lib/esm/IModel.js.map +1 -1
  203. package/lib/esm/LightSettings.d.ts +59 -0
  204. package/lib/esm/LightSettings.d.ts.map +1 -1
  205. package/lib/esm/LightSettings.js +74 -6
  206. package/lib/esm/LightSettings.js.map +1 -1
  207. package/lib/esm/Localization.d.ts +1 -1
  208. package/lib/esm/Localization.js.map +1 -1
  209. package/lib/esm/MapLayerSettings.d.ts +2 -2
  210. package/lib/esm/MapLayerSettings.js +2 -2
  211. package/lib/esm/MapLayerSettings.js.map +1 -1
  212. package/lib/esm/NativeAppProps.d.ts +2 -36
  213. package/lib/esm/NativeAppProps.d.ts.map +1 -1
  214. package/lib/esm/NativeAppProps.js.map +1 -1
  215. package/lib/esm/PlanarClipMask.d.ts +73 -8
  216. package/lib/esm/PlanarClipMask.d.ts.map +1 -1
  217. package/lib/esm/PlanarClipMask.js +17 -24
  218. package/lib/esm/PlanarClipMask.js.map +1 -1
  219. package/lib/esm/RealityDataAccessProps.d.ts +42 -0
  220. package/lib/esm/RealityDataAccessProps.d.ts.map +1 -0
  221. package/lib/esm/RealityDataAccessProps.js +17 -0
  222. package/lib/esm/RealityDataAccessProps.js.map +1 -0
  223. package/lib/esm/RenderMaterial.d.ts +7 -7
  224. package/lib/esm/RenderMaterial.d.ts.map +1 -1
  225. package/lib/esm/RenderMaterial.js +10 -5
  226. package/lib/esm/RenderMaterial.js.map +1 -1
  227. package/lib/esm/RenderSchedule.d.ts +4 -0
  228. package/lib/esm/RenderSchedule.d.ts.map +1 -1
  229. package/lib/esm/RenderSchedule.js +5 -1
  230. package/lib/esm/RenderSchedule.js.map +1 -1
  231. package/lib/esm/RenderTexture.d.ts +8 -1
  232. package/lib/esm/RenderTexture.d.ts.map +1 -1
  233. package/lib/esm/RenderTexture.js.map +1 -1
  234. package/lib/esm/SkyBox.d.ts +142 -34
  235. package/lib/esm/SkyBox.d.ts.map +1 -1
  236. package/lib/esm/SkyBox.js +187 -5
  237. package/lib/esm/SkyBox.js.map +1 -1
  238. package/lib/esm/TextureMapping.d.ts +3 -1
  239. package/lib/esm/TextureMapping.d.ts.map +1 -1
  240. package/lib/esm/TextureMapping.js +9 -6
  241. package/lib/esm/TextureMapping.js.map +1 -1
  242. package/lib/esm/TextureProps.d.ts +21 -2
  243. package/lib/esm/TextureProps.d.ts.map +1 -1
  244. package/lib/esm/TextureProps.js +18 -1
  245. package/lib/esm/TextureProps.js.map +1 -1
  246. package/lib/esm/ThematicDisplay.d.ts +6 -0
  247. package/lib/esm/ThematicDisplay.d.ts.map +1 -1
  248. package/lib/esm/ThematicDisplay.js +26 -0
  249. package/lib/esm/ThematicDisplay.js.map +1 -1
  250. package/lib/esm/TileProps.d.ts +6 -0
  251. package/lib/esm/TileProps.d.ts.map +1 -1
  252. package/lib/esm/TileProps.js.map +1 -1
  253. package/lib/esm/ViewFlags.d.ts +8 -0
  254. package/lib/esm/ViewFlags.d.ts.map +1 -1
  255. package/lib/esm/ViewFlags.js +30 -10
  256. package/lib/esm/ViewFlags.js.map +1 -1
  257. package/lib/esm/core-common.d.ts +7 -0
  258. package/lib/esm/core-common.d.ts.map +1 -1
  259. package/lib/esm/core-common.js +7 -0
  260. package/lib/esm/core-common.js.map +1 -1
  261. package/lib/esm/geometry/AdditionalTransform.d.ts +1 -1
  262. package/lib/esm/geometry/AdditionalTransform.js +1 -1
  263. package/lib/esm/geometry/AdditionalTransform.js.map +1 -1
  264. package/lib/esm/geometry/CoordinateReferenceSystem.d.ts +25 -10
  265. package/lib/esm/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  266. package/lib/esm/geometry/CoordinateReferenceSystem.js +9 -7
  267. package/lib/esm/geometry/CoordinateReferenceSystem.js.map +1 -1
  268. package/lib/esm/geometry/ElementGeometry.d.ts +12 -8
  269. package/lib/esm/geometry/ElementGeometry.d.ts.map +1 -1
  270. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  271. package/lib/esm/geometry/FrustumPlanes.d.ts +1 -1
  272. package/lib/esm/geometry/FrustumPlanes.d.ts.map +1 -1
  273. package/lib/esm/geometry/FrustumPlanes.js +26 -13
  274. package/lib/esm/geometry/FrustumPlanes.js.map +1 -1
  275. package/lib/esm/geometry/GeometryStream.d.ts +3 -3
  276. package/lib/esm/geometry/GeometryStream.d.ts.map +1 -1
  277. package/lib/esm/geometry/GeometryStream.js.map +1 -1
  278. package/lib/esm/ipc/IpcWebSocket.d.ts +12 -5
  279. package/lib/esm/ipc/IpcWebSocket.d.ts.map +1 -1
  280. package/lib/esm/ipc/IpcWebSocket.js +31 -6
  281. package/lib/esm/ipc/IpcWebSocket.js.map +1 -1
  282. package/lib/esm/ipc/IpcWebSocketTransport.d.ts +15 -0
  283. package/lib/esm/ipc/IpcWebSocketTransport.d.ts.map +1 -0
  284. package/lib/esm/ipc/IpcWebSocketTransport.js +138 -0
  285. package/lib/esm/ipc/IpcWebSocketTransport.js.map +1 -0
  286. package/lib/esm/rpc/core/RpcInvocation.d.ts +4 -4
  287. package/lib/esm/rpc/core/RpcInvocation.d.ts.map +1 -1
  288. package/lib/esm/rpc/core/RpcInvocation.js +3 -1
  289. package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
  290. package/lib/esm/tile/ElementGraphics.d.ts +5 -1
  291. package/lib/esm/tile/ElementGraphics.d.ts.map +1 -1
  292. package/lib/esm/tile/ElementGraphics.js.map +1 -1
  293. package/lib/esm/tile/GltfTileIO.d.ts +16 -79
  294. package/lib/esm/tile/GltfTileIO.d.ts.map +1 -1
  295. package/lib/esm/tile/GltfTileIO.js +70 -149
  296. package/lib/esm/tile/GltfTileIO.js.map +1 -1
  297. package/lib/esm/tile/TileMetadata.d.ts +20 -8
  298. package/lib/esm/tile/TileMetadata.d.ts.map +1 -1
  299. package/lib/esm/tile/TileMetadata.js +50 -53
  300. package/lib/esm/tile/TileMetadata.js.map +1 -1
  301. package/package.json +10 -11
@@ -1 +1 @@
1
- {"version":3,"file":"IpcWebSocket.js","sourceRoot":"","sources":["../../../src/ipc/IpcWebSocket.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/** @packageDocumentation\r\n * @module IpcSocket\r\n */\r\n\r\nimport { IpcListener, IpcSocket, IpcSocketBackend, IpcSocketFrontend, RemoveFunction } from \"./IpcSocket\";\r\n\r\n/** @internal */\r\nexport abstract class IpcWebSocketTransport {\r\n public abstract send(message: IpcWebSocketMessage): void;\r\n}\r\n\r\n/** @internal */\r\nexport enum IpcWebSocketMessageType {\r\n Send,\r\n Push,\r\n Invoke,\r\n Response\r\n}\r\n\r\n/** @internal */\r\nexport interface IpcWebSocketMessage {\r\n type: IpcWebSocketMessageType;\r\n request?: number;\r\n response?: number;\r\n channel: string;\r\n method?: string;\r\n data?: any[];\r\n}\r\n\r\n/** @internal */\r\nexport abstract class IpcWebSocket implements IpcSocket {\r\n public static transport: IpcWebSocketTransport;\r\n public static receivers: Set<(evt: Event, message: IpcWebSocketMessage) => void> = new Set();\r\n\r\n protected _channels = new Map<string, Set<IpcListener>>();\r\n\r\n public constructor() {\r\n IpcWebSocket.receivers.add(async (e, m) => this.broadcast(e, m));\r\n }\r\n\r\n public abstract send(channel: string, ...data: any[]): void;\r\n\r\n public addListener(channel: string, listener: IpcListener): RemoveFunction {\r\n let listeners = this._channels.get(channel);\r\n if (!listeners) {\r\n listeners = new Set();\r\n this._channels.set(channel, listeners);\r\n }\r\n\r\n if (!listeners.has(listener))\r\n listeners.add(listener);\r\n\r\n return () => listeners!.delete(listener);\r\n }\r\n\r\n public removeListener(channel: string, listener: IpcListener) {\r\n this._channels.get(channel)?.delete(listener);\r\n }\r\n\r\n private async broadcast(evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Send && message.type !== IpcWebSocketMessageType.Push)\r\n return;\r\n\r\n const handlers = this._channels.get(message.channel);\r\n if (!handlers)\r\n return;\r\n\r\n let arg = message.data;\r\n if (typeof (arg) === \"undefined\")\r\n arg = [];\r\n\r\n for (const handler of handlers)\r\n handler(evt, ...arg);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class IpcWebSocketFrontend extends IpcWebSocket implements IpcSocketFrontend {\r\n private _nextRequest = 0;\r\n private _pendingRequests = new Map<number, (response: any) => void>();\r\n\r\n public constructor() {\r\n super();\r\n IpcWebSocket.receivers.add(async (e, m) => this.dispatch(e, m));\r\n }\r\n\r\n public send(channel: string, ...data: any[]): void {\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Send, channel, data });\r\n }\r\n\r\n public async invoke(channel: string, methodName: string, ...args: any[]): Promise<any> {\r\n const requestId = ++this._nextRequest;\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Invoke, channel, method: methodName, data: args, request: requestId });\r\n\r\n return new Promise((resolve) => {\r\n this._pendingRequests.set(requestId, resolve);\r\n });\r\n }\r\n\r\n private async dispatch(_evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Response || !message.response)\r\n return;\r\n\r\n const pendingHandler = this._pendingRequests.get(message.response);\r\n if (!pendingHandler)\r\n return;\r\n\r\n this._pendingRequests.delete(message.response);\r\n pendingHandler(message.data);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class IpcWebSocketBackend extends IpcWebSocket implements IpcSocketBackend {\r\n private _handlers = new Map<string, (event: Event, methodName: string, ...args: any[]) => Promise<any>>();\r\n\r\n public constructor() {\r\n super();\r\n IpcWebSocket.receivers.add(async (e, m) => this.dispatch(e, m));\r\n }\r\n\r\n public send(channel: string, ...data: any[]): void {\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Push, channel, data });\r\n }\r\n\r\n public handle(channel: string, handler: (event: Event, methodName: string, ...args: any[]) => Promise<any>): RemoveFunction {\r\n this._handlers.set(channel, handler);\r\n\r\n return () => {\r\n if (this._handlers.get(channel) === handler)\r\n this._handlers.delete(channel);\r\n };\r\n }\r\n\r\n private async dispatch(_evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Invoke || !message.method)\r\n return;\r\n\r\n const handler = this._handlers.get(message.channel);\r\n if (!handler)\r\n return;\r\n\r\n let args = message.data;\r\n if (typeof (args) === \"undefined\")\r\n args = [];\r\n\r\n const response = await handler({} as any, message.method, ...args);\r\n\r\n IpcWebSocket.transport.send({\r\n type: IpcWebSocketMessageType.Response,\r\n channel: message.channel,\r\n response: message.request,\r\n data: response,\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IpcWebSocket.js","sourceRoot":"","sources":["../../../src/ipc/IpcWebSocket.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,gBAAgB;AAChB,IAAY,uBAOX;AAPD,WAAY,uBAAuB;IACjC,qEAAI,CAAA;IACJ,qEAAI,CAAA;IACJ,yEAAM,CAAA;IACN,6EAAQ,CAAA;IACR,6EAAQ,CAAA;IACR,+EAAS,CAAA;AACX,CAAC,EAPW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAOlC;AAaD,gBAAgB;AAChB,IAAiB,mBAAmB,CAkBnC;AAlBD,WAAiB,mBAAmB;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEf,SAAgB,IAAI;QAClB,OAAO,EAAE,KAAK,CAAC;IACjB,CAAC;IAFe,wBAAI,OAEnB,CAAA;IAED,SAAgB,QAAQ;QACtB,OAAO,EAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACpG,CAAC;IAFe,4BAAQ,WAEvB,CAAA;IAED,SAAgB,SAAS;QACvB,OAAO,EAAE,IAAI,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACrG,CAAC;IAFe,6BAAS,YAExB,CAAA;IAED,SAAgB,IAAI,CAAC,OAA4B;QAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,SAAS,CAAC;IACjH,CAAC;IAFe,wBAAI,OAEnB,CAAA;AACH,CAAC,EAlBgB,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAkBnC;AAED,gBAAgB;AAChB,MAAsB,YAAY;IAMhC;QAFU,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;QAGxD,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAIM,WAAW,CAAC,OAAe,EAAE,QAAqB;QACvD,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SACxC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1B,OAAO,GAAG,EAAE,CAAC,SAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,OAAe,EAAE,QAAqB;;QAC1D,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,GAAU,EAAE,OAA4B;QAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI;YAChG,OAAO;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ;YACX,OAAO;QAET,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW;YAC9B,GAAG,GAAG,EAAE,CAAC;QAEX,KAAK,MAAM,OAAO,IAAI,QAAQ;YAC5B,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;IACzB,CAAC;;AA3CH,oCA4CC;AA1Ce,sBAAS,GAA4D,IAAI,GAAG,EAAE,CAAC;AA4C/F,gBAAgB;AAChB,MAAa,oBAAqB,SAAQ,YAAY;IAIpD;QACE,KAAK,EAAE,CAAC;QAJF,iBAAY,GAAG,CAAC,CAAC;QACjB,qBAAgB,GAAG,IAAI,GAAG,EAAmC,CAAC;QAIpE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC5C,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/F,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,UAAkB,EAAE,GAAG,IAAW;QACrE,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;QACtC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC5C,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE7I,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAW,EAAE,OAA4B;QAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ;YACxE,OAAO;QAET,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc;YACjB,OAAO;QAET,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAnCD,oDAmCC;AAED,gBAAgB;AAChB,MAAa,mBAAoB,SAAQ,YAAY;IAGnD;QACE,KAAK,EAAE,CAAC;QAHF,cAAS,GAAG,IAAI,GAAG,EAA8E,CAAC;QAIxG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEM,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC5C,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/F,CAAC;IAEM,MAAM,CAAC,OAAe,EAAE,OAA2E;QACxG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAErC,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO;gBACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAW,EAAE,OAA4B;QAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM;YACpE,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YACV,OAAO;QAET,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACxB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW;YAC/B,IAAI,GAAG,EAAE,CAAC;QAEZ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAS,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAE5C,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,IAAI,EAAE,uBAAuB,CAAC,QAAQ;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,IAAI,EAAE,QAAQ;YACd,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;CACF;AA9CD,kDA8CC","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/** @packageDocumentation\r\n * @module IpcSocket\r\n */\r\n\r\nimport { IpcListener, IpcSocket, IpcSocketBackend, IpcSocketFrontend, RemoveFunction } from \"./IpcSocket\";\r\nimport { IpcWebSocketTransport } from \"./IpcWebSocketTransport\";\r\n\r\n/** @internal */\r\nexport enum IpcWebSocketMessageType {\r\n Send,\r\n Push,\r\n Invoke,\r\n Response,\r\n Internal,\r\n Duplicate\r\n}\r\n\r\n/** @internal */\r\nexport interface IpcWebSocketMessage {\r\n type: IpcWebSocketMessageType;\r\n request?: number;\r\n response?: number;\r\n channel: string;\r\n method?: string;\r\n data?: any[];\r\n sequence: number;\r\n}\r\n\r\n/** @internal */\r\nexport namespace IpcWebSocketMessage {\r\n let _next = -1;\r\n\r\n export function next(): number {\r\n return ++_next;\r\n }\r\n\r\n export function internal(): IpcWebSocketMessage {\r\n return { type: IpcWebSocketMessageType.Internal, channel: \"\", sequence: Number.MIN_SAFE_INTEGER };\r\n }\r\n\r\n export function duplicate(): IpcWebSocketMessage {\r\n return { type: IpcWebSocketMessageType.Duplicate, channel: \"\", sequence: Number.MIN_SAFE_INTEGER };\r\n }\r\n\r\n export function skip(message: IpcWebSocketMessage): boolean {\r\n return message.type === IpcWebSocketMessageType.Internal || message.type === IpcWebSocketMessageType.Duplicate;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport abstract class IpcWebSocket implements IpcSocket {\r\n public static transport: IpcWebSocketTransport;\r\n public static receivers: Set<(evt: Event, message: IpcWebSocketMessage) => void> = new Set();\r\n\r\n protected _channels = new Map<string, Set<IpcListener>>();\r\n\r\n public constructor() {\r\n IpcWebSocket.receivers.add(async (e, m) => this.broadcast(e, m));\r\n }\r\n\r\n public abstract send(channel: string, ...data: any[]): void;\r\n\r\n public addListener(channel: string, listener: IpcListener): RemoveFunction {\r\n let listeners = this._channels.get(channel);\r\n if (!listeners) {\r\n listeners = new Set();\r\n this._channels.set(channel, listeners);\r\n }\r\n\r\n if (!listeners.has(listener))\r\n listeners.add(listener);\r\n\r\n return () => listeners!.delete(listener);\r\n }\r\n\r\n public removeListener(channel: string, listener: IpcListener) {\r\n this._channels.get(channel)?.delete(listener);\r\n }\r\n\r\n private async broadcast(evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Send && message.type !== IpcWebSocketMessageType.Push)\r\n return;\r\n\r\n const handlers = this._channels.get(message.channel);\r\n if (!handlers)\r\n return;\r\n\r\n let arg = message.data;\r\n if (typeof (arg) === \"undefined\")\r\n arg = [];\r\n\r\n for (const handler of handlers)\r\n handler(evt, ...arg);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class IpcWebSocketFrontend extends IpcWebSocket implements IpcSocketFrontend {\r\n private _nextRequest = 0;\r\n private _pendingRequests = new Map<number, (response: any) => void>();\r\n\r\n public constructor() {\r\n super();\r\n IpcWebSocket.receivers.add(async (e, m) => this.dispatch(e, m));\r\n }\r\n\r\n public send(channel: string, ...data: any[]): void {\r\n const sequence = IpcWebSocketMessage.next();\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Send, channel, data, sequence });\r\n }\r\n\r\n public async invoke(channel: string, methodName: string, ...args: any[]): Promise<any> {\r\n const requestId = ++this._nextRequest;\r\n const sequence = IpcWebSocketMessage.next();\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Invoke, channel, method: methodName, data: args, request: requestId, sequence });\r\n\r\n return new Promise((resolve) => {\r\n this._pendingRequests.set(requestId, resolve);\r\n });\r\n }\r\n\r\n private async dispatch(_evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Response || !message.response)\r\n return;\r\n\r\n const pendingHandler = this._pendingRequests.get(message.response);\r\n if (!pendingHandler)\r\n return;\r\n\r\n this._pendingRequests.delete(message.response);\r\n pendingHandler(message.data);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class IpcWebSocketBackend extends IpcWebSocket implements IpcSocketBackend {\r\n private _handlers = new Map<string, (event: Event, methodName: string, ...args: any[]) => Promise<any>>();\r\n\r\n public constructor() {\r\n super();\r\n IpcWebSocket.receivers.add(async (e, m) => this.dispatch(e, m));\r\n }\r\n\r\n public send(channel: string, ...data: any[]): void {\r\n const sequence = IpcWebSocketMessage.next();\r\n IpcWebSocket.transport.send({ type: IpcWebSocketMessageType.Push, channel, data, sequence });\r\n }\r\n\r\n public handle(channel: string, handler: (event: Event, methodName: string, ...args: any[]) => Promise<any>): RemoveFunction {\r\n this._handlers.set(channel, handler);\r\n\r\n return () => {\r\n if (this._handlers.get(channel) === handler)\r\n this._handlers.delete(channel);\r\n };\r\n }\r\n\r\n private async dispatch(_evt: Event, message: IpcWebSocketMessage) {\r\n if (message.type !== IpcWebSocketMessageType.Invoke || !message.method)\r\n return;\r\n\r\n const handler = this._handlers.get(message.channel);\r\n if (!handler)\r\n return;\r\n\r\n let args = message.data;\r\n if (typeof (args) === \"undefined\")\r\n args = [];\r\n\r\n const response = await handler({} as any, message.method, ...args);\r\n\r\n const sequence = IpcWebSocketMessage.next();\r\n\r\n IpcWebSocket.transport.send({\r\n type: IpcWebSocketMessageType.Response,\r\n channel: message.channel,\r\n response: message.request,\r\n data: response,\r\n sequence,\r\n });\r\n }\r\n}\r\n"]}
@@ -0,0 +1,15 @@
1
+ /** @packageDocumentation
2
+ * @module IpcSocket
3
+ */
4
+ import { IpcWebSocketMessage } from "./IpcWebSocket";
5
+ /** @internal */
6
+ export declare abstract class IpcWebSocketTransport {
7
+ private _partial?;
8
+ private _received;
9
+ private _outstanding;
10
+ abstract send(message: IpcWebSocketMessage): void;
11
+ protected unwrap(data: any): any;
12
+ protected notifyIncoming(data: any): Promise<IpcWebSocketMessage>;
13
+ protected serialize(data: IpcWebSocketMessage): any[];
14
+ }
15
+ //# sourceMappingURL=IpcWebSocketTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpcWebSocketTransport.d.ts","sourceRoot":"","sources":["../../../src/ipc/IpcWebSocketTransport.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,gBAAgB;AAChB,8BAAsB,qBAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAK;aAET,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAExD,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG;cAIV,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkCvE,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG,EAAE;CAOtD"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module IpcSocket
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.IpcWebSocketTransport = void 0;
11
+ const IpcWebSocket_1 = require("./IpcWebSocket");
12
+ let parts = [];
13
+ /** @internal */
14
+ class IpcWebSocketTransport {
15
+ constructor() {
16
+ this._received = [];
17
+ this._outstanding = 0;
18
+ }
19
+ unwrap(data) {
20
+ return (typeof (Blob) !== "undefined" && data instanceof Blob) ? data.arrayBuffer() : data;
21
+ }
22
+ async notifyIncoming(data) {
23
+ if (this._partial) {
24
+ this._received.push(data);
25
+ --this._outstanding;
26
+ if (this._outstanding === 0) {
27
+ const partial = this._partial;
28
+ const received = this._received;
29
+ this._partial = undefined;
30
+ this._received = [];
31
+ await Promise.all(received.map(async (v, i, a) => a[i] = await this.unwrap(v)));
32
+ parts = received;
33
+ const message = JSON.parse(partial, reviver);
34
+ parts.length = 0;
35
+ return InSentOrder.deliver(message);
36
+ }
37
+ else {
38
+ return IpcWebSocket_1.IpcWebSocketMessage.internal();
39
+ }
40
+ }
41
+ else {
42
+ const [serialized, followers] = JSON.parse(data);
43
+ if (followers) {
44
+ this._partial = serialized;
45
+ this._outstanding = followers;
46
+ return IpcWebSocket_1.IpcWebSocketMessage.internal();
47
+ }
48
+ else {
49
+ const message = JSON.parse(serialized, reviver);
50
+ return InSentOrder.deliver(message);
51
+ }
52
+ }
53
+ }
54
+ serialize(data) {
55
+ parts.length = 0;
56
+ const objects = JSON.stringify(data, replacer);
57
+ const value = [JSON.stringify([objects, parts.length]), ...parts];
58
+ parts.length = 0;
59
+ return value;
60
+ }
61
+ }
62
+ exports.IpcWebSocketTransport = IpcWebSocketTransport;
63
+ const types = [Uint8Array, Int8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, DataView];
64
+ function identify(value) { return Buffer.isBuffer(value) ? 0 : types.indexOf(value.constructor); }
65
+ function lookup(value) { return types[value.type]; }
66
+ function replacer(_key, value) {
67
+ const asBinary = replaceBinary(value);
68
+ if (asBinary) {
69
+ return asBinary;
70
+ }
71
+ return value;
72
+ }
73
+ function reviver(_key, value) {
74
+ if (typeof (value) === "object" && value !== null && value.hasOwnProperty("ipc") && value.ipc === "binary") {
75
+ return reviveBinary(value);
76
+ }
77
+ return value;
78
+ }
79
+ function replaceBinary(value) {
80
+ if (ArrayBuffer.isView(value) || Buffer.isBuffer(value)) {
81
+ const index = parts.push(value) - 1;
82
+ const type = identify(value);
83
+ return { ipc: "binary", type, index };
84
+ }
85
+ else {
86
+ return undefined;
87
+ }
88
+ }
89
+ function reviveBinary(value) {
90
+ const constructor = lookup(value);
91
+ const part = parts[value.index];
92
+ return new constructor(part);
93
+ }
94
+ function makePromise() {
95
+ let resolve = () => { };
96
+ let reject = () => { };
97
+ const promise = new Promise((res, rej) => { resolve = res; reject = rej; });
98
+ return { promise, resolve, reject };
99
+ }
100
+ /* Reconstructing the sequence in which messages were sent is necessary since
101
+ the binary data for a message has to be awaited in IpcWebSocketTransport.unwrap. */
102
+ class InSentOrder {
103
+ constructor(message) {
104
+ this.release = () => { };
105
+ this.duplicate = false;
106
+ this.sequence = message.sequence;
107
+ const { promise, resolve } = makePromise();
108
+ this.message = promise;
109
+ this.release = () => {
110
+ const value = this.duplicate ? IpcWebSocket_1.IpcWebSocketMessage.duplicate() : message;
111
+ resolve(value);
112
+ };
113
+ }
114
+ static get _next() { return this._last + 1; }
115
+ static async deliver(message) {
116
+ const entry = new InSentOrder(message);
117
+ this._queue.push(entry);
118
+ this._queue.sort((a, b) => a.sequence - b.sequence);
119
+ while (this._queue.length !== 0) {
120
+ const next = this._queue[0];
121
+ const duplicate = next.sequence <= this._last;
122
+ const match = next.sequence === this._next;
123
+ if (duplicate) {
124
+ next.duplicate = true;
125
+ }
126
+ else if (match) {
127
+ ++this._last;
128
+ }
129
+ if (duplicate || match) {
130
+ this._queue.shift();
131
+ next.release();
132
+ }
133
+ else {
134
+ break;
135
+ }
136
+ }
137
+ return entry.message;
138
+ }
139
+ }
140
+ InSentOrder._queue = [];
141
+ InSentOrder._last = -1;
142
+ //# sourceMappingURL=IpcWebSocketTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpcWebSocketTransport.js","sourceRoot":"","sources":["../../../src/ipc/IpcWebSocketTransport.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/** @packageDocumentation\r\n * @module IpcSocket\r\n */\r\n\r\nimport { IpcWebSocketMessage } from \"./IpcWebSocket\";\r\n\r\nlet parts: any[] = [];\r\n\r\n/** @internal */\r\nexport abstract class IpcWebSocketTransport {\r\n private _partial?: string;\r\n private _received: any[] = [];\r\n private _outstanding = 0;\r\n\r\n public abstract send(message: IpcWebSocketMessage): void;\r\n\r\n protected unwrap(data: any) {\r\n return (typeof (Blob) !== \"undefined\" && data instanceof Blob) ? data.arrayBuffer() : data;\r\n }\r\n\r\n protected async notifyIncoming(data: any): Promise<IpcWebSocketMessage> {\r\n if (this._partial) {\r\n this._received.push(data);\r\n --this._outstanding;\r\n\r\n if (this._outstanding === 0) {\r\n const partial = this._partial;\r\n const received = this._received;\r\n this._partial = undefined;\r\n this._received = [];\r\n await Promise.all(received.map(async (v, i, a) => a[i] = await this.unwrap(v)));\r\n\r\n parts = received;\r\n const message: IpcWebSocketMessage = JSON.parse(partial, reviver);\r\n parts.length = 0;\r\n\r\n return InSentOrder.deliver(message);\r\n } else {\r\n return IpcWebSocketMessage.internal();\r\n }\r\n } else {\r\n const [serialized, followers] = JSON.parse(data);\r\n\r\n if (followers) {\r\n this._partial = serialized;\r\n this._outstanding = followers;\r\n return IpcWebSocketMessage.internal();\r\n } else {\r\n const message: IpcWebSocketMessage = JSON.parse(serialized, reviver);\r\n return InSentOrder.deliver(message);\r\n }\r\n }\r\n }\r\n\r\n protected serialize(data: IpcWebSocketMessage): any[] {\r\n parts.length = 0;\r\n const objects = JSON.stringify(data, replacer);\r\n const value = [JSON.stringify([objects, parts.length]), ...parts];\r\n parts.length = 0;\r\n return value;\r\n }\r\n}\r\n\r\ninterface Marker { ipc: \"binary\", type: number, index: number }\r\nconst types = [Uint8Array, Int8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, DataView];\r\nfunction identify(value: any) { return Buffer.isBuffer(value) ? 0 : types.indexOf(value.constructor); }\r\nfunction lookup(value: Marker) { return types[value.type]; }\r\n\r\nfunction replacer(this: any, _key: string, value: any) {\r\n const asBinary = replaceBinary(value);\r\n if (asBinary) {\r\n return asBinary;\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction reviver(_key: string, value: any) {\r\n if (typeof (value) === \"object\" && value !== null && value.hasOwnProperty(\"ipc\") && value.ipc === \"binary\") {\r\n return reviveBinary(value);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction replaceBinary(value: any): Marker | undefined {\r\n if (ArrayBuffer.isView(value) || Buffer.isBuffer(value)) {\r\n const index = parts.push(value) - 1;\r\n const type = identify(value);\r\n return { ipc: \"binary\", type, index };\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction reviveBinary(value: Marker): ArrayBufferView {\r\n const constructor = lookup(value);\r\n const part = parts[value.index];\r\n return new constructor(part);\r\n}\r\n\r\nfunction makePromise<T>() {\r\n let resolve: (value: T | PromiseLike<T>) => void = () => { };\r\n let reject: (reason?: any) => void = () => { };\r\n const promise = new Promise<T>((res, rej) => { resolve = res; reject = rej; });\r\n return { promise, resolve, reject };\r\n}\r\n\r\n/* Reconstructing the sequence in which messages were sent is necessary since\r\n the binary data for a message has to be awaited in IpcWebSocketTransport.unwrap. */\r\nclass InSentOrder {\r\n private static _queue: InSentOrder[] = [];\r\n private static _last = -1;\r\n private static get _next() { return this._last + 1; }\r\n\r\n public static async deliver(message: IpcWebSocketMessage): Promise<IpcWebSocketMessage> {\r\n const entry = new InSentOrder(message);\r\n this._queue.push(entry);\r\n this._queue.sort((a, b) => a.sequence - b.sequence);\r\n\r\n while (this._queue.length !== 0) {\r\n const next = this._queue[0];\r\n const duplicate = next.sequence <= this._last;\r\n const match = next.sequence === this._next;\r\n\r\n if (duplicate) {\r\n next.duplicate = true;\r\n } else if (match) {\r\n ++this._last;\r\n }\r\n\r\n if (duplicate || match) {\r\n this._queue.shift();\r\n next.release();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return entry.message;\r\n }\r\n\r\n public release = () => { };\r\n public sequence: number;\r\n public duplicate = false;\r\n public message: Promise<IpcWebSocketMessage>;\r\n\r\n private constructor(message: IpcWebSocketMessage) {\r\n this.sequence = message.sequence;\r\n\r\n const { promise, resolve } = makePromise<IpcWebSocketMessage>();\r\n this.message = promise;\r\n\r\n this.release = () => {\r\n const value = this.duplicate ? IpcWebSocketMessage.duplicate() : message;\r\n resolve(value);\r\n };\r\n }\r\n}\r\n"]}
@@ -68,10 +68,10 @@ export declare class RpcInvocation {
68
68
  constructor(protocol: RpcProtocol, request: SerializedRpcRequest);
69
69
  private handleUnknownOperation;
70
70
  static sanitizeForLog(activity?: RpcActivity): {
71
- activityId: string;
72
- sessionId: string;
73
- applicationId: string;
74
- applicationVersion: string;
71
+ ActivityId: string;
72
+ SessionId: string;
73
+ ApplicationId: string;
74
+ ApplicationVersion: string;
75
75
  rpcMethod: string | undefined;
76
76
  } | undefined;
77
77
  private resolve;
@@ -1 +1 @@
1
- {"version":3,"file":"RpcInvocation.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcInvocation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA+B,UAAU,EAA4C,MAAM,qBAAqB,CAAC;AAIrI,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAoB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGzF;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,gBAAgB;AAChB,oBAAY,cAAc,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7F;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAc,WAAW,EAAE,cAAc,CAAiC;IAC1E,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAa;IAE7B,wCAAwC;IACxC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IAEtC,4BAA4B;IAC5B,SAAgB,OAAO,EAAE,oBAAoB,CAAC;IAE9C,oCAAoC;IACpC,SAAgB,SAAS,EAAE,YAAY,CAAoB;IAE3D,mCAAmC;IACnC,SAAgB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC,wCAAwC;IACxC,SAAgB,WAAW,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE5D,mCAAmC;IACnC,IAAW,MAAM,IAAI,gBAAgB,CAMpC;IAED,4CAA4C;IAC5C,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;OAGG;WACW,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa;IAI3D,gCAAgC;gBACb,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB;IA8BvE,OAAO,CAAC,sBAAsB;WAIhB,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW;;;;;;;YAMrC,OAAO;IA2BrB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,MAAM,CAAC,aAAa;YAOd,MAAM;YAKN,eAAe;YAOf,eAAe;IA+B7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,uBAAuB;CAOhC"}
1
+ {"version":3,"file":"RpcInvocation.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcInvocation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA+B,UAAU,EAA4C,MAAM,qBAAqB,CAAC;AAIrI,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAoB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGzF;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,gBAAgB;AAChB,oBAAY,cAAc,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7F;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAc,WAAW,EAAE,cAAc,CAAiC;IAC1E,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAa;IAE7B,wCAAwC;IACxC,SAAgB,QAAQ,EAAE,WAAW,CAAC;IAEtC,4BAA4B;IAC5B,SAAgB,OAAO,EAAE,oBAAoB,CAAC;IAE9C,oCAAoC;IACpC,SAAgB,SAAS,EAAE,YAAY,CAAoB;IAE3D,mCAAmC;IACnC,SAAgB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC,wCAAwC;IACxC,SAAgB,WAAW,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE5D,mCAAmC;IACnC,IAAW,MAAM,IAAI,gBAAgB,CAMpC;IAED,4CAA4C;IAC5C,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;OAGG;WACW,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa;IAI3D,gCAAgC;gBACb,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB;IA8BvE,OAAO,CAAC,sBAAsB;WAIhB,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW;;;;;;;YAQrC,OAAO;IA2BrB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,MAAM,CAAC,aAAa;YAOd,MAAM;YAKN,eAAe;YAOf,eAAe;IA+B7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,uBAAuB;CAOhC"}
@@ -84,9 +84,11 @@ class RpcInvocation {
84
84
  return this.protocol.configuration.controlChannel.handleUnknownOperation(this, error);
85
85
  }
86
86
  static sanitizeForLog(activity) {
87
+ /* eslint-disable @typescript-eslint/naming-convention */
87
88
  return activity ? {
88
- activityId: activity.activityId, sessionId: activity.sessionId, applicationId: activity.applicationId, applicationVersion: activity.applicationVersion, rpcMethod: activity.rpcMethod,
89
+ ActivityId: activity.activityId, SessionId: activity.sessionId, ApplicationId: activity.applicationId, ApplicationVersion: activity.applicationVersion, rpcMethod: activity.rpcMethod,
89
90
  } : undefined;
91
+ /* eslint-enable @typescript-eslint/naming-convention */
90
92
  }
91
93
  async resolve() {
92
94
  const request = this.request;
@@ -1 +1 @@
1
- {"version":3,"file":"RpcInvocation.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcInvocation.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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { AccessToken, BentleyError, BentleyStatus, GuidString, IModelStatus, Logger, RpcInterfaceStatus } from \"@itwin/core-bentley\";\r\nimport { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { IModelError } from \"../../IModelError\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { SessionProps } from \"../../SessionProps\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestStatus } from \"./RpcConstants\";\r\nimport { RpcNotFoundResponse, RpcPendingResponse } from \"./RpcControl\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcProtocol, RpcRequestFulfillment, SerializedRpcRequest } from \"./RpcProtocol\";\r\nimport { CURRENT_INVOCATION, RpcRegistry } from \"./RpcRegistry\";\r\n\r\n/** The properties of an RpcActivity.\r\n * @public\r\n */\r\nexport interface RpcActivity extends SessionProps {\r\n /** Used for logging to correlate an Rpc activity between frontend and backend */\r\n readonly activityId: GuidString;\r\n\r\n /** access token for authorization */\r\n readonly accessToken: AccessToken;\r\n\r\n /** the name of the current rpc method */\r\n readonly rpcMethod?: string;\r\n}\r\n\r\n/** Serialized format for sending the request across the RPC layer\r\n * @public\r\n */\r\nexport interface SerializedRpcActivity {\r\n id: string;\r\n applicationId: string;\r\n applicationVersion: string;\r\n sessionId: string;\r\n authorization: string;\r\n csrfToken?: { headerName: string, headerValue: string };\r\n}\r\n\r\n/** @internal */\r\nexport type RpcActivityRun = (activity: RpcActivity, fn: () => Promise<any>) => Promise<any>;\r\n\r\n/** An RPC operation invocation in response to a request.\r\n * @internal\r\n */\r\nexport class RpcInvocation {\r\n public static runActivity: RpcActivityRun = async (_activity, fn) => fn();\r\n private _threw: boolean = false;\r\n private _pending: boolean = false;\r\n private _notFound: boolean = false;\r\n private _noContent: boolean = false;\r\n private _timeIn: number = 0;\r\n private _timeOut: number = 0;\r\n\r\n /** The protocol for this invocation. */\r\n public readonly protocol: RpcProtocol;\r\n\r\n /** The received request. */\r\n public readonly request: SerializedRpcRequest;\r\n\r\n /** The operation of the request. */\r\n public readonly operation: RpcOperation = undefined as any;\r\n\r\n /** The implementation response. */\r\n public readonly result: Promise<any>;\r\n\r\n /** The fulfillment for this request. */\r\n public readonly fulfillment: Promise<RpcRequestFulfillment>;\r\n\r\n /** The status for this request. */\r\n public get status(): RpcRequestStatus {\r\n return this._threw ? RpcRequestStatus.Rejected :\r\n this._pending ? RpcRequestStatus.Pending :\r\n this._notFound ? RpcRequestStatus.NotFound :\r\n this._noContent ? RpcRequestStatus.NoContent :\r\n RpcRequestStatus.Resolved;\r\n }\r\n\r\n /** The elapsed time for this invocation. */\r\n public get elapsed(): number {\r\n return this._timeOut - this._timeIn;\r\n }\r\n\r\n /**\r\n * The invocation for the current RPC operation.\r\n * @note The return value of this function is only reliable in an RPC impl class member function where program control was received from the RpcInvocation constructor function.\r\n */\r\n public static current(rpcImpl: RpcInterface): RpcInvocation {\r\n return (rpcImpl as any)[CURRENT_INVOCATION];\r\n }\r\n\r\n /** Constructs an invocation. */\r\n public constructor(protocol: RpcProtocol, request: SerializedRpcRequest) {\r\n this._timeIn = new Date().getTime();\r\n this.protocol = protocol;\r\n this.request = request;\r\n\r\n try {\r\n try {\r\n this.operation = RpcOperation.lookup(this.request.operation.interfaceDefinition, this.request.operation.operationName);\r\n\r\n const backend = this.operation.interfaceVersion;\r\n const frontend = this.request.operation.interfaceVersion;\r\n if (!RpcInterface.isVersionCompatible(backend, frontend)) {\r\n throw new IModelError(RpcInterfaceStatus.IncompatibleVersion, `Backend version ${backend} does not match frontend version ${frontend} for RPC interface ${this.operation.operationName}.`);\r\n }\r\n } catch (error) {\r\n if (this.handleUnknownOperation(error)) {\r\n this.operation = RpcOperation.lookup(this.request.operation.interfaceDefinition, this.request.operation.operationName);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n\r\n this.result = this.resolve();\r\n } catch (error) {\r\n this.result = this.reject(error);\r\n }\r\n\r\n this.fulfillment = this.result.then(async (value) => this._threw ? this.fulfillRejected(value) : this.fulfillResolved(value), async (reason) => this.fulfillRejected(reason));\r\n }\r\n\r\n private handleUnknownOperation(error: any): boolean {\r\n return this.protocol.configuration.controlChannel.handleUnknownOperation(this, error);\r\n }\r\n\r\n public static sanitizeForLog(activity?: RpcActivity) {\r\n return activity ? {\r\n activityId: activity.activityId, sessionId: activity.sessionId, applicationId: activity.applicationId, applicationVersion: activity.applicationVersion, rpcMethod: activity.rpcMethod,\r\n } : undefined;\r\n }\r\n\r\n private async resolve(): Promise<any> {\r\n const request = this.request;\r\n const activity: RpcActivity = {\r\n activityId: request.id,\r\n applicationId: request.applicationId,\r\n applicationVersion: request.applicationVersion,\r\n sessionId: request.sessionId,\r\n accessToken: request.authorization,\r\n rpcMethod: request.operation.operationName,\r\n };\r\n\r\n try {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestReceived, this);\r\n\r\n const parameters = RpcMarshaling.deserialize(this.protocol, request.parameters);\r\n this.applyPolicies(parameters);\r\n const impl = RpcRegistry.instance.getImplForInterface(this.operation.interfaceDefinition);\r\n (impl as any)[CURRENT_INVOCATION] = this;\r\n const op = this.lookupOperationFunction(impl);\r\n\r\n return await RpcInvocation.runActivity(activity, async () => op.call(impl, ...parameters));\r\n } catch (error: unknown) {\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, \"Error in RPC operation\", { error: BentleyError.getErrorProps(error), ...RpcInvocation.sanitizeForLog(activity) });\r\n return this.reject(error);\r\n }\r\n }\r\n\r\n private applyPolicies(parameters: any) {\r\n if (!parameters || !Array.isArray(parameters))\r\n return;\r\n\r\n for (let i = 0; i !== parameters.length; ++i) {\r\n const parameter = parameters[i];\r\n const isToken = typeof (parameter) === \"object\" && parameter !== null && parameter.hasOwnProperty(\"iModelId\") && parameter.hasOwnProperty(\"iTwinId\");\r\n if (isToken && this.protocol.checkToken && !this.operation.policy.allowTokenMismatch) {\r\n const inflated = this.protocol.inflateToken(parameter, this.request);\r\n parameters[i] = inflated;\r\n\r\n if (!RpcInvocation.compareTokens(parameter, inflated)) {\r\n if (RpcConfiguration.throwOnTokenMismatch) {\r\n throw new IModelError(BentleyStatus.ERROR, \"IModelRpcProps mismatch detected for this request.\");\r\n } else {\r\n Logger.logWarning(CommonLoggerCategory.RpcInterfaceBackend, \"IModelRpcProps mismatch detected for this request.\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static compareTokens(a: IModelRpcProps, b: IModelRpcProps): boolean {\r\n return a.key === b.key &&\r\n a.iTwinId === b.iTwinId &&\r\n a.iModelId === b.iModelId &&\r\n (undefined === a.changeset || (a.changeset.id === b.changeset?.id));\r\n }\r\n\r\n private async reject(error: any): Promise<any> {\r\n this._threw = true;\r\n return error;\r\n }\r\n\r\n private async fulfillResolved(value: any): Promise<RpcRequestFulfillment> {\r\n this._timeOut = new Date().getTime();\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendResponseCreated, this);\r\n const result = await RpcMarshaling.serialize(this.protocol, value);\r\n return this.fulfill(result, value);\r\n }\r\n\r\n private async fulfillRejected(reason: any): Promise<RpcRequestFulfillment> {\r\n this._timeOut = new Date().getTime();\r\n if (!RpcConfiguration.developmentMode)\r\n reason.stack = undefined;\r\n\r\n const result = await RpcMarshaling.serialize(this.protocol, reason);\r\n\r\n let isNoContentError = false;\r\n try { isNoContentError = reason.errorNumber === IModelStatus.NoContent; } catch { }\r\n\r\n if (reason instanceof RpcPendingResponse) {\r\n this._pending = true;\r\n this._threw = false;\r\n result.objects = reason.message;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedPending, this);\r\n } else if (this.supportsNoContent() && isNoContentError) {\r\n this._noContent = true;\r\n this._threw = false;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedNoContent, this);\r\n } else if (reason instanceof RpcNotFoundResponse) {\r\n this._notFound = true;\r\n this._threw = false;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedNotFound, this);\r\n } else {\r\n this._threw = true;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorOccurred, this);\r\n }\r\n\r\n return this.fulfill(result, reason);\r\n }\r\n\r\n private supportsNoContent() {\r\n if (!this.request.protocolVersion) {\r\n return false;\r\n }\r\n\r\n return RpcProtocol.protocolVersion >= 1 && this.request.protocolVersion >= 1;\r\n }\r\n\r\n private fulfill(result: RpcSerializedValue, rawResult: any): RpcRequestFulfillment {\r\n const fulfillment: RpcRequestFulfillment = {\r\n result,\r\n rawResult,\r\n status: this.protocol.getCode(this.status),\r\n id: this.request.id,\r\n interfaceName: (typeof (this.operation) === \"undefined\") ? \"\" : this.operation.interfaceDefinition.interfaceName,\r\n };\r\n\r\n try {\r\n const impl = RpcRegistry.instance.getImplForInterface(this.operation.interfaceDefinition) as any;\r\n if (impl[CURRENT_INVOCATION] === this) {\r\n impl[CURRENT_INVOCATION] = undefined;\r\n }\r\n } catch (_err) { }\r\n\r\n return fulfillment;\r\n }\r\n\r\n private lookupOperationFunction(implementation: RpcInterface): (...args: any[]) => Promise<any> {\r\n const func = (implementation as any)[this.operation.operationName];\r\n if (!func || typeof (func) !== \"function\")\r\n throw new IModelError(BentleyStatus.ERROR, `RPC interface class \"${implementation.constructor.name}\" does not implement operation \"${this.operation.operationName}\".`);\r\n\r\n return func;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RpcInvocation.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcInvocation.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/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { AccessToken, BentleyError, BentleyStatus, GuidString, IModelStatus, Logger, RpcInterfaceStatus } from \"@itwin/core-bentley\";\r\nimport { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { IModelError } from \"../../IModelError\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { SessionProps } from \"../../SessionProps\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestStatus } from \"./RpcConstants\";\r\nimport { RpcNotFoundResponse, RpcPendingResponse } from \"./RpcControl\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcProtocol, RpcRequestFulfillment, SerializedRpcRequest } from \"./RpcProtocol\";\r\nimport { CURRENT_INVOCATION, RpcRegistry } from \"./RpcRegistry\";\r\n\r\n/** The properties of an RpcActivity.\r\n * @public\r\n */\r\nexport interface RpcActivity extends SessionProps {\r\n /** Used for logging to correlate an Rpc activity between frontend and backend */\r\n readonly activityId: GuidString;\r\n\r\n /** access token for authorization */\r\n readonly accessToken: AccessToken;\r\n\r\n /** the name of the current rpc method */\r\n readonly rpcMethod?: string;\r\n}\r\n\r\n/** Serialized format for sending the request across the RPC layer\r\n * @public\r\n */\r\nexport interface SerializedRpcActivity {\r\n id: string;\r\n applicationId: string;\r\n applicationVersion: string;\r\n sessionId: string;\r\n authorization: string;\r\n csrfToken?: { headerName: string, headerValue: string };\r\n}\r\n\r\n/** @internal */\r\nexport type RpcActivityRun = (activity: RpcActivity, fn: () => Promise<any>) => Promise<any>;\r\n\r\n/** An RPC operation invocation in response to a request.\r\n * @internal\r\n */\r\nexport class RpcInvocation {\r\n public static runActivity: RpcActivityRun = async (_activity, fn) => fn();\r\n private _threw: boolean = false;\r\n private _pending: boolean = false;\r\n private _notFound: boolean = false;\r\n private _noContent: boolean = false;\r\n private _timeIn: number = 0;\r\n private _timeOut: number = 0;\r\n\r\n /** The protocol for this invocation. */\r\n public readonly protocol: RpcProtocol;\r\n\r\n /** The received request. */\r\n public readonly request: SerializedRpcRequest;\r\n\r\n /** The operation of the request. */\r\n public readonly operation: RpcOperation = undefined as any;\r\n\r\n /** The implementation response. */\r\n public readonly result: Promise<any>;\r\n\r\n /** The fulfillment for this request. */\r\n public readonly fulfillment: Promise<RpcRequestFulfillment>;\r\n\r\n /** The status for this request. */\r\n public get status(): RpcRequestStatus {\r\n return this._threw ? RpcRequestStatus.Rejected :\r\n this._pending ? RpcRequestStatus.Pending :\r\n this._notFound ? RpcRequestStatus.NotFound :\r\n this._noContent ? RpcRequestStatus.NoContent :\r\n RpcRequestStatus.Resolved;\r\n }\r\n\r\n /** The elapsed time for this invocation. */\r\n public get elapsed(): number {\r\n return this._timeOut - this._timeIn;\r\n }\r\n\r\n /**\r\n * The invocation for the current RPC operation.\r\n * @note The return value of this function is only reliable in an RPC impl class member function where program control was received from the RpcInvocation constructor function.\r\n */\r\n public static current(rpcImpl: RpcInterface): RpcInvocation {\r\n return (rpcImpl as any)[CURRENT_INVOCATION];\r\n }\r\n\r\n /** Constructs an invocation. */\r\n public constructor(protocol: RpcProtocol, request: SerializedRpcRequest) {\r\n this._timeIn = new Date().getTime();\r\n this.protocol = protocol;\r\n this.request = request;\r\n\r\n try {\r\n try {\r\n this.operation = RpcOperation.lookup(this.request.operation.interfaceDefinition, this.request.operation.operationName);\r\n\r\n const backend = this.operation.interfaceVersion;\r\n const frontend = this.request.operation.interfaceVersion;\r\n if (!RpcInterface.isVersionCompatible(backend, frontend)) {\r\n throw new IModelError(RpcInterfaceStatus.IncompatibleVersion, `Backend version ${backend} does not match frontend version ${frontend} for RPC interface ${this.operation.operationName}.`);\r\n }\r\n } catch (error) {\r\n if (this.handleUnknownOperation(error)) {\r\n this.operation = RpcOperation.lookup(this.request.operation.interfaceDefinition, this.request.operation.operationName);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n\r\n this.result = this.resolve();\r\n } catch (error) {\r\n this.result = this.reject(error);\r\n }\r\n\r\n this.fulfillment = this.result.then(async (value) => this._threw ? this.fulfillRejected(value) : this.fulfillResolved(value), async (reason) => this.fulfillRejected(reason));\r\n }\r\n\r\n private handleUnknownOperation(error: any): boolean {\r\n return this.protocol.configuration.controlChannel.handleUnknownOperation(this, error);\r\n }\r\n\r\n public static sanitizeForLog(activity?: RpcActivity) {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n return activity ? {\r\n ActivityId: activity.activityId, SessionId: activity.sessionId, ApplicationId: activity.applicationId, ApplicationVersion: activity.applicationVersion, rpcMethod: activity.rpcMethod,\r\n } : undefined;\r\n /* eslint-enable @typescript-eslint/naming-convention */\r\n }\r\n\r\n private async resolve(): Promise<any> {\r\n const request = this.request;\r\n const activity: RpcActivity = {\r\n activityId: request.id,\r\n applicationId: request.applicationId,\r\n applicationVersion: request.applicationVersion,\r\n sessionId: request.sessionId,\r\n accessToken: request.authorization,\r\n rpcMethod: request.operation.operationName,\r\n };\r\n\r\n try {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestReceived, this);\r\n\r\n const parameters = RpcMarshaling.deserialize(this.protocol, request.parameters);\r\n this.applyPolicies(parameters);\r\n const impl = RpcRegistry.instance.getImplForInterface(this.operation.interfaceDefinition);\r\n (impl as any)[CURRENT_INVOCATION] = this;\r\n const op = this.lookupOperationFunction(impl);\r\n\r\n return await RpcInvocation.runActivity(activity, async () => op.call(impl, ...parameters));\r\n } catch (error: unknown) {\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, \"Error in RPC operation\", { error: BentleyError.getErrorProps(error), ...RpcInvocation.sanitizeForLog(activity) });\r\n return this.reject(error);\r\n }\r\n }\r\n\r\n private applyPolicies(parameters: any) {\r\n if (!parameters || !Array.isArray(parameters))\r\n return;\r\n\r\n for (let i = 0; i !== parameters.length; ++i) {\r\n const parameter = parameters[i];\r\n const isToken = typeof (parameter) === \"object\" && parameter !== null && parameter.hasOwnProperty(\"iModelId\") && parameter.hasOwnProperty(\"iTwinId\");\r\n if (isToken && this.protocol.checkToken && !this.operation.policy.allowTokenMismatch) {\r\n const inflated = this.protocol.inflateToken(parameter, this.request);\r\n parameters[i] = inflated;\r\n\r\n if (!RpcInvocation.compareTokens(parameter, inflated)) {\r\n if (RpcConfiguration.throwOnTokenMismatch) {\r\n throw new IModelError(BentleyStatus.ERROR, \"IModelRpcProps mismatch detected for this request.\");\r\n } else {\r\n Logger.logWarning(CommonLoggerCategory.RpcInterfaceBackend, \"IModelRpcProps mismatch detected for this request.\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static compareTokens(a: IModelRpcProps, b: IModelRpcProps): boolean {\r\n return a.key === b.key &&\r\n a.iTwinId === b.iTwinId &&\r\n a.iModelId === b.iModelId &&\r\n (undefined === a.changeset || (a.changeset.id === b.changeset?.id));\r\n }\r\n\r\n private async reject(error: any): Promise<any> {\r\n this._threw = true;\r\n return error;\r\n }\r\n\r\n private async fulfillResolved(value: any): Promise<RpcRequestFulfillment> {\r\n this._timeOut = new Date().getTime();\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendResponseCreated, this);\r\n const result = await RpcMarshaling.serialize(this.protocol, value);\r\n return this.fulfill(result, value);\r\n }\r\n\r\n private async fulfillRejected(reason: any): Promise<RpcRequestFulfillment> {\r\n this._timeOut = new Date().getTime();\r\n if (!RpcConfiguration.developmentMode)\r\n reason.stack = undefined;\r\n\r\n const result = await RpcMarshaling.serialize(this.protocol, reason);\r\n\r\n let isNoContentError = false;\r\n try { isNoContentError = reason.errorNumber === IModelStatus.NoContent; } catch { }\r\n\r\n if (reason instanceof RpcPendingResponse) {\r\n this._pending = true;\r\n this._threw = false;\r\n result.objects = reason.message;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedPending, this);\r\n } else if (this.supportsNoContent() && isNoContentError) {\r\n this._noContent = true;\r\n this._threw = false;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedNoContent, this);\r\n } else if (reason instanceof RpcNotFoundResponse) {\r\n this._notFound = true;\r\n this._threw = false;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendReportedNotFound, this);\r\n } else {\r\n this._threw = true;\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorOccurred, this);\r\n }\r\n\r\n return this.fulfill(result, reason);\r\n }\r\n\r\n private supportsNoContent() {\r\n if (!this.request.protocolVersion) {\r\n return false;\r\n }\r\n\r\n return RpcProtocol.protocolVersion >= 1 && this.request.protocolVersion >= 1;\r\n }\r\n\r\n private fulfill(result: RpcSerializedValue, rawResult: any): RpcRequestFulfillment {\r\n const fulfillment: RpcRequestFulfillment = {\r\n result,\r\n rawResult,\r\n status: this.protocol.getCode(this.status),\r\n id: this.request.id,\r\n interfaceName: (typeof (this.operation) === \"undefined\") ? \"\" : this.operation.interfaceDefinition.interfaceName,\r\n };\r\n\r\n try {\r\n const impl = RpcRegistry.instance.getImplForInterface(this.operation.interfaceDefinition) as any;\r\n if (impl[CURRENT_INVOCATION] === this) {\r\n impl[CURRENT_INVOCATION] = undefined;\r\n }\r\n } catch (_err) { }\r\n\r\n return fulfillment;\r\n }\r\n\r\n private lookupOperationFunction(implementation: RpcInterface): (...args: any[]) => Promise<any> {\r\n const func = (implementation as any)[this.operation.operationName];\r\n if (!func || typeof (func) !== \"function\")\r\n throw new IModelError(BentleyStatus.ERROR, `RPC interface class \"${implementation.constructor.name}\" does not implement operation \"${this.operation.operationName}\".`);\r\n\r\n return func;\r\n }\r\n}\r\n"]}
@@ -6,7 +6,7 @@ import { TransformProps } from "@itwin/core-geometry";
6
6
  import { Placement2dProps, Placement3dProps } from "../ElementProps";
7
7
  import { ElementGeometryDataEntry } from "../geometry/ElementGeometry";
8
8
  import { GeometryStreamProps } from "../geometry/GeometryStream";
9
- import { ContentFlags, TreeFlags } from "../tile/TileMetadata";
9
+ import { ContentFlags, EdgeType, TreeFlags } from "../tile/TileMetadata";
10
10
  /** Wire format describing properties common to [[PersistentGraphicsRequestProps]] and [[DynamicGraphicsRequestProps]].
11
11
  * @see [[ElementGraphicsRequestProps]] for more details.
12
12
  * @public
@@ -29,6 +29,10 @@ export interface GraphicsRequestProps {
29
29
  readonly location?: TransformProps;
30
30
  /** If true, surface edges will be omitted from the graphics. */
31
31
  readonly omitEdges?: boolean;
32
+ /** If omitEdges is false, specifies the type of edges to produce. Generally determined by TileAdmin.requestElementGraphics.
33
+ * @internal
34
+ */
35
+ readonly edgeType?: EdgeType;
32
36
  /** If true, the element's graphics will be clipped against the iModel's project extents. */
33
37
  readonly clipToProjectExtents?: boolean;
34
38
  /** If defined, the compact string representation of a [ClipVector]($core-geometry) to be applied to the geometry to produce section-cut
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGraphics.d.ts","sourceRoot":"","sources":["../../../src/tile/ElementGraphics.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yGAAyG;IACzG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+IAA+I;IAC/I,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yIAAyI;IACzI,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,oBAAoB;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,wBAAwB,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,CAAC;IACjE;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,uGAAuG;IACvG,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,oBAAY,2BAA2B,GAAG,8BAA8B,GAAG,6BAA6B,GAAG,6BAA6B,CAAC"}
1
+ {"version":3,"file":"ElementGraphics.d.ts","sourceRoot":"","sources":["../../../src/tile/ElementGraphics.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yGAAyG;IACzG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+IAA+I;IAC/I,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yIAAyI;IACzI,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,oBAAoB;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,wBAAwB,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,CAAC;IACjE;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,uGAAuG;IACvG,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,oBAAY,2BAA2B,GAAG,8BAA8B,GAAG,6BAA6B,GAAG,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGraphics.js","sourceRoot":"","sources":["../../../src/tile/ElementGraphics.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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/** @packageDocumentation\r\n * @module Tile\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { TransformProps } from \"@itwin/core-geometry\";\r\nimport { Placement2dProps, Placement3dProps } from \"../ElementProps\";\r\nimport { ElementGeometryDataEntry } from \"../geometry/ElementGeometry\";\r\nimport { GeometryStreamProps } from \"../geometry/GeometryStream\";\r\nimport { ContentFlags, TreeFlags } from \"../tile/TileMetadata\";\r\n\r\n/** Wire format describing properties common to [[PersistentGraphicsRequestProps]] and [[DynamicGraphicsRequestProps]].\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface GraphicsRequestProps {\r\n /** Uniquely identifies this request among all [[ElementGraphicsRequestProps]] for a given [[IModel]]. */\r\n readonly id: string;\r\n /** Log10 of the chord tolerance with which to stroke the element's geometry. e.g., for a chord tolerance of 0.01 (10^-2) meters, supply -2. */\r\n readonly toleranceLog10: number;\r\n /** The major version of the \"iMdl\" format to use when producing the iMdl representation of the element's geometry.\r\n * If omitted, the most recent version known to the backend will be used.\r\n * @alpha\r\n */\r\n readonly formatVersion?: number;\r\n /** Optional flags. [[TreeFlags.UseProjectExtents]] has no effect. [[TreeFlags.EnforceDisplayPriority]] is not yet implemented. @alpha */\r\n readonly treeFlags?: TreeFlags;\r\n /** Optional flags. [[ContentFlags.ImprovedElision]] has no effect. @alpha */\r\n readonly contentFlags?: ContentFlags;\r\n /** Transform from element graphics to world coordinates. Defaults to identity. */\r\n readonly location?: TransformProps;\r\n /** If true, surface edges will be omitted from the graphics. */\r\n readonly omitEdges?: boolean;\r\n /** If true, the element's graphics will be clipped against the iModel's project extents. */\r\n readonly clipToProjectExtents?: boolean;\r\n /** If defined, the compact string representation of a [ClipVector]($core-geometry) to be applied to the geometry to produce section-cut\r\n * geometry at the intersections with the clip planes. Any geometry *not* intersecting the clip planes is omitted from the tiles.\r\n * @see [ClipVector.toCompactString]($core-geometry) to produce the string representation.\r\n */\r\n readonly sectionCut?: string;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single element.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface PersistentGraphicsRequestProps extends GraphicsRequestProps {\r\n /** The element whose geometry is to be used to generate the graphics. */\r\n readonly elementId: Id64String;\r\n}\r\n\r\n/** As part of a [[DynamicGraphicsRequestProps]], specifies the geometry from which to generate the graphics in JSON format.\r\n * @public\r\n */\r\nexport interface JsonGeometryStream {\r\n /** Discriminator for [[DynamicGraphicsRequestProps.geometry]]. */\r\n format: \"json\";\r\n /** The geometry stream in JSON format. */\r\n data: GeometryStreamProps;\r\n}\r\n\r\n/** As part of a [[DynamicGraphicsRequestProps]], specifies the geometry from which to generate the graphics in binary flatbuffer-encoded format.\r\n * @public\r\n */\r\nexport interface FlatBufferGeometryStream {\r\n /** Discriminator for [[DynamicGraphicsRequestProps.geometry]]. */\r\n format: \"flatbuffer\";\r\n /** The geometry stream in flatbuffer format. */\r\n data: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single geometry stream.\r\n * @see [[DynamicGraphicsRequest2dProps]] and [[DynamicGraphicsRequest3dProps]].\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequestProps extends GraphicsRequestProps {\r\n /** The geometry from which to generate the graphics. */\r\n readonly geometry: JsonGeometryStream | FlatBufferGeometryStream;\r\n /** The category to which the geometry belongs. This is required to identify a persistent [SpatialCategory]($backend) for 3d geometry or\r\n * [DrawingCategory]($backend) for 2d geometry.\r\n */\r\n readonly categoryId: Id64String;\r\n /** If specified, tools will recognize the generated graphics as being associated with this element. */\r\n readonly elementId?: Id64String;\r\n /** If specified, tools will recognize the generated graphics as being associated with this model.\r\n * It should identify a 3d model for 3d geometry or a 2d model for 2d geometry.\r\n * It needn't identify a persistent model - it can be a transient Id.\r\n */\r\n readonly modelId?: Id64String;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a 2d geometry stream.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequest2dProps extends DynamicGraphicsRequestProps {\r\n /** Specifies the geometry is 2d. */\r\n readonly type: \"2d\";\r\n /** The origin and rotation of the geometry. */\r\n readonly placement: Omit<Placement2dProps, \"bbox\">;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a 3d geometry stream.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequest3dProps extends DynamicGraphicsRequestProps {\r\n /** Specifies the geometry is 3d. */\r\n readonly type: \"3d\";\r\n /** The origin and rotation of the geometry. */\r\n readonly placement: Omit<Placement3dProps, \"bbox\">;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single element or geometry stream.\r\n * @note Every request must have an `id` that is unique amongst all extant requests for a given [[IModel]].\r\n * @see [TileAdmin.requestElementGraphics]($frontend) and [IModelDb.generateElementGraphics]($backend) to fulfill such a request.\r\n * @see [readElementGraphics]($frontend) to convert the result of a request to a [RenderGraphic]($frontend) for display.\r\n * @public\r\n */\r\nexport type ElementGraphicsRequestProps = PersistentGraphicsRequestProps | DynamicGraphicsRequest2dProps | DynamicGraphicsRequest3dProps;\r\n"]}
1
+ {"version":3,"file":"ElementGraphics.js","sourceRoot":"","sources":["../../../src/tile/ElementGraphics.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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/** @packageDocumentation\r\n * @module Tile\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { TransformProps } from \"@itwin/core-geometry\";\r\nimport { Placement2dProps, Placement3dProps } from \"../ElementProps\";\r\nimport { ElementGeometryDataEntry } from \"../geometry/ElementGeometry\";\r\nimport { GeometryStreamProps } from \"../geometry/GeometryStream\";\r\nimport { ContentFlags, EdgeType, TreeFlags } from \"../tile/TileMetadata\";\r\n\r\n/** Wire format describing properties common to [[PersistentGraphicsRequestProps]] and [[DynamicGraphicsRequestProps]].\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface GraphicsRequestProps {\r\n /** Uniquely identifies this request among all [[ElementGraphicsRequestProps]] for a given [[IModel]]. */\r\n readonly id: string;\r\n /** Log10 of the chord tolerance with which to stroke the element's geometry. e.g., for a chord tolerance of 0.01 (10^-2) meters, supply -2. */\r\n readonly toleranceLog10: number;\r\n /** The major version of the \"iMdl\" format to use when producing the iMdl representation of the element's geometry.\r\n * If omitted, the most recent version known to the backend will be used.\r\n * @alpha\r\n */\r\n readonly formatVersion?: number;\r\n /** Optional flags. [[TreeFlags.UseProjectExtents]] has no effect. [[TreeFlags.EnforceDisplayPriority]] is not yet implemented. @alpha */\r\n readonly treeFlags?: TreeFlags;\r\n /** Optional flags. [[ContentFlags.ImprovedElision]] has no effect. @alpha */\r\n readonly contentFlags?: ContentFlags;\r\n /** Transform from element graphics to world coordinates. Defaults to identity. */\r\n readonly location?: TransformProps;\r\n /** If true, surface edges will be omitted from the graphics. */\r\n readonly omitEdges?: boolean;\r\n /** If omitEdges is false, specifies the type of edges to produce. Generally determined by TileAdmin.requestElementGraphics.\r\n * @internal\r\n */\r\n readonly edgeType?: EdgeType;\r\n /** If true, the element's graphics will be clipped against the iModel's project extents. */\r\n readonly clipToProjectExtents?: boolean;\r\n /** If defined, the compact string representation of a [ClipVector]($core-geometry) to be applied to the geometry to produce section-cut\r\n * geometry at the intersections with the clip planes. Any geometry *not* intersecting the clip planes is omitted from the tiles.\r\n * @see [ClipVector.toCompactString]($core-geometry) to produce the string representation.\r\n */\r\n readonly sectionCut?: string;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single element.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface PersistentGraphicsRequestProps extends GraphicsRequestProps {\r\n /** The element whose geometry is to be used to generate the graphics. */\r\n readonly elementId: Id64String;\r\n}\r\n\r\n/** As part of a [[DynamicGraphicsRequestProps]], specifies the geometry from which to generate the graphics in JSON format.\r\n * @public\r\n */\r\nexport interface JsonGeometryStream {\r\n /** Discriminator for [[DynamicGraphicsRequestProps.geometry]]. */\r\n format: \"json\";\r\n /** The geometry stream in JSON format. */\r\n data: GeometryStreamProps;\r\n}\r\n\r\n/** As part of a [[DynamicGraphicsRequestProps]], specifies the geometry from which to generate the graphics in binary flatbuffer-encoded format.\r\n * @public\r\n */\r\nexport interface FlatBufferGeometryStream {\r\n /** Discriminator for [[DynamicGraphicsRequestProps.geometry]]. */\r\n format: \"flatbuffer\";\r\n /** The geometry stream in flatbuffer format. */\r\n data: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single geometry stream.\r\n * @see [[DynamicGraphicsRequest2dProps]] and [[DynamicGraphicsRequest3dProps]].\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequestProps extends GraphicsRequestProps {\r\n /** The geometry from which to generate the graphics. */\r\n readonly geometry: JsonGeometryStream | FlatBufferGeometryStream;\r\n /** The category to which the geometry belongs. This is required to identify a persistent [SpatialCategory]($backend) for 3d geometry or\r\n * [DrawingCategory]($backend) for 2d geometry.\r\n */\r\n readonly categoryId: Id64String;\r\n /** If specified, tools will recognize the generated graphics as being associated with this element. */\r\n readonly elementId?: Id64String;\r\n /** If specified, tools will recognize the generated graphics as being associated with this model.\r\n * It should identify a 3d model for 3d geometry or a 2d model for 2d geometry.\r\n * It needn't identify a persistent model - it can be a transient Id.\r\n */\r\n readonly modelId?: Id64String;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a 2d geometry stream.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequest2dProps extends DynamicGraphicsRequestProps {\r\n /** Specifies the geometry is 2d. */\r\n readonly type: \"2d\";\r\n /** The origin and rotation of the geometry. */\r\n readonly placement: Omit<Placement2dProps, \"bbox\">;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a 3d geometry stream.\r\n * @see [[ElementGraphicsRequestProps]] for more details.\r\n * @public\r\n */\r\nexport interface DynamicGraphicsRequest3dProps extends DynamicGraphicsRequestProps {\r\n /** Specifies the geometry is 3d. */\r\n readonly type: \"3d\";\r\n /** The origin and rotation of the geometry. */\r\n readonly placement: Omit<Placement3dProps, \"bbox\">;\r\n}\r\n\r\n/** Wire format describing a request to produce graphics in \"iMdl\" format for a single element or geometry stream.\r\n * @note Every request must have an `id` that is unique amongst all extant requests for a given [[IModel]].\r\n * @see [TileAdmin.requestElementGraphics]($frontend) and [IModelDb.generateElementGraphics]($backend) to fulfill such a request.\r\n * @see [readElementGraphics]($frontend) to convert the result of a request to a [RenderGraphic]($frontend) for display.\r\n * @public\r\n */\r\nexport type ElementGraphicsRequestProps = PersistentGraphicsRequestProps | DynamicGraphicsRequest2dProps | DynamicGraphicsRequest3dProps;\r\n"]}
@@ -17,92 +17,29 @@ export declare enum GltfV2ChunkTypes {
17
17
  JSON = 1313821514,
18
18
  Binary = 5130562
19
19
  }
20
- /** @internal */
21
- export declare enum GltfMeshMode {
22
- Points = 0,
23
- Lines = 1,
24
- LineStrip = 3,
25
- Triangles = 4
26
- }
27
- /** @internal */
28
- export declare enum GltfDataType {
29
- SignedByte = 5120,
30
- UnsignedByte = 5121,
31
- SignedShort = 5122,
32
- UnsignedShort = 5123,
33
- UInt32 = 5125,
34
- Float = 5126,
35
- Rgb = 6407,
36
- Rgba = 6408,
37
- IntVec2 = 35667,
38
- IntVec3 = 35668,
39
- FloatVec2 = 35664,
40
- FloatVec3 = 35665,
41
- FloatVec4 = 35666,
42
- FloatMat3 = 35675,
43
- FloatMat4 = 35676,
44
- Sampler2d = 35678
45
- }
46
- /** @internal */
47
- export declare enum GltfConstants {
48
- CullFace = 2884,
49
- DepthTest = 2929,
50
- Nearest = 9728,
51
- Linear = 9729,
52
- LinearMipmapLinear = 9987,
53
- ClampToEdge = 33071,
54
- ArrayBuffer = 34962,
55
- ElementArrayBuffer = 34963,
56
- FragmentShader = 35632,
57
- VertexShader = 35633
58
- }
59
- /** @internal */
60
- export declare type GltfDataBuffer = Uint8Array | Uint16Array | Uint32Array | Float32Array;
61
- /**
62
- * A chunk of binary data exposed as a typed array.
63
- * The count member indicates how many elements exist. This may be less than this.buffer.length due to padding added to the
64
- * binary stream to ensure correct alignment.
20
+ /** A chunk of a glb file.
65
21
  * @internal
66
22
  */
67
- export declare class GltfBufferData {
68
- readonly buffer: GltfDataBuffer;
69
- readonly count: number;
70
- constructor(buffer: GltfDataBuffer, count: number);
71
- /**
72
- * Create a GltfBufferData of the desired type. The actual type may differ from the desired type - for example, small 32-bit integers
73
- * may be represented as 8-bit or 16-bit integers instead.
74
- * If the actual data type is not convertible to the desired type, this function returns undefined.
23
+ export interface GltfChunk {
24
+ /** Offset of the first byte of the chunk's data relative to the beginning of the glb data.
25
+ * This excludes the 8-byte chunk header containing the length and type fields.
75
26
  */
76
- static create(bytes: Uint8Array, actualType: GltfDataType, expectedType: GltfDataType, count: number): GltfBufferData | undefined;
77
- private static createDataBuffer;
27
+ offset: number;
28
+ /** The number of bytes in the chunk's data. */
29
+ length: number;
78
30
  }
79
- /**
80
- * A view of a chunk of glTF binary data containing an array of elements of a specific data type.
81
- * The count member indicates how many elements exist; this may be smaller than this.data.length.
82
- * The count member may also indicate the number of elements of a type containing more than one value of the
83
- * underlying type. For example, a buffer of 4 32-bit floating point 'vec2' elements will have a count of 4,
84
- * but its data member will contain 8 32-bit floating point values (2 per vec2).
85
- * The accessor member may contain additional JSON data specific to a particular buffer.
31
+ /** Describes a glTF chunk's data along with its type.
86
32
  * @internal
87
33
  */
88
- export declare class GltfBufferView {
89
- readonly data: Uint8Array;
90
- readonly count: number;
91
- readonly type: GltfDataType;
92
- readonly accessor: any;
93
- readonly stride: number;
94
- get byteLength(): number;
95
- constructor(data: Uint8Array, count: number, type: GltfDataType, accessor: any, stride: number);
96
- toBufferData(desiredType: GltfDataType): GltfBufferData | undefined;
97
- }
98
- /** Header preceding glTF data.
99
- * @internal
100
- */
101
- export declare class GltfHeader extends TileHeader {
34
+ export declare type TypedGltfChunk = GltfChunk & {
35
+ type: number;
36
+ };
37
+ /** @internal */
38
+ export declare class GlbHeader extends TileHeader {
102
39
  readonly gltfLength: number;
103
- readonly scenePosition: number;
104
- readonly sceneStrLength: number;
105
- readonly binaryPosition: number;
40
+ readonly jsonChunk: GltfChunk;
41
+ readonly binaryChunk?: GltfChunk;
42
+ readonly additionalChunks: TypedGltfChunk[];
106
43
  get isValid(): boolean;
107
44
  constructor(stream: ByteStream);
108
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GltfTileIO.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfTileIO.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,oBAAY,YAAY;IACtB,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,cAAc,IAAW;IACzB,gBAAgB,IAAI;CACrB;AAED,gBAAgB;AAChB,oBAAY,gBAAgB;IAC1B,IAAI,aAAa;IACjB,MAAM,UAAa;CACpB;AAED,gBAAgB;AAChB,oBAAY,YAAY;IACtB,MAAM,IAAI;IACV,KAAK,IAAI;IACT,SAAS,IAAI;IACb,SAAS,IAAI;CACd;AAED,gBAAgB;AAChB,oBAAY,YAAY;IACtB,UAAU,OAAS;IACnB,YAAY,OAAS;IACrB,WAAW,OAAO;IAClB,aAAa,OAAO;IACpB,MAAM,OAAO;IACb,KAAK,OAAO;IACZ,GAAG,OAAO;IACV,IAAI,OAAO;IACX,OAAO,QAAS;IAChB,OAAO,QAAS;IAChB,SAAS,QAAQ;IACjB,SAAS,QAAQ;IACjB,SAAS,QAAQ;IACjB,SAAS,QAAQ;IACjB,SAAS,QAAQ;IACjB,SAAS,QAAQ;CAClB;AAED,gBAAgB;AAChB,oBAAY,aAAa;IACvB,QAAQ,OAAO;IACf,SAAS,OAAO;IAChB,OAAO,OAAS;IAChB,MAAM,OAAO;IACb,kBAAkB,OAAO;IACzB,WAAW,QAAQ;IACnB,WAAW,QAAQ;IACnB,kBAAkB,QAAQ;IAC1B,cAAc,QAAQ;IACtB,YAAY,QAAQ;CACrB;AAED,gBAAgB;AAChB,oBAAY,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnF;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM;IAKxD;;;;OAIG;WACW,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAsBxI,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,QAAQ,EAAE,GAAG,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,IAAW,UAAU,IAAI,MAAM,CAA6B;gBAEzC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAQ9F,YAAY,CAAC,WAAW,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS;CAG3E;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,aAAa,EAAE,MAAM,CAAK;IAC1C,SAAgB,cAAc,EAAE,MAAM,CAAK;IAC3C,SAAgB,cAAc,EAAE,MAAM,CAAK;IAC3C,IAAW,OAAO,IAAI,OAAO,CAA4C;gBAEtD,MAAM,EAAE,UAAU;CAoCtC"}
1
+ {"version":3,"file":"GltfTileIO.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfTileIO.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,oBAAY,YAAY;IACtB,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,cAAc,IAAW;IACzB,gBAAgB,IAAI;CACrB;AAED,gBAAgB;AAChB,oBAAY,gBAAgB;IAC1B,IAAI,aAAa;IACjB,MAAM,UAAa;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,oBAAY,cAAc,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAa1D,gBAAgB;AAChB,qBAAa,SAAU,SAAQ,UAAU;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAK;IACvC,SAAgB,SAAS,EAAE,SAAS,CAA4B;IAChE,SAAgB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxC,SAAgB,gBAAgB,EAAE,cAAc,EAAE,CAAM;IAExD,IAAW,OAAO,IAAI,OAAO,CAE5B;gBAEkB,MAAM,EAAE,UAAU;CAuEtC"}