@milaboratories/pl-client 2.16.25 → 2.16.27

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 (212) hide show
  1. package/README.md +2 -1
  2. package/dist/core/PromiseTracker.cjs +1 -3
  3. package/dist/core/PromiseTracker.cjs.map +1 -1
  4. package/dist/core/PromiseTracker.d.ts.map +1 -1
  5. package/dist/core/PromiseTracker.js +1 -3
  6. package/dist/core/PromiseTracker.js.map +1 -1
  7. package/dist/core/StatefulPromise.cjs +4 -4
  8. package/dist/core/StatefulPromise.cjs.map +1 -1
  9. package/dist/core/StatefulPromise.d.ts +1 -1
  10. package/dist/core/StatefulPromise.d.ts.map +1 -1
  11. package/dist/core/StatefulPromise.js +4 -4
  12. package/dist/core/StatefulPromise.js.map +1 -1
  13. package/dist/core/advisory_locks.cjs +1 -1
  14. package/dist/core/advisory_locks.cjs.map +1 -1
  15. package/dist/core/advisory_locks.js +1 -1
  16. package/dist/core/advisory_locks.js.map +1 -1
  17. package/dist/core/auth.cjs.map +1 -1
  18. package/dist/core/auth.d.ts +1 -1
  19. package/dist/core/auth.js.map +1 -1
  20. package/dist/core/cache.d.ts +1 -1
  21. package/dist/core/client.cjs +14 -14
  22. package/dist/core/client.cjs.map +1 -1
  23. package/dist/core/client.d.ts +11 -11
  24. package/dist/core/client.d.ts.map +1 -1
  25. package/dist/core/client.js +14 -14
  26. package/dist/core/client.js.map +1 -1
  27. package/dist/core/config.cjs +39 -39
  28. package/dist/core/config.cjs.map +1 -1
  29. package/dist/core/config.d.ts +5 -5
  30. package/dist/core/config.js +39 -39
  31. package/dist/core/config.js.map +1 -1
  32. package/dist/core/default_client.cjs +23 -23
  33. package/dist/core/default_client.cjs.map +1 -1
  34. package/dist/core/default_client.d.ts +3 -3
  35. package/dist/core/default_client.js +23 -23
  36. package/dist/core/default_client.js.map +1 -1
  37. package/dist/core/driver.cjs +1 -1
  38. package/dist/core/driver.cjs.map +1 -1
  39. package/dist/core/driver.d.ts +5 -5
  40. package/dist/core/driver.js +1 -1
  41. package/dist/core/driver.js.map +1 -1
  42. package/dist/core/error_resource.cjs +2 -2
  43. package/dist/core/error_resource.cjs.map +1 -1
  44. package/dist/core/error_resource.d.ts +1 -1
  45. package/dist/core/error_resource.js +2 -2
  46. package/dist/core/error_resource.js.map +1 -1
  47. package/dist/core/errors.cjs +24 -24
  48. package/dist/core/errors.cjs.map +1 -1
  49. package/dist/core/errors.d.ts +1 -1
  50. package/dist/core/errors.d.ts.map +1 -1
  51. package/dist/core/errors.js +24 -24
  52. package/dist/core/errors.js.map +1 -1
  53. package/dist/core/final.cjs +43 -43
  54. package/dist/core/final.cjs.map +1 -1
  55. package/dist/core/final.d.ts +3 -3
  56. package/dist/core/final.d.ts.map +1 -1
  57. package/dist/core/final.js +43 -43
  58. package/dist/core/final.js.map +1 -1
  59. package/dist/core/ll_client.cjs +50 -43
  60. package/dist/core/ll_client.cjs.map +1 -1
  61. package/dist/core/ll_client.d.ts +9 -9
  62. package/dist/core/ll_client.d.ts.map +1 -1
  63. package/dist/core/ll_client.js +50 -43
  64. package/dist/core/ll_client.js.map +1 -1
  65. package/dist/core/ll_transaction.cjs +9 -9
  66. package/dist/core/ll_transaction.cjs.map +1 -1
  67. package/dist/core/ll_transaction.d.ts +7 -7
  68. package/dist/core/ll_transaction.d.ts.map +1 -1
  69. package/dist/core/ll_transaction.js +9 -9
  70. package/dist/core/ll_transaction.js.map +1 -1
  71. package/dist/core/stat.cjs.map +1 -1
  72. package/dist/core/stat.d.ts +1 -1
  73. package/dist/core/stat.js.map +1 -1
  74. package/dist/core/transaction.cjs +46 -46
  75. package/dist/core/transaction.cjs.map +1 -1
  76. package/dist/core/transaction.d.ts +7 -7
  77. package/dist/core/transaction.d.ts.map +1 -1
  78. package/dist/core/transaction.js +46 -46
  79. package/dist/core/transaction.js.map +1 -1
  80. package/dist/core/type_conversion.cjs +22 -22
  81. package/dist/core/type_conversion.cjs.map +1 -1
  82. package/dist/core/type_conversion.d.ts +3 -3
  83. package/dist/core/type_conversion.d.ts.map +1 -1
  84. package/dist/core/type_conversion.js +22 -22
  85. package/dist/core/type_conversion.js.map +1 -1
  86. package/dist/core/types.cjs +25 -25
  87. package/dist/core/types.cjs.map +1 -1
  88. package/dist/core/types.d.ts +7 -7
  89. package/dist/core/types.js +25 -25
  90. package/dist/core/types.js.map +1 -1
  91. package/dist/core/unauth_client.cjs +6 -4
  92. package/dist/core/unauth_client.cjs.map +1 -1
  93. package/dist/core/unauth_client.d.ts +4 -4
  94. package/dist/core/unauth_client.d.ts.map +1 -1
  95. package/dist/core/unauth_client.js +6 -4
  96. package/dist/core/unauth_client.js.map +1 -1
  97. package/dist/core/websocket_stream.cjs +22 -20
  98. package/dist/core/websocket_stream.cjs.map +1 -1
  99. package/dist/core/websocket_stream.d.ts +3 -3
  100. package/dist/core/websocket_stream.d.ts.map +1 -1
  101. package/dist/core/websocket_stream.js +22 -20
  102. package/dist/core/websocket_stream.js.map +1 -1
  103. package/dist/core/wire.d.ts +6 -6
  104. package/dist/core/wire.d.ts.map +1 -1
  105. package/dist/helpers/pl.cjs +19 -19
  106. package/dist/helpers/pl.cjs.map +1 -1
  107. package/dist/helpers/pl.d.ts +2 -2
  108. package/dist/helpers/pl.js +19 -19
  109. package/dist/helpers/pl.js.map +1 -1
  110. package/dist/helpers/poll.cjs +6 -6
  111. package/dist/helpers/poll.cjs.map +1 -1
  112. package/dist/helpers/poll.d.ts +4 -4
  113. package/dist/helpers/poll.d.ts.map +1 -1
  114. package/dist/helpers/poll.js +6 -6
  115. package/dist/helpers/poll.js.map +1 -1
  116. package/dist/helpers/retry_strategy.cjs +1 -1
  117. package/dist/helpers/retry_strategy.cjs.map +1 -1
  118. package/dist/helpers/retry_strategy.d.ts.map +1 -1
  119. package/dist/helpers/retry_strategy.js +1 -1
  120. package/dist/helpers/retry_strategy.js.map +1 -1
  121. package/dist/helpers/state_helpers.d.ts +2 -2
  122. package/dist/helpers/tx_helpers.cjs +2 -2
  123. package/dist/helpers/tx_helpers.cjs.map +1 -1
  124. package/dist/helpers/tx_helpers.d.ts +2 -2
  125. package/dist/helpers/tx_helpers.d.ts.map +1 -1
  126. package/dist/helpers/tx_helpers.js +2 -2
  127. package/dist/helpers/tx_helpers.js.map +1 -1
  128. package/dist/index.d.ts +16 -16
  129. package/dist/proto-grpc/google/protobuf/struct.d.ts +1 -1
  130. package/dist/proto-grpc/google/protobuf/struct.d.ts.map +1 -1
  131. package/dist/proto-rest/index.cjs +4 -5
  132. package/dist/proto-rest/index.cjs.map +1 -1
  133. package/dist/proto-rest/index.d.ts +4 -4
  134. package/dist/proto-rest/index.d.ts.map +1 -1
  135. package/dist/proto-rest/index.js +4 -5
  136. package/dist/proto-rest/index.js.map +1 -1
  137. package/dist/proto-rest/plapi.d.ts.map +1 -1
  138. package/dist/test/tcp-proxy.cjs +11 -10
  139. package/dist/test/tcp-proxy.cjs.map +1 -1
  140. package/dist/test/tcp-proxy.d.ts +1 -1
  141. package/dist/test/tcp-proxy.d.ts.map +1 -1
  142. package/dist/test/tcp-proxy.js +11 -10
  143. package/dist/test/tcp-proxy.js.map +1 -1
  144. package/dist/test/test_config.cjs +21 -17
  145. package/dist/test/test_config.cjs.map +1 -1
  146. package/dist/test/test_config.d.ts +6 -6
  147. package/dist/test/test_config.d.ts.map +1 -1
  148. package/dist/test/test_config.js +21 -17
  149. package/dist/test/test_config.js.map +1 -1
  150. package/dist/util/pl.cjs +1 -1
  151. package/dist/util/pl.cjs.map +1 -1
  152. package/dist/util/pl.js +1 -1
  153. package/dist/util/pl.js.map +1 -1
  154. package/dist/util/util.cjs +1 -1
  155. package/dist/util/util.cjs.map +1 -1
  156. package/dist/util/util.js +1 -1
  157. package/dist/util/util.js.map +1 -1
  158. package/package.json +23 -23
  159. package/src/core/PromiseTracker.ts +3 -4
  160. package/src/core/StatefulPromise.ts +17 -8
  161. package/src/core/abstract_stream.ts +3 -4
  162. package/src/core/advisory_locks.ts +1 -1
  163. package/src/core/auth.ts +2 -2
  164. package/src/core/cache.ts +1 -1
  165. package/src/core/client.test.ts +25 -21
  166. package/src/core/client.ts +54 -45
  167. package/src/core/config.test.ts +44 -44
  168. package/src/core/config.ts +49 -49
  169. package/src/core/connectivity.test.ts +69 -63
  170. package/src/core/default_client.ts +46 -46
  171. package/src/core/driver.ts +6 -6
  172. package/src/core/error.test.ts +5 -5
  173. package/src/core/error_resource.ts +3 -3
  174. package/src/core/errors.ts +39 -31
  175. package/src/core/final.ts +48 -55
  176. package/src/core/ll_client.test.ts +53 -36
  177. package/src/core/ll_client.ts +125 -81
  178. package/src/core/ll_transaction.test.ts +75 -49
  179. package/src/core/ll_transaction.ts +37 -35
  180. package/src/core/stat.ts +1 -1
  181. package/src/core/transaction.test.ts +65 -65
  182. package/src/core/transaction.ts +91 -84
  183. package/src/core/type_conversion.ts +30 -31
  184. package/src/core/types.test.ts +6 -6
  185. package/src/core/types.ts +35 -35
  186. package/src/core/unauth_client.test.ts +18 -14
  187. package/src/core/unauth_client.ts +14 -12
  188. package/src/core/websocket_stream.test.ts +52 -52
  189. package/src/core/websocket_stream.ts +41 -37
  190. package/src/core/wire.ts +10 -8
  191. package/src/helpers/pl.ts +22 -22
  192. package/src/helpers/poll.ts +13 -27
  193. package/src/helpers/retry_strategy.ts +2 -4
  194. package/src/helpers/rich_resource_types.test.ts +2 -2
  195. package/src/helpers/state_helpers.ts +3 -3
  196. package/src/helpers/tx_helpers.ts +9 -7
  197. package/src/index.ts +16 -16
  198. package/src/proto-grpc/google/protobuf/struct.ts +1 -1
  199. package/src/proto-rest/index.ts +17 -18
  200. package/src/proto-rest/plapi.ts +1472 -1472
  201. package/src/test/tcp-proxy.ts +55 -54
  202. package/src/test/test_config.test.ts +3 -3
  203. package/src/test/test_config.ts +51 -46
  204. package/src/util/pl.ts +1 -1
  205. package/src/util/util.test.ts +5 -5
  206. package/src/util/util.ts +1 -1
  207. package/dist/helpers/rich_resource_types.d.ts +0 -2
  208. package/dist/helpers/rich_resource_types.d.ts.map +0 -1
  209. package/dist/helpers/smart_accessors.d.ts +0 -2
  210. package/dist/helpers/smart_accessors.d.ts.map +0 -1
  211. package/src/helpers/rich_resource_types.ts +0 -84
  212. package/src/helpers/smart_accessors.ts +0 -146
