protons 4.0.1 → 5.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.
File without changes
@@ -1,3 +1,11 @@
1
+ export declare enum CODEC_TYPES {
2
+ VARINT = 0,
3
+ BIT64 = 1,
4
+ LENGTH_DELIMITED = 2,
5
+ START_GROUP = 3,
6
+ END_GROUP = 4,
7
+ BIT32 = 5
8
+ }
1
9
  interface Flags {
2
10
  output?: string;
3
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAgSA,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":"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"}
package/dist/src/index.js CHANGED
@@ -1,27 +1,72 @@
1
- import { main as pbjs } from 'protobufjs/cli/pbjs.js';
1
+ import { main as pbjs } from 'protobufjs-cli/pbjs.js';
2
2
  import path from 'path';
3
3
  import { promisify } from 'util';
4
4
  import fs from 'fs/promises';
5
+ export var CODEC_TYPES;
6
+ (function (CODEC_TYPES) {
7
+ CODEC_TYPES[CODEC_TYPES["VARINT"] = 0] = "VARINT";
8
+ CODEC_TYPES[CODEC_TYPES["BIT64"] = 1] = "BIT64";
9
+ CODEC_TYPES[CODEC_TYPES["LENGTH_DELIMITED"] = 2] = "LENGTH_DELIMITED";
10
+ CODEC_TYPES[CODEC_TYPES["START_GROUP"] = 3] = "START_GROUP";
11
+ CODEC_TYPES[CODEC_TYPES["END_GROUP"] = 4] = "END_GROUP";
12
+ CODEC_TYPES[CODEC_TYPES["BIT32"] = 5] = "BIT32";
13
+ })(CODEC_TYPES || (CODEC_TYPES = {}));
5
14
  function pathWithExtension(input, extension, outputDir) {
6
15
  const output = outputDir ?? path.dirname(input);
7
16
  return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension);
8
17
  }
