protons 3.0.1 → 3.0.4

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
@@ -1,5 +1,7 @@
1
1
  # protons <!-- omit in toc -->
2
2
 
3
+ [![test & maybe release](https://github.com/ipfs/protons/actions/workflows/js-test-and-release.yml/badge.svg)](https://github.com/ipfs/protons/actions/workflows/js-test-and-release.yml)
4
+
3
5
  > Generate typescript from .proto files
4
6
 
5
7
  ## Table of contents <!-- omit in toc -->
@@ -4,13 +4,13 @@ import { generate } from '../src/index.js';
4
4
  async function main() {
5
5
  const cli = meow(`
6
6
  Usage
7
- $ protons source
7
+ $ protons source...
8
8
 
9
9
  Options
10
- --output, -o Path to a directory to write transpiled typescript files into
10
+ --output, -o Path to a directory to write transpiled typescript files into
11
11
 
12
12
  Examples
13
- $ protons ./path/to/file.proto
13
+ $ protons ./path/to/file.proto ./path/to/other/file.proto
14
14
  `, {
15
15
  importMeta: import.meta,
16
16
  flags: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAoQA,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,iBAqBzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA+RA,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,iBAkCzD"}
package/dist/src/index.js CHANGED
@@ -87,75 +87,96 @@ function compileMessage(messageDef, moduleDef) {
87
87
  moduleDef.imports.add('enumeration');
88
88
  return `
89
89
  export enum ${messageDef.name} {
90
- ${Object.entries(messageDef.values).map(([enumValueName, enumValue]) => {
91
- return `${enumValueName} = '${enumValueName}'`;
90
+ ${Object.keys(messageDef.values).map(name => {
91
+ return `${name} = '${name}'`;
92
92
  }).join(',\n ').trim()}
93
93
  }
94
94
 
95
- export namespace ${messageDef.name} {
96
- export const codec = enumeration<typeof ${messageDef.name}>(${messageDef.name})
95
+ enum __${messageDef.name}Values {
96
+ ${Object.entries(messageDef.values).map(([name, value]) => {
97
+ return `${name} = ${value}`;
98
+ }).join(',\n ').trim()}
97
99
  }
98
- `;
100
+
101
+ export namespace ${messageDef.name} {
102
+ export const codec = () => {
103
+ return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
104
+ }
105
+ }`.trim();
99
106
  }
100
107
  let nested = '';
101
108
  if (messageDef.nested != null) {
102
109
  nested = '\n';
103
110
  nested += Object.values(messageDef.nested)
104
111
  .map(def => compileMessage(def, moduleDef).trim())
105
- .join('\n')
112
+ .join('\n\n')
106
113
  .split('\n')
107
114
  .map(line => line.trim() === '' ? '' : ` ${line}`)
108
115
  .join('\n');
109
- nested += '\n';
110
116
  }
111
117
  const fields = messageDef.fields ?? {};
112
118
  // import relevant modules
113
119
  moduleDef.imports.add('encodeMessage');
114
120
  moduleDef.imports.add('decodeMessage');
115
121
  moduleDef.imports.add('message');
116
- return `
122
+ moduleDef.importedTypes.add('Codec');
123
+ const interfaceFields = defineFields(fields, messageDef, moduleDef)
124
+ .join('\n ')
125
+ .trim();
126
+ let interfaceDef = '';
127
+ let interfaceCodecDef = '';
128
+ if (interfaceFields !== '') {
129
+ interfaceDef = `
117
130
  export interface ${messageDef.name} {
118
131
  ${defineFields(fields, messageDef, moduleDef)
119
- .join('\n ')
120
- .trim()}
121
- }
122
-
123
- export namespace ${messageDef.name} {${nested}
124
- export const codec = message<${messageDef.name}>({
125
- ${Object.entries(fields)
126
- .map(([name, fieldDef]) => {
127
- let codec = encoders[fieldDef.type];
128
- if (codec == null) {
129
- const def = findDef(fieldDef.type, messageDef, moduleDef);
130
- if (isEnumDef(def)) {
131
- moduleDef.imports.add('enumeration');
132
+ .join('\n ')
133
+ .trim()}
134
+ }`;
135
+ interfaceCodecDef = `
136
+ export const codec = (): Codec<${messageDef.name}> => {
137
+ return message<${messageDef.name}>({
138
+ ${Object.entries(fields)
139
+ .map(([name, fieldDef]) => {
140
+ let codec = encoders[fieldDef.type];
141
+ if (codec == null) {
142
+ const def = findDef(fieldDef.type, messageDef, moduleDef);
143
+ if (isEnumDef(def)) {
144
+ moduleDef.imports.add('enumeration');
145
+ }
146
+ else {
147
+ moduleDef.imports.add('message');
148
+ }
149
+ const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
150
+ codec = `${typeName}.codec()`;
132
151
  }
133
152
  else {
134
- moduleDef.imports.add('message');
153
+ moduleDef.imports.add(codec);
135
154
  }
136
- const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
137
- codec = `${typeName}.codec`;
138
- }
139
- else {
140
- moduleDef.imports.add(codec);
141
- }
142
- return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
143
- }).join(',\n ')}
144
- })
155
+ return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
156
+ }).join(',\n ')}
157
+ })
158
+ }
145
159
 
146
160
  export const encode = (obj: ${messageDef.name}): Uint8Array => {
147
- return encodeMessage(obj, ${messageDef.name}.codec)
161
+ return encodeMessage(obj, ${messageDef.name}.codec())
148
162
  }
149
163
 
150
164
  export const decode = (buf: Uint8Array): ${messageDef.name} => {
151
- return decodeMessage(buf, ${messageDef.name}.codec)
152
- }
165
+ return decodeMessage(buf, ${messageDef.name}.codec())
166
+ }`;
167
+ }
168
+ return `
169
+ ${interfaceDef}
170
+
171
+ export namespace ${messageDef.name} {
172
+ ${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
153
173
  }
154
- `;
174
+ `.trimStart();
155
175
  }
156
176
  function defineModule(def) {
157
177
  const moduleDef = {
158
178
  imports: new Set(),
179
+ importedTypes: new Set(),
159
180
  types: new Set(),
160
181
  compiled: [],
161
182
  globals: {}
@@ -193,14 +214,23 @@ export async function generate(source, flags) {
193
214
  }
194
215
  const def = JSON.parse(json);
195
216
  const moduleDef = defineModule(def);
196
- const content = `
197
- /* eslint-disable import/export */
198
- /* eslint-disable @typescript-eslint/no-namespace */
199
-
200
- import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'
201
-
202
- ${moduleDef.compiled.map(str => str.trim()).join('\n\n').trim()}
203
- `.trim();
217
+ let lines = [
218
+ '/* eslint-disable import/export */',
219
+ '/* eslint-disable @typescript-eslint/no-namespace */',
220
+ ''
221
+ ];
222
+ if (moduleDef.imports.size > 0) {
223
+ lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`);
224
+ }
225
+ if (moduleDef.importedTypes.size > 0) {
226
+ lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`);
227
+ }
228
+ lines = [
229
+ ...lines,
230
+ '',
231
+ ...moduleDef.compiled
232
+ ];
233
+ const content = lines.join('\n').trim();
204
234
  await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n');
205
235
  }
206
236
  //# 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": "3.0.1",
3
+ "version": "3.0.4",
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",
@@ -141,19 +141,18 @@
141
141
  },
142
142
  "scripts": {
143
143
  "lint": "aegir lint",
144
- "dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
145
- "build": "tsc",
146
- "pretest": "npm run build",
147
- "test": "aegir test -t node -f ./dist/test/*.js -f ./dist/test/**/*.js",
148
- "test:node": "npm run test -- -t node --cov",
149
- "release": "semantic-release -e semantic-release-monorepo"
144
+ "dep-check": "aegir dep-check",
145
+ "build": "aegir build",
146
+ "test": "aegir test -t node",
147
+ "test:node": "aegir test -t node --cov",
148
+ "release": "aegir release"
150
149
  },
151
150
  "dependencies": {
152
151
  "meow": "^10.1.2",
153
152
  "protobufjs": "^6.11.2"
154
153
  },
155
154
  "devDependencies": {
156
- "aegir": "^36.1.3",
155
+ "aegir": "^37.0.5",
157
156
  "pbjs": "^0.0.14",
158
157
  "protons-runtime": "^1.0.0"
159
158
  }
package/src/index.ts CHANGED
@@ -131,16 +131,25 @@ function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef): string {
131
131
  return `
132
132
  export enum ${messageDef.name} {
133
133
  ${
134
- Object.entries(messageDef.values).map(([enumValueName, enumValue]) => {
135
- return `${enumValueName} = '${enumValueName}'`
134
+ Object.keys(messageDef.values).map(name => {
135
+ return `${name} = '${name}'`
136
136
  }).join(',\n ').trim()
137
137
  }
138
138
  }
139
139
 
140
- export namespace ${messageDef.name} {
141
- export const codec = enumeration<typeof ${messageDef.name}>(${messageDef.name})
140
+ enum __${messageDef.name}Values {
141
+ ${
142
+ Object.entries(messageDef.values).map(([name, value]) => {
143
+ return `${name} = ${value}`
144
+ }).join(',\n ').trim()
145
+ }
142
146
  }
143
- `
147
+
148
+ export namespace ${messageDef.name} {
149
+ export const codec = () => {
150
+ return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
151
+ }
152
+ }`.trim()
144
153
  }
145
154
 
146
155
  let nested = ''
@@ -149,11 +158,10 @@ export namespace ${messageDef.name} {
149
158
  nested = '\n'
150
159
  nested += Object.values(messageDef.nested)
151
160
  .map(def => compileMessage(def, moduleDef).trim())
152
- .join('\n')
161
+ .join('\n\n')
153
162
  .split('\n')
154
163
  .map(line => line.trim() === '' ? '' : ` ${line}`)
155
164
  .join('\n')
156
- nested += '\n'
157
165
  }
158
166
 
159
167
  const fields = messageDef.fields ?? {}
@@ -162,19 +170,28 @@ export namespace ${messageDef.name} {
162
170
  moduleDef.imports.add('encodeMessage')
163
171
  moduleDef.imports.add('decodeMessage')
164
172
  moduleDef.imports.add('message')
173
+ moduleDef.importedTypes.add('Codec')
165
174
 
166
- return `
175
+ const interfaceFields = defineFields(fields, messageDef, moduleDef)
176
+ .join('\n ')
177
+ .trim()
178
+
179
+ let interfaceDef = ''
180
+ let interfaceCodecDef = ''
181
+
182
+ if (interfaceFields !== '') {
183
+ interfaceDef = `
167
184
  export interface ${messageDef.name} {
168
185
  ${
169
186
  defineFields(fields, messageDef, moduleDef)
170
187
  .join('\n ')
171
188
  .trim()
172
189
  }
173
- }
174
-
175
- export namespace ${messageDef.name} {${nested}
176
- export const codec = message<${messageDef.name}>({
177
- ${Object.entries(fields)
190
+ }`
191
+ interfaceCodecDef = `
192
+ export const codec = (): Codec<${messageDef.name}> => {
193
+ return message<${messageDef.name}>({
194
+ ${Object.entries(fields)
178
195
  .map(([name, fieldDef]) => {
179
196
  let codec = encoders[fieldDef.type]
180
197
 
@@ -188,28 +205,37 @@ export namespace ${messageDef.name} {${nested}
188
205
  }
189
206
 
190
207
  const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
191
- codec = `${typeName}.codec`
208
+ codec = `${typeName}.codec()`
192
209
  } else {
193
210
  moduleDef.imports.add(codec)
194
211
  }
195
212
 
196
213
  return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`
197
- }).join(',\n ')}
198
- })
214
+ }).join(',\n ')}
215
+ })
216
+ }
199
217
 
200
218
  export const encode = (obj: ${messageDef.name}): Uint8Array => {
201
- return encodeMessage(obj, ${messageDef.name}.codec)
219
+ return encodeMessage(obj, ${messageDef.name}.codec())
202
220
  }
203
221
 
204
222
  export const decode = (buf: Uint8Array): ${messageDef.name} => {
205
- return decodeMessage(buf, ${messageDef.name}.codec)
223
+ return decodeMessage(buf, ${messageDef.name}.codec())
224
+ }`
206
225
  }
226
+
227
+ return `
228
+ ${interfaceDef}
229
+
230
+ export namespace ${messageDef.name} {
231
+ ${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
207
232
  }
208
- `
233
+ `.trimStart()
209
234
  }
210
235
 
211
236
  interface ModuleDef {
212
237
  imports: Set<string>
238
+ importedTypes: Set<string>
213
239
  types: Set<string>
214
240
  compiled: string[]
215
241
  globals: Record<string, ClassDef>
@@ -218,6 +244,7 @@ interface ModuleDef {
218
244
  function defineModule (def: ClassDef): ModuleDef {
219
245
  const moduleDef: ModuleDef = {
220
246
  imports: new Set(),
247
+ importedTypes: new Set(),
221
248
  types: new Set(),
222
249
  compiled: [],
223
250
  globals: {}
@@ -269,14 +296,27 @@ export async function generate (source: string, flags: any) {
269
296
  const def = JSON.parse(json)
270
297
  const moduleDef = defineModule(def)
271
298
 
272
- const content = `
273
- /* eslint-disable import/export */
274
- /* eslint-disable @typescript-eslint/no-namespace */
299
+ let lines = [
300
+ '/* eslint-disable import/export */',
301
+ '/* eslint-disable @typescript-eslint/no-namespace */',
302
+ ''
303
+ ]
304
+
305
+ if (moduleDef.imports.size > 0) {
306
+ lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`)
307
+ }
308
+
309
+ if (moduleDef.importedTypes.size > 0) {
310
+ lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`)
311
+ }
275
312
 
276
- import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'
313
+ lines = [
314
+ ...lines,
315
+ '',
316
+ ...moduleDef.compiled
317
+ ]
277
318
 
278
- ${moduleDef.compiled.map(str => str.trim()).join('\n\n').trim()}
279
- `.trim()
319
+ const content = lines.join('\n').trim()
280
320
 
281
321
  await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n')
282
322
  }