@cratis/arc 22.0.2 → 22.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/cjs/queries/ObservableQueryFor.js +6 -1
  2. package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
  3. package/dist/cjs/queries/QueryInstanceCache.js +6 -6
  4. package/dist/cjs/queries/QueryInstanceCache.js.map +1 -1
  5. package/dist/cjs/queries/QueryResult.js +23 -4
  6. package/dist/cjs/queries/QueryResult.js.map +1 -1
  7. package/dist/cjs/queries/QueryResultWithState.js +20 -7
  8. package/dist/cjs/queries/QueryResultWithState.js.map +1 -1
  9. package/dist/cjs/queries/ServerSentEventHubConnection.js +120 -58
  10. package/dist/cjs/queries/ServerSentEventHubConnection.js.map +1 -1
  11. package/dist/cjs/queries/WebSocketHubConnection.js +121 -51
  12. package/dist/cjs/queries/WebSocketHubConnection.js.map +1 -1
  13. package/dist/esm/queries/IQueryResult.d.ts +1 -0
  14. package/dist/esm/queries/IQueryResult.d.ts.map +1 -1
  15. package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
  16. package/dist/esm/queries/ObservableQueryFor.js +6 -1
  17. package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
  18. package/dist/esm/queries/QueryInstanceCache.d.ts +1 -1
  19. package/dist/esm/queries/QueryInstanceCache.d.ts.map +1 -1
  20. package/dist/esm/queries/QueryInstanceCache.js +6 -6
  21. package/dist/esm/queries/QueryInstanceCache.js.map +1 -1
  22. package/dist/esm/queries/QueryResult.d.ts +2 -0
  23. package/dist/esm/queries/QueryResult.d.ts.map +1 -1
  24. package/dist/esm/queries/QueryResult.js +23 -4
  25. package/dist/esm/queries/QueryResult.js.map +1 -1
  26. package/dist/esm/queries/QueryResultWithState.d.ts +3 -3
  27. package/dist/esm/queries/QueryResultWithState.d.ts.map +1 -1
  28. package/dist/esm/queries/QueryResultWithState.js +20 -7
  29. package/dist/esm/queries/QueryResultWithState.js.map +1 -1
  30. package/dist/esm/queries/ServerSentEventHubConnection.d.ts +11 -4
  31. package/dist/esm/queries/ServerSentEventHubConnection.d.ts.map +1 -1
  32. package/dist/esm/queries/ServerSentEventHubConnection.js +120 -58
  33. package/dist/esm/queries/ServerSentEventHubConnection.js.map +1 -1
  34. package/dist/esm/queries/WebSocketHubConnection.d.ts +13 -2
  35. package/dist/esm/queries/WebSocketHubConnection.d.ts.map +1 -1
  36. package/dist/esm/queries/WebSocketHubConnection.js +121 -51
  37. package/dist/esm/queries/WebSocketHubConnection.js.map +1 -1
  38. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_a_not_ready_result.d.ts +2 -0
  39. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_a_not_ready_result.d.ts.map +1 -0
  40. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_a_not_ready_result.js +34 -0
  41. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_a_not_ready_result.js.map +1 -0
  42. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_and_sse_transport.js +26 -2
  43. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_and_sse_transport.js.map +1 -1
  44. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_disabled_and_sse_transport.js +60 -3
  45. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_disabled_and_sse_transport.js.map +1 -1
  46. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_web_socket_hub_payload_without_readiness.d.ts +2 -0
  47. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_web_socket_hub_payload_without_readiness.d.ts.map +1 -0
  48. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_web_socket_hub_payload_without_readiness.js +83 -0
  49. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_web_socket_hub_payload_without_readiness.js.map +1 -0
  50. package/dist/esm/queries/for_QueryInstanceCache/when_setting_last_result/with_only_readiness_changed.d.ts +2 -0
  51. package/dist/esm/queries/for_QueryInstanceCache/when_setting_last_result/with_only_readiness_changed.d.ts.map +1 -0
  52. package/dist/esm/queries/for_QueryInstanceCache/when_setting_last_result/with_only_readiness_changed.js +22 -0
  53. package/dist/esm/queries/for_QueryInstanceCache/when_setting_last_result/with_only_readiness_changed.js.map +1 -0
  54. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/with_readiness_false.d.ts +2 -0
  55. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/with_readiness_false.d.ts.map +1 -0
  56. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/with_readiness_false.js +17 -0
  57. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/with_readiness_false.js.map +1 -0
  58. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/without_readiness.d.ts +2 -0
  59. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/without_readiness.d.ts.map +1 -0
  60. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/without_readiness.js +16 -0
  61. package/dist/esm/queries/for_QueryResult/when_constructing_from_a_server_result/without_readiness.js.map +1 -0
  62. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/with_readiness_false.d.ts +2 -0
  63. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/with_readiness_false.d.ts.map +1 -0
  64. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/with_readiness_false.js +19 -0
  65. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/with_readiness_false.js.map +1 -0
  66. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/without_readiness.d.ts +2 -0
  67. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/without_readiness.d.ts.map +1 -0
  68. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/without_readiness.js +19 -0
  69. package/dist/esm/queries/for_QueryResultWithState/when_creating_from_query_result/without_readiness.js.map +1 -0
  70. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_deferred_promise.d.ts +7 -0
  71. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_deferred_promise.d.ts.map +1 -0
  72. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_deferred_promise.js +12 -0
  73. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_deferred_promise.js.map +1 -0
  74. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_server_sent_event_hub_connection.d.ts +2 -1
  75. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_server_sent_event_hub_connection.d.ts.map +1 -1
  76. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_server_sent_event_hub_connection.js +15 -4
  77. package/dist/esm/queries/for_ServerSentEventHubConnection/given/a_server_sent_event_hub_connection.js.map +1 -1
  78. package/dist/esm/queries/for_ServerSentEventHubConnection/when_a_retired_event_source_fires/ignores_connected_and_error_callbacks.d.ts +2 -0
  79. package/dist/esm/queries/for_ServerSentEventHubConnection/when_a_retired_event_source_fires/ignores_connected_and_error_callbacks.d.ts.map +1 -0
  80. package/dist/esm/queries/for_ServerSentEventHubConnection/when_a_retired_event_source_fires/ignores_connected_and_error_callbacks.js +44 -0
  81. package/dist/esm/queries/for_ServerSentEventHubConnection/when_a_retired_event_source_fires/ignores_connected_and_error_callbacks.js.map +1 -0
  82. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_replaced.d.ts +2 -0
  83. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_replaced.d.ts.map +1 -0
  84. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_replaced.js +74 -0
  85. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_replaced.js.map +1 -0
  86. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_unsubscribed.d.ts +2 -0
  87. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_unsubscribed.d.ts.map +1 -0
  88. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_unsubscribed.js +74 -0
  89. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_unsubscribed.js.map +1 -0
  90. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_is_rejected.d.ts +2 -0
  91. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_is_rejected.d.ts.map +1 -0
  92. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_is_rejected.js +59 -0
  93. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_is_rejected.js.map +1 -0
  94. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_returns_non_ok.d.ts +2 -0
  95. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_returns_non_ok.d.ts.map +1 -0
  96. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_returns_non_ok.js +58 -0
  97. package/dist/esm/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_returns_non_ok.js.map +1 -0
  98. package/dist/esm/queries/for_ServerSentEventHubConnection/when_disposing/cleans_up_resources.js +6 -3
  99. package/dist/esm/queries/for_ServerSentEventHubConnection/when_disposing/cleans_up_resources.js.map +1 -1
  100. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js +23 -6
  101. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js.map +1 -1
  102. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/after_error.js +20 -5
  103. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/after_error.js.map +1 -1
  104. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/and_an_immediate_open_wins_the_backoff_race.d.ts +2 -0
  105. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/and_an_immediate_open_wins_the_backoff_race.d.ts.map +1 -0
  106. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/and_an_immediate_open_wins_the_backoff_race.js +20 -0
  107. package/dist/esm/queries/for_ServerSentEventHubConnection/when_reconnecting/and_an_immediate_open_wins_the_backoff_race.js.map +1 -0
  108. package/dist/esm/queries/for_ServerSentEventHubConnection/when_replacing_a_subscription/ignores_messages_from_the_retired_generation.d.ts +2 -0
  109. package/dist/esm/queries/for_ServerSentEventHubConnection/when_replacing_a_subscription/ignores_messages_from_the_retired_generation.d.ts.map +1 -0
  110. package/dist/esm/queries/for_ServerSentEventHubConnection/when_replacing_a_subscription/ignores_messages_from_the_retired_generation.js +68 -0
  111. package/dist/esm/queries/for_ServerSentEventHubConnection/when_replacing_a_subscription/ignores_messages_from_the_retired_generation.js.map +1 -0
  112. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscribing/sends_subscribe_post.js +38 -13
  113. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscribing/sends_subscribe_post.js.map +1 -1
  114. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscription_revisions_are_not_advertised/uses_legacy_protocol.d.ts +2 -0
  115. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscription_revisions_are_not_advertised/uses_legacy_protocol.d.ts.map +1 -0
  116. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscription_revisions_are_not_advertised/uses_legacy_protocol.js +54 -0
  117. package/dist/esm/queries/for_ServerSentEventHubConnection/when_subscription_revisions_are_not_advertised/uses_legacy_protocol.js.map +1 -0
  118. package/dist/esm/queries/for_ServerSentEventHubConnection/when_unsubscribing/the_only_query.js +18 -4
  119. package/dist/esm/queries/for_ServerSentEventHubConnection/when_unsubscribing/the_only_query.js.map +1 -1
  120. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js +22 -5
  121. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js.map +1 -1
  122. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/ignores_a_pending_reconnect_and_stale_socket_callbacks.d.ts +2 -0
  123. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/ignores_a_pending_reconnect_and_stale_socket_callbacks.d.ts.map +1 -0
  124. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/ignores_a_pending_reconnect_and_stale_socket_callbacks.js +108 -0
  125. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/ignores_a_pending_reconnect_and_stale_socket_callbacks.js.map +1 -0
  126. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/replaces_a_closing_socket_safely.d.ts +2 -0
  127. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/replaces_a_closing_socket_safely.d.ts.map +1 -0
  128. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/replaces_a_closing_socket_safely.js +33 -0
  129. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/replaces_a_closing_socket_safely.js.map +1 -0
  130. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/resubscribes_all_queries.js +26 -4
  131. package/dist/esm/queries/for_WebSocketHubConnection/when_reconnecting/resubscribes_all_queries.js.map +1 -1
  132. package/dist/esm/queries/for_WebSocketHubConnection/when_replacing_a_subscription/ignores_stale_result_unauthorized_and_error.d.ts +2 -0
  133. package/dist/esm/queries/for_WebSocketHubConnection/when_replacing_a_subscription/ignores_stale_result_unauthorized_and_error.d.ts.map +1 -0
  134. package/dist/esm/queries/for_WebSocketHubConnection/when_replacing_a_subscription/ignores_stale_result_unauthorized_and_error.js +62 -0
  135. package/dist/esm/queries/for_WebSocketHubConnection/when_replacing_a_subscription/ignores_stale_result_unauthorized_and_error.js.map +1 -0
  136. package/dist/esm/queries/for_WebSocketHubConnection/when_subscribing/to_a_query.js +18 -5
  137. package/dist/esm/queries/for_WebSocketHubConnection/when_subscribing/to_a_query.js.map +1 -1
  138. package/dist/esm/queries/for_WebSocketHubConnection/when_subscription_revisions_are_supported/upgrades_active_subscriptions_to_strict_mode.d.ts +2 -0
  139. package/dist/esm/queries/for_WebSocketHubConnection/when_subscription_revisions_are_supported/upgrades_active_subscriptions_to_strict_mode.d.ts.map +1 -0
  140. package/dist/esm/queries/for_WebSocketHubConnection/when_subscription_revisions_are_supported/upgrades_active_subscriptions_to_strict_mode.js +56 -0
  141. package/dist/esm/queries/for_WebSocketHubConnection/when_subscription_revisions_are_supported/upgrades_active_subscriptions_to_strict_mode.js.map +1 -0
  142. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/the_only_query.js +16 -3
  143. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/the_only_query.js.map +1 -1
  144. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/with_revision_support_not_advertised.d.ts +2 -0
  145. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/with_revision_support_not_advertised.d.ts.map +1 -0
  146. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/with_revision_support_not_advertised.js +33 -0
  147. package/dist/esm/queries/for_WebSocketHubConnection/when_unsubscribing/with_revision_support_not_advertised.js.map +1 -0
  148. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +1 -1
  150. package/queries/IQueryResult.ts +10 -0
  151. package/queries/ObservableQueryFor.ts +44 -16
  152. package/queries/QueryInstanceCache.ts +42 -19
  153. package/queries/QueryResult.ts +145 -79
  154. package/queries/QueryResultWithState.ts +32 -9
  155. package/queries/ServerSentEventHubConnection.ts +270 -83
  156. package/queries/WebSocketHubConnection.ts +188 -56
  157. package/queries/for_ObservableQueryFor/when_performing/with_a_not_ready_result.ts +46 -0
  158. package/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_and_sse_transport.ts +91 -57
  159. package/queries/for_ObservableQueryFor/when_subscribing/with_direct_mode_disabled_and_sse_transport.ts +125 -53
  160. package/queries/for_ObservableQueryFor/when_subscribing/with_web_socket_hub_payload_without_readiness.ts +107 -0
  161. package/queries/for_QueryInstanceCache/when_setting_last_result/with_only_readiness_changed.ts +63 -0
  162. package/queries/for_QueryResult/when_constructing_from_a_server_result/with_readiness_false.ts +25 -0
  163. package/queries/for_QueryResult/when_constructing_from_a_server_result/without_readiness.ts +24 -0
  164. package/queries/for_QueryResultWithState/when_creating_from_query_result/with_readiness_false.ts +28 -0
  165. package/queries/for_QueryResultWithState/when_creating_from_query_result/without_readiness.ts +25 -0
  166. package/queries/for_ServerSentEventHubConnection/given/a_deferred_promise.ts +15 -0
  167. package/queries/for_ServerSentEventHubConnection/given/a_server_sent_event_hub_connection.ts +18 -7
  168. package/queries/for_ServerSentEventHubConnection/when_a_retired_event_source_fires/ignores_connected_and_error_callbacks.ts +59 -0
  169. package/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_replaced.ts +113 -0
  170. package/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_query_is_unsubscribed.ts +109 -0
  171. package/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_is_rejected.ts +81 -0
  172. package/queries/for_ServerSentEventHubConnection/when_connection_changes_while_subscribe_is_in_flight/and_the_stale_request_returns_non_ok.ts +83 -0
  173. package/queries/for_ServerSentEventHubConnection/when_disposing/cleans_up_resources.ts +30 -21
  174. package/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.ts +56 -32
  175. package/queries/for_ServerSentEventHubConnection/when_reconnecting/after_error.ts +23 -6
  176. package/queries/for_ServerSentEventHubConnection/when_reconnecting/and_an_immediate_open_wins_the_backoff_race.ts +41 -0
  177. package/queries/for_ServerSentEventHubConnection/when_replacing_a_subscription/ignores_messages_from_the_retired_generation.ts +92 -0
  178. package/queries/for_ServerSentEventHubConnection/when_subscribing/sends_subscribe_post.ts +69 -30
  179. package/queries/for_ServerSentEventHubConnection/when_subscription_revisions_are_not_advertised/uses_legacy_protocol.ts +69 -0
  180. package/queries/for_ServerSentEventHubConnection/when_unsubscribing/the_only_query.ts +43 -24
  181. package/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.ts +53 -29
  182. package/queries/for_WebSocketHubConnection/when_reconnecting/ignores_a_pending_reconnect_and_stale_socket_callbacks.ts +131 -0
  183. package/queries/for_WebSocketHubConnection/when_reconnecting/replaces_a_closing_socket_safely.ts +39 -0
  184. package/queries/for_WebSocketHubConnection/when_reconnecting/resubscribes_all_queries.ts +72 -36
  185. package/queries/for_WebSocketHubConnection/when_replacing_a_subscription/ignores_stale_result_unauthorized_and_error.ts +88 -0
  186. package/queries/for_WebSocketHubConnection/when_subscribing/to_a_query.ts +54 -27
  187. package/queries/for_WebSocketHubConnection/when_subscription_revisions_are_supported/upgrades_active_subscriptions_to_strict_mode.ts +72 -0
  188. package/queries/for_WebSocketHubConnection/when_unsubscribing/the_only_query.ts +43 -18
  189. package/queries/for_WebSocketHubConnection/when_unsubscribing/with_revision_support_not_advertised.ts +44 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/arc",