9
18
  const types = {
19
+ bool: 'boolean',
20
+ bytes: 'Uint8Array',
10
21
  double: 'number',
22
+ fixed32: 'number',
23
+ fixed64: 'bigint',
11
24
  float: 'number',
12
25
  int32: 'number',
13
26
  int64: 'bigint',
14
- uint32: 'number',
15
- uint64: 'bigint',
16
- sint32: 'number',
17
- sint64: 'bigint',
18
- fixed32: 'number',
19
- fixed64: 'bigint',
20
27
  sfixed32: 'number',
21
28
  sfixed64: 'bigint',
22
- bool: 'boolean',
29
+ sint32: 'number',
30
+ sint64: 'bigint',
23
31
  string: 'string',
24
- bytes: 'Uint8Array'
32
+ uint32: 'number',
33
+ uint64: 'bigint'
34
+ };
35
+ 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})`
52
+ };
53
+ const decoderGenerators = {
54
+ bool: () => 'reader.bool()',
55
+ bytes: () => 'reader.bytes()',
56
+ double: () => 'reader.double()',
57
+ // enumeration: () => `writer.double(${val})`,
58
+ fixed32: () => 'reader.fixed32()',
59
+ fixed64: () => 'reader.fixed64()',
60
+ float: () => 'reader.float()',
61
+ int32: () => 'reader.int32()',
62
+ int64: () => 'reader.int64()',
63
+ sfixed32: () => 'reader.sfixed32()',
64
+ sfixed64: () => 'reader.sfixed64()',
65
+ sint32: () => 'reader.sint32()',
66
+ sint64: () => 'reader.sint64()',
67
+ string: () => 'reader.string()',
68
+ uint32: () => 'reader.uint32()',
69
+ uint64: () => 'reader.uint64()'
25
70
  };
26
71
  function findTypeName(typeName, classDef, moduleDef) {
27
72
  if (types[typeName] != null) {
@@ -58,29 +103,46 @@ function findDef(typeName, classDef, moduleDef) {
58
103
  }
59
104
  const encoders = {
60
105
  bool: 'bool',
61
- double: 'double',
62
106
  bytes: 'bytes',
107
+ double: 'double',
63
108
  fixed32: 'fixed32',
64
109
  fixed64: 'fixed64',
65
110
  float: 'float',
66
111
  int32: 'int32',
67
112
  int64: 'int64',
113
+ sfixed32: 'sfixed32',
114
+ sfixed64: 'sfixed64',
68
115
  sint32: 'sint32',
69
116
  sint64: 'sint64',
70
117
  string: 'string',
71
118
  uint32: 'uint32',
72
- uint64: 'uint64',
73
- sfixed32: 'sfixed32',
74
- sfixed64: 'sfixed64'
119
+ uint64: 'uint64'
120
+ };
121
+ const codecTypes = {
122
+ bool: CODEC_TYPES.VARINT,
123
+ bytes: CODEC_TYPES.LENGTH_DELIMITED,
124
+ double: CODEC_TYPES.BIT64,
125
+ enum: CODEC_TYPES.VARINT,
126
+ fixed32: CODEC_TYPES.BIT32,
127
+ fixed64: CODEC_TYPES.BIT64,
128
+ float: CODEC_TYPES.BIT32,
129
+ int32: CODEC_TYPES.VARINT,
130
+ int64: CODEC_TYPES.VARINT,
131
+ message: CODEC_TYPES.LENGTH_DELIMITED,
132
+ sfixed32: CODEC_TYPES.BIT32,
133
+ sfixed64: CODEC_TYPES.BIT64,
134
+ sint32: CODEC_TYPES.VARINT,
135
+ sint64: CODEC_TYPES.VARINT,
136
+ string: CODEC_TYPES.LENGTH_DELIMITED,
137
+ uint32: CODEC_TYPES.VARINT,
138
+ uint64: CODEC_TYPES.VARINT
75
139
  };
76
140
  function isEnumDef(obj) {
77
141
  return obj.values != null;
78
142
  }
79
143
  function defineFields(fields, messageDef, moduleDef) {
80
144
  return Object.entries(fields).map(([fieldName, fieldDef]) => {
81
- const isArray = fieldDef.rule === 'repeated';
82
- const isOptional = !isArray && fieldDef.options?.proto3_optional === true;
83
- return `${fieldName}${isOptional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${isArray ? '[]' : ''}`;
145
+ return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${fieldDef.repeated ? '[]' : ''}`;
84
146
  });
85
147
  }
