@grpc/proto-loader is a gRPC utility library for loading .proto files using the latest Protobuf.js package. It provides both synchronous and asynchronous methods for loading Protocol Buffer definitions and converting them into JavaScript/TypeScript objects that can be consumed by gRPC libraries.
npm install @grpc/proto-loaderimport * as protoLoader from "@grpc/proto-loader";
import { load, loadSync, Options, PackageDefinition } from "@grpc/proto-loader";For CommonJS:
const protoLoader = require("@grpc/proto-loader");
const { load, loadSync } = require("@grpc/proto-loader");import * as protoLoader from "@grpc/proto-loader";
import * as grpc from "@grpc/grpc-js";
// Asynchronous loading
const packageDefinition = await protoLoader.load("path/to/service.proto", {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const packageObject = grpc.loadPackageDefinition(packageDefinition);
// Synchronous loading
const packageDefinitionSync = protoLoader.loadSync("path/to/service.proto", {
keepCase: true,
longs: String,
enums: String
});@grpc/proto-loader is built around several key components:
Core functionality for loading and parsing .proto files with various configuration options. Supports both synchronous and asynchronous loading patterns.
function load(
filename: string | string[],
options?: Options
): Promise<PackageDefinition>;
function loadSync(
filename: string | string[],
options?: Options
): PackageDefinition;Additional methods for loading from JSON objects, binary descriptor sets, and other formats beyond standard .proto files.
function fromJSON(
json: Protobuf.INamespace,
options?: Options
): PackageDefinition;
function loadFileDescriptorSetFromBuffer(
descriptorSet: Buffer,
options?: Options
): PackageDefinition;
function loadFileDescriptorSetFromObject(
descriptorSet: Parameters<typeof descriptor.FileDescriptorSet.fromObject>[0],
options?: Options
): PackageDefinition;Comprehensive TypeScript type definitions for all Protocol Buffer structures, including messages, services, enums, and method definitions.
interface PackageDefinition {
[index: string]: AnyDefinition;
}
interface Options extends Protobuf.IParseOptions, Protobuf.IConversionOptions {
includeDirs?: string[];
}
interface MessageTypeDefinition<InputType, OutputType> extends ProtobufTypeDefinition {
format: 'Protocol Buffer 3 DescriptorProto';
serialize: Serialize<InputType>;
deserialize: Deserialize<OutputType>;
}Command-line utility for generating TypeScript type definitions from .proto files, enabling type-safe gRPC development.
proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.protointerface AnyExtension {
'@type': string;
}
function isAnyExtension(obj: object): obj is AnyExtension;
export { Options, Long };