protons 5.0.0 → 6.0.0

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 CHANGED
@@ -12,6 +12,7 @@
12
12
 
13
13
  - [Install](#install)
14
14
  - [Usage](#usage)
15
+ - [Differences from protobuf.js](#differences-from-protobufjs)
15
16
  - [Contribute](#contribute)
16
17
  - [License](#license)
17
18
  - [Contribute](#contribute-1)
@@ -59,6 +60,21 @@ console.info(decoded.message)
59
60
  // 'hello world'
60
61
  ```
61
62
 
63
+ ## Differences from protobuf.js
64
+
65
+ This module uses the internal reader/writer from `protobuf.js` as it is highly optimised and there's no point reinventing the wheel.
66
+
67
+ It does have one or two differences:
68
+
69
+ 1. Supports `proto3` semantics only
70
+ 2. All 64 bit values are represented as `BigInt`s and not `Long`s (e.g. `int64`, `uint64`, `sint64` etc)
71
+ 3. Unset `optional` fields are set on the deserialized object forms as `undefined` instead of the default values
72
+ 4. `singular` fields set to default values are not serialized and are set to default values when deserialized if not set - protobuf.js [diverges from the language guide](https://github.com/protobufjs/protobuf.js/issues/1468#issuecomment-745177012) around this feature
73
+
74
+ ## Missing features
75
+
76
+ Some features are missing `OneOf`, `Map`s, etc due to them not being needed so far in ipfs/libp2p. If these features are important to you, please open PRs implementing them along with tests comparing the generated bytes to `protobuf.js` and `pbjs`.
77
+
62
78
  ## Contribute
63
79
 
64
80
  Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/protons/issues)!
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,oBAAY,WAAW;IACrB,MAAM,IAAI;IACV,KAAK,IAAA;IACL,gBAAgB,IAAA;IAChB,WAAW,IAAA;IACX,SAAS,IAAA;IACT,KAAK,IAAA;CACN;AA+bD,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,iBAsC3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,oBAAY,WAAW;IACrB,MAAM,IAAI;IACV,KAAK,IAAA;IACL,gBAAgB,IAAA;IAChB,WAAW,IAAA;IACX,SAAS,IAAA;IACT,KAAK,IAAA;CACN;AA6jBD,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,iBAyC3D"}
package/dist/src/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable max-depth */
1
2
  import { main as pbjs } from 'protobufjs-cli/pbjs.js';
2
3
  import path from 'path';
3
4
  import { promisify } from 'util';
@@ -33,28 +34,26 @@ const types = {
33
34
  uint64: 'bigint'
34
35
  };
35
36
  const encoderGenerators = {
36
- bool: (val) => `writer.bool(${val})`,
37
- bytes: (val) => `writer.bytes(${val})`,
38
- double: (val) => `writer.double(${val})`,
39
- // enumeration: (val) => `writer.double(${val})`,
40
- fixed32: (val) => `writer.fixed32(${val})`,
41
- fixed64: (val) => `writer.fixed64(${val})`,
42
- float: (val) => `writer.float(${val})`,
43
- int32: (val) => `writer.int32(${val})`,
44
- int64: (val) => `writer.int64(${val})`,
45
- sfixed32: (val) => `writer.sfixed32(${val})`,
46
- sfixed64: (val) => `writer.sfixed64(${val})`,
47
- sint32: (val) => `writer.sint32(${val})`,
48
- sint64: (val) => `writer.sint64(${val})`,
49
- string: (val) => `writer.string(${val})`,
50
- uint32: (val) => `writer.uint32(${val})`,
51
- uint64: (val) => `writer.uint64(${val})`
37
+ bool: (val) => `w.bool(${val})`,
38
+ bytes: (val) => `w.bytes(${val})`,
39
+ double: (val) => `w.double(${val})`,
40
+ fixed32: (val) => `w.fixed32(${val})`,
41
+ fixed64: (val) => `w.fixed64(${val})`,
42
+ float: (val) => `w.float(${val})`,
43
+ int32: (val) => `w.int32(${val})`,
44
+ int64: (val) => `w.int64(${val})`,
45
+ sfixed32: (val) => `w.sfixed32(${val})`,
46
+ sfixed64: (val) => `w.sfixed64(${val})`,
47
+ sint32: (val) => `w.sint32(${val})`,
48
+ sint64: (val) => `w.sint64(${val})`,
49
+ string: (val) => `w.string(${val})`,
50
+ uint32: (val) => `w.uint32(${val})`,
51
+ uint64: (val) => `w.uint64(${val})`
52
52
  };
53
53
  const decoderGenerators = {
54
54
  bool: () => 'reader.bool()',
55
55
  bytes: () => 'reader.bytes()',
56
56
  double: () => 'reader.double()',
57
- // enumeration: () => `writer.double(${val})`,
58
57
  fixed32: () => 'reader.fixed32()',
59
58
  fixed64: () => 'reader.fixed64()',
60
59
  float: () => 'reader.float()',
@@ -68,6 +67,40 @@ const decoderGenerators = {
68
67
  uint32: () => 'reader.uint32()',
69
68
  uint64: () => 'reader.uint64()'
70
69
  };
70
+ const defaultValueGenerators = {
71
+ bool: () => 'false',
72
+ bytes: () => 'new Uint8Array(0)',
73
+ double: () => '0',
74
+ fixed32: () => '0',
75
+ fixed64: () => '0n',
76
+ float: () => '0',
77
+ int32: () => '0',
78
+ int64: () => '0n',
79
+ sfixed32: () => '0',
80
+ sfixed64: () => '0n',
81
+ sint32: () => '0',
82
+ sint64: () => '0n',
83
+ string: () => "''",
84
+ uint32: () => '0',
85
+ uint64: () => '0n'
86
+ };
87
+ const defaultValueTestGenerators = {
88
+ bool: (field) => `${field} !== false`,
89
+ bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`,
90
+ double: (field) => `${field} !== 0`,
91
+ fixed32: (field) => `${field} !== 0`,
92
+ fixed64: (field) => `${field} !== 0n`,
93
+ float: (field) => `${field} !== 0`,
94
+ int32: (field) => `${field} !== 0`,
95
+ int64: (field) => `${field} !== 0n`,
96
+ sfixed32: (field) => `${field} !== 0`,
97
+ sfixed64: (field) => `${field} !== 0n`,
98
+ sint32: (field) => `${field} !== 0`,
99
+ sint64: (field) => `${field} !== 0n`,
100
+ string: (field) => `${field} !== ''`,
101
+ uint32: (field) => `${field} !== 0`,
102
+ uint64: (field) => `${field} !== 0n`
103
+ };
71
104
  function findTypeName(typeName, classDef, moduleDef) {
72
105
  if (types[typeName] != null) {
73
106
  return types[typeName];
@@ -101,6 +134,55 @@ function findDef(typeName, classDef, moduleDef) {
101
134
  }
102
135
  throw new Error(`Could not resolve type name "${typeName}"`);
103
136
  }
137
+ function createDefaultObject(fields, messageDef, moduleDef) {
138
+ const output = Object.entries(fields)
139
+ .map(([name, fieldDef]) => {
140
+ if (fieldDef.repeated) {
141
+ return `${name}: []`;
142
+ }
143
+ if (fieldDef.optional) {
144
+ return '';
145
+ }
146
+ const type = fieldDef.type;
147
+ let defaultValue;
148
+ if (defaultValueGenerators[type] != null) {
149
+ defaultValue = defaultValueGenerators[type]();
150
+ }
151
+ else {
152
+ const def = findDef(fieldDef.type, messageDef, moduleDef);
153
+ if (isEnumDef(def)) {
154
+ // select lowest-value enum - should be 0 but it's not guaranteed
155
+ const val = Object.entries(def.values)
156
+ .sort((a, b) => {
157
+ if (a[1] < b[1]) {
158
+ return 1;
159
+ }
160
+ if (a[1] > b[1]) {
161
+ return -1;
162
+ }
163
+ return 0;
164
+ })
165
+ .pop();
166
+ if (val == null) {
167
+ throw new Error(`Could not find default enum value for ${def.fullName}`);
168
+ }
169
+ defaultValue = `${def.name}.${val[0]}`;
170
+ }
171
+ else {
172
+ defaultValue = 'undefined';
173
+ }
174
+ }
175
+ return `${name}: ${defaultValue}`;
176
+ })
177
+ .filter(Boolean)
178
+ .join(',\n ');
179
+ if (output !== '') {
180
+ return `
181
+ ${output}
182
+ `;
183
+ }
184
+ return '';
185
+ }
104
186
  const encoders = {
105
187
  bool: 'bool',
106
188
  bytes: 'bytes',
@@ -195,41 +277,22 @@ export interface ${messageDef.name} {
195
277
  .join('\n ')
196
278
  .trim()}
197
279
  }`;
198
- const ensureArrayProps = Object.entries(fields)
199
- .map(([name, fieldDef]) => {
200
- // make sure repeated fields have an array if not set
201
- if (fieldDef.rule === 'repeated') {
202
- return ` obj.${name} = obj.${name} ?? []`;
203
- }
204
- return '';
205
- }).filter(Boolean).join('\n');
206
- const ensureRequiredFields = Object.entries(fields)
207
- .map(([name, fieldDef]) => {
208
- // make sure required fields are set
209
- if (!fieldDef.optional) {
210
- return `
211
- if (obj.${name} == null) {
212
- throw new Error('Protocol error: value for required field "${name}" was not found in protobuf')
213
- }`;
214
- }
215
- return '';
216
- }).filter(Boolean).join('\n');
217
280
  interfaceCodecDef = `
218
281
  let _codec: Codec<${messageDef.name}>
219
282
 
220
283
  export const codec = (): Codec<${messageDef.name}> => {
221
284
  if (_codec == null) {
222
- _codec = message<${messageDef.name}>((obj, writer, opts = {}) => {
285
+ _codec = message<${messageDef.name}>((obj, w, opts = {}) => {
223
286
  if (opts.lengthDelimited !== false) {
224
- writer.fork()
287
+ w.fork()
225
288
  }
226
289
  ${Object.entries(fields)
227
290
  .map(([name, fieldDef]) => {
228
291
  let codec = encoders[fieldDef.type];
229
292
  let type = fieldDef.type;
293
+ let typeName = '';
230
294
  if (codec == null) {
231
- const def = findDef(fieldDef.type, messageDef, moduleDef);
232
- if (isEnumDef(def)) {
295
+ if (fieldDef.enum) {
233
296
  moduleDef.imports.add('enumeration');
234
297
  type = 'enum';
235
298
  }
@@ -237,31 +300,58 @@ ${Object.entries(fields)
237
300
  moduleDef.imports.add('message');
238
301
  type = 'message';
239
302
  }
240
- const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
303
+ typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
241
304
  codec = `${typeName}.codec()`;
242
305
  }
243
- return `
244
- if (obj.${name} != null) {${fieldDef.rule === 'repeated'
245
- ? `
306
+ let valueTest = `obj.${name} != null`;
307
+ // proto3 singular fields should only be written out if they are not the default value
308
+ if (!fieldDef.optional && !fieldDef.repeated) {
309
+ if (defaultValueTestGenerators[type] != null) {
310
+ valueTest = `opts.writeDefaults === true || ${defaultValueTestGenerators[type](`obj.${name}`)}`;
311
+ }
312
+ else if (type === 'enum') {
313
+ // handle enums
314
+ valueTest = `opts.writeDefaults === true || (obj.${name} != null && __${fieldDef.type}Values[obj.${name}] !== 0)`;
315
+ }
316
+ }
317
+ function createWriteField(valueVar) {
318
+ const id = (fieldDef.id << 3) | codecTypes[type];
319
+ let writeField = `w.uint32(${id})
320
+ ${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}`;
321
+ if (type === 'message') {
322
+ // message fields are only written if they have values
323
+ writeField = `w.uint32(${id})
324
+ ${typeName}.codec().encode(${valueVar}, w, {
325
+ writeDefaults: ${Boolean(fieldDef.repeated).toString()}
326
+ })`;
327
+ }
328
+ return writeField;
329
+ }
330
+ let writeField = createWriteField(`obj.${name}`);
331
+ if (fieldDef.repeated) {
332
+ writeField = `
246
333
  for (const value of obj.${name}) {
247
- writer.uint32(${(fieldDef.id << 3) | codecTypes[type]})
248
- ${encoderGenerators[type] == null ? `${codec}.encode(value, writer)` : encoderGenerators[type]('value')}
249
- }`
250
- : `
251
- writer.uint32(${(fieldDef.id << 3) | codecTypes[type]})
252
- ${encoderGenerators[type] == null ? `${codec}.encode(obj.${name}, writer)` : encoderGenerators[type](`obj.${name}`)}`}
253
- }${fieldDef.optional
254
- ? ''
255
- : ` else {
256
- throw new Error('Protocol error: required field "${name}" was not found in object')
257
- }`}`;
334
+ ${createWriteField('value')
335
+ .split('\n')
336
+ .map(s => {
337
+ const trimmed = s.trim();
338
+ return trimmed === '' ? trimmed : ` ${s}`;
339
+ })
340
+ .join('\n')}
341
+ }
342
+ `.trim();
343
+ }
344
+ return `
345
+ if (${valueTest}) {
346
+ ${writeField}
347
+ }`;
258
348
  }).join('\n')}
259
349
 
260
350
  if (opts.lengthDelimited !== false) {
261
- writer.ldelim()
351
+ w.ldelim()
262
352
  }
263
353
  }, (reader, length) => {
264
- const obj: any = {}
354
+ const obj: any = {${createDefaultObject(fields, messageDef, moduleDef)}}
265
355
 
266
356
  const end = length == null ? reader.len : reader.pos + length
267
357
 
@@ -274,8 +364,7 @@ ${Object.entries(fields)
274
364
  let codec = encoders[fieldDef.type];
275
365
  let type = fieldDef.type;
276
366
  if (codec == null) {
277
- const def = findDef(fieldDef.type, messageDef, moduleDef);
278
- if (isEnumDef(def)) {
367
+ if (fieldDef.enum) {
279
368
  moduleDef.imports.add('enumeration');
280
369
  type = 'enum';
281
370
  }
@@ -288,7 +377,6 @@ ${Object.entries(fields)
288
377
  }
289
378
  return `case ${fieldDef.id}:${fieldDef.rule === 'repeated'
290
379
  ? `
291
- obj.${name} = obj.${name} ?? []
292
380
  obj.${name}.push(${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()})`
293
381
  : `
294
382
  obj.${name} = ${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`}
@@ -298,7 +386,7 @@ ${Object.entries(fields)
298
386
  reader.skipType(tag & 7)
299
387
  break
300
388
  }
301
- }${ensureArrayProps !== '' ? `\n\n${ensureArrayProps}` : ''}${ensureRequiredFields !== '' ? `\n${ensureRequiredFields}` : ''}
389
+ }
302
390
 
303
391
  return obj
304
392
  })
@@ -346,8 +434,9 @@ function defineModule(def) {
346
434
  }
347
435
  if (classDef.fields != null) {
348
436
  for (const name of Object.keys(classDef.fields)) {
349
- classDef.fields[name].repeated = classDef.fields[name].rule === 'repeated';
350
- classDef.fields[name].optional = !classDef.fields[name].repeated && classDef.fields[name].options?.proto3_optional === true;
437
+ const fieldDef = classDef.fields[name];
438
+ fieldDef.repeated = fieldDef.rule === 'repeated';
439
+ fieldDef.optional = !fieldDef.repeated && fieldDef.options?.proto3_optional === true;
351
440
  }
352
441
  }
353
442
  if (parent == null) {
@@ -356,6 +445,25 @@ function defineModule(def) {
356
445
  }
357
446
  }
358
447
  defineMessage(defs);
448
+ // set enum/message fields now all messages have been defined
449
+ for (const className of Object.keys(defs)) {
450
+ const classDef = defs[className];
451
+ if (classDef.fields != null) {
452
+ for (const name of Object.keys(classDef.fields)) {
453
+ const fieldDef = classDef.fields[name];
454
+ if (types[fieldDef.type] == null) {
455
+ const def = findDef(fieldDef.type, classDef, moduleDef);
456
+ fieldDef.enum = isEnumDef(def);
457
+ fieldDef.message = !fieldDef.enum;
458
+ if (fieldDef.message && !fieldDef.repeated) {
459
+ // the default type for a message is unset so they are always optional
460
+ // https://developers.google.com/protocol-buffers/docs/proto3#default
461
+ fieldDef.optional = true;
462
+ }
463
+ }
464
+ }
465
+ }
466
+ }
359
467
  for (const className of Object.keys(defs)) {
360
468
  const classDef = defs[className];
361
469
  moduleDef.compiled.push(compileMessage(classDef, moduleDef));
@@ -372,7 +480,9 @@ export async function generate(source, flags) {
372
480
  const moduleDef = defineModule(def);
373
481
  let lines = [
374
482
  '/* eslint-disable import/export */',
483
+ '/* eslint-disable complexity */',
375
484
  '/* eslint-disable @typescript-eslint/no-namespace */',
485
+ '/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */',
376
486
  ''
377
487
  ];
378
488
  if (moduleDef.imports.size > 0) {
@@ -390,6 +500,7 @@ export async function generate(source, flags) {
390
500
  ...moduleDef.compiled
391
501
  ];
392
502
  const content = lines.join('\n').trim();
393
- await fs.writeFile(pathWithExtension(source, '.ts', flags.output), content + '\n');
503
+ const outputPath = pathWithExtension(source, '.ts', flags.output);
504
+ await fs.writeFile(outputPath, content + '\n');
394
505
  }
395
506
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "protons",
3
- "version": "5.0.0",
3
+ "version": "6.0.0",
4
4
  "description": "Protobuf to ts transpiler",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/protons/tree/master/packages/protons#readme",
@@ -161,7 +161,7 @@
161
161
  "long": "^5.2.0",
162
162
  "pbjs": "^0.0.14",
163
163
  "protobufjs": "^7.0.0",
164
- "protons-runtime": "^3.0.0",
164
+ "protons-runtime": "^4.0.0",
165
165
  "uint8arraylist": "^2.3.2",
166
166
  "uint8arrays": "^3.1.0"
167
167
  }
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
+ /* eslint-disable max-depth */
2
+
1
3
  import { main as pbjs } from 'protobufjs-cli/pbjs.js'
2
4
  import path from 'path'
3
5
  import { promisify } from 'util'
@@ -36,29 +38,27 @@ const types: Record<string, string> = {
36
38
  }
37
39
 
38
40
  const encoderGenerators: Record<string, (val: string) => string> = {
39
- bool: (val) => `writer.bool(${val})`,
40
- bytes: (val) => `writer.bytes(${val})`,
41
- double: (val) => `writer.double(${val})`,
42
- // enumeration: (val) => `writer.double(${val})`,
43
- fixed32: (val) => `writer.fixed32(${val})`,
44
- fixed64: (val) => `writer.fixed64(${val})`,
45
- float: (val) => `writer.float(${val})`,
46
- int32: (val) => `writer.int32(${val})`,
47
- int64: (val) => `writer.int64(${val})`,
48
- sfixed32: (val) => `writer.sfixed32(${val})`,
49
- sfixed64: (val) => `writer.sfixed64(${val})`,
50
- sint32: (val) => `writer.sint32(${val})`,
51
- sint64: (val) => `writer.sint64(${val})`,
52
- string: (val) => `writer.string(${val})`,
53
- uint32: (val) => `writer.uint32(${val})`,
54
- uint64: (val) => `writer.uint64(${val})`
41
+ bool: (val) => `w.bool(${val})`,
42
+ bytes: (val) => `w.bytes(${val})`,
43
+ double: (val) => `w.double(${val})`,
44
+ fixed32: (val) => `w.fixed32(${val})`,
45
+ fixed64: (val) => `w.fixed64(${val})`,
46
+ float: (val) => `w.float(${val})`,
47
+ int32: (val) => `w.int32(${val})`,
48
+ int64: (val) => `w.int64(${val})`,
49
+ sfixed32: (val) => `w.sfixed32(${val})`,
50
+ sfixed64: (val) => `w.sfixed64(${val})`,
51
+ sint32: (val) => `w.sint32(${val})`,
52
+ sint64: (val) => `w.sint64(${val})`,
53
+ string: (val) => `w.string(${val})`,
54
+ uint32: (val) => `w.uint32(${val})`,
55
+ uint64: (val) => `w.uint64(${val})`
55
56
  }
56
57
 
57
58
  const decoderGenerators: Record<string, () => string> = {
58
59
  bool: () => 'reader.bool()',
59
60
  bytes: () => 'reader.bytes()',
60
61
  double: () => 'reader.double()',
61
- // enumeration: () => `writer.double(${val})`,
62
62
  fixed32: () => 'reader.fixed32()',
63
63
  fixed64: () => 'reader.fixed64()',
64
64
  float: () => 'reader.float()',
@@ -73,6 +73,42 @@ const decoderGenerators: Record<string, () => string> = {
73
73
  uint64: () => 'reader.uint64()'
74
74
  }
75
75
 
76
+ const defaultValueGenerators: Record<string, () => string> = {
77
+ bool: () => 'false',
78
+ bytes: () => 'new Uint8Array(0)',
79
+ double: () => '0',
80
+ fixed32: () => '0',
81
+ fixed64: () => '0n',
82
+ float: () => '0',
83
+ int32: () => '0',
84
+ int64: () => '0n',
85
+ sfixed32: () => '0',
86
+ sfixed64: () => '0n',
87
+ sint32: () => '0',
88
+ sint64: () => '0n',
89
+ string: () => "''",
90
+ uint32: () => '0',
91
+ uint64: () => '0n'
92
+ }
93
+
94
+ const defaultValueTestGenerators: Record<string, (field: string) => string> = {
95
+ bool: (field) => `${field} !== false`,
96
+ bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`,
97
+ double: (field) => `${field} !== 0`,
98
+ fixed32: (field) => `${field} !== 0`,
99
+ fixed64: (field) => `${field} !== 0n`,
100
+ float: (field) => `${field} !== 0`,
101
+ int32: (field) => `${field} !== 0`,
102
+ int64: (field) => `${field} !== 0n`,
103
+ sfixed32: (field) => `${field} !== 0`,
104
+ sfixed64: (field) => `${field} !== 0n`,
105
+ sint32: (field) => `${field} !== 0`,
106
+ sint64: (field) => `${field} !== 0n`,
107
+ string: (field) => `${field} !== ''`,
108
+ uint32: (field) => `${field} !== 0`,
109
+ uint64: (field) => `${field} !== 0n`
110
+ }
111
+
76
112
  function findTypeName (typeName: string, classDef: MessageDef, moduleDef: ModuleDef): string {
77
113
  if (types[typeName] != null) {
78
114
  return types[typeName]
@@ -117,6 +153,65 @@ function findDef (typeName: string, classDef: MessageDef, moduleDef: ModuleDef):
117
153
  throw new Error(`Could not resolve type name "${typeName}"`)
118
154
  }
119
155
 
156
+ function createDefaultObject (fields: Record<string, FieldDef>, messageDef: MessageDef, moduleDef: ModuleDef): string {
157
+ const output = Object.entries(fields)
158
+ .map(([name, fieldDef]) => {
159
+ if (fieldDef.repeated) {
160
+ return `${name}: []`
161
+ }
162
+
163
+ if (fieldDef.optional) {
164
+ return ''
165
+ }
166
+
167
+ const type: string = fieldDef.type
168
+ let defaultValue
169
+
170
+ if (defaultValueGenerators[type] != null) {
171
+ defaultValue = defaultValueGenerators[type]()
172
+ } else {
173
+ const def = findDef(fieldDef.type, messageDef, moduleDef)
174
+
175
+ if (isEnumDef(def)) {
176
+ // select lowest-value enum - should be 0 but it's not guaranteed
177
+ const val = Object.entries(def.values)
178
+ .sort((a, b) => {
179
+ if (a[1] < b[1]) {
180
+ return 1
181
+ }
182
+
183
+ if (a[1] > b[1]) {
184
+ return -1
185
+ }
186
+
187
+ return 0
188
+ })
189
+ .pop()
190
+
191
+ if (val == null) {
192
+ throw new Error(`Could not find default enum value for ${def.fullName}`)
193
+ }
194
+
195
+ defaultValue = `${def.name}.${val[0]}`
196
+ } else {
197
+ defaultValue = 'undefined'
198
+ }
199
+ }
200
+
201
+ return `${name}: ${defaultValue}`
202
+ })
203
+ .filter(Boolean)
204
+ .join(',\n ')
205
+
206
+ if (output !== '') {
207
+ return `
208
+ ${output}
209
+ `
210
+ }
211
+
212
+ return ''
213
+ }
214
+
120
215
  const encoders: Record<string, string> = {
121
216
  bool: 'bool',
122
217
  bytes: 'bytes',
@@ -183,6 +278,8 @@ interface FieldDef {
183
278
  rule: string
184
279
  optional: boolean
185
280
  repeated: boolean
281
+ message: boolean
282
+ enum: boolean
186
283
  }
187
284
 
188
285
  function defineFields (fields: Record<string, FieldDef>, messageDef: MessageDef, moduleDef: ModuleDef) {
@@ -256,47 +353,23 @@ export interface ${messageDef.name} {
256
353
  }
257
354
  }`
258
355
 
259
- const ensureArrayProps = Object.entries(fields)
260
- .map(([name, fieldDef]) => {
261
- // make sure repeated fields have an array if not set
262
- if (fieldDef.rule === 'repeated') {
263
- return ` obj.${name} = obj.${name} ?? []`
264
- }
265
-
266
- return ''
267
- }).filter(Boolean).join('\n')
268
-
269
- const ensureRequiredFields = Object.entries(fields)
270
- .map(([name, fieldDef]) => {
271
- // make sure required fields are set
272
- if (!fieldDef.optional) {
273
- return `
274
- if (obj.${name} == null) {
275
- throw new Error('Protocol error: value for required field "${name}" was not found in protobuf')
276
- }`
277
- }
278
-
279
- return ''
280
- }).filter(Boolean).join('\n')
281
-
282
356
  interfaceCodecDef = `
283
357
  let _codec: Codec<${messageDef.name}>
284
358
 
285
359
  export const codec = (): Codec<${messageDef.name}> => {
286
360
  if (_codec == null) {
287
- _codec = message<${messageDef.name}>((obj, writer, opts = {}) => {
361
+ _codec = message<${messageDef.name}>((obj, w, opts = {}) => {
288
362
  if (opts.lengthDelimited !== false) {
289
- writer.fork()
363
+ w.fork()
290
364
  }
291
365
  ${Object.entries(fields)
292
366
  .map(([name, fieldDef]) => {
293
367
  let codec: string = encoders[fieldDef.type]
294
368
  let type: string = fieldDef.type
369
+ let typeName: string = ''
295
370
 
296
371
  if (codec == null) {
297
- const def = findDef(fieldDef.type, messageDef, moduleDef)
298
-
299
- if (isEnumDef(def)) {
372
+ if (fieldDef.enum) {
300
373
  moduleDef.imports.add('enumeration')
301
374
  type = 'enum'
302
375
  } else {
@@ -304,34 +377,69 @@ ${Object.entries(fields)
304
377
  type = 'message'
305
378
  }
306
379
 
307
- const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
380
+ typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
308
381
  codec = `${typeName}.codec()`
309
382
  }
310
383
 
311
- return `
312
- if (obj.${name} != null) {${
313
- fieldDef.rule === 'repeated'
314
- ? `
384
+ let valueTest = `obj.${name} != null`
385
+
386
+ // proto3 singular fields should only be written out if they are not the default value
387
+ if (!fieldDef.optional && !fieldDef.repeated) {
388
+ if (defaultValueTestGenerators[type] != null) {
389
+ valueTest = `opts.writeDefaults === true || ${defaultValueTestGenerators[type](`obj.${name}`)}`
390
+ } else if (type === 'enum') {
391
+ // handle enums
392
+ valueTest = `opts.writeDefaults === true || (obj.${name} != null && __${fieldDef.type}Values[obj.${name}] !== 0)`
393
+ }
394
+ }
395
+
396
+ function createWriteField (valueVar: string): string {
397
+ const id = (fieldDef.id << 3) | codecTypes[type]
398
+
399
+ let writeField = `w.uint32(${id})
400
+ ${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}`
401
+
402
+ if (type === 'message') {
403
+ // message fields are only written if they have values
404
+ writeField = `w.uint32(${id})
405
+ ${typeName}.codec().encode(${valueVar}, w, {
406
+ writeDefaults: ${Boolean(fieldDef.repeated).toString()}
407
+ })`
408
+ }
409
+
410
+ return writeField
411
+ }
412
+
413
+ let writeField = createWriteField(`obj.${name}`)
414
+
415
+ if (fieldDef.repeated) {
416
+ writeField = `
315
417
  for (const value of obj.${name}) {
316
- writer.uint32(${(fieldDef.id << 3) | codecTypes[type]})
317
- ${encoderGenerators[type] == null ? `${codec}.encode(value, writer)` : encoderGenerators[type]('value')}
318
- }`
319
- : `
320
- writer.uint32(${(fieldDef.id << 3) | codecTypes[type]})
321
- ${encoderGenerators[type] == null ? `${codec}.encode(obj.${name}, writer)` : encoderGenerators[type](`obj.${name}`)}`
418
+ ${
419
+ createWriteField('value')
420
+ .split('\n')
421
+ .map(s => {
422
+ const trimmed = s.trim()
423
+
424
+ return trimmed === '' ? trimmed : ` ${s}`
425
+ })
426
+ .join('\n')
427
+ }
428
+ }
429
+ `.trim()
322
430
  }
323
- }${fieldDef.optional
324
- ? ''
325
- : ` else {
326
- throw new Error('Protocol error: required field "${name}" was not found in object')
327
- }`}`
431
+
432
+ return `
433
+ if (${valueTest}) {
434
+ ${writeField}
435
+ }`
328
436
  }).join('\n')}
329
437
 
330
438
  if (opts.lengthDelimited !== false) {
331
- writer.ldelim()
439
+ w.ldelim()
332
440
  }
333
441
  }, (reader, length) => {
334
- const obj: any = {}
442
+ const obj: any = {${createDefaultObject(fields, messageDef, moduleDef)}}
335
443
 
336
444
  const end = length == null ? reader.len : reader.pos + length
337
445
 
@@ -345,9 +453,7 @@ ${Object.entries(fields)
345
453
  let type: string = fieldDef.type
346
454
 
347
455
  if (codec == null) {
348
- const def = findDef(fieldDef.type, messageDef, moduleDef)
349
-
350
- if (isEnumDef(def)) {
456
+ if (fieldDef.enum) {
351
457
  moduleDef.imports.add('enumeration')
352
458
  type = 'enum'
353
459
  } else {
@@ -361,7 +467,6 @@ ${Object.entries(fields)
361
467
 
362
468
  return `case ${fieldDef.id}:${fieldDef.rule === 'repeated'
363
469
  ? `
364
- obj.${name} = obj.${name} ?? []
365
470
  obj.${name}.push(${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()})`
366
471
  : `
367
472
  obj.${name} = ${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`}
@@ -371,7 +476,7 @@ ${Object.entries(fields)
371
476
  reader.skipType(tag & 7)
372
477
  break
373
478
  }
374
- }${ensureArrayProps !== '' ? `\n\n${ensureArrayProps}` : ''}${ensureRequiredFields !== '' ? `\n${ensureRequiredFields}` : ''}
479
+ }
375
480
 
376
481
  return obj
377
482
  })
@@ -435,8 +540,9 @@ function defineModule (def: ClassDef): ModuleDef {
435
540
 
436
541
  if (classDef.fields != null) {
437
542
  for (const name of Object.keys(classDef.fields)) {
438
- classDef.fields[name].repeated = classDef.fields[name].rule === 'repeated'
439
- classDef.fields[name].optional = !classDef.fields[name].repeated && classDef.fields[name].options?.proto3_optional === true
543
+ const fieldDef = classDef.fields[name]
544
+ fieldDef.repeated = fieldDef.rule === 'repeated'
545
+ fieldDef.optional = !fieldDef.repeated && fieldDef.options?.proto3_optional === true
440
546
  }
441
547
  }
442
548
 
@@ -448,6 +554,28 @@ function defineModule (def: ClassDef): ModuleDef {
448
554
 
449
555
  defineMessage(defs)
450
556
 
557
+ // set enum/message fields now all messages have been defined
558
+ for (const className of Object.keys(defs)) {
559
+ const classDef = defs[className]
560
+
561
+ if (classDef.fields != null) {
562
+ for (const name of Object.keys(classDef.fields)) {
563
+ const fieldDef = classDef.fields[name]
564
+ if (types[fieldDef.type] == null) {
565
+ const def = findDef(fieldDef.type, classDef, moduleDef)
566
+ fieldDef.enum = isEnumDef(def)
567
+ fieldDef.message = !fieldDef.enum
568
+
569
+ if (fieldDef.message && !fieldDef.repeated) {
570
+ // the default type for a message is unset so they are always optional
571
+ // https://developers.google.com/protocol-buffers/docs/proto3#default
572
+ fieldDef.optional = true
573
+ }
574
+ }
575
+ }
576
+ }
577
+ }
578
+
451
579
  for (const className of Object.keys(defs)) {
452
580
  const classDef = defs[className]
453
581
 
@@ -474,7 +602,9 @@ export async function generate (source: string, flags: Flags) {
474
602
 
475
603
  let lines = [
476
604
  '/* eslint-disable import/export */',
605
+ '/* eslint-disable complexity */',
477
606
  '/* eslint-disable @typescript-eslint/no-namespace */',
607
+ '/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */',
478
608
  ''
479
609
  ]
480
610
 
@@ -497,6 +627,7 @@ export async function generate (source: string, flags: Flags) {
497
627
  ]
498
628
 
499
629
  const content = lines.join('\n').trim()
630
+ const outputPath = pathWithExtension(source, '.ts', flags.output)
500
631
 
501
- await fs.writeFile(pathWithExtension(source, '.ts', flags.output), content + '\n')
632
+ await fs.writeFile(outputPath, content + '\n')
502
633
  }