gremlin 4.0.0-beta.2 → 4.0.0-beta.3

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 (261) hide show
  1. package/build/cjs/driver/auth.cjs +11 -4
  2. package/build/cjs/driver/auth.d.cts +1 -1
  3. package/build/cjs/driver/client.cjs +82 -38
  4. package/build/cjs/driver/client.d.cts +30 -27
  5. package/build/cjs/driver/connection.cjs +173 -60
  6. package/build/cjs/driver/connection.d.cts +69 -26
  7. package/build/cjs/driver/dispatcher.browser.cjs +57 -0
  8. package/build/cjs/driver/dispatcher.browser.d.cts +35 -0
  9. package/build/cjs/driver/dispatcher.cjs +101 -0
  10. package/build/cjs/driver/dispatcher.d.cts +48 -0
  11. package/build/cjs/driver/driver-remote-connection.cjs +27 -15
  12. package/build/cjs/driver/driver-remote-connection.d.cts +10 -4
  13. package/build/cjs/driver/http-request.cjs +64 -0
  14. package/build/cjs/driver/http-request.d.cts +28 -0
  15. package/build/cjs/driver/logger.cjs +45 -0
  16. package/build/cjs/driver/logger.d.cts +29 -0
  17. package/build/cjs/driver/remote-connection.cjs +5 -8
  18. package/build/cjs/driver/remote-connection.d.cts +6 -21
  19. package/build/cjs/driver/request-message.cjs +110 -21
  20. package/build/cjs/driver/request-message.d.cts +38 -8
  21. package/build/cjs/driver/response-error.cjs +3 -3
  22. package/build/cjs/driver/response-error.d.cts +2 -2
  23. package/build/cjs/index.cjs +21 -0
  24. package/build/cjs/index.d.cts +47 -0
  25. package/build/cjs/language/grammar/GremlinLexer.cjs +1669 -1615
  26. package/build/cjs/language/grammar/GremlinLexer.d.cts +325 -316
  27. package/build/cjs/language/grammar/GremlinListener.cjs +322 -8
  28. package/build/cjs/language/grammar/GremlinListener.d.cts +351 -10
  29. package/build/cjs/language/grammar/GremlinParser.cjs +8700 -5798
  30. package/build/cjs/language/grammar/GremlinParser.d.cts +998 -619
  31. package/build/cjs/language/translator/AnonymizedTranslateVisitor.cjs +9 -0
  32. package/build/cjs/language/translator/AnonymizedTranslateVisitor.d.cts +3 -0
  33. package/build/cjs/language/translator/DotNetTranslateVisitor.cjs +113 -4
  34. package/build/cjs/language/translator/DotNetTranslateVisitor.d.cts +13 -2
  35. package/build/cjs/language/translator/GoTranslateVisitor.cjs +82 -0
  36. package/build/cjs/language/translator/GoTranslateVisitor.d.cts +9 -0
  37. package/build/cjs/language/translator/GroovyTranslateVisitor.cjs +23 -0
  38. package/build/cjs/language/translator/GroovyTranslateVisitor.d.cts +3 -0
  39. package/build/cjs/language/translator/JavaTranslateVisitor.cjs +23 -0
  40. package/build/cjs/language/translator/JavaTranslateVisitor.d.cts +3 -0
  41. package/build/cjs/language/translator/JavascriptTranslateVisitor.cjs +11 -0
  42. package/build/cjs/language/translator/JavascriptTranslateVisitor.d.cts +3 -0
  43. package/build/cjs/language/translator/PythonTranslateVisitor.cjs +39 -3
  44. package/build/cjs/language/translator/PythonTranslateVisitor.d.cts +3 -0
  45. package/build/cjs/language/translator/TranslateVisitor.cjs +9 -0
  46. package/build/cjs/language/translator/TranslateVisitor.d.cts +3 -0
  47. package/build/cjs/process/anonymous-traversal.cjs +5 -1
  48. package/build/cjs/process/graph-traversal.cjs +139 -8
  49. package/build/cjs/process/graph-traversal.d.cts +84 -3
  50. package/build/cjs/process/gremlin-lang.cjs +119 -7
  51. package/build/cjs/process/gremlin-lang.d.cts +6 -1
  52. package/build/cjs/process/gvalue.cjs +42 -0
  53. package/build/cjs/process/gvalue.d.cts +7 -0
  54. package/build/cjs/process/transaction.cjs +125 -23
  55. package/build/cjs/process/transaction.d.cts +50 -14
  56. package/build/cjs/process/traversal.cjs +105 -48
  57. package/build/cjs/process/traversal.d.cts +36 -10
  58. package/build/cjs/structure/PDTRegistry.cjs +116 -0
  59. package/build/cjs/structure/PDTRegistry.d.cts +34 -0
  60. package/build/cjs/structure/graph.cjs +351 -8
  61. package/build/cjs/structure/graph.d.cts +122 -3
  62. package/build/cjs/structure/io/binary/GraphBinary.cjs +68 -39
  63. package/build/cjs/structure/io/binary/GraphBinary.d.cts +15 -1
  64. package/build/cjs/structure/io/binary/internals/AnySerializer.cjs +34 -17
  65. package/build/cjs/structure/io/binary/internals/AnySerializer.d.cts +12 -2
  66. package/build/cjs/structure/io/binary/internals/ArraySerializer.cjs +41 -72
  67. package/build/cjs/structure/io/binary/internals/ArraySerializer.d.cts +14 -7
  68. package/build/cjs/structure/io/binary/internals/BigIntegerSerializer.cjs +34 -54
  69. package/build/cjs/structure/io/binary/internals/BigIntegerSerializer.d.cts +12 -7
  70. package/build/cjs/structure/io/binary/internals/BinarySerializer.cjs +31 -51
  71. package/build/cjs/structure/io/binary/internals/BinarySerializer.d.cts +12 -4
  72. package/build/cjs/structure/io/binary/internals/BooleanSerializer.cjs +28 -42
  73. package/build/cjs/structure/io/binary/internals/BooleanSerializer.d.cts +12 -4
  74. package/build/cjs/structure/io/binary/internals/ByteSerializer.cjs +24 -38
  75. package/build/cjs/structure/io/binary/internals/ByteSerializer.d.cts +12 -4
  76. package/build/cjs/structure/io/binary/internals/CompositePDTSerializer.cjs +81 -0
  77. package/build/cjs/structure/io/binary/internals/CompositePDTSerializer.d.cts +10 -0
  78. package/build/cjs/structure/io/binary/internals/DateTimeSerializer.cjs +52 -69
  79. package/build/cjs/structure/io/binary/internals/DateTimeSerializer.d.cts +12 -7
  80. package/build/cjs/structure/io/binary/internals/DoubleSerializer.cjs +24 -38
  81. package/build/cjs/structure/io/binary/internals/DoubleSerializer.d.cts +12 -4
  82. package/build/cjs/structure/io/binary/internals/EdgeSerializer.cjs +69 -124
  83. package/build/cjs/structure/io/binary/internals/EdgeSerializer.d.cts +14 -12
  84. package/build/cjs/structure/io/binary/internals/EnumSerializer.cjs +47 -59
  85. package/build/cjs/structure/io/binary/internals/EnumSerializer.d.cts +19 -4
  86. package/build/cjs/structure/io/binary/internals/FloatSerializer.cjs +24 -38
  87. package/build/cjs/structure/io/binary/internals/FloatSerializer.d.cts +12 -4
  88. package/build/cjs/structure/io/binary/internals/GraphBinaryReader.cjs +111 -37
  89. package/build/cjs/structure/io/binary/internals/GraphBinaryReader.d.cts +26 -2
  90. package/build/cjs/structure/io/binary/internals/GraphBinaryWriter.cjs +6 -6
  91. package/build/cjs/structure/io/binary/internals/GraphSerializer.cjs +184 -0
  92. package/build/cjs/structure/io/binary/internals/GraphSerializer.d.cts +22 -0
  93. package/build/cjs/structure/io/binary/internals/IntSerializer.cjs +33 -38
  94. package/build/cjs/structure/io/binary/internals/IntSerializer.d.cts +19 -4
  95. package/build/cjs/structure/io/binary/internals/LongSerializer.cjs +29 -42
  96. package/build/cjs/structure/io/binary/internals/LongSerializer.d.cts +13 -4
  97. package/build/cjs/structure/io/binary/internals/MapSerializer.cjs +36 -70
  98. package/build/cjs/structure/io/binary/internals/MapSerializer.d.cts +14 -7
  99. package/build/cjs/structure/io/binary/internals/MarkerSerializer.cjs +30 -33
  100. package/build/cjs/structure/io/binary/internals/MarkerSerializer.d.cts +13 -4
  101. package/build/cjs/structure/io/binary/internals/NumberSerializationStrategy.cjs +28 -2
  102. package/build/cjs/structure/io/binary/internals/NumberSerializationStrategy.d.cts +0 -3
  103. package/build/cjs/structure/io/binary/internals/PathSerializer.cjs +30 -55
  104. package/build/cjs/structure/io/binary/internals/PathSerializer.d.cts +14 -7
  105. package/build/cjs/structure/io/binary/internals/PrimitivePDTSerializer.cjs +80 -0
  106. package/build/cjs/structure/io/binary/internals/PrimitivePDTSerializer.d.cts +10 -0
  107. package/build/cjs/structure/io/binary/internals/PropertySerializer.cjs +32 -69
  108. package/build/cjs/structure/io/binary/internals/PropertySerializer.d.cts +14 -7
  109. package/build/cjs/structure/io/binary/internals/SetSerializer.cjs +39 -73
  110. package/build/cjs/structure/io/binary/internals/SetSerializer.d.cts +14 -7
  111. package/build/cjs/structure/io/binary/internals/ShortSerializer.cjs +24 -38
  112. package/build/cjs/structure/io/binary/internals/ShortSerializer.d.cts +12 -4
  113. package/build/cjs/structure/io/binary/internals/StreamReader.cjs +184 -0
  114. package/build/cjs/structure/io/binary/internals/StreamReader.d.cts +69 -0
  115. package/build/cjs/structure/io/binary/internals/StringSerializer.cjs +34 -53
  116. package/build/cjs/structure/io/binary/internals/StringSerializer.d.cts +14 -4
  117. package/build/cjs/structure/io/binary/internals/StubSerializer.cjs +2 -1
  118. package/build/cjs/structure/io/binary/internals/StubSerializer.d.cts +1 -1
  119. package/build/cjs/structure/io/binary/internals/TreeSerializer.cjs +139 -0
  120. package/build/cjs/structure/io/binary/internals/TreeSerializer.d.cts +54 -0
  121. package/build/cjs/structure/io/binary/internals/UnspecifiedNullSerializer.cjs +8 -31
  122. package/build/cjs/structure/io/binary/internals/UnspecifiedNullSerializer.d.cts +6 -4
  123. package/build/cjs/structure/io/binary/internals/UuidSerializer.cjs +33 -49
  124. package/build/cjs/structure/io/binary/internals/UuidSerializer.d.cts +12 -7
  125. package/build/cjs/structure/io/binary/internals/VertexPropertySerializer.cjs +37 -95
  126. package/build/cjs/structure/io/binary/internals/VertexPropertySerializer.d.cts +14 -7
  127. package/build/cjs/structure/io/binary/internals/VertexSerializer.cjs +41 -68
  128. package/build/cjs/structure/io/binary/internals/VertexSerializer.d.cts +14 -9
  129. package/build/cjs/utils.cjs +157 -40
  130. package/build/cjs/utils.d.cts +62 -4
  131. package/build/esm/driver/auth.d.ts +1 -1
  132. package/build/esm/driver/auth.js +11 -4
  133. package/build/esm/driver/client.d.ts +30 -27
  134. package/build/esm/driver/client.js +82 -38
  135. package/build/esm/driver/connection.d.ts +69 -26
  136. package/build/esm/driver/connection.js +172 -60
  137. package/build/esm/driver/dispatcher.browser.d.ts +35 -0
  138. package/build/esm/driver/dispatcher.browser.js +53 -0
  139. package/build/esm/driver/dispatcher.d.ts +48 -0
  140. package/build/esm/driver/dispatcher.js +94 -0
  141. package/build/esm/driver/driver-remote-connection.d.ts +10 -4
  142. package/build/esm/driver/driver-remote-connection.js +27 -15
  143. package/build/esm/driver/http-request.d.ts +28 -0
  144. package/build/esm/driver/http-request.js +60 -0
  145. package/build/esm/driver/logger.d.ts +29 -0
  146. package/build/esm/driver/logger.js +42 -0
  147. package/build/esm/driver/remote-connection.d.ts +6 -21
  148. package/build/esm/driver/remote-connection.js +5 -8
  149. package/build/esm/driver/request-message.d.ts +38 -8
  150. package/build/esm/driver/request-message.js +107 -21
  151. package/build/esm/driver/response-error.d.ts +2 -2
  152. package/build/esm/driver/response-error.js +3 -3
  153. package/build/esm/index.d.ts +47 -0
  154. package/build/esm/index.js +21 -0
  155. package/build/esm/language/grammar/GremlinLexer.d.ts +325 -316
  156. package/build/esm/language/grammar/GremlinLexer.js +1669 -1615
  157. package/build/esm/language/grammar/GremlinListener.d.ts +351 -10
  158. package/build/esm/language/grammar/GremlinListener.js +322 -8
  159. package/build/esm/language/grammar/GremlinParser.d.ts +998 -619
  160. package/build/esm/language/grammar/GremlinParser.js +8646 -5778
  161. package/build/esm/language/translator/AnonymizedTranslateVisitor.d.ts +3 -0
  162. package/build/esm/language/translator/AnonymizedTranslateVisitor.js +9 -0
  163. package/build/esm/language/translator/DotNetTranslateVisitor.d.ts +13 -2
  164. package/build/esm/language/translator/DotNetTranslateVisitor.js +113 -4
  165. package/build/esm/language/translator/GoTranslateVisitor.d.ts +9 -0
  166. package/build/esm/language/translator/GoTranslateVisitor.js +82 -0
  167. package/build/esm/language/translator/GroovyTranslateVisitor.d.ts +3 -0
  168. package/build/esm/language/translator/GroovyTranslateVisitor.js +23 -0
  169. package/build/esm/language/translator/JavaTranslateVisitor.d.ts +3 -0
  170. package/build/esm/language/translator/JavaTranslateVisitor.js +23 -0
  171. package/build/esm/language/translator/JavascriptTranslateVisitor.d.ts +3 -0
  172. package/build/esm/language/translator/JavascriptTranslateVisitor.js +11 -0
  173. package/build/esm/language/translator/PythonTranslateVisitor.d.ts +3 -0
  174. package/build/esm/language/translator/PythonTranslateVisitor.js +39 -3
  175. package/build/esm/language/translator/TranslateVisitor.d.ts +3 -0
  176. package/build/esm/language/translator/TranslateVisitor.js +9 -0
  177. package/build/esm/process/anonymous-traversal.js +5 -1
  178. package/build/esm/process/graph-traversal.d.ts +84 -3
  179. package/build/esm/process/graph-traversal.js +139 -8
  180. package/build/esm/process/gremlin-lang.d.ts +6 -1
  181. package/build/esm/process/gremlin-lang.js +121 -9
  182. package/build/esm/process/gvalue.d.ts +7 -0
  183. package/build/esm/process/gvalue.js +38 -0
  184. package/build/esm/process/transaction.d.ts +50 -14
  185. package/build/esm/process/transaction.js +122 -23
  186. package/build/esm/process/traversal.d.ts +36 -10
  187. package/build/esm/process/traversal.js +104 -47
  188. package/build/esm/structure/PDTRegistry.d.ts +34 -0
  189. package/build/esm/structure/PDTRegistry.js +112 -0
  190. package/build/esm/structure/graph.d.ts +122 -3
  191. package/build/esm/structure/graph.js +347 -7
  192. package/build/esm/structure/io/binary/GraphBinary.d.ts +15 -1
  193. package/build/esm/structure/io/binary/GraphBinary.js +66 -38
  194. package/build/esm/structure/io/binary/internals/AnySerializer.d.ts +12 -2
  195. package/build/esm/structure/io/binary/internals/AnySerializer.js +34 -17
  196. package/build/esm/structure/io/binary/internals/ArraySerializer.d.ts +14 -7
  197. package/build/esm/structure/io/binary/internals/ArraySerializer.js +41 -72
  198. package/build/esm/structure/io/binary/internals/BigIntegerSerializer.d.ts +12 -7
  199. package/build/esm/structure/io/binary/internals/BigIntegerSerializer.js +34 -54
  200. package/build/esm/structure/io/binary/internals/BinarySerializer.d.ts +12 -4
  201. package/build/esm/structure/io/binary/internals/BinarySerializer.js +31 -51
  202. package/build/esm/structure/io/binary/internals/BooleanSerializer.d.ts +12 -4
  203. package/build/esm/structure/io/binary/internals/BooleanSerializer.js +28 -42
  204. package/build/esm/structure/io/binary/internals/ByteSerializer.d.ts +12 -4
  205. package/build/esm/structure/io/binary/internals/ByteSerializer.js +24 -38
  206. package/build/esm/structure/io/binary/internals/CompositePDTSerializer.d.ts +10 -0
  207. package/build/esm/structure/io/binary/internals/CompositePDTSerializer.js +78 -0
  208. package/build/esm/structure/io/binary/internals/DateTimeSerializer.d.ts +12 -7
  209. package/build/esm/structure/io/binary/internals/DateTimeSerializer.js +52 -69
  210. package/build/esm/structure/io/binary/internals/DoubleSerializer.d.ts +12 -4
  211. package/build/esm/structure/io/binary/internals/DoubleSerializer.js +24 -38
  212. package/build/esm/structure/io/binary/internals/EdgeSerializer.d.ts +14 -12
  213. package/build/esm/structure/io/binary/internals/EdgeSerializer.js +69 -124
  214. package/build/esm/structure/io/binary/internals/EnumSerializer.d.ts +19 -4
  215. package/build/esm/structure/io/binary/internals/EnumSerializer.js +47 -59
  216. package/build/esm/structure/io/binary/internals/FloatSerializer.d.ts +12 -4
  217. package/build/esm/structure/io/binary/internals/FloatSerializer.js +24 -38
  218. package/build/esm/structure/io/binary/internals/GraphBinaryReader.d.ts +26 -2
  219. package/build/esm/structure/io/binary/internals/GraphBinaryReader.js +108 -37
  220. package/build/esm/structure/io/binary/internals/GraphBinaryWriter.js +6 -6
  221. package/build/esm/structure/io/binary/internals/GraphSerializer.d.ts +22 -0
  222. package/build/esm/structure/io/binary/internals/GraphSerializer.js +181 -0
  223. package/build/esm/structure/io/binary/internals/IntSerializer.d.ts +19 -4
  224. package/build/esm/structure/io/binary/internals/IntSerializer.js +33 -38
  225. package/build/esm/structure/io/binary/internals/LongSerializer.d.ts +13 -4
  226. package/build/esm/structure/io/binary/internals/LongSerializer.js +29 -42
  227. package/build/esm/structure/io/binary/internals/MapSerializer.d.ts +14 -7
  228. package/build/esm/structure/io/binary/internals/MapSerializer.js +36 -70
  229. package/build/esm/structure/io/binary/internals/MarkerSerializer.d.ts +13 -4
  230. package/build/esm/structure/io/binary/internals/MarkerSerializer.js +29 -33
  231. package/build/esm/structure/io/binary/internals/NumberSerializationStrategy.d.ts +0 -3
  232. package/build/esm/structure/io/binary/internals/NumberSerializationStrategy.js +28 -2
  233. package/build/esm/structure/io/binary/internals/PathSerializer.d.ts +14 -7
  234. package/build/esm/structure/io/binary/internals/PathSerializer.js +30 -55
  235. package/build/esm/structure/io/binary/internals/PrimitivePDTSerializer.d.ts +10 -0
  236. package/build/esm/structure/io/binary/internals/PrimitivePDTSerializer.js +77 -0
  237. package/build/esm/structure/io/binary/internals/PropertySerializer.d.ts +14 -7
  238. package/build/esm/structure/io/binary/internals/PropertySerializer.js +32 -69
  239. package/build/esm/structure/io/binary/internals/SetSerializer.d.ts +14 -7
  240. package/build/esm/structure/io/binary/internals/SetSerializer.js +39 -73
  241. package/build/esm/structure/io/binary/internals/ShortSerializer.d.ts +12 -4
  242. package/build/esm/structure/io/binary/internals/ShortSerializer.js +24 -38
  243. package/build/esm/structure/io/binary/internals/StreamReader.d.ts +69 -0
  244. package/build/esm/structure/io/binary/internals/StreamReader.js +181 -0
  245. package/build/esm/structure/io/binary/internals/StringSerializer.d.ts +14 -4
  246. package/build/esm/structure/io/binary/internals/StringSerializer.js +34 -53
  247. package/build/esm/structure/io/binary/internals/StubSerializer.d.ts +1 -1
  248. package/build/esm/structure/io/binary/internals/StubSerializer.js +2 -1
  249. package/build/esm/structure/io/binary/internals/TreeSerializer.d.ts +54 -0
  250. package/build/esm/structure/io/binary/internals/TreeSerializer.js +136 -0
  251. package/build/esm/structure/io/binary/internals/UnspecifiedNullSerializer.d.ts +6 -4
  252. package/build/esm/structure/io/binary/internals/UnspecifiedNullSerializer.js +8 -31
  253. package/build/esm/structure/io/binary/internals/UuidSerializer.d.ts +12 -7
  254. package/build/esm/structure/io/binary/internals/UuidSerializer.js +33 -49
  255. package/build/esm/structure/io/binary/internals/VertexPropertySerializer.d.ts +14 -7
  256. package/build/esm/structure/io/binary/internals/VertexPropertySerializer.js +37 -95
  257. package/build/esm/structure/io/binary/internals/VertexSerializer.d.ts +14 -9
  258. package/build/esm/structure/io/binary/internals/VertexSerializer.js +41 -68
  259. package/build/esm/utils.d.ts +62 -4
  260. package/build/esm/utils.js +145 -6
  261. package/package.json +27 -18
