protons 3.0.2 → 3.0.5
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/dist/bin/protons.js +3 -3
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +69 -42
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +64 -23
package/dist/bin/protons.js
CHANGED
|
@@ -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
|
|
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: {
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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,iBAkC3D"}
|
package/dist/src/index.js
CHANGED
|
@@ -2,8 +2,9 @@ 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
|
-
function pathWithExtension(input, extension) {
|
|
6
|
-
|
|
5
|
+
function pathWithExtension(input, extension, outputDir) {
|
|
6
|
+
const output = outputDir ?? path.dirname(input);
|
|
7
|
+
return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension);
|
|
7
8
|
}
|
|
8
9
|
const types = {
|
|
9
10
|
double: 'number',
|
|
@@ -87,63 +88,73 @@ function compileMessage(messageDef, moduleDef) {
|
|
|
87
88
|
moduleDef.imports.add('enumeration');
|
|
88
89
|
return `
|
|
89
90
|
export enum ${messageDef.name} {
|
|
90
|
-
${Object.keys(messageDef.values).map(
|
|
91
|
-
return `${
|
|
91
|
+
${Object.keys(messageDef.values).map(name => {
|
|
92
|
+
return `${name} = '${name}'`;
|
|
93
|
+
}).join(',\n ').trim()}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
enum __${messageDef.name}Values {
|
|
97
|
+
${Object.entries(messageDef.values).map(([name, value]) => {
|
|
98
|
+
return `${name} = ${value}`;
|
|
92
99
|
}).join(',\n ').trim()}
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
export namespace ${messageDef.name} {
|
|
96
103
|
export const codec = () => {
|
|
97
|
-
return enumeration<typeof ${messageDef.name}>(${messageDef.name})
|
|
104
|
+
return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
|
|
98
105
|
}
|
|
99
|
-
}
|
|
100
|
-
`;
|
|
106
|
+
}`.trim();
|
|
101
107
|
}
|
|
102
108
|
let nested = '';
|
|
103
109
|
if (messageDef.nested != null) {
|
|
104
110
|
nested = '\n';
|
|
105
111
|
nested += Object.values(messageDef.nested)
|
|
106
112
|
.map(def => compileMessage(def, moduleDef).trim())
|
|
107
|
-
.join('\n')
|
|
113
|
+
.join('\n\n')
|
|
108
114
|
.split('\n')
|
|
109
115
|
.map(line => line.trim() === '' ? '' : ` ${line}`)
|
|
110
116
|
.join('\n');
|
|
111
|
-
nested += '\n';
|
|
112
117
|
}
|
|
113
118
|
const fields = messageDef.fields ?? {};
|
|
114
119
|
// import relevant modules
|
|
115
120
|
moduleDef.imports.add('encodeMessage');
|
|
116
121
|
moduleDef.imports.add('decodeMessage');
|
|
117
122
|
moduleDef.imports.add('message');
|
|
118
|
-
|
|
123
|
+
moduleDef.importedTypes.add('Codec');
|
|
124
|
+
const interfaceFields = defineFields(fields, messageDef, moduleDef)
|
|
125
|
+
.join('\n ')
|
|
126
|
+
.trim();
|
|
127
|
+
let interfaceDef = '';
|
|
128
|
+
let interfaceCodecDef = '';
|
|
129
|
+
if (interfaceFields !== '') {
|
|
130
|
+
interfaceDef = `
|
|
119
131
|
export interface ${messageDef.name} {
|
|
120
132
|
${defineFields(fields, messageDef, moduleDef)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export
|
|
126
|
-
export const codec = () => {
|
|
133
|
+
.join('\n ')
|
|
134
|
+
.trim()}
|
|
135
|
+
}`;
|
|
136
|
+
interfaceCodecDef = `
|
|
137
|
+
export const codec = (): Codec<${messageDef.name}> => {
|
|
127
138
|
return message<${messageDef.name}>({
|
|
128
139
|
${Object.entries(fields)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
140
|
+
.map(([name, fieldDef]) => {
|
|
141
|
+
let codec = encoders[fieldDef.type];
|
|
142
|
+
if (codec == null) {
|
|
143
|
+
const def = findDef(fieldDef.type, messageDef, moduleDef);
|
|
144
|
+
if (isEnumDef(def)) {
|
|
145
|
+
moduleDef.imports.add('enumeration');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
moduleDef.imports.add('message');
|
|
149
|
+
}
|
|
150
|
+
const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
|
|
151
|
+
codec = `${typeName}.codec()`;
|
|
135
152
|
}
|
|
136
153
|
else {
|
|
137
|
-
moduleDef.imports.add(
|
|
154
|
+
moduleDef.imports.add(codec);
|
|
138
155
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
moduleDef.imports.add(codec);
|
|
144
|
-
}
|
|
145
|
-
return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
|
|
146
|
-
}).join(',\n ')}
|
|
156
|
+
return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
|
|
157
|
+
}).join(',\n ')}
|
|
147
158
|
})
|
|
148
159
|
}
|
|
149
160
|
|
|
@@ -153,13 +164,20 @@ export namespace ${messageDef.name} {${nested}
|
|
|
153
164
|
|
|
154
165
|
export const decode = (buf: Uint8Array): ${messageDef.name} => {
|
|
155
166
|
return decodeMessage(buf, ${messageDef.name}.codec())
|
|
156
|
-
}
|
|
167
|
+
}`;
|
|
168
|
+
}
|
|
169
|
+
return `
|
|
170
|
+
${interfaceDef}
|
|
171
|
+
|
|
172
|
+
export namespace ${messageDef.name} {
|
|
173
|
+
${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
|
|
157
174
|
}
|
|
158
|
-
|
|
175
|
+
`.trimStart();
|
|
159
176
|
}
|
|
160
177
|
function defineModule(def) {
|
|
161
178
|
const moduleDef = {
|
|
162
179
|
imports: new Set(),
|
|
180
|
+
importedTypes: new Set(),
|
|
163
181
|
types: new Set(),
|
|
164
182
|
compiled: [],
|
|
165
183
|
globals: {}
|
|
@@ -197,14 +215,23 @@ export async function generate(source, flags) {
|
|
|
197
215
|
}
|
|
198
216
|
const def = JSON.parse(json);
|
|
199
217
|
const moduleDef = defineModule(def);
|
|
200
|
-
|
|
201
|
-
/* eslint-disable import/export */
|
|
202
|
-
/* eslint-disable @typescript-eslint/no-namespace */
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
218
|
+
let lines = [
|
|
219
|
+
'/* eslint-disable import/export */',
|
|
220
|
+
'/* eslint-disable @typescript-eslint/no-namespace */',
|
|
221
|
+
''
|
|
222
|
+
];
|
|
223
|
+
if (moduleDef.imports.size > 0) {
|
|
224
|
+
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`);
|
|
225
|
+
}
|
|
226
|
+
if (moduleDef.importedTypes.size > 0) {
|
|
227
|
+
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`);
|
|
228
|
+
}
|
|
229
|
+
lines = [
|
|
230
|
+
...lines,
|
|
231
|
+
'',
|
|
232
|
+
...moduleDef.compiled
|
|
233
|
+
];
|
|
234
|
+
const content = lines.join('\n').trim();
|
|
235
|
+
await fs.writeFile(pathWithExtension(source, '.ts', flags.output), content + '\n');
|
|
209
236
|
}
|
|
210
237
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5B,SAAS,iBAAiB,CAAE,KAAa,EAAE,SAAiB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -3,8 +3,9 @@ import path from 'path'
|
|
|
3
3
|
import { promisify } from 'util'
|
|
4
4
|
import fs from 'fs/promises'
|
|
5
5
|
|
|
6
|
-
function pathWithExtension (input: string, extension: string) {
|
|
7
|
-
|
|
6
|
+
function pathWithExtension (input: string, extension: string, outputDir?: string) {
|
|
7
|
+
const output = outputDir ?? path.dirname(input)
|
|
8
|
+
return path.join(output, path.basename(input).split('.').slice(0, -1).join('.') + extension)
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
const types: Record<string, string> = {
|
|
@@ -131,18 +132,25 @@ function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef): string {
|
|
|
131
132
|
return `
|
|
132
133
|
export enum ${messageDef.name} {
|
|
133
134
|
${
|
|
134
|
-
Object.keys(messageDef.values).map(
|
|
135
|
-
return `${
|
|
135
|
+
Object.keys(messageDef.values).map(name => {
|
|
136
|
+
return `${name} = '${name}'`
|
|
137
|
+
}).join(',\n ').trim()
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
enum __${messageDef.name}Values {
|
|
142
|
+
${
|
|
143
|
+
Object.entries(messageDef.values).map(([name, value]) => {
|
|
144
|
+
return `${name} = ${value}`
|
|
136
145
|
}).join(',\n ').trim()
|
|
137
146
|
}
|
|
138
147
|
}
|
|
139
148
|
|
|
140
149
|
export namespace ${messageDef.name} {
|
|
141
150
|
export const codec = () => {
|
|
142
|
-
return enumeration<typeof ${messageDef.name}>(${messageDef.name})
|
|
151
|
+
return enumeration<typeof ${messageDef.name}>(__${messageDef.name}Values)
|
|
143
152
|
}
|
|
144
|
-
}
|
|
145
|
-
`
|
|
153
|
+
}`.trim()
|
|
146
154
|
}
|
|
147
155
|
|
|
148
156
|
let nested = ''
|
|
@@ -151,11 +159,10 @@ export namespace ${messageDef.name} {
|
|
|
151
159
|
nested = '\n'
|
|
152
160
|
nested += Object.values(messageDef.nested)
|
|
153
161
|
.map(def => compileMessage(def, moduleDef).trim())
|
|
154
|
-
.join('\n')
|
|
162
|
+
.join('\n\n')
|
|
155
163
|
.split('\n')
|
|
156
164
|
.map(line => line.trim() === '' ? '' : ` ${line}`)
|
|
157
165
|
.join('\n')
|
|
158
|
-
nested += '\n'
|
|
159
166
|
}
|
|
160
167
|
|
|
161
168
|
const fields = messageDef.fields ?? {}
|
|
@@ -164,18 +171,26 @@ export namespace ${messageDef.name} {
|
|
|
164
171
|
moduleDef.imports.add('encodeMessage')
|
|
165
172
|
moduleDef.imports.add('decodeMessage')
|
|
166
173
|
moduleDef.imports.add('message')
|
|
174
|
+
moduleDef.importedTypes.add('Codec')
|
|
167
175
|
|
|
168
|
-
|
|
176
|
+
const interfaceFields = defineFields(fields, messageDef, moduleDef)
|
|
177
|
+
.join('\n ')
|
|
178
|
+
.trim()
|
|
179
|
+
|
|
180
|
+
let interfaceDef = ''
|
|
181
|
+
let interfaceCodecDef = ''
|
|
182
|
+
|
|
183
|
+
if (interfaceFields !== '') {
|
|
184
|
+
interfaceDef = `
|
|
169
185
|
export interface ${messageDef.name} {
|
|
170
186
|
${
|
|
171
187
|
defineFields(fields, messageDef, moduleDef)
|
|
172
188
|
.join('\n ')
|
|
173
189
|
.trim()
|
|
174
190
|
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export
|
|
178
|
-
export const codec = () => {
|
|
191
|
+
}`
|
|
192
|
+
interfaceCodecDef = `
|
|
193
|
+
export const codec = (): Codec<${messageDef.name}> => {
|
|
179
194
|
return message<${messageDef.name}>({
|
|
180
195
|
${Object.entries(fields)
|
|
181
196
|
.map(([name, fieldDef]) => {
|
|
@@ -207,13 +222,21 @@ export namespace ${messageDef.name} {${nested}
|
|
|
207
222
|
|
|
208
223
|
export const decode = (buf: Uint8Array): ${messageDef.name} => {
|
|
209
224
|
return decodeMessage(buf, ${messageDef.name}.codec())
|
|
225
|
+
}`
|
|
210
226
|
}
|
|
227
|
+
|
|
228
|
+
return `
|
|
229
|
+
${interfaceDef}
|
|
230
|
+
|
|
231
|
+
export namespace ${messageDef.name} {
|
|
232
|
+
${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
|
|
211
233
|
}
|
|
212
|
-
|
|
234
|
+
`.trimStart()
|
|
213
235
|
}
|
|
214
236
|
|
|
215
237
|
interface ModuleDef {
|
|
216
238
|
imports: Set<string>
|
|
239
|
+
importedTypes: Set<string>
|
|
217
240
|
types: Set<string>
|
|
218
241
|
compiled: string[]
|
|
219
242
|
globals: Record<string, ClassDef>
|
|
@@ -222,6 +245,7 @@ interface ModuleDef {
|
|
|
222
245
|
function defineModule (def: ClassDef): ModuleDef {
|
|
223
246
|
const moduleDef: ModuleDef = {
|
|
224
247
|
imports: new Set(),
|
|
248
|
+
importedTypes: new Set(),
|
|
225
249
|
types: new Set(),
|
|
226
250
|
compiled: [],
|
|
227
251
|
globals: {}
|
|
@@ -262,7 +286,11 @@ function defineModule (def: ClassDef): ModuleDef {
|
|
|
262
286
|
return moduleDef
|
|
263
287
|
}
|
|
264
288
|
|
|
265
|
-
|
|
289
|
+
interface Flags {
|
|
290
|
+
output?: string
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export async function generate (source: string, flags: Flags) {
|
|
266
294
|
// convert .protobuf to .json
|
|
267
295
|
const json = await promisify(pbjs)(['-t', 'json', source])
|
|
268
296
|
|
|
@@ -273,14 +301,27 @@ export async function generate (source: string, flags: any) {
|
|
|
273
301
|
const def = JSON.parse(json)
|
|
274
302
|
const moduleDef = defineModule(def)
|
|
275
303
|
|
|
276
|
-
|
|
277
|
-
/* eslint-disable import/export */
|
|
278
|
-
/* eslint-disable @typescript-eslint/no-namespace */
|
|
304
|
+
let lines = [
|
|
305
|
+
'/* eslint-disable import/export */',
|
|
306
|
+
'/* eslint-disable @typescript-eslint/no-namespace */',
|
|
307
|
+
''
|
|
308
|
+
]
|
|
309
|
+
|
|
310
|
+
if (moduleDef.imports.size > 0) {
|
|
311
|
+
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (moduleDef.importedTypes.size > 0) {
|
|
315
|
+
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`)
|
|
316
|
+
}
|
|
279
317
|
|
|
280
|
-
|
|
318
|
+
lines = [
|
|
319
|
+
...lines,
|
|
320
|
+
'',
|
|
321
|
+
...moduleDef.compiled
|
|
322
|
+
]
|
|
281
323
|
|
|
282
|
-
|
|
283
|
-
`.trim()
|
|
324
|
+
const content = lines.join('\n').trim()
|
|
284
325
|
|
|
285
|
-
await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n')
|
|
326
|
+
await fs.writeFile(pathWithExtension(source, '.ts', flags.output), content + '\n')
|
|
286
327
|
}
|