@milaboratories/pl-client 2.17.6 → 2.17.8

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 (274) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +43 -0
  2. package/dist/_virtual/_rolldown/runtime.js +18 -0
  3. package/dist/core/PromiseTracker.cjs +33 -33
  4. package/dist/core/PromiseTracker.cjs.map +1 -1
  5. package/dist/core/PromiseTracker.d.ts +10 -7
  6. package/dist/core/PromiseTracker.js +33 -31
  7. package/dist/core/PromiseTracker.js.map +1 -1
  8. package/dist/core/StatefulPromise.cjs +60 -61
  9. package/dist/core/StatefulPromise.cjs.map +1 -1
  10. package/dist/core/StatefulPromise.js +60 -60
  11. package/dist/core/StatefulPromise.js.map +1 -1
  12. package/dist/core/abstract_stream.d.ts +18 -15
  13. package/dist/core/advisory_locks.cjs +42 -49
  14. package/dist/core/advisory_locks.cjs.map +1 -1
  15. package/dist/core/advisory_locks.js +42 -48
  16. package/dist/core/advisory_locks.js.map +1 -1
  17. package/dist/core/auth.cjs +10 -15
  18. package/dist/core/auth.cjs.map +1 -1
  19. package/dist/core/auth.d.ts +7 -3
  20. package/dist/core/auth.js +10 -13
  21. package/dist/core/auth.js.map +1 -1
  22. package/dist/core/cache.d.ts +11 -7
  23. package/dist/core/client.cjs +255 -306
  24. package/dist/core/client.cjs.map +1 -1
  25. package/dist/core/client.d.ts +72 -68
  26. package/dist/core/client.js +253 -285
  27. package/dist/core/client.js.map +1 -1
  28. package/dist/core/config.cjs +81 -99
  29. package/dist/core/config.cjs.map +1 -1
  30. package/dist/core/config.d.ts +93 -90
  31. package/dist/core/config.js +81 -98
  32. package/dist/core/config.js.map +1 -1
  33. package/dist/core/default_client.cjs +84 -125
  34. package/dist/core/default_client.cjs.map +1 -1
  35. package/dist/core/default_client.d.ts +9 -6
  36. package/dist/core/default_client.js +78 -103
  37. package/dist/core/default_client.js.map +1 -1
  38. package/dist/core/driver.cjs +12 -16
  39. package/dist/core/driver.cjs.map +1 -1
  40. package/dist/core/driver.d.ts +18 -14
  41. package/dist/core/driver.js +12 -15
  42. package/dist/core/driver.js.map +1 -1
  43. package/dist/core/error_resource.cjs +5 -4
  44. package/dist/core/error_resource.cjs.map +1 -1
  45. package/dist/core/error_resource.js +5 -3
  46. package/dist/core/error_resource.js.map +1 -1
  47. package/dist/core/errors.cjs +104 -140
  48. package/dist/core/errors.cjs.map +1 -1
  49. package/dist/core/errors.d.ts +34 -30
  50. package/dist/core/errors.js +102 -137
  51. package/dist/core/errors.js.map +1 -1
  52. package/dist/core/final.cjs +63 -89
  53. package/dist/core/final.cjs.map +1 -1
  54. package/dist/core/final.d.ts +8 -4
  55. package/dist/core/final.js +63 -87
  56. package/dist/core/final.js.map +1 -1
  57. package/dist/core/ll_client.cjs +416 -521
  58. package/dist/core/ll_client.cjs.map +1 -1
  59. package/dist/core/ll_client.d.ts +100 -97
  60. package/dist/core/ll_client.js +415 -519
  61. package/dist/core/ll_client.js.map +1 -1
  62. package/dist/core/ll_transaction.cjs +206 -240
  63. package/dist/core/ll_transaction.cjs.map +1 -1
  64. package/dist/core/ll_transaction.d.ts +50 -52
  65. package/dist/core/ll_transaction.js +205 -238
  66. package/dist/core/ll_transaction.js.map +1 -1
  67. package/dist/core/stat.cjs +64 -63
  68. package/dist/core/stat.cjs.map +1 -1
  69. package/dist/core/stat.d.ts +35 -36
  70. package/dist/core/stat.js +64 -62
  71. package/dist/core/stat.js.map +1 -1
  72. package/dist/core/transaction.cjs +613 -650
  73. package/dist/core/transaction.cjs.map +1 -1
  74. package/dist/core/transaction.d.ts +165 -162
  75. package/dist/core/transaction.js +612 -648
  76. package/dist/core/transaction.js.map +1 -1
  77. package/dist/core/type_conversion.cjs +62 -83
  78. package/dist/core/type_conversion.cjs.map +1 -1
  79. package/dist/core/type_conversion.js +61 -81
  80. package/dist/core/type_conversion.js.map +1 -1
  81. package/dist/core/types.cjs +56 -86
  82. package/dist/core/types.cjs.map +1 -1
  83. package/dist/core/types.d.ts +63 -62
  84. package/dist/core/types.js +54 -83
  85. package/dist/core/types.js.map +1 -1
  86. package/dist/core/unauth_client.cjs +35 -41
  87. package/dist/core/unauth_client.cjs.map +1 -1
  88. package/dist/core/unauth_client.d.ts +18 -14
  89. package/dist/core/unauth_client.js +34 -39
  90. package/dist/core/unauth_client.js.map +1 -1
  91. package/dist/core/websocket_stream.cjs +277 -349
  92. package/dist/core/websocket_stream.cjs.map +1 -1
  93. package/dist/core/websocket_stream.js +275 -347
  94. package/dist/core/websocket_stream.js.map +1 -1
  95. package/dist/core/wire.d.ts +21 -17
  96. package/dist/helpers/pl.cjs +71 -73
  97. package/dist/helpers/pl.cjs.map +1 -1
  98. package/dist/helpers/pl.d.ts +40 -41
  99. package/dist/helpers/pl.js +66 -46
  100. package/dist/helpers/pl.js.map +1 -1
  101. package/dist/helpers/poll.cjs +99 -134
  102. package/dist/helpers/poll.cjs.map +1 -1
  103. package/dist/helpers/poll.d.ts +37 -34
  104. package/dist/helpers/poll.js +97 -113
  105. package/dist/helpers/poll.js.map +1 -1
  106. package/dist/helpers/retry_strategy.cjs +82 -87
  107. package/dist/helpers/retry_strategy.cjs.map +1 -1
  108. package/dist/helpers/retry_strategy.js +83 -86
  109. package/dist/helpers/retry_strategy.js.map +1 -1
  110. package/dist/helpers/tx_helpers.cjs +21 -20
  111. package/dist/helpers/tx_helpers.cjs.map +1 -1
  112. package/dist/helpers/tx_helpers.d.ts +11 -7
  113. package/dist/helpers/tx_helpers.js +20 -18
  114. package/dist/helpers/tx_helpers.js.map +1 -1
  115. package/dist/index.cjs +117 -106
  116. package/dist/index.d.ts +17 -17
  117. package/dist/index.js +17 -19
  118. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +72 -66
  119. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
  120. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts +35 -37
  121. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js +71 -64
  122. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
  123. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +12611 -12866
  124. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
  125. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +226 -226
  126. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
  127. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +281 -330
  128. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +225 -224
  129. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
  130. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +2640 -4294
  131. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +12608 -12706
  132. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
  133. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +1230 -1089
  134. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
  135. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +393 -420
  136. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +1228 -1083
  137. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
  138. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +142 -143
  139. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
  140. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts +62 -64
  141. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +140 -141
  142. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
  143. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +572 -487
  144. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
  145. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +125 -228
  146. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +572 -485
  147. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
  148. package/dist/proto-grpc/google/protobuf/any.cjs +131 -146
  149. package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
  150. package/dist/proto-grpc/google/protobuf/any.d.ts +78 -84
  151. package/dist/proto-grpc/google/protobuf/any.js +130 -144
  152. package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
  153. package/dist/proto-grpc/google/protobuf/duration.cjs +92 -100
  154. package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
  155. package/dist/proto-grpc/google/protobuf/duration.d.ts +38 -43
  156. package/dist/proto-grpc/google/protobuf/duration.js +91 -98
  157. package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
  158. package/dist/proto-grpc/google/protobuf/timestamp.cjs +117 -128
  159. package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
  160. package/dist/proto-grpc/google/protobuf/timestamp.d.ts +50 -55
  161. package/dist/proto-grpc/google/protobuf/timestamp.js +116 -126
  162. package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
  163. package/dist/proto-grpc/google/rpc/code.cjs +223 -238
  164. package/dist/proto-grpc/google/rpc/code.cjs.map +1 -1
  165. package/dist/proto-grpc/google/rpc/code.d.ts +209 -206
  166. package/dist/proto-grpc/google/rpc/code.js +221 -237
  167. package/dist/proto-grpc/google/rpc/code.js.map +1 -1
  168. package/dist/proto-rest/index.cjs +67 -66
  169. package/dist/proto-rest/index.cjs.map +1 -1
  170. package/dist/proto-rest/index.d.ts +24 -18
  171. package/dist/proto-rest/index.js +61 -65
  172. package/dist/proto-rest/index.js.map +1 -1
  173. package/dist/proto-rest/plapi.d.ts +1400 -1477
  174. package/dist/test/tcp-proxy.cjs +100 -126
  175. package/dist/test/tcp-proxy.cjs.map +1 -1
  176. package/dist/test/tcp-proxy.d.ts +17 -13
  177. package/dist/test/tcp-proxy.js +97 -104
  178. package/dist/test/tcp-proxy.js.map +1 -1
  179. package/dist/test/test_config.cjs +145 -194
  180. package/dist/test/test_config.cjs.map +1 -1
  181. package/dist/test/test_config.d.ts +34 -30
  182. package/dist/test/test_config.js +138 -166
  183. package/dist/test/test_config.js.map +1 -1
  184. package/dist/util/pl.cjs +4 -3
  185. package/dist/util/pl.cjs.map +1 -1
  186. package/dist/util/pl.js +4 -2
  187. package/dist/util/pl.js.map +1 -1
  188. package/dist/util/util.cjs +7 -10
  189. package/dist/util/util.cjs.map +1 -1
  190. package/dist/util/util.js +7 -9
  191. package/dist/util/util.js.map +1 -1
  192. package/package.json +10 -10
  193. package/src/core/transaction.ts +123 -133
  194. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -61
  195. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
  196. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -58
  197. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
  198. package/dist/core/PromiseTracker.d.ts.map +0 -1
  199. package/dist/core/StatefulPromise.d.ts +0 -39
  200. package/dist/core/StatefulPromise.d.ts.map +0 -1
  201. package/dist/core/abstract_stream.d.ts.map +0 -1
  202. package/dist/core/advisory_locks.d.ts +0 -10
  203. package/dist/core/advisory_locks.d.ts.map +0 -1
  204. package/dist/core/auth.d.ts.map +0 -1
  205. package/dist/core/cache.d.ts.map +0 -1
  206. package/dist/core/client.d.ts.map +0 -1
  207. package/dist/core/config.d.ts.map +0 -1
  208. package/dist/core/default_client.d.ts.map +0 -1
  209. package/dist/core/driver.d.ts.map +0 -1
  210. package/dist/core/error_resource.d.ts +0 -6
  211. package/dist/core/error_resource.d.ts.map +0 -1
  212. package/dist/core/errors.d.ts.map +0 -1
  213. package/dist/core/final.d.ts.map +0 -1
  214. package/dist/core/ll_client.d.ts.map +0 -1
  215. package/dist/core/ll_transaction.d.ts.map +0 -1
  216. package/dist/core/stat.d.ts.map +0 -1
  217. package/dist/core/transaction.d.ts.map +0 -1
  218. package/dist/core/type_conversion.d.ts +0 -8
  219. package/dist/core/type_conversion.d.ts.map +0 -1
  220. package/dist/core/types.d.ts.map +0 -1
  221. package/dist/core/unauth_client.d.ts.map +0 -1
  222. package/dist/core/websocket_stream.d.ts +0 -67
  223. package/dist/core/websocket_stream.d.ts.map +0 -1
  224. package/dist/core/wire.d.ts.map +0 -1
  225. package/dist/helpers/pl.d.ts.map +0 -1
  226. package/dist/helpers/poll.d.ts.map +0 -1
  227. package/dist/helpers/retry_strategy.d.ts +0 -24
  228. package/dist/helpers/retry_strategy.d.ts.map +0 -1
  229. package/dist/helpers/state_helpers.d.ts +0 -3
  230. package/dist/helpers/state_helpers.d.ts.map +0 -1
  231. package/dist/helpers/tx_helpers.d.ts.map +0 -1
  232. package/dist/index.cjs.map +0 -1
  233. package/dist/index.d.ts.map +0 -1
  234. package/dist/index.js.map +0 -1
  235. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +0 -1
  236. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +0 -1
  237. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +0 -1
  238. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +0 -1
  239. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +0 -1
  240. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts +0 -106
  241. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts.map +0 -1
  242. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +0 -1
  243. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts +0 -73
  244. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts.map +0 -1
  245. package/dist/proto-grpc/google/api/http.d.ts +0 -456
  246. package/dist/proto-grpc/google/api/http.d.ts.map +0 -1
  247. package/dist/proto-grpc/google/protobuf/any.d.ts.map +0 -1
  248. package/dist/proto-grpc/google/protobuf/descriptor.d.ts +0 -2340
  249. package/dist/proto-grpc/google/protobuf/descriptor.d.ts.map +0 -1
  250. package/dist/proto-grpc/google/protobuf/duration.d.ts.map +0 -1
  251. package/dist/proto-grpc/google/protobuf/empty.d.ts +0 -32
  252. package/dist/proto-grpc/google/protobuf/empty.d.ts.map +0 -1
  253. package/dist/proto-grpc/google/protobuf/struct.d.ts +0 -187
  254. package/dist/proto-grpc/google/protobuf/struct.d.ts.map +0 -1
  255. package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +0 -1
  256. package/dist/proto-grpc/google/protobuf/wrappers.d.ts +0 -308
  257. package/dist/proto-grpc/google/protobuf/wrappers.d.ts.map +0 -1
  258. package/dist/proto-grpc/google/rpc/code.d.ts.map +0 -1
  259. package/dist/proto-grpc/google/rpc/error_details.d.ts +0 -654
  260. package/dist/proto-grpc/google/rpc/error_details.d.ts.map +0 -1
  261. package/dist/proto-grpc/google/rpc/http.d.ts +0 -121
  262. package/dist/proto-grpc/google/rpc/http.d.ts.map +0 -1
  263. package/dist/proto-grpc/google/rpc/status.d.ts +0 -55
  264. package/dist/proto-grpc/google/rpc/status.d.ts.map +0 -1
  265. package/dist/proto-rest/index.d.ts.map +0 -1
  266. package/dist/proto-rest/plapi.d.ts.map +0 -1
  267. package/dist/test/tcp-proxy.d.ts.map +0 -1
  268. package/dist/test/test_config.d.ts.map +0 -1
  269. package/dist/util/branding.d.ts +0 -7
  270. package/dist/util/branding.d.ts.map +0 -1
  271. package/dist/util/pl.d.ts +0 -9
  272. package/dist/util/pl.d.ts.map +0 -1
  273. package/dist/util/util.d.ts +0 -2
  274. package/dist/util/util.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ll_transaction.js","sources":["../../src/core/ll_transaction.ts"],"sourcesContent":["import type {\n TxAPI_ClientMessage,\n TxAPI_ServerMessage,\n} from \"../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api\";\nimport type { BiDiStream } from \"./abstract_stream\";\nimport Denque from \"denque\";\nimport type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport {\n PlErrorCodeNotFound,\n RecoverablePlError,\n rethrowMeaningfulError,\n UnrecoverablePlError,\n} from \"./errors\";\nimport { StatefulPromise } from \"./StatefulPromise\";\n\nexport type ClientMessageRequest = TxAPI_ClientMessage[\"request\"];\n\nexport type ServerMessageResponse = TxAPI_ServerMessage[\"response\"];\n\ntype TxStream = BiDiStream<TxAPI_ClientMessage, TxAPI_ServerMessage>;\n\nexport type OneOfKind<T extends { oneofKind: unknown }, Kind extends T[\"oneofKind\"]> = Extract<\n T,\n { oneofKind: Kind }\n>;\n\ninterface SingleResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]> {\n kind: Kind;\n expectMultiResponse: false;\n resolve: (v: OneOfKind<ServerMessageResponse, Kind>) => void;\n reject: (e: Error) => void;\n}\n\ninterface MultiResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]> {\n kind: Kind;\n expectMultiResponse: true;\n resolve: (v: OneOfKind<ServerMessageResponse, Kind>[]) => void;\n reject: (e: Error) => void;\n}\n\ntype AnySingleResponseHandler = SingleResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\ntype AnyMultiResponseHandler = MultiResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\ntype AnyResponseHandler =\n | SingleResponseHandler<ServerMessageResponse[\"oneofKind\"]>\n | MultiResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\nfunction createResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]>(\n kind: Kind,\n expectMultiResponse: boolean,\n resolve:\n | ((v: OneOfKind<ServerMessageResponse, Kind>) => void)\n | ((v: OneOfKind<ServerMessageResponse, Kind>[]) => void),\n reject: (e: Error) => void,\n): AnyResponseHandler {\n return { kind, expectMultiResponse, resolve, reject } as AnyResponseHandler;\n}\n\nfunction isRecoverable(status: Status): boolean {\n return status.code === PlErrorCodeNotFound;\n}\n\nexport class RethrowError extends Error {\n name = \"RethrowError\";\n constructor(public readonly rethrowLambda: () => never) {\n super(\"Rethrow error, you should never see this one.\");\n }\n}\n\nexport class LLPlTransaction {\n /** Bidirectional channel through which transaction communicates with the server */\n private readonly stream: TxStream;\n\n /** Used to abort ongoing transaction stream */\n private readonly abortController = new AbortController();\n\n /** Counter of sent requests, used to calculate which future response will correspond to this request.\n * Incremented on each sent request. */\n private requestIdxCounter = 0;\n\n /** Queue from which incoming message processor takes handlers to which pass incoming messages */\n private readonly responseHandlerQueue = new Denque<AnyResponseHandler>();\n\n /** Each new resource, created by the transaction, is assigned with virtual (local) resource id, to make it possible\n * to populate its fields without awaiting actual resource id. This counter tracks those ids on client side, the\n * same way it is tracked on the server, so client can synchronously return such ids to the user. */\n private localResourceIdCounter = 0n;\n\n /** Switches to true, when this transaction closes due to normal or exceptional conditions. Prevents any new messages\n * to be sent to the stream. */\n private closed = false;\n /** Whether the outgoing stream was already closed. */\n private completed = false;\n\n /** If this transaction was terminated due to error, this is a generator to create new errors if corresponding response is required. */\n private errorFactory?: () => never;\n\n /** Timestamp when transaction was opened */\n private readonly openTimestamp = Date.now();\n\n private readonly incomingProcessorResult: Promise<(() => never) | null>;\n\n constructor(streamFactory: (abortSignal: AbortSignal) => TxStream) {\n this.stream = streamFactory(this.abortController.signal);\n\n // Starting incoming event processor\n this.incomingProcessorResult = this.incomingEventProcessor();\n }\n\n private assignErrorFactoryIfNotSet(\n errorFactory: () => never,\n reject?: (e: Error) => void,\n ): () => never {\n if (reject !== undefined) reject(new RethrowError(errorFactory));\n if (this.errorFactory) return errorFactory;\n this.errorFactory = errorFactory;\n return errorFactory;\n }\n\n private async incomingEventProcessor(): Promise<(() => never) | null> {\n /** Counter of received responses, used to check consistency of responses.\n * Increments on each received message. */\n let expectedId = -1;\n\n // defined externally to make possible to communicate any processing errors\n // to the specific request on which it happened\n let currentHandler: AnyResponseHandler | undefined = undefined;\n let responseAggregator: ServerMessageResponse[] | undefined = undefined;\n try {\n for await (const message of this.stream.responses) {\n if (currentHandler === undefined) {\n currentHandler = this.responseHandlerQueue.shift();\n\n if (currentHandler === undefined) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(`orphan incoming message`);\n });\n break;\n }\n\n // allocating response aggregator array\n if (currentHandler.expectMultiResponse) responseAggregator = [];\n\n expectedId++;\n }\n\n if (message.requestId !== expectedId) {\n const errorMessage = `out of order messages, ${message.requestId} !== ${expectedId}`;\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n });\n break;\n }\n\n if (message.error !== undefined) {\n const status = message.error;\n\n if (isRecoverable(status)) {\n currentHandler.reject(\n new RethrowError(() => {\n throw new RecoverablePlError(status);\n }),\n );\n currentHandler = undefined;\n\n if (message.multiMessage !== undefined && !message.multiMessage.isLast) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(\"Unexpected message sequence.\");\n });\n break;\n }\n\n // We can continue to work after recoverable errors\n continue;\n } else {\n this.assignErrorFactoryIfNotSet(() => {\n throw new UnrecoverablePlError(status);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n // In case of unrecoverable errors we close the transaction\n break;\n }\n }\n\n if (\n currentHandler.kind !== message.response.oneofKind &&\n message?.multiMessage?.isEmpty !== true\n ) {\n const errorMessage = `inconsistent request response types: ${currentHandler.kind} !== ${message.response.oneofKind}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n if (currentHandler.expectMultiResponse !== (message.multiMessage !== undefined)) {\n const errorMessage = `inconsistent multi state: ${currentHandler.expectMultiResponse} !== ${message.multiMessage !== undefined}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n // <- at this point we validated everything we can at this level\n\n if (message.multiMessage !== undefined) {\n if (!message.multiMessage.isEmpty) {\n if (message.multiMessage.id !== responseAggregator!.length + 1) {\n const errorMessage = `inconsistent multi id: ${message.multiMessage.id} !== ${responseAggregator!.length + 1}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n responseAggregator!.push(message.response);\n }\n\n if (message.multiMessage.isLast) {\n (currentHandler as AnyMultiResponseHandler).resolve(responseAggregator!);\n responseAggregator = undefined;\n currentHandler = undefined;\n }\n } else {\n (currentHandler as AnySingleResponseHandler).resolve(message.response);\n currentHandler = undefined;\n }\n\n // After receiving a terminal response (txCommit or txDiscard), we proactively close the client stream.\n // This ensures consistent behavior between the gRPC and WebSocket transports,\n // since the server closes the connection automatically upon transaction completion in both cases.\n if (this.isTerminalResponse(message) && this.responseHandlerQueue.length === 0) {\n await this.stream.requests.complete();\n }\n }\n } catch (e: any) {\n return this.assignErrorFactoryIfNotSet(() => {\n rethrowMeaningfulError(e, true);\n }, currentHandler?.reject);\n } finally {\n await this.close();\n }\n return null;\n }\n\n /** Executed after termination of incoming message processor */\n private async close(): Promise<void> {\n if (this.closed) return;\n\n this.closed = true;\n\n // Rejecting all messages\n\n while (true) {\n const handler = this.responseHandlerQueue.shift();\n if (!handler) break;\n if (this.errorFactory) handler.reject(new RethrowError(this.errorFactory));\n else handler.reject(new Error(\"no reply\"));\n }\n\n // closing outgoing stream\n await this.stream.requests.complete();\n }\n\n /** Forcefully close the transaction, terminate all connections and reject all pending requests */\n public abort(cause?: Error) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(`transaction aborted`, { cause });\n });\n this.abortController.abort(cause);\n }\n\n /** Await incoming message loop termination and throw any leftover errors if it was unsuccessful */\n public async await(): Promise<void> {\n // for those who want to understand \"why?\":\n // this way there is no hanging promise that will complete with rejection\n // until await is implicitly requested, the this.incomingProcessorResult\n // always resolves with success\n\n const processingResult = await this.incomingProcessorResult;\n if (processingResult !== null) processingResult();\n }\n\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: false,\n ): Promise<OneOfKind<ServerMessageResponse, Kind>>;\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: true,\n ): Promise<OneOfKind<ServerMessageResponse, Kind>[]>;\n /** Generate proper client message and send it to the server, and returns a promise of future response. */\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: boolean,\n ): Promise<OneOfKind<ServerMessageResponse, Kind> | OneOfKind<ServerMessageResponse, Kind>[]> {\n if (this.errorFactory) return Promise.reject(new RethrowError(this.errorFactory));\n\n if (this.closed) return Promise.reject(new Error(\"Transaction already closed\"));\n\n // Note: Promise synchronously executes a callback passed to a constructor\n const result = StatefulPromise.fromDeferredReject(\n new Promise<OneOfKind<ServerMessageResponse, Kind>>((resolve, reject) => {\n this.responseHandlerQueue.push(\n createResponseHandler(r.oneofKind, expectMultiResponse, resolve, reject),\n );\n }),\n );\n\n // Awaiting message dispatch to catch any associated errors.\n // There is no hurry, we are not going to receive a response until message is sent.\n await this.stream.requests.send({\n requestId: this.requestIdxCounter++,\n request: r,\n });\n\n try {\n return await result;\n } catch (e: any) {\n if (e instanceof RethrowError) e.rethrowLambda();\n throw new Error(\"Error while waiting for response\", { cause: e });\n }\n }\n\n private _completed = false;\n\n /** Safe to call multiple times */\n public async complete() {\n if (this._completed) return;\n this._completed = true;\n await this.stream.requests.complete();\n }\n\n private isTerminalResponse(message: TxAPI_ServerMessage): boolean {\n const kind = message.response.oneofKind;\n return kind === \"txCommit\" || kind === \"txDiscard\";\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ll_transaction.js","names":[],"sources":["../../src/core/ll_transaction.ts"],"sourcesContent":["import type {\n TxAPI_ClientMessage,\n TxAPI_ServerMessage,\n} from \"../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api\";\nimport type { BiDiStream } from \"./abstract_stream\";\nimport Denque from \"denque\";\nimport type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport {\n PlErrorCodeNotFound,\n RecoverablePlError,\n rethrowMeaningfulError,\n UnrecoverablePlError,\n} from \"./errors\";\nimport { StatefulPromise } from \"./StatefulPromise\";\n\nexport type ClientMessageRequest = TxAPI_ClientMessage[\"request\"];\n\nexport type ServerMessageResponse = TxAPI_ServerMessage[\"response\"];\n\ntype TxStream = BiDiStream<TxAPI_ClientMessage, TxAPI_ServerMessage>;\n\nexport type OneOfKind<T extends { oneofKind: unknown }, Kind extends T[\"oneofKind\"]> = Extract<\n T,\n { oneofKind: Kind }\n>;\n\ninterface SingleResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]> {\n kind: Kind;\n expectMultiResponse: false;\n resolve: (v: OneOfKind<ServerMessageResponse, Kind>) => void;\n reject: (e: Error) => void;\n}\n\ninterface MultiResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]> {\n kind: Kind;\n expectMultiResponse: true;\n resolve: (v: OneOfKind<ServerMessageResponse, Kind>[]) => void;\n reject: (e: Error) => void;\n}\n\ntype AnySingleResponseHandler = SingleResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\ntype AnyMultiResponseHandler = MultiResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\ntype AnyResponseHandler =\n | SingleResponseHandler<ServerMessageResponse[\"oneofKind\"]>\n | MultiResponseHandler<ServerMessageResponse[\"oneofKind\"]>;\n\nfunction createResponseHandler<Kind extends ServerMessageResponse[\"oneofKind\"]>(\n kind: Kind,\n expectMultiResponse: boolean,\n resolve:\n | ((v: OneOfKind<ServerMessageResponse, Kind>) => void)\n | ((v: OneOfKind<ServerMessageResponse, Kind>[]) => void),\n reject: (e: Error) => void,\n): AnyResponseHandler {\n return { kind, expectMultiResponse, resolve, reject } as AnyResponseHandler;\n}\n\nfunction isRecoverable(status: Status): boolean {\n return status.code === PlErrorCodeNotFound;\n}\n\nexport class RethrowError extends Error {\n name = \"RethrowError\";\n constructor(public readonly rethrowLambda: () => never) {\n super(\"Rethrow error, you should never see this one.\");\n }\n}\n\nexport class LLPlTransaction {\n /** Bidirectional channel through which transaction communicates with the server */\n private readonly stream: TxStream;\n\n /** Used to abort ongoing transaction stream */\n private readonly abortController = new AbortController();\n\n /** Counter of sent requests, used to calculate which future response will correspond to this request.\n * Incremented on each sent request. */\n private requestIdxCounter = 0;\n\n /** Queue from which incoming message processor takes handlers to which pass incoming messages */\n private readonly responseHandlerQueue = new Denque<AnyResponseHandler>();\n\n /** Each new resource, created by the transaction, is assigned with virtual (local) resource id, to make it possible\n * to populate its fields without awaiting actual resource id. This counter tracks those ids on client side, the\n * same way it is tracked on the server, so client can synchronously return such ids to the user. */\n private localResourceIdCounter = 0n;\n\n /** Switches to true, when this transaction closes due to normal or exceptional conditions. Prevents any new messages\n * to be sent to the stream. */\n private closed = false;\n /** Whether the outgoing stream was already closed. */\n private completed = false;\n\n /** If this transaction was terminated due to error, this is a generator to create new errors if corresponding response is required. */\n private errorFactory?: () => never;\n\n /** Timestamp when transaction was opened */\n private readonly openTimestamp = Date.now();\n\n private readonly incomingProcessorResult: Promise<(() => never) | null>;\n\n constructor(streamFactory: (abortSignal: AbortSignal) => TxStream) {\n this.stream = streamFactory(this.abortController.signal);\n\n // Starting incoming event processor\n this.incomingProcessorResult = this.incomingEventProcessor();\n }\n\n private assignErrorFactoryIfNotSet(\n errorFactory: () => never,\n reject?: (e: Error) => void,\n ): () => never {\n if (reject !== undefined) reject(new RethrowError(errorFactory));\n if (this.errorFactory) return errorFactory;\n this.errorFactory = errorFactory;\n return errorFactory;\n }\n\n private async incomingEventProcessor(): Promise<(() => never) | null> {\n /** Counter of received responses, used to check consistency of responses.\n * Increments on each received message. */\n let expectedId = -1;\n\n // defined externally to make possible to communicate any processing errors\n // to the specific request on which it happened\n let currentHandler: AnyResponseHandler | undefined = undefined;\n let responseAggregator: ServerMessageResponse[] | undefined = undefined;\n try {\n for await (const message of this.stream.responses) {\n if (currentHandler === undefined) {\n currentHandler = this.responseHandlerQueue.shift();\n\n if (currentHandler === undefined) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(`orphan incoming message`);\n });\n break;\n }\n\n // allocating response aggregator array\n if (currentHandler.expectMultiResponse) responseAggregator = [];\n\n expectedId++;\n }\n\n if (message.requestId !== expectedId) {\n const errorMessage = `out of order messages, ${message.requestId} !== ${expectedId}`;\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n });\n break;\n }\n\n if (message.error !== undefined) {\n const status = message.error;\n\n if (isRecoverable(status)) {\n currentHandler.reject(\n new RethrowError(() => {\n throw new RecoverablePlError(status);\n }),\n );\n currentHandler = undefined;\n\n if (message.multiMessage !== undefined && !message.multiMessage.isLast) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(\"Unexpected message sequence.\");\n });\n break;\n }\n\n // We can continue to work after recoverable errors\n continue;\n } else {\n this.assignErrorFactoryIfNotSet(() => {\n throw new UnrecoverablePlError(status);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n // In case of unrecoverable errors we close the transaction\n break;\n }\n }\n\n if (\n currentHandler.kind !== message.response.oneofKind &&\n message?.multiMessage?.isEmpty !== true\n ) {\n const errorMessage = `inconsistent request response types: ${currentHandler.kind} !== ${message.response.oneofKind}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n if (currentHandler.expectMultiResponse !== (message.multiMessage !== undefined)) {\n const errorMessage = `inconsistent multi state: ${currentHandler.expectMultiResponse} !== ${message.multiMessage !== undefined}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n // <- at this point we validated everything we can at this level\n\n if (message.multiMessage !== undefined) {\n if (!message.multiMessage.isEmpty) {\n if (message.multiMessage.id !== responseAggregator!.length + 1) {\n const errorMessage = `inconsistent multi id: ${message.multiMessage.id} !== ${responseAggregator!.length + 1}`;\n\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(errorMessage);\n }, currentHandler.reject);\n currentHandler = undefined;\n\n break;\n }\n\n responseAggregator!.push(message.response);\n }\n\n if (message.multiMessage.isLast) {\n (currentHandler as AnyMultiResponseHandler).resolve(responseAggregator!);\n responseAggregator = undefined;\n currentHandler = undefined;\n }\n } else {\n (currentHandler as AnySingleResponseHandler).resolve(message.response);\n currentHandler = undefined;\n }\n\n // After receiving a terminal response (txCommit or txDiscard), we proactively close the client stream.\n // This ensures consistent behavior between the gRPC and WebSocket transports,\n // since the server closes the connection automatically upon transaction completion in both cases.\n if (this.isTerminalResponse(message) && this.responseHandlerQueue.length === 0) {\n await this.stream.requests.complete();\n }\n }\n } catch (e: any) {\n return this.assignErrorFactoryIfNotSet(() => {\n rethrowMeaningfulError(e, true);\n }, currentHandler?.reject);\n } finally {\n await this.close();\n }\n return null;\n }\n\n /** Executed after termination of incoming message processor */\n private async close(): Promise<void> {\n if (this.closed) return;\n\n this.closed = true;\n\n // Rejecting all messages\n\n while (true) {\n const handler = this.responseHandlerQueue.shift();\n if (!handler) break;\n if (this.errorFactory) handler.reject(new RethrowError(this.errorFactory));\n else handler.reject(new Error(\"no reply\"));\n }\n\n // closing outgoing stream\n await this.stream.requests.complete();\n }\n\n /** Forcefully close the transaction, terminate all connections and reject all pending requests */\n public abort(cause?: Error) {\n this.assignErrorFactoryIfNotSet(() => {\n throw new Error(`transaction aborted`, { cause });\n });\n this.abortController.abort(cause);\n }\n\n /** Await incoming message loop termination and throw any leftover errors if it was unsuccessful */\n public async await(): Promise<void> {\n // for those who want to understand \"why?\":\n // this way there is no hanging promise that will complete with rejection\n // until await is implicitly requested, the this.incomingProcessorResult\n // always resolves with success\n\n const processingResult = await this.incomingProcessorResult;\n if (processingResult !== null) processingResult();\n }\n\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: false,\n ): Promise<OneOfKind<ServerMessageResponse, Kind>>;\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: true,\n ): Promise<OneOfKind<ServerMessageResponse, Kind>[]>;\n /** Generate proper client message and send it to the server, and returns a promise of future response. */\n public async send<Kind extends ClientMessageRequest[\"oneofKind\"]>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n expectMultiResponse: boolean,\n ): Promise<OneOfKind<ServerMessageResponse, Kind> | OneOfKind<ServerMessageResponse, Kind>[]> {\n if (this.errorFactory) return Promise.reject(new RethrowError(this.errorFactory));\n\n if (this.closed) return Promise.reject(new Error(\"Transaction already closed\"));\n\n // Note: Promise synchronously executes a callback passed to a constructor\n const result = StatefulPromise.fromDeferredReject(\n new Promise<OneOfKind<ServerMessageResponse, Kind>>((resolve, reject) => {\n this.responseHandlerQueue.push(\n createResponseHandler(r.oneofKind, expectMultiResponse, resolve, reject),\n );\n }),\n );\n\n // Awaiting message dispatch to catch any associated errors.\n // There is no hurry, we are not going to receive a response until message is sent.\n await this.stream.requests.send({\n requestId: this.requestIdxCounter++,\n request: r,\n });\n\n try {\n return await result;\n } catch (e: any) {\n if (e instanceof RethrowError) e.rethrowLambda();\n throw new Error(\"Error while waiting for response\", { cause: e });\n }\n }\n\n private _completed = false;\n\n /** Safe to call multiple times */\n public async complete() {\n if (this._completed) return;\n this._completed = true;\n await this.stream.requests.complete();\n }\n\n private isTerminalResponse(message: TxAPI_ServerMessage): boolean {\n const kind = message.response.oneofKind;\n return kind === \"txCommit\" || kind === \"txDiscard\";\n }\n}\n"],"mappings":";;;;;AAgDA,SAAS,sBACP,MACA,qBACA,SAGA,QACoB;AACpB,QAAO;EAAE;EAAM;EAAqB;EAAS;EAAQ;;AAGvD,SAAS,cAAc,QAAyB;AAC9C,QAAO,OAAO,SAAS;;AAGzB,IAAa,eAAb,cAAkC,MAAM;CACtC,OAAO;CACP,YAAY,AAAgB,eAA4B;AACtD,QAAM,gDAAgD;EAD5B;;;AAK9B,IAAa,kBAAb,MAA6B;;CAE3B,AAAiB;;CAGjB,AAAiB,kBAAkB,IAAI,iBAAiB;;;CAIxD,AAAQ,oBAAoB;;CAG5B,AAAiB,uBAAuB,IAAI,QAA4B;;;;CAKxE,AAAQ,yBAAyB;;;CAIjC,AAAQ,SAAS;;CAEjB,AAAQ,YAAY;;CAGpB,AAAQ;;CAGR,AAAiB,gBAAgB,KAAK,KAAK;CAE3C,AAAiB;CAEjB,YAAY,eAAuD;AACjE,OAAK,SAAS,cAAc,KAAK,gBAAgB,OAAO;AAGxD,OAAK,0BAA0B,KAAK,wBAAwB;;CAG9D,AAAQ,2BACN,cACA,QACa;AACb,MAAI,WAAW,OAAW,QAAO,IAAI,aAAa,aAAa,CAAC;AAChE,MAAI,KAAK,aAAc,QAAO;AAC9B,OAAK,eAAe;AACpB,SAAO;;CAGT,MAAc,yBAAwD;;;EAGpE,IAAI,aAAa;EAIjB,IAAI,iBAAiD;EACrD,IAAI,qBAA0D;AAC9D,MAAI;AACF,cAAW,MAAM,WAAW,KAAK,OAAO,WAAW;AACjD,QAAI,mBAAmB,QAAW;AAChC,sBAAiB,KAAK,qBAAqB,OAAO;AAElD,SAAI,mBAAmB,QAAW;AAChC,WAAK,iCAAiC;AACpC,aAAM,IAAI,MAAM,0BAA0B;QAC1C;AACF;;AAIF,SAAI,eAAe,oBAAqB,sBAAqB,EAAE;AAE/D;;AAGF,QAAI,QAAQ,cAAc,YAAY;KACpC,MAAM,eAAe,0BAA0B,QAAQ,UAAU,OAAO;AACxE,UAAK,iCAAiC;AACpC,YAAM,IAAI,MAAM,aAAa;OAC7B;AACF;;AAGF,QAAI,QAAQ,UAAU,QAAW;KAC/B,MAAM,SAAS,QAAQ;AAEvB,SAAI,cAAc,OAAO,EAAE;AACzB,qBAAe,OACb,IAAI,mBAAmB;AACrB,aAAM,IAAI,mBAAmB,OAAO;QACpC,CACH;AACD,uBAAiB;AAEjB,UAAI,QAAQ,iBAAiB,UAAa,CAAC,QAAQ,aAAa,QAAQ;AACtE,YAAK,iCAAiC;AACpC,cAAM,IAAI,MAAM,+BAA+B;SAC/C;AACF;;AAIF;YACK;AACL,WAAK,iCAAiC;AACpC,aAAM,IAAI,qBAAqB,OAAO;SACrC,eAAe,OAAO;AACzB,uBAAiB;AAGjB;;;AAIJ,QACE,eAAe,SAAS,QAAQ,SAAS,aACzC,SAAS,cAAc,YAAY,MACnC;KACA,MAAM,eAAe,wCAAwC,eAAe,KAAK,OAAO,QAAQ,SAAS;AAEzG,UAAK,iCAAiC;AACpC,YAAM,IAAI,MAAM,aAAa;QAC5B,eAAe,OAAO;AACzB,sBAAiB;AAEjB;;AAGF,QAAI,eAAe,yBAAyB,QAAQ,iBAAiB,SAAY;KAC/E,MAAM,eAAe,6BAA6B,eAAe,oBAAoB,OAAO,QAAQ,iBAAiB;AAErH,UAAK,iCAAiC;AACpC,YAAM,IAAI,MAAM,aAAa;QAC5B,eAAe,OAAO;AACzB,sBAAiB;AAEjB;;AAKF,QAAI,QAAQ,iBAAiB,QAAW;AACtC,SAAI,CAAC,QAAQ,aAAa,SAAS;AACjC,UAAI,QAAQ,aAAa,OAAO,mBAAoB,SAAS,GAAG;OAC9D,MAAM,eAAe,0BAA0B,QAAQ,aAAa,GAAG,OAAO,mBAAoB,SAAS;AAE3G,YAAK,iCAAiC;AACpC,cAAM,IAAI,MAAM,aAAa;UAC5B,eAAe,OAAO;AACzB,wBAAiB;AAEjB;;AAGF,yBAAoB,KAAK,QAAQ,SAAS;;AAG5C,SAAI,QAAQ,aAAa,QAAQ;AAC/B,MAAC,eAA2C,QAAQ,mBAAoB;AACxE,2BAAqB;AACrB,uBAAiB;;WAEd;AACL,KAAC,eAA4C,QAAQ,QAAQ,SAAS;AACtE,sBAAiB;;AAMnB,QAAI,KAAK,mBAAmB,QAAQ,IAAI,KAAK,qBAAqB,WAAW,EAC3E,OAAM,KAAK,OAAO,SAAS,UAAU;;WAGlC,GAAQ;AACf,UAAO,KAAK,iCAAiC;AAC3C,2BAAuB,GAAG,KAAK;MAC9B,gBAAgB,OAAO;YAClB;AACR,SAAM,KAAK,OAAO;;AAEpB,SAAO;;;CAIT,MAAc,QAAuB;AACnC,MAAI,KAAK,OAAQ;AAEjB,OAAK,SAAS;AAId,SAAO,MAAM;GACX,MAAM,UAAU,KAAK,qBAAqB,OAAO;AACjD,OAAI,CAAC,QAAS;AACd,OAAI,KAAK,aAAc,SAAQ,OAAO,IAAI,aAAa,KAAK,aAAa,CAAC;OACrE,SAAQ,uBAAO,IAAI,MAAM,WAAW,CAAC;;AAI5C,QAAM,KAAK,OAAO,SAAS,UAAU;;;CAIvC,AAAO,MAAM,OAAe;AAC1B,OAAK,iCAAiC;AACpC,SAAM,IAAI,MAAM,uBAAuB,EAAE,OAAO,CAAC;IACjD;AACF,OAAK,gBAAgB,MAAM,MAAM;;;CAInC,MAAa,QAAuB;EAMlC,MAAM,mBAAmB,MAAM,KAAK;AACpC,MAAI,qBAAqB,KAAM,mBAAkB;;;CAYnD,MAAa,KACX,GACA,qBAC4F;AAC5F,MAAI,KAAK,aAAc,QAAO,QAAQ,OAAO,IAAI,aAAa,KAAK,aAAa,CAAC;AAEjF,MAAI,KAAK,OAAQ,QAAO,QAAQ,uBAAO,IAAI,MAAM,6BAA6B,CAAC;EAG/E,MAAM,SAAS,gBAAgB,mBAC7B,IAAI,SAAiD,SAAS,WAAW;AACvE,QAAK,qBAAqB,KACxB,sBAAsB,EAAE,WAAW,qBAAqB,SAAS,OAAO,CACzE;IACD,CACH;AAID,QAAM,KAAK,OAAO,SAAS,KAAK;GAC9B,WAAW,KAAK;GAChB,SAAS;GACV,CAAC;AAEF,MAAI;AACF,UAAO,MAAM;WACN,GAAQ;AACf,OAAI,aAAa,aAAc,GAAE,eAAe;AAChD,SAAM,IAAI,MAAM,oCAAoC,EAAE,OAAO,GAAG,CAAC;;;CAIrE,AAAQ,aAAa;;CAGrB,MAAa,WAAW;AACtB,MAAI,KAAK,WAAY;AACrB,OAAK,aAAa;AAClB,QAAM,KAAK,OAAO,SAAS,UAAU;;CAGvC,AAAQ,mBAAmB,SAAuC;EAChE,MAAM,OAAO,QAAQ,SAAS;AAC9B,SAAO,SAAS,cAAc,SAAS"}
