@yume-chan/struct 0.0.5 → 0.0.10
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/CHANGELOG.json +23 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -21
- package/README.md +720 -643
- package/dts/basic/context.d.ts +10 -17
- package/dts/basic/context.d.ts.map +1 -1
- package/dts/basic/definition.d.ts +23 -23
- package/dts/basic/definition.d.ts.map +1 -1
- package/dts/basic/field-value.d.ts +38 -0
- package/dts/basic/field-value.d.ts.map +1 -0
- package/dts/basic/index.d.ts +2 -2
- package/dts/basic/index.d.ts.map +1 -1
- package/dts/basic/struct-value.d.ts +24 -0
- package/dts/basic/struct-value.d.ts.map +1 -0
- package/dts/index.d.ts +1 -0
- package/dts/index.d.ts.map +1 -1
- package/dts/struct.d.ts +44 -47
- package/dts/struct.d.ts.map +1 -1
- package/dts/syncbird.d.ts +20 -0
- package/dts/syncbird.d.ts.map +1 -0
- package/dts/types/array-buffer.d.ts +22 -20
- package/dts/types/array-buffer.d.ts.map +1 -1
- package/dts/types/fixed-length-array-buffer.d.ts +1 -3
- package/dts/types/fixed-length-array-buffer.d.ts.map +1 -1
- package/dts/types/index.d.ts +0 -1
- package/dts/types/index.d.ts.map +1 -1
- package/dts/types/number.d.ts +11 -10
- package/dts/types/number.d.ts.map +1 -1
- package/dts/types/variable-length-array-buffer.d.ts +21 -19
- package/dts/types/variable-length-array-buffer.d.ts.map +1 -1
- package/dts/{types/utils.d.ts → utils.d.ts} +3 -0
- package/dts/utils.d.ts.map +1 -0
- package/esm/basic/context.js +1 -1
- package/esm/basic/context.js.map +1 -1
- package/esm/basic/definition.js +9 -11
- package/esm/basic/definition.js.map +1 -1
- package/esm/basic/field-value.js +35 -0
- package/esm/basic/field-value.js.map +1 -0
- package/esm/basic/index.js +2 -2
- package/esm/basic/index.js.map +1 -1
- package/esm/basic/struct-value.js +36 -0
- package/esm/basic/struct-value.js.map +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/struct.js +103 -176
- package/esm/struct.js.map +1 -1
- package/esm/syncbird.js +25 -0
- package/esm/syncbird.js.map +1 -0
- package/esm/types/array-buffer.js +83 -107
- package/esm/types/array-buffer.js.map +1 -1
- package/esm/types/fixed-length-array-buffer.js +5 -15
- package/esm/types/fixed-length-array-buffer.js.map +1 -1
- package/esm/types/index.js +0 -1
- package/esm/types/index.js.map +1 -1
- package/esm/types/number.js +35 -53
- package/esm/types/number.js.map +1 -1
- package/esm/types/variable-length-array-buffer.js +57 -68
- package/esm/types/variable-length-array-buffer.js.map +1 -1
- package/esm/utils.js +17 -0
- package/esm/utils.js.map +1 -0
- package/package.json +47 -50
- package/src/basic/context.ts +32 -40
- package/src/basic/definition.ts +72 -69
- package/src/basic/{runtime-value.ts → field-value.ts} +67 -72
- package/src/basic/index.ts +4 -4
- package/src/basic/struct-value.ts +39 -0
- package/src/index.ts +5 -4
- package/src/struct.ts +595 -579
- package/src/syncbird.ts +53 -0
- package/src/types/array-buffer.ts +194 -171
- package/src/types/fixed-length-array-buffer.ts +17 -27
- package/src/types/index.ts +4 -5
- package/src/types/number.ts +114 -101
- package/src/types/variable-length-array-buffer.ts +142 -121
- package/src/{types/utils.ts → utils.ts} +62 -47
- package/cjs/basic/context.js +0 -7
- package/cjs/basic/context.js.map +0 -1
- package/cjs/basic/definition.js +0 -26
- package/cjs/basic/definition.js.map +0 -1
- package/cjs/basic/index.js +0 -8
- package/cjs/basic/index.js.map +0 -1
- package/cjs/basic/runtime-object.js +0 -34
- package/cjs/basic/runtime-object.js.map +0 -1
- package/cjs/basic/runtime-value.js +0 -41
- package/cjs/basic/runtime-value.js.map +0 -1
- package/cjs/index.js +0 -10
- package/cjs/index.js.map +0 -1
- package/cjs/struct.js +0 -259
- package/cjs/struct.js.map +0 -1
- package/cjs/types/array-buffer.js +0 -137
- package/cjs/types/array-buffer.js.map +0 -1
- package/cjs/types/fixed-length-array-buffer.js +0 -21
- package/cjs/types/fixed-length-array-buffer.js.map +0 -1
- package/cjs/types/index.js +0 -9
- package/cjs/types/index.js.map +0 -1
- package/cjs/types/number.js +0 -68
- package/cjs/types/number.js.map +0 -1
- package/cjs/types/utils.js +0 -11
- package/cjs/types/utils.js.map +0 -1
- package/cjs/types/variable-length-array-buffer.js +0 -85
- package/cjs/types/variable-length-array-buffer.js.map +0 -1
- package/dts/basic/runtime-object.d.ts +0 -17
- package/dts/basic/runtime-object.d.ts.map +0 -1
- package/dts/basic/runtime-value.d.ts +0 -39
- package/dts/basic/runtime-value.d.ts.map +0 -1
- package/dts/types/utils.d.ts.map +0 -1
- package/esm/basic/runtime-object.js +0 -28
- package/esm/basic/runtime-object.js.map +0 -1
- package/esm/basic/runtime-value.js +0 -38
- package/esm/basic/runtime-value.js.map +0 -1
- package/esm/types/utils.js +0 -7
- package/esm/types/utils.js.map +0 -1
- package/src/basic/context.spec.ts +0 -9
- package/src/basic/definition.spec.ts +0 -26
- package/src/basic/runtime-object.spec.ts +0 -38
- package/src/basic/runtime-object.ts +0 -36
- package/src/basic/runtime-value.spec.ts +0 -71
- package/src/types/array-buffer.spec.ts +0 -88
- package/src/types/number.spec.ts +0 -262
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.esm.json +0 -15
package/esm/struct.js
CHANGED
|
@@ -1,256 +1,183 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { StructDefaultOptions, StructValue } from './basic';
|
|
2
|
+
import { Syncbird } from "./syncbird";
|
|
3
3
|
import { ArrayBufferFieldType, FixedLengthArrayBufferLikeFieldDefinition, NumberFieldDefinition, NumberFieldType, StringFieldType, Uint8ClampedArrayFieldType, VariableLengthArrayBufferLikeFieldDefinition } from './types';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _this = this;
|
|
4
|
+
export class Struct {
|
|
5
|
+
constructor(options) {
|
|
7
6
|
this._size = 0;
|
|
8
7
|
this._fields = [];
|
|
9
8
|
this._extra = {};
|
|
10
|
-
this.arrayBufferLike =
|
|
9
|
+
this.arrayBufferLike = (name, type, options) => {
|
|
11
10
|
if ('length' in options) {
|
|
12
|
-
return
|
|
11
|
+
return this.field(name, new FixedLengthArrayBufferLikeFieldDefinition(type, options));
|
|
13
12
|
}
|
|
14
13
|
else {
|
|
15
|
-
return
|
|
14
|
+
return this.field(name, new VariableLengthArrayBufferLikeFieldDefinition(type, options));
|
|
16
15
|
}
|
|
17
16
|
};
|
|
18
|
-
this.arrayBuffer =
|
|
19
|
-
return
|
|
17
|
+
this.arrayBuffer = (name, options) => {
|
|
18
|
+
return this.arrayBufferLike(name, ArrayBufferFieldType.instance, options);
|
|
20
19
|
};
|
|
21
|
-
this.uint8ClampedArray =
|
|
22
|
-
return
|
|
20
|
+
this.uint8ClampedArray = (name, options) => {
|
|
21
|
+
return this.arrayBufferLike(name, Uint8ClampedArrayFieldType.instance, options);
|
|
23
22
|
};
|
|
24
|
-
this.string =
|
|
25
|
-
return
|
|
23
|
+
this.string = (name, options) => {
|
|
24
|
+
return this.arrayBufferLike(name, StringFieldType.instance, options);
|
|
26
25
|
};
|
|
27
|
-
this.options =
|
|
26
|
+
this.options = Object.assign(Object.assign({}, StructDefaultOptions), options);
|
|
28
27
|
}
|
|
29
|
-
Object.defineProperty(Struct.prototype, "size", {
|
|
30
|
-
/**
|
|
31
|
-
* Gets the static size (exclude fields that can change size at runtime)
|
|
32
|
-
*/
|
|
33
|
-
get: function () { return this._size; },
|
|
34
|
-
enumerable: false,
|
|
35
|
-
configurable: true
|
|
36
|
-
});
|
|
37
28
|
/**
|
|
38
|
-
*
|
|
29
|
+
* Gets the static size (exclude fields that can change size at runtime)
|
|
39
30
|
*/
|
|
40
|
-
|
|
31
|
+
get size() { return this._size; }
|
|
32
|
+
/**
|
|
33
|
+
* Appends a `StructFieldDefinition` to the `Struct
|
|
34
|
+
*/
|
|
35
|
+
field(name, definition) {
|
|
36
|
+
for (const field of this._fields) {
|
|
37
|
+
if (field[0] === name) {
|
|
38
|
+
throw new Error(`This struct already have a field with name '${name}'`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
41
|
this._fields.push([name, definition]);
|
|
42
|
-
|
|
42
|
+
const size = definition.getSize();
|
|
43
43
|
this._size += size;
|
|
44
44
|
// Force cast `this` to another type
|
|
45
45
|
return this;
|
|
46
|
-
}
|
|
46
|
+
}
|
|
47
47
|
/**
|
|
48
48
|
* Merges (flats) another `Struct`'s fields and extra fields into this one.
|
|
49
49
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
for (var _b = __values(other._fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
54
|
-
var field = _c.value;
|
|
55
|
-
this._fields.push(field);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
59
|
-
finally {
|
|
60
|
-
try {
|
|
61
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
62
|
-
}
|
|
63
|
-
finally { if (e_1) throw e_1.error; }
|
|
50
|
+
fields(other) {
|
|
51
|
+
for (const field of other._fields) {
|
|
52
|
+
this._fields.push(field);
|
|
64
53
|
}
|
|
65
54
|
this._size += other._size;
|
|
66
55
|
Object.assign(this._extra, other._extra);
|
|
67
56
|
return this;
|
|
68
|
-
}
|
|
69
|
-
|
|
57
|
+
}
|
|
58
|
+
number(name, type, _typescriptType) {
|
|
70
59
|
return this.field(name, new NumberFieldDefinition(type, _typescriptType));
|
|
71
|
-
}
|
|
60
|
+
}
|
|
72
61
|
/**
|
|
73
62
|
* Appends an `int8` field to the `Struct`
|
|
74
63
|
*/
|
|
75
|
-
|
|
64
|
+
int8(name, _typescriptType) {
|
|
76
65
|
return this.number(name, NumberFieldType.Int8, _typescriptType);
|
|
77
|
-
}
|
|
66
|
+
}
|
|
78
67
|
/**
|
|
79
68
|
* Appends an `uint8` field to the `Struct`
|
|
80
69
|
*/
|
|
81
|
-
|
|
70
|
+
uint8(name, _typescriptType) {
|
|
82
71
|
return this.number(name, NumberFieldType.Uint8, _typescriptType);
|
|
83
|
-
}
|
|
72
|
+
}
|
|
84
73
|
/**
|
|
85
74
|
* Appends an `int16` field to the `Struct`
|
|
86
75
|
*/
|
|
87
|
-
|
|
76
|
+
int16(name, _typescriptType) {
|
|
88
77
|
return this.number(name, NumberFieldType.Int16, _typescriptType);
|
|
89
|
-
}
|
|
78
|
+
}
|
|
90
79
|
/**
|
|
91
80
|
* Appends an `uint16` field to the `Struct`
|
|
92
81
|
*/
|
|
93
|
-
|
|
82
|
+
uint16(name, _typescriptType) {
|
|
94
83
|
return this.number(name, NumberFieldType.Uint16, _typescriptType);
|
|
95
|
-
}
|
|
84
|
+
}
|
|
96
85
|
/**
|
|
97
86
|
* Appends an `int32` field to the `Struct`
|
|
98
87
|
*/
|
|
99
|
-
|
|
88
|
+
int32(name, _typescriptType) {
|
|
100
89
|
return this.number(name, NumberFieldType.Int32, _typescriptType);
|
|
101
|
-
}
|
|
90
|
+
}
|
|
102
91
|
/**
|
|
103
92
|
* Appends an `uint32` field to the `Struct`
|
|
104
93
|
*/
|
|
105
|
-
|
|
94
|
+
uint32(name, typescriptType) {
|
|
106
95
|
return this.number(name, NumberFieldType.Uint32, typescriptType);
|
|
107
|
-
}
|
|
96
|
+
}
|
|
108
97
|
/**
|
|
109
98
|
* Appends an `int64` field to the `Struct`
|
|
110
99
|
*
|
|
111
100
|
* Requires native `BigInt` support
|
|
112
101
|
*/
|
|
113
|
-
|
|
102
|
+
int64(name, _typescriptType) {
|
|
114
103
|
return this.number(name, NumberFieldType.Int64, _typescriptType);
|
|
115
|
-
}
|
|
104
|
+
}
|
|
116
105
|
/**
|
|
117
106
|
* Appends an `uint64` field to the `Struct`
|
|
118
107
|
*
|
|
119
108
|
* Requires native `BigInt` support
|
|
120
109
|
*/
|
|
121
|
-
|
|
110
|
+
uint64(name, _typescriptType) {
|
|
122
111
|
return this.number(name, NumberFieldType.Uint64, _typescriptType);
|
|
123
|
-
}
|
|
112
|
+
}
|
|
124
113
|
/**
|
|
125
|
-
* Adds some extra
|
|
114
|
+
* Adds some extra properties into every `Struct` value.
|
|
126
115
|
*
|
|
127
|
-
* Extra
|
|
116
|
+
* Extra properties will not affect serialize or deserialize process.
|
|
128
117
|
*
|
|
129
|
-
* Multiple calls to `extra` will merge all
|
|
118
|
+
* Multiple calls to `extra` will merge all properties together.
|
|
130
119
|
*
|
|
131
120
|
* @param value
|
|
132
|
-
* An object containing
|
|
121
|
+
* An object containing properties to be added to the result value. Accessors and methods are also allowed.
|
|
133
122
|
*/
|
|
134
|
-
|
|
123
|
+
extra(value) {
|
|
135
124
|
Object.assign(this._extra, Object.getOwnPropertyDescriptors(value));
|
|
136
125
|
return this;
|
|
137
|
-
}
|
|
138
|
-
|
|
126
|
+
}
|
|
127
|
+
postDeserialize(callback) {
|
|
139
128
|
this._postDeserialized = callback;
|
|
140
129
|
return this;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Object.defineProperties(
|
|
145
|
-
return
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
};
|
|
166
|
-
Struct.prototype.deserialize = function (context) {
|
|
167
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
168
|
-
var object, _a, _b, _c, name, definition, runtimeValue, e_3_1, result;
|
|
169
|
-
var e_3, _d;
|
|
170
|
-
return __generator(this, function (_e) {
|
|
171
|
-
switch (_e.label) {
|
|
172
|
-
case 0:
|
|
173
|
-
object = this.initializeObject();
|
|
174
|
-
_e.label = 1;
|
|
175
|
-
case 1:
|
|
176
|
-
_e.trys.push([1, 6, 7, 8]);
|
|
177
|
-
_a = __values(this._fields), _b = _a.next();
|
|
178
|
-
_e.label = 2;
|
|
179
|
-
case 2:
|
|
180
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
181
|
-
_c = __read(_b.value, 2), name = _c[0], definition = _c[1];
|
|
182
|
-
return [4 /*yield*/, definition.deserialize(this.options, context, object)];
|
|
183
|
-
case 3:
|
|
184
|
-
runtimeValue = _e.sent();
|
|
185
|
-
setRuntimeValue(object, name, runtimeValue);
|
|
186
|
-
_e.label = 4;
|
|
187
|
-
case 4:
|
|
188
|
-
_b = _a.next();
|
|
189
|
-
return [3 /*break*/, 2];
|
|
190
|
-
case 5: return [3 /*break*/, 8];
|
|
191
|
-
case 6:
|
|
192
|
-
e_3_1 = _e.sent();
|
|
193
|
-
e_3 = { error: e_3_1 };
|
|
194
|
-
return [3 /*break*/, 8];
|
|
195
|
-
case 7:
|
|
196
|
-
try {
|
|
197
|
-
if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
|
|
198
|
-
}
|
|
199
|
-
finally { if (e_3) throw e_3.error; }
|
|
200
|
-
return [7 /*endfinally*/];
|
|
201
|
-
case 8:
|
|
202
|
-
if (this._postDeserialized) {
|
|
203
|
-
result = this._postDeserialized.call(object, object);
|
|
204
|
-
if (result) {
|
|
205
|
-
return [2 /*return*/, result];
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return [2 /*return*/, object];
|
|
130
|
+
}
|
|
131
|
+
deserialize(stream) {
|
|
132
|
+
const value = new StructValue();
|
|
133
|
+
Object.defineProperties(value.value, this._extra);
|
|
134
|
+
return Syncbird.try(() => {
|
|
135
|
+
const iterator = this._fields[Symbol.iterator]();
|
|
136
|
+
const iterate = () => {
|
|
137
|
+
const result = iterator.next();
|
|
138
|
+
if (result.done) {
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
const [name, definition] = result.value;
|
|
142
|
+
return Syncbird.resolve(definition.deserialize(this.options, stream, value)).then(fieldValue => {
|
|
143
|
+
value.set(name, fieldValue);
|
|
144
|
+
return iterate();
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
return iterate();
|
|
148
|
+
}).then(value => {
|
|
149
|
+
if (this._postDeserialized) {
|
|
150
|
+
const object = value.value;
|
|
151
|
+
const result = this._postDeserialized.call(object, object);
|
|
152
|
+
if (result) {
|
|
153
|
+
return result;
|
|
209
154
|
}
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
Struct.prototype.serialize = function (init, context) {
|
|
214
|
-
var e_4, _a, e_5, _b;
|
|
215
|
-
var object = this.create(init, context);
|
|
216
|
-
var structSize = 0;
|
|
217
|
-
var fieldsInfo = [];
|
|
218
|
-
try {
|
|
219
|
-
for (var _c = __values(this._fields), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
220
|
-
var _e = __read(_d.value, 1), name = _e[0];
|
|
221
|
-
var runtimeValue = getRuntimeValue(object, name);
|
|
222
|
-
var size = runtimeValue.getSize();
|
|
223
|
-
fieldsInfo.push({ runtimeValue: runtimeValue, size: size });
|
|
224
|
-
structSize += size;
|
|
225
155
|
}
|
|
156
|
+
return value.value;
|
|
157
|
+
}).valueOrPromise();
|
|
158
|
+
}
|
|
159
|
+
serialize(init) {
|
|
160
|
+
const value = new StructValue();
|
|
161
|
+
for (const [name, definition] of this._fields) {
|
|
162
|
+
const fieldValue = definition.create(this.options, value, init[name]);
|
|
163
|
+
value.set(name, fieldValue);
|
|
226
164
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
165
|
+
let structSize = 0;
|
|
166
|
+
const fieldsInfo = [];
|
|
167
|
+
for (const [name] of this._fields) {
|
|
168
|
+
const fieldValue = value.get(name);
|
|
169
|
+
const size = fieldValue.getSize();
|
|
170
|
+
fieldsInfo.push({ fieldValue, size });
|
|
171
|
+
structSize += size;
|
|
233
172
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
runtimeValue.serialize(dataView, offset, context);
|
|
241
|
-
offset += size;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
245
|
-
finally {
|
|
246
|
-
try {
|
|
247
|
-
if (fieldsInfo_1_1 && !fieldsInfo_1_1.done && (_b = fieldsInfo_1.return)) _b.call(fieldsInfo_1);
|
|
248
|
-
}
|
|
249
|
-
finally { if (e_5) throw e_5.error; }
|
|
173
|
+
const buffer = new ArrayBuffer(structSize);
|
|
174
|
+
const dataView = new DataView(buffer);
|
|
175
|
+
let offset = 0;
|
|
176
|
+
for (const { fieldValue, size } of fieldsInfo) {
|
|
177
|
+
fieldValue.serialize(dataView, offset);
|
|
178
|
+
offset += size;
|
|
250
179
|
}
|
|
251
180
|
return buffer;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
}());
|
|
255
|
-
export { Struct };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
256
183
|
//# sourceMappingURL=struct.js.map
|
package/esm/struct.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
|
package/esm/syncbird.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Bluebird from 'bluebird';
|
|
2
|
+
export const Syncbird = Bluebird.getNewLibraryCopy();
|
|
3
|
+
const _then = Bluebird.prototype.then;
|
|
4
|
+
Syncbird.prototype.then = function (onfulfilled, onrejected) {
|
|
5
|
+
if (this.isFulfilled()) {
|
|
6
|
+
if (!onfulfilled) {
|
|
7
|
+
return this;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return Syncbird.resolve(onfulfilled(this.value()));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return _then.call(this, onfulfilled, onrejected);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
Syncbird.prototype.valueOrPromise = function () {
|
|
18
|
+
if (this.isFulfilled()) {
|
|
19
|
+
return this.value();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=syncbird.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncbird.js","sourceRoot":"","sources":["../src/syncbird.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA2BhC,MAAM,CAAC,MAAM,QAAQ,GAAmB,QAAQ,CAAC,iBAAiB,EAAS,CAAC;AAE5E,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AACtC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,UAEtB,WAAiF,EACjF,UAAmF;IAEnF,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,IAAqC,CAAC;SAChD;aAAM;YACH,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAkC,CAAC;SACvF;KACJ;SAAM;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAkC,CAAC;KACrF;AACL,CAAC,CAAC;AAED,QAAQ,CAAC,SAAiB,CAAC,cAAc,GAAG;IACzC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;KACvB;SAAM;QACH,OAAO,IAAkB,CAAC;KAC7B;AACL,CAAC,CAAC"}
|
|
@@ -1,134 +1,110 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { StructFieldDefinition, StructFieldValue } from '../basic';
|
|
2
|
+
import { Syncbird } from "../syncbird";
|
|
3
|
+
import { decodeUtf8, encodeUtf8 } from "../utils";
|
|
3
4
|
/**
|
|
4
5
|
* Base class for all types that
|
|
5
6
|
* can be converted from an ArrayBuffer when deserialized,
|
|
6
7
|
* and need to be converted to an ArrayBuffer when serializing
|
|
7
8
|
*
|
|
8
|
-
* @template
|
|
9
|
+
* @template TValue The actual TypeScript type of this type
|
|
9
10
|
* @template TTypeScriptType Optional another type (should be compatible with `TType`)
|
|
10
11
|
* specified by user when creating field definitions.
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
return ArrayBufferLikeFieldType;
|
|
16
|
-
}());
|
|
17
|
-
export { ArrayBufferLikeFieldType };
|
|
13
|
+
export class ArrayBufferLikeFieldType {
|
|
14
|
+
}
|
|
18
15
|
/** An ArrayBufferLike type that's actually an `ArrayBuffer` */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return _super.call(this) || this;
|
|
16
|
+
export class ArrayBufferFieldType extends ArrayBufferLikeFieldType {
|
|
17
|
+
constructor() {
|
|
18
|
+
super();
|
|
23
19
|
}
|
|
24
|
-
|
|
20
|
+
toArrayBuffer(value) {
|
|
25
21
|
return value;
|
|
26
|
-
}
|
|
27
|
-
|
|
22
|
+
}
|
|
23
|
+
fromArrayBuffer(arrayBuffer) {
|
|
28
24
|
return arrayBuffer;
|
|
29
|
-
}
|
|
30
|
-
|
|
25
|
+
}
|
|
26
|
+
getSize(value) {
|
|
31
27
|
return value.byteLength;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
export
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return _super.call(this) || this;
|
|
42
|
-
}
|
|
43
|
-
Uint8ClampedArrayFieldType.prototype.toArrayBuffer = function (value) {
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ArrayBufferFieldType.instance = new ArrayBufferFieldType();
|
|
31
|
+
/** Am ArrayBufferLike type that converts between `ArrayBuffer` and `Uint8ClampedArray` */
|
|
32
|
+
export class Uint8ClampedArrayFieldType extends ArrayBufferLikeFieldType {
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
}
|
|
36
|
+
toArrayBuffer(value) {
|
|
44
37
|
return value.buffer;
|
|
45
|
-
}
|
|
46
|
-
|
|
38
|
+
}
|
|
39
|
+
fromArrayBuffer(arrayBuffer) {
|
|
47
40
|
return new Uint8ClampedArray(arrayBuffer);
|
|
48
|
-
}
|
|
49
|
-
|
|
41
|
+
}
|
|
42
|
+
getSize(value) {
|
|
50
43
|
return value.byteLength;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
export
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return context.encodeUtf8(value);
|
|
64
|
-
};
|
|
65
|
-
StringFieldType.prototype.fromArrayBuffer = function (arrayBuffer, context) {
|
|
66
|
-
return context.decodeUtf8(arrayBuffer);
|
|
67
|
-
};
|
|
68
|
-
StringFieldType.prototype.getSize = function () {
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
Uint8ClampedArrayFieldType.instance = new Uint8ClampedArrayFieldType();
|
|
47
|
+
/** An ArrayBufferLike type that converts between `ArrayBuffer` and `string` */
|
|
48
|
+
export class StringFieldType extends ArrayBufferLikeFieldType {
|
|
49
|
+
toArrayBuffer(value) {
|
|
50
|
+
return encodeUtf8(value);
|
|
51
|
+
}
|
|
52
|
+
fromArrayBuffer(arrayBuffer) {
|
|
53
|
+
return decodeUtf8(arrayBuffer);
|
|
54
|
+
}
|
|
55
|
+
getSize() {
|
|
69
56
|
// Return `-1`, so `ArrayBufferLikeFieldDefinition` will
|
|
70
57
|
// convert this `value` into an `ArrayBuffer` (and cache the result),
|
|
71
58
|
// Then get the size from that `ArrayBuffer`
|
|
72
59
|
return -1;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
export
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
_this.type = type;
|
|
84
|
-
return _this;
|
|
85
|
-
}
|
|
86
|
-
ArrayBufferLikeFieldDefinition.prototype.getDeserializeSize = function (object) {
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
StringFieldType.instance = new StringFieldType();
|
|
63
|
+
const EmptyArrayBuffer = new ArrayBuffer(0);
|
|
64
|
+
export class ArrayBufferLikeFieldDefinition extends StructFieldDefinition {
|
|
65
|
+
constructor(type, options) {
|
|
66
|
+
super(options);
|
|
67
|
+
this.type = type;
|
|
68
|
+
}
|
|
69
|
+
getDeserializeSize(struct) {
|
|
87
70
|
return this.getSize();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
function ArrayBufferLikeFieldRuntimeValue() {
|
|
118
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
119
|
-
}
|
|
120
|
-
ArrayBufferLikeFieldRuntimeValue.prototype.set = function (value) {
|
|
121
|
-
_super.prototype.set.call(this, value);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* When implemented in derived classes, creates a `StructFieldValue` for the current field definition.
|
|
74
|
+
*/
|
|
75
|
+
create(options, struct, value, arrayBuffer) {
|
|
76
|
+
return new ArrayBufferLikeFieldValue(this, options, struct, value, arrayBuffer);
|
|
77
|
+
}
|
|
78
|
+
deserialize(options, stream, struct) {
|
|
79
|
+
return Syncbird.try(() => {
|
|
80
|
+
const size = this.getDeserializeSize(struct);
|
|
81
|
+
if (size === 0) {
|
|
82
|
+
return EmptyArrayBuffer;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return stream.read(size);
|
|
86
|
+
}
|
|
87
|
+
}).then(arrayBuffer => {
|
|
88
|
+
const value = this.type.fromArrayBuffer(arrayBuffer);
|
|
89
|
+
return this.create(options, struct, value, arrayBuffer);
|
|
90
|
+
}).valueOrPromise();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export class ArrayBufferLikeFieldValue extends StructFieldValue {
|
|
94
|
+
constructor(definition, options, struct, value, arrayBuffer) {
|
|
95
|
+
super(definition, options, struct, value);
|
|
96
|
+
this.arrayBuffer = arrayBuffer;
|
|
97
|
+
}
|
|
98
|
+
set(value) {
|
|
99
|
+
super.set(value);
|
|
122
100
|
this.arrayBuffer = undefined;
|
|
123
|
-
}
|
|
124
|
-
|
|
101
|
+
}
|
|
102
|
+
serialize(dataView, offset) {
|
|
125
103
|
if (!this.arrayBuffer) {
|
|
126
|
-
this.arrayBuffer = this.definition.type.toArrayBuffer(this.value
|
|
104
|
+
this.arrayBuffer = this.definition.type.toArrayBuffer(this.value);
|
|
127
105
|
}
|
|
128
106
|
new Uint8Array(dataView.buffer)
|
|
129
107
|
.set(new Uint8Array(this.arrayBuffer), offset);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
}(FieldRuntimeValue));
|
|
133
|
-
export { ArrayBufferLikeFieldRuntimeValue };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
134
110
|
//# sourceMappingURL=array-buffer.js.map
|