86
148
  function compileMessage(messageDef, moduleDef) {
@@ -101,7 +163,7 @@ enum __${messageDef.name}Values {
101
163
 
102
164
  export namespace ${messageDef.name} {
103
165
  export const codec = () => {
104
- return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
166
+ return enumeration<${messageDef.name}>(__${messageDef.name}Values)
105
167
  }
106
168
  }`.trim();
107
169
  }
@@ -133,32 +195,119 @@ export interface ${messageDef.name} {
133
195
  .join('\n ')
134
196
  .trim()}
135
197
  }`;
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');
136
217
  interfaceCodecDef = `
218
+ let _codec: Codec<${messageDef.name}>
219
+
137
220
  export const codec = (): Codec<${messageDef.name}> => {
138
- return message<${messageDef.name}>({
139
- ${Object.entries(fields)
221
+ if (_codec == null) {
222
+ _codec = message<${messageDef.name}>((obj, writer, opts = {}) => {
223
+ if (opts.lengthDelimited !== false) {
224
+ writer.fork()
225
+ }
226
+ ${Object.entries(fields)
140
227
  .map(([name, fieldDef]) => {
141
228
  let codec = encoders[fieldDef.type];
229
+ let type = fieldDef.type;
142
230
  if (codec == null) {
143
231
  const def = findDef(fieldDef.type, messageDef, moduleDef);
144
232
  if (isEnumDef(def)) {
145
233
  moduleDef.imports.add('enumeration');
234
+ type = 'enum';
146
235
  }
147
236
  else {
148
237
  moduleDef.imports.add('message');
238
+ type = 'message';
149
239
  }
150
240
  const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
151
241
  codec = `${typeName}.codec()`;
152
242
  }
153
- else {
154
- moduleDef.imports.add(codec);
243
+ return `
244
+ if (obj.${name} != null) {${fieldDef.rule === 'repeated'
245
+ ? `
246
+ 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
+ }`}`;
258
+ }).join('\n')}
259
+
260
+ if (opts.lengthDelimited !== false) {
261
+ writer.ldelim()
262
+ }
263
+ }, (reader, length) => {
264
+ const obj: any = {}
265
+
266
+ const end = length == null ? reader.len : reader.pos + length
267
+
268
+ while (reader.pos < end) {
269
+ const tag = reader.uint32()
270
+
271
+ switch (tag >>> 3) {
272
+ ${Object.entries(fields)
273
+ .map(([name, fieldDef]) => {
274
+ let codec = encoders[fieldDef.type];
275
+ let type = fieldDef.type;
276
+ if (codec == null) {
277
+ const def = findDef(fieldDef.type, messageDef, moduleDef);
278
+ if (isEnumDef(def)) {
279
+ moduleDef.imports.add('enumeration');
280
+ type = 'enum';
281
+ }
282
+ else {
283
+ moduleDef.imports.add('message');
284
+ type = 'message';
285
+ }
286
+ const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
287
+ codec = `${typeName}.codec()`;
155
288
  }
156
- return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
157
- }).join(',\n ')}
158
- })
289
+ return `case ${fieldDef.id}:${fieldDef.rule === 'repeated'
290
+ ? `
291
+ obj.${name} = obj.${name} ?? []
292
+ obj.${name}.push(${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()})`
293
+ : `
294
+ obj.${name} = ${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`}
295
+ break`;
296
+ }).join('\n ')}
297
+ default:
298
+ reader.skipType(tag & 7)
299
+ break
300
+ }
301
+ }${ensureArrayProps !== '' ? `\n\n${ensureArrayProps}` : ''}${ensureRequiredFields !== '' ? `\n${ensureRequiredFields}` : ''}
302
+
303
+ return obj
304
+ })
305
+ }
306
+
307
+ return _codec
159
308
  }
160
309
 
161
- export const encode = (obj: ${messageDef.name}): Uint8ArrayList => {
310
+ export const encode = (obj: ${messageDef.name}): Uint8Array => {
162
311
  return encodeMessage(obj, ${messageDef.name}.codec())
163
312
  }
164
313
 
@@ -195,6 +344,12 @@ function defineModule(def) {
195
344
  if (classDef.nested != null) {
196
345
  defineMessage(classDef.nested, classDef);
197
346
  }
347
+ if (classDef.fields != null) {
348
+ 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;
351
+ }
352
+ }
198
353
  if (parent == null) {
199
354
  moduleDef.globals[className] = classDef;
200
355
  }
@@ -223,12 +378,12 @@ export async function generate(source, flags) {
223
378
  if (moduleDef.imports.size > 0) {
224
379
  lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`);
225
380
  }
226
- if (moduleDef.importedTypes.size > 0) {
227
- lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`);
228
- }
229
381
  if (moduleDef.imports.has('encodeMessage')) {
230
382
  lines.push("import type { Uint8ArrayList } from 'uint8arraylist'");
231
383
  }
384
+ if (moduleDef.importedTypes.size > 0) {
385
+ lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`);
386
+ }
232
387
  lines = [
233
388
  ...lines,
234
389
  '',
@@ -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": "4.0.1",
3
+ "version": "5.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",
@@ -154,12 +154,15 @@
154
154
  },
155
155
  "dependencies": {
156
156
  "meow": "^10.1.2",
157
- "protobufjs": "^6.11.2"
157
+ "protobufjs-cli": "^1.0.0"
158
158
  },
