-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprotobufUtils.js
87 lines (78 loc) · 2.51 KB
/
protobufUtils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { ProtobufConverter } from "./ProtobufConverter.js";
import { ProtobufConverterV3 } from "./ProtobufConverterV3.js";
import * as pbjs from "protobufjs/cli/pbjs.js";
import { exec } from 'child_process';
const uuidFields = new Set(
[
"trackIdentifier",
"remoteClientId",
"callId",
"clientId",
"peerConnectionId",
"trackId",
"streamId",
"sinkId",
"sfuStreamId",
"sfuSinkId",
"sfuId",
// "transportId",
"padId",
"channelId",
]
);
export const makeProtobufJson = path => new Promise(resolve => {
pbjs.main([ path ], function(err, output) {
if (err)
throw err;
resolve(output);
});
})
export function convertToProtobufSchema(avroSchema, version) {
const samplesProto = ProtobufConverter.from(avroSchema, version);
const samplesProtoStr = samplesProto.toLines().join("\n");
const samplesModule = [
`syntax = "proto2";`,
``,
`package org.observertc.schemas.protobuf;`,
``,
// `option java_outer_classname = "Protobuf${samplesProto.name}";`,
// `option java_package = "org.observertc.observer.samples";`,
// ``,
samplesProtoStr
].join("\n");
return samplesModule;
// fs.writeFileSync(outputPath, samplesModule);
}
export function convertToProtobufSchemaV3(avroSchema, version, allOptional = false) {
const samplesProto = ProtobufConverterV3.from(avroSchema, version, uuidFields, allOptional);
const samplesProtoStr = samplesProto.toLines().join("\n");
const samplesModule = [
`syntax = "proto3";`,
``,
`package org.observertc.schemas.protobuf;`,
``,
// `option java_outer_classname = "Protobuf${samplesProto.name}";`,
// `option java_package = "org.observertc.observer.samples";`,
// ``,
samplesProtoStr
].join("\n");
return samplesModule;
// fs.writeFileSync(outputPath, samplesModule);
}
export async function createTypescriptModels(protoPath, genOutput) {
await new Promise((resolve, reject) => {
const command = [
`PATH=$PATH:$(pwd)/node_modules/.bin`,
`protoc`,
// `./node_modules/.bin/protoc-gen-es`,
`-I . `,
`--es_out ${genOutput}`,
`--es_opt target=ts`,
protoPath
].join(" ");
exec(command, (error, stdout, stderr) => {
if (error) reject(error);
else resolve();
});
});
}