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.
- package/build/cjs/driver/auth.cjs +11 -4
- package/build/cjs/driver/auth.d.cts +1 -1
- package/build/cjs/driver/client.cjs +82 -38
- package/build/cjs/driver/client.d.cts +30 -27
- package/build/cjs/driver/connection.cjs +173 -60
- package/build/cjs/driver/connection.d.cts +69 -26
- package/build/cjs/driver/dispatcher.browser.cjs +57 -0
- package/build/cjs/driver/dispatcher.browser.d.cts +35 -0
- package/build/cjs/driver/dispatcher.cjs +101 -0
- package/build/cjs/driver/dispatcher.d.cts +48 -0
- package/build/cjs/driver/driver-remote-connection.cjs +27 -15
- package/build/cjs/driver/driver-remote-connection.d.cts +10 -4
- package/build/cjs/driver/http-request.cjs +64 -0
- package/build/cjs/driver/http-request.d.cts +28 -0
- package/build/cjs/driver/logger.cjs +45 -0
- package/build/cjs/driver/logger.d.cts +29 -0
- package/build/cjs/driver/remote-connection.cjs +5 -8
- package/build/cjs/driver/remote-connection.d.cts +6 -21
- package/build/cjs/driver/request-message.cjs +110 -21
- package/build/cjs/driver/request-message.d.cts +38 -8
- package/build/cjs/driver/response-error.cjs +3 -3
- package/build/cjs/driver/response-error.d.cts +2 -2
- package/build/cjs/index.cjs +21 -0
- package/build/cjs/index.d.cts +47 -0
- package/build/cjs/language/grammar/GremlinLexer.cjs +1669 -1615
- package/build/cjs/language/grammar/GremlinLexer.d.cts +325 -316
- package/build/cjs/language/grammar/GremlinListener.cjs +322 -8
- package/build/cjs/language/grammar/GremlinListener.d.cts +351 -10
- package/build/cjs/language/grammar/GremlinParser.cjs +8700 -5798
- package/build/cjs/language/grammar/GremlinParser.d.cts +998 -619
- package/build/cjs/language/translator/AnonymizedTranslateVisitor.cjs +9 -0
- package/build/cjs/language/translator/AnonymizedTranslateVisitor.d.cts +3 -0
- package/build/cjs/language/translator/DotNetTranslateVisitor.cjs +113 -4
- package/build/cjs/language/translator/DotNetTranslateVisitor.d.cts +13 -2
- package/build/cjs/language/translator/GoTranslateVisitor.cjs +82 -0
- package/build/cjs/language/translator/GoTranslateVisitor.d.cts +9 -0
- package/build/cjs/language/translator/GroovyTranslateVisitor.cjs +23 -0
- package/build/cjs/language/translator/GroovyTranslateVisitor.d.cts +3 -0
- package/build/cjs/language/translator/JavaTranslateVisitor.cjs +23 -0
- package/build/cjs/language/translator/JavaTranslateVisitor.d.cts +3 -0
- package/build/cjs/language/translator/JavascriptTranslateVisitor.cjs +11 -0
- package/build/cjs/language/translator/JavascriptTranslateVisitor.d.cts +3 -0
- package/build/cjs/language/translator/PythonTranslateVisitor.cjs +39 -3
- package/build/cjs/language/translator/PythonTranslateVisitor.d.cts +3 -0
- package/build/cjs/language/translator/TranslateVisitor.cjs +9 -0
- package/build/cjs/language/translator/TranslateVisitor.d.cts +3 -0
- package/build/cjs/process/anonymous-traversal.cjs +5 -1
- package/build/cjs/process/graph-traversal.cjs +139 -8
- package/build/cjs/process/graph-traversal.d.cts +84 -3
- package/build/cjs/process/gremlin-lang.cjs +119 -7
- package/build/cjs/process/gremlin-lang.d.cts +6 -1
- package/build/cjs/process/gvalue.cjs +42 -0
- package/build/cjs/process/gvalue.d.cts +7 -0
- package/build/cjs/process/transaction.cjs +125 -23
- package/build/cjs/process/transaction.d.cts +50 -14
- package/build/cjs/process/traversal.cjs +105 -48
- package/build/cjs/process/traversal.d.cts +36 -10
- package/build/cjs/structure/PDTRegistry.cjs +116 -0
- package/build/cjs/structure/PDTRegistry.d.cts +34 -0
- package/build/cjs/structure/graph.cjs +351 -8
- package/build/cjs/structure/graph.d.cts +122 -3
- package/build/cjs/structure/io/binary/GraphBinary.cjs +68 -39
- package/build/cjs/structure/io/binary/GraphBinary.d.cts +15 -1
- package/build/cjs/structure/io/binary/internals/AnySerializer.cjs +34 -17
- package/build/cjs/structure/io/binary/internals/AnySerializer.d.cts +12 -2
- package/build/cjs/structure/io/binary/internals/ArraySerializer.cjs +41 -72
- package/build/cjs/structure/io/binary/internals/ArraySerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/BigIntegerSerializer.cjs +34 -54
- package/build/cjs/structure/io/binary/internals/BigIntegerSerializer.d.cts +12 -7
- package/build/cjs/structure/io/binary/internals/BinarySerializer.cjs +31 -51
- package/build/cjs/structure/io/binary/internals/BinarySerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/BooleanSerializer.cjs +28 -42
- package/build/cjs/structure/io/binary/internals/BooleanSerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/ByteSerializer.cjs +24 -38
- package/build/cjs/structure/io/binary/internals/ByteSerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/CompositePDTSerializer.cjs +81 -0
- package/build/cjs/structure/io/binary/internals/CompositePDTSerializer.d.cts +10 -0
- package/build/cjs/structure/io/binary/internals/DateTimeSerializer.cjs +52 -69
- package/build/cjs/structure/io/binary/internals/DateTimeSerializer.d.cts +12 -7
- package/build/cjs/structure/io/binary/internals/DoubleSerializer.cjs +24 -38
- package/build/cjs/structure/io/binary/internals/DoubleSerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/EdgeSerializer.cjs +69 -124
- package/build/cjs/structure/io/binary/internals/EdgeSerializer.d.cts +14 -12
- package/build/cjs/structure/io/binary/internals/EnumSerializer.cjs +47 -59
- package/build/cjs/structure/io/binary/internals/EnumSerializer.d.cts +19 -4
- package/build/cjs/structure/io/binary/internals/FloatSerializer.cjs +24 -38
- package/build/cjs/structure/io/binary/internals/FloatSerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/GraphBinaryReader.cjs +111 -37
- package/build/cjs/structure/io/binary/internals/GraphBinaryReader.d.cts +26 -2
- package/build/cjs/structure/io/binary/internals/GraphBinaryWriter.cjs +6 -6
- package/build/cjs/structure/io/binary/internals/GraphSerializer.cjs +184 -0
- package/build/cjs/structure/io/binary/internals/GraphSerializer.d.cts +22 -0
- package/build/cjs/structure/io/binary/internals/IntSerializer.cjs +33 -38
- package/build/cjs/structure/io/binary/internals/IntSerializer.d.cts +19 -4
- package/build/cjs/structure/io/binary/internals/LongSerializer.cjs +29 -42
- package/build/cjs/structure/io/binary/internals/LongSerializer.d.cts +13 -4
- package/build/cjs/structure/io/binary/internals/MapSerializer.cjs +36 -70
- package/build/cjs/structure/io/binary/internals/MapSerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/MarkerSerializer.cjs +30 -33
- package/build/cjs/structure/io/binary/internals/MarkerSerializer.d.cts +13 -4
- package/build/cjs/structure/io/binary/internals/NumberSerializationStrategy.cjs +28 -2
- package/build/cjs/structure/io/binary/internals/NumberSerializationStrategy.d.cts +0 -3
- package/build/cjs/structure/io/binary/internals/PathSerializer.cjs +30 -55
- package/build/cjs/structure/io/binary/internals/PathSerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/PrimitivePDTSerializer.cjs +80 -0
- package/build/cjs/structure/io/binary/internals/PrimitivePDTSerializer.d.cts +10 -0
- package/build/cjs/structure/io/binary/internals/PropertySerializer.cjs +32 -69
- package/build/cjs/structure/io/binary/internals/PropertySerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/SetSerializer.cjs +39 -73
- package/build/cjs/structure/io/binary/internals/SetSerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/ShortSerializer.cjs +24 -38
- package/build/cjs/structure/io/binary/internals/ShortSerializer.d.cts +12 -4
- package/build/cjs/structure/io/binary/internals/StreamReader.cjs +184 -0
- package/build/cjs/structure/io/binary/internals/StreamReader.d.cts +69 -0
- package/build/cjs/structure/io/binary/internals/StringSerializer.cjs +34 -53
- package/build/cjs/structure/io/binary/internals/StringSerializer.d.cts +14 -4
- package/build/cjs/structure/io/binary/internals/StubSerializer.cjs +2 -1
- package/build/cjs/structure/io/binary/internals/StubSerializer.d.cts +1 -1
- package/build/cjs/structure/io/binary/internals/TreeSerializer.cjs +139 -0
- package/build/cjs/structure/io/binary/internals/TreeSerializer.d.cts +54 -0
- package/build/cjs/structure/io/binary/internals/UnspecifiedNullSerializer.cjs +8 -31
- package/build/cjs/structure/io/binary/internals/UnspecifiedNullSerializer.d.cts +6 -4
- package/build/cjs/structure/io/binary/internals/UuidSerializer.cjs +33 -49
- package/build/cjs/structure/io/binary/internals/UuidSerializer.d.cts +12 -7
- package/build/cjs/structure/io/binary/internals/VertexPropertySerializer.cjs +37 -95
- package/build/cjs/structure/io/binary/internals/VertexPropertySerializer.d.cts +14 -7
- package/build/cjs/structure/io/binary/internals/VertexSerializer.cjs +41 -68
- package/build/cjs/structure/io/binary/internals/VertexSerializer.d.cts +14 -9
- package/build/cjs/utils.cjs +157 -40
- package/build/cjs/utils.d.cts +62 -4
- package/build/esm/driver/auth.d.ts +1 -1
- package/build/esm/driver/auth.js +11 -4
- package/build/esm/driver/client.d.ts +30 -27
- package/build/esm/driver/client.js +82 -38
- package/build/esm/driver/connection.d.ts +69 -26
- package/build/esm/driver/connection.js +172 -60
- package/build/esm/driver/dispatcher.browser.d.ts +35 -0
- package/build/esm/driver/dispatcher.browser.js +53 -0
- package/build/esm/driver/dispatcher.d.ts +48 -0
- package/build/esm/driver/dispatcher.js +94 -0
- package/build/esm/driver/driver-remote-connection.d.ts +10 -4
- package/build/esm/driver/driver-remote-connection.js +27 -15
- package/build/esm/driver/http-request.d.ts +28 -0
- package/build/esm/driver/http-request.js +60 -0
- package/build/esm/driver/logger.d.ts +29 -0
- package/build/esm/driver/logger.js +42 -0
- package/build/esm/driver/remote-connection.d.ts +6 -21
- package/build/esm/driver/remote-connection.js +5 -8
- package/build/esm/driver/request-message.d.ts +38 -8
- package/build/esm/driver/request-message.js +107 -21
- package/build/esm/driver/response-error.d.ts +2 -2
- package/build/esm/driver/response-error.js +3 -3
- package/build/esm/index.d.ts +47 -0
- package/build/esm/index.js +21 -0
- package/build/esm/language/grammar/GremlinLexer.d.ts +325 -316
- package/build/esm/language/grammar/GremlinLexer.js +1669 -1615
- package/build/esm/language/grammar/GremlinListener.d.ts +351 -10
- package/build/esm/language/grammar/GremlinListener.js +322 -8
- package/build/esm/language/grammar/GremlinParser.d.ts +998 -619
- package/build/esm/language/grammar/GremlinParser.js +8646 -5778
- package/build/esm/language/translator/AnonymizedTranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/AnonymizedTranslateVisitor.js +9 -0
- package/build/esm/language/translator/DotNetTranslateVisitor.d.ts +13 -2
- package/build/esm/language/translator/DotNetTranslateVisitor.js +113 -4
- package/build/esm/language/translator/GoTranslateVisitor.d.ts +9 -0
- package/build/esm/language/translator/GoTranslateVisitor.js +82 -0
- package/build/esm/language/translator/GroovyTranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/GroovyTranslateVisitor.js +23 -0
- package/build/esm/language/translator/JavaTranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/JavaTranslateVisitor.js +23 -0
- package/build/esm/language/translator/JavascriptTranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/JavascriptTranslateVisitor.js +11 -0
- package/build/esm/language/translator/PythonTranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/PythonTranslateVisitor.js +39 -3
- package/build/esm/language/translator/TranslateVisitor.d.ts +3 -0
- package/build/esm/language/translator/TranslateVisitor.js +9 -0
- package/build/esm/process/anonymous-traversal.js +5 -1
- package/build/esm/process/graph-traversal.d.ts +84 -3
- package/build/esm/process/graph-traversal.js +139 -8
- package/build/esm/process/gremlin-lang.d.ts +6 -1
- package/build/esm/process/gremlin-lang.js +121 -9
- package/build/esm/process/gvalue.d.ts +7 -0
- package/build/esm/process/gvalue.js +38 -0
- package/build/esm/process/transaction.d.ts +50 -14
- package/build/esm/process/transaction.js +122 -23
- package/build/esm/process/traversal.d.ts +36 -10
- package/build/esm/process/traversal.js +104 -47
- package/build/esm/structure/PDTRegistry.d.ts +34 -0
- package/build/esm/structure/PDTRegistry.js +112 -0
- package/build/esm/structure/graph.d.ts +122 -3
- package/build/esm/structure/graph.js +347 -7
- package/build/esm/structure/io/binary/GraphBinary.d.ts +15 -1
- package/build/esm/structure/io/binary/GraphBinary.js +66 -38
- package/build/esm/structure/io/binary/internals/AnySerializer.d.ts +12 -2
- package/build/esm/structure/io/binary/internals/AnySerializer.js +34 -17
- package/build/esm/structure/io/binary/internals/ArraySerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/ArraySerializer.js +41 -72
- package/build/esm/structure/io/binary/internals/BigIntegerSerializer.d.ts +12 -7
- package/build/esm/structure/io/binary/internals/BigIntegerSerializer.js +34 -54
- package/build/esm/structure/io/binary/internals/BinarySerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/BinarySerializer.js +31 -51
- package/build/esm/structure/io/binary/internals/BooleanSerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/BooleanSerializer.js +28 -42
- package/build/esm/structure/io/binary/internals/ByteSerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/ByteSerializer.js +24 -38
- package/build/esm/structure/io/binary/internals/CompositePDTSerializer.d.ts +10 -0
- package/build/esm/structure/io/binary/internals/CompositePDTSerializer.js +78 -0
- package/build/esm/structure/io/binary/internals/DateTimeSerializer.d.ts +12 -7
- package/build/esm/structure/io/binary/internals/DateTimeSerializer.js +52 -69
- package/build/esm/structure/io/binary/internals/DoubleSerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/DoubleSerializer.js +24 -38
- package/build/esm/structure/io/binary/internals/EdgeSerializer.d.ts +14 -12
- package/build/esm/structure/io/binary/internals/EdgeSerializer.js +69 -124
- package/build/esm/structure/io/binary/internals/EnumSerializer.d.ts +19 -4
- package/build/esm/structure/io/binary/internals/EnumSerializer.js +47 -59
- package/build/esm/structure/io/binary/internals/FloatSerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/FloatSerializer.js +24 -38
- package/build/esm/structure/io/binary/internals/GraphBinaryReader.d.ts +26 -2
- package/build/esm/structure/io/binary/internals/GraphBinaryReader.js +108 -37
- package/build/esm/structure/io/binary/internals/GraphBinaryWriter.js +6 -6
- package/build/esm/structure/io/binary/internals/GraphSerializer.d.ts +22 -0
- package/build/esm/structure/io/binary/internals/GraphSerializer.js +181 -0
- package/build/esm/structure/io/binary/internals/IntSerializer.d.ts +19 -4
- package/build/esm/structure/io/binary/internals/IntSerializer.js +33 -38
- package/build/esm/structure/io/binary/internals/LongSerializer.d.ts +13 -4
- package/build/esm/structure/io/binary/internals/LongSerializer.js +29 -42
- package/build/esm/structure/io/binary/internals/MapSerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/MapSerializer.js +36 -70
- package/build/esm/structure/io/binary/internals/MarkerSerializer.d.ts +13 -4
- package/build/esm/structure/io/binary/internals/MarkerSerializer.js +29 -33
- package/build/esm/structure/io/binary/internals/NumberSerializationStrategy.d.ts +0 -3
- package/build/esm/structure/io/binary/internals/NumberSerializationStrategy.js +28 -2
- package/build/esm/structure/io/binary/internals/PathSerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/PathSerializer.js +30 -55
- package/build/esm/structure/io/binary/internals/PrimitivePDTSerializer.d.ts +10 -0
- package/build/esm/structure/io/binary/internals/PrimitivePDTSerializer.js +77 -0
- package/build/esm/structure/io/binary/internals/PropertySerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/PropertySerializer.js +32 -69
- package/build/esm/structure/io/binary/internals/SetSerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/SetSerializer.js +39 -73
- package/build/esm/structure/io/binary/internals/ShortSerializer.d.ts +12 -4
- package/build/esm/structure/io/binary/internals/ShortSerializer.js +24 -38
- package/build/esm/structure/io/binary/internals/StreamReader.d.ts +69 -0
- package/build/esm/structure/io/binary/internals/StreamReader.js +181 -0
- package/build/esm/structure/io/binary/internals/StringSerializer.d.ts +14 -4
- package/build/esm/structure/io/binary/internals/StringSerializer.js +34 -53
- package/build/esm/structure/io/binary/internals/StubSerializer.d.ts +1 -1
- package/build/esm/structure/io/binary/internals/StubSerializer.js +2 -1
- package/build/esm/structure/io/binary/internals/TreeSerializer.d.ts +54 -0
- package/build/esm/structure/io/binary/internals/TreeSerializer.js +136 -0
- package/build/esm/structure/io/binary/internals/UnspecifiedNullSerializer.d.ts +6 -4
- package/build/esm/structure/io/binary/internals/UnspecifiedNullSerializer.js +8 -31
- package/build/esm/structure/io/binary/internals/UuidSerializer.d.ts +12 -7
- package/build/esm/structure/io/binary/internals/UuidSerializer.js +33 -49
- package/build/esm/structure/io/binary/internals/VertexPropertySerializer.d.ts +14 -7
- package/build/esm/structure/io/binary/internals/VertexPropertySerializer.js +37 -95
- package/build/esm/structure/io/binary/internals/VertexSerializer.d.ts +14 -9
- package/build/esm/structure/io/binary/internals/VertexSerializer.js +41 -68
- package/build/esm/utils.d.ts +62 -4
- package/build/esm/utils.js +145 -6
- 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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
|
|
132
|
-
throw
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
85
|
-
throw
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
101
|
-
throw
|
|
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
|
}
|
|
@@ -23,7 +23,8 @@ export default class StubSerializer {
|
|
|
23
23
|
this.typeName = typeName;
|
|
24
24
|
this.ioc.serializers[typeCode] = this;
|
|
25
25
|
}
|
|
26
|
-
|
|
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
|
}
|