159
159
  "devDependencies": {
160
160
  "aegir": "^37.0.5",
161
+ "long": "^5.2.0",
161
162
  "pbjs": "^0.0.14",
162
- "protons-runtime": "^2.0.0",
163
- "uint8arraylist": "^2.0.0"
163
+ "protobufjs": "^7.0.0",
164
+ "protons-runtime": "^3.0.0",
165
+ "uint8arraylist": "^2.3.2",
166
+ "uint8arrays": "^3.1.0"
164
167
  }
165
168
  }
package/src/index.ts CHANGED
@@ -1,29 +1,76 @@
1
- import { main as pbjs } from 'protobufjs/cli/pbjs.js'
1
+ import { main as pbjs } from 'protobufjs-cli/pbjs.js'
2
2
  import path from 'path'
3
3
  import { promisify } from 'util'
4
4
  import fs from 'fs/promises'
5
5
 
6
+ export enum CODEC_TYPES {
7
+ VARINT = 0,
8
+ BIT64,
9
+ LENGTH_DELIMITED,
10
+ START_GROUP,
11
+ END_GROUP,
12
+ BIT32
13
+ }
14
+
6
15
  function pathWithExtension (input: string, extension: string, outputDir?: string) {
7
16
  const output = outputDir ?? path.dirname(input)
8
17
  return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension)
9
18
  }
10
19
 
