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
@@ -4,12 +4,19 @@ export default class SetSerializer {
4
4
  ID: any;
5
5
  canBeUsedFor(value: any): value is Set<any>;
6
6
  serialize(item: any, fullyQualifiedFormat?: boolean): Buffer<ArrayBuffer>;
7
- deserialize(buffer: any, fullyQualifiedFormat?: boolean, ...args: any[]): {
8
- v: null;
9
- len: number;
10
- } | {
11
- v: Set<any>;
12
- len: number;
13
- };
7
+ /**
8
+ * Async deserialization of set value bytes from a StreamReader.
9
+ * @param {StreamReader} reader
10
+ * @param {number} valueFlag - 0x00 for normal, 0x02 for bulked
11
+ * @param {number} typeCode
12
+ * @returns {Promise<Set>}
13
+ */
14
+ deserializeValue(reader: StreamReader, valueFlag: number, typeCode: number): Promise<Set<any>>;
15
+ /**
16
+ * Async fully-qualified deserialization from a StreamReader.
17
+ * @param {StreamReader} reader
18
+ * @returns {Promise<Set|null>}
19
+ */
20
+ deserialize(reader: StreamReader): Promise<Set<any> | null>;
14
21
  }
15
22
  import { Buffer } from 'buffer';
@@ -55,81 +55,47 @@ export default class SetSerializer {
55
55
  }
56
56
  return Buffer.concat(bufs);
57
57
  }