@@ -1,74 +1,75 @@
1
- 'use strict';
2
1
 
2
+ //#region src/core/stat.ts
3
3
  function initialTxStatWithoutTime() {
4
- return {
5
- txCount: 0,
6
- rootsCreated: 0,
7
- structsCreated: 0,
8
- structsCreatedDataBytes: 0,
9
- ephemeralsCreated: 0,
10
- ephemeralsCreatedDataBytes: 0,
11
- valuesCreated: 0,
12
- valuesCreatedDataBytes: 0,
13
- kvSetRequests: 0,
14
- kvSetBytes: 0,
15
- inputsLocked: 0,
16
- outputsLocked: 0,
17
- fieldsCreated: 0,
18
- fieldsSet: 0,
19
- fieldsGet: 0,
20
- rGetDataCacheHits: 0,
21
- rGetDataCacheFields: 0,
22
- rGetDataCacheBytes: 0,
23
- rGetDataNetRequests: 0,
24
- rGetDataNetFields: 0,
25
- rGetDataNetBytes: 0,
26
- kvListRequests: 0,
27
- kvListEntries: 0,
28
- kvListBytes: 0,
29
- kvGetRequests: 0,
30
- kvGetBytes: 0,
31
- };
4
+ return {
5
+ txCount: 0,
6
+ rootsCreated: 0,
7
+ structsCreated: 0,
8
+ structsCreatedDataBytes: 0,
9
+ ephemeralsCreated: 0,
10
+ ephemeralsCreatedDataBytes: 0,
11
+ valuesCreated: 0,
12
+ valuesCreatedDataBytes: 0,
13
+ kvSetRequests: 0,
14
+ kvSetBytes: 0,
15
+ inputsLocked: 0,
16
+ outputsLocked: 0,
17
+ fieldsCreated: 0,
18
+ fieldsSet: 0,
19
+ fieldsGet: 0,
20
+ rGetDataCacheHits: 0,
21
+ rGetDataCacheFields: 0,
22
+ rGetDataCacheBytes: 0,
23
+ rGetDataNetRequests: 0,
24
+ rGetDataNetFields: 0,
25
+ rGetDataNetBytes: 0,
26
+ kvListRequests: 0,
27
+ kvListEntries: 0,
28
+ kvListBytes: 0,
29
+ kvGetRequests: 0,
30
+ kvGetBytes: 0
31
+ };
32
32
  }