11
20
  const types: Record<string, string> = {
21
+ bool: 'boolean',
22
+ bytes: 'Uint8Array',
12
23
  double: 'number',
24
+ fixed32: 'number',
25
+ fixed64: 'bigint',
13
26
  float: 'number',
14
27
  int32: 'number',
15
28
  int64: 'bigint',
16
- uint32: 'number',
17
- uint64: 'bigint',
18
- sint32: 'number',
19
- sint64: 'bigint',
20
- fixed32: 'number',
21
- fixed64: 'bigint',
22
29
  sfixed32: 'number',
23
30
  sfixed64: 'bigint',
24
- bool: 'boolean',
31
+ sint32: 'number',
32
+ sint64: 'bigint',
25
33
  string: 'string',
26
- bytes: 'Uint8Array'
34
+ uint32: 'number',
35
+ uint64: 'bigint'
36
+ }
37
+
38
+ 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})`
55
+ }
56
+
57
+ const decoderGenerators: Record<string, () => string> = {
58
+ bool: () => 'reader.bool()',
59
+ bytes: () => 'reader.bytes()',
60
+ double: () => 'reader.double()',
61
+ // enumeration: () => `writer.double(${val})`,
62
+ fixed32: () => 'reader.fixed32()',
63
+ fixed64: () => 'reader.fixed64()',
64
+ float: () => 'reader.float()',
65
+ int32: () => 'reader.int32()',
66
+ int64: () => 'reader.int64()',
67
+ sfixed32: () => 'reader.sfixed32()',
68
+ sfixed64: () => 'reader.sfixed64()',
69
+ sint32: () => 'reader.sint32()',
70
+ sint64: () => 'reader.sint64()',
71
+ string: () => 'reader.string()',
72
+ uint32: () => 'reader.uint32()',
73
+ uint64: () => 'reader.uint64()'
27
74
  }
28
75
 
29
76
  function findTypeName (typeName: string, classDef: MessageDef, moduleDef: ModuleDef): string {
@@ -72,20 +119,40 @@ function findDef (typeName: string, classDef: MessageDef, moduleDef: ModuleDef):
72
119
 
73
120
  const encoders: Record<string, string> = {
74
121
  bool: 'bool',
75
- double: 'double',
76
122
  bytes: 'bytes',
123
+ double: 'double',
77
124
  fixed32: 'fixed32',
78
125
  fixed64: 'fixed64',
79
126
  float: 'float',
80
127
  int32: 'int32',
81
128
  int64: 'int64',
129
+ sfixed32: 'sfixed32',
130
+ sfixed64: 'sfixed64',
82
131
  sint32: 'sint32',
83
132
  sint64: 'sint64',
84
133
  string: 'string',
85
134
  uint32: 'uint32',
86
- uint64: 'uint64',
87
- sfixed32: 'sfixed32',
88
- sfixed64: 'sfixed64'
135
+ uint64: 'uint64'
136
+ }
137
+
138
+ const codecTypes: Record<string, CODEC_TYPES> = {
139
+ bool: CODEC_TYPES.VARINT,
140
+ bytes: CODEC_TYPES.LENGTH_DELIMITED,
141
+ double: CODEC_TYPES.BIT64,
142
+ enum: CODEC_TYPES.VARINT,
143
+ fixed32: CODEC_TYPES.BIT32,
144
+ fixed64: CODEC_TYPES.BIT64,
145
+ float: CODEC_TYPES.BIT32,
146
+ int32: CODEC_TYPES.VARINT,
147
+ int64: CODEC_TYPES.VARINT,
148
+ message: CODEC_TYPES.LENGTH_DELIMITED,
149
+ sfixed32: CODEC_TYPES.BIT32,
150
+ sfixed64: CODEC_TYPES.BIT64,
151
+ sint32: CODEC_TYPES.VARINT,
152
+ sint64: CODEC_TYPES.VARINT,
153
+ string: CODEC_TYPES.LENGTH_DELIMITED,
154
+ uint32: CODEC_TYPES.VARINT,
155
+ uint64: CODEC_TYPES.VARINT
89
156
  }
90
157
 
91
158
  interface ClassDef {
@@ -114,14 +181,13 @@ interface FieldDef {
114
181
  id: number
115
182
  options?: Record<string, any>
116
183
  rule: string
184
+ optional: boolean
185
+ repeated: boolean
117
186
  }
118
187
 
119
188
  function defineFields (fields: Record<string, FieldDef>, messageDef: MessageDef, moduleDef: ModuleDef) {
120
189
  return Object.entries(fields).map(([fieldName, fieldDef]) => {
121
- const isArray = fieldDef.rule === 'repeated'
122
- const isOptional = !isArray && fieldDef.options?.proto3_optional === true
123
-
124
- return `${fieldName}${isOptional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${isArray ? '[]' : ''}`
190
+ return `${fieldName}${fieldDef.optional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${fieldDef.repeated ? '[]' : ''}`
125
191
  })
126
192
  }
127
193
 
@@ -148,7 +214,7 @@ enum __${messageDef.name}Values {
148
214
 
149
215
  export namespace ${messageDef.name} {
150
216
  export const codec = () => {
151
- return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
217
+ return enumeration<${messageDef.name}>(__${messageDef.name}Values)
152
218
  }
153
219
  }`.trim()
154
220
  }
@@ -189,34 +255,132 @@ export interface ${messageDef.name} {
189
255
  .trim()
190
256
  }
191
257
  }`
258
+
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
+
192
282
  interfaceCodecDef = `
