Skip to content

Commit 58f149f

Browse files
author
Tate
committed
add compiler unit tests
1 parent a07d96c commit 58f149f

14 files changed

+47188
-48
lines changed

src/autogenerate/index.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ function writeSerializers(types: ProtoTypes[], isTopLevel = true): string {
9090
) as MessageType;
9191
res += `for (const key in msg.${field.name}) {
9292
writer.writeMessage(${field.index}, {}, (_, mapWriter) => {
93-
mapWriter.${map.content.fields[0].write}(1, key as any);
93+
mapWriter.${
94+
map.content.fields[0].write
95+
}(1, key${printIfTypescript(" as any")});
9496
mapWriter.${map.content.fields[1].write}(2, msg.foo[key]);
9597
});
9698
}`;
@@ -156,7 +158,11 @@ function writeSerializers(types: ProtoTypes[], isTopLevel = true): string {
156158
}
157159
}
158160
}
159-
msg.${field.name}![key!] = value!;
161+
msg.${field.name}${printIfTypescript(
162+
"!"
163+
)}[key${printIfTypescript("!")}] = value${printIfTypescript(
164+
"!"
165+
)};
160166
});`;
161167
} else if (field.read === "readMessage") {
162168
res += `

src/compile.ts

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import {
2+
CodeGeneratorRequest,
3+
CodeGeneratorResponse,
4+
} from "google-protobuf/google/protobuf/compiler/plugin_pb";
5+
import { generate } from "./autogenerate";
6+
import {
7+
getProtobufTSFileName,
8+
buildIdentifierTable,
9+
getProtobufJSFileName,
10+
} from "./utils";
11+
import { format } from "prettier";
12+
13+
export function compile(input: Uint8Array): CodeGeneratorResponse {
14+
const request = CodeGeneratorRequest.deserializeBinary(input);
15+
const isTypescript = request.getParameter()?.trim() === "typescript";
16+
const response = new CodeGeneratorResponse();
17+
response.setSupportedFeatures(
18+
CodeGeneratorResponse.Feature.FEATURE_PROTO3_OPTIONAL
19+
);
20+
21+
const identifierTable = buildIdentifierTable(request);
22+
23+
function writeFile(name: string, content: string) {
24+
const file = new CodeGeneratorResponse.File();
25+
file.setName(name);
26+
file.setContent(
27+
format(content, { parser: isTypescript ? "typescript" : "babel" })
28+
);
29+
response.addFile(file);
30+
}
31+
32+
request.getProtoFileList().forEach((fileDescriptorProto) => {
33+
const name = fileDescriptorProto.getName();
34+
if (!name) {
35+
return;
36+
}
37+
38+
const protobufTs = generate(
39+
fileDescriptorProto,
40+
identifierTable,
41+
isTypescript
42+
);
43+
writeFile(
44+
isTypescript ? getProtobufTSFileName(name) : getProtobufJSFileName(name),
45+
protobufTs
46+
);
47+
});
48+
49+
return response;
50+
}

src/compiler.ts

+2-46
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,8 @@
11
#!/usr/bin/env node
22

33
import { readFileSync } from "fs";
4-
import {
5-
CodeGeneratorRequest,
6-
CodeGeneratorResponse,
7-
} from "google-protobuf/google/protobuf/compiler/plugin_pb";
8-
import { generate } from "./autogenerate";
9-
import {
10-
getProtobufTSFileName,
11-
buildIdentifierTable,
12-
getProtobufJSFileName,
13-
} from "./utils";
14-
import { format } from "prettier";
4+
import { compile } from "./compile";
155

166
const input = readFileSync(process.stdin.fd);
17-
const request = CodeGeneratorRequest.deserializeBinary(input);
18-
const isTypescript = request.getParameter()?.trim() === "typescript";
19-
const response = new CodeGeneratorResponse();
20-
response.setSupportedFeatures(
21-
CodeGeneratorResponse.Feature.FEATURE_PROTO3_OPTIONAL
22-
);
23-
24-
const identifierTable = buildIdentifierTable(request);
25-
26-
function writeFile(name: string, content: string) {
27-
const file = new CodeGeneratorResponse.File();
28-
file.setName(name);
29-
file.setContent(
30-
format(content, { parser: isTypescript ? "typescript" : "babel" })
31-
);
32-
response.addFile(file);
33-
}
34-
35-
request.getProtoFileList().forEach((fileDescriptorProto) => {
36-
const name = fileDescriptorProto.getName();
37-
if (!name) {
38-
return;
39-
}
40-
41-
const protobufTs = generate(
42-
fileDescriptorProto,
43-
identifierTable,
44-
isTypescript
45-
);
46-
writeFile(
47-
isTypescript ? getProtobufTSFileName(name) : getProtobufJSFileName(name),
48-
protobufTs
49-
);
50-
});
51-
7+
const response = compile(input);
528
process.stdout.write(response.serializeBinary());

0 commit comments

Comments
 (0)