33
33
  function initialTxStat() {
34
- return {
35
- ...initialTxStatWithoutTime(),
36
- timeMs: 0,
37
- };
34
+ return {
35
+ ...initialTxStatWithoutTime(),
36
+ timeMs: 0
37
+ };
38
38
  }
39
39
  function addStat(a, b) {
40
- return {
41
- txCount: a.txCount + b.txCount,
42
- timeMs: a.timeMs + b.timeMs,
43
- rootsCreated: a.rootsCreated + b.rootsCreated,
44
- structsCreated: a.structsCreated + b.structsCreated,
45
- structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,
46
- ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,
47
- ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,
48
- valuesCreated: a.valuesCreated + b.valuesCreated,
49
- valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,
50
- kvSetRequests: a.kvSetRequests + b.kvSetRequests,
51
- kvSetBytes: a.kvSetBytes + b.kvSetBytes,
52
- inputsLocked: a.inputsLocked + b.inputsLocked,
53
- outputsLocked: a.outputsLocked + b.outputsLocked,
54
- fieldsCreated: a.fieldsCreated + b.fieldsCreated,
55
- fieldsSet: a.fieldsSet + b.fieldsSet,
56
- fieldsGet: a.fieldsGet + b.fieldsGet,
57
- rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,
58
- rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,
59
- rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,
60
- rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,
61
- rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,
62
- rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,
63
- kvListRequests: a.kvListRequests + b.kvListRequests,
64
- kvListEntries: a.kvListEntries + b.kvListEntries,
65
- kvListBytes: a.kvListBytes + b.kvListBytes,
66
- kvGetRequests: a.kvGetRequests + b.kvGetRequests,
67
- kvGetBytes: a.kvGetBytes + b.kvGetBytes,
68
- };
40
+ return {
41
+ txCount: a.txCount + b.txCount,
42
+ timeMs: a.timeMs + b.timeMs,
43
+ rootsCreated: a.rootsCreated + b.rootsCreated,
44
+ structsCreated: a.structsCreated + b.structsCreated,
45
+ structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,
46
+ ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,
47
+ ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,
48
+ valuesCreated: a.valuesCreated + b.valuesCreated,
49
+ valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,
50
+ kvSetRequests: a.kvSetRequests + b.kvSetRequests,
51
+ kvSetBytes: a.kvSetBytes + b.kvSetBytes,
52
+ inputsLocked: a.inputsLocked + b.inputsLocked,
53
+ outputsLocked: a.outputsLocked + b.outputsLocked,
54
+ fieldsCreated: a.fieldsCreated + b.fieldsCreated,
55
+ fieldsSet: a.fieldsSet + b.fieldsSet,
56
+ fieldsGet: a.fieldsGet + b.fieldsGet,
57
+ rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,
58
+ rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,
59
+ rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,
60
+ rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,
61
+ rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,
62
+ rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,
63
+ kvListRequests: a.kvListRequests + b.kvListRequests,
64
+ kvListEntries: a.kvListEntries + b.kvListEntries,
65
+ kvListBytes: a.kvListBytes + b.kvListBytes,
66
+ kvGetRequests: a.kvGetRequests + b.kvGetRequests,
67
+ kvGetBytes: a.kvGetBytes + b.kvGetBytes
68
+ };
69
69
  }
