protons 3.0.0 → 3.0.3
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 +4 -1
- package/dist/bin/protons.js +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +66 -42
- package/dist/src/index.js.map +1 -1
- package/package.json +7 -9
- package/src/index.ts +56 -24
package/README.md
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
# protons <!-- omit in toc -->
|
|
2
2
|
|
|
3
|
+
[](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 -->
|
|
6
8
|
|
|
9
|
+
- [Install](#install)
|
|
7
10
|
- [Usage](#usage)
|
|
8
11
|
- [Contribute](#contribute)
|
|
9
12
|
- [License](#license)
|
|
10
13
|
|
|
11
|
-
##
|
|
14
|
+
## Install
|
|
12
15
|
|
|
13
16
|
To use this project, add `protons` as a development dependency and `protons-runtime` as a runtime dependency.
|
|
14
17
|
|
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.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":"AAuRA,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,iBAkCzD"}
|
package/dist/src/index.js
CHANGED
|
@@ -87,75 +87,90 @@ function compileMessage(messageDef, moduleDef) {
|
|
|
87
87
|
moduleDef.imports.add('enumeration');
|
|
88
88
|
return `
|
|
89
89
|
export enum ${messageDef.name} {
|
|
90
|
-
${Object.
|
|
90
|
+
${Object.keys(messageDef.values).map(enumValueName => {
|
|
91
91
|
return `${enumValueName} = '${enumValueName}'`;
|
|
92
92
|
}).join(',\n ').trim()}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
export namespace ${messageDef.name} {
|
|
96
|
-
export const codec =
|
|
97
|
-
}
|
|
98
|
-
|
|
96
|
+
export const codec = () => {
|
|
97
|
+
return enumeration<typeof ${messageDef.name}>(${messageDef.name})
|
|
98
|
+
}
|
|
99
|
+
}`.trim();
|
|
99
100
|
}
|
|
100
101
|
let nested = '';
|
|
101
102
|
if (messageDef.nested != null) {
|
|
102
103
|
nested = '\n';
|
|
103
104
|
nested += Object.values(messageDef.nested)
|
|
104
105
|
.map(def => compileMessage(def, moduleDef).trim())
|
|
105
|
-
.join('\n')
|
|
106
|
+
.join('\n\n')
|
|
106
107
|
.split('\n')
|
|
107
108
|
.map(line => line.trim() === '' ? '' : ` ${line}`)
|
|
108
109
|
.join('\n');
|
|
109
|
-
nested += '\n';
|
|
110
110
|
}
|
|
111
111
|
const fields = messageDef.fields ?? {};
|
|
112
112
|
// import relevant modules
|
|
113
113
|
moduleDef.imports.add('encodeMessage');
|
|
114
114
|
moduleDef.imports.add('decodeMessage');
|
|
115
115
|
moduleDef.imports.add('message');
|
|
116
|
-
|
|
116
|
+
moduleDef.importedTypes.add('Codec');
|
|
117
|
+
const interfaceFields = defineFields(fields, messageDef, moduleDef)
|
|
118
|
+
.join('\n ')
|
|
119
|
+
.trim();
|
|
120
|
+
let interfaceDef = '';
|
|
121
|
+
let interfaceCodecDef = '';
|
|
122
|
+
if (interfaceFields !== '') {
|
|
123
|
+
interfaceDef = `
|
|
117
124
|
export interface ${messageDef.name} {
|
|
118
125
|
${defineFields(fields, messageDef, moduleDef)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
126
|
+
.join('\n ')
|
|
127
|
+
.trim()}
|
|
128
|
+
}`;
|
|
129
|
+
interfaceCodecDef = `
|
|
130
|
+
export const codec = (): Codec<${messageDef.name}> => {
|
|
131
|
+
return message<${messageDef.name}>({
|
|
132
|
+
${Object.entries(fields)
|
|
133
|
+
.map(([name, fieldDef]) => {
|
|
134
|
+
let codec = encoders[fieldDef.type];
|
|
135
|
+
if (codec == null) {
|
|
136
|
+
const def = findDef(fieldDef.type, messageDef, moduleDef);
|
|
137
|
+
if (isEnumDef(def)) {
|
|
138
|
+
moduleDef.imports.add('enumeration');
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
moduleDef.imports.add('message');
|
|
142
|
+
}
|
|
143
|
+
const typeName = findTypeName(fieldDef.type, messageDef, moduleDef);
|
|
144
|
+
codec = `${typeName}.codec()`;
|
|
132
145
|
}
|
|
133
146
|
else {
|
|
134
|
-
moduleDef.imports.add(
|
|
147
|
+
moduleDef.imports.add(codec);
|
|
135
148
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
})
|
|
149
|
+
return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`;
|
|
150
|
+
}).join(',\n ')}
|
|
151
|
+
})
|
|
152
|
+
}
|
|
145
153
|
|
|
146
154
|
export const encode = (obj: ${messageDef.name}): Uint8Array => {
|
|
147
|
-
return encodeMessage(obj, ${messageDef.name}.codec)
|
|
155
|
+
return encodeMessage(obj, ${messageDef.name}.codec())
|
|
148
156
|
}
|
|
149
157
|
|
|
150
158
|
export const decode = (buf: Uint8Array): ${messageDef.name} => {
|
|
151
|
-
return decodeMessage(buf, ${messageDef.name}.codec)
|
|
152
|
-
}
|
|
159
|
+
return decodeMessage(buf, ${messageDef.name}.codec())
|
|
160
|
+
}`;
|
|
161
|
+
}
|
|
162
|
+
return `
|
|
163
|
+
${interfaceDef}
|
|
164
|
+
|
|
165
|
+
export namespace ${messageDef.name} {
|
|
166
|
+
${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
|
|
153
167
|
}
|
|
154
|
-
|
|
168
|
+
`.trimStart();
|
|
155
169
|
}
|
|
156
170
|
function defineModule(def) {
|
|
157
171
|
const moduleDef = {
|
|
158
172
|
imports: new Set(),
|
|
173
|
+
importedTypes: new Set(),
|
|
159
174
|
types: new Set(),
|
|
160
175
|
compiled: [],
|
|
161
176
|
globals: {}
|
|
@@ -193,14 +208,23 @@ export async function generate(source, flags) {
|
|
|
193
208
|
}
|
|
194
209
|
const def = JSON.parse(json);
|
|
195
210
|
const moduleDef = defineModule(def);
|
|
196
|
-
|
|
197
|
-
/* eslint-disable import/export */
|
|
198
|
-
/* eslint-disable @typescript-eslint/no-namespace */
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
211
|
+
let lines = [
|
|
212
|
+
'/* eslint-disable import/export */',
|
|
213
|
+
'/* eslint-disable @typescript-eslint/no-namespace */',
|
|
214
|
+
''
|
|
215
|
+
];
|
|
216
|
+
if (moduleDef.imports.size > 0) {
|
|
217
|
+
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`);
|
|
218
|
+
}
|
|
219
|
+
if (moduleDef.importedTypes.size > 0) {
|
|
220
|
+
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`);
|
|
221
|
+
}
|
|
222
|
+
lines = [
|
|
223
|
+
...lines,
|
|
224
|
+
'',
|
|
225
|
+
...moduleDef.compiled
|
|
226
|
+
];
|
|
227
|
+
const content = lines.join('\n').trim();
|
|
204
228
|
await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n');
|
|
205
229
|
}
|
|
206
230
|
//# 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":"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
|
|
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;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;AAC3G,CAAC;AAED,MAAM,KAAK,GAA2B;IACpC,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,YAAY;CACpB,CAAA;AAED,SAAS,YAAY,CAAE,QAAgB,EAAE,QAAoB,EAAE,SAAoB;IACjF,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAA;KACvB;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;QACvC,OAAO,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAA;KAC1C;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE;QAC3B,OAAO,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAC1D;IAED,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;QACvC,OAAO,QAAQ,CAAA;KAChB;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,OAAO,CAAE,QAAgB,EAAE,QAAoB,EAAE,SAAoB;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;QACvC,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;KACnC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE;QAC3B,OAAO,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KACrD;IAED,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;QACvC,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;KACnC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,QAAQ,GAA2B;IACvC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACrB,CAAA;AAmBD,SAAS,SAAS,CAAE,GAAQ;IAC1B,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI,CAAA;AAC3B,CAAC;AASD,SAAS,YAAY,CAAE,MAAgC,EAAE,UAAsB,EAAE,SAAoB;IACnG,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAA;QAC5C,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAA;QAEzE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAC5H,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,cAAc,CAAE,UAAsB,EAAE,SAAoB;IACnE,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE;QACzB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAEpC,OAAO;cACG,UAAU,CAAC,IAAI;IAEzB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACjD,OAAO,GAAG,aAAa,OAAO,aAAa,GAAG,CAAA;QAChD,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EACvB;;;mBAGiB,UAAU,CAAC,IAAI;;gCAEF,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;;EAEjE,CAAC,IAAI,EAAE,CAAA;KACN;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE;QAC7B,MAAM,GAAG,IAAI,CAAA;QACb,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;aACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;aACjD,IAAI,CAAC,MAAM,CAAC;aACZ,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;aAClD,IAAI,CAAC,IAAI,CAAC,CAAA;KACd;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAA;IAEtC,0BAA0B;IAC1B,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IACtC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IACtC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAChC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEpC,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;SAChE,IAAI,CAAC,MAAM,CAAC;SACZ,IAAI,EAAE,CAAA;IAET,IAAI,YAAY,GAAG,EAAE,CAAA;IACrB,IAAI,iBAAiB,GAAG,EAAE,CAAA;IAE1B,IAAI,eAAe,KAAK,EAAE,EAAE;QAC1B,YAAY,GAAG;mBACA,UAAU,CAAC,IAAI;IAE9B,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;aACxC,IAAI,CAAC,MAAM,CAAC;aACZ,IAAI,EACT;EACA,CAAA;QACE,iBAAiB,GAAG;mCACW,UAAU,CAAC,IAAI;qBAC7B,UAAU,CAAC,IAAI;QAC5B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE;YACxB,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAEnC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACjB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;gBAEzD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;oBAClB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;iBACrC;qBAAM;oBACL,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;iBACjC;gBAED,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;gBACnE,KAAK,GAAG,GAAG,QAAQ,UAAU,CAAA;aAC9B;iBAAM;gBACL,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;aAC7B;YAED,OAAO,GAAG,QAAQ,CAAC,EAAE,cAAc,IAAI,aAAa,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAA;QAChM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;;;;gCAIQ,UAAU,CAAC,IAAI;gCACf,UAAU,CAAC,IAAI;;;6CAGF,UAAU,CAAC,IAAI;gCAC5B,UAAU,CAAC,IAAI;IAC3C,CAAA;KACD;IAED,OAAO;EACP,YAAY;;mBAEK,UAAU,CAAC,IAAI;IAC9B,GAAG,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC,IAAI,EAAE;;CAEjG,CAAC,SAAS,EAAE,CAAA;AACb,CAAC;AAUD,SAAS,YAAY,CAAE,GAAa;IAClC,MAAM,SAAS,GAAc;QAC3B,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;KACZ,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAA;IAEvB,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;KAC3D;IAED,SAAS,aAAa,CAAE,IAA8B,EAAE,MAAiB;QACvE,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;YAEhC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAA;YACzB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAA;YACxB,QAAQ,CAAC,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAA;YAElF,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE;gBAC3B,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;aACzC;YAED,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAA;aACxC;SACF;IACH,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,CAAA;IAEnB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;QAEhC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;KAC7D;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,MAAc,EAAE,KAAU;IACxD,6BAA6B;IAC7B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAE1D,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,8BAA8B,CAAC,CAAA;KAC3E;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAEnC,IAAI,KAAK,GAAG;QACV,oCAAoC;QACpC,sDAAsD;QACtD,EAAE;KACH,CAAA;IAED,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE;QAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;KAC5F;IAED,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;QACpC,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;KACvG;IAED,KAAK,GAAG;QACN,GAAG,KAAK;QACR,EAAE;QACF,GAAG,SAAS,CAAC,QAAQ;KACtB,CAAA;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IAEvC,MAAM,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAA;AACtE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "protons",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
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,20 +141,18 @@
|
|
|
141
141
|
},
|
|
142
142
|
"scripts": {
|
|
143
143
|
"lint": "aegir lint",
|
|
144
|
-
"dep-check": "aegir dep-check
|
|
145
|
-
"build": "
|
|
146
|
-
"
|
|
147
|
-
"test": "aegir test -t node
|
|
148
|
-
"
|
|
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": "^
|
|
157
|
-
"long": "^4.0.0",
|
|
155
|
+
"aegir": "^37.0.5",
|
|
158
156
|
"pbjs": "^0.0.14",
|
|
159
157
|
"protons-runtime": "^1.0.0"
|
|
160
158
|
}
|
package/src/index.ts
CHANGED
|
@@ -131,16 +131,17 @@ function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef): string {
|
|
|
131
131
|
return `
|
|
132
132
|
export enum ${messageDef.name} {
|
|
133
133
|
${
|
|
134
|
-
Object.
|
|
134
|
+
Object.keys(messageDef.values).map(enumValueName => {
|
|
135
135
|
return `${enumValueName} = '${enumValueName}'`
|
|
136
136
|
}).join(',\n ').trim()
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
export namespace ${messageDef.name} {
|
|
141
|
-
export const codec =
|
|
142
|
-
}
|
|
143
|
-
|
|
141
|
+
export const codec = () => {
|
|
142
|
+
return enumeration<typeof ${messageDef.name}>(${messageDef.name})
|
|
143
|
+
}
|
|
144
|
+
}`.trim()
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
let nested = ''
|
|
@@ -149,11 +150,10 @@ export namespace ${messageDef.name} {
|
|
|
149
150
|
nested = '\n'
|
|
150
151
|
nested += Object.values(messageDef.nested)
|
|
151
152
|
.map(def => compileMessage(def, moduleDef).trim())
|
|
152
|
-
.join('\n')
|
|
153
|
+
.join('\n\n')
|
|
153
154
|
.split('\n')
|
|
154
155
|
.map(line => line.trim() === '' ? '' : ` ${line}`)
|
|
155
156
|
.join('\n')
|
|
156
|
-
nested += '\n'
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
const fields = messageDef.fields ?? {}
|
|
@@ -162,19 +162,28 @@ export namespace ${messageDef.name} {
|
|
|
162
162
|
moduleDef.imports.add('encodeMessage')
|
|
163
163
|
moduleDef.imports.add('decodeMessage')
|
|
164
164
|
moduleDef.imports.add('message')
|
|
165
|
+
moduleDef.importedTypes.add('Codec')
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
const interfaceFields = defineFields(fields, messageDef, moduleDef)
|
|
168
|
+
.join('\n ')
|
|
169
|
+
.trim()
|
|
170
|
+
|
|
171
|
+
let interfaceDef = ''
|
|
172
|
+
let interfaceCodecDef = ''
|
|
173
|
+
|
|
174
|
+
if (interfaceFields !== '') {
|
|
175
|
+
interfaceDef = `
|
|
167
176
|
export interface ${messageDef.name} {
|
|
168
177
|
${
|
|
169
178
|
defineFields(fields, messageDef, moduleDef)
|
|
170
179
|
.join('\n ')
|
|
171
180
|
.trim()
|
|
172
181
|
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export
|
|
176
|
-
|
|
177
|
-
|
|
182
|
+
}`
|
|
183
|
+
interfaceCodecDef = `
|
|
184
|
+
export const codec = (): Codec<${messageDef.name}> => {
|
|
185
|
+
return message<${messageDef.name}>({
|
|
186
|
+
${Object.entries(fields)
|
|
178
187
|
.map(([name, fieldDef]) => {
|
|
179
188
|
let codec = encoders[fieldDef.type]
|
|
180
189
|
|
|
@@ -188,28 +197,37 @@ export namespace ${messageDef.name} {${nested}
|
|
|
188
197
|
}
|
|
189
198
|
|
|
190
199
|
const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
|
|
191
|
-
codec = `${typeName}.codec`
|
|
200
|
+
codec = `${typeName}.codec()`
|
|
192
201
|
} else {
|
|
193
202
|
moduleDef.imports.add(codec)
|
|
194
203
|
}
|
|
195
204
|
|
|
196
205
|
return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`
|
|
197
|
-
}).join(',\n
|
|
198
|
-
|
|
206
|
+
}).join(',\n ')}
|
|
207
|
+
})
|
|
208
|
+
}
|
|
199
209
|
|
|
200
210
|
export const encode = (obj: ${messageDef.name}): Uint8Array => {
|
|
201
|
-
return encodeMessage(obj, ${messageDef.name}.codec)
|
|
211
|
+
return encodeMessage(obj, ${messageDef.name}.codec())
|
|
202
212
|
}
|
|
203
213
|
|
|
204
214
|
export const decode = (buf: Uint8Array): ${messageDef.name} => {
|
|
205
|
-
return decodeMessage(buf, ${messageDef.name}.codec)
|
|
215
|
+
return decodeMessage(buf, ${messageDef.name}.codec())
|
|
216
|
+
}`
|
|
206
217
|
}
|
|
218
|
+
|
|
219
|
+
return `
|
|
220
|
+
${interfaceDef}
|
|
221
|
+
|
|
222
|
+
export namespace ${messageDef.name} {
|
|
223
|
+
${`${nested}${nested !== '' && interfaceCodecDef !== '' ? '\n' : ''}${interfaceCodecDef}`.trim()}
|
|
207
224
|
}
|
|
208
|
-
|
|
225
|
+
`.trimStart()
|
|
209
226
|
}
|
|
210
227
|
|
|
211
228
|
interface ModuleDef {
|
|
212
229
|
imports: Set<string>
|
|
230
|
+
importedTypes: Set<string>
|
|
213
231
|
types: Set<string>
|
|
214
232
|
compiled: string[]
|
|
215
233
|
globals: Record<string, ClassDef>
|
|
@@ -218,6 +236,7 @@ interface ModuleDef {
|
|
|
218
236
|
function defineModule (def: ClassDef): ModuleDef {
|
|
219
237
|
const moduleDef: ModuleDef = {
|
|
220
238
|
imports: new Set(),
|
|
239
|
+
importedTypes: new Set(),
|
|
221
240
|
types: new Set(),
|
|
222
241
|
compiled: [],
|
|
223
242
|
globals: {}
|
|
@@ -269,14 +288,27 @@ export async function generate (source: string, flags: any) {
|
|
|
269
288
|
const def = JSON.parse(json)
|
|
270
289
|
const moduleDef = defineModule(def)
|
|
271
290
|
|
|
272
|
-
|
|
273
|
-
/* eslint-disable import/export */
|
|
274
|
-
/* eslint-disable @typescript-eslint/no-namespace */
|
|
291
|
+
let lines = [
|
|
292
|
+
'/* eslint-disable import/export */',
|
|
293
|
+
'/* eslint-disable @typescript-eslint/no-namespace */',
|
|
294
|
+
''
|
|
295
|
+
]
|
|
296
|
+
|
|
297
|
+
if (moduleDef.imports.size > 0) {
|
|
298
|
+
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (moduleDef.importedTypes.size > 0) {
|
|
302
|
+
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`)
|
|
303
|
+
}
|
|
275
304
|
|
|
276
|
-
|
|
305
|
+
lines = [
|
|
306
|
+
...lines,
|
|
307
|
+
'',
|
|
308
|
+
...moduleDef.compiled
|
|
309
|
+
]
|
|
277
310
|
|
|
278
|
-
|
|
279
|
-
`.trim()
|
|
311
|
+
const content = lines.join('\n').trim()
|
|
280
312
|
|
|
281
313
|
await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n')
|
|
282
314
|
}
|