@grpc/proto-loader
Advanced tools
Comparing version 0.6.0-pre3 to 0.6.0-pre4
@@ -79,7 +79,19 @@ #!/usr/bin/env node | ||
} | ||
function generatePermissiveMessageInterface(formatter, messageType) { | ||
function getChildMessagesAndEnums(namespace) { | ||
const messageList = []; | ||
for (const nested of namespace.nestedArray) { | ||
if (nested instanceof Protobuf.Type || nested instanceof Protobuf.Enum) { | ||
messageList.push(nested); | ||
} | ||
if (isNamespaceBase(nested)) { | ||
messageList.push(...getChildMessagesAndEnums(nested)); | ||
} | ||
} | ||
return messageList; | ||
} | ||
function generatePermissiveMessageInterface(formatter, messageType, nameOverride) { | ||
if (messageType.fullName === '.google.protobuf.Any') { | ||
/* This describes the behavior of the Protobuf.js Any wrapper fromObject | ||
* replacement function */ | ||
formatter.writeLine('export type Any__Output = AnyExtension | {'); | ||
formatter.writeLine('export type Any = AnyExtension | {'); | ||
formatter.writeLine(' type_url: string;'); | ||
@@ -90,3 +102,3 @@ formatter.writeLine(' value: Buffer | Uint8Array | string;'); | ||
} | ||
formatter.writeLine(`export interface ${messageType.name} {`); | ||
formatter.writeLine(`export interface ${nameOverride !== null && nameOverride !== void 0 ? nameOverride : messageType.name} {`); | ||
formatter.indent(); | ||
@@ -136,7 +148,7 @@ for (const field of messageType.fieldsArray) { | ||
} | ||
formatter.writeLine(`${field.name}?: (${type})${repeatedString};`); | ||
formatter.writeLine(`'${field.name}'?: (${type})${repeatedString};`); | ||
} | ||
for (const oneof of messageType.oneofsArray) { | ||
const typeString = oneof.fieldsArray.map(field => `"${field.name}"`).join('|'); | ||
formatter.writeLine(`${oneof.name}?: ${typeString};`); | ||
formatter.writeLine(`'${oneof.name}'?: ${typeString};`); | ||
} | ||
@@ -146,3 +158,3 @@ formatter.unindent(); | ||
} | ||
function generateRestrictedMessageInterface(formatter, messageType, options) { | ||
function generateRestrictedMessageInterface(formatter, messageType, options, nameOverride) { | ||
if (messageType.fullName === '.google.protobuf.Any' && options.json) { | ||
@@ -167,3 +179,3 @@ /* This describes the behavior of the Protobuf.js Any wrapper toObject | ||
} | ||
formatter.writeLine(`export interface ${messageType.name}__Output {`); | ||
formatter.writeLine(`export interface ${nameOverride !== null && nameOverride !== void 0 ? nameOverride : messageType.name}__Output {`); | ||
formatter.indent(); | ||
@@ -245,3 +257,3 @@ for (const field of messageType.fieldsArray) { | ||
const optionalString = fieldGuaranteed ? '' : '?'; | ||
formatter.writeLine(`${field.name}${optionalString}: (${type})${repeatedString};`); | ||
formatter.writeLine(`'${field.name}'${optionalString}: (${type})${repeatedString};`); | ||
} | ||
@@ -251,3 +263,3 @@ if (options.oneofs) { | ||
const typeString = oneof.fieldsArray.map(field => `"${field.name}"`).join('|'); | ||
formatter.writeLine(`${oneof.name}: ${typeString};`); | ||
formatter.writeLine(`'${oneof.name}': ${typeString};`); | ||
} | ||
@@ -261,4 +273,7 @@ } | ||
let seenDeps = new Set(); | ||
const childTypes = getChildMessagesAndEnums(messageType); | ||
formatter.writeLine(`// Original file: ${messageType.filename}`); | ||
formatter.writeLine(''); | ||
for (const field of messageType.fieldsArray) { | ||
if (field.resolvedType) { | ||
if (field.resolvedType && childTypes.indexOf(field.resolvedType) < 0) { | ||
const dependency = field.resolvedType; | ||
@@ -275,2 +290,19 @@ if (seenDeps.has(dependency.fullName)) { | ||
} | ||
for (const childType of childTypes) { | ||
if (childType instanceof Protobuf.Type) { | ||
for (const field of childType.fieldsArray) { | ||
if (field.resolvedType && childTypes.indexOf(field.resolvedType) < 0) { | ||
const dependency = field.resolvedType; | ||
if (seenDeps.has(dependency.fullName)) { | ||
continue; | ||
} | ||
seenDeps.add(dependency.fullName); | ||
formatter.writeLine(getImportLine(dependency, messageType)); | ||
} | ||
if (field.type.indexOf('64') >= 0) { | ||
usesLong = true; | ||
} | ||
} | ||
} | ||
} | ||
if (usesLong) { | ||
@@ -283,2 +315,14 @@ formatter.writeLine("import { Long } from '@grpc/proto-loader';"); | ||
formatter.writeLine(''); | ||
for (const childType of childTypes) { | ||
const nameOverride = getTypeInterfaceName(childType); | ||
if (childType instanceof Protobuf.Type) { | ||
generatePermissiveMessageInterface(formatter, childType, nameOverride); | ||
formatter.writeLine(''); | ||
generateRestrictedMessageInterface(formatter, childType, options, nameOverride); | ||
} | ||
else { | ||
generateEnumInterface(formatter, childType, nameOverride); | ||
} | ||
formatter.writeLine(''); | ||
} | ||
generatePermissiveMessageInterface(formatter, messageType); | ||
@@ -288,4 +332,6 @@ formatter.writeLine(''); | ||
} | ||
function generateEnumInterface(formatter, enumType) { | ||
formatter.writeLine(`export enum ${enumType.name} {`); | ||
function generateEnumInterface(formatter, enumType, nameOverride) { | ||
formatter.writeLine(`// Original file: ${enumType.filename}`); | ||
formatter.writeLine(''); | ||
formatter.writeLine(`export enum ${nameOverride !== null && nameOverride !== void 0 ? nameOverride : enumType.name} {`); | ||
formatter.indent(); | ||
@@ -303,3 +349,3 @@ for (const key of Object.keys(enumType.values)) { | ||
} | ||
if (isNamespaceBase(nested)) { | ||
else if (isNamespaceBase(nested)) { | ||
generateMessageAndEnumImports(formatter, nested); | ||
@@ -486,3 +532,3 @@ } | ||
generateMessageInterfaces(fileFormatter, nested, options); | ||
console.log(`Writing ${options.outDir}/${getPath(nested)}`); | ||
console.log(`Writing ${options.outDir}/${getPath(nested)} from file ${nested.filename}`); | ||
filePromises.push(writeFile(`${options.outDir}/${getPath(nested)}`, fileFormatter.getFullText())); | ||
@@ -492,6 +538,6 @@ } | ||
generateEnumInterface(fileFormatter, nested); | ||
console.log(`Writing ${options.outDir}/${getPath(nested)}`); | ||
console.log(`Writing ${options.outDir}/${getPath(nested)} from file ${nested.filename}`); | ||
filePromises.push(writeFile(`${options.outDir}/${getPath(nested)}`, fileFormatter.getFullText())); | ||
} | ||
if (isNamespaceBase(nested)) { | ||
else if (isNamespaceBase(nested)) { | ||
filePromises.push(...generateFilesForNamespace(nested, options)); | ||
@@ -498,0 +544,0 @@ } |
{ | ||
"name": "@grpc/proto-loader", | ||
"version": "0.6.0-pre3", | ||
"version": "0.6.0-pre4", | ||
"author": "Google Inc.", | ||
@@ -50,3 +50,3 @@ "contributors": [ | ||
"mkdirp": "^1.0.4", | ||
"protobufjs": "^6.8.6", | ||
"protobufjs": "^6.9.0", | ||
"yargs": "^15.3.1" | ||
@@ -53,0 +53,0 @@ }, |
56898
1000
Updatedprotobufjs@^6.9.0