@@ -17,53 +17,155 @@
17
17
  * specific language governing permissions and limitations
18
18
  * under the License.
19
19
  */
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
20
23
  Object.defineProperty(exports, "__esModule", { value: true });
21
24
  exports.Transaction = void 0;
25
+ const remote_connection_js_1 = require("../driver/remote-connection.cjs");
26
+ const driver_remote_connection_js_1 = __importDefault(require("../driver/driver-remote-connection.cjs"));
27
+ const gremlin_lang_js_1 = __importDefault(require("./gremlin-lang.cjs"));
28
+ const graph_traversal_js_1 = require("./graph-traversal.cjs");
29
+ const traversal_strategy_js_1 = require("./traversal-strategy.cjs");
22
30
  /**
23
- * A controller for a remote transaction that is constructed from <code>g.tx()</code>. Calling <code>begin()</code>
24
- * on this object will produce a new <code>GraphTraversalSource</code> that is bound to a remote transaction over which
25
- * multiple traversals may be executed in that context. Calling <code>commit()</code> or <code>rollback()</code> will
26
- * then close the transaction and thus, the session. This feature only works with transaction enabled graphs.
31
+ * Controls an explicit remote transaction. A thin wrapper around a Client that
32
+ * adds transaction lifecycle (begin/commit/rollback/close) and attaches a
33
+ * transactionId to every request.
34
+ *
35
+ * Created via Client.transact() or g.tx(). The traversal source (g alias) is
36
+ * inherited from the Client and cannot be changed.
37
+ *
38
+ * Transactions are short-lived and single-use. After commit or rollback, the
39
+ * transaction ID is invalid and the object cannot be reused.
40
+ *
41
+ * Each traversal on the transaction-bound source must be awaited before
42
+ * submitting the next, to ensure the server receives requests in order.
43
+ *
44
+ * This class is NOT thread-safe. Do not share a Transaction across concurrent
45
+ * async contexts without external synchronization.
27
46
  */