package/README.md CHANGED
@@ -30,7 +30,8 @@ Dependencies:
30
30
  - `protodep`
31
31
  - `go install github.com/milaboratory/protodep@v0.1.7-milab`
32
32
 
33
- check that you have `${HOME}/go/bin` in `PATH`
33
+ check that you have `${HOME}/go/bin` in `PATH`
34
+
34
35
  - `rsync`
35
36
 
36
37
  ```bash
@@ -17,9 +17,7 @@ class PromiseTracker {
17
17
  return this.promises.size;
18
18
  }
19
19
  track(promiseOrCallback) {
20
- const _promise = typeof promiseOrCallback === 'function'
21
- ? promiseOrCallback()
22
- : promiseOrCallback;
20
+ const _promise = typeof promiseOrCallback === "function" ? promiseOrCallback() : promiseOrCallback;
23
21
  const promise = StatefulPromise.StatefulPromise.fromDeferredReject(_promise, (p) => {
24
22
  this.promises.delete(p);
25
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PromiseTracker.cjs","sources":["../../src/core/PromiseTracker.ts"],"sourcesContent":["import { StatefulPromise } from './StatefulPromise';\n\n/**\n * Tracks pending promises to ensure they are all awaited before proceeding.\n * Useful for coordinating async operations, preventing premature completion,\n * and avoiding unhandled promise rejections.\n */\nexport class PromiseTracker {\n private promises: Set<Promise<unknown>> = new Set();\n private _draining = false;\n\n get draining(): boolean {\n return this._draining;\n }\n\n get size(): number {\n return this.promises.size;\n }\n\n track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n const _promise = typeof promiseOrCallback === 'function'\n ? promiseOrCallback()\n : promiseOrCallback;\n\n const promise = StatefulPromise.fromDeferredReject(_promise, (p) => {\n this.promises.delete(p);\n });\n this.promises.add(promise);\n return promise;\n }\n\n async awaitAll() {\n const toAwait = Array.from(this.promises);\n this._draining = true;\n return await Promise.all(toAwait).finally(() => {\n this._draining = false;\n });\n }\n}\n"],"names":["StatefulPromise"],"mappings":";;;;AAEA;;;;AAIG;MACU,cAAc,CAAA;AACjB,IAAA,QAAQ,GAA0B,IAAI,GAAG,EAAE;IAC3C,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3B;AAEA,IAAA,KAAK,CAAI,iBAAkD,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,OAAO,iBAAiB,KAAK;cAC1C,iBAAiB;cACjB,iBAAiB;QAErB,MAAM,OAAO,GAAGA,+BAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"PromiseTracker.cjs","sources":["../../src/core/PromiseTracker.ts"],"sourcesContent":["import { StatefulPromise } from \"./StatefulPromise\";\n\n/**\n * Tracks pending promises to ensure they are all awaited before proceeding.\n * Useful for coordinating async operations, preventing premature completion,\n * and avoiding unhandled promise rejections.\n */\nexport class PromiseTracker {\n private promises: Set<Promise<unknown>> = new Set();\n private _draining = false;\n\n get draining(): boolean {\n return this._draining;\n }\n\n get size(): number {\n return this.promises.size;\n }\n\n track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n const _promise =\n typeof promiseOrCallback === \"function\" ? promiseOrCallback() : promiseOrCallback;\n\n const promise = StatefulPromise.fromDeferredReject(_promise, (p) => {\n this.promises.delete(p);\n });\n this.promises.add(promise);\n return promise;\n }\n\n async awaitAll() {\n const toAwait = Array.from(this.promises);\n this._draining = true;\n return await Promise.all(toAwait).finally(() => {\n this._draining = false;\n });\n }\n}\n"],"names":["StatefulPromise"],"mappings":";;;;AAEA;;;;AAIG;MACU,cAAc,CAAA;AACjB,IAAA,QAAQ,GAA0B,IAAI,GAAG,EAAE;IAC3C,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3B;AAEA,IAAA,KAAK,CAAI,iBAAkD,EAAA;AACzD,QAAA,MAAM,QAAQ,GACZ,OAAO,iBAAiB,KAAK,UAAU,GAAG,iBAAiB,EAAE,GAAG,iBAAiB;QAEnF,MAAM,OAAO,GAAGA,+BAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PromiseTracker.d.ts","sourceRoot":"","sources":["../../src/core/PromiseTracker.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYlE,QAAQ;CAOf"}
1
+ {"version":3,"file":"PromiseTracker.d.ts","sourceRoot":"","sources":["../../src/core/PromiseTracker.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWlE,QAAQ;CAOf"}
@@ -15,9 +15,7 @@ class PromiseTracker {
15
15
  return this.promises.size;
16
16
  }
17
17
  track(promiseOrCallback) {
18
- const _promise = typeof promiseOrCallback === 'function'
19
- ? promiseOrCallback()
20
- : promiseOrCallback;
18
+ const _promise = typeof promiseOrCallback === "function" ? promiseOrCallback() : promiseOrCallback;
21
19
  const promise = StatefulPromise.fromDeferredReject(_promise, (p) => {
22
20
  this.promises.delete(p);
23
21
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PromiseTracker.js","sources":["../../src/core/PromiseTracker.ts"],"sourcesContent":["import { StatefulPromise } from './StatefulPromise';\n\n/**\n * Tracks pending promises to ensure they are all awaited before proceeding.\n * Useful for coordinating async operations, preventing premature completion,\n * and avoiding unhandled promise rejections.\n */\nexport class PromiseTracker {\n private promises: Set<Promise<unknown>> = new Set();\n private _draining = false;\n\n get draining(): boolean {\n return this._draining;\n }\n\n get size(): number {\n return this.promises.size;\n }\n\n track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n const _promise = typeof promiseOrCallback === 'function'\n ? promiseOrCallback()\n : promiseOrCallback;\n\n const promise = StatefulPromise.fromDeferredReject(_promise, (p) => {\n this.promises.delete(p);\n });\n this.promises.add(promise);\n return promise;\n }\n\n async awaitAll() {\n const toAwait = Array.from(this.promises);\n this._draining = true;\n return await Promise.all(toAwait).finally(() => {\n this._draining = false;\n });\n }\n}\n"],"names":[],"mappings":";;AAEA;;;;AAIG;MACU,cAAc,CAAA;AACjB,IAAA,QAAQ,GAA0B,IAAI,GAAG,EAAE;IAC3C,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3B;AAEA,IAAA,KAAK,CAAI,iBAAkD,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,OAAO,iBAAiB,KAAK;cAC1C,iBAAiB;cACjB,iBAAiB;QAErB,MAAM,OAAO,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"PromiseTracker.js","sources":["../../src/core/PromiseTracker.ts"],"sourcesContent":["import { StatefulPromise } from \"./StatefulPromise\";\n\n/**\n * Tracks pending promises to ensure they are all awaited before proceeding.\n * Useful for coordinating async operations, preventing premature completion,\n * and avoiding unhandled promise rejections.\n */\nexport class PromiseTracker {\n private promises: Set<Promise<unknown>> = new Set();\n private _draining = false;\n\n get draining(): boolean {\n return this._draining;\n }\n\n get size(): number {\n return this.promises.size;\n }\n\n track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n const _promise =\n typeof promiseOrCallback === \"function\" ? promiseOrCallback() : promiseOrCallback;\n\n const promise = StatefulPromise.fromDeferredReject(_promise, (p) => {\n this.promises.delete(p);\n });\n this.promises.add(promise);\n return promise;\n }\n\n async awaitAll() {\n const toAwait = Array.from(this.promises);\n this._draining = true;\n return await Promise.all(toAwait).finally(() => {\n this._draining = false;\n });\n }\n}\n"],"names":[],"mappings":";;AAEA;;;;AAIG;MACU,cAAc,CAAA;AACjB,IAAA,QAAQ,GAA0B,IAAI,GAAG,EAAE;IAC3C,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3B;AAEA,IAAA,KAAK,CAAI,iBAAkD,EAAA;AACzD,QAAA,MAAM,QAAQ,GACZ,OAAO,iBAAiB,KAAK,UAAU,GAAG,iBAAiB,EAAE,GAAG,iBAAiB;QAEnF,MAAM,OAAO,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -23,21 +23,21 @@ class StatefulPromise {
23
23
  constructor(promise, options = {}) {
24
24
  this.promise = promise;
25
25
  this.options = options;
26
- this._state = 'pending';
26
+ this._state = "pending";
27
27
  this._id = StatefulPromise.idCounter++;
28
28
  this.promise
29
29
  .then((value) => {
30
- this._state = 'fulfilled';
30
+ this._state = "fulfilled";
31
31
  return value;
32
32
  })
33
33
  .catch((err) => {
34
- this._state = 'rejected';
34
+ this._state = "rejected";
35
35
  if (!options.deferReject) {
36
36
  throw err;
37
37
  }
38
38
  });
39
39
  }
40
- [Symbol.toStringTag] = 'Promise';
40
+ [Symbol.toStringTag] = "Promise";
41
41
  get id() {
42
42
  return this._id;
43
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StatefulPromise.cjs","sources":["../../src/core/StatefulPromise.ts"],"sourcesContent":["type PromiseState = 'pending' | 'fulfilled' | 'rejected';\n\ntype StatefulPromiseOptions<T> = {\n /**\n * If true, rejections that happen inside the promise are *recorded* but\n * not rethrown from the constructor chain. They will only surface when you\n * call unwrap()/then()/await.\n */\n deferReject?: true;\n /**\n * Callback invoked when the promise is accessed (via then/catch/finally/await).\n * Useful for cleanup or tracking when a promise result is consumed.\n */\n onUnwrap?: (promise: StatefulPromise<T>) => void;\n};\n\n/**\n * A Promise wrapper that tracks its state (pending/fulfilled/rejected) and provides\n * optional deferred rejection handling to prevent unhandled promise rejections.\n */\nexport class StatefulPromise<T> implements Promise<T> {\n private _state: PromiseState;\n private _id: bigint;\n\n private static idCounter = 0n;\n\n public static debug = false;\n\n static from<T>(promise: Promise<T>, options: StatefulPromiseOptions<T> = {}): StatefulPromise<T> {\n return new StatefulPromise(promise, options);\n }\n\n static fromDeferredReject<T>(promise: Promise<T>, onUnwrap?: (promise: StatefulPromise<T>) => void): StatefulPromise<T> {\n return new StatefulPromise(promise, { deferReject: true, onUnwrap });\n }\n\n static fromDeferredRejectCallback<T>(asyncFn: () => Promise<T>, onUnwrap?: (promise: StatefulPromise<T>) => void): StatefulPromise<T> {\n return new StatefulPromise(asyncFn(), { deferReject: true, onUnwrap });\n }\n\n private constructor(private readonly promise: Promise<T>, private readonly options: StatefulPromiseOptions<T> = {}) {\n this._state = 'pending';\n this._id = StatefulPromise.idCounter++;\n\n this.promise\n .then((value) => {\n this._state = 'fulfilled';\n return value;\n })\n .catch((err) => {\n this._state = 'rejected';\n if (!options.deferReject) {\n throw err;\n }\n });\n }\n\n readonly [Symbol.toStringTag] = 'Promise';\n\n get id(): bigint {\n return this._id;\n }\n\n get state(): PromiseState {\n return this._state;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: (reason: unknown) => TResult | PromiseLike<TResult>,\n ): Promise<T | TResult> {\n return this.unwrap().catch(onrejected);\n }\n\n finally(onfinally?: () => void): Promise<T> {\n return this.unwrap().finally(onfinally);\n }\n\n async unwrap(): Promise<T> {\n if (this.options.onUnwrap) {\n this.options.onUnwrap(this);\n }\n\n return this.promise;\n }\n}\n"],"names":[],"mappings":";;AAgBA;;;AAGG;MACU,eAAe,CAAA;AAoBW,IAAA,OAAA;AAAsC,IAAA,OAAA;AAnBnE,IAAA,MAAM;AACN,IAAA,GAAG;AAEH,IAAA,OAAO,SAAS,GAAG,EAAE;AAEtB,IAAA,OAAO,KAAK,GAAG,KAAK;AAE3B,IAAA,OAAO,IAAI,CAAI,OAAmB,EAAE,UAAqC,EAAE,EAAA;AACzE,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,OAAO,kBAAkB,CAAI,OAAmB,EAAE,QAAgD,EAAA;AAChG,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE;AAEA,IAAA,OAAO,0BAA0B,CAAI,OAAyB,EAAE,QAAgD,EAAA;AAC9G,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxE;IAEA,WAAA,CAAqC,OAAmB,EAAmB,OAAA,GAAqC,EAAE,EAAA;QAA7E,IAAA,CAAA,OAAO,GAAP,OAAO;QAA+B,IAAA,CAAA,OAAO,GAAP,OAAO;AAChF,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE;AAEtC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACxB,gBAAA,MAAM,GAAG;YACX;AACF,QAAA,CAAC,CAAC;IACN;AAES,IAAA,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS;AAEzC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,CACF,WAAqE,EACrE,UAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACpD;AAEA,IAAA,KAAK,CACH,UAAgE,EAAA;QAEhE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACxC;AAEA,IAAA,OAAO,CAAC,SAAsB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B;QAEA,OAAO,IAAI,CAAC,OAAO;IACrB;;;;;"}
1
+ {"version":3,"file":"StatefulPromise.cjs","sources":["../../src/core/StatefulPromise.ts"],"sourcesContent":["type PromiseState = \"pending\" | \"fulfilled\" | \"rejected\";\n\ntype StatefulPromiseOptions<T> = {\n /**\n * If true, rejections that happen inside the promise are *recorded* but\n * not rethrown from the constructor chain. They will only surface when you\n * call unwrap()/then()/await.\n */\n deferReject?: true;\n /**\n * Callback invoked when the promise is accessed (via then/catch/finally/await).\n * Useful for cleanup or tracking when a promise result is consumed.\n */\n onUnwrap?: (promise: StatefulPromise<T>) => void;\n};\n\n/**\n * A Promise wrapper that tracks its state (pending/fulfilled/rejected) and provides\n * optional deferred rejection handling to prevent unhandled promise rejections.\n */\nexport class StatefulPromise<T> implements Promise<T> {\n private _state: PromiseState;\n private _id: bigint;\n\n private static idCounter = 0n;\n\n public static debug = false;\n\n static from<T>(promise: Promise<T>, options: StatefulPromiseOptions<T> = {}): StatefulPromise<T> {\n return new StatefulPromise(promise, options);\n }\n\n static fromDeferredReject<T>(\n promise: Promise<T>,\n onUnwrap?: (promise: StatefulPromise<T>) => void,\n ): StatefulPromise<T> {\n return new StatefulPromise(promise, { deferReject: true, onUnwrap });\n }\n\n static fromDeferredRejectCallback<T>(\n asyncFn: () => Promise<T>,\n onUnwrap?: (promise: StatefulPromise<T>) => void,\n ): StatefulPromise<T> {\n return new StatefulPromise(asyncFn(), { deferReject: true, onUnwrap });\n }\n\n private constructor(\n private readonly promise: Promise<T>,\n private readonly options: StatefulPromiseOptions<T> = {},\n ) {\n this._state = \"pending\";\n this._id = StatefulPromise.idCounter++;\n\n this.promise\n .then((value) => {\n this._state = \"fulfilled\";\n return value;\n })\n .catch((err) => {\n this._state = \"rejected\";\n if (!options.deferReject) {\n throw err;\n }\n });\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n get id(): bigint {\n return this._id;\n }\n\n get state(): PromiseState {\n return this._state;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: (reason: unknown) => TResult | PromiseLike<TResult>,\n ): Promise<T | TResult> {\n return this.unwrap().catch(onrejected);\n }\n\n finally(onfinally?: () => void): Promise<T> {\n return this.unwrap().finally(onfinally);\n }\n\n async unwrap(): Promise<T> {\n if (this.options.onUnwrap) {\n this.options.onUnwrap(this);\n }\n\n return this.promise;\n }\n}\n"],"names":[],"mappings":";;AAgBA;;;AAGG;MACU,eAAe,CAAA;AA2BP,IAAA,OAAA;AACA,IAAA,OAAA;AA3BX,IAAA,MAAM;AACN,IAAA,GAAG;AAEH,IAAA,OAAO,SAAS,GAAG,EAAE;AAEtB,IAAA,OAAO,KAAK,GAAG,KAAK;AAE3B,IAAA,OAAO,IAAI,CAAI,OAAmB,EAAE,UAAqC,EAAE,EAAA;AACzE,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,OAAO,kBAAkB,CACvB,OAAmB,EACnB,QAAgD,EAAA;AAEhD,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE;AAEA,IAAA,OAAO,0BAA0B,CAC/B,OAAyB,EACzB,QAAgD,EAAA;AAEhD,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxE;IAEA,WAAA,CACmB,OAAmB,EACnB,OAAA,GAAqC,EAAE,EAAA;QADvC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;AAExB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE;AAEtC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACxB,gBAAA,MAAM,GAAG;YACX;AACF,QAAA,CAAC,CAAC;IACN;AAES,IAAA,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS;AAEzC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,CACF,WAAqE,EACrE,UAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACpD;AAEA,IAAA,KAAK,CACH,UAAgE,EAAA;QAEhE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACxC;AAEA,IAAA,OAAO,CAAC,SAAsB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B;QAEA,OAAO,IAAI,CAAC,OAAO;IACrB;;;;;"}
@@ -1,4 +1,4 @@
1
- type PromiseState = 'pending' | 'fulfilled' | 'rejected';
1
+ type PromiseState = "pending" | "fulfilled" | "rejected";
2
2
  type StatefulPromiseOptions<T> = {
3
3
  /**
4
4
  * If true, rejections that happen inside the promise are *recorded* but
@@ -1 +1 @@
1
- {"version":3,"file":"StatefulPromise.d.ts","sourceRoot":"","sources":["../../src/core/StatefulPromise.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAEzD,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAoB/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAc,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBlF,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAM;IAE9B,OAAc,KAAK,UAAS;IAE5B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAIhG,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;IAIvH,MAAM,CAAC,0BAA0B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;IAIrI,OAAO;IAiBP,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;IAE1C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACjC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACrE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAC1E,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAC/D,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;IAIvB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;CAO3B"}
1
+ {"version":3,"file":"StatefulPromise.d.ts","sourceRoot":"","sources":["../../src/core/StatefulPromise.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAEzD,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IA2BjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA3B1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAM;IAE9B,OAAc,KAAK,UAAS;IAE5B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAIhG,MAAM,CAAC,kBAAkB,CAAC,CAAC,EACzB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,eAAe,CAAC,CAAC,CAAC;IAIrB,MAAM,CAAC,0BAA0B,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,eAAe,CAAC,CAAC,CAAC;IAIrB,OAAO;IAoBP,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;IAE1C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACjC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACrE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAC1E,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAC/D,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;IAIvB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;CAO3B"}
@@ -21,21 +21,21 @@ class StatefulPromise {
21
21
  constructor(promise, options = {}) {
22
22
  this.promise = promise;
23
23
  this.options = options;
24
- this._state = 'pending';
24
+ this._state = "pending";
25
25
  this._id = StatefulPromise.idCounter++;
26
26
  this.promise
27
27
  .then((value) => {
28
- this._state = 'fulfilled';
28
+ this._state = "fulfilled";
29
29
  return value;
30
30
  })
31
31
  .catch((err) => {
32
- this._state = 'rejected';
32
+ this._state = "rejected";
33
33
  if (!options.deferReject) {
34
34
  throw err;
35
35
  }
36
36
  });
37
37
  }
38
- [Symbol.toStringTag] = 'Promise';
38
+ [Symbol.toStringTag] = "Promise";
39
39
  get id() {
40
40
  return this._id;
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StatefulPromise.js","sources":["../../src/core/StatefulPromise.ts"],"sourcesContent":["type PromiseState = 'pending' | 'fulfilled' | 'rejected';\n\ntype StatefulPromiseOptions<T> = {\n /**\n * If true, rejections that happen inside the promise are *recorded* but\n * not rethrown from the constructor chain. They will only surface when you\n * call unwrap()/then()/await.\n */\n deferReject?: true;\n /**\n * Callback invoked when the promise is accessed (via then/catch/finally/await).\n * Useful for cleanup or tracking when a promise result is consumed.\n */\n onUnwrap?: (promise: StatefulPromise<T>) => void;\n};\n\n/**\n * A Promise wrapper that tracks its state (pending/fulfilled/rejected) and provides\n * optional deferred rejection handling to prevent unhandled promise rejections.\n */\nexport class StatefulPromise<T> implements Promise<T> {\n private _state: PromiseState;\n private _id: bigint;\n\n private static idCounter = 0n;\n\n public static debug = false;\n\n static from<T>(promise: Promise<T>, options: StatefulPromiseOptions<T> = {}): StatefulPromise<T> {\n return new StatefulPromise(promise, options);\n }\n\n static fromDeferredReject<T>(promise: Promise<T>, onUnwrap?: (promise: StatefulPromise<T>) => void): StatefulPromise<T> {\n return new StatefulPromise(promise, { deferReject: true, onUnwrap });\n }\n\n static fromDeferredRejectCallback<T>(asyncFn: () => Promise<T>, onUnwrap?: (promise: StatefulPromise<T>) => void): StatefulPromise<T> {\n return new StatefulPromise(asyncFn(), { deferReject: true, onUnwrap });\n }\n\n private constructor(private readonly promise: Promise<T>, private readonly options: StatefulPromiseOptions<T> = {}) {\n this._state = 'pending';\n this._id = StatefulPromise.idCounter++;\n\n this.promise\n .then((value) => {\n this._state = 'fulfilled';\n return value;\n })\n .catch((err) => {\n this._state = 'rejected';\n if (!options.deferReject) {\n throw err;\n }\n });\n }\n\n readonly [Symbol.toStringTag] = 'Promise';\n\n get id(): bigint {\n return this._id;\n }\n\n get state(): PromiseState {\n return this._state;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: (reason: unknown) => TResult | PromiseLike<TResult>,\n ): Promise<T | TResult> {\n return this.unwrap().catch(onrejected);\n }\n\n finally(onfinally?: () => void): Promise<T> {\n return this.unwrap().finally(onfinally);\n }\n\n async unwrap(): Promise<T> {\n if (this.options.onUnwrap) {\n this.options.onUnwrap(this);\n }\n\n return this.promise;\n }\n}\n"],"names":[],"mappings":"AAgBA;;;AAGG;MACU,eAAe,CAAA;AAoBW,IAAA,OAAA;AAAsC,IAAA,OAAA;AAnBnE,IAAA,MAAM;AACN,IAAA,GAAG;AAEH,IAAA,OAAO,SAAS,GAAG,EAAE;AAEtB,IAAA,OAAO,KAAK,GAAG,KAAK;AAE3B,IAAA,OAAO,IAAI,CAAI,OAAmB,EAAE,UAAqC,EAAE,EAAA;AACzE,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,OAAO,kBAAkB,CAAI,OAAmB,EAAE,QAAgD,EAAA;AAChG,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE;AAEA,IAAA,OAAO,0BAA0B,CAAI,OAAyB,EAAE,QAAgD,EAAA;AAC9G,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxE;IAEA,WAAA,CAAqC,OAAmB,EAAmB,OAAA,GAAqC,EAAE,EAAA;QAA7E,IAAA,CAAA,OAAO,GAAP,OAAO;QAA+B,IAAA,CAAA,OAAO,GAAP,OAAO;AAChF,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE;AAEtC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACxB,gBAAA,MAAM,GAAG;YACX;AACF,QAAA,CAAC,CAAC;IACN;AAES,IAAA,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS;AAEzC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,CACF,WAAqE,EACrE,UAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACpD;AAEA,IAAA,KAAK,CACH,UAAgE,EAAA;QAEhE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACxC;AAEA,IAAA,OAAO,CAAC,SAAsB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B;QAEA,OAAO,IAAI,CAAC,OAAO;IACrB;;;;;"}
1
+ {"version":3,"file":"StatefulPromise.js","sources":["../../src/core/StatefulPromise.ts"],"sourcesContent":["type PromiseState = \"pending\" | \"fulfilled\" | \"rejected\";\n\ntype StatefulPromiseOptions<T> = {\n /**\n * If true, rejections that happen inside the promise are *recorded* but\n * not rethrown from the constructor chain. They will only surface when you\n * call unwrap()/then()/await.\n */\n deferReject?: true;\n /**\n * Callback invoked when the promise is accessed (via then/catch/finally/await).\n * Useful for cleanup or tracking when a promise result is consumed.\n */\n onUnwrap?: (promise: StatefulPromise<T>) => void;\n};\n\n/**\n * A Promise wrapper that tracks its state (pending/fulfilled/rejected) and provides\n * optional deferred rejection handling to prevent unhandled promise rejections.\n */\nexport class StatefulPromise<T> implements Promise<T> {\n private _state: PromiseState;\n private _id: bigint;\n\n private static idCounter = 0n;\n\n public static debug = false;\n\n static from<T>(promise: Promise<T>, options: StatefulPromiseOptions<T> = {}): StatefulPromise<T> {\n return new StatefulPromise(promise, options);\n }\n\n static fromDeferredReject<T>(\n promise: Promise<T>,\n onUnwrap?: (promise: StatefulPromise<T>) => void,\n ): StatefulPromise<T> {\n return new StatefulPromise(promise, { deferReject: true, onUnwrap });\n }\n\n static fromDeferredRejectCallback<T>(\n asyncFn: () => Promise<T>,\n onUnwrap?: (promise: StatefulPromise<T>) => void,\n ): StatefulPromise<T> {\n return new StatefulPromise(asyncFn(), { deferReject: true, onUnwrap });\n }\n\n private constructor(\n private readonly promise: Promise<T>,\n private readonly options: StatefulPromiseOptions<T> = {},\n ) {\n this._state = \"pending\";\n this._id = StatefulPromise.idCounter++;\n\n this.promise\n .then((value) => {\n this._state = \"fulfilled\";\n return value;\n })\n .catch((err) => {\n this._state = \"rejected\";\n if (!options.deferReject) {\n throw err;\n }\n });\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n get id(): bigint {\n return this._id;\n }\n\n get state(): PromiseState {\n return this._state;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.unwrap().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: (reason: unknown) => TResult | PromiseLike<TResult>,\n ): Promise<T | TResult> {\n return this.unwrap().catch(onrejected);\n }\n\n finally(onfinally?: () => void): Promise<T> {\n return this.unwrap().finally(onfinally);\n }\n\n async unwrap(): Promise<T> {\n if (this.options.onUnwrap) {\n this.options.onUnwrap(this);\n }\n\n return this.promise;\n }\n}\n"],"names":[],"mappings":"AAgBA;;;AAGG;MACU,eAAe,CAAA;AA2BP,IAAA,OAAA;AACA,IAAA,OAAA;AA3BX,IAAA,MAAM;AACN,IAAA,GAAG;AAEH,IAAA,OAAO,SAAS,GAAG,EAAE;AAEtB,IAAA,OAAO,KAAK,GAAG,KAAK;AAE3B,IAAA,OAAO,IAAI,CAAI,OAAmB,EAAE,UAAqC,EAAE,EAAA;AACzE,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,OAAO,kBAAkB,CACvB,OAAmB,EACnB,QAAgD,EAAA;AAEhD,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE;AAEA,IAAA,OAAO,0BAA0B,CAC/B,OAAyB,EACzB,QAAgD,EAAA;AAEhD,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxE;IAEA,WAAA,CACmB,OAAmB,EACnB,OAAA,GAAqC,EAAE,EAAA;QADvC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;AAExB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE;AAEtC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACxB,gBAAA,MAAM,GAAG;YACX;AACF,QAAA,CAAC,CAAC;IACN;AAES,IAAA,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS;AAEzC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,CACF,WAAqE,EACrE,UAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACpD;AAEA,IAAA,KAAK,CACH,UAAgE,EAAA;QAEhE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACxC;AAEA,IAAA,OAAO,CAAC,SAAsB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7B;QAEA,OAAO,IAAI,CAAC,OAAO;IACrB;;;;;"}
@@ -17,7 +17,7 @@ class AwaitLock {
17
17
  */
18
18
  release() {
19
19
  if (!this.acquired) {
20
- throw new Error('Cannot release an unacquired lock');
20
+ throw new Error("Cannot release an unacquired lock");
21
21
  }
22
22
  if (this.resolvers.length) {
23
23
  this.resolvers.shift()?.();
@@ -1 +1 @@
1
- {"version":3,"file":"advisory_locks.cjs","sources":["../../src/core/advisory_locks.ts"],"sourcesContent":["class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n /**\n * Releases the lock. Returns true if the lock becomes fully idle (no waiters, not acquired).\n */\n release(): boolean {\n if (!this.acquired) {\n throw new Error('Cannot release an unacquired lock');\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n return false;\n } else {\n this.acquired = false;\n return true;\n }\n }\n}\n\nconst m = new Map<string, AwaitLock>();\n\n/**\n * Acquire a process-local async lock for the given id and return a release function.\n * Ensures only one concurrent operation per id within this process.\n */\nexport async function advisoryLock(id: string) {\n if (!m.has(id)) {\n m.set(id, new AwaitLock());\n }\n\n const lock = m.get(id)!;\n await lock.acquireAsync();\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const nowIdle = lock.release();\n if (nowIdle) m.delete(id);\n };\n}\n\n/**\n * Run the callback under the lock for the given id; releases automatically.\n */\nexport async function advisoryLockCallback<T>(id: string, cb: () => Promise<T>): Promise<T> {\n const release = await advisoryLock(id);\n try {\n return await cb();\n } finally {\n release();\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,SAAS,CAAA;IACL,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAmB,EAAE;IAEtC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI;AAC1B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,OAAO,IAAI;QACb;IACF;AACD;AAED,MAAM,CAAC,GAAG,IAAI,GAAG,EAAqB;AAEtC;;;AAGG;AACI,eAAe,YAAY,CAAC,EAAU,EAAA;IAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACd,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;IAC5B;IAEA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE;AACvB,IAAA,MAAM,IAAI,CAAC,YAAY,EAAE;IAEzB,IAAI,QAAQ,GAAG,KAAK;AACpB,IAAA,OAAO,MAAK;AACV,QAAA,IAAI,QAAQ;YAAE;QACd,QAAQ,GAAG,IAAI;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,IAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"advisory_locks.cjs","sources":["../../src/core/advisory_locks.ts"],"sourcesContent":["class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n /**\n * Releases the lock. Returns true if the lock becomes fully idle (no waiters, not acquired).\n */\n release(): boolean {\n if (!this.acquired) {\n throw new Error(\"Cannot release an unacquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n return false;\n } else {\n this.acquired = false;\n return true;\n }\n }\n}\n\nconst m = new Map<string, AwaitLock>();\n\n/**\n * Acquire a process-local async lock for the given id and return a release function.\n * Ensures only one concurrent operation per id within this process.\n */\nexport async function advisoryLock(id: string) {\n if (!m.has(id)) {\n m.set(id, new AwaitLock());\n }\n\n const lock = m.get(id)!;\n await lock.acquireAsync();\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const nowIdle = lock.release();\n if (nowIdle) m.delete(id);\n };\n}\n\n/**\n * Run the callback under the lock for the given id; releases automatically.\n */\nexport async function advisoryLockCallback<T>(id: string, cb: () => Promise<T>): Promise<T> {\n const release = await advisoryLock(id);\n try {\n return await cb();\n } finally {\n release();\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,SAAS,CAAA;IACL,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAmB,EAAE;IAEtC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI;AAC1B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,OAAO,IAAI;QACb;IACF;AACD;AAED,MAAM,CAAC,GAAG,IAAI,GAAG,EAAqB;AAEtC;;;AAGG;AACI,eAAe,YAAY,CAAC,EAAU,EAAA;IAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACd,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;IAC5B;IAEA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE;AACvB,IAAA,MAAM,IAAI,CAAC,YAAY,EAAE;IAEzB,IAAI,QAAQ,GAAG,KAAK;AACpB,IAAA,OAAO,MAAK;AACV,QAAA,IAAI,QAAQ;YAAE;QACd,QAAQ,GAAG,IAAI;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,IAAA,CAAC;AACH;;;;"}
@@ -15,7 +15,7 @@ class AwaitLock {
15
15
  */
16
16
  release() {
17
17
  if (!this.acquired) {
18
- throw new Error('Cannot release an unacquired lock');
18
+ throw new Error("Cannot release an unacquired lock");
19
19
  }
20
20
  if (this.resolvers.length) {
21
21
  this.resolvers.shift()?.();
@@ -1 +1 @@
1
- {"version":3,"file":"advisory_locks.js","sources":["../../src/core/advisory_locks.ts"],"sourcesContent":["class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n /**\n * Releases the lock. Returns true if the lock becomes fully idle (no waiters, not acquired).\n */\n release(): boolean {\n if (!this.acquired) {\n throw new Error('Cannot release an unacquired lock');\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n return false;\n } else {\n this.acquired = false;\n return true;\n }\n }\n}\n\nconst m = new Map<string, AwaitLock>();\n\n/**\n * Acquire a process-local async lock for the given id and return a release function.\n * Ensures only one concurrent operation per id within this process.\n */\nexport async function advisoryLock(id: string) {\n if (!m.has(id)) {\n m.set(id, new AwaitLock());\n }\n\n const lock = m.get(id)!;\n await lock.acquireAsync();\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const nowIdle = lock.release();\n if (nowIdle) m.delete(id);\n };\n}\n\n/**\n * Run the callback under the lock for the given id; releases automatically.\n */\nexport async function advisoryLockCallback<T>(id: string, cb: () => Promise<T>): Promise<T> {\n const release = await advisoryLock(id);\n try {\n return await cb();\n } finally {\n release();\n }\n}\n"],"names":[],"mappings":"AAAA,MAAM,SAAS,CAAA;IACL,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAmB,EAAE;IAEtC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI;AAC1B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,OAAO,IAAI;QACb;IACF;AACD;AAED,MAAM,CAAC,GAAG,IAAI,GAAG,EAAqB;AAEtC;;;AAGG;AACI,eAAe,YAAY,CAAC,EAAU,EAAA;IAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACd,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;IAC5B;IAEA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE;AACvB,IAAA,MAAM,IAAI,CAAC,YAAY,EAAE;IAEzB,IAAI,QAAQ,GAAG,KAAK;AACpB,IAAA,OAAO,MAAK;AACV,QAAA,IAAI,QAAQ;YAAE;QACd,QAAQ,GAAG,IAAI;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,IAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"advisory_locks.js","sources":["../../src/core/advisory_locks.ts"],"sourcesContent":["class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n /**\n * Releases the lock. Returns true if the lock becomes fully idle (no waiters, not acquired).\n */\n release(): boolean {\n if (!this.acquired) {\n throw new Error(\"Cannot release an unacquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n return false;\n } else {\n this.acquired = false;\n return true;\n }\n }\n}\n\nconst m = new Map<string, AwaitLock>();\n\n/**\n * Acquire a process-local async lock for the given id and return a release function.\n * Ensures only one concurrent operation per id within this process.\n */\nexport async function advisoryLock(id: string) {\n if (!m.has(id)) {\n m.set(id, new AwaitLock());\n }\n\n const lock = m.get(id)!;\n await lock.acquireAsync();\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const nowIdle = lock.release();\n if (nowIdle) m.delete(id);\n };\n}\n\n/**\n * Run the callback under the lock for the given id; releases automatically.\n */\nexport async function advisoryLockCallback<T>(id: string, cb: () => Promise<T>): Promise<T> {\n const release = await advisoryLock(id);\n try {\n return await cb();\n } finally {\n release();\n }\n}\n"],"names":[],"mappings":"AAAA,MAAM,SAAS,CAAA;IACL,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAmB,EAAE;IAEtC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI;AAC1B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,OAAO,IAAI;QACb;IACF;AACD;AAED,MAAM,CAAC,GAAG,IAAI,GAAG,EAAqB;AAEtC;;;AAGG;AACI,eAAe,YAAY,CAAC,EAAU,EAAA;IAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACd,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;IAC5B;IAEA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE;AACvB,IAAA,MAAM,IAAI,CAAC,YAAY,EAAE;IAEzB,IAAI,QAAQ,GAAG,KAAK;AACpB,IAAA,OAAO,MAAK;AACV,QAAA,IAAI,QAAQ;YAAE;QACd,QAAQ,GAAG,IAAI;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.cjs","sources":["../../src/core/auth.ts"],"sourcesContent":["import type { AuthInformation } from './config';\nimport { parsePlJwt } from '../util/pl';\n\n/** Returns a timestamp when current authorization information should be refreshed.\n * Compare the value with Date.now(). */\nexport function inferAuthRefreshTime(\n info: AuthInformation,\n maxRefreshSeconds: number,\n): number | undefined {\n if (info.jwtToken === undefined) return undefined;\n\n const { exp, iat } = parsePlJwt(info.jwtToken);\n\n return (\n Math.min(\n // in the middle between issue and expiration time points\n (iat + exp) / 2,\n iat + maxRefreshSeconds,\n ) * 1000\n );\n}\n\nexport function expirationFromAuthInformation(authInfo: AuthInformation): number | undefined {\n if (authInfo.jwtToken === undefined) return undefined;\n const parsed = parsePlJwt(authInfo.jwtToken);\n return parsed.exp * 1000;\n}\n"],"names":["parsePlJwt"],"mappings":";;;;AAGA;AACwC;AAClC,SAAU,oBAAoB,CAClC,IAAqB,EACrB,iBAAyB,EAAA;AAEzB,IAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAEjD,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAGA,aAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE9C,QACE,IAAI,CAAC,GAAG;;AAEN,IAAA,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EACf,GAAG,GAAG,iBAAiB,CACxB,GAAG,IAAI;AAEZ;AAEM,SAAU,6BAA6B,CAAC,QAAyB,EAAA;AACrE,IAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IACrD,MAAM,MAAM,GAAGA,aAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5C,IAAA,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI;AAC1B;;;;;"}
1
+ {"version":3,"file":"auth.cjs","sources":["../../src/core/auth.ts"],"sourcesContent":["import type { AuthInformation } from \"./config\";\nimport { parsePlJwt } from \"../util/pl\";\n\n/** Returns a timestamp when current authorization information should be refreshed.\n * Compare the value with Date.now(). */\nexport function inferAuthRefreshTime(\n info: AuthInformation,\n maxRefreshSeconds: number,\n): number | undefined {\n if (info.jwtToken === undefined) return undefined;\n\n const { exp, iat } = parsePlJwt(info.jwtToken);\n\n return (\n Math.min(\n // in the middle between issue and expiration time points\n (iat + exp) / 2,\n iat + maxRefreshSeconds,\n ) * 1000\n );\n}\n\nexport function expirationFromAuthInformation(authInfo: AuthInformation): number | undefined {\n if (authInfo.jwtToken === undefined) return undefined;\n const parsed = parsePlJwt(authInfo.jwtToken);\n return parsed.exp * 1000;\n}\n"],"names":["parsePlJwt"],"mappings":";;;;AAGA;AACwC;AAClC,SAAU,oBAAoB,CAClC,IAAqB,EACrB,iBAAyB,EAAA;AAEzB,IAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAEjD,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAGA,aAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE9C,QACE,IAAI,CAAC,GAAG;;AAEN,IAAA,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EACf,GAAG,GAAG,iBAAiB,CACxB,GAAG,IAAI;AAEZ;AAEM,SAAU,6BAA6B,CAAC,QAAyB,EAAA;AACrE,IAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IACrD,MAAM,MAAM,GAAGA,aAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5C,IAAA,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI;AAC1B;;;;;"}
@@ -1,4 +1,4 @@
1
- import type { AuthInformation } from './config';
1
+ import type { AuthInformation } from "./config";
2
2
  /** Returns a timestamp when current authorization information should be refreshed.
3
3
  * Compare the value with Date.now(). */
4
4
  export declare function inferAuthRefreshTime(info: AuthInformation, maxRefreshSeconds: number): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../src/core/auth.ts"],"sourcesContent":["import type { AuthInformation } from './config';\nimport { parsePlJwt } from '../util/pl';\n\n/** Returns a timestamp when current authorization information should be refreshed.\n * Compare the value with Date.now(). */\nexport function inferAuthRefreshTime(\n info: AuthInformation,\n maxRefreshSeconds: number,\n): number | undefined {\n if (info.jwtToken === undefined) return undefined;\n\n const { exp, iat } = parsePlJwt(info.jwtToken);\n\n return (\n Math.min(\n // in the middle between issue and expiration time points\n (iat + exp) / 2,\n iat + maxRefreshSeconds,\n ) * 1000\n );\n}\n\nexport function expirationFromAuthInformation(authInfo: AuthInformation): number | undefined {\n if (authInfo.jwtToken === undefined) return undefined;\n const parsed = parsePlJwt(authInfo.jwtToken);\n return parsed.exp * 1000;\n}\n"],"names":[],"mappings":";;AAGA;AACwC;AAClC,SAAU,oBAAoB,CAClC,IAAqB,EACrB,iBAAyB,EAAA;AAEzB,IAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAEjD,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE9C,QACE,IAAI,CAAC,GAAG;;AAEN,IAAA,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EACf,GAAG,GAAG,iBAAiB,CACxB,GAAG,IAAI;AAEZ;AAEM,SAAU,6BAA6B,CAAC,QAAyB,EAAA;AACrE,IAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5C,IAAA,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI;AAC1B;;;;"}
1
+ {"version":3,"file":"auth.js","sources":["../../src/core/auth.ts"],"sourcesContent":["import type { AuthInformation } from \"./config\";\nimport { parsePlJwt } from \"../util/pl\";\n\n/** Returns a timestamp when current authorization information should be refreshed.\n * Compare the value with Date.now(). */\nexport function inferAuthRefreshTime(\n info: AuthInformation,\n maxRefreshSeconds: number,\n): number | undefined {\n if (info.jwtToken === undefined) return undefined;\n\n const { exp, iat } = parsePlJwt(info.jwtToken);\n\n return (\n Math.min(\n // in the middle between issue and expiration time points\n (iat + exp) / 2,\n iat + maxRefreshSeconds,\n ) * 1000\n );\n}\n\nexport function expirationFromAuthInformation(authInfo: AuthInformation): number | undefined {\n if (authInfo.jwtToken === undefined) return undefined;\n const parsed = parsePlJwt(authInfo.jwtToken);\n return parsed.exp * 1000;\n}\n"],"names":[],"mappings":";;AAGA;AACwC;AAClC,SAAU,oBAAoB,CAClC,IAAqB,EACrB,iBAAyB,EAAA;AAEzB,IAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAEjD,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE9C,QACE,IAAI,CAAC,GAAG;;AAEN,IAAA,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EACf,GAAG,GAAG,iBAAiB,CACxB,GAAG,IAAI;AAEZ;AAEM,SAAU,6BAA6B,CAAC,QAAyB,EAAA;AACrE,IAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5C,IAAA,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI;AAC1B;;;;"}
@@ -1,4 +1,4 @@
1
- import type { BasicResourceData, ResourceData } from './types';
1
+ import type { BasicResourceData, ResourceData } from "./types";
2
2
  export type ResourceDataCacheRecord = {
3
3
  /** There is a slight chance of inconsistent data retrieval from tx if we allow later transactions to leak resource data into earlier transactions.
4
4
  * This field allows to prevent this. */
@@ -36,7 +36,7 @@ var tp__namespace = /*#__PURE__*/_interopNamespaceDefault(tp);
36
36
  const defaultTxOps = {
37
37
  sync: false,
38
38
  };
39
- const AnonymousClientRoot = 'AnonymousRoot';
39
+ const AnonymousClientRoot = "AnonymousRoot";
40
40
  function alternativeRootFieldName(alternativeRoot) {
41
41
  return `alternative_root_${alternativeRoot}`;
42
42
  }
@@ -54,7 +54,7 @@ class PlClient {
54
54
  _ll;
55
55
  get ll() {
56
56
  if (this._ll === undefined) {
57
- throw new Error('LLPlClient not initialized');
57
+ throw new Error("LLPlClient not initialized");
58
58
  }
59
59
  return this._ll;
60
60
  }
@@ -72,7 +72,7 @@ class PlClient {
72
72
  /** Resource data cache, to minimize redundant data rereading from remote db */
73
73
  resourceDataCache;
74
74
  constructor(configOrAddress, auth, ops = {}) {
75
- const conf = typeof configOrAddress === 'string' ? config.plAddressToConfig(configOrAddress) : configOrAddress;
75
+ const conf = typeof configOrAddress === "string" ? config.plAddressToConfig(configOrAddress) : configOrAddress;
76
76
  this.buildLLPlClient = async (shouldUseGzip, wireProtocol) => {
77
77
  if (wireProtocol)
78
78
  conf.wireProtocol = wireProtocol;
@@ -86,18 +86,18 @@ class PlClient {
86
86
  sizeCalculation: (v) => (v.basicData.data?.length ?? 0) + 64,
87
87
  });
88
88
  switch (conf.retryBackoffAlgorithm) {
89
- case 'exponential':
89
+ case "exponential":
90
90
  this.defaultRetryOptions = {
91
- type: 'exponentialBackoff',
91
+ type: "exponentialBackoff",
92
92
  initialDelay: conf.retryInitialDelay,
93
93
  maxAttempts: conf.retryMaxAttempts,
94
94
  backoffMultiplier: conf.retryExponentialBackoffMultiplier,
95
95
  jitter: conf.retryJitter,
96
96
  };
97
97
  break;
98
- case 'linear':
98
+ case "linear":
99
99
  this.defaultRetryOptions = {
100
- type: 'linearBackoff',
100
+ type: "linearBackoff",
101
101
  initialDelay: conf.retryInitialDelay,
102
102
  maxAttempts: conf.retryMaxAttempts,
103
103
  backoffStep: conf.retryLinearBackoffStep,
@@ -147,7 +147,7 @@ class PlClient {
147
147
  }
148
148
  checkInitialized() {
149
149
  if (!this.initialized)
150
- throw new Error('Client not initialized');
150
+ throw new Error("Client not initialized");
151
151
  }
152
152
  get clientRoot() {
153
153
  this.checkInitialized();
@@ -160,7 +160,7 @@ class PlClient {
160
160
  /** Currently implements custom logic to emulate future behaviour with single root. */
161
161
  async init() {
162
162
  if (this.initialized)
163
- throw new Error('Already initialized');
163
+ throw new Error("Already initialized");
164
164
  // Initial client is created without gzip to perform server ping and detect optimal wire protocol.
165
165
  // LLPlClient.build() internally calls detectOptimalWireProtocol() which starts with default 'grpc',
166
166
  // then retries with 'rest' if ping fails, alternating until a working protocol is found.
@@ -171,13 +171,13 @@ class PlClient {
171
171
  const wireProtocol = this._ll.wireProtocol;
172
172
  // calculating reproducible root name from the username
173
173
  const user = this._ll.authUser;
174
- const mainRootName = user === null ? AnonymousClientRoot : node_crypto.createHash('sha256').update(user).digest('hex');
174
+ const mainRootName = user === null ? AnonymousClientRoot : node_crypto.createHash("sha256").update(user).digest("hex");
175
175
  this._serverInfo = await this.ping();
176
176
  if (this._serverInfo.compression === api.MaintenanceAPI_Ping_Response_Compression.GZIP) {
177
177
  await this._ll.close();
178
178
  this._ll = await this.buildLLPlClient(true, wireProtocol);
179
179
  }
180
- this._clientRoot = await this._withTx('initialization', true, types.NullResourceId, async (tx) => {
180
+ this._clientRoot = await this._withTx("initialization", true, types.NullResourceId, async (tx) => {
181
181
  let mainRoot;
182
182
  if (await tx.checkResourceNameExists(mainRootName))
183
183
  mainRoot = await tx.getResourceByName(mainRootName);
@@ -196,7 +196,7 @@ class PlClient {
196
196
  };
197
197
  const altRoot = tx.createEphemeral(pl.ClientRoot);
198
198
  tx.lock(altRoot);
199
- tx.createField(aFId, 'Dynamic');
199
+ tx.createField(aFId, "Dynamic");
200
200
  tx.setField(aFId, altRoot);
201
201
  await tx.commit();
202
202
  return await altRoot.globalId;
@@ -207,8 +207,8 @@ class PlClient {
207
207
  async deleteAlternativeRoot(alternativeRootName) {
208
208
  this.checkInitialized();
209
209
  if (this.ll.conf.alternativeRoot !== undefined)
210
- throw new Error('Initialized with alternative root.');
211
- return await this.withWriteTx('delete-alternative-root', async (tx) => {
210
+ throw new Error("Initialized with alternative root.");
211
+ return await this.withWriteTx("delete-alternative-root", async (tx) => {
212
212
  const fId = {
213
213
  resourceId: tx.clientRoot,
214
214
  fieldName: alternativeRootFieldName(alternativeRootName),
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":["../../src/core/client.ts"],"sourcesContent":["import type { AuthOps, PlClientConfig, PlConnectionStatusListener, wireProtocol } from './config';\nimport type { PlCallOps } from './ll_client';\nimport { LLPlClient } from './ll_client';\nimport type { AnyResourceRef } from './transaction';\nimport { PlTransaction, toGlobalResourceId, TxCommitConflict } from './transaction';\nimport { createHash } from 'node:crypto';\nimport type { OptionalResourceId, ResourceId } from './types';\nimport { ensureResourceIdNotNull, isNullResourceId, NullResourceId } from './types';\nimport { ClientRoot } from '../helpers/pl';\nimport type { MiLogger, RetryOptions } from '@milaboratories/ts-helpers';\nimport { assertNever, createRetryState, nextRetryStateOrError } from '@milaboratories/ts-helpers';\nimport type { PlDriver, PlDriverDefinition } from './driver';\nimport type { MaintenanceAPI_Ping_Response, MaintenanceAPI_License_Response } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';\nimport { MaintenanceAPI_Ping_Response_Compression } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';\nimport * as tp from 'node:timers/promises';\nimport type { Dispatcher } from 'undici';\nimport { LRUCache } from 'lru-cache';\nimport type { ResourceDataCacheRecord } from './cache';\nimport type { FinalResourceDataPredicate } from './final';\nimport { DefaultFinalResourceDataPredicate } from './final';\nimport type { AllTxStat, TxStat } from './stat';\nimport { addStat, initialTxStat } from './stat';\nimport type { WireConnection } from './wire';\nimport { advisoryLock } from './advisory_locks';\nimport { plAddressToConfig } from './config';\n\nexport type TxOps = PlCallOps & {\n sync?: boolean;\n retryOptions?: RetryOptions;\n name?: string;\n lockId?: string;\n};\n\nconst defaultTxOps = {\n sync: false,\n};\n\nconst AnonymousClientRoot = 'AnonymousRoot';\n\nfunction alternativeRootFieldName(alternativeRoot: string): string {\n return `alternative_root_${alternativeRoot}`;\n}\n\n/** Client to access core PL API. */\nexport class PlClient {\n private readonly drivers = new Map<string, PlDriver>();\n\n /** Artificial delay introduced after write transactions completion, to\n * somewhat throttle the load on pl. Delay introduced after sync, if requested. */\n private readonly txDelay: number;\n\n /** Last resort measure to solve complicated race conditions in pl. */\n private readonly forceSync: boolean;\n\n /** Last resort measure to solve complicated race conditions in pl. */\n private readonly defaultRetryOptions: RetryOptions;\n\n private readonly buildLLPlClient: (shouldUseGzip: boolean, wireProtocol?: wireProtocol) => Promise<LLPlClient>;\n private _ll?: LLPlClient;\n\n private get ll(): LLPlClient {\n if (this._ll === undefined) {\n throw new Error('LLPlClient not initialized');\n }\n return this._ll;\n }\n\n /** Stores client root (this abstraction is intended for future implementation of the security model) */\n private _clientRoot: OptionalResourceId = NullResourceId;\n\n private _serverInfo: MaintenanceAPI_Ping_Response | undefined = undefined;\n\n private _txCommittedStat: TxStat = initialTxStat();\n private _txConflictStat: TxStat = initialTxStat();\n private _txErrorStat: TxStat = initialTxStat();\n\n //\n // Caching\n //\n\n /** This function determines whether resource data can be cached */\n public readonly finalPredicate: FinalResourceDataPredicate;\n\n /** Resource data cache, to minimize redundant data rereading from remote db */\n private readonly resourceDataCache: LRUCache<ResourceId, ResourceDataCacheRecord>;\n\n private constructor(\n configOrAddress: PlClientConfig | string,\n auth: AuthOps,\n ops: {\n statusListener?: PlConnectionStatusListener;\n finalPredicate?: FinalResourceDataPredicate;\n logger?: MiLogger;\n } = {},\n ) {\n const conf = typeof configOrAddress === 'string' ? plAddressToConfig(configOrAddress) : configOrAddress;\n\n this.buildLLPlClient = async (shouldUseGzip: boolean, wireProtocol?: wireProtocol): Promise<LLPlClient> => {\n if (wireProtocol) conf.wireProtocol = wireProtocol;\n return await LLPlClient.build(conf, { auth, ...ops, shouldUseGzip });\n };\n\n this.txDelay = conf.txDelay;\n this.forceSync = conf.forceSync;\n this.finalPredicate = ops.finalPredicate ?? DefaultFinalResourceDataPredicate;\n this.resourceDataCache = new LRUCache({\n maxSize: conf.maxCacheBytes,\n sizeCalculation: (v) => (v.basicData.data?.length ?? 0) + 64,\n });\n switch (conf.retryBackoffAlgorithm) {\n case 'exponential':\n this.defaultRetryOptions = {\n type: 'exponentialBackoff',\n initialDelay: conf.retryInitialDelay,\n maxAttempts: conf.retryMaxAttempts,\n backoffMultiplier: conf.retryExponentialBackoffMultiplier,\n jitter: conf.retryJitter,\n };\n break;\n case 'linear':\n this.defaultRetryOptions = {\n type: 'linearBackoff',\n initialDelay: conf.retryInitialDelay,\n maxAttempts: conf.retryMaxAttempts,\n backoffStep: conf.retryLinearBackoffStep,\n jitter: conf.retryJitter,\n };\n break;\n default:\n assertNever(conf.retryBackoffAlgorithm);\n }\n }\n\n public get txCommittedStat(): TxStat {\n return { ...this._txCommittedStat };\n }\n\n public get txConflictStat(): TxStat {\n return { ...this._txConflictStat };\n }\n\n public get txErrorStat(): TxStat {\n return { ...this._txErrorStat };\n }\n\n public get txTotalStat(): TxStat {\n return addStat(addStat(this._txCommittedStat, this._txConflictStat), this._txErrorStat);\n }\n\n public get allTxStat(): AllTxStat {\n return {\n committed: this.txCommittedStat,\n conflict: this.txConflictStat,\n error: this.txErrorStat,\n };\n }\n\n public async ping(): Promise<MaintenanceAPI_Ping_Response> {\n return await this.ll.ping();\n }\n\n public async license(): Promise<MaintenanceAPI_License_Response> {\n return await this.ll.license();\n }\n\n public get conf(): PlClientConfig {\n return this.ll.conf;\n }\n\n public get httpDispatcher(): Dispatcher {\n return this.ll.httpDispatcher;\n }\n\n public get connectionOpts(): WireConnection {\n return this.ll.wireConnection;\n }\n\n private get initialized() {\n return !isNullResourceId(this._clientRoot);\n }\n\n private checkInitialized() {\n if (!this.initialized) throw new Error('Client not initialized');\n }\n\n public get clientRoot(): ResourceId {\n this.checkInitialized();\n return ensureResourceIdNotNull(this._clientRoot);\n }\n\n public get serverInfo(): MaintenanceAPI_Ping_Response {\n this.checkInitialized();\n return this._serverInfo!;\n }\n\n /** Currently implements custom logic to emulate future behaviour with single root. */\n private async init() {\n if (this.initialized) throw new Error('Already initialized');\n\n // Initial client is created without gzip to perform server ping and detect optimal wire protocol.\n // LLPlClient.build() internally calls detectOptimalWireProtocol() which starts with default 'grpc',\n // then retries with 'rest' if ping fails, alternating until a working protocol is found.\n // We save the detected wireProtocol here because if the server supports gzip compression,\n // we'll need to reinitialize the client with gzip enabled - passing the already-detected\n // wireProtocol avoids redundant protocol detection on reinit.\n this._ll = await this.buildLLPlClient(false);\n const wireProtocol = this._ll.wireProtocol;\n\n // calculating reproducible root name from the username\n const user = this._ll.authUser;\n const mainRootName\n = user === null ? AnonymousClientRoot : createHash('sha256').update(user).digest('hex');\n\n this._serverInfo = await this.ping();\n if (this._serverInfo.compression === MaintenanceAPI_Ping_Response_Compression.GZIP) {\n await this._ll.close();\n this._ll = await this.buildLLPlClient(true, wireProtocol);\n }\n\n this._clientRoot = await this._withTx('initialization', true, NullResourceId, async (tx) => {\n let mainRoot: AnyResourceRef;\n\n if (await tx.checkResourceNameExists(mainRootName))\n mainRoot = await tx.getResourceByName(mainRootName);\n else {\n mainRoot = tx.createRoot(ClientRoot);\n tx.setResourceName(mainRootName, mainRoot);\n }\n\n if (this.conf.alternativeRoot === undefined) {\n await tx.commit();\n return await toGlobalResourceId(mainRoot);\n } else {\n const aFId = {\n resourceId: mainRoot,\n fieldName: alternativeRootFieldName(this.conf.alternativeRoot),\n };\n\n const altRoot = tx.createEphemeral(ClientRoot);\n tx.lock(altRoot);\n tx.createField(aFId, 'Dynamic');\n tx.setField(aFId, altRoot);\n await tx.commit();\n\n return await altRoot.globalId;\n }\n });\n }\n\n /** Returns true if field existed */\n public async deleteAlternativeRoot(alternativeRootName: string): Promise<boolean> {\n this.checkInitialized();\n if (this.ll.conf.alternativeRoot !== undefined)\n throw new Error('Initialized with alternative root.');\n return await this.withWriteTx('delete-alternative-root', async (tx) => {\n const fId = {\n resourceId: tx.clientRoot,\n fieldName: alternativeRootFieldName(alternativeRootName),\n };\n const exists = tx.fieldExists(fId);\n tx.removeField(fId);\n await tx.commit();\n return await exists;\n });\n }\n\n private async _withTx<T>(\n name: string,\n writable: boolean,\n clientRoot: OptionalResourceId,\n body: (tx: PlTransaction) => Promise<T>,\n ops?: TxOps,\n ): Promise<T> {\n // for exponential / linear backoff\n let retryState = createRetryState(ops?.retryOptions ?? this.defaultRetryOptions);\n\n while (true) {\n const release = ops?.lockId ? await advisoryLock(ops.lockId) : () => {};\n\n try {\n // opening low-level tx\n const llTx = this.ll.createTx(writable, ops);\n // wrapping it into high-level tx (this also asynchronously sends initialization message)\n const tx = new PlTransaction(\n llTx,\n name,\n writable,\n clientRoot,\n this.finalPredicate,\n this.resourceDataCache,\n );\n\n let ok = false;\n let result: T | undefined = undefined;\n let txId;\n\n try {\n // executing transaction body\n result = await body(tx);\n // collecting stat\n this._txCommittedStat = addStat(this._txCommittedStat, tx.stat);\n ok = true;\n } catch (e: unknown) {\n // the only recoverable\n if (e instanceof TxCommitConflict) {\n // ignoring\n // collecting stat\n this._txConflictStat = addStat(this._txConflictStat, tx.stat);\n } else {\n // collecting stat\n this._txErrorStat = addStat(this._txErrorStat, tx.stat);\n throw e;\n }\n } finally {\n // close underlying grpc stream, if not yet done\n\n // even though we can skip two lines below for read-only transactions,\n // we don't do it to simplify reasoning about what is going on in\n // concurrent code, especially in significant latency situations\n await tx.complete();\n await tx.await();\n\n txId = await tx.getGlobalTxId();\n }\n\n if (ok) {\n // syncing on transaction if requested\n if (ops?.sync === undefined ? this.forceSync : ops?.sync)\n await this.ll.txSync(txId);\n\n // introducing artificial delay, if requested\n if (writable && this.txDelay > 0)\n await tp.setTimeout(this.txDelay, undefined, { signal: ops?.abortSignal });\n\n return result!;\n }\n } finally {\n release();\n }\n\n // we only get here after TxCommitConflict error,\n // all other errors terminate this loop instantly\n\n await tp.setTimeout(retryState.nextDelay, undefined, { signal: ops?.abortSignal });\n retryState = nextRetryStateOrError(retryState);\n }\n }\n\n private async withTx<T>(\n name: string,\n writable: boolean,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n this.checkInitialized();\n return await this._withTx(name, writable, this.clientRoot, body, { ...ops, ...defaultTxOps });\n }\n\n public async withWriteTx<T>(\n name: string,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n return await this.withTx(name, true, body, { ...ops, ...defaultTxOps });\n }\n\n public async withReadTx<T>(\n name: string,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n return await this.withTx(name, false, body, { ...ops, ...defaultTxOps });\n }\n\n public getDriver<Drv extends PlDriver>(definition: PlDriverDefinition<Drv>): Drv {\n const attached = this.drivers.get(definition.name);\n if (attached !== undefined) return attached as Drv;\n const driver = definition.init(this, this.ll, this.httpDispatcher);\n this.drivers.set(definition.name, driver);\n return driver;\n }\n\n /** Closes underlying transport */\n public async close() {\n await this.ll.close();\n }\n\n public static async init(\n configOrAddress: PlClientConfig | string,\n auth: AuthOps,\n ops: {\n statusListener?: PlConnectionStatusListener;\n logger?: MiLogger;\n } = {},\n ) {\n const pl = new PlClient(configOrAddress, auth, ops);\n await pl.init();\n return pl;\n }\n}\n"],"names":["NullResourceId","initialTxStat","plAddressToConfig","LLPlClient","DefaultFinalResourceDataPredicate","LRUCache","assertNever","addStat","isNullResourceId","ensureResourceIdNotNull","createHash","MaintenanceAPI_Ping_Response_Compression","ClientRoot","toGlobalResourceId","createRetryState","advisoryLock","PlTransaction","TxCommitConflict","tp","nextRetryStateOrError"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs","sources":["../../src/core/client.ts"],"sourcesContent":["import type { AuthOps, PlClientConfig, PlConnectionStatusListener, wireProtocol } from \"./config\";\nimport type { PlCallOps } from \"./ll_client\";\nimport { LLPlClient } from \"./ll_client\";\nimport type { AnyResourceRef } from \"./transaction\";\nimport { PlTransaction, toGlobalResourceId, TxCommitConflict } from \"./transaction\";\nimport { createHash } from \"node:crypto\";\nimport type { OptionalResourceId, ResourceId } from \"./types\";\nimport { ensureResourceIdNotNull, isNullResourceId, NullResourceId } from \"./types\";\nimport { ClientRoot } from \"../helpers/pl\";\nimport type { MiLogger, RetryOptions } from \"@milaboratories/ts-helpers\";\nimport { assertNever, createRetryState, nextRetryStateOrError } from \"@milaboratories/ts-helpers\";\nimport type { PlDriver, PlDriverDefinition } from \"./driver\";\nimport type {\n MaintenanceAPI_Ping_Response,\n MaintenanceAPI_License_Response,\n} from \"../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api\";\nimport { MaintenanceAPI_Ping_Response_Compression } from \"../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api\";\nimport * as tp from \"node:timers/promises\";\nimport type { Dispatcher } from \"undici\";\nimport { LRUCache } from \"lru-cache\";\nimport type { ResourceDataCacheRecord } from \"./cache\";\nimport type { FinalResourceDataPredicate } from \"./final\";\nimport { DefaultFinalResourceDataPredicate } from \"./final\";\nimport type { AllTxStat, TxStat } from \"./stat\";\nimport { addStat, initialTxStat } from \"./stat\";\nimport type { WireConnection } from \"./wire\";\nimport { advisoryLock } from \"./advisory_locks\";\nimport { plAddressToConfig } from \"./config\";\n\nexport type TxOps = PlCallOps & {\n sync?: boolean;\n retryOptions?: RetryOptions;\n name?: string;\n lockId?: string;\n};\n\nconst defaultTxOps = {\n sync: false,\n};\n\nconst AnonymousClientRoot = \"AnonymousRoot\";\n\nfunction alternativeRootFieldName(alternativeRoot: string): string {\n return `alternative_root_${alternativeRoot}`;\n}\n\n/** Client to access core PL API. */\nexport class PlClient {\n private readonly drivers = new Map<string, PlDriver>();\n\n /** Artificial delay introduced after write transactions completion, to\n * somewhat throttle the load on pl. Delay introduced after sync, if requested. */\n private readonly txDelay: number;\n\n /** Last resort measure to solve complicated race conditions in pl. */\n private readonly forceSync: boolean;\n\n /** Last resort measure to solve complicated race conditions in pl. */\n private readonly defaultRetryOptions: RetryOptions;\n\n private readonly buildLLPlClient: (\n shouldUseGzip: boolean,\n wireProtocol?: wireProtocol,\n ) => Promise<LLPlClient>;\n private _ll?: LLPlClient;\n\n private get ll(): LLPlClient {\n if (this._ll === undefined) {\n throw new Error(\"LLPlClient not initialized\");\n }\n return this._ll;\n }\n\n /** Stores client root (this abstraction is intended for future implementation of the security model) */\n private _clientRoot: OptionalResourceId = NullResourceId;\n\n private _serverInfo: MaintenanceAPI_Ping_Response | undefined = undefined;\n\n private _txCommittedStat: TxStat = initialTxStat();\n private _txConflictStat: TxStat = initialTxStat();\n private _txErrorStat: TxStat = initialTxStat();\n\n //\n // Caching\n //\n\n /** This function determines whether resource data can be cached */\n public readonly finalPredicate: FinalResourceDataPredicate;\n\n /** Resource data cache, to minimize redundant data rereading from remote db */\n private readonly resourceDataCache: LRUCache<ResourceId, ResourceDataCacheRecord>;\n\n private constructor(\n configOrAddress: PlClientConfig | string,\n auth: AuthOps,\n ops: {\n statusListener?: PlConnectionStatusListener;\n finalPredicate?: FinalResourceDataPredicate;\n logger?: MiLogger;\n } = {},\n ) {\n const conf =\n typeof configOrAddress === \"string\" ? plAddressToConfig(configOrAddress) : configOrAddress;\n\n this.buildLLPlClient = async (\n shouldUseGzip: boolean,\n wireProtocol?: wireProtocol,\n ): Promise<LLPlClient> => {\n if (wireProtocol) conf.wireProtocol = wireProtocol;\n return await LLPlClient.build(conf, { auth, ...ops, shouldUseGzip });\n };\n\n this.txDelay = conf.txDelay;\n this.forceSync = conf.forceSync;\n this.finalPredicate = ops.finalPredicate ?? DefaultFinalResourceDataPredicate;\n this.resourceDataCache = new LRUCache({\n maxSize: conf.maxCacheBytes,\n sizeCalculation: (v) => (v.basicData.data?.length ?? 0) + 64,\n });\n switch (conf.retryBackoffAlgorithm) {\n case \"exponential\":\n this.defaultRetryOptions = {\n type: \"exponentialBackoff\",\n initialDelay: conf.retryInitialDelay,\n maxAttempts: conf.retryMaxAttempts,\n backoffMultiplier: conf.retryExponentialBackoffMultiplier,\n jitter: conf.retryJitter,\n };\n break;\n case \"linear\":\n this.defaultRetryOptions = {\n type: \"linearBackoff\",\n initialDelay: conf.retryInitialDelay,\n maxAttempts: conf.retryMaxAttempts,\n backoffStep: conf.retryLinearBackoffStep,\n jitter: conf.retryJitter,\n };\n break;\n default:\n assertNever(conf.retryBackoffAlgorithm);\n }\n }\n\n public get txCommittedStat(): TxStat {\n return { ...this._txCommittedStat };\n }\n\n public get txConflictStat(): TxStat {\n return { ...this._txConflictStat };\n }\n\n public get txErrorStat(): TxStat {\n return { ...this._txErrorStat };\n }\n\n public get txTotalStat(): TxStat {\n return addStat(addStat(this._txCommittedStat, this._txConflictStat), this._txErrorStat);\n }\n\n public get allTxStat(): AllTxStat {\n return {\n committed: this.txCommittedStat,\n conflict: this.txConflictStat,\n error: this.txErrorStat,\n };\n }\n\n public async ping(): Promise<MaintenanceAPI_Ping_Response> {\n return await this.ll.ping();\n }\n\n public async license(): Promise<MaintenanceAPI_License_Response> {\n return await this.ll.license();\n }\n\n public get conf(): PlClientConfig {\n return this.ll.conf;\n }\n\n public get httpDispatcher(): Dispatcher {\n return this.ll.httpDispatcher;\n }\n\n public get connectionOpts(): WireConnection {\n return this.ll.wireConnection;\n }\n\n private get initialized() {\n return !isNullResourceId(this._clientRoot);\n }\n\n private checkInitialized() {\n if (!this.initialized) throw new Error(\"Client not initialized\");\n }\n\n public get clientRoot(): ResourceId {\n this.checkInitialized();\n return ensureResourceIdNotNull(this._clientRoot);\n }\n\n public get serverInfo(): MaintenanceAPI_Ping_Response {\n this.checkInitialized();\n return this._serverInfo!;\n }\n\n /** Currently implements custom logic to emulate future behaviour with single root. */\n private async init() {\n if (this.initialized) throw new Error(\"Already initialized\");\n\n // Initial client is created without gzip to perform server ping and detect optimal wire protocol.\n // LLPlClient.build() internally calls detectOptimalWireProtocol() which starts with default 'grpc',\n // then retries with 'rest' if ping fails, alternating until a working protocol is found.\n // We save the detected wireProtocol here because if the server supports gzip compression,\n // we'll need to reinitialize the client with gzip enabled - passing the already-detected\n // wireProtocol avoids redundant protocol detection on reinit.\n this._ll = await this.buildLLPlClient(false);\n const wireProtocol = this._ll.wireProtocol;\n\n // calculating reproducible root name from the username\n const user = this._ll.authUser;\n const mainRootName =\n user === null ? AnonymousClientRoot : createHash(\"sha256\").update(user).digest(\"hex\");\n\n this._serverInfo = await this.ping();\n if (this._serverInfo.compression === MaintenanceAPI_Ping_Response_Compression.GZIP) {\n await this._ll.close();\n this._ll = await this.buildLLPlClient(true, wireProtocol);\n }\n\n this._clientRoot = await this._withTx(\"initialization\", true, NullResourceId, async (tx) => {\n let mainRoot: AnyResourceRef;\n\n if (await tx.checkResourceNameExists(mainRootName))\n mainRoot = await tx.getResourceByName(mainRootName);\n else {\n mainRoot = tx.createRoot(ClientRoot);\n tx.setResourceName(mainRootName, mainRoot);\n }\n\n if (this.conf.alternativeRoot === undefined) {\n await tx.commit();\n return await toGlobalResourceId(mainRoot);\n } else {\n const aFId = {\n resourceId: mainRoot,\n fieldName: alternativeRootFieldName(this.conf.alternativeRoot),\n };\n\n const altRoot = tx.createEphemeral(ClientRoot);\n tx.lock(altRoot);\n tx.createField(aFId, \"Dynamic\");\n tx.setField(aFId, altRoot);\n await tx.commit();\n\n return await altRoot.globalId;\n }\n });\n }\n\n /** Returns true if field existed */\n public async deleteAlternativeRoot(alternativeRootName: string): Promise<boolean> {\n this.checkInitialized();\n if (this.ll.conf.alternativeRoot !== undefined)\n throw new Error(\"Initialized with alternative root.\");\n return await this.withWriteTx(\"delete-alternative-root\", async (tx) => {\n const fId = {\n resourceId: tx.clientRoot,\n fieldName: alternativeRootFieldName(alternativeRootName),\n };\n const exists = tx.fieldExists(fId);\n tx.removeField(fId);\n await tx.commit();\n return await exists;\n });\n }\n\n private async _withTx<T>(\n name: string,\n writable: boolean,\n clientRoot: OptionalResourceId,\n body: (tx: PlTransaction) => Promise<T>,\n ops?: TxOps,\n ): Promise<T> {\n // for exponential / linear backoff\n let retryState = createRetryState(ops?.retryOptions ?? this.defaultRetryOptions);\n\n while (true) {\n const release = ops?.lockId ? await advisoryLock(ops.lockId) : () => {};\n\n try {\n // opening low-level tx\n const llTx = this.ll.createTx(writable, ops);\n // wrapping it into high-level tx (this also asynchronously sends initialization message)\n const tx = new PlTransaction(\n llTx,\n name,\n writable,\n clientRoot,\n this.finalPredicate,\n this.resourceDataCache,\n );\n\n let ok = false;\n let result: T | undefined = undefined;\n let txId;\n\n try {\n // executing transaction body\n result = await body(tx);\n // collecting stat\n this._txCommittedStat = addStat(this._txCommittedStat, tx.stat);\n ok = true;\n } catch (e: unknown) {\n // the only recoverable\n if (e instanceof TxCommitConflict) {\n // ignoring\n // collecting stat\n this._txConflictStat = addStat(this._txConflictStat, tx.stat);\n } else {\n // collecting stat\n this._txErrorStat = addStat(this._txErrorStat, tx.stat);\n throw e;\n }\n } finally {\n // close underlying grpc stream, if not yet done\n\n // even though we can skip two lines below for read-only transactions,\n // we don't do it to simplify reasoning about what is going on in\n // concurrent code, especially in significant latency situations\n await tx.complete();\n await tx.await();\n\n txId = await tx.getGlobalTxId();\n }\n\n if (ok) {\n // syncing on transaction if requested\n if (ops?.sync === undefined ? this.forceSync : ops?.sync) await this.ll.txSync(txId);\n\n // introducing artificial delay, if requested\n if (writable && this.txDelay > 0)\n await tp.setTimeout(this.txDelay, undefined, { signal: ops?.abortSignal });\n\n return result!;\n }\n } finally {\n release();\n }\n\n // we only get here after TxCommitConflict error,\n // all other errors terminate this loop instantly\n\n await tp.setTimeout(retryState.nextDelay, undefined, { signal: ops?.abortSignal });\n retryState = nextRetryStateOrError(retryState);\n }\n }\n\n private async withTx<T>(\n name: string,\n writable: boolean,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n this.checkInitialized();\n return await this._withTx(name, writable, this.clientRoot, body, { ...ops, ...defaultTxOps });\n }\n\n public async withWriteTx<T>(\n name: string,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n return await this.withTx(name, true, body, { ...ops, ...defaultTxOps });\n }\n\n public async withReadTx<T>(\n name: string,\n body: (tx: PlTransaction) => Promise<T>,\n ops: Partial<TxOps> = {},\n ): Promise<T> {\n return await this.withTx(name, false, body, { ...ops, ...defaultTxOps });\n }\n\n public getDriver<Drv extends PlDriver>(definition: PlDriverDefinition<Drv>): Drv {\n const attached = this.drivers.get(definition.name);\n if (attached !== undefined) return attached as Drv;\n const driver = definition.init(this, this.ll, this.httpDispatcher);\n this.drivers.set(definition.name, driver);\n return driver;\n }\n\n /** Closes underlying transport */\n public async close() {\n await this.ll.close();\n }\n\n public static async init(\n configOrAddress: PlClientConfig | string,\n auth: AuthOps,\n ops: {\n statusListener?: PlConnectionStatusListener;\n logger?: MiLogger;\n } = {},\n ) {\n const pl = new PlClient(configOrAddress, auth, ops);\n await pl.init();\n return pl;\n }\n}\n"],"names":["NullResourceId","initialTxStat","plAddressToConfig","LLPlClient","DefaultFinalResourceDataPredicate","LRUCache","assertNever","addStat","isNullResourceId","ensureResourceIdNotNull","createHash","MaintenanceAPI_Ping_Response_Compression","ClientRoot","toGlobalResourceId","createRetryState","advisoryLock","PlTransaction","TxCommitConflict","tp","nextRetryStateOrError"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import type { AuthOps, PlClientConfig, PlConnectionStatusListener } from './config';
2
- import type { PlCallOps } from './ll_client';
3
- import { PlTransaction } from './transaction';
4
- import type { ResourceId } from './types';
5
- import type { MiLogger, RetryOptions } from '@milaboratories/ts-helpers';
6
- import type { PlDriver, PlDriverDefinition } from './driver';
7
- import type { MaintenanceAPI_Ping_Response, MaintenanceAPI_License_Response } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';
8
- import type { Dispatcher } from 'undici';
9
- import type { FinalResourceDataPredicate } from './final';
10
- import type { AllTxStat, TxStat } from './stat';
11
- import type { WireConnection } from './wire';
1
+ import type { AuthOps, PlClientConfig, PlConnectionStatusListener } from "./config";
2
+ import type { PlCallOps } from "./ll_client";
3
+ import { PlTransaction } from "./transaction";
4
+ import type { ResourceId } from "./types";
5
+ import type { MiLogger, RetryOptions } from "@milaboratories/ts-helpers";
6
+ import type { PlDriver, PlDriverDefinition } from "./driver";
7
+ import type { MaintenanceAPI_Ping_Response, MaintenanceAPI_License_Response } from "../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api";
8
+ import type { Dispatcher } from "undici";
9
+ import type { FinalResourceDataPredicate } from "./final";
10
+ import type { AllTxStat, TxStat } from "./stat";
11
+ import type { WireConnection } from "./wire";
12
12
  export type TxOps = PlCallOps & {
13
13
  sync?: boolean;
14
14
  retryOptions?: RetryOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}