3
- "version": "22.0.2",
3
+ "version": "22.1.0",
4
4
  "description": "",
5
5
  "author": "Cratis",
6
6
  "license": "MIT",
@@ -24,6 +24,16 @@ export interface IQueryResult<TDataType> {
24
24
  */
25
25
  readonly isSuccess: boolean;
26
26
 
27
+ /**
28
+ * Gets whether the query has produced a result.
29
+ * A false value is a transient observable-query state, not a failure.
30
+ *
31
+ * Optional for source compatibility with older servers and third-party structural results that
32
+ * predate readiness. Arc normalizes transport results that omit it to true, while SDK-produced
33
+ * result classes always expose a concrete boolean.
34
+ */
35
+ readonly isReady?: boolean;
36
+
27
37
  /**
28
38
  * Gets whether or not the query was authorized to execute.
29
39
  */
@@ -28,7 +28,10 @@ import { executeQueryHttpRequest } from './QueryHttpRequest';
28
28
  * Represents an implementation of {@link IQueryFor}.
29
29
  * @template TDataType Type of data returned by the query.
30
30
  */
31
- export abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {
31
+ export abstract class ObservableQueryFor<
32
+ TDataType,
33
+ TParameters = object,
34
+ > implements IObservableQueryFor<TDataType, TParameters> {
32
35
  private _microservice: string;
33
36
  private _apiBasePath: string;
34
37
  private _origin: string;
@@ -52,7 +55,10 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
52
55
  * @param modelType Type of model, if an enumerable, this is the instance type.
53
56
  * @param enumerable Whether or not it is an enumerable.
54
57
  */
55
- constructor(readonly modelType: Constructor, readonly enumerable: boolean) {
58
+ constructor(
59
+ readonly modelType: Constructor,
60
+ readonly enumerable: boolean,
61
+ ) {
56
62
  this.sorting = Sorting.none;
57
63
  this.paging = Paging.noPaging;
58
64
  this._microservice = Globals.microservice ?? '';
@@ -94,18 +100,23 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
94
100
  }
95
101
 
96
102
  /** @inheritdoc */
97
- subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {
103
+ subscribe(
104
+ callback: OnNextResult<QueryResult<TDataType>>,
105
+ args?: TParameters,
106
+ ): ObservableQuerySubscription<TDataType> {
98
107
  if (this._connection) {
99
108
  this._connection.disconnect();
100
109
  }
101
110
 
102
- const clientValidationErrors = this.validation?.validate(args as object || {}) || [];
111
+ const clientValidationErrors =
112
+ this.validation?.validate((args as object) || {}) || [];
103
113
  if (clientValidationErrors.length > 0) {
104
114
  // Serve the failure through the connection rather than throwing, so a subscriber sees an invalid result
105
115
  // on its normal callback path instead of the empty result an unestablished connection would emit.
106
116
  this._connection = new NullObservableQueryConnection(
107
117
  this.defaultValue,
108
- QueryResult.validationFailed(clientValidationErrors, this));
118
+ QueryResult.validationFailed(clientValidationErrors, this),
119
+ );
109
120
  } else if (this.validateArguments(args)) {
110
121
  this._connection = createObservableQueryConnection({
111
122
  route: this.route,
@@ -128,17 +139,25 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
128
139
  // In multiplexed mode ALL arguments — including route-derived ones — must be included
129
140
  // in the subscribe payload so the server can execute the query correctly.
130
141
  const parameterValues = ParametersHelper.collectParameterValues(this);
131
- const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);
142
+ const { unusedParameters } = UrlHelpers.replaceRouteParameters(
143
+ this.route,
144
+ args as object,
145
+ );
132
146
  const connectionQueryArguments: any = {
133
147
  ...parameterValues,
134
148
  ...(Globals.queryDirectMode ? unusedParameters : (args as object) || {}),
135
- ...this.buildQueryArguments()
149
+ ...this.buildQueryArguments(),
136
150
  };
137
151
 
138
152
  const subscriber = new ObservableQuerySubscription(this._connection);
139
- this._connection.connect(data => {
153
+ this._connection.connect((data) => {
140
154
  const result: any = data;
141
155
  try {
156
+ // Observable transports deliver structural query-result envelopes directly instead of
157
+ // constructing QueryResult. Servers predating readiness therefore omit the member;
158
+ // those results are complete by definition and must be normalized before subscribers
159
+ // observe them. Preserve an explicit false transient state from newer servers.
160
+ result.isReady ??= true;
142
161
  this.deserializeResult(result);
143
162
  callback(result);
144
163
  } catch (ex) {
@@ -150,9 +169,13 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
150
169
 
151
170
  /** @inheritdoc */
152
171
  async perform(args?: TParameters): Promise<QueryResult<TDataType>> {
153
- const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;
172
+ const noSuccess = {
173
+ ...QueryResult.noSuccess,
174
+ ...{ data: this.defaultValue },
175
+ } as QueryResult<TDataType>;
154
176
 
155
- const clientValidationErrors = this.validation?.validate(args as object || {}) || [];
177
+ const clientValidationErrors =
178
+ this.validation?.validate((args as object) || {}) || [];
156
179
  if (clientValidationErrors.length > 0) {
157
180
  return QueryResult.validationFailed(clientValidationErrors, this);
158
181
  }
@@ -168,8 +191,8 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
168
191
 
169
192
  const headers = {
170
193
  ...(this._httpHeadersCallback?.() || {}),
171
- 'Accept': 'application/json',
172
- 'Content-Type': 'application/json'
194
+ Accept: 'application/json',
195
+ 'Content-Type': 'application/json',
173
196
  };
174
197
 
175
198
  if (this._microservice?.length > 0) {
@@ -184,7 +207,7 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
184
207
  parameterValues,
185
208
  paging: this.paging,
186
209
  sorting: this.sorting,
187
- headers
210
+ headers,
188
211
  });
189
212
 
190
213
  try {
@@ -197,8 +220,12 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
197
220
 
198
221
  private validateArguments(args?: TParameters): boolean {
199
222
  const parameterValues = ParametersHelper.collectParameterValues(this);
200
- const combinedArgs = { ...(args as object || {}), ...parameterValues };
201
- return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);
223
+ const combinedArgs = { ...((args as object) || {}), ...parameterValues };
224
+ return ValidateRequestArguments(
225
+ this.constructor.name,
226
+ this.requiredRequestParameters,
227
+ combinedArgs as object,
228
+ );
202
229
  }
203
230
 
204
231
  private buildQueryArguments(): any {
@@ -211,7 +238,8 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
211
238
 
212
239
  if (this.sorting.hasSorting) {
213
240
  queryArguments.sortBy = this.sorting.field;
214
- queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';
241
+ queryArguments.sortDirection =
242
+ this.sorting.direction === SortDirection.descending ? 'desc' : 'asc';
215
243
  }
216
244
 
217
245
  return queryArguments;
@@ -2,7 +2,10 @@
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
3
 
4
4
  import { QueryResultWithState } from './QueryResultWithState';
5
- import { CacheDiagnostics, CacheEntryDiagnostics } from './ObservableQueryDiagnosticsSnapshot';
5
+ import type {
6
+ CacheDiagnostics,
7
+ CacheEntryDiagnostics,
8
+ } from './ObservableQueryDiagnosticsSnapshot';
6
9
  import { reconcileQueryData } from './reconcileQueryData';
7
10
 
8
11
  /**
@@ -13,7 +16,9 @@ export type QueryCacheKey = string;
13
16
  /**
14
17
  * Callback invoked when the cached result for an entry changes.
15
18
  */
16
- export type QueryCacheListener<TDataType> = (result: QueryResultWithState<TDataType>) => void;
19
+ export type QueryCacheListener<TDataType> = (
20
+ result: QueryResultWithState<TDataType>,
21
+ ) => void;
17
22
 
18
23
  /**
19
24
  * Represents a single entry in the {@link QueryInstanceCache}.
@@ -78,12 +83,11 @@ export class QueryInstanceCache {
78
83
  * value lets users navigate away and back without losing cached data. Defaults to
79
84
  * 30 000 ms. Pass 0 for immediate eviction.
80
85
  */
81
- constructor(private readonly _retentionMs: number = 30_000) {
82
- }
86
+ constructor(private readonly _retentionMs: number = 30_000) {}
83
87
 
84
88
  /**
85
89
  * Builds the cache key for a query.
86
- * @param queryTypeName The stable type name for the query. Use the instance's {@link queryName}
90
+ * @param queryTypeName The stable type name for the query. Use the instance's `queryName`
87
91
  * (a hardcoded fully-qualified string in generated proxies) rather than {@link Function.name},
88
92
  * which is unstable under minification.
89
93
  * @param args Optional arguments supplied to the query.
@@ -114,7 +118,7 @@ export class QueryInstanceCache {
114
118
  */
115
119
  getOrCreate<TInstance>(
116
120
  key: QueryCacheKey,
117
- factory: () => TInstance
121
+ factory: () => TInstance,
118
122
  ): { instance: TInstance; isNew: boolean } {
119
123
  if (!this._entries.has(key)) {
120
124
  const entry: QueryCacheEntry<unknown> = {
@@ -159,8 +163,12 @@ export class QueryInstanceCache {
159
163
  * @param key The cache key produced by {@link buildKey}.
160
164
  * @returns The last {@link QueryResultWithState}, or `undefined`.
161
165
  */
162
- getLastResult<TDataType>(key: QueryCacheKey): QueryResultWithState<TDataType> | undefined {
163
- return this._entries.get(key)?.lastResult as QueryResultWithState<TDataType> | undefined;
166
+ getLastResult<TDataType>(
167
+ key: QueryCacheKey,
168
+ ): QueryResultWithState<TDataType> | undefined {
169
+ return this._entries.get(key)?.lastResult as
170
+ | QueryResultWithState<TDataType>
171
+ | undefined;
164
172
  }
165
173
 
166
174
  /**
@@ -169,31 +177,38 @@ export class QueryInstanceCache {
169
177
  * @param key The cache key produced by {@link buildKey}.
170
178
  * @param result The result to store.
171
179
  */
172
- setLastResult<TDataType>(key: QueryCacheKey, result: QueryResultWithState<TDataType>): void {
180
+ setLastResult<TDataType>(
181
+ key: QueryCacheKey,
182
+ result: QueryResultWithState<TDataType>,
183
+ ): void {
173
184
  const entry = this._entries.get(key);
174
185
 
175
186
  if (!entry) {
176
187
  return;
177
188
  }
178
189
 
179
- const previousResult = entry.lastResult as QueryResultWithState<TDataType> | undefined;
190
+ const previousResult = entry.lastResult as
191
+ | QueryResultWithState<TDataType>
192
+ | undefined;
180
193
 
181
194
  // Reconcile the incoming payload against the one already held so items that did not actually
182
195
  // change keep their previous references. A full snapshot — which is what the server re-sends
183
196
  // whenever a subscription is re-established — otherwise arrives as all-new references and
184
197
  // makes every consumer treat every item as changed.
185
- const reconciled = previousResult !== undefined
186
- ? this.withReconciledData(previousResult, result)
187
- : result;
198
+ const reconciled =
199
+ previousResult === undefined
200
+ ? result
201
+ : this.withReconciledData(previousResult, result);
188
202
 
189
203
  entry.lastResult = reconciled as QueryResultWithState<unknown>;
190
204
 
191
205
  // Reconciliation returns the previous data reference when nothing changed, so identity is
192
- // enough to detect it. Only `data` and `isSuccess` matter here — the other fields (e.g.
193
- // changeSet) are ephemeral and do not affect what the user sees.
206
+ // enough to detect it. Data, success, and readiness affect what the user sees; changeSet is
207
+ // ephemeral and does not independently require a notification.
194
208
  if (
195
209
  previousResult !== undefined &&
196
210
  previousResult.isSuccess === reconciled.isSuccess &&
211
+ previousResult.isReady === reconciled.isReady &&
197
212
  previousResult.data === reconciled.data
198
213
  ) {
199
214
  return;
@@ -214,7 +229,7 @@ export class QueryInstanceCache {
214
229
  */
215
230
  private withReconciledData<TDataType>(
216
231
  previous: QueryResultWithState<TDataType>,
217
- next: QueryResultWithState<TDataType>
232
+ next: QueryResultWithState<TDataType>,
218
233
  ): QueryResultWithState<TDataType> {
219
234
  const reconciledData = reconcileQueryData(previous.data, next.data);
220
235
 
@@ -233,7 +248,9 @@ export class QueryInstanceCache {
233
248
  next.exceptionMessages,
234
249
  next.exceptionStackTrace,
235
250
  next.isPerforming,
236
- next.changeSet);
251
+ next.changeSet,
252
+ next.isReady,
253
+ );
237
254
  }
238
255
 
239
256
  /**
@@ -242,7 +259,10 @@ export class QueryInstanceCache {
242
259
  * @param key The cache key produced by {@link buildKey}.
243
260
  * @param listener The callback to register.
244
261
  */
245
- addListener<TDataType>(key: QueryCacheKey, listener: QueryCacheListener<TDataType>): void {
262
+ addListener<TDataType>(
263
+ key: QueryCacheKey,
264
+ listener: QueryCacheListener<TDataType>,
265
+ ): void {
246
266
  const entry = this._entries.get(key);
247
267
 
248
268
  if (entry) {
@@ -256,7 +276,10 @@ export class QueryInstanceCache {
256
276
  * @param key The cache key produced by {@link buildKey}.
257
277
  * @param listener The callback to remove.
258
278
  */
259
- removeListener<TDataType>(key: QueryCacheKey, listener: QueryCacheListener<TDataType>): void {
279
+ removeListener<TDataType>(
280
+ key: QueryCacheKey,
281
+ listener: QueryCacheListener<TDataType>,
282
+ ): void {
260
283
  const entry = this._entries.get(key);
261
284
 
262
285
  if (entry) {
@@ -13,6 +13,7 @@ type ServerQueryResult = {
13
13
  data: any;
14
14
  /* eslint-enable @typescript-eslint/no-explicit-any */
15
15
  isSuccess: boolean;
16
+ isReady?: boolean;
16
17
  isAuthorized: boolean;
17
18
  isValid: boolean;
18
19
  hasExceptions: boolean;
@@ -21,7 +22,7 @@ type ServerQueryResult = {
21
22
  exceptionStackTrace: string;
22
23
  paging: ServerPagingInfo;
23
24
  changeSet?: ServerChangeSet;
24
- }
25
+ };
25
26
 
26
27
  type ServerChangeSet = {
27
28
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -30,7 +31,7 @@ type ServerChangeSet = {
30
31
  replaced: any[];
31
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
33
  removed: any[];
33
- }
34
+ };
34
35
 
35
36
  type ServerValidationResult = {
36
37
  severity: number;
@@ -39,39 +40,47 @@ type ServerValidationResult = {
39
40
  state: object;
40
41
  reason?: string;
41
42
  reasonDetail?: string;
42
- }
43
+ };
43
44
 
44
45
  type ServerPagingInfo = {
45
46
  page: number;
46
- size: number;
47
+ size: number;
47
48
  totalItems: number;
48
49
  totalPages: number;
49
- }
50
+ };
50
51
 
51
52
  /**
52
53
  * Represents the result from executing a {@link IQueryFor}.
53
54
  * @template TDataType The data type.
54
55
  */
55
56
  export class QueryResult<TDataType = object> implements IQueryResult<TDataType> {
56
-
57
+ /**
58
+ * Creates a settled empty result. It is ready because no server result is pending.
59
+ * @param defaultValue The query's empty data value.
60
+ * @returns A ready empty result.
61
+ */
57
62
  static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType> {
58
- return new QueryResult({
59
- data: defaultValue as object,
60
- isSuccess: true,
61
- isAuthorized: true,
62
- isValid: true,
63
- hasExceptions: false,
64
- validationResults: [],
65
- exceptionMessages: [],
66
- exceptionStackTrace: '',
67
- paging: {
68
- totalItems: 0,
69
- totalPages: 0,
70
- page: 0,
71
- size: 0
72
- }
73
-
74
- }, Object, false);
63
+ return new QueryResult(
64
+ {
65
+ data: defaultValue as object,
66
+ isSuccess: true,
67
+ isReady: true,
68
+ isAuthorized: true,
69
+ isValid: true,
70
+ hasExceptions: false,
71
+ validationResults: [],
72
+ exceptionMessages: [],
73
+ exceptionStackTrace: '',
74
+ paging: {
75
+ totalItems: 0,
76
+ totalPages: 0,
77
+ page: 0,
78
+ size: 0,
79
+ },
80
+ },
81
+ Object,
82
+ false,
83
+ );
75
84
  }
76
85
 
77
86
  /**
@@ -79,42 +88,86 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
79
88
  * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.
80
89
  * @param {ValidationResult[]} validationResults The validation results that caused the failure.
81
90
  * @param {object} query The query being rejected, which describes how to shape its own result.
82
- * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.
91
+ * @returns {QueryResult<TDataType>} A ready result that is neither successful nor valid.
83
92
  */
84
93
  static validationFailed<TDataType>(
85
94
  validationResults: ValidationResult[],
86
- query: { readonly defaultValue: TDataType; readonly modelType: Constructor; readonly enumerable: boolean }): QueryResult<TDataType> {
95
+ query: {
96
+ readonly defaultValue: TDataType;
97
+ readonly modelType: Constructor;
98
+ readonly enumerable: boolean;
99
+ },
100
+ ): QueryResult<TDataType> {
87
101
  const { defaultValue, modelType, enumerable } = query;
88
- return new QueryResult({
89
- data: defaultValue as object,
90
- isSuccess: false,
91
- isAuthorized: true,
92
- isValid: false,
93
- hasExceptions: false,
94
- validationResults: validationResults.map(_ => ({
95
- severity: _.severity,
96
- message: _.message,
97
- members: _.members,
98
- state: _.state,
99
- reason: _.reason,
100
- reasonDetail: _.reasonDetail
101
- })),
102
- exceptionMessages: [],
103
- exceptionStackTrace: '',
104
- paging: {
105
- totalItems: 0,
106
- totalPages: 0,
107
- page: 0,
108
- size: 0
109
- }
110
- }, modelType, enumerable) as QueryResult<TDataType>;
102
+ return new QueryResult(
103
+ {
104
+ data: defaultValue as object,
105
+ isSuccess: false,
106
+ isReady: true,
107
+ isAuthorized: true,
108
+ isValid: false,
109
+ hasExceptions: false,
110
+ validationResults: validationResults.map((_) => ({
111
+ severity: _.severity,
112
+ message: _.message,
113
+ members: _.members,
114
+ state: _.state,
115
+ reason: _.reason,
116
+ reasonDetail: _.reasonDetail,
117
+ })),
118
+ exceptionMessages: [],
119
+ exceptionStackTrace: '',
120
+ paging: {
121
+ totalItems: 0,
122
+ totalPages: 0,
123
+ page: 0,
124
+ size: 0,
125
+ },
126
+ },
127
+ modelType,
128
+ enumerable,
129
+ ) as QueryResult<TDataType>;
111
130
  }
112
131
 
132
+ /**
133
+ * Creates a settled unauthorized result. Authorization rejection is terminal, so the result is ready.
134
+ * @returns A ready unauthorized result.
135
+ */
113
136
  static unauthorized<TDataType>(): QueryResult<TDataType> {
114
- return new QueryResult({
115
- data: null as unknown as object,
137
+ return new QueryResult(
138
+ {
139
+ // SAFETY: An unauthorized result intentionally has no data, while the wire envelope uses object.
140
+ data: null as unknown as object,
141
+ isSuccess: false,
142
+ isReady: true,
143
+ isAuthorized: false,
144
+ isValid: true,
145
+ hasExceptions: false,
146
+ validationResults: [],
147
+ exceptionMessages: [],
148
+ exceptionStackTrace: '',
149
+ paging: {
150
+ totalItems: 0,
151
+ totalPages: 0,
152
+ page: 0,
153
+ size: 0,
154
+ },
155
+ },
156
+ Object,
157
+ false,
158
+ );
159
+ }
160
+
161
+ /**
162
+ * A settled unsuccessful result used for client-side and transport failures. These failures are ready because
163
+ * the client has completed the attempt; they are not the server's transient not-ready state.
164
+ */
165
+ static noSuccess: QueryResult = new QueryResult(
166
+ {
167
+ data: {},
116
168
  isSuccess: false,
117
- isAuthorized: false,
169
+ isReady: true,
170
+ isAuthorized: true,
118
171
  isValid: true,
119
172
  hasExceptions: false,
120
173
  validationResults: [],
@@ -124,27 +177,12 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
124
177
  totalItems: 0,
125
178
  totalPages: 0,
126
179
  page: 0,
127
- size: 0
128
- }
129
- }, Object, false);
130
- }
131
-
132
- static noSuccess: QueryResult = new QueryResult({
133
- data: {},
134
- isSuccess: false,
135
- isAuthorized: true,
136
- isValid: true,
137
- hasExceptions: false,
138
- validationResults: [],
139
- exceptionMessages: [],
140
- exceptionStackTrace: '',
141
- paging: {
142
- totalItems: 0,
143
- totalPages: 0,
144
- page: 0,
145
- size: 0
146
- }
147
- }, Object, false);
180
+ size: 0,
181
+ },
182
+ },
183
+ Object,
184
+ false,
185
+ );
148
186
 
149
187
  /**
150
188
  * Creates an instance of query result.
@@ -152,12 +190,29 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
152
190
  * @param {Constructor} instanceType The type of instance to deserialize.
153
191
  * @param {boolean} enumerable Whether or not the result is supposed be an enumerable or not.
154
192
  */
155
- constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean) {
193
+ constructor(
194
+ result: ServerQueryResult,
195
+ instanceType: Constructor,
196
+ enumerable: boolean,
197
+ ) {
156
198
  this.isSuccess = result.isSuccess;
199
+ // Older servers and hand-built envelopes do not carry readiness. Those results predate
200
+ // the transient not-ready state and are therefore complete from the client's perspective.
201
+ this.isReady = result.isReady ?? true;
157
202
  this.isAuthorized = result.isAuthorized;
158
203
  this.isValid = result.isValid;
159
204
  this.hasExceptions = result.hasExceptions;
160
- this.validationResults = result.validationResults.map(_ => new ValidationResult(_.severity, _.message, _.members, _.state, _.reason, _.reasonDetail));
205
+ this.validationResults = result.validationResults.map(
206
+ (_) =>
207
+ new ValidationResult(
208
+ _.severity,
209
+ _.message,
210
+ _.members,
211
+ _.state,
212
+ _.reason,
213
+ _.reasonDetail,
214
+ ),
215
+ );
161
216
  this.exceptionMessages = result.exceptionMessages;
162
217
  this.exceptionStackTrace = result.exceptionStackTrace;
163
218
  this.paging = new PagingInfo();
@@ -167,9 +222,11 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
167
222
  this.paging.totalPages = result.paging.totalPages;
168
223
 
169
224
  if (result.data) {
170
- this.data = (enumerable
171
- ? deserializeQueryModels(instanceType, result.data)
172
- : deserializeQueryModel(instanceType, result.data)) as TDataType;
225
+ this.data = (
226
+ enumerable
227
+ ? deserializeQueryModels(instanceType, result.data)
228
+ : deserializeQueryModel(instanceType, result.data)
229
+ ) as TDataType;
173
230
  } else {
174
231
  this.data = (enumerable ? [] : null) as TDataType;
175
232
  }
@@ -177,8 +234,14 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
177
234
  if (enumerable && result.changeSet) {
178
235
  this.changeSet = {
179
236
  added: deserializeQueryModels(instanceType, result.changeSet.added ?? []),
180
- replaced: deserializeQueryModels(instanceType, result.changeSet.replaced ?? []),
181
- removed: deserializeQueryModels(instanceType, result.changeSet.removed ?? []),
237
+ replaced: deserializeQueryModels(
238
+ instanceType,
239
+ result.changeSet.replaced ?? [],
240
+ ),
241
+ removed: deserializeQueryModels(
242
+ instanceType,
243
+ result.changeSet.removed ?? [],
244
+ ),
182
245
  } as ChangeSet<unknown>;
183
246
  }
184
247
  }
@@ -192,6 +255,9 @@ export class QueryResult<TDataType = object> implements IQueryResult<TDataType>
192
255
  /** @inheritdoc */
193
256
  readonly isSuccess: boolean;
194
257
 
258
+ /** @inheritdoc */
259
+ readonly isReady: boolean;
260
+
195
261
  /** @inheritdoc */
196
262
  readonly isAuthorized: boolean;
197
263