70
70
 
71
+ //#endregion
71
72
  exports.addStat = addStat;
72
73
  exports.initialTxStat = initialTxStat;
73
74
  exports.initialTxStatWithoutTime = initialTxStatWithoutTime;
74
- //# sourceMappingURL=stat.cjs.map
75
+ //# sourceMappingURL=stat.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stat.cjs","sources":["../../src/core/stat.ts"],"sourcesContent":["export type TxStat = {\n txCount: number;\n timeMs: number;\n\n rootsCreated: number;\n structsCreated: number;\n structsCreatedDataBytes: number;\n ephemeralsCreated: number;\n ephemeralsCreatedDataBytes: number;\n valuesCreated: number;\n valuesCreatedDataBytes: number;\n\n kvSetRequests: number;\n kvSetBytes: number;\n\n inputsLocked: number;\n outputsLocked: number;\n fieldsCreated: number;\n fieldsSet: number;\n fieldsGet: number;\n\n rGetDataCacheHits: number;\n rGetDataCacheFields: number;\n rGetDataCacheBytes: number;\n rGetDataNetRequests: number;\n rGetDataNetFields: number;\n rGetDataNetBytes: number;\n\n kvListRequests: number;\n kvListEntries: number;\n kvListBytes: number;\n\n kvGetRequests: number;\n kvGetBytes: number;\n};\n\nexport type TxStatWithoutTime = Omit<TxStat, \"timeMs\">;\n\nexport function initialTxStatWithoutTime(): TxStatWithoutTime {\n return {\n txCount: 0,\n rootsCreated: 0,\n structsCreated: 0,\n structsCreatedDataBytes: 0,\n ephemeralsCreated: 0,\n ephemeralsCreatedDataBytes: 0,\n valuesCreated: 0,\n valuesCreatedDataBytes: 0,\n kvSetRequests: 0,\n kvSetBytes: 0,\n inputsLocked: 0,\n outputsLocked: 0,\n fieldsCreated: 0,\n fieldsSet: 0,\n fieldsGet: 0,\n rGetDataCacheHits: 0,\n rGetDataCacheFields: 0,\n rGetDataCacheBytes: 0,\n rGetDataNetRequests: 0,\n rGetDataNetFields: 0,\n rGetDataNetBytes: 0,\n kvListRequests: 0,\n kvListEntries: 0,\n kvListBytes: 0,\n kvGetRequests: 0,\n kvGetBytes: 0,\n };\n}\nexport function initialTxStat(): TxStat {\n return {\n ...initialTxStatWithoutTime(),\n timeMs: 0,\n };\n}\n\nexport function addStat(a: TxStat, b: TxStat): TxStat {\n return {\n txCount: a.txCount + b.txCount,\n timeMs: a.timeMs + b.timeMs,\n rootsCreated: a.rootsCreated + b.rootsCreated,\n structsCreated: a.structsCreated + b.structsCreated,\n structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,\n ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,\n ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,\n valuesCreated: a.valuesCreated + b.valuesCreated,\n valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,\n kvSetRequests: a.kvSetRequests + b.kvSetRequests,\n kvSetBytes: a.kvSetBytes + b.kvSetBytes,\n inputsLocked: a.inputsLocked + b.inputsLocked,\n outputsLocked: a.outputsLocked + b.outputsLocked,\n fieldsCreated: a.fieldsCreated + b.fieldsCreated,\n fieldsSet: a.fieldsSet + b.fieldsSet,\n fieldsGet: a.fieldsGet + b.fieldsGet,\n rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,\n rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,\n rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,\n rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,\n rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,\n rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,\n kvListRequests: a.kvListRequests + b.kvListRequests,\n kvListEntries: a.kvListEntries + b.kvListEntries,\n kvListBytes: a.kvListBytes + b.kvListBytes,\n kvGetRequests: a.kvGetRequests + b.kvGetRequests,\n kvGetBytes: a.kvGetBytes + b.kvGetBytes,\n };\n}\n\nexport type AllTxStat = {\n committed: TxStat;\n conflict: TxStat;\n error: TxStat;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stat.cjs","names":[],"sources":["../../src/core/stat.ts"],"sourcesContent":["export type TxStat = {\n txCount: number;\n timeMs: number;\n\n rootsCreated: number;\n structsCreated: number;\n structsCreatedDataBytes: number;\n ephemeralsCreated: number;\n ephemeralsCreatedDataBytes: number;\n valuesCreated: number;\n valuesCreatedDataBytes: number;\n\n kvSetRequests: number;\n kvSetBytes: number;\n\n inputsLocked: number;\n outputsLocked: number;\n fieldsCreated: number;\n fieldsSet: number;\n fieldsGet: number;\n\n rGetDataCacheHits: number;\n rGetDataCacheFields: number;\n rGetDataCacheBytes: number;\n rGetDataNetRequests: number;\n rGetDataNetFields: number;\n rGetDataNetBytes: number;\n\n kvListRequests: number;\n kvListEntries: number;\n kvListBytes: number;\n\n kvGetRequests: number;\n kvGetBytes: number;\n};\n\nexport type TxStatWithoutTime = Omit<TxStat, \"timeMs\">;\n\nexport function initialTxStatWithoutTime(): TxStatWithoutTime {\n return {\n txCount: 0,\n rootsCreated: 0,\n structsCreated: 0,\n structsCreatedDataBytes: 0,\n ephemeralsCreated: 0,\n ephemeralsCreatedDataBytes: 0,\n valuesCreated: 0,\n valuesCreatedDataBytes: 0,\n kvSetRequests: 0,\n kvSetBytes: 0,\n inputsLocked: 0,\n outputsLocked: 0,\n fieldsCreated: 0,\n fieldsSet: 0,\n fieldsGet: 0,\n rGetDataCacheHits: 0,\n rGetDataCacheFields: 0,\n rGetDataCacheBytes: 0,\n rGetDataNetRequests: 0,\n rGetDataNetFields: 0,\n rGetDataNetBytes: 0,\n kvListRequests: 0,\n kvListEntries: 0,\n kvListBytes: 0,\n kvGetRequests: 0,\n kvGetBytes: 0,\n };\n}\nexport function initialTxStat(): TxStat {\n return {\n ...initialTxStatWithoutTime(),\n timeMs: 0,\n };\n}\n\nexport function addStat(a: TxStat, b: TxStat): TxStat {\n return {\n txCount: a.txCount + b.txCount,\n timeMs: a.timeMs + b.timeMs,\n rootsCreated: a.rootsCreated + b.rootsCreated,\n structsCreated: a.structsCreated + b.structsCreated,\n structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,\n ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,\n ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,\n valuesCreated: a.valuesCreated + b.valuesCreated,\n valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,\n kvSetRequests: a.kvSetRequests + b.kvSetRequests,\n kvSetBytes: a.kvSetBytes + b.kvSetBytes,\n inputsLocked: a.inputsLocked + b.inputsLocked,\n outputsLocked: a.outputsLocked + b.outputsLocked,\n fieldsCreated: a.fieldsCreated + b.fieldsCreated,\n fieldsSet: a.fieldsSet + b.fieldsSet,\n fieldsGet: a.fieldsGet + b.fieldsGet,\n rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,\n rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,\n rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,\n rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,\n rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,\n rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,\n kvListRequests: a.kvListRequests + b.kvListRequests,\n kvListEntries: a.kvListEntries + b.kvListEntries,\n kvListBytes: a.kvListBytes + b.kvListBytes,\n kvGetRequests: a.kvGetRequests + b.kvGetRequests,\n kvGetBytes: a.kvGetBytes + b.kvGetBytes,\n };\n}\n\nexport type AllTxStat = {\n committed: TxStat;\n conflict: TxStat;\n error: TxStat;\n};\n"],"mappings":";;AAsCA,SAAgB,2BAA8C;AAC5D,QAAO;EACL,SAAS;EACT,cAAc;EACd,gBAAgB;EAChB,yBAAyB;EACzB,mBAAmB;EACnB,4BAA4B;EAC5B,eAAe;EACf,wBAAwB;EACxB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,eAAe;EACf,eAAe;EACf,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,aAAa;EACb,eAAe;EACf,YAAY;EACb;;AAEH,SAAgB,gBAAwB;AACtC,QAAO;EACL,GAAG,0BAA0B;EAC7B,QAAQ;EACT;;AAGH,SAAgB,QAAQ,GAAW,GAAmB;AACpD,QAAO;EACL,SAAS,EAAE,UAAU,EAAE;EACvB,QAAQ,EAAE,SAAS,EAAE;EACrB,cAAc,EAAE,eAAe,EAAE;EACjC,gBAAgB,EAAE,iBAAiB,EAAE;EACrC,yBAAyB,EAAE,0BAA0B,EAAE;EACvD,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,4BAA4B,EAAE,6BAA6B,EAAE;EAC7D,eAAe,EAAE,gBAAgB,EAAE;EACnC,wBAAwB,EAAE,yBAAyB,EAAE;EACrD,eAAe,EAAE,gBAAgB,EAAE;EACnC,YAAY,EAAE,aAAa,EAAE;EAC7B,cAAc,EAAE,eAAe,EAAE;EACjC,eAAe,EAAE,gBAAgB,EAAE;EACnC,eAAe,EAAE,gBAAgB,EAAE;EACnC,WAAW,EAAE,YAAY,EAAE;EAC3B,WAAW,EAAE,YAAY,EAAE;EAC3B,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,qBAAqB,EAAE,sBAAsB,EAAE;EAC/C,oBAAoB,EAAE,qBAAqB,EAAE;EAC7C,qBAAqB,EAAE,sBAAsB,EAAE;EAC/C,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,kBAAkB,EAAE,mBAAmB,EAAE;EACzC,gBAAgB,EAAE,iBAAiB,EAAE;EACrC,eAAe,EAAE,gBAAgB,EAAE;EACnC,aAAa,EAAE,cAAc,EAAE;EAC/B,eAAe,EAAE,gBAAgB,EAAE;EACnC,YAAY,EAAE,aAAa,EAAE;EAC9B"}
@@ -1,39 +1,38 @@
1
- export type TxStat = {
2
- txCount: number;
3
- timeMs: number;
4
- rootsCreated: number;
5
- structsCreated: number;
6
- structsCreatedDataBytes: number;
7
- ephemeralsCreated: number;
8
- ephemeralsCreatedDataBytes: number;
9
- valuesCreated: number;
10
- valuesCreatedDataBytes: number;
11
- kvSetRequests: number;
12
- kvSetBytes: number;
13
- inputsLocked: number;
14
- outputsLocked: number;
15
- fieldsCreated: number;
16
- fieldsSet: number;
17
- fieldsGet: number;
18
- rGetDataCacheHits: number;
19
- rGetDataCacheFields: number;
20
- rGetDataCacheBytes: number;
21
- rGetDataNetRequests: number;
22
- rGetDataNetFields: number;
23
- rGetDataNetBytes: number;
24
- kvListRequests: number;
25
- kvListEntries: number;
26
- kvListBytes: number;
27
- kvGetRequests: number;
28
- kvGetBytes: number;
1
+ //#region src/core/stat.d.ts
2
+ type TxStat = {
3
+ txCount: number;
4
+ timeMs: number;
5
+ rootsCreated: number;
6
+ structsCreated: number;
7
+ structsCreatedDataBytes: number;
8
+ ephemeralsCreated: number;
9
+ ephemeralsCreatedDataBytes: number;
10
+ valuesCreated: number;
11
+ valuesCreatedDataBytes: number;
12
+ kvSetRequests: number;
13
+ kvSetBytes: number;
14
+ inputsLocked: number;
15
+ outputsLocked: number;
16
+ fieldsCreated: number;
17
+ fieldsSet: number;
18
+ fieldsGet: number;
19
+ rGetDataCacheHits: number;
20
+ rGetDataCacheFields: number;
21
+ rGetDataCacheBytes: number;
22
+ rGetDataNetRequests: number;
23
+ rGetDataNetFields: number;
24
+ rGetDataNetBytes: number;
25
+ kvListRequests: number;
26
+ kvListEntries: number;
27
+ kvListBytes: number;
28
+ kvGetRequests: number;
29
+ kvGetBytes: number;
29
30
  };
30
- export type TxStatWithoutTime = Omit<TxStat, "timeMs">;
31
- export declare function initialTxStatWithoutTime(): TxStatWithoutTime;
32
- export declare function initialTxStat(): TxStat;
33
- export declare function addStat(a: TxStat, b: TxStat): TxStat;
34
- export type AllTxStat = {
35
- committed: TxStat;
36
- conflict: TxStat;
37
- error: TxStat;
31
+ type AllTxStat = {
32
+ committed: TxStat;
33
+ conflict: TxStat;
34
+ error: TxStat;
38
35
  };
36
+ //#endregion
37
+ export { AllTxStat, TxStat };
39
38
  //# sourceMappingURL=stat.d.ts.map
package/dist/core/stat.js CHANGED
@@ -1,70 +1,72 @@
1
+ //#region src/core/stat.ts
1
2
  function initialTxStatWithoutTime() {
2
- return {
3
- txCount: 0,
4
- rootsCreated: 0,
5
- structsCreated: 0,
6
- structsCreatedDataBytes: 0,
7
- ephemeralsCreated: 0,
8
- ephemeralsCreatedDataBytes: 0,
9
- valuesCreated: 0,
10
- valuesCreatedDataBytes: 0,
11
- kvSetRequests: 0,
12
- kvSetBytes: 0,
13
- inputsLocked: 0,
14
- outputsLocked: 0,
15
- fieldsCreated: 0,
16
- fieldsSet: 0,
17
- fieldsGet: 0,
18
- rGetDataCacheHits: 0,
19
- rGetDataCacheFields: 0,
20
- rGetDataCacheBytes: 0,
21
- rGetDataNetRequests: 0,
22
- rGetDataNetFields: 0,
23
- rGetDataNetBytes: 0,
24
- kvListRequests: 0,
25
- kvListEntries: 0,
26
- kvListBytes: 0,
27
- kvGetRequests: 0,
28
- kvGetBytes: 0,
29
- };
3
+ return {
4
+ txCount: 0,
5
+ rootsCreated: 0,
6
+ structsCreated: 0,
7
+ structsCreatedDataBytes: 0,
8
+ ephemeralsCreated: 0,
9
+ ephemeralsCreatedDataBytes: 0,
10
+ valuesCreated: 0,
11
+ valuesCreatedDataBytes: 0,
12
+ kvSetRequests: 0,
13
+ kvSetBytes: 0,
14
+ inputsLocked: 0,
15
+ outputsLocked: 0,
16
+ fieldsCreated: 0,
17
+ fieldsSet: 0,
18
+ fieldsGet: 0,
19
+ rGetDataCacheHits: 0,
20
+ rGetDataCacheFields: 0,
21
+ rGetDataCacheBytes: 0,
22
+ rGetDataNetRequests: 0,
23
+ rGetDataNetFields: 0,
24
+ rGetDataNetBytes: 0,
25
+ kvListRequests: 0,
26
+ kvListEntries: 0,
27
+ kvListBytes: 0,
28
+ kvGetRequests: 0,
29
+ kvGetBytes: 0
30
+ };
30
31
  }
31
32
  function initialTxStat() {
32
- return {
33
- ...initialTxStatWithoutTime(),
34
- timeMs: 0,
35
- };
33
+ return {
34
+ ...initialTxStatWithoutTime(),
35
+ timeMs: 0
36
+ };
36
37
  }
37
38
  function addStat(a, b) {
38
- return {
39
- txCount: a.txCount + b.txCount,
40
- timeMs: a.timeMs + b.timeMs,
41
- rootsCreated: a.rootsCreated + b.rootsCreated,
42
- structsCreated: a.structsCreated + b.structsCreated,
43
- structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,
44
- ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,
45
- ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,
46
- valuesCreated: a.valuesCreated + b.valuesCreated,
47
- valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,
48
- kvSetRequests: a.kvSetRequests + b.kvSetRequests,
49
- kvSetBytes: a.kvSetBytes + b.kvSetBytes,
50
- inputsLocked: a.inputsLocked + b.inputsLocked,
51
- outputsLocked: a.outputsLocked + b.outputsLocked,
52
- fieldsCreated: a.fieldsCreated + b.fieldsCreated,
53
- fieldsSet: a.fieldsSet + b.fieldsSet,
54
- fieldsGet: a.fieldsGet + b.fieldsGet,
55
- rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,
56
- rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,
57
- rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,
58
- rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,
59
- rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,
60
- rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,
61
- kvListRequests: a.kvListRequests + b.kvListRequests,
62
- kvListEntries: a.kvListEntries + b.kvListEntries,
63
- kvListBytes: a.kvListBytes + b.kvListBytes,
64
- kvGetRequests: a.kvGetRequests + b.kvGetRequests,
65
- kvGetBytes: a.kvGetBytes + b.kvGetBytes,
66
- };
39
+ return {
40
+ txCount: a.txCount + b.txCount,
41
+ timeMs: a.timeMs + b.timeMs,
42
+ rootsCreated: a.rootsCreated + b.rootsCreated,
43
+ structsCreated: a.structsCreated + b.structsCreated,
44
+ structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,
45
+ ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,
46
+ ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,
47
+ valuesCreated: a.valuesCreated + b.valuesCreated,
48
+ valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,
49
+ kvSetRequests: a.kvSetRequests + b.kvSetRequests,
50
+ kvSetBytes: a.kvSetBytes + b.kvSetBytes,
51
+ inputsLocked: a.inputsLocked + b.inputsLocked,
52
+ outputsLocked: a.outputsLocked + b.outputsLocked,
53
+ fieldsCreated: a.fieldsCreated + b.fieldsCreated,
54
+ fieldsSet: a.fieldsSet + b.fieldsSet,
55
+ fieldsGet: a.fieldsGet + b.fieldsGet,
56
+ rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,
57
+ rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,
58
+ rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,
59
+ rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,
60
+ rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,
61
+ rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,
62
+ kvListRequests: a.kvListRequests + b.kvListRequests,
63
+ kvListEntries: a.kvListEntries + b.kvListEntries,
64
+ kvListBytes: a.kvListBytes + b.kvListBytes,
65
+ kvGetRequests: a.kvGetRequests + b.kvGetRequests,
66
+ kvGetBytes: a.kvGetBytes + b.kvGetBytes
67
+ };
67
68
  }
68
69
 
70
+ //#endregion
69
71
  export { addStat, initialTxStat, initialTxStatWithoutTime };
70
- //# sourceMappingURL=stat.js.map
72
+ //# sourceMappingURL=stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stat.js","sources":["../../src/core/stat.ts"],"sourcesContent":["export type TxStat = {\n txCount: number;\n timeMs: number;\n\n rootsCreated: number;\n structsCreated: number;\n structsCreatedDataBytes: number;\n ephemeralsCreated: number;\n ephemeralsCreatedDataBytes: number;\n valuesCreated: number;\n valuesCreatedDataBytes: number;\n\n kvSetRequests: number;\n kvSetBytes: number;\n\n inputsLocked: number;\n outputsLocked: number;\n fieldsCreated: number;\n fieldsSet: number;\n fieldsGet: number;\n\n rGetDataCacheHits: number;\n rGetDataCacheFields: number;\n rGetDataCacheBytes: number;\n rGetDataNetRequests: number;\n rGetDataNetFields: number;\n rGetDataNetBytes: number;\n\n kvListRequests: number;\n kvListEntries: number;\n kvListBytes: number;\n\n kvGetRequests: number;\n kvGetBytes: number;\n};\n\nexport type TxStatWithoutTime = Omit<TxStat, \"timeMs\">;\n\nexport function initialTxStatWithoutTime(): TxStatWithoutTime {\n return {\n txCount: 0,\n rootsCreated: 0,\n structsCreated: 0,\n structsCreatedDataBytes: 0,\n ephemeralsCreated: 0,\n ephemeralsCreatedDataBytes: 0,\n valuesCreated: 0,\n valuesCreatedDataBytes: 0,\n kvSetRequests: 0,\n kvSetBytes: 0,\n inputsLocked: 0,\n outputsLocked: 0,\n fieldsCreated: 0,\n fieldsSet: 0,\n fieldsGet: 0,\n rGetDataCacheHits: 0,\n rGetDataCacheFields: 0,\n rGetDataCacheBytes: 0,\n rGetDataNetRequests: 0,\n rGetDataNetFields: 0,\n rGetDataNetBytes: 0,\n kvListRequests: 0,\n kvListEntries: 0,\n kvListBytes: 0,\n kvGetRequests: 0,\n kvGetBytes: 0,\n };\n}\nexport function initialTxStat(): TxStat {\n return {\n ...initialTxStatWithoutTime(),\n timeMs: 0,\n };\n}\n\nexport function addStat(a: TxStat, b: TxStat): TxStat {\n return {\n txCount: a.txCount + b.txCount,\n timeMs: a.timeMs + b.timeMs,\n rootsCreated: a.rootsCreated + b.rootsCreated,\n structsCreated: a.structsCreated + b.structsCreated,\n structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,\n ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,\n ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,\n valuesCreated: a.valuesCreated + b.valuesCreated,\n valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,\n kvSetRequests: a.kvSetRequests + b.kvSetRequests,\n kvSetBytes: a.kvSetBytes + b.kvSetBytes,\n inputsLocked: a.inputsLocked + b.inputsLocked,\n outputsLocked: a.outputsLocked + b.outputsLocked,\n fieldsCreated: a.fieldsCreated + b.fieldsCreated,\n fieldsSet: a.fieldsSet + b.fieldsSet,\n fieldsGet: a.fieldsGet + b.fieldsGet,\n rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,\n rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,\n rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,\n rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,\n rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,\n rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,\n kvListRequests: a.kvListRequests + b.kvListRequests,\n kvListEntries: a.kvListEntries + b.kvListEntries,\n kvListBytes: a.kvListBytes + b.kvListBytes,\n kvGetRequests: a.kvGetRequests + b.kvGetRequests,\n kvGetBytes: a.kvGetBytes + b.kvGetBytes,\n };\n}\n\nexport type AllTxStat = {\n committed: TxStat;\n conflict: TxStat;\n error: TxStat;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stat.js","names":[],"sources":["../../src/core/stat.ts"],"sourcesContent":["export type TxStat = {\n txCount: number;\n timeMs: number;\n\n rootsCreated: number;\n structsCreated: number;\n structsCreatedDataBytes: number;\n ephemeralsCreated: number;\n ephemeralsCreatedDataBytes: number;\n valuesCreated: number;\n valuesCreatedDataBytes: number;\n\n kvSetRequests: number;\n kvSetBytes: number;\n\n inputsLocked: number;\n outputsLocked: number;\n fieldsCreated: number;\n fieldsSet: number;\n fieldsGet: number;\n\n rGetDataCacheHits: number;\n rGetDataCacheFields: number;\n rGetDataCacheBytes: number;\n rGetDataNetRequests: number;\n rGetDataNetFields: number;\n rGetDataNetBytes: number;\n\n kvListRequests: number;\n kvListEntries: number;\n kvListBytes: number;\n\n kvGetRequests: number;\n kvGetBytes: number;\n};\n\nexport type TxStatWithoutTime = Omit<TxStat, \"timeMs\">;\n\nexport function initialTxStatWithoutTime(): TxStatWithoutTime {\n return {\n txCount: 0,\n rootsCreated: 0,\n structsCreated: 0,\n structsCreatedDataBytes: 0,\n ephemeralsCreated: 0,\n ephemeralsCreatedDataBytes: 0,\n valuesCreated: 0,\n valuesCreatedDataBytes: 0,\n kvSetRequests: 0,\n kvSetBytes: 0,\n inputsLocked: 0,\n outputsLocked: 0,\n fieldsCreated: 0,\n fieldsSet: 0,\n fieldsGet: 0,\n rGetDataCacheHits: 0,\n rGetDataCacheFields: 0,\n rGetDataCacheBytes: 0,\n rGetDataNetRequests: 0,\n rGetDataNetFields: 0,\n rGetDataNetBytes: 0,\n kvListRequests: 0,\n kvListEntries: 0,\n kvListBytes: 0,\n kvGetRequests: 0,\n kvGetBytes: 0,\n };\n}\nexport function initialTxStat(): TxStat {\n return {\n ...initialTxStatWithoutTime(),\n timeMs: 0,\n };\n}\n\nexport function addStat(a: TxStat, b: TxStat): TxStat {\n return {\n txCount: a.txCount + b.txCount,\n timeMs: a.timeMs + b.timeMs,\n rootsCreated: a.rootsCreated + b.rootsCreated,\n structsCreated: a.structsCreated + b.structsCreated,\n structsCreatedDataBytes: a.structsCreatedDataBytes + b.structsCreatedDataBytes,\n ephemeralsCreated: a.ephemeralsCreated + b.ephemeralsCreated,\n ephemeralsCreatedDataBytes: a.ephemeralsCreatedDataBytes + b.ephemeralsCreatedDataBytes,\n valuesCreated: a.valuesCreated + b.valuesCreated,\n valuesCreatedDataBytes: a.valuesCreatedDataBytes + b.valuesCreatedDataBytes,\n kvSetRequests: a.kvSetRequests + b.kvSetRequests,\n kvSetBytes: a.kvSetBytes + b.kvSetBytes,\n inputsLocked: a.inputsLocked + b.inputsLocked,\n outputsLocked: a.outputsLocked + b.outputsLocked,\n fieldsCreated: a.fieldsCreated + b.fieldsCreated,\n fieldsSet: a.fieldsSet + b.fieldsSet,\n fieldsGet: a.fieldsGet + b.fieldsGet,\n rGetDataCacheHits: a.rGetDataCacheHits + b.rGetDataCacheHits,\n rGetDataCacheFields: a.rGetDataCacheFields + b.rGetDataCacheFields,\n rGetDataCacheBytes: a.rGetDataCacheBytes + b.rGetDataCacheBytes,\n rGetDataNetRequests: a.rGetDataNetRequests + b.rGetDataNetRequests,\n rGetDataNetFields: a.rGetDataNetFields + b.rGetDataNetFields,\n rGetDataNetBytes: a.rGetDataNetBytes + b.rGetDataNetBytes,\n kvListRequests: a.kvListRequests + b.kvListRequests,\n kvListEntries: a.kvListEntries + b.kvListEntries,\n kvListBytes: a.kvListBytes + b.kvListBytes,\n kvGetRequests: a.kvGetRequests + b.kvGetRequests,\n kvGetBytes: a.kvGetBytes + b.kvGetBytes,\n };\n}\n\nexport type AllTxStat = {\n committed: TxStat;\n conflict: TxStat;\n error: TxStat;\n};\n"],"mappings":";AAsCA,SAAgB,2BAA8C;AAC5D,QAAO;EACL,SAAS;EACT,cAAc;EACd,gBAAgB;EAChB,yBAAyB;EACzB,mBAAmB;EACnB,4BAA4B;EAC5B,eAAe;EACf,wBAAwB;EACxB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,eAAe;EACf,eAAe;EACf,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,aAAa;EACb,eAAe;EACf,YAAY;EACb;;AAEH,SAAgB,gBAAwB;AACtC,QAAO;EACL,GAAG,0BAA0B;EAC7B,QAAQ;EACT;;AAGH,SAAgB,QAAQ,GAAW,GAAmB;AACpD,QAAO;EACL,SAAS,EAAE,UAAU,EAAE;EACvB,QAAQ,EAAE,SAAS,EAAE;EACrB,cAAc,EAAE,eAAe,EAAE;EACjC,gBAAgB,EAAE,iBAAiB,EAAE;EACrC,yBAAyB,EAAE,0BAA0B,EAAE;EACvD,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,4BAA4B,EAAE,6BAA6B,EAAE;EAC7D,eAAe,EAAE,gBAAgB,EAAE;EACnC,wBAAwB,EAAE,yBAAyB,EAAE;EACrD,eAAe,EAAE,gBAAgB,EAAE;EACnC,YAAY,EAAE,aAAa,EAAE;EAC7B,cAAc,EAAE,eAAe,EAAE;EACjC,eAAe,EAAE,gBAAgB,EAAE;EACnC,eAAe,EAAE,gBAAgB,EAAE;EACnC,WAAW,EAAE,YAAY,EAAE;EAC3B,WAAW,EAAE,YAAY,EAAE;EAC3B,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,qBAAqB,EAAE,sBAAsB,EAAE;EAC/C,oBAAoB,EAAE,qBAAqB,EAAE;EAC7C,qBAAqB,EAAE,sBAAsB,EAAE;EAC/C,mBAAmB,EAAE,oBAAoB,EAAE;EAC3C,kBAAkB,EAAE,mBAAmB,EAAE;EACzC,gBAAgB,EAAE,iBAAiB,EAAE;EACrC,eAAe,EAAE,gBAAgB,EAAE;EACnC,aAAa,EAAE,cAAc,EAAE;EAC/B,eAAe,EAAE,gBAAgB,EAAE;EACnC,YAAY,EAAE,aAAa,EAAE;EAC9B"}