283
+ let _codec: Codec<${messageDef.name}>
284
+
193
285
  export const codec = (): Codec<${messageDef.name}> => {
194
- return message<${messageDef.name}>({
195
- ${Object.entries(fields)
286
+ if (_codec == null) {
287
+ _codec = message<${messageDef.name}>((obj, writer, opts = {}) => {
288
+ if (opts.lengthDelimited !== false) {
289
+ writer.fork()
290
+ }
291
+ ${Object.entries(fields)
196
292
  .map(([name, fieldDef]) => {
197
- let codec = encoders[fieldDef.type]
293
+ let codec: string = encoders[fieldDef.type]
294
+ let type: string = fieldDef.type
198
295
 
199
296
  if (codec == null) {
200
297
  const def = findDef(fieldDef.type, messageDef, moduleDef)
201
298
 
202
299
  if (isEnumDef(def)) {
203
300
  moduleDef.imports.add('enumeration')
301
+ type = 'enum'
204
302
  } else {
205
303
  moduleDef.imports.add('message')
304
+ type = 'message'
206
305
  }
207
306
 
208
307
  const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
209
308
  codec = `${typeName}.codec()`
210
- } else {
211
- moduleDef.imports.add(codec)
212
309
  }
213
310
 
214
- return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`
215
- }).join(',\n ')}
216
- })
311
+ return `
312
+ if (obj.${name} != null) {${
313
+ fieldDef.rule === 'repeated'
314
+ ? `
315
+ 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}`)}`
322
+ }
323
+ }${fieldDef.optional
324
+ ? ''
325
+ : ` else {
326
+ throw new Error('Protocol error: required field "${name}" was not found in object')
327
+ }`}`
328
+ }).join('\n')}
329
+
330
+ if (opts.lengthDelimited !== false) {
331
+ writer.ldelim()
332
+ }
333
+ }, (reader, length) => {
334
+ const obj: any = {}
335
+
336
+ const end = length == null ? reader.len : reader.pos + length
337
+
338
+ while (reader.pos < end) {
339
+ const tag = reader.uint32()
340
+
341
+ switch (tag >>> 3) {
342
+ ${Object.entries(fields)
343
+ .map(([name, fieldDef]) => {
344
+ let codec: string = encoders[fieldDef.type]
345
+ let type: string = fieldDef.type
346
+
347
+ if (codec == null) {
348
+ const def = findDef(fieldDef.type, messageDef, moduleDef)
349
+
350
+ if (isEnumDef(def)) {
351
+ moduleDef.imports.add('enumeration')
352
+ type = 'enum'
353
+ } else {
354
+ moduleDef.imports.add('message')
355
+ type = 'message'
356
+ }
357
+
358
+ const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
359
+ codec = `${typeName}.codec()`
360
+ }
361
+
362
+ return `case ${fieldDef.id}:${fieldDef.rule === 'repeated'
363
+ ? `
364
+ obj.${name} = obj.${name} ?? []
365
+ obj.${name}.push(${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()})`
366
+ : `
367
+ obj.${name} = ${decoderGenerators[type] == null ? `${codec}.decode(reader${type === 'message' ? ', reader.uint32()' : ''})` : decoderGenerators[type]()}`}
368
+ break`
369
+ }).join('\n ')}
370
+ default:
371
+ reader.skipType(tag & 7)
372
+ break
373
+ }
374
+ }${ensureArrayProps !== '' ? `\n\n${ensureArrayProps}` : ''}${ensureRequiredFields !== '' ? `\n${ensureRequiredFields}` : ''}
375
+
376
+ return obj
377
+ })
378
+ }
379
+
380
+ return _codec
217
381
  }
218
382
 
219
- export const encode = (obj: ${messageDef.name}): Uint8ArrayList => {
383
+ export const encode = (obj: ${messageDef.name}): Uint8Array => {
220
384
  return encodeMessage(obj, ${messageDef.name}.codec())
221
385
  }
222
386
 
@@ -269,6 +433,13 @@ function defineModule (def: ClassDef): ModuleDef {
269
433
  defineMessage(classDef.nested, classDef)
270
434
  }
271
435
 
436
+ if (classDef.fields != null) {
437
+ 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
440
+ }
441
+ }
442
+
272
443
  if (parent == null) {
273
444
  moduleDef.globals[className] = classDef
274
445
  }
@@ -311,14 +482,14 @@ export async function generate (source: string, flags: Flags) {
311
482
  lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`)
312
483
  }
313
484
 
314
- if (moduleDef.importedTypes.size > 0) {
315
- lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`)
316
- }
317
-
318
485
  if (moduleDef.imports.has('encodeMessage')) {
319
486
  lines.push("import type { Uint8ArrayList } from 'uint8arraylist'")
320
487
  }
321
488
 
489
+ if (moduleDef.importedTypes.size > 0) {
490
+ lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`)
491
+ }
492
+
322
493
  lines = [
323
494
  ...lines,
324
495
  '',