@aptre/protobuf-es-lite 0.2.6 → 0.2.7
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/README.md +2 -0
- package/dist/binary.js +11 -7
- package/dist/field.d.ts +2 -2
- package/dist/is-message.js +4 -2
- package/dist/json.js +8 -5
- package/dist/message.js +10 -6
- package/dist/partial.js +12 -8
- package/dist/typescript.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,6 +48,8 @@ const myMessageBin = new MyMessage(myMessage).toBinary()
|
|
|
48
48
|
declaration object containing the marshal and unmarshal functions. This allows
|
|
49
49
|
using interfaces and plain messages everywhere and does not need classes.
|
|
50
50
|
|
|
51
|
+
[ts-proto]: https://github.com/stephenh/ts-proto
|
|
52
|
+
|
|
51
53
|
This fork generates the ts-proto style with the protoc-gen-es tools:
|
|
52
54
|
|
|
53
55
|
```typescript
|
package/dist/binary.js
CHANGED
|
@@ -55,7 +55,7 @@ reader, field, wireType, options) {
|
|
|
55
55
|
}
|
|
56
56
|
break;
|
|
57
57
|
case "message":
|
|
58
|
-
const messageType = field.T;
|
|
58
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
59
59
|
if (repeated) {
|
|
60
60
|
var tgtArr = target[localName];
|
|
61
61
|
if (!Array.isArray(tgtArr)) {
|
|
@@ -105,7 +105,8 @@ function readMapEntry(field, reader, options) {
|
|
|
105
105
|
val = reader.int32();
|
|
106
106
|
break;
|
|
107
107
|
case "message":
|
|
108
|
-
|
|
108
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
109
|
+
val = readMessageField(reader, messageType.create(), messageType.fields, options, undefined);
|
|
109
110
|
break;
|
|
110
111
|
}
|
|
111
112
|
break;
|
|
@@ -126,7 +127,8 @@ function readMapEntry(field, reader, options) {
|
|
|
126
127
|
val = field.V.T.values[0].no;
|
|
127
128
|
break;
|
|
128
129
|
case "message":
|
|
129
|
-
|
|
130
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
131
|
+
val = messageType.create();
|
|
130
132
|
break;
|
|
131
133
|
}
|
|
132
134
|
}
|
|
@@ -301,17 +303,18 @@ function writeUnknownFields(message, writer) {
|
|
|
301
303
|
}
|
|
302
304
|
// Value must not be undefined
|
|
303
305
|
function writeMessageField(writer, options, field, value) {
|
|
304
|
-
const
|
|
306
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
307
|
+
const message = (0, field_wrapper_js_1.wrapField)(messageType.fieldWrapper, value);
|
|
305
308
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
306
309
|
if (field.delimited)
|
|
307
310
|
writer
|
|
308
311
|
.tag(field.no, protobuf_1.WireType.StartGroup)
|
|
309
|
-
.raw(
|
|
312
|
+
.raw(messageType.toBinary(message, options))
|
|
310
313
|
.tag(field.no, protobuf_1.WireType.EndGroup);
|
|
311
314
|
else
|
|
312
315
|
writer
|
|
313
316
|
.tag(field.no, protobuf_1.WireType.LengthDelimited)
|
|
314
|
-
.bytes(
|
|
317
|
+
.bytes(messageType.toBinary(message, options));
|
|
315
318
|
}
|
|
316
319
|
function writeScalar(writer, type, fieldNo, value) {
|
|
317
320
|
(0, assert_js_1.assert)(value !== undefined);
|
|
@@ -394,9 +397,10 @@ function writeMapEntry(writer, options, field, key, value) {
|
|
|
394
397
|
break;
|
|
395
398
|
case "message":
|
|
396
399
|
(0, assert_js_1.assert)(value !== undefined);
|
|
400
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
397
401
|
writer
|
|
398
402
|
.tag(2, protobuf_1.WireType.LengthDelimited)
|
|
399
|
-
.bytes(
|
|
403
|
+
.bytes(messageType.toBinary(value, options));
|
|
400
404
|
break;
|
|
401
405
|
}
|
|
402
406
|
writer.join();
|
package/dist/field.d.ts
CHANGED
|
@@ -220,7 +220,7 @@ interface fiMessage extends fiShared {
|
|
|
220
220
|
/**
|
|
221
221
|
* Message handler for the field.
|
|
222
222
|
*/
|
|
223
|
-
readonly T: MessageType;
|
|
223
|
+
readonly T: MessageType | (() => MessageType);
|
|
224
224
|
/**
|
|
225
225
|
* Is the field repeated?
|
|
226
226
|
*/
|
|
@@ -302,7 +302,7 @@ interface fiMap extends fiShared {
|
|
|
302
302
|
readonly T: EnumType;
|
|
303
303
|
} | {
|
|
304
304
|
readonly kind: "message";
|
|
305
|
-
readonly T: MessageType;
|
|
305
|
+
readonly T: MessageType | (() => MessageType);
|
|
306
306
|
};
|
|
307
307
|
/**
|
|
308
308
|
* Is the field repeated? Never true for maps.
|
package/dist/is-message.js
CHANGED
|
@@ -38,7 +38,8 @@ function isCompleteField(value, field) {
|
|
|
38
38
|
case "scalar":
|
|
39
39
|
return true;
|
|
40
40
|
case "message":
|
|
41
|
-
|
|
41
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
42
|
+
return isCompleteMessage(value, messageType.fields.list());
|
|
42
43
|
case "enum":
|
|
43
44
|
return typeof value === "number";
|
|
44
45
|
case "map":
|
|
@@ -50,7 +51,8 @@ function isCompleteField(value, field) {
|
|
|
50
51
|
case "enum":
|
|
51
52
|
return typeof val === "number";
|
|
52
53
|
case "message":
|
|
53
|
-
|
|
54
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
55
|
+
return isCompleteMessage(val, messageType.fields.list());
|
|
54
56
|
default:
|
|
55
57
|
return valueKind;
|
|
56
58
|
}
|
package/dist/json.js
CHANGED
|
@@ -175,7 +175,8 @@ function readField(target, jsonValue, field, options) {
|
|
|
175
175
|
}
|
|
176
176
|
switch (field.kind) {
|
|
177
177
|
case "message":
|
|
178
|
-
|
|
178
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
179
|
+
targetArray.push(messageType.fromJson(jsonItem, options));
|
|
179
180
|
break;
|
|
180
181
|
case "enum":
|
|
181
182
|
const enumValue = readEnum(field.T, jsonItem, options.ignoreUnknownFields, true);
|
|
@@ -226,7 +227,8 @@ function readField(target, jsonValue, field, options) {
|
|
|
226
227
|
}
|
|
227
228
|
switch (field.V.kind) {
|
|
228
229
|
case "message":
|
|
229
|
-
|
|
230
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
231
|
+
targetMap[key] = messageType.fromJson(jsonMapValue, options);
|
|
230
232
|
break;
|
|
231
233
|
case "enum":
|
|
232
234
|
const enumValue = readEnum(field.V.T, jsonMapValue, options.ignoreUnknownFields, true);
|
|
@@ -256,7 +258,7 @@ function readField(target, jsonValue, field, options) {
|
|
|
256
258
|
}
|
|
257
259
|
switch (field.kind) {
|
|
258
260
|
case "message":
|
|
259
|
-
const messageType = field.T;
|
|
261
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
260
262
|
if (jsonValue === null &&
|
|
261
263
|
messageType.typeName != "google.protobuf.Value") {
|
|
262
264
|
return;
|
|
@@ -521,7 +523,8 @@ function writeField(field, value, options) {
|
|
|
521
523
|
case "message":
|
|
522
524
|
for (const [entryKey, entryValue] of entries) {
|
|
523
525
|
// JSON standard allows only (double quoted) string as property key
|
|
524
|
-
|
|
526
|
+
const messageType = typeof field.V.T === "function" ? field.V.T() : field.V.T;
|
|
527
|
+
jsonObj[entryKey.toString()] = messageType.toJson(entryValue, options);
|
|
525
528
|
}
|
|
526
529
|
break;
|
|
527
530
|
case "enum":
|
|
@@ -566,7 +569,7 @@ function writeField(field, value, options) {
|
|
|
566
569
|
case "enum":
|
|
567
570
|
return writeEnum(field.T, value, options.enumAsInteger);
|
|
568
571
|
case "message":
|
|
569
|
-
return (0, field_wrapper_js_1.wrapField)(field.T.fieldWrapper, value).toJson(options);
|
|
572
|
+
return (0, field_wrapper_js_1.wrapField)((typeof field.T === "function" ? field.T() : field.T).fieldWrapper, value).toJson(options);
|
|
570
573
|
}
|
|
571
574
|
}
|
|
572
575
|
function writeScalar(type, value) {
|
package/dist/message.js
CHANGED
|
@@ -41,7 +41,8 @@ function compareMessages(fields, a, b) {
|
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- repeated fields are never "map"
|
|
42
42
|
switch (m.kind) {
|
|
43
43
|
case "message":
|
|
44
|
-
|
|
44
|
+
const messageType = typeof m.T === "function" ? m.T() : m.T;
|
|
45
|
+
return va.every((a, i) => messageType.equals(a, vb[i]));
|
|
45
46
|
case "scalar":
|
|
46
47
|
return va.every((a, i) => (0, scalar_js_1.scalarEquals)(m.T, a, vb[i]));
|
|
47
48
|
case "enum":
|
|
@@ -51,7 +52,7 @@ function compareMessages(fields, a, b) {
|
|
|
51
52
|
}
|
|
52
53
|
switch (m.kind) {
|
|
53
54
|
case "message":
|
|
54
|
-
return m.T.equals(va, vb);
|
|
55
|
+
return (typeof m.T === "function" ? m.T() : m.T).equals(va, vb);
|
|
55
56
|
case "enum":
|
|
56
57
|
return (0, scalar_js_1.scalarEquals)(protobuf_1.ScalarType.INT32, va, vb);
|
|
57
58
|
case "scalar":
|
|
@@ -67,7 +68,8 @@ function compareMessages(fields, a, b) {
|
|
|
67
68
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- oneof fields are never "map"
|
|
68
69
|
switch (s.kind) {
|
|
69
70
|
case "message":
|
|
70
|
-
|
|
71
|
+
const messageType = typeof s.T === "function" ? s.T() : s.T;
|
|
72
|
+
return messageType.equals(va.value, vb.value);
|
|
71
73
|
case "enum":
|
|
72
74
|
return (0, scalar_js_1.scalarEquals)(protobuf_1.ScalarType.INT32, va.value, vb.value);
|
|
73
75
|
case "scalar":
|
|
@@ -78,7 +80,7 @@ function compareMessages(fields, a, b) {
|
|
|
78
80
|
const keys = Object.keys(va).concat(Object.keys(vb));
|
|
79
81
|
switch (m.V.kind) {
|
|
80
82
|
case "message":
|
|
81
|
-
const messageType = m.V.T;
|
|
83
|
+
const messageType = typeof m.V.T === "function" ? m.V.T() : m.V.T;
|
|
82
84
|
return keys.every((k) => messageType.equals(va[k], vb[k]));
|
|
83
85
|
case "enum":
|
|
84
86
|
return keys.every((k) => (0, scalar_js_1.scalarEquals)(protobuf_1.ScalarType.INT32, va[k], vb[k]));
|
|
@@ -96,7 +98,8 @@ function cloneSingularField(value, fieldInfo) {
|
|
|
96
98
|
return value;
|
|
97
99
|
}
|
|
98
100
|
if (fieldInfo.kind === "message") {
|
|
99
|
-
|
|
101
|
+
const messageType = typeof fieldInfo.T === "function" ? fieldInfo.T() : fieldInfo.T;
|
|
102
|
+
return cloneMessage(value, messageType.fields);
|
|
100
103
|
}
|
|
101
104
|
if (fieldInfo.kind === "oneof") {
|
|
102
105
|
if (value.case === undefined) {
|
|
@@ -237,7 +240,8 @@ function createMessage(fields) {
|
|
|
237
240
|
message[field.localName] = undefined;
|
|
238
241
|
continue;
|
|
239
242
|
}
|
|
240
|
-
|
|
243
|
+
const messageType = typeof field.T === "function" ? field.T() : field.T;
|
|
244
|
+
message[field.localName] = createMessage(messageType.fields);
|
|
241
245
|
break;
|
|
242
246
|
case "map":
|
|
243
247
|
message[field.localName] = {};
|
package/dist/partial.js
CHANGED
|
@@ -22,10 +22,13 @@ function applyPartialMessage(source, target, fields) {
|
|
|
22
22
|
}
|
|
23
23
|
const sourceField = member.findField(sk);
|
|
24
24
|
let val = s[localName].value;
|
|
25
|
-
if (sourceField
|
|
26
|
-
sourceField.
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if (sourceField?.kind == "message") {
|
|
26
|
+
const messageType = typeof sourceField.T === "function"
|
|
27
|
+
? sourceField.T()
|
|
28
|
+
: sourceField.T;
|
|
29
|
+
if (!(0, is_message_js_1.isCompleteMessage)(val, messageType.fields.list())) {
|
|
30
|
+
val = messageType.create(val);
|
|
31
|
+
}
|
|
29
32
|
}
|
|
30
33
|
else if (sourceField &&
|
|
31
34
|
sourceField.kind === "scalar" &&
|
|
@@ -58,7 +61,7 @@ function applyPartialMessage(source, target, fields) {
|
|
|
58
61
|
}
|
|
59
62
|
break;
|
|
60
63
|
case "message":
|
|
61
|
-
const messageType = member.V.T;
|
|
64
|
+
const messageType = typeof member.V.T === "function" ? member.V.T() : member.V.T;
|
|
62
65
|
for (const k of Object.keys(s[localName])) {
|
|
63
66
|
let val = s[localName][k];
|
|
64
67
|
if (!messageType.fieldWrapper) {
|
|
@@ -72,7 +75,7 @@ function applyPartialMessage(source, target, fields) {
|
|
|
72
75
|
}
|
|
73
76
|
break;
|
|
74
77
|
case "message":
|
|
75
|
-
const mt = member.T;
|
|
78
|
+
const mt = typeof member.T === "function" ? member.T() : member.T;
|
|
76
79
|
if (member.repeated) {
|
|
77
80
|
t[localName] = s[localName].map((val) => (0, is_message_js_1.isCompleteMessage)(val, mt.fields.list()) ? val : mt.create(val));
|
|
78
81
|
}
|
|
@@ -89,9 +92,10 @@ function applyPartialMessage(source, target, fields) {
|
|
|
89
92
|
}
|
|
90
93
|
}
|
|
91
94
|
else {
|
|
92
|
-
|
|
95
|
+
const messageType = mt;
|
|
96
|
+
t[localName] = (0, is_message_js_1.isCompleteMessage)(val, messageType.fields.list())
|
|
93
97
|
? val
|
|
94
|
-
:
|
|
98
|
+
: messageType.create(val);
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
101
|
break;
|
package/dist/typescript.js
CHANGED
|
@@ -205,7 +205,7 @@ function getFieldInfoLiteral(field) {
|
|
|
205
205
|
e.push(`V: {kind: "scalar", T: `, field.mapValue.scalar, ` /* ScalarType.`, protobuf_1.ScalarType[field.mapValue.scalar], ` */}, `);
|
|
206
206
|
break;
|
|
207
207
|
case "message":
|
|
208
|
-
e.push(`V: {kind: "message", T: `, field.mapValue.message, `}, `);
|
|
208
|
+
e.push(`V: {kind: "message", T: () => `, field.mapValue.message, `}, `);
|
|
209
209
|
break;
|
|
210
210
|
case "enum":
|
|
211
211
|
e.push(`V: {kind: "enum", T: `, field.mapValue.enum, `}, `);
|
|
@@ -213,7 +213,7 @@ function getFieldInfoLiteral(field) {
|
|
|
213
213
|
}
|
|
214
214
|
break;
|
|
215
215
|
case "message":
|
|
216
|
-
e.push(`kind: "message", T: `, field.message, `, `);
|
|
216
|
+
e.push(`kind: "message", T: () => `, field.message, `, `);
|
|
217
217
|
if (field.proto.type === protobuf_1.FieldDescriptorProto_Type.GROUP) {
|
|
218
218
|
e.push(`delimited: true, `);
|
|
219
219
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aptre/protobuf-es-lite",
|
|
3
3
|
"description": "Lightweight Protobuf codegen for TypeScript and JavaScript.",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.7",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "git+ssh://git@github.com/aperturerobotics/protobuf-es-lite.git"
|