protons 7.0.7 → 7.2.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
@@ -3,7 +3,7 @@
3
3
  [![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)
4
4
  [![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)
5
5
  [![codecov](https://img.shields.io/codecov/c/github/ipfs/protons.svg?style=flat-square)](https://codecov.io/gh/ipfs/protons)
6
- [![CI](https://img.shields.io/github/actions/workflow/status/ipfs/protons/js-test-and-release.yml?branch=master\&style=flat-square)](https://github.com/ipfs/protons/actions/workflows/js-test-and-release.yml?query=branch%3Amaster)
6
+ [![CI](https://img.shields.io/github/actions/workflow/status/ipfs/protons/js-test-and-release.yml?branch=main\&style=flat-square)](https://github.com/ipfs/protons/actions/workflows/js-test-and-release.yml?query=branch%3Amain)
7
7
 
8
8
  > Protobuf to ts transpiler
9
9
 
@@ -8,6 +8,7 @@ async function main() {
8
8
 
9
9
  Options
10
10
  --output, -o Path to a directory to write transpiled typescript files into
11
+ --strict, -s Causes parsing warnings to become errors
11
12
 
12
13
  Examples
13
14
  $ protons ./path/to/file.proto ./path/to/other/file.proto
@@ -18,6 +19,10 @@ async function main() {
18
19
  output: {
19
20
  type: 'string',
20
21
  shortFlag: 'o'
22
+ },
23
+ strict: {
24
+ type: 'boolean',
25
+ shortFlag: 's'
21
26
  }
22
27
  }
23
28
  });
@@ -1 +1 @@
1
- {"version":3,"file":"protons.js","sourceRoot":"","sources":["../../bin/protons.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC;;;;;;;;;CASlB,EAAE;QACC,8CAA8C;QAC9C,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,KAAK,EAAE;YACL,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,GAAG;aACf;SACF;KACF,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;IAED,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE;QAC9B,MAAM,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;KAClC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,iCAAiC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"protons.js","sourceRoot":"","sources":["../../bin/protons.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC;;;;;;;;;;CAUlB,EAAE;QACC,8CAA8C;QAC9C,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,KAAK,EAAE;YACL,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,GAAG;aACf;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,GAAG;aACf;SACF;KACF,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;IAED,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE;QAC9B,MAAM,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;KAClC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,iCAAiC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -6,8 +6,19 @@ export declare enum CODEC_TYPES {
6
6
  END_GROUP = 4,
7
7
  BIT32 = 5
8
8
  }
9
+ export declare class CodeError extends Error {
10
+ code: string;
11
+ constructor(message: string, code: string, options?: ErrorOptions);
12
+ }
9
13
  interface Flags {
14
+ /**
15
+ * Specifies an output directory
16
+ */
10
17
  output?: string;
18
+ /**
19
+ * If true, warnings will be thrown as errors
20
+ */
21
+ strict?: boolean;
11
22
  }
12
23
  export declare function generate(source: string, flags: Flags): Promise<void>;
13
24
  export {};
@@ -1 +1 @@
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;AAsoBD,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF3E"}
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;AAOD,qBAAa,SAAU,SAAQ,KAAK;IAC3B,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKnE;AAu0BD,UAAU,KAAK;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF3E"}
package/dist/src/index.js CHANGED
@@ -16,6 +16,13 @@ function pathWithExtension(input, extension, outputDir) {
16
16
  const output = outputDir ?? path.dirname(input);
17
17
  return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension);
18
18
  }
19
+ export class CodeError extends Error {
20
+ code;
21
+ constructor(message, code, options) {
22
+ super(message, options);
23
+ this.code = code;
24
+ }
25
+ }
19
26
  const types = {
20
27
  bool: 'boolean',
21
28
  bytes: 'Uint8Array',
@@ -33,39 +40,123 @@ const types = {
33
40
  uint32: 'number',
34
41
  uint64: 'bigint'
35
42
  };
43
+ const jsTypeOverrides = {
44
+ JS_NUMBER: 'number',
45
+ JS_STRING: 'string'
46
+ };
36
47
  const encoderGenerators = {
37
48
  bool: (val) => `w.bool(${val})`,
38
49
  bytes: (val) => `w.bytes(${val})`,
39
50
  double: (val) => `w.double(${val})`,
40
51
  fixed32: (val) => `w.fixed32(${val})`,
41
- fixed64: (val) => `w.fixed64(${val})`,
52
+ fixed64: (val, jsTypeOverride) => {
53
+ if (jsTypeOverride === 'number') {
54
+ return `w.fixed64Number(${val})`;
55
+ }
56
+ if (jsTypeOverride === 'string') {
57
+ return `w.fixed64String(${val})`;
58
+ }
59
+ return `w.fixed64(${val})`;
60
+ },
42
61
  float: (val) => `w.float(${val})`,
43
62
  int32: (val) => `w.int32(${val})`,
44
- int64: (val) => `w.int64(${val})`,
63
+ int64: (val, jsTypeOverride) => {
64
+ if (jsTypeOverride === 'number') {
65
+ return `w.int64Number(${val})`;
66
+ }
67
+ if (jsTypeOverride === 'string') {
68
+ return `w.int64String(${val})`;
69
+ }
70
+ return `w.int64(${val})`;
71
+ },
45
72
  sfixed32: (val) => `w.sfixed32(${val})`,
46
- sfixed64: (val) => `w.sfixed64(${val})`,
73
+ sfixed64: (val, jsTypeOverride) => {
74
+ if (jsTypeOverride === 'number') {
75
+ return `w.sfixed64Number(${val})`;
76
+ }
77
+ if (jsTypeOverride === 'string') {
78
+ return `w.sfixed64String(${val})`;
79
+ }
80
+ return `w.sfixed64(${val})`;
81
+ },
47
82
  sint32: (val) => `w.sint32(${val})`,
48
- sint64: (val) => `w.sint64(${val})`,
83
+ sint64: (val, jsTypeOverride) => {
84
+ if (jsTypeOverride === 'number') {
85
+ return `w.sint64Number(${val})`;
86
+ }
87
+ if (jsTypeOverride === 'string') {
88
+ return `w.sint64String(${val})`;
89
+ }
90
+ return `w.sint64(${val})`;
91
+ },
49
92
  string: (val) => `w.string(${val})`,
50
93
  uint32: (val) => `w.uint32(${val})`,
51
- uint64: (val) => `w.uint64(${val})`
94
+ uint64: (val, jsTypeOverride) => {
95
+ if (jsTypeOverride === 'number') {
96
+ return `w.uint64Number(${val})`;
97
+ }
98
+ if (jsTypeOverride === 'string') {
99
+ return `w.uint64String(${val})`;
100
+ }
101
+ return `w.uint64(${val})`;
102
+ }
52
103
  };
53
104
  const decoderGenerators = {
54
105
  bool: () => 'reader.bool()',
55
106
  bytes: () => 'reader.bytes()',
56
107
  double: () => 'reader.double()',
57
108
  fixed32: () => 'reader.fixed32()',
58
- fixed64: () => 'reader.fixed64()',
109
+ fixed64: (jsTypeOverride) => {
110
+ if (jsTypeOverride === 'number') {
111
+ return 'reader.fixed64Number()';
112
+ }
113
+ if (jsTypeOverride === 'string') {
114
+ return 'reader.fixed64String()';
115
+ }
116
+ return 'reader.fixed64()';
117
+ },
59
118
  float: () => 'reader.float()',
60
119
  int32: () => 'reader.int32()',
61
- int64: () => 'reader.int64()',
120
+ int64: (jsTypeOverride) => {
121
+ if (jsTypeOverride === 'number') {
122
+ return 'reader.int64Number()';
123
+ }
124
+ if (jsTypeOverride === 'string') {
125
+ return 'reader.int64String()';
126
+ }
127
+ return 'reader.int64()';
128
+ },
62
129
  sfixed32: () => 'reader.sfixed32()',
63
- sfixed64: () => 'reader.sfixed64()',
130
+ sfixed64: (jsTypeOverride) => {
131
+ if (jsTypeOverride === 'number') {
132
+ return 'reader.sfixed64Number()';
133
+ }
134
+ if (jsTypeOverride === 'string') {
135
+ return 'reader.sfixed64String()';
136
+ }
137
+ return 'reader.sfixed64()';
138
+ },
64
139
  sint32: () => 'reader.sint32()',
65
- sint64: () => 'reader.sint64()',
140
+ sint64: (jsTypeOverride) => {
141
+ if (jsTypeOverride === 'number') {
142
+ return 'reader.sint64Number()';
143
+ }
144
+ if (jsTypeOverride === 'string') {
145
+ return 'reader.sint64String()';
146
+ }
147
+ return 'reader.sint64()';
148
+ },
66
149
  string: () => 'reader.string()',
67
150
  uint32: () => 'reader.uint32()',
68
- uint64: () => 'reader.uint64()'
151
+ uint64: (jsTypeOverride) => {
152
+ if (jsTypeOverride === 'number') {
153
+ return 'reader.uint64Number()';
154
+ }
155
+ if (jsTypeOverride === 'string') {
156
+ return 'reader.uint64String()';
157
+ }
158
+ return 'reader.uint64()';
159
+ }
69
160
  };
70
161
  const defaultValueGenerators = {
71
162
  bool: () => 'false',
@@ -84,6 +175,10 @@ const defaultValueGenerators = {
84
175
  uint32: () => '0',
85
176
  uint64: () => '0n'
86
177
  };
178
+ const defaultValueGeneratorsJsTypeOverrides = {
179
+ number: () => '0',
180
+ string: () => "''"
181
+ };
87
182
  const defaultValueTestGenerators = {
88
183
  bool: (field) => `(${field} != null && ${field} !== false)`,
89
184
  bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`,
@@ -101,7 +196,23 @@ const defaultValueTestGenerators = {
101
196
  uint32: (field) => `(${field} != null && ${field} !== 0)`,
102
197
  uint64: (field) => `(${field} != null && ${field} !== 0n)`
103
198
  };
104
- function findTypeName(typeName, classDef, moduleDef) {
199
+ const defaultValueTestGeneratorsJsTypeOverrides = {
200
+ number: (field) => `(${field} != null && ${field} !== 0)`,
201
+ string: (field) => `(${field} != null && ${field} !== '')`
202
+ };
203
+ function findJsTypeOverride(defaultType, fieldDef) {
204
+ if (fieldDef.options?.jstype != null && jsTypeOverrides[fieldDef.options?.jstype] != null) {
205
+ if (!['int64', 'uint64', 'sint64', 'fixed64', 'sfixed64'].includes(defaultType)) {
206
+ throw new Error(`jstype is only allowed on int64, uint64, sint64, fixed64 or sfixed64 fields - got "${defaultType}"`);
207
+ }
208
+ return jsTypeOverrides[fieldDef.options?.jstype];
209
+ }
210
+ }
211
+ function findJsTypeName(typeName, classDef, moduleDef, fieldDef) {
212
+ const override = findJsTypeOverride(typeName, fieldDef);
213
+ if (override != null) {
214
+ return override;
215
+ }
105
216
  if (types[typeName] != null) {
106
217
  return types[typeName];
107
218
  }
@@ -112,7 +223,7 @@ function findTypeName(typeName, classDef, moduleDef) {
112
223
  return `${classDef.fullName}.${typeName}`;
113
224
  }
114
225
  if (classDef.parent != null) {
115
- return findTypeName(typeName, classDef.parent, moduleDef);
226
+ return findJsTypeName(typeName, classDef.parent, moduleDef, fieldDef);
116
227
  }
117
228
  if (moduleDef.globals[typeName] != null) {
118
229
  return typeName;
@@ -148,8 +259,13 @@ function createDefaultObject(fields, messageDef, moduleDef) {
148
259
  }
149
260
  const type = fieldDef.type;
150
261
  let defaultValue;
151
- if (defaultValueGenerators[type] != null) {
152
- defaultValue = defaultValueGenerators[type]();
262
+ let defaultValueGenerator = defaultValueGenerators[type];
263
+ if (defaultValueGenerator != null) {
264
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef);
265
+ if (jsTypeOverride != null && defaultValueGeneratorsJsTypeOverrides[jsTypeOverride] != null) {
266
+ defaultValueGenerator = defaultValueGeneratorsJsTypeOverrides[jsTypeOverride];
267
+ }
268
+ defaultValue = defaultValueGenerator();
153
269
  }
154
270
  else {
155
271
  const def = findDef(fieldDef.type, messageDef, moduleDef);
@@ -228,14 +344,25 @@ function isEnumDef(obj) {
228
344
  function defineFields(fields, messageDef, moduleDef) {
229
345
  return Object.entries(fields).map(([fieldName, fieldDef]) => {
230
346
  if (fieldDef.map) {
231
- return `${fieldName}: Map<${findTypeName(fieldDef.keyType ?? 'string', messageDef, moduleDef)}, ${findTypeName(fieldDef.valueType, messageDef, moduleDef)}>`;
347
+ return `${fieldName}: Map<${findJsTypeName(fieldDef.keyType ?? 'string', messageDef, moduleDef, fieldDef)}, ${findJsTypeName(fieldDef.valueType, messageDef, moduleDef, fieldDef)}>`;
232
348
  }
233
- return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${fieldDef.repeated ? '[]' : ''}`;
349
+ return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef)}${fieldDef.repeated ? '[]' : ''}`;
234
350
  });
235
351
  }
236
- function compileMessage(messageDef, moduleDef) {
352
+ function compileMessage(messageDef, moduleDef, flags) {
237
353
  if (isEnumDef(messageDef)) {
238
354
  moduleDef.imports.add('enumeration');
355
+ // check that the enum def values start from 0
356
+ if (Object.values(messageDef.values)[0] !== 0) {
357
+ const message = `enum ${messageDef.name} does not contain a value that maps to zero as it's first element, this is required in proto3 - see https://protobuf.dev/programming-guides/proto3/#enum`;
358
+ if (flags?.strict === true) {
359
+ throw new CodeError(message, 'ERR_PARSE_ERROR');
360
+ }
361
+ else {
362
+ // eslint-disable-next-line no-console
363
+ console.info(`[WARN] ${message}`);
364
+ }
365
+ }
239
366
  return `
240
367
  export enum ${messageDef.name} {
241
368
  ${Object.keys(messageDef.values).map(name => {
@@ -259,7 +386,7 @@ export namespace ${messageDef.name} {
259
386
  if (messageDef.nested != null) {
260
387
  nested = '\n';
261
388
  nested += Object.values(messageDef.nested)
262
- .map(def => compileMessage(def, moduleDef).trim())
389
+ .map(def => compileMessage(def, moduleDef, flags).trim())
263
390
  .join('\n\n')
264
391
  .split('\n')
265
392
  .map(line => line.trim() === '' ? '' : ` ${line}`)
@@ -302,21 +429,35 @@ export interface ${messageDef.name} {
302
429
  moduleDef.imports.add('message');
303
430
  type = 'message';
304
431
  }
305
- typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
432
+ typeName = findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef);
306
433
  codec = `${typeName}.codec()`;
307
434
  }
308
435
  let valueTest = `obj.${name} != null`;
309
436
  if (fieldDef.map) {
310
437
  valueTest = `obj.${name} != null && obj.${name}.size !== 0`;
311
438
  }
312
- else if (!fieldDef.optional && !fieldDef.repeated) {
439
+ else if (!fieldDef.optional && !fieldDef.repeated && !fieldDef.proto2Required) {
440
+ let defaultValueTestGenerator = defaultValueTestGenerators[type];
313
441
  // proto3 singular fields should only be written out if they are not the default value
314
- if (defaultValueTestGenerators[type] != null) {
315
- valueTest = `${defaultValueTestGenerators[type](`obj.${name}`)}`;
442
+ if (defaultValueTestGenerator != null) {
443
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef);
444
+ if (jsTypeOverride != null && defaultValueTestGeneratorsJsTypeOverrides[jsTypeOverride] != null) {
445
+ defaultValueTestGenerator = defaultValueTestGeneratorsJsTypeOverrides[jsTypeOverride];
446
+ }
447
+ valueTest = `${defaultValueTestGenerator(`obj.${name}`)}`;
316
448
  }
317
449
  else if (type === 'enum') {
318
450
  // handle enums
319
- valueTest = `obj.${name} != null && __${fieldDef.type}Values[obj.${name}] !== 0`;
451
+ const def = findDef(fieldDef.type, messageDef, moduleDef);
452
+ if (!isEnumDef(def)) {
453
+ throw new Error(`${fieldDef.type} was not enum def`);
454
+ }
455
+ valueTest = `obj.${name} != null`;
456
+ // singular enums default to 0, but enums can be defined without a 0
457
+ // value which is against the proto3 spec but is tolerated
458
+ if (Object.values(def.values)[0] === 0) {
459
+ valueTest += ` && __${fieldDef.type}Values[obj.${name}] !== 0`;
460
+ }
320
461
  }
321
462
  }
322
463
  function createWriteField(valueVar) {
@@ -327,8 +468,12 @@ export interface ${messageDef.name} {
327
468
  throw new Error(`${fieldDef.type} was not enum def`);
328
469
  }
329
470
  }
330
- let writeField = () => `w.uint32(${id})
331
- ${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}`;
471
+ let writeField = () => {
472
+ const encoderGenerator = encoderGenerators[type];
473
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef);
474
+ return `w.uint32(${id})
475
+ ${encoderGenerator == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerator(valueVar, jsTypeOverride)}`;
476
+ };
332
477
  if (type === 'message') {
333
478
  // message fields are only written if they have values. But if a message
334
479
  // is part of a repeated field, and consists of only default values it
@@ -386,10 +531,12 @@ export interface ${messageDef.name} {
386
531
  moduleDef.imports.add('message');
387
532
  type = 'message';
388
533
  }
389
- const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
534
+ const typeName = findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef);
390
535
  codec = `${typeName}.codec()`;
391
536
  }
392
- const parseValue = `${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`;
537
+ // override setting type on js object
538
+ const jsTypeOverride = findJsTypeOverride(fieldDef.type, fieldDef);
539
+ const parseValue = `${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type](jsTypeOverride)}`;
393
540
  if (fieldDef.map) {
394
541
  return `case ${fieldDef.id}: {
395
542
  const entry = ${parseValue}
@@ -398,13 +545,15 @@ export interface ${messageDef.name} {
398
545
  }`;
399
546
  }
400
547
  else if (fieldDef.repeated) {
401
- return `case ${fieldDef.id}:
548
+ return `case ${fieldDef.id}: {
402
549
  obj.${fieldName}.push(${parseValue})
403
- break`;
550
+ break
551
+ }`;
404
552
  }
405
- return `case ${fieldDef.id}:
553
+ return `case ${fieldDef.id}: {
406
554
  obj.${fieldName} = ${parseValue}
407
- break`;
555
+ break
556
+ }`;
408
557
  }
409
558
  return createReadField(fieldName, fieldDef);
410
559
  })
@@ -431,9 +580,10 @@ ${encodeFields === '' ? '' : `${encodeFields}\n`}
431
580
  const tag = reader.uint32()
432
581
 
433
582
  switch (tag >>> 3) {${decodeFields === '' ? '' : `\n ${decodeFields}`}
434
- default:
583
+ default: {
435
584
  reader.skipType(tag & 7)
436
585
  break
586
+ }
437
587
  }
438
588
  }
439
589
 
@@ -459,7 +609,7 @@ export namespace ${messageDef.name} {
459
609
  }
460
610
  `.trimStart();
461
611
  }
462
- function defineModule(def) {
612
+ function defineModule(def, flags) {
463
613
  const moduleDef = {
464
614
  imports: new Set(),
465
615
  importedTypes: new Set(),
@@ -469,9 +619,9 @@ function defineModule(def) {
469
619
  };
470
620
  const defs = def.nested;
471
621
  if (defs == null) {
472
- throw new Error('No top-level messages found in protobuf');
622
+ throw new CodeError('No top-level messages found in protobuf', 'ERR_NO_MESSAGES_FOUND');
473
623
  }
474
- function defineMessage(defs, parent) {
624
+ function defineMessage(defs, parent, flags) {
475
625
  for (const className of Object.keys(defs)) {
476
626
  const classDef = defs[className];
477
627
  classDef.name = className;
@@ -486,8 +636,17 @@ function defineModule(def) {
486
636
  fieldDef.repeated = fieldDef.rule === 'repeated';
487
637
  fieldDef.optional = !fieldDef.repeated && fieldDef.options?.proto3_optional === true;
488
638
  fieldDef.map = fieldDef.keyType != null;
639
+ fieldDef.proto2Required = false;
489
640
  if (fieldDef.rule === 'required') {
490
- throw new Error('"required" fields are not allowed in proto3 - please convert your proto2 definitions to proto3');
641
+ const message = `field "${name}" is required, this is not allowed in proto3. Please convert your proto2 definitions to proto3 - see https://github.com/ipfs/protons/wiki/Required-fields-and-protobuf-3`;
642
+ if (flags?.strict === true) {
643
+ throw new CodeError(message, 'ERR_PARSE_ERROR');
644
+ }
645
+ else {
646
+ fieldDef.proto2Required = true;
647
+ // eslint-disable-next-line no-console
648
+ console.info(`[WARN] ${message}`);
649
+ }
491
650
  }
492
651
  }
493
652
  }
@@ -519,12 +678,12 @@ function defineModule(def) {
519
678
  }
520
679
  }
521
680
  }
522
- defineMessage(defs);
681
+ defineMessage(defs, undefined, flags);
523
682
  // set enum/message fields now all messages have been defined
524
683
  updateTypes(defs);
525
684
  for (const className of Object.keys(defs)) {
526
685
  const classDef = defs[className];
527
- moduleDef.compiled.push(compileMessage(classDef, moduleDef));
686
+ moduleDef.compiled.push(compileMessage(classDef, moduleDef, flags));
528
687
  }
529
688
  return moduleDef;
530
689
  }
@@ -560,7 +719,7 @@ export async function generate(source, flags) {
560
719
  fieldDef.rule = 'repeated';
561
720
  }
562
721
  }
563
- const moduleDef = defineModule(def);
722
+ const moduleDef = defineModule(def, flags);
564
723
  const ignores = [
565
724
  '/* eslint-disable import/export */',
566
725
  '/* eslint-disable complexity */',
@@ -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": "7.0.7",
3
+ "version": "7.2.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",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "release": {
39
39
  "branches": [
40
- "master"
40
+ "main"
41
41
  ],
42
42
  "plugins": [
43
43
  [
package/src/index.ts CHANGED
@@ -19,6 +19,16 @@ function pathWithExtension (input: string, extension: string, outputDir?: string
19
19
  return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension)
20
20
  }
21
21
 
22
+ export class CodeError extends Error {
23
+ public code: string
24
+
25
+ constructor (message: string, code: string, options?: ErrorOptions) {
26
+ super(message, options)
27
+
28
+ this.code = code
29
+ }
30
+ }
31
+
22
32
  const types: Record<string, string> = {
23
33
  bool: 'boolean',
24
34
  bytes: 'Uint8Array',
@@ -37,40 +47,145 @@ const types: Record<string, string> = {
37
47
  uint64: 'bigint'
38
48
  }
39
49
 
40
- const encoderGenerators: Record<string, (val: string) => string> = {
50
+ const jsTypeOverrides: Record<string, 'number' | 'string'> = {
51
+ JS_NUMBER: 'number',
52
+ JS_STRING: 'string'
53
+ }
54
+
55
+ const encoderGenerators: Record<string, (val: string, jsTypeOverride?: 'number' | 'string') => string> = {
41
56
  bool: (val) => `w.bool(${val})`,
42
57
  bytes: (val) => `w.bytes(${val})`,
43
58
  double: (val) => `w.double(${val})`,
44
59
  fixed32: (val) => `w.fixed32(${val})`,
45
- fixed64: (val) => `w.fixed64(${val})`,
60
+ fixed64: (val, jsTypeOverride) => {
61
+ if (jsTypeOverride === 'number') {
62
+ return `w.fixed64Number(${val})`
63
+ }
64
+
65
+ if (jsTypeOverride === 'string') {
66
+ return `w.fixed64String(${val})`
67
+ }
68
+
69
+ return `w.fixed64(${val})`
70
+ },
46
71
  float: (val) => `w.float(${val})`,
47
72
  int32: (val) => `w.int32(${val})`,
48
- int64: (val) => `w.int64(${val})`,
73
+ int64: (val, jsTypeOverride) => {
74
+ if (jsTypeOverride === 'number') {
75
+ return `w.int64Number(${val})`
76
+ }
77
+
78
+ if (jsTypeOverride === 'string') {
79
+ return `w.int64String(${val})`
80
+ }
81
+
82
+ return `w.int64(${val})`
83
+ },
49
84
  sfixed32: (val) => `w.sfixed32(${val})`,
50
- sfixed64: (val) => `w.sfixed64(${val})`,
85
+ sfixed64: (val, jsTypeOverride) => {
86
+ if (jsTypeOverride === 'number') {
87
+ return `w.sfixed64Number(${val})`
88
+ }
89
+
90
+ if (jsTypeOverride === 'string') {
91
+ return `w.sfixed64String(${val})`
92
+ }
93
+
94
+ return `w.sfixed64(${val})`
95
+ },
51
96
  sint32: (val) => `w.sint32(${val})`,
52
- sint64: (val) => `w.sint64(${val})`,
97
+ sint64: (val, jsTypeOverride) => {
98
+ if (jsTypeOverride === 'number') {
99
+ return `w.sint64Number(${val})`
100
+ }
101
+
102
+ if (jsTypeOverride === 'string') {
103
+ return `w.sint64String(${val})`
104
+ }
105
+
106
+ return `w.sint64(${val})`
107
+ },
53
108
  string: (val) => `w.string(${val})`,
54
109
  uint32: (val) => `w.uint32(${val})`,
55
- uint64: (val) => `w.uint64(${val})`
110
+ uint64: (val, jsTypeOverride) => {
111
+ if (jsTypeOverride === 'number') {
112
+ return `w.uint64Number(${val})`
113
+ }
114
+
115
+ if (jsTypeOverride === 'string') {
116
+ return `w.uint64String(${val})`
117
+ }
118
+
119
+ return `w.uint64(${val})`
120
+ }
56
121
  }
57
122
 
58
- const decoderGenerators: Record<string, () => string> = {
123
+ const decoderGenerators: Record<string, (jsTypeOverride?: 'number' | 'string') => string> = {
59
124
  bool: () => 'reader.bool()',
60
125
  bytes: () => 'reader.bytes()',
61
126
  double: () => 'reader.double()',
62
127
  fixed32: () => 'reader.fixed32()',
63
- fixed64: () => 'reader.fixed64()',
128
+ fixed64: (jsTypeOverride) => {
129
+ if (jsTypeOverride === 'number') {
130
+ return 'reader.fixed64Number()'
131
+ }
132
+
133
+ if (jsTypeOverride === 'string') {
134
+ return 'reader.fixed64String()'
135
+ }
136
+
137
+ return 'reader.fixed64()'
138
+ },
64
139
  float: () => 'reader.float()',
65
140
  int32: () => 'reader.int32()',
66
- int64: () => 'reader.int64()',
141
+ int64: (jsTypeOverride) => {
142
+ if (jsTypeOverride === 'number') {
143
+ return 'reader.int64Number()'
144
+ }
145
+
146
+ if (jsTypeOverride === 'string') {
147
+ return 'reader.int64String()'
148
+ }
149
+
150
+ return 'reader.int64()'
151
+ },
67
152
  sfixed32: () => 'reader.sfixed32()',
68
- sfixed64: () => 'reader.sfixed64()',
153
+ sfixed64: (jsTypeOverride) => {
154
+ if (jsTypeOverride === 'number') {
155
+ return 'reader.sfixed64Number()'
156
+ }
157
+
158
+ if (jsTypeOverride === 'string') {
159
+ return 'reader.sfixed64String()'
160
+ }
161
+
162
+ return 'reader.sfixed64()'
163
+ },
69
164
  sint32: () => 'reader.sint32()',
70
- sint64: () => 'reader.sint64()',
165
+ sint64: (jsTypeOverride) => {
166
+ if (jsTypeOverride === 'number') {
167
+ return 'reader.sint64Number()'
168
+ }
169
+
170
+ if (jsTypeOverride === 'string') {
171
+ return 'reader.sint64String()'
172
+ }
173
+
174
+ return 'reader.sint64()'
175
+ },
71
176
  string: () => 'reader.string()',
72
177
  uint32: () => 'reader.uint32()',
73
- uint64: () => 'reader.uint64()'
178
+ uint64: (jsTypeOverride) => {
179
+ if (jsTypeOverride === 'number') {
180
+ return 'reader.uint64Number()'
181
+ }
182
+
183
+ if (jsTypeOverride === 'string') {
184
+ return 'reader.uint64String()'
185
+ }
186
+
187
+ return 'reader.uint64()'
188
+ }
74
189
  }
75
190
 
76
191
  const defaultValueGenerators: Record<string, () => string> = {
@@ -91,6 +206,11 @@ const defaultValueGenerators: Record<string, () => string> = {
91
206
  uint64: () => '0n'
92
207
  }
93
208
 
209
+ const defaultValueGeneratorsJsTypeOverrides: Record<string, () => string> = {
210
+ number: () => '0',
211
+ string: () => "''"
212
+ }
213
+
94
214
  const defaultValueTestGenerators: Record<string, (field: string) => string> = {
95
215
  bool: (field) => `(${field} != null && ${field} !== false)`,
96
216
  bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`,
@@ -109,7 +229,28 @@ const defaultValueTestGenerators: Record<string, (field: string) => string> = {
109
229
  uint64: (field) => `(${field} != null && ${field} !== 0n)`
110
230
  }
111
231
 
112
- function findTypeName (typeName: string, classDef: MessageDef, moduleDef: ModuleDef): string {
232
+ const defaultValueTestGeneratorsJsTypeOverrides: Record<string, (field: string) => string> = {
233
+ number: (field) => `(${field} != null && ${field} !== 0)`,
234
+ string: (field) => `(${field} != null && ${field} !== '')`
235
+ }
236
+
237
+ function findJsTypeOverride (defaultType: string, fieldDef: FieldDef): 'number' | 'string' | undefined {
238
+ if (fieldDef.options?.jstype != null && jsTypeOverrides[fieldDef.options?.jstype] != null) {
239
+ if (!['int64', 'uint64', 'sint64', 'fixed64', 'sfixed64'].includes(defaultType)) {
240
+ throw new Error(`jstype is only allowed on int64, uint64, sint64, fixed64 or sfixed64 fields - got "${defaultType}"`)
241
+ }
242
+
243
+ return jsTypeOverrides[fieldDef.options?.jstype]
244
+ }
245
+ }
246
+
247
+ function findJsTypeName (typeName: string, classDef: MessageDef, moduleDef: ModuleDef, fieldDef: FieldDef): string {
248
+ const override = findJsTypeOverride(typeName, fieldDef)
249
+
250
+ if (override != null) {
251
+ return override
252
+ }
253
+
113
254
  if (types[typeName] != null) {
114
255
  return types[typeName]
115
256
  }
@@ -123,7 +264,7 @@ function findTypeName (typeName: string, classDef: MessageDef, moduleDef: Module
123
264
  }
124
265
 
125
266
  if (classDef.parent != null) {
126
- return findTypeName(typeName, classDef.parent, moduleDef)
267
+ return findJsTypeName(typeName, classDef.parent, moduleDef, fieldDef)
127
268
  }
128
269
 
129
270
  if (moduleDef.globals[typeName] != null) {
@@ -170,9 +311,16 @@ function createDefaultObject (fields: Record<string, FieldDef>, messageDef: Mess
170
311
 
171
312
  const type: string = fieldDef.type
172
313
  let defaultValue
314
+ let defaultValueGenerator = defaultValueGenerators[type]
315
+
316
+ if (defaultValueGenerator != null) {
317
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef)
318
+
319
+ if (jsTypeOverride != null && defaultValueGeneratorsJsTypeOverrides[jsTypeOverride] != null) {
320
+ defaultValueGenerator = defaultValueGeneratorsJsTypeOverrides[jsTypeOverride]
321
+ }
173
322
 
174
- if (defaultValueGenerators[type] != null) {
175
- defaultValue = defaultValueGenerators[type]()
323
+ defaultValue = defaultValueGenerator()
176
324
  } else {
177
325
  const def = findDef(fieldDef.type, messageDef, moduleDef)
178
326
 
@@ -287,22 +435,41 @@ interface FieldDef {
287
435
  map: boolean
288
436
  valueType: string
289
437
  keyType: string
438
+
439
+ /**
440
+ * Support proto2 required field. This field means a value should always be
441
+ * in the serialized buffer, any message without it should be considered
442
+ * invalid. It was removed for proto3.
443
+ */
444
+ proto2Required: boolean
290
445
  }
291
446
 
292
447
  function defineFields (fields: Record<string, FieldDef>, messageDef: MessageDef, moduleDef: ModuleDef): string[] {
293
448
  return Object.entries(fields).map(([fieldName, fieldDef]) => {
294
449
  if (fieldDef.map) {
295
- return `${fieldName}: Map<${findTypeName(fieldDef.keyType ?? 'string', messageDef, moduleDef)}, ${findTypeName(fieldDef.valueType, messageDef, moduleDef)}>`
450
+ return `${fieldName}: Map<${findJsTypeName(fieldDef.keyType ?? 'string', messageDef, moduleDef, fieldDef)}, ${findJsTypeName(fieldDef.valueType, messageDef, moduleDef, fieldDef)}>`
296
451
  }
297
452
 
298
- return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${fieldDef.repeated ? '[]' : ''}`
453
+ return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef)}${fieldDef.repeated ? '[]' : ''}`
299
454
  })
300
455
  }
301
456
 
302
- function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef): string {
457
+ function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef, flags?: Flags): string {
303
458
  if (isEnumDef(messageDef)) {
304
459
  moduleDef.imports.add('enumeration')
305
460
 
461
+ // check that the enum def values start from 0
462
+ if (Object.values(messageDef.values)[0] !== 0) {
463
+ const message = `enum ${messageDef.name} does not contain a value that maps to zero as it's first element, this is required in proto3 - see https://protobuf.dev/programming-guides/proto3/#enum`
464
+
465
+ if (flags?.strict === true) {
466
+ throw new CodeError(message, 'ERR_PARSE_ERROR')
467
+ } else {
468
+ // eslint-disable-next-line no-console
469
+ console.info(`[WARN] ${message}`)
470
+ }
471
+ }
472
+
306
473
  return `
307
474
  export enum ${messageDef.name} {
308
475
  ${
@@ -332,7 +499,7 @@ export namespace ${messageDef.name} {
332
499
  if (messageDef.nested != null) {
333
500
  nested = '\n'
334
501
  nested += Object.values(messageDef.nested)
335
- .map(def => compileMessage(def, moduleDef).trim())
502
+ .map(def => compileMessage(def, moduleDef, flags).trim())
336
503
  .join('\n\n')
337
504
  .split('\n')
338
505
  .map(line => line.trim() === '' ? '' : ` ${line}`)
@@ -383,7 +550,7 @@ export interface ${messageDef.name} {
383
550
  type = 'message'
384
551
  }
385
552
 
386
- typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
553
+ typeName = findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef)
387
554
  codec = `${typeName}.codec()`
388
555
  }
389
556
 
@@ -391,13 +558,33 @@ export interface ${messageDef.name} {
391
558
 
392
559
  if (fieldDef.map) {
393
560
  valueTest = `obj.${name} != null && obj.${name}.size !== 0`
394
- } else if (!fieldDef.optional && !fieldDef.repeated) {
561
+ } else if (!fieldDef.optional && !fieldDef.repeated && !fieldDef.proto2Required) {
562
+ let defaultValueTestGenerator = defaultValueTestGenerators[type]
563
+
395
564
  // proto3 singular fields should only be written out if they are not the default value
396
- if (defaultValueTestGenerators[type] != null) {
397
- valueTest = `${defaultValueTestGenerators[type](`obj.${name}`)}`
565
+ if (defaultValueTestGenerator != null) {
566
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef)
567
+
568
+ if (jsTypeOverride != null && defaultValueTestGeneratorsJsTypeOverrides[jsTypeOverride] != null) {
569
+ defaultValueTestGenerator = defaultValueTestGeneratorsJsTypeOverrides[jsTypeOverride]
570
+ }
571
+
572
+ valueTest = `${defaultValueTestGenerator(`obj.${name}`)}`
398
573
  } else if (type === 'enum') {
399
574
  // handle enums
400
- valueTest = `obj.${name} != null && __${fieldDef.type}Values[obj.${name}] !== 0`
575
+ const def = findDef(fieldDef.type, messageDef, moduleDef)
576
+
577
+ if (!isEnumDef(def)) {
578
+ throw new Error(`${fieldDef.type} was not enum def`)
579
+ }
580
+
581
+ valueTest = `obj.${name} != null`
582
+
583
+ // singular enums default to 0, but enums can be defined without a 0
584
+ // value which is against the proto3 spec but is tolerated
585
+ if (Object.values(def.values)[0] === 0) {
586
+ valueTest += ` && __${fieldDef.type}Values[obj.${name}] !== 0`
587
+ }
401
588
  }
402
589
  }
403
590
 
@@ -412,8 +599,13 @@ export interface ${messageDef.name} {
412
599
  }
413
600
  }
414
601
 
415
- let writeField = (): string => `w.uint32(${id})
416
- ${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}`
602
+ let writeField = (): string => {
603
+ const encoderGenerator = encoderGenerators[type]
604
+ const jsTypeOverride = findJsTypeOverride(type, fieldDef)
605
+
606
+ return `w.uint32(${id})
607
+ ${encoderGenerator == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerator(valueVar, jsTypeOverride)}`
608
+ }
417
609
 
418
610
  if (type === 'message') {
419
611
  // message fields are only written if they have values. But if a message
@@ -483,11 +675,14 @@ export interface ${messageDef.name} {
483
675
  type = 'message'
484
676
  }
485
677
 
486
- const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
678
+ const typeName = findJsTypeName(fieldDef.type, messageDef, moduleDef, fieldDef)
487
679
  codec = `${typeName}.codec()`
488
680
  }
489
681
 
490
- const parseValue = `${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`
682
+ // override setting type on js object
683
+ const jsTypeOverride = findJsTypeOverride(fieldDef.type, fieldDef)
684
+
685
+ const parseValue = `${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type](jsTypeOverride)}`
491
686
 
492
687
  if (fieldDef.map) {
493
688
  return `case ${fieldDef.id}: {
@@ -496,14 +691,16 @@ export interface ${messageDef.name} {
496
691
  break
497
692
  }`
498
693
  } else if (fieldDef.repeated) {
499
- return `case ${fieldDef.id}:
694
+ return `case ${fieldDef.id}: {
500
695
  obj.${fieldName}.push(${parseValue})
501
- break`
696
+ break
697
+ }`
502
698
  }
503
699
 
504
- return `case ${fieldDef.id}:
700
+ return `case ${fieldDef.id}: {
505
701
  obj.${fieldName} = ${parseValue}
506
- break`
702
+ break
703
+ }`
507
704
  }
508
705
 
509
706
  return createReadField(fieldName, fieldDef)
@@ -532,9 +729,10 @@ ${encodeFields === '' ? '' : `${encodeFields}\n`}
532
729
  const tag = reader.uint32()
533
730
 
534
731
  switch (tag >>> 3) {${decodeFields === '' ? '' : `\n ${decodeFields}`}
535
- default:
732
+ default: {
536
733
  reader.skipType(tag & 7)
537
734
  break
735
+ }
538
736
  }
539
737
  }
540
738
 
@@ -570,7 +768,7 @@ interface ModuleDef {
570
768
  globals: Record<string, ClassDef>
571
769
  }
572
770
 
573
- function defineModule (def: ClassDef): ModuleDef {
771
+ function defineModule (def: ClassDef, flags: Flags): ModuleDef {
574
772
  const moduleDef: ModuleDef = {
575
773
  imports: new Set(),
576
774
  importedTypes: new Set(),
@@ -582,10 +780,10 @@ function defineModule (def: ClassDef): ModuleDef {
582
780
  const defs = def.nested
583
781
 
584
782
  if (defs == null) {
585
- throw new Error('No top-level messages found in protobuf')
783
+ throw new CodeError('No top-level messages found in protobuf', 'ERR_NO_MESSAGES_FOUND')
586
784
  }
587
785
 
588
- function defineMessage (defs: Record<string, ClassDef>, parent?: ClassDef): void {
786
+ function defineMessage (defs: Record<string, ClassDef>, parent?: ClassDef, flags?: Flags): void {
589
787
  for (const className of Object.keys(defs)) {
590
788
  const classDef = defs[className]
591
789
 
@@ -603,9 +801,19 @@ function defineModule (def: ClassDef): ModuleDef {
603
801
  fieldDef.repeated = fieldDef.rule === 'repeated'
604
802
  fieldDef.optional = !fieldDef.repeated && fieldDef.options?.proto3_optional === true
605
803
  fieldDef.map = fieldDef.keyType != null
804
+ fieldDef.proto2Required = false
606
805
 
607
806
  if (fieldDef.rule === 'required') {
608
- throw new Error('"required" fields are not allowed in proto3 - please convert your proto2 definitions to proto3')
807
+ const message = `field "${name}" is required, this is not allowed in proto3. Please convert your proto2 definitions to proto3 - see https://github.com/ipfs/protons/wiki/Required-fields-and-protobuf-3`
808
+
809
+ if (flags?.strict === true) {
810
+ throw new CodeError(message, 'ERR_PARSE_ERROR')
811
+ } else {
812
+ fieldDef.proto2Required = true
813
+
814
+ // eslint-disable-next-line no-console
815
+ console.info(`[WARN] ${message}`)
816
+ }
609
817
  }
610
818
  }
611
819
  }
@@ -644,7 +852,7 @@ function defineModule (def: ClassDef): ModuleDef {
644
852
  }
645
853
  }
646
854
 
647
- defineMessage(defs)
855
+ defineMessage(defs, undefined, flags)
648
856
 
649
857
  // set enum/message fields now all messages have been defined
650
858
  updateTypes(defs)
@@ -652,14 +860,22 @@ function defineModule (def: ClassDef): ModuleDef {
652
860
  for (const className of Object.keys(defs)) {
653
861
  const classDef = defs[className]
654
862
 
655
- moduleDef.compiled.push(compileMessage(classDef, moduleDef))
863
+ moduleDef.compiled.push(compileMessage(classDef, moduleDef, flags))
656
864
  }
657
865
 
658
866
  return moduleDef
659
867
  }
660
868
 
661
869
  interface Flags {
870
+ /**
871
+ * Specifies an output directory
872
+ */
662
873
  output?: string
874
+
875
+ /**
876
+ * If true, warnings will be thrown as errors
877
+ */
878
+ strict?: boolean
663
879
  }
664
880
 
665
881
  export async function generate (source: string, flags: Flags): Promise<void> {
@@ -701,7 +917,7 @@ export async function generate (source: string, flags: Flags): Promise<void> {
701
917
  }
702
918
  }
703
919
 
704
- const moduleDef = defineModule(def)
920
+ const moduleDef = defineModule(def, flags)
705
921
 
706
922
  const ignores = [
707
923
  '/* eslint-disable import/export */',