58
- deserialize(buffer, fullyQualifiedFormat = true) {
59
- let len = 0;
60
- let cursor = buffer;
61
- let isBulked = false;
62
- try {
63
- if (buffer === undefined || buffer === null || !(buffer instanceof Buffer)) {
64
- throw new Error('buffer is missing');
65
- }
66
- if (buffer.length < 1) {
67
- throw new Error('buffer is empty');
68
- }
69
- if (fullyQualifiedFormat) {
70
- const typeCode = cursor.readUInt8();
71
- len++;
72
- if (typeCode !== this.ID) {
73
- throw new Error('unexpected {type_code}');
74
- }
75
- cursor = cursor.slice(1);
76
- if (cursor.length < 1) {
77
- throw new Error('{value_flag} is missing');
78
- }
79
- const valueFlag = cursor.readUInt8();
80
- len++;
81
- if (valueFlag === 1) {
82
- return { v: null, len };
83
- }
84
- if (valueFlag !== 0 && valueFlag !== 2) {
85
- throw new Error('unexpected {value_flag}');
86
- }
87
- isBulked = valueFlag === 2;
88
- cursor = cursor.slice(1);
89
- }
90
- let length, lengthLen;
91
- try {
92
- ({ v: length, len: lengthLen } = this.ioc.intSerializer.deserialize(cursor, false));
93
- len += lengthLen;
94
- }
95
- catch (err) {
96
- err.message = '{length}: ' + err.message;
97
- throw err;
98
- }
99
- if (length < 0) {
100
- throw new Error('{length} is less than zero');
101
- }
102
- cursor = cursor.slice(lengthLen);
103
- const v = new Set();
104
- for (let i = 0; i < length; i++) {
105
- let value, valueLen;
106
- try {
107
- ({ v: value, len: valueLen } = this.ioc.anySerializer.deserialize(cursor));
108
- len += valueLen;
109
- }
110
- catch (err) {
111
- err.message = `{item_${i}}: ` + err.message;
112
- throw err;
113
- }
114
- cursor = cursor.slice(valueLen);
115
- if (isBulked) {
116
- if (cursor.length < 8) {
117
- throw new Error(`{item_${i}}: bulk count is missing`);
118
- }
119
- cursor.readBigInt64BE();
120
- len += 8;
121
- cursor = cursor.slice(8);
122
- // Set.add is idempotent; bulk count only affects cardinality, not Set membership
123
- v.add(value);
124
- }
125
- else {
126
- v.add(value);
127
- }
58
+ /**
59
+ * Async deserialization of set value bytes from a StreamReader.
60
+ * @param {StreamReader} reader
61
+ * @param {number} valueFlag - 0x00 for normal, 0x02 for bulked
62
+ * @param {number} typeCode
63
+ * @returns {Promise<Set>}
64
+ */
65
+ async deserializeValue(reader, valueFlag, typeCode) {
66
+ const isBulked = valueFlag === 0x02;
67
+ const length = await this.ioc.intSerializer.deserializeBare(reader);
68
+ if (length < 0) {
69
+ throw new Error(`SetSerializer: {length}=${length} is less than zero`);
70
+ }
71
+ const v = new Set();
72
+ for (let i = 0; i < length; i++) {
73
+ const value = await this.ioc.anySerializer.deserialize(reader);
74
+ if (isBulked) {
75
+ // consume the bulk count; Set.add is idempotent so count doesn't matter
76
+ await reader.readBigInt64BE();
128
77
  }
129
- return { v, len };
78
+ v.add(value);
79
+ }
80
+ return v;
81
+ }
82
+ /**
83
+ * Async fully-qualified deserialization from a StreamReader.
84
+ * @param {StreamReader} reader
85
+ * @returns {Promise<Set|null>}
86
+ */
87
+ async deserialize(reader) {
88
+ const type_code = await reader.readUInt8();
89
+ if (type_code !== this.ID) {
90
+ throw new Error(`SetSerializer: unexpected {type_code}=0x${type_code.toString(16)}`);
91
+ }
92
+ const value_flag = await reader.readUInt8();
93
+ if (value_flag === 0x01) {
94
+ return null;
130
95
  }
131
- catch (err) {
132
- throw this.ioc.utils.des_error({ serializer: this, args: arguments, cursor, err });
96
+ if (value_flag !== 0x00 && value_flag !== 0x02) {
97
+ throw new Error(`SetSerializer: unexpected {value_flag}=0x${value_flag.toString(16)}`);
133
98
  }
99
+ return this.deserializeValue(reader, value_flag, type_code);
134
100
  }
135
101
  }
@@ -3,9 +3,17 @@ export default class ShortSerializer {
3
3
  ioc: any;
4
4
  canBeUsedFor(value: any): void;
5
5
  serialize(item: any, fullyQualifiedFormat?: boolean): Buffer<ArrayBuffer>;
6
- deserialize(buffer: any, fullyQualifiedFormat?: boolean, ...args: any[]): {
7
- v: any;
8
- len: number;
9
- };
6
+ /**
7
+ * @param {StreamReader} reader
8
+ * @param {number} valueFlag
9
+ * @param {number} typeCode
10
+ * @returns {Promise<number>}
11
+ */
12
+ deserializeValue(reader: StreamReader, valueFlag: number, typeCode: number): Promise<number>;
13
+ /**
14
+ * @param {StreamReader} reader
15
+ * @returns {Promise<number|null>}
16
+ */
17
+ deserialize(reader: StreamReader): Promise<number | null>;
10
18
  }
11
19
  import { Buffer } from 'buffer';
@@ -44,45 +44,31 @@ export default class ShortSerializer {
44
44
  bufs.push(v);
45
45
  return Buffer.concat(bufs);
46
46
  }
47
- deserialize(buffer, fullyQualifiedFormat = true) {
48
- let len = 0;
49
- let cursor = buffer;
50
- try {
51
- if (buffer === undefined || buffer === null || !(buffer instanceof Buffer)) {
52
- throw new Error('buffer is missing');
53
- }
54
- if (buffer.length < 1) {
55
- throw new Error('buffer is empty');
56
- }
57
- if (fullyQualifiedFormat) {
58
- const type_code = cursor.readUInt8();
59
- len++;
60
- if (type_code !== this.ioc.DataType.SHORT) {
61
- throw new Error('unexpected {type_code}');
62
- }
63
- cursor = cursor.slice(1);
64
- if (cursor.length < 1) {
65
- throw new Error('{value_flag} is missing');
66
- }
67
- const value_flag = cursor.readUInt8();
68
- len++;
69
- if (value_flag === 1) {
70
- return { v: null, len };
71
- }
72
- if (value_flag !== 0) {
73
- throw new Error('unexpected {value_flag}');
74
- }
75
- cursor = cursor.slice(1);
76
- }
77
- if (cursor.length < 2) {
78
- throw new Error('unexpected {value} length');
79
- }
80
- len += 2;
81
- const v = cursor.readInt16BE();
82
- return { v, len };
47
+ /**
48
+ * @param {StreamReader} reader
49
+ * @param {number} valueFlag
50
+ * @param {number} typeCode
51
+ * @returns {Promise<number>}
52
+ */
53
+ async deserializeValue(reader, valueFlag, typeCode) {
54
+ return await reader.readInt16BE();
55
+ }
56
+ /**
57
+ * @param {StreamReader} reader
58
+ * @returns {Promise<number|null>}
59
+ */
60
+ async deserialize(reader) {
61
+ const type_code = await reader.readUInt8();
62
+ if (type_code !== this.ioc.DataType.SHORT) {
63
+ throw new Error(`ShortSerializer: unexpected {type_code}=0x${type_code.toString(16)}`);
64
+ }
65
+ const value_flag = await reader.readUInt8();
66
+ if (value_flag === 0x01) {
67
+ return null;
83
68
  }
84
- catch (err) {
85
- throw this.ioc.utils.des_error({ serializer: this, args: arguments, cursor, err });
69
+ if (value_flag !== 0x00) {
70
+ throw new Error(`ShortSerializer: unexpected {value_flag}=0x${value_flag.toString(16)}`);
86
71
  }
72
+ return this.deserializeValue(reader, value_flag, type_code);
87
73
  }
88
74
  }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Async byte reader that provides a uniform interface over both a complete Buffer
3
+ * (for non-streaming submit()) and a ReadableStream (for streaming HTTP responses).
4
+ *
5
+ * Handles chunk boundaries transparently and blocks (awaits) until the requested bytes are available.
6
+ */
7
+ export default class StreamReader {
8
+ /**
9
+ * Create a StreamReader backed by a complete Buffer.
10
+ * All reads are satisfied from the buffer; no async I/O occurs.
11
+ * @param {Buffer} buffer
12
+ * @returns {StreamReader}
13
+ */
14
+ static fromBuffer(buffer: Buffer): StreamReader;
15
+ /**
16
+ * Create a StreamReader backed by a ReadableStream (e.g. fetch response.body).
17
+ * Reads pull chunks from the stream as needed.
18
+ * @param {ReadableStream} readableStream
19
+ * @returns {StreamReader}
20
+ */
21
+ static fromReadableStream(readableStream: ReadableStream): StreamReader;
22
+ /**
23
+ * @param {Buffer} initialBuffer
24
+ * @param {ReadableStreamDefaultReader|null} reader
25
+ */
26
+ constructor(initialBuffer: Buffer, reader: ReadableStreamDefaultReader | null);
27
+ /**
28
+ * Total number of bytes consumed so far (monotonically increasing).
29
+ * Useful for error diagnostics.
30
+ * @returns {number}
31
+ */
32
+ get position(): number;
33
+ /**
34
+ * Read exactly `n` bytes and return them as a Buffer.
35
+ * @param {number} n
36
+ * @returns {Promise<Buffer>}
37
+ */
38
+ readBytes(n: number): Promise<Buffer>;
39
+ /**
40
+ * @returns {Promise<number>} unsigned 8-bit integer
41
+ */
42
+ readUInt8(): Promise<number>;
43
+ /**
44
+ * @returns {Promise<number>} signed 8-bit integer
45
+ */
46
+ readByte(): Promise<number>;
47
+ /**
48
+ * @returns {Promise<number>} signed 16-bit big-endian integer
49
+ */
50
+ readInt16BE(): Promise<number>;
51
+ /**
52
+ * @returns {Promise<number>} signed 32-bit big-endian integer
53
+ */
54
+ readInt32BE(): Promise<number>;
55
+ /**
56
+ * @returns {Promise<bigint>} signed 64-bit big-endian integer
57
+ */
58
+ readBigInt64BE(): Promise<bigint>;
59
+ /**
60
+ * @returns {Promise<number>} 32-bit big-endian float
61
+ */
62
+ readFloatBE(): Promise<number>;
63
+ /**
64
+ * @returns {Promise<number>} 64-bit big-endian double
65
+ */
66
+ readDoubleBE(): Promise<number>;
67
+ #private;
68
+ }
69
+ import { Buffer } from 'buffer';
@@ -0,0 +1,181 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+ import { Buffer } from 'buffer';
20
+ /**
21
+ * Async byte reader that provides a uniform interface over both a complete Buffer
22
+ * (for non-streaming submit()) and a ReadableStream (for streaming HTTP responses).
23
+ *
24
+ * Handles chunk boundaries transparently and blocks (awaits) until the requested bytes are available.
25
+ */
26
+ export default class StreamReader {
27
+ /** @type {Buffer} */
28
+ #buffer;
29
+ /** @type {number} */
30
+ #offset;
31
+ /** @type {ReadableStreamDefaultReader|null} */
32
+ #reader;
33
+ /** @type {number} Total bytes consumed (monotonically increasing, survives chunk reassembly) */
34
+ #position;
35
+ /**
36
+ * @param {Buffer} initialBuffer
37
+ * @param {ReadableStreamDefaultReader|null} reader
38
+ */
39
+ constructor(initialBuffer, reader) {
40
+ this.#buffer = initialBuffer;
41
+ this.#offset = 0;
42
+ this.#reader = reader;
43
+ this.#position = 0;
44
+ }
45
+ /**
46
+ * Create a StreamReader backed by a complete Buffer.
47
+ * All reads are satisfied from the buffer; no async I/O occurs.
48
+ * @param {Buffer} buffer
49
+ * @returns {StreamReader}
50
+ */
51
+ static fromBuffer(buffer) {
52
+ return new StreamReader(buffer, null);
53
+ }
54
+ /**
55
+ * Create a StreamReader backed by a ReadableStream (e.g. fetch response.body).
56
+ * Reads pull chunks from the stream as needed.
57
+ * @param {ReadableStream} readableStream
58
+ * @returns {StreamReader}
59
+ */
60
+ static fromReadableStream(readableStream) {
61
+ return new StreamReader(Buffer.alloc(0), readableStream.getReader());
62
+ }
63
+ /**
64
+ * Ensure at least `n` bytes are available in the buffer from the current offset.
65
+ * For buffer-backed readers this is a bounds check. For stream-backed readers
66
+ * this pulls chunks until enough data is buffered.
67
+ * @param {number} n
68
+ */
69
+ async #ensure(n) {
70
+ const available = this.#buffer.length - this.#offset;
71
+ if (available >= n) {
72
+ return;
73
+ }
74
+ if (this.#reader === null) {
75
+ throw new Error(`Unexpected end of buffer at position ${this.#position}: needed ${n} bytes, ${available} available`);
76
+ }
77
+ // Collect chunks until we have enough
78
+ const chunks = [this.#buffer.subarray(this.#offset)];
79
+ let total = available;
80
+ while (total < n) {
81
+ const { value, done } = await this.#reader.read();
82
+ if (done) {
83
+ break;
84
+ }
85
+ const chunk = Buffer.isBuffer(value) ? value : Buffer.from(value);
86
+ chunks.push(chunk);
87
+ total += chunk.length;
88
+ }
89
+ if (total < n) {
90
+ throw new Error(`Unexpected end of stream at position ${this.#position}: needed ${n} bytes, ${total} available`);
91
+ }
92
+ this.#buffer = Buffer.concat(chunks);
93
+ this.#offset = 0;
94
+ }
95
+ /**
96
+ * Total number of bytes consumed so far (monotonically increasing).
97
+ * Useful for error diagnostics.
98
+ * @returns {number}
99
+ */
100
+ get position() {
101
+ return this.#position;
102
+ }
103
+ /**
104
+ * Read exactly `n` bytes and return them as a Buffer.
105
+ * @param {number} n
106
+ * @returns {Promise<Buffer>}
107
+ */
108
+ async readBytes(n) {
109
+ await this.#ensure(n);
110
+ const result = this.#buffer.subarray(this.#offset, this.#offset + n);
111
+ this.#offset += n;
112
+ this.#position += n;
113
+ return result;
114
+ }
115
+ /**
116
+ * @returns {Promise<number>} unsigned 8-bit integer
117
+ */
118
+ async readUInt8() {
119
+ await this.#ensure(1);
120
+ this.#position++;
121
+ return this.#buffer[this.#offset++];
122
+ }
123
+ /**
124
+ * @returns {Promise<number>} signed 8-bit integer
125
+ */
126
+ async readByte() {
127
+ await this.#ensure(1);
128
+ this.#position++;
129
+ return this.#buffer.readInt8(this.#offset++);
130
+ }
131
+ /**
132
+ * @returns {Promise<number>} signed 16-bit big-endian integer
133
+ */
134
+ async readInt16BE() {
135
+ await this.#ensure(2);
136
+ const v = this.#buffer.readInt16BE(this.#offset);
137
+ this.#offset += 2;
138
+ this.#position += 2;
139
+ return v;
140
+ }
141
+ /**
142
+ * @returns {Promise<number>} signed 32-bit big-endian integer
143
+ */
144
+ async readInt32BE() {
145
+ await this.#ensure(4);
146
+ const v = this.#buffer.readInt32BE(this.#offset);
147
+ this.#offset += 4;
148
+ this.#position += 4;
149
+ return v;
150
+ }
151
+ /**
152
+ * @returns {Promise<bigint>} signed 64-bit big-endian integer
153
+ */
154
+ async readBigInt64BE() {
155
+ await this.#ensure(8);
156
+ const v = this.#buffer.readBigInt64BE(this.#offset);
157
+ this.#offset += 8;
158
+ this.#position += 8;
159
+ return v;
160
+ }
161
+ /**
162
+ * @returns {Promise<number>} 32-bit big-endian float
163
+ */
164
+ async readFloatBE() {
165
+ await this.#ensure(4);
166
+ const v = this.#buffer.readFloatBE(this.#offset);
167
+ this.#offset += 4;
168
+ this.#position += 4;
169
+ return v;
170
+ }
171
+ /**
172
+ * @returns {Promise<number>} 64-bit big-endian double
173
+ */
174
+ async readDoubleBE() {
175
+ await this.#ensure(8);
176
+ const v = this.#buffer.readDoubleBE(this.#offset);
177
+ this.#offset += 8;
178
+ this.#position += 8;
179
+ return v;
180
+ }
181
+ }
@@ -4,8 +4,18 @@ export default class StringSerializer {
4
4
  ID: any;
5
5
  canBeUsedFor(value: any): value is string;
6
6
  serialize(item: any, fullyQualifiedFormat?: boolean): any;
7
- deserialize(buffer: any, fullyQualifiedFormat?: boolean, nullable?: boolean, ...args: any[]): {
8
- v: any;
9
- len: number;
10
- };
7
+ /**
8
+ * Read the string value bytes from the StreamReader (length + text_value).
9
+ * @param {StreamReader} reader
10
+ * @param {number} valueFlag
11
+ * @param {number} typeCode
12
+ * @returns {Promise<string>}
13
+ */
14
+ deserializeValue(reader: StreamReader, valueFlag: number, typeCode: number): Promise<string>;
15
+ /**
16
+ * Read a fully-qualified string from the StreamReader.
17
+ * @param {StreamReader} reader
18
+ * @returns {Promise<string|null>}
19
+ */
20
+ deserialize(reader: StreamReader): Promise<string | null>;
11
21
  }
@@ -45,60 +45,41 @@ export default class StringSerializer {
45
45
  bufs.push(v);
46
46
  return Buffer.concat(bufs);
47
47
  }
48
- deserialize(buffer, fullyQualifiedFormat = true, nullable = false) {
49
- let len = 0;
50
- let cursor = buffer;
51
- try {
52
- if (buffer === undefined || buffer === null || !(buffer instanceof Buffer)) {
53
- throw new Error('buffer is missing');
54
- }
55
- if (buffer.length < 1) {
56
- throw new Error('buffer is empty');
57
- }
58
- if (fullyQualifiedFormat) {
59
- const type_code = cursor.readUInt8();
60
- len++;
61
- if (type_code !== this.ID) {
62
- throw new Error('unexpected {type_code}');
63
- }
64
- cursor = cursor.slice(1);
65
- }
66
- if (fullyQualifiedFormat || nullable) {
67
- if (cursor.length < 1) {
68
- throw new Error('{value_flag} is missing');
69
- }
70
- const value_flag = cursor.readUInt8();
71
- len++;
72
- if (value_flag === 1) {
73
- return { v: null, len };
74
- }
75
- if (value_flag !== 0) {
76
- throw new Error('unexpected {value_flag}');
77
- }
78
- cursor = cursor.slice(1);
79
- }
80
- let length, length_len;
81
- try {
82
- ({ v: length, len: length_len } = this.ioc.intSerializer.deserialize(cursor, false));
83
- len += length_len;
84
- }
85
- catch (err) {
86
- err.message = '{length}: ' + err.message;
87
- throw err;
88
- }
89
- if (length < 0) {
90
- throw new Error('{length} is less than zero');
91
- }
92
- cursor = cursor.slice(length_len);
93
- if (cursor.length < length) {
94
- throw new Error('unexpected {text_value} length');
95
- }
96
- len += length;
97
- const v = cursor.toString('utf8', 0, length);
98
- return { v, len };
48
+ /**
49
+ * Read the string value bytes from the StreamReader (length + text_value).
50
+ * @param {StreamReader} reader
51
+ * @param {number} valueFlag
52
+ * @param {number} typeCode
53
+ * @returns {Promise<string>}
54
+ */
55
+ async deserializeValue(reader, valueFlag, typeCode) {
56
+ const length = await this.ioc.intSerializer.deserializeBare(reader);
57
+ if (length < 0) {
58
+ throw new Error(`StringSerializer: {length}=${length} is less than zero`);
59
+ }
60
+ if (length === 0) {
61
+ return '';
62
+ }
63
+ const bytes = await reader.readBytes(length);
64
+ return bytes.toString('utf8');
65
+ }
66
+ /**
67
+ * Read a fully-qualified string from the StreamReader.
68
+ * @param {StreamReader} reader
69
+ * @returns {Promise<string|null>}
70
+ */
71
+ async deserialize(reader) {
72
+ const type_code = await reader.readUInt8();
73
+ if (type_code !== this.ID) {
74
+ throw new Error(`StringSerializer: unexpected {type_code}=0x${type_code.toString(16)}`);
75
+ }
76
+ const value_flag = await reader.readUInt8();
77
+ if (value_flag === 0x01) {
78
+ return null;
99
79
  }
100
- catch (err) {
101
- throw this.ioc.utils.des_error({ serializer: this, args: arguments, cursor, err });
80
+ if (value_flag !== 0x00) {
81
+ throw new Error(`StringSerializer: unexpected {value_flag}=0x${value_flag.toString(16)}`);
102
82
  }
83
+ return this.deserializeValue(reader, value_flag, type_code);
103
84
  }
104
85
  }
@@ -3,5 +3,5 @@ export default class StubSerializer {
3
3
  ioc: any;
4
4
  typeCode: any;
5
5
  typeName: any;
6
- deserialize(): void;
6
+ deserializeValue(reader: any, valueFlag: any, typeCode: any): Promise<void>;
7
7
  }
@@ -23,7 +23,8 @@ export default class StubSerializer {
23
23
  this.typeName = typeName;
24
24
  this.ioc.serializers[typeCode] = this;
25
25
  }
26
- deserialize() {
26
+ // eslint-disable-next-line require-await
27
+ async deserializeValue(reader, valueFlag, typeCode) {
27
28
  throw new Error(`${this.typeName} deserialization is not yet implemented`);
28
29
  }
29
30
  }