28
47
  class Transaction {
29
- g;
30
- _sessionBasedConnection = undefined;
31
- constructor(g) {
32
- this.g = g;
48
+ _transactionId;
49
+ _isOpen = false;
50
+ _failed = false;
51
+ _client;
52
+ /**
53
+ * Creates a Transaction. Accepts a Client which provides the connection
54
+ * and traversal source for all transaction requests.
55
+ */
56
+ constructor(client) {
57
+ if (!client) {
58
+ throw new Error('Client is required for transactions');
59
+ }
60
+ this._client = client;
33
61
  }
34
62
  /**
35
- * Spawns a <code>GraphTraversalSource</code> that is bound to a remote session which enables a transaction.
36
- * @returns {GraphTraversalSource}
63
+ * Spawns a GraphTraversalSource that is bound to a remote transaction.
64
+ *
65
+ * begin() is idempotent: calling it while a transaction is already open does not send a
66
+ * second begin to the server and does not throw - it reuses the existing transaction ID and
67
+ * returns a source bound to the same transaction. A transaction is single-use, so calling
68
+ * begin() after it has been closed (commit/rollback/failed begin) throws.
69
+ * @returns {Promise<GraphTraversalSource>}
37
70
  */
38
- begin() {
39
- throw new Error("Transactions are not yet implemented");
71
+ async begin() {
72
+ if (this._failed) {
73
+ throw new Error('Transaction is closed and cannot be reused; begin a new transaction');
74
+ }
75
+ // idempotent: if a transaction is already open, reuse the existing transactionId without
76
+ // sending a second begin to the server, and return a source bound to the same transaction
77
+ if (!this._isOpen) {
78
+ let result;
79
+ try {
80
+ result = await this._client.submit('g.tx().begin()', null);
81
+ }
82
+ catch (e) {
83
+ this._failed = true;
84
+ throw e;
85
+ }
86
+ const resultArray = result.toArray();
87
+ if (!resultArray || resultArray.length === 0) {
88
+ this._failed = true;
89
+ throw new Error('Server did not return transaction ID');
90
+ }
91
+ const resultMap = resultArray[0];
92
+ if (!resultMap || !(resultMap instanceof Map) || !resultMap.get('transactionId')) {
93
+ this._failed = true;
94
+ throw new Error('Server did not return transaction ID in expected format');
95
+ }
96
+ this._transactionId = resultMap.get('transactionId');
97
+ this._isOpen = true;
98
+ this._client.trackTransaction(this);
99
+ }
100
+ // Create a DriverRemoteConnection bound to this transaction. The DRC
101
+ // will automatically attach the transactionId to all requests.
102
+ const txConnection = new driver_remote_connection_js_1.default(this._client.url, this._client.options, this._transactionId);
103
+ const strategies = new traversal_strategy_js_1.TraversalStrategies();
104
+ strategies.addStrategy(new remote_connection_js_1.RemoteStrategy(txConnection));
105
+ const gtx = new graph_traversal_js_1.GraphTraversalSource(null, strategies, new gremlin_lang_js_1.default());
106
+ gtx._boundTransaction = this;
107
+ return gtx;
40
108
  }
41
109
  /**
42
- * @returns {Promise}
110
+ * Commits the transaction.
111
+ * @returns {Promise<void>}
43
112
  */
44
- commit() {
45
- throw new Error("Transactions are not yet implemented");
113
+ async commit() {
114
+ await this.#closeTransaction('g.tx().commit()');
46
115
  }
47
116
  /**
48
- * @returns {Promise}
117
+ * Rolls back the transaction.
118
+ * @returns {Promise<void>}
49
119
  */
50
- rollback() {
51
- throw new Error("Transactions are not yet implemented");
120
+ async rollback() {
121
+ await this.#closeTransaction('g.tx().rollback()');
52
122
  }
53
123
  /**
54
124
  * Returns true if transaction is open.
55
- * @returns {Boolean}
56
125
  */
57
126
  get isOpen() {
58
- return this._sessionBasedConnection?.isOpen ?? false;
127
+ return this._isOpen;
59
128
  }
60
129
  /**
61
- * @returns {Promise}
130
+ * Returns the server-generated transaction ID, or undefined if not yet begun.
131
+ */
132
+ get transactionId() {
133
+ return this._transactionId;
134
+ }
135
+ /**
136
+ * Closes the transaction. Default behavior is rollback: partial work is
137
+ * discarded rather than accidentally persisted.
138
+ * @returns {Promise<void>}
62
139
  */
63
140
  async close() {
64
- if (this._sessionBasedConnection) {
65
- this._sessionBasedConnection.close();
141
+ if (this._isOpen) {
142
+ await this.rollback();
143
+ }
144
+ }
145
+ /**
146
+ * Submits a gremlin-lang string within this transaction. The transactionId
147
+ * is automatically attached. Has the same signature as Client.submit().
148
+ */
149
+ async submit(gremlin, parameters, requestOptions) {
150
+ if (!this._isOpen) {
151
+ throw new Error('Transaction is not open');
152
+ }
153
+ const opts = {
154
+ ...requestOptions,
155
+ transactionId: this._transactionId,
156
+ };
157
+ return this._client.submit(gremlin, parameters || null, opts);
158
+ }
159
+ async #closeTransaction(script) {
160
+ if (!this._isOpen) {
161
+ throw new Error('Transaction is not open');
66
162
  }
163
+ await this._client.submit(script, null, {
164
+ transactionId: this._transactionId
165
+ });
166
+ this._isOpen = false;
167
+ this._failed = true; // Terminal state: transaction cannot be reused
168
+ this._client.untrackTransaction(this);
67
169
  }
68
170
  }
69
171
  exports.Transaction = Transaction;
@@ -1,34 +1,70 @@
1
+ import Client from '../driver/client.cjs';
1
2
  import { GraphTraversalSource } from './graph-traversal.cjs';
2
3
  /**
3
- * A controller for a remote transaction that is constructed from <code>g.tx()</code>. Calling <code>begin()</code>
4
- * on this object will produce a new <code>GraphTraversalSource</code> that is bound to a remote transaction over which
5
- * multiple traversals may be executed in that context. Calling <code>commit()</code> or <code>rollback()</code> will
6
- * then close the transaction and thus, the session. This feature only works with transaction enabled graphs.
4
+ * Controls an explicit remote transaction. A thin wrapper around a Client that
5
+ * adds transaction lifecycle (begin/commit/rollback/close) and attaches a
6
+ * transactionId to every request.
7
+ *
8
+ * Created via Client.transact() or g.tx(). The traversal source (g alias) is
9
+ * inherited from the Client and cannot be changed.
10
+ *
11
+ * Transactions are short-lived and single-use. After commit or rollback, the
12
+ * transaction ID is invalid and the object cannot be reused.
13
+ *
14
+ * Each traversal on the transaction-bound source must be awaited before
15
+ * submitting the next, to ensure the server receives requests in order.
16
+ *
17
+ * This class is NOT thread-safe. Do not share a Transaction across concurrent
18
+ * async contexts without external synchronization.
7
19
  */
8
20
  export declare class Transaction {
9
- private readonly g;
10
- private _sessionBasedConnection?;
11
- constructor(g: GraphTraversalSource);
21
+ #private;
22
+ private _transactionId?;
23
+ private _isOpen;
24
+ private _failed;
25
+ private readonly _client;
12
26
  /**
13
- * Spawns a <code>GraphTraversalSource</code> that is bound to a remote session which enables a transaction.
14
- * @returns {GraphTraversalSource}
27
+ * Creates a Transaction. Accepts a Client which provides the connection
28
+ * and traversal source for all transaction requests.
15
29
  */
16
- begin(): GraphTraversalSource;
30
+ constructor(client: Client);
17
31
  /**
18
- * @returns {Promise}
32
+ * Spawns a GraphTraversalSource that is bound to a remote transaction.
33
+ *
34
+ * begin() is idempotent: calling it while a transaction is already open does not send a
35
+ * second begin to the server and does not throw - it reuses the existing transaction ID and
36
+ * returns a source bound to the same transaction. A transaction is single-use, so calling
37
+ * begin() after it has been closed (commit/rollback/failed begin) throws.
38
+ * @returns {Promise<GraphTraversalSource>}
39
+ */
40
+ begin(): Promise<GraphTraversalSource>;
41
+ /**
42
+ * Commits the transaction.
43
+ * @returns {Promise<void>}
19
44
  */
20
45
  commit(): Promise<void>;
21
46
  /**
22
- * @returns {Promise}
47
+ * Rolls back the transaction.
48
+ * @returns {Promise<void>}
23
49
  */
24
50
  rollback(): Promise<void>;
25
51
  /**
26
52
  * Returns true if transaction is open.
27
- * @returns {Boolean}
28
53
  */
29
54
  get isOpen(): boolean;
30
55
  /**
31
- * @returns {Promise}
56
+ * Returns the server-generated transaction ID, or undefined if not yet begun.
57
+ */
58
+ get transactionId(): string | undefined;
59
+ /**
60
+ * Closes the transaction. Default behavior is rollback: partial work is
61
+ * discarded rather than accidentally persisted.
62
+ * @returns {Promise<void>}
32
63
  */
33
64
  close(): Promise<void>;
65
+ /**
66
+ * Submits a gremlin-lang string within this transaction. The transactionId
67
+ * is automatically attached. Has the same signature as Client.submit().
68
+ */
69
+ submit(gremlin: string, parameters?: any, requestOptions?: any): Promise<any>;
34
70
  }
@@ -21,7 +21,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
21
21
  return (mod && mod.__esModule) ? mod : { "default": mod };
22
22
  };
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.n = exports.t = exports.scope = exports.pop = exports.pick = exports.order = exports.operator = exports.merge = exports.gryoVersion = exports.graphSONVersion = exports.gType = exports.dt = exports.direction = exports.column = exports.cardinality = exports.barrier = exports.EnumValue = exports.withOptions = exports.TraversalSideEffects = exports.Traverser = exports.TextP = exports.P = exports.IO = exports.Traversal = void 0;
24
+ exports.n = exports.t = exports.scope = exports.pop = exports.pick = exports.order = exports.operator = exports.merge = exports.gryoVersion = exports.gType = exports.dt = exports.direction = exports.column = exports.cardinality = exports.barrier = exports.EnumValue = exports.withOptions = exports.TraversalSideEffects = exports.Traverser = exports.TextP = exports.P = exports.IO = exports.Traversal = void 0;
25
25
  const gremlin_lang_js_1 = __importDefault(require("./gremlin-lang.cjs"));
26
26
  const itemDone = Object.freeze({ value: null, done: true });
27
27
  const asyncIteratorSymbol = Symbol.asyncIterator || Symbol('@@asyncIterator');
@@ -29,10 +29,15 @@ class Traversal {
29
29
  graph;
30
30
  traversalStrategies;
31
31
  gremlinLang;
32
- results = null;
32
+ /** @internal Async results stream set by RemoteStrategy */
33
+ _resultsStream = null;
34
+ /** @internal Buffered traverser for bulk expansion and hasNext peek */
35
+ _currentTraverser = null;
36
+ /** Trailing response status from the server, populated after iteration completes. */
37
+ _status = null;
33
38
  sideEffects = null;
34
39
  _traversalStrategiesPromise = null;
35
- _resultsIteratorIndex = 0;
40
+ _done = false;
36
41
  constructor(graph, traversalStrategies, gremlinLang = new gremlin_lang_js_1.default()) {
37
42
  this.graph = graph;
38
43
  this.traversalStrategies = traversalStrategies;
@@ -48,75 +53,122 @@ class Traversal {
48
53
  getGremlinLang() {
49
54
  return this.gremlinLang;
50
55
  }
56
+ /**
57
+ * Gets the trailing response status from the server.
58
+ * Available after the traversal has been fully iterated (via toList(), iterate(), or manual iteration).
59
+ * Returns null if the traversal has not completed.
60
+ * @returns {{ code: number, message: string | null, exception: string | null } | null}
61
+ */
62
+ getStatus() {
63
+ return this._status;
64
+ }
51
65
  /**
52
66
  * Returns an Array containing the traverser objects.
53
67
  * @returns {Promise.<Array>}
54
68
  */
55
- toList() {
56
- return this._applyStrategies().then(() => {
57
- const result = [];
58
- let it;
59
- while ((it = this._getNext()) && !it.done) {
60
- result.push(it.value);
61
- }
62
- return result;
63
- });
69
+ async toList() {
70
+ await this._applyStrategies();
71
+ const result = [];
72
+ while (true) {
73
+ const it = await this._getNext();
74
+ if (it.done)
75
+ break;
76
+ result.push(it.value);
77
+ }
78
+ return result;
64
79
  }
65
80
  /**
66
81
  * Determines if there are any more items to iterate from the traversal.
67
82
  * @returns {Promise.<boolean>}
68
83
  */
69
- hasNext() {
70
- return this._applyStrategies().then(() => {
71
- if (!this.results || this.results.length <= 0 || this._resultsIteratorIndex >= this.results.length) {
84
+ async hasNext() {
85
+ await this._applyStrategies();
86
+ // If we have a current traverser with remaining bulk, there's more
87
+ if (this._currentTraverser && this._currentTraverser.bulk > 0) {
88
+ return true;
89
+ }
90
+ if (this._done)
91
+ return false;
92
+ // Try to pull the next item from the source to check
93
+ if (this._resultsStream) {
94
+ const { value, done } = await this._resultsStream.next();
95
+ if (done) {
96
+ this._done = true;
72
97
  return false;
73
98
  }
74
- if (this.results[this._resultsIteratorIndex] instanceof Traverser) {
75
- return this.results[this._resultsIteratorIndex].bulk > 0 || this._resultsIteratorIndex + 1 < this.results.length;
76
- }
77
- else {
78
- return true;
79
- }
80
- });
99
+ // Buffer it as a traverser for the next _getNext() call
100
+ this._currentTraverser = value instanceof Traverser ? value : new Traverser(value, 1);
101
+ return true;
102
+ }
103
+ return false;
81
104
  }
82
105
  /**
83
106
  * Iterates all Traverser instances in the traversal.
84
107
  * @returns {Promise}
85
108
  */
86
- iterate() {
109
+ async iterate() {
87
110
  this.gremlinLang.addStep('discard');
88
- return this._applyStrategies().then(() => {
89
- let it;
90
- while ((it = this._getNext()) && !it.done) {
91
- //
92
- }
93
- });
111
+ await this._applyStrategies();
112
+ while (true) {
113
+ const it = await this._getNext();
114
+ if (it.done)
115
+ break;
116
+ }
94
117
  }
95
- /**
96
- * Async iterator method implementation.
97
- * Returns a promise containing an iterator item.
98
- * @returns {Promise.<{value, done}>}
99
- */
100
- next() {
101
- return this._applyStrategies().then(() => this._getNext());
118
+ async next(amount) {
119
+ await this._applyStrategies();
120
+ if (amount === undefined || amount === null) {
121
+ return this._getNext();
122
+ }
123
+ const result = [];
124
+ for (let i = 0; i < amount; i++) {
125
+ const it = await this._getNext();
126
+ if (it.done) {
127
+ break;
128
+ }
129
+ result.push(it.value);
130
+ }
131
+ return result;
102
132
  }
103
133
  /**
104
- * Synchronous iterator of traversers including
134
+ * Pull the next value, handling Traverser bulk expansion.
105
135
  * @private
106
136
  */
107
- _getNext() {
108
- while (this.results && this._resultsIteratorIndex < this.results.length) {
109
- const next = this.results[this._resultsIteratorIndex];
110
- if (next instanceof Traverser) {
111
- if (next.bulk > 0) {
112
- next.bulk--;
113
- return { value: next.object, done: false };
137
+ async _getNext() {
138
+ // Drain current traverser's bulk first
139
+ if (this._currentTraverser) {
140
+ if (this._currentTraverser.bulk > 0) {
141
+ this._currentTraverser.bulk--;
142
+ const value = this._currentTraverser.object;
143
+ if (this._currentTraverser.bulk <= 0) {
144
+ this._currentTraverser = null;
114
145
  }
146
+ return { value, done: false };
115
147
  }
116
- this._resultsIteratorIndex++;
117
- if (!(next instanceof Traverser)) {
118
- return { value: next, done: false };
148
+ this._currentTraverser = null;
149
+ }
150
+ // Streaming source path
151
+ if (this._resultsStream) {
152
+ if (this._done)
153
+ return itemDone;
154
+ const { value, done } = await this._resultsStream.next();
155
+ if (done) {
156
+ this._done = true;
157
+ this._status = value ?? null;
158
+ return itemDone;
119
159
  }
160
+ if (value instanceof Traverser) {
161
+ if (value.bulk > 0) {
162
+ value.bulk--;
163
+ const result = value.object;
164
+ if (value.bulk > 0) {
165
+ this._currentTraverser = value;
166
+ }
167
+ return { value: result, done: false };
168
+ }
169
+ return itemDone;
170
+ }
171
+ return { value, done: false };
120
172
  }
121
173
  return itemDone;
122
174
  }
@@ -263,12 +315,18 @@ class P {
263
315
  if (args.length === 1 && Array.isArray(args[0])) {
264
316
  return new P('within', args[0], null);
265
317
  }
318
+ if (args.length === 1 && args[0] != null && typeof args[0].getGremlinLang === 'function') {
319
+ return new P('within', args[0], null);
320
+ }
266
321
  return new P('within', args, null);
267
322
  }
268
323
  static without(...args) {
269
324
  if (args.length === 1 && Array.isArray(args[0])) {
270
325
  return new P('without', args[0], null);
271
326
  }
327
+ if (args.length === 1 && args[0] != null && typeof args[0].getGremlinLang === 'function') {
328
+ return new P('without', args[0], null);
329
+ }
272
330
  return new P('without', args, null);
273
331
  }
274
332
  /** @param {...Object} args */
@@ -470,7 +528,6 @@ exports.column = toEnum('Column', 'keys values');
470
528
  exports.direction = toDirectionEnum('Direction', 'BOTH IN OUT from_ to');
471
529
  exports.dt = toEnum('DT', 'second minute hour day');
472
530
  exports.gType = toGTypeEnum('GType', 'bigDecimal bigInt binary boolean byte char datetime double duration edge float graph int list long map null number path property set short string tree uuid vertex vproperty');
473
- exports.graphSONVersion = toEnum('GraphSONVersion', 'V1_0 V2_0 V3_0');
474
531
  exports.gryoVersion = toEnum('GryoVersion', 'V1_0 V3_0');
475
532
  exports.merge = toEnum('Merge', 'onCreate onMatch outV inV');
476
533
  exports.operator = toEnum('Operator', 'addAll and assign div max min minus mult or sum sumLong');
@@ -13,13 +13,29 @@ export declare class Traversal {
13
13
  graph: Graph | null;
14
14
  traversalStrategies: TraversalStrategies | null;
15
15
  gremlinLang: GremlinLang;
16
- results: any[] | null;
16
+ /** @internal Async results stream set by RemoteStrategy */
17
+ _resultsStream: AsyncGenerator<any> | null;
18
+ /** @internal Buffered traverser for bulk expansion and hasNext peek */
19
+ private _currentTraverser;
20
+ /** Trailing response status from the server, populated after iteration completes. */
21
+ private _status;
17
22
  sideEffects?: any;
18
23
  private _traversalStrategiesPromise;
19
- private _resultsIteratorIndex;
24
+ private _done;
20
25
  constructor(graph: Graph | null, traversalStrategies: TraversalStrategies | null, gremlinLang?: GremlinLang);
21
26
  /** @returns {GremlinLang} */
22
27
  getGremlinLang(): GremlinLang;
28
+ /**
29
+ * Gets the trailing response status from the server.
30
+ * Available after the traversal has been fully iterated (via toList(), iterate(), or manual iteration).
31
+ * Returns null if the traversal has not completed.
32
+ * @returns {{ code: number, message: string | null, exception: string | null } | null}
33
+ */
34
+ getStatus(): {
35
+ code: number;
36
+ message: string | null;
37
+ exception: string | null;
38
+ } | null;
23
39
  /**
24
40
  * Returns an Array containing the traverser objects.
25
41
  * @returns {Promise.<Array>}
@@ -36,16 +52,27 @@ export declare class Traversal {
36
52
  */
37
53
  iterate(): Promise<void>;
38
54
  /**
39
- * Async iterator method implementation.
40
- * Returns a promise containing an iterator item.
41
- * @returns {Promise.<{value, done}>}
55
+ * Returns the next result from the traversal.
56
+ *
57
+ * When called without an argument, returns a Promise that resolves to an iterator
58
+ * item ({value, done}), following the async iterator protocol.
59
+ *
60
+ * When called with an amount, returns a Promise that resolves to an Array containing
61
+ * up to {@code amount} result values. The Array form is always used when an amount is
62
+ * supplied, including {@code next(1)}, which resolves to an Array of one value rather
63
+ * than a bare value, matching the behavior of next(n) in the other Gremlin language
64
+ * variants. If fewer results remain, the Array contains only those that remain, and an
65
+ * amount of zero or less yields an empty Array.
66
+ * @param {Number} [amount] The number of results to retrieve.
67
+ * @returns {Promise.<{value, done}>|Promise.<Array>}
42
68
  */
43
69
  next<T>(): Promise<IteratorResult<T, null>>;
70
+ next<T>(amount: number): Promise<T[]>;
44
71
  /**
45
- * Synchronous iterator of traversers including
72
+ * Pull the next value, handling Traverser bulk expansion.
46
73
  * @private
47
74
  */
48
- _getNext<T>(): IteratorResult<T, null>;
75
+ _getNext<T>(): Promise<IteratorResult<T, null>>;
49
76
  _applyStrategies(): Promise<void>;
50
77
  /**
51
78
  * Returns step instructions during JSON serialization
@@ -81,8 +108,8 @@ export declare class P<T1 = any, T2 = any> {
81
108
  toString(): string;
82
109
  and(arg?: any): P<this, any>;
83
110
  or(arg?: any): P<this, any>;
84
- static within(...args: any[]): P<any[], null>;
85
- static without(...args: any[]): P<any[], null>;
111
+ static within(...args: any[]): P<any, null>;
112
+ static without(...args: any[]): P<any, null>;
86
113
  /** @param {...Object} args */
87
114
  static between(...args: any[]): any;
88
115
  /** @param {...Object} args */
@@ -173,7 +200,6 @@ export declare const dt: Record<string, EnumValue>;
173
200
  export declare const gType: {
174
201
  [key: string]: any;
175
202
  };
176
- export declare const graphSONVersion: Record<string, EnumValue>;
177
203
  export declare const gryoVersion: Record<string, EnumValue>;
178
204
  export declare const merge: Record<string, EnumValue>;
179
205
  export declare const operator: Record<string, EnumValue>;