chore(ts-protoc-gen): fix types because lol wtf

This commit is contained in:
41666 2020-10-11 18:55:30 -04:00
parent 783915f057
commit c26f3c9ef7
9 changed files with 68 additions and 60 deletions

View file

@ -34,22 +34,21 @@ export class ExportMap {
message: DescriptorProto message: DescriptorProto
) { ) {
const messageEntry: ExportMessageEntry = { const messageEntry: ExportMessageEntry = {
pkg: fileDescriptor.getPackage(), pkg: fileDescriptor.getPackage() as string,
fileName: fileDescriptor.getName(), fileName: fileDescriptor.getName() as string,
messageOptions: message.getOptions(), messageOptions: message.getOptions() as MessageOptions,
mapFieldOptions: mapFieldOptions: (message.getOptions() && message.getOptions()?.getMapEntry()
message.getOptions() && message.getOptions().getMapEntry() ? {
? { key: [
key: [ message.getFieldList()[0].getType(),
message.getFieldList()[0].getType(), (message.getFieldList()[0].getTypeName() as string).slice(1),
message.getFieldList()[0].getTypeName().slice(1), ],
], value: [
value: [ message.getFieldList()[1].getType(),
message.getFieldList()[1].getType(), (message.getFieldList()[1].getTypeName() as string).slice(1),
message.getFieldList()[1].getTypeName().slice(1), ],
], }
} : undefined) as any,
: undefined,
}; };
const packagePrefix = scope ? scope + '.' : ''; const packagePrefix = scope ? scope + '.' : '';
@ -66,17 +65,19 @@ export class ExportMap {
}); });
message.getEnumTypeList().forEach((enumType) => { message.getEnumTypeList().forEach((enumType) => {
const identifier = `${packagePrefix}${message.getName()}.${enumType.getName()}`; const identifier = `${packagePrefix}${message.getName() as string}.${
enumType.getName() as string
}`;
this.enumMap[identifier] = { this.enumMap[identifier] = {
pkg: fileDescriptor.getPackage(), pkg: fileDescriptor.getPackage() as string,
fileName: fileDescriptor.getName(), fileName: fileDescriptor.getName() as string,
enumOptions: enumType.getOptions(), enumOptions: enumType.getOptions() as EnumOptions,
}; };
}); });
} }
addFileDescriptor(fileDescriptor: FileDescriptorProto) { addFileDescriptor(fileDescriptor: FileDescriptorProto) {
const scope = fileDescriptor.getPackage(); const scope = fileDescriptor.getPackage() as string;
fileDescriptor.getMessageTypeList().forEach((messageType) => { fileDescriptor.getMessageTypeList().forEach((messageType) => {
this.exportNested(scope, fileDescriptor, messageType); this.exportNested(scope, fileDescriptor, messageType);
}); });
@ -84,9 +85,9 @@ export class ExportMap {
fileDescriptor.getEnumTypeList().forEach((enumType) => { fileDescriptor.getEnumTypeList().forEach((enumType) => {
const packagePrefix = scope ? scope + '.' : ''; const packagePrefix = scope ? scope + '.' : '';
this.enumMap[packagePrefix + enumType.getName()] = { this.enumMap[packagePrefix + enumType.getName()] = {
pkg: fileDescriptor.getPackage(), pkg: fileDescriptor.getPackage() as string,
fileName: fileDescriptor.getName(), fileName: fileDescriptor.getName() as string,
enumOptions: enumType.getOptions(), enumOptions: enumType.getOptions() as EnumOptions,
}; };
}); });
} }

View file

@ -30,13 +30,15 @@ withAllStdIn((inputBuff: Buffer) => {
const fileNameToDescriptor: { [key: string]: FileDescriptorProto } = {}; const fileNameToDescriptor: { [key: string]: FileDescriptorProto } = {};
const parameter = codeGenRequest.getParameter(); const parameter = codeGenRequest.getParameter();
const { service, mode } = getParameterEnums(parameter); const { service, mode } = getParameterEnums(parameter as string);
const generateGrpcWebServices = service === ServiceParameter.GrpcWeb; const generateGrpcWebServices = service === ServiceParameter.GrpcWeb;
const generateGrpcNodeServices = service === ServiceParameter.GrpcNode; const generateGrpcNodeServices = service === ServiceParameter.GrpcNode;
codeGenRequest.getProtoFileList().forEach((protoFileDescriptor) => { codeGenRequest.getProtoFileList().forEach((protoFileDescriptor) => {
fileNameToDescriptor[protoFileDescriptor.getName()] = protoFileDescriptor; fileNameToDescriptor[
protoFileDescriptor.getName() as string
] = protoFileDescriptor;
exportMap.addFileDescriptor(protoFileDescriptor); exportMap.addFileDescriptor(protoFileDescriptor);
}); });

View file

@ -33,13 +33,13 @@ function getCallingTypes(
return { return {
requestType: getFieldType( requestType: getFieldType(
MESSAGE_TYPE, MESSAGE_TYPE,
method.getInputType().slice(1), (method.getInputType() as string).slice(1),
'', '',
exportMap exportMap
), ),
responseType: getFieldType( responseType: getFieldType(
MESSAGE_TYPE, MESSAGE_TYPE,
method.getOutputType().slice(1), (method.getOutputType() as string).slice(1),
'', '',
exportMap exportMap
), ),
@ -94,7 +94,7 @@ export class RPCDescriptor {
this.exportMap = exportMap; this.exportMap = exportMap;
} }
get name(): string { get name(): string {
return this.protoService.getName(); return this.protoService.getName() as string;
} }
get qualifiedName(): string { get qualifiedName(): string {
@ -107,15 +107,15 @@ export class RPCDescriptor {
get methods(): RPCMethodDescriptor[] { get methods(): RPCMethodDescriptor[] {
return this.protoService.getMethodList().map((method) => { return this.protoService.getMethodList().map((method) => {
const callingTypes = getCallingTypes(method, this.exportMap); const callingTypes = getCallingTypes(method, this.exportMap);
const nameAsCamelCase = const name = method.getName() as string;
method.getName()[0].toLowerCase() + method.getName().substr(1); const nameAsCamelCase = name[0].toLowerCase() + name.substr(1);
return { return {
nameAsPascalCase: method.getName(), nameAsPascalCase: name,
nameAsCamelCase, nameAsCamelCase,
functionName: normaliseFieldObjectName(nameAsCamelCase), functionName: normaliseFieldObjectName(nameAsCamelCase),
serviceName: this.name, serviceName: this.name,
requestStream: method.getClientStreaming(), requestStream: method.getClientStreaming() as boolean,
responseStream: method.getServerStreaming(), responseStream: method.getServerStreaming() as boolean,
requestType: callingTypes.requestType, requestType: callingTypes.requestType,
responseType: callingTypes.responseType, responseType: callingTypes.responseType,
}; };
@ -131,15 +131,15 @@ export class GrpcServiceDescriptor {
constructor(fileDescriptor: FileDescriptorProto, exportMap: ExportMap) { constructor(fileDescriptor: FileDescriptorProto, exportMap: ExportMap) {
this.fileDescriptor = fileDescriptor; this.fileDescriptor = fileDescriptor;
this.exportMap = exportMap; this.exportMap = exportMap;
this.pathToRoot = getPathToRoot(fileDescriptor.getName()); this.pathToRoot = getPathToRoot(fileDescriptor.getName() as string);
} }
get filename(): string { get filename(): string {
return this.fileDescriptor.getName(); return this.fileDescriptor.getName() as string;
} }
get packageName(): string { get packageName(): string {
return this.fileDescriptor.getPackage(); return this.fileDescriptor.getPackage() as string;
} }
get imports(): ImportDescriptor[] { get imports(): ImportDescriptor[] {

View file

@ -8,7 +8,7 @@ export function printEnum(enumDescriptor: EnumDescriptorProto, indentLevel: numb
printer.printLn(`export interface ${enumInterfaceName} {`); printer.printLn(`export interface ${enumInterfaceName} {`);
enumDescriptor.getValueList().forEach((value) => { enumDescriptor.getValueList().forEach((value) => {
printer.printIndentedLn( printer.printIndentedLn(
`${value.getName().toUpperCase()}: ${value.getNumber()};` `${(value.getName() as string).toUpperCase()}: ${value.getNumber()};`
); );
}); });
printer.printLn(`}`); printer.printLn(`}`);

View file

@ -12,10 +12,10 @@ export function printExtension(
): string { ): string {
const printer = new Printer(indentLevel + 1); const printer = new Printer(indentLevel + 1);
printer.printEmptyLn(); printer.printEmptyLn();
const extensionName = snakeToCamel(extension.getName()); const extensionName = snakeToCamel(extension.getName() as string);
const fieldType = getFieldType( const fieldType = getFieldType(
extension.getType(), extension.getType() as FieldDescriptorProto.Type,
extension.getTypeName().slice(1), (extension.getTypeName() as string).slice(1),
fileName, fileName,
exportMap exportMap
); );

View file

@ -11,8 +11,8 @@ export function printFileDescriptorTSD(
fileDescriptor: FileDescriptorProto, fileDescriptor: FileDescriptorProto,
exportMap: ExportMap exportMap: ExportMap
) { ) {
const fileName = fileDescriptor.getName(); const fileName = fileDescriptor.getName() as string;
const packageName = fileDescriptor.getPackage(); const packageName = fileDescriptor.getPackage() as string;
const printer = new Printer(0); const printer = new Printer(0);

View file

@ -77,7 +77,7 @@ export function printMessage(
messageDescriptor.getFieldList().forEach((field) => { messageDescriptor.getFieldList().forEach((field) => {
if (field.hasOneofIndex()) { if (field.hasOneofIndex()) {
const oneOfIndex = field.getOneofIndex(); const oneOfIndex = field.getOneofIndex() as number;
let existing = oneOfGroups[oneOfIndex]; let existing = oneOfGroups[oneOfIndex];
if (existing === undefined) { if (existing === undefined) {
existing = []; existing = [];
@ -85,13 +85,13 @@ export function printMessage(
} }
existing.push(field); existing.push(field);
} }
const snakeCaseName = stripPrefix(field.getName().toLowerCase(), '_'); const snakeCaseName = stripPrefix((field.getName() as string).toLowerCase(), '_');
const camelCaseName = snakeToCamel(snakeCaseName); const camelCaseName = snakeToCamel(snakeCaseName);
const withUppercase = uppercaseFirst(camelCaseName); const withUppercase = uppercaseFirst(camelCaseName);
const type = field.getType(); const type = field.getType();
let exportType; let exportType;
const fullTypeName = field.getTypeName().slice(1); const fullTypeName = (field.getTypeName() as string).slice(1);
if (type === MESSAGE_TYPE) { if (type === MESSAGE_TYPE) {
const fieldMessageType = exportMap.getMessage(fullTypeName); const fieldMessageType = exportMap.getMessage(fullTypeName);
if (fieldMessageType === undefined) { if (fieldMessageType === undefined) {
@ -168,8 +168,9 @@ export function printMessage(
} }
exportType = `${exportType}Map[keyof ${exportType}Map]`; exportType = `${exportType}Map[keyof ${exportType}Map]`;
} else { } else {
if (field.getOptions() && field.getOptions().hasJstype()) { const options = field.getOptions() as FieldOptions;
switch (field.getOptions().getJstype()) { if (options && options.hasJstype()) {
switch (options.getJstype()) {
case JSType.JS_NUMBER: case JSType.JS_NUMBER:
exportType = 'number'; exportType = 'number';
break; break;
@ -177,10 +178,10 @@ export function printMessage(
exportType = 'string'; exportType = 'string';
break; break;
default: default:
exportType = getTypeName(type); exportType = getTypeName((type as unknown) as number);
} }
} else { } else {
exportType = getTypeName(type); exportType = getTypeName((type as unknown) as number);
} }
} }
@ -293,10 +294,9 @@ export function printMessage(
toObjectType.printLn(`}`); toObjectType.printLn(`}`);
messageDescriptor.getOneofDeclList().forEach((oneOfDecl) => { messageDescriptor.getOneofDeclList().forEach((oneOfDecl) => {
const name = oneOfDecl.getName() as string;
printer.printIndentedLn( printer.printIndentedLn(
`get${oneOfName(oneOfDecl.getName())}Case(): ${messageName}.${oneOfName( `get${oneOfName(name)}Case(): ${messageName}.${oneOfName(name)}Case;`
oneOfDecl.getName()
)}Case;`
); );
}); });

View file

@ -12,11 +12,15 @@ export function printOneOfDecl(
) { ) {
const printer = new Printer(indentLevel); const printer = new Printer(indentLevel);
printer.printEmptyLn(); printer.printEmptyLn();
printer.printLn(`export enum ${oneOfName(oneOfDecl.getName())}Case {`); printer.printLn(`export enum ${oneOfName(oneOfDecl.getName() as string)}Case {`);
printer.printIndentedLn(`${oneOfDecl.getName().toUpperCase()}_NOT_SET = 0,`); printer.printIndentedLn(
`${(oneOfDecl.getName() as string).toUpperCase()}_NOT_SET = 0,`
);
oneOfFields.forEach((field) => { oneOfFields.forEach((field) => {
printer.printIndentedLn( printer.printIndentedLn(
`${field.getName().toUpperCase()} = ${field.getNumber()},` `${(field.getName() as string).toUpperCase()} = ${
field.getNumber() as number
},`
); );
}); });
printer.printLn('}'); printer.printLn('}');

View file

@ -76,12 +76,13 @@ export function withAllStdIn(callback: (buffer: Buffer) => void): void {
const stdin = process.stdin; const stdin = process.stdin;
stdin.on('readable', function () { stdin.on('readable', function () {
let chunk; let chunk = stdin.read();
while ((chunk = stdin.read())) { while (chunk) {
if (!(chunk instanceof Buffer)) throw new Error('Did not receive buffer'); if (!(chunk instanceof Buffer)) throw new Error('Did not receive buffer');
ret.push(chunk); ret.push(chunk);
len += chunk.length; len += chunk.length;
chunk = stdin.read();
} }
}); });
@ -194,7 +195,7 @@ export function getParameterEnums(
} { } {
const { service, mode } = parse(parameter, ','); const { service, mode } = parse(parameter, ',');
return { return {
service: getServiceParameter(service), service: getServiceParameter(service as string),
mode: getModeParameter(mode), mode: getModeParameter(mode as string),
}; };
} }