From 5e7fdb682744271befe1db68462ca4e1f8c8f5e6 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Sun, 11 Oct 2020 08:49:17 +0100 Subject: [PATCH 1/4] grpc-proto-loader: add generated types to repo --- examples/grpc-proto-loader/.gitignore | 1 - examples/grpc-proto-loader/package.json | 3 +- examples/grpc-proto-loader/proto/chat.ts | 18 ++++++++++++ .../proto/chat_package/Chat.ts | 29 +++++++++++++++++++ .../proto/chat_package/ClientMessage.ts | 12 ++++++++ .../proto/chat_package/ServerMessage.ts | 12 ++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 examples/grpc-proto-loader/proto/chat.ts create mode 100644 examples/grpc-proto-loader/proto/chat_package/Chat.ts create mode 100644 examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts create mode 100644 examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts diff --git a/examples/grpc-proto-loader/.gitignore b/examples/grpc-proto-loader/.gitignore index 7daaf5b..ab6bce8 100644 --- a/examples/grpc-proto-loader/.gitignore +++ b/examples/grpc-proto-loader/.gitignore @@ -1,4 +1,3 @@ node_modules generated *.js -proto/**/*.ts diff --git a/examples/grpc-proto-loader/package.json b/examples/grpc-proto-loader/package.json index b0eaa1b..5df631e 100644 --- a/examples/grpc-proto-loader/package.json +++ b/examples/grpc-proto-loader/package.json @@ -43,7 +43,8 @@ }, "eslintConfig": { "ignorePatterns": [ - "**/*.js" + "**/*.js", + "proto/**/*.ts" ], "env": { "browser": false, diff --git a/examples/grpc-proto-loader/proto/chat.ts b/examples/grpc-proto-loader/proto/chat.ts new file mode 100644 index 0000000..875e863 --- /dev/null +++ b/examples/grpc-proto-loader/proto/chat.ts @@ -0,0 +1,18 @@ +import * as grpc from '@grpc/grpc-js'; +import { ServiceDefinition, EnumTypeDefinition, MessageTypeDefinition } from '@grpc/proto-loader'; + +import { ChatClient as _chat_package_ChatClient } from './chat_package/Chat'; + +type ConstructorArguments = Constructor extends new (...args: infer Args) => any ? Args: never; +type SubtypeConstructor = { + new(...args: ConstructorArguments): Subtype; +}; + +export interface ProtoGrpcType { + chat_package: { + Chat: SubtypeConstructor & { service: ServiceDefinition } + ClientMessage: MessageTypeDefinition + ServerMessage: MessageTypeDefinition + } +} + diff --git a/examples/grpc-proto-loader/proto/chat_package/Chat.ts b/examples/grpc-proto-loader/proto/chat_package/Chat.ts new file mode 100644 index 0000000..7d91796 --- /dev/null +++ b/examples/grpc-proto-loader/proto/chat_package/Chat.ts @@ -0,0 +1,29 @@ +// Original file: proto/chat.proto + +import * as grpc from '@grpc/grpc-js' +import { ClientMessage as _chat_package_ClientMessage, ClientMessage__Output as _chat_package_ClientMessage__Output } from '../chat_package/ClientMessage'; +import { ServerMessage as _chat_package_ServerMessage, ServerMessage__Output as _chat_package_ServerMessage__Output } from '../chat_package/ServerMessage'; + +export interface ChatClient extends grpc.Client { + join(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; + join(argument: _chat_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; + join(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; + join(argument: _chat_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; + + send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + send(argument: _chat_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + +} + +export interface ChatHandlers extends grpc.UntypedServiceImplementation { + join(call: grpc.ServerWritableStream<_chat_package_ClientMessage__Output, _chat_package_ServerMessage>): void; + + send(call: grpc.ServerUnaryCall<_chat_package_ClientMessage__Output, _chat_package_ServerMessage>, callback: grpc.sendUnaryData<_chat_package_ServerMessage>): void; + +} diff --git a/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts b/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts new file mode 100644 index 0000000..df626eb --- /dev/null +++ b/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts @@ -0,0 +1,12 @@ +// Original file: proto/chat.proto + + +export interface ClientMessage { + 'user'?: (string); + 'text'?: (string); +} + +export interface ClientMessage__Output { + 'user': (string); + 'text': (string); +} diff --git a/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts b/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts new file mode 100644 index 0000000..47d1783 --- /dev/null +++ b/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts @@ -0,0 +1,12 @@ +// Original file: proto/chat.proto + + +export interface ServerMessage { + 'user'?: (string); + 'text'?: (string); +} + +export interface ServerMessage__Output { + 'user': (string); + 'text': (string); +} From 309f9ea1f48e95eee016ec96a5764ace90c9987f Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Sun, 11 Oct 2020 10:27:57 +0100 Subject: [PATCH 2/4] Examples update --- examples/gradle-ts-protoc-gen/.gitignore | 4 +- .../.vscode/extensions.json | 3 +- examples/gradle-ts-protoc-gen/README.md | 36 +- examples/gradle-ts-protoc-gen/build.gradle | 2 +- examples/gradle-ts-protoc-gen/client.ts | 110 +++- .../gradle-ts-protoc-gen/proto/chat.proto | 18 - .../gradle-ts-protoc-gen/proto/example.proto | 18 + .../proto/example_grpc_pb.d.ts | 30 + .../proto/example_grpc_pb.js | 77 +++ .../proto/example_pb.d.ts | 45 ++ .../gradle-ts-protoc-gen/proto/example_pb.js | 313 +++++++++ examples/gradle-ts-protoc-gen/server.ts | 82 ++- .../grpc-proto-loader/.vscode/extensions.json | 3 +- .../grpc-proto-loader/.vscode/settings.json | 6 +- examples/grpc-proto-loader/README.md | 34 +- examples/grpc-proto-loader/client.ts | 104 ++- examples/grpc-proto-loader/package-lock.json | 614 +----------------- examples/grpc-proto-loader/package.json | 28 +- examples/grpc-proto-loader/proto/chat.proto | 18 - .../proto/chat_package/Chat.ts | 29 - .../proto/chat_package/ClientMessage.ts | 12 - .../proto/chat_package/ServerMessage.ts | 12 - .../grpc-proto-loader/proto/example.proto | 18 + .../proto/{chat.ts => example.ts} | 6 +- .../proto/example_package/ClientMessage.ts | 10 + .../proto/example_package/ExampleServer.ts | 47 ++ .../proto/example_package/ServerMessage.ts | 10 + examples/grpc-proto-loader/server.ts | 80 ++- examples/grpc-web/.vscode/extensions.json | 3 +- .../.vscode/extensions.json | 3 +- .../ts-protoc-gen/.vscode/extensions.json | 3 +- 31 files changed, 913 insertions(+), 865 deletions(-) delete mode 100644 examples/gradle-ts-protoc-gen/proto/chat.proto create mode 100644 examples/gradle-ts-protoc-gen/proto/example.proto create mode 100644 examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts create mode 100644 examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js create mode 100644 examples/gradle-ts-protoc-gen/proto/example_pb.d.ts create mode 100644 examples/gradle-ts-protoc-gen/proto/example_pb.js delete mode 100644 examples/grpc-proto-loader/proto/chat.proto delete mode 100644 examples/grpc-proto-loader/proto/chat_package/Chat.ts delete mode 100644 examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts delete mode 100644 examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts create mode 100644 examples/grpc-proto-loader/proto/example.proto rename examples/grpc-proto-loader/proto/{chat.ts => example.ts} (65%) create mode 100644 examples/grpc-proto-loader/proto/example_package/ClientMessage.ts create mode 100644 examples/grpc-proto-loader/proto/example_package/ExampleServer.ts create mode 100644 examples/grpc-proto-loader/proto/example_package/ServerMessage.ts diff --git a/examples/gradle-ts-protoc-gen/.gitignore b/examples/gradle-ts-protoc-gen/.gitignore index 8baf7f8..fb83c20 100644 --- a/examples/gradle-ts-protoc-gen/.gitignore +++ b/examples/gradle-ts-protoc-gen/.gitignore @@ -1,6 +1,6 @@ node_modules -*.js -proto/*.ts +**/*.js +!proto/*.js # Ignore Gradle project-specific cache directory .gradle diff --git a/examples/gradle-ts-protoc-gen/.vscode/extensions.json b/examples/gradle-ts-protoc-gen/.vscode/extensions.json index 25f46e6..57aabcb 100644 --- a/examples/gradle-ts-protoc-gen/.vscode/extensions.json +++ b/examples/gradle-ts-protoc-gen/.vscode/extensions.json @@ -3,6 +3,7 @@ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker" + "streetsidesoftware.code-spell-checker", + "zxh404.vscode-proto3" ] } diff --git a/examples/gradle-ts-protoc-gen/README.md b/examples/gradle-ts-protoc-gen/README.md index 4e14473..e6283d6 100644 --- a/examples/gradle-ts-protoc-gen/README.md +++ b/examples/gradle-ts-protoc-gen/README.md @@ -16,31 +16,45 @@ The generated code uses [`google-protobuf`](https://www.npmjs.com/package/google ## Generating the Types +Install dependencies: + ```sh -./gradlew generateProto +npm install ``` -### Running the app +Use Gradle & [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) to generate the TypeScript files: + +```sh +./gradlew generateProto +``` -First build the types and application files: +This is aliased as a npm script: ```sh -npm install -npm run build # this runs `./gradlew generateProto` +npm run build:proto ``` -Start the server: +### Running the App + +This simple app demonstrates the different gRPC calls you can perform. + +First generated the types and build the application files: ```sh -npm run start:server +npm run build ``` -Now run the client in different terminal sessions: +Start the server: ```sh -npm run start:client +npm run start:server ``` -## Credits +Now run the client by specifying which example you want to run: -The chat application idea is inspired from https://techblog.fexcofts.com/2018/07/20/grpc-nodejs-chat-example/ +```bash +npm run start:client -- --unary +npm run start:client -- --server-streaming +npm run start:client -- --client-streaming +npm run start:client -- --bidi-streaming +``` diff --git a/examples/gradle-ts-protoc-gen/build.gradle b/examples/gradle-ts-protoc-gen/build.gradle index 630c580..b320dd6 100644 --- a/examples/gradle-ts-protoc-gen/build.gradle +++ b/examples/gradle-ts-protoc-gen/build.gradle @@ -60,7 +60,7 @@ protobuf { } task copyGeneratedProto(type: Copy) { - from '$protobuf.generatedFilesBaseDir/main/ts', '$protobuf.generatedFilesBaseDir/main/js' + from "$protobuf.generatedFilesBaseDir/main/ts", "$protobuf.generatedFilesBaseDir/main/js" into 'proto' } diff --git a/examples/gradle-ts-protoc-gen/client.ts b/examples/gradle-ts-protoc-gen/client.ts index 0349cff..ed3c7b4 100644 --- a/examples/gradle-ts-protoc-gen/client.ts +++ b/examples/gradle-ts-protoc-gen/client.ts @@ -1,44 +1,100 @@ import * as grpc from '@grpc/grpc-js'; -import readline from 'readline'; -import { ChatClient } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; +import { ExampleServerClient } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); +const host = '0.0.0.0:9090'; -const client = new ChatClient( - '0.0.0.0:9090', - grpc.credentials.createInsecure() -); +const client = new ExampleServerClient(host, grpc.credentials.createInsecure()); const deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 5); client.waitForReady(deadline, (error?: Error) => { if (error) { - console.log(`Client error: ${error}`); + console.log(`Client connect error: ${error.message}`); } else { - rl.question("What's your name? ", startChat); + onClientReady(); } }); -function startChat(user: string) { +function onClientReady() { + switch (process.argv[process.argv.length - 1]) { + case '--unary': + doUnaryCall(); + break; + case '--server-streaming': + doServerStreamingCall(); + break; + case '--client-streaming': + doClientStreamingCall(); + break; + case '--bidi-streaming': + doBidirectionalStreamingCallStreamingCall(); + break; + default: + throw new Error('Example not specified'); + } +} + +function doUnaryCall() { const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - const channel = client.join(clientMessage); - channel.on('data', (message: ServerMessage) => { - if (message.getUser() == user) { - return; + clientMessage.setClientMessage('Message from client'); + client.unaryCall( + clientMessage, + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } } - console.log(`${message.getUser()}: ${message.getText()}`); + ); +} + +function doServerStreamingCall() { + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + const stream = client.serverStreamingCall(clientMessage); + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); - rl.on('line', function (text) { - const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - clientMessage.setText(text); - client.send(clientMessage, () => { - // - }); +} + +function doClientStreamingCall() { + const stream = client.clientStreamingCall( + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } + } + ); + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + setTimeout(() => {}, 1000); +} + +function doBidirectionalStreamingCallStreamingCall() { + const stream = client.bidirectionalStreamingCall(); + + // Server stream + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); + + // Client stream + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); } diff --git a/examples/gradle-ts-protoc-gen/proto/chat.proto b/examples/gradle-ts-protoc-gen/proto/chat.proto deleted file mode 100644 index 4ec0c7b..0000000 --- a/examples/gradle-ts-protoc-gen/proto/chat.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package chat_package; - -message ServerMessage { - string user = 1; - string text = 2; -} - -message ClientMessage { - string user = 1; - string text = 2; -} - -service Chat { - rpc join(ClientMessage) returns (stream ServerMessage) {} - rpc send(ClientMessage) returns (ServerMessage) {} -} diff --git a/examples/gradle-ts-protoc-gen/proto/example.proto b/examples/gradle-ts-protoc-gen/proto/example.proto new file mode 100644 index 0000000..b23d1c4 --- /dev/null +++ b/examples/gradle-ts-protoc-gen/proto/example.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package example_package; + +message ServerMessage { + string server_message = 1; +} + +message ClientMessage { + string client_message = 1; +} + +service ExampleServer { + rpc unaryCall(ClientMessage) returns (ServerMessage) {} + rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} + rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} + rpc bidirectionalStreamingCall(stream ClientMessage) returns (stream ServerMessage) {} +} diff --git a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts new file mode 100644 index 0000000..8b6d224 --- /dev/null +++ b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts @@ -0,0 +1,30 @@ +// GENERATED CODE -- DO NOT EDIT! + +// package: example_package +// file: example.proto + +import * as example_pb from "./example_pb"; +import * as grpc from "@grpc/grpc-js"; + +interface IExampleServerService extends grpc.ServiceDefinition { + unaryCall: grpc.MethodDefinition; + serverStreamingCall: grpc.MethodDefinition; + clientStreamingCall: grpc.MethodDefinition; + bidirectionalStreamingCall: grpc.MethodDefinition; +} + +export const ExampleServerService: IExampleServerService; + +export class ExampleServerClient extends grpc.Client { + constructor(address: string, credentials: grpc.ChannelCredentials, options?: object); + unaryCall(argument: example_pb.ClientMessage, callback: grpc.requestCallback): grpc.ClientUnaryCall; + unaryCall(argument: example_pb.ClientMessage, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + unaryCall(argument: example_pb.ClientMessage, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + serverStreamingCall(argument: example_pb.ClientMessage, metadataOrOptions?: grpc.Metadata | grpc.CallOptions | null): grpc.ClientReadableStream; + serverStreamingCall(argument: example_pb.ClientMessage, metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientReadableStream; + clientStreamingCall(callback: grpc.requestCallback): grpc.ClientWritableStream; + clientStreamingCall(metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientWritableStream; + clientStreamingCall(metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientWritableStream; + bidirectionalStreamingCall(metadataOrOptions?: grpc.Metadata | grpc.CallOptions | null): grpc.ClientDuplexStream; + bidirectionalStreamingCall(metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientDuplexStream; +} diff --git a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js new file mode 100644 index 0000000..1a6d8be --- /dev/null +++ b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js @@ -0,0 +1,77 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('@grpc/grpc-js'); +var example_pb = require('./example_pb.js'); + +function serialize_example_package_ClientMessage(arg) { + if (!(arg instanceof example_pb.ClientMessage)) { + throw new Error('Expected argument of type example_package.ClientMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ClientMessage(buffer_arg) { + return example_pb.ClientMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_example_package_ServerMessage(arg) { + if (!(arg instanceof example_pb.ServerMessage)) { + throw new Error('Expected argument of type example_package.ServerMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ServerMessage(buffer_arg) { + return example_pb.ServerMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var ExampleServerService = exports.ExampleServerService = { + unaryCall: { + path: '/example_package.ExampleServer/unaryCall', + requestStream: false, + responseStream: false, + requestType: example_pb.ClientMessage, + responseType: example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + serverStreamingCall: { + path: '/example_package.ExampleServer/serverStreamingCall', + requestStream: false, + responseStream: true, + requestType: example_pb.ClientMessage, + responseType: example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + clientStreamingCall: { + path: '/example_package.ExampleServer/clientStreamingCall', + requestStream: true, + responseStream: false, + requestType: example_pb.ClientMessage, + responseType: example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + bidirectionalStreamingCall: { + path: '/example_package.ExampleServer/bidirectionalStreamingCall', + requestStream: true, + responseStream: true, + requestType: example_pb.ClientMessage, + responseType: example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, +}; + +exports.ExampleServerClient = grpc.makeGenericClientConstructor(ExampleServerService); diff --git a/examples/gradle-ts-protoc-gen/proto/example_pb.d.ts b/examples/gradle-ts-protoc-gen/proto/example_pb.d.ts new file mode 100644 index 0000000..2fbc8b1 --- /dev/null +++ b/examples/gradle-ts-protoc-gen/proto/example_pb.d.ts @@ -0,0 +1,45 @@ +// package: example_package +// file: example.proto + +import * as jspb from "google-protobuf"; + +export class ServerMessage extends jspb.Message { + getServerMessage(): string; + setServerMessage(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerMessage.AsObject; + static toObject(includeInstance: boolean, msg: ServerMessage): ServerMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerMessage; + static deserializeBinaryFromReader(message: ServerMessage, reader: jspb.BinaryReader): ServerMessage; +} + +export namespace ServerMessage { + export type AsObject = { + serverMessage: string, + } +} + +export class ClientMessage extends jspb.Message { + getClientMessage(): string; + setClientMessage(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ClientMessage.AsObject; + static toObject(includeInstance: boolean, msg: ClientMessage): ClientMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ClientMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ClientMessage; + static deserializeBinaryFromReader(message: ClientMessage, reader: jspb.BinaryReader): ClientMessage; +} + +export namespace ClientMessage { + export type AsObject = { + clientMessage: string, + } +} + diff --git a/examples/gradle-ts-protoc-gen/proto/example_pb.js b/examples/gradle-ts-protoc-gen/proto/example_pb.js new file mode 100644 index 0000000..f6a5136 --- /dev/null +++ b/examples/gradle-ts-protoc-gen/proto/example_pb.js @@ -0,0 +1,313 @@ +// source: example.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.example_package.ClientMessage', null, global); +goog.exportSymbol('proto.example_package.ServerMessage', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ServerMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ServerMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ServerMessage.displayName = 'proto.example_package.ServerMessage'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ClientMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ClientMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ClientMessage.displayName = 'proto.example_package.ClientMessage'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ServerMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ServerMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ServerMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.toObject = function(includeInstance, msg) { + var f, obj = { + serverMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ServerMessage; + return proto.example_package.ServerMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ServerMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setServerMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ServerMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ServerMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ServerMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getServerMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string server_message = 1; + * @return {string} + */ +proto.example_package.ServerMessage.prototype.getServerMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** @param {string} value */ +proto.example_package.ServerMessage.prototype.setServerMessage = function(value) { + jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ClientMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ClientMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ClientMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.toObject = function(includeInstance, msg) { + var f, obj = { + clientMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ClientMessage; + return proto.example_package.ClientMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ClientMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setClientMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ClientMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ClientMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ClientMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getClientMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string client_message = 1; + * @return {string} + */ +proto.example_package.ClientMessage.prototype.getClientMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** @param {string} value */ +proto.example_package.ClientMessage.prototype.setClientMessage = function(value) { + jspb.Message.setProto3StringField(this, 1, value); +}; + + +goog.object.extend(exports, proto.example_package); diff --git a/examples/gradle-ts-protoc-gen/server.ts b/examples/gradle-ts-protoc-gen/server.ts index 2dcd91e..a6f70fb 100644 --- a/examples/gradle-ts-protoc-gen/server.ts +++ b/examples/gradle-ts-protoc-gen/server.ts @@ -1,50 +1,72 @@ import * as grpc from '@grpc/grpc-js'; -import { ChatService } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; +import { ExampleServerService } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const users: grpc.ServerWritableStream[] = []; -const messages: ClientMessage[] = []; +const host = '0.0.0.0:9090'; -function notifyChat(message: ServerMessage) { - messages.push(message); - users.forEach((user) => { - user.write(message); - }); -} - -// const chatService: IChatService = { -const chatService = { - join(call: grpc.ServerWritableStream): void { - users.push(call); - const serverMessage = new ServerMessage(); - serverMessage.setUser('Server'); - serverMessage.setText(`${call.request?.getUser()} joined`); - notifyChat(serverMessage); - }, - send( +const exampleServer = { + unaryCall( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData - ): void { + ) { if (call.request) { - const serverMessage = new ServerMessage(); - serverMessage.setUser(call.request.getUser()); - serverMessage.setText(call.request.getText()); - notifyChat(serverMessage); - callback(null, serverMessage); + console.log( + `(server) Got client message: ${call.request.getClientMessage()}` + ); } + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); + }, + + serverStreamingCall( + call: grpc.ServerWritableStream + ) { + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); + }, + + clientStreamingCall( + call: grpc.ServerReadableStream, + callback: grpc.sendUnaryData + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); + + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); + }, + + bidirectionalStreamingCall( + call: grpc.ServerDuplexStream + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); + + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); }, }; -export function getServer(): grpc.Server { +function getServer(): grpc.Server { const server = new grpc.Server(); - server.addService(ChatService, chatService); + server.addService(ExampleServerService, exampleServer); return server; } if (require.main === module) { const server = getServer(); server.bindAsync( - '0.0.0.0:9090', + host, grpc.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) { diff --git a/examples/grpc-proto-loader/.vscode/extensions.json b/examples/grpc-proto-loader/.vscode/extensions.json index 25f46e6..57aabcb 100644 --- a/examples/grpc-proto-loader/.vscode/extensions.json +++ b/examples/grpc-proto-loader/.vscode/extensions.json @@ -3,6 +3,7 @@ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker" + "streetsidesoftware.code-spell-checker", + "zxh404.vscode-proto3" ] } diff --git a/examples/grpc-proto-loader/.vscode/settings.json b/examples/grpc-proto-loader/.vscode/settings.json index a11e020..5bfe8c5 100644 --- a/examples/grpc-proto-loader/.vscode/settings.json +++ b/examples/grpc-proto-loader/.vscode/settings.json @@ -4,10 +4,8 @@ "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, "eslint.validate": ["javascript", "typescript"], - "editor.formatOnSave": false, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true, - "source.organizeImports": false + "source.fixAll.eslint": true }, "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" @@ -19,5 +17,5 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "cSpell.language": "en-GB", - "cSpell.words": ["grpc"] + "cSpell.words": ["grpc", "unary", "bidi"] } diff --git a/examples/grpc-proto-loader/README.md b/examples/grpc-proto-loader/README.md index 7c7d5c1..d59ce58 100644 --- a/examples/grpc-proto-loader/README.md +++ b/examples/grpc-proto-loader/README.md @@ -2,9 +2,9 @@ This example shows how to use [`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a fully typed CLI chat application that runs on Node.js. -[`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) to used to [generate the types](https://github.com/grpc/grpc-node/pull/1474) as well as load the protobuf files at runtime. +[`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) to used to [generate the types](https://github.com/grpc/grpc-node/pull/1474) as well as load the protobuf files at runtime, using [`protobuf.js`](https://www.npmjs.com/package/protobufjs) instead of [`google-protobuf`](https://www.npmjs.com/package/google-protobuf). -_No proto compiler is used. TypeScript files are generated by [`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) at build time, and protobufs are loaded at runtime using ([`protobuf.js`](https://www.npmjs.com/package/protobufjs) instead of [`google-protobuf`](https://www.npmjs.com/package/google-protobuf).) +_No proto compiler is used. It's all JavaScript._ ## App layout @@ -15,20 +15,29 @@ _No proto compiler is used. TypeScript files are generated by [`@grpc/proto-load ## Generating the Types +Install dependencies: + ```sh npm install -npm run build:proto ``` -This will build TypeScript files from the proto files with the following command: +Use [`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) to generate the TypeScript files: + +```sh +proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto +``` + +This is aliased as a npm script: ```sh -proto-loader-gen-types --keep-case --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto +npm run build:proto ``` -### Running the app +### Running the App + +This simple app demonstrates the different gRPC calls you can perform. -First build the types and application files: +First generated the types and build the application files: ```sh npm run build @@ -40,12 +49,11 @@ Start the server: npm run start:server ``` -Now run the client within different terminal sessions: +Now run the client by specifying which example you want to run: ```bash -npm run start:client +npm run start:client -- --unary +npm run start:client -- --server-streaming +npm run start:client -- --client-streaming +npm run start:client -- --bidi-streaming ``` - -## Credits - -The chat application idea is inspired from https://techblog.fexcofts.com/2018/07/20/grpc-nodejs-chat-example/ diff --git a/examples/grpc-proto-loader/client.ts b/examples/grpc-proto-loader/client.ts index 18440a6..b9a3ead 100644 --- a/examples/grpc-proto-loader/client.ts +++ b/examples/grpc-proto-loader/client.ts @@ -1,21 +1,17 @@ import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; -import readline from 'readline'; -import { ProtoGrpcType } from './proto/chat'; -import { ServerMessage } from './proto/chat_package/ServerMessage'; +import { argv } from 'process'; +import { ProtoGrpcType } from './proto/example'; +import { ServerMessage } from './proto/example_package/ServerMessage'; -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -const packageDefinition = protoLoader.loadSync('./proto/chat.proto'); +const host = '0.0.0.0:9090'; +const packageDefinition = protoLoader.loadSync('./proto/example.proto'); const proto = (grpc.loadPackageDefinition( packageDefinition ) as unknown) as ProtoGrpcType; -const client = new proto.chat_package.Chat( - '0.0.0.0:9090', +const client = new proto.example_package.ExampleServer( + host, grpc.credentials.createInsecure() ); @@ -23,25 +19,85 @@ const deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 5); client.waitForReady(deadline, (error?: Error) => { if (error) { - console.log(`Client error: ${error}`); + console.log(`Client connect error: ${error.message}`); } else { - rl.question("What's your name? ", startChat); + onClientReady(); } }); -function startChat(user: string) { - const channel = client.join({ - user, +function onClientReady() { + switch (process.argv[process.argv.length - 1]) { + case '--unary': + doUnaryCall(); + break; + case '--server-streaming': + doServerStreamingCall(); + break; + case '--client-streaming': + doClientStreamingCall(); + break; + case '--bidi-streaming': + doBidirectionalStreamingCallStreamingCall(); + break; + default: + throw new Error('Example not specified'); + } +} + +function doUnaryCall() { + client.unaryCall( + { + clientMessage: 'Message from client', + }, + (error?: grpc.ServiceError, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.serverMessage}` + ); + } + } + ); +} + +function doServerStreamingCall() { + const stream = client.serverStreamingCall({ + clientMessage: 'Message from client', }); - channel.on('data', (message: ServerMessage) => { - if (message.user == user) { - return; + stream.on('data', (serverMessage: ServerMessage) => { + console.log(`(client) Got server message: ${serverMessage.serverMessage}`); + }); +} + +function doClientStreamingCall() { + const stream = client.clientStreamingCall( + (error?: grpc.ServiceError, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.serverMessage}` + ); + } } - console.log(`${message.user}: ${message.text}`); + ); + // TODO: this should be clientMessage + stream.write({ + serverMessage: 'Message from client', + }); +} + +function doBidirectionalStreamingCallStreamingCall() { + const stream = client.bidirectionalStreamingCall(); + + // Server stream + stream.on('data', (serverMessage: ServerMessage) => { + console.log(`(client) Got server message: ${serverMessage.serverMessage}`); }); - rl.on('line', function (text) { - client.send({ user, text }, () => { - // - }); + + // Client stream + stream.write({ + clientMessage: 'Message from client', }); } diff --git a/examples/grpc-proto-loader/package-lock.json b/examples/grpc-proto-loader/package-lock.json index 504eff3..cae71ac 100644 --- a/examples/grpc-proto-loader/package-lock.json +++ b/examples/grpc-proto-loader/package-lock.json @@ -1,5 +1,5 @@ { - "name": "grpc-js-example", + "name": "grpc-proto-loader-example", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -242,12 +242,6 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -449,33 +443,12 @@ "sprintf-js": "~1.0.2" } }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -645,12 +618,6 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -693,15 +660,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -754,45 +712,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -873,60 +792,6 @@ "get-stdin": "^6.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -937,54 +802,6 @@ "regexpp": "^3.0.0" } }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -1233,12 +1050,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1400,12 +1211,6 @@ "node-forge": "^0.10.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, "grpc": { "version": "1.24.3", "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.3.tgz", @@ -1528,39 +1333,18 @@ "mime": "^2.2.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1638,24 +1422,6 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1676,47 +1442,17 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1765,15 +1501,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -1812,18 +1539,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2019,26 +1734,6 @@ "osenv": "^0.1.4" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", @@ -2089,64 +1784,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2237,15 +1874,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2281,72 +1909,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2368,12 +1930,6 @@ "fast-diff": "^1.1.2" } }, - "prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2439,89 +1995,6 @@ } } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2545,11 +2018,6 @@ } } }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -2699,38 +2167,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2747,26 +2183,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2792,12 +2208,6 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2903,18 +2313,6 @@ "is-number": "^7.0.0" } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -2972,16 +2370,6 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/examples/grpc-proto-loader/package.json b/examples/grpc-proto-loader/package.json index 5df631e..d527f60 100644 --- a/examples/grpc-proto-loader/package.json +++ b/examples/grpc-proto-loader/package.json @@ -1,13 +1,22 @@ { - "name": "grpc-js-example", + "name": "grpc-proto-loader-example", "version": "1.0.0", "description": "", - "main": "index.js", + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/badsyntax/grpc-js-types/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/badsyntax/grpc-js-types" + }, "scripts": { "build": "npm run build:typescript", "build:typescript": "tsc -p .", "watch": "npm run build:typescript -- -w", - "build:proto": "proto-loader-gen-types --keep-case --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto", + "build:proto": "proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto", "prewatch": "npm run build:proto", "prebuild": "npm run build:proto", "lint": "npm run lint:prettier && npm run lint:eslint", @@ -18,13 +27,9 @@ "start:server": "node server", "start:client": "node client" }, - "keywords": [], - "author": "", - "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.1.7", - "@grpc/proto-loader": "^0.6.0-pre14", - "readline": "^1.3.0" + "@grpc/proto-loader": "^0.6.0-pre14" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", @@ -33,12 +38,10 @@ "@typescript-eslint/parser": "^4.1.1", "eslint": "^7.9.0", "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.4", "grpc": "^1.24.3", "prettier": "^2.1.2", - "prettier-plugin-organize-imports": "^1.1.1", "typescript": "^4.0.3" }, "eslintConfig": { @@ -59,10 +62,7 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "plugin:prettier/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" + "plugin:prettier/recommended" ] }, "prettier": { diff --git a/examples/grpc-proto-loader/proto/chat.proto b/examples/grpc-proto-loader/proto/chat.proto deleted file mode 100644 index 4ec0c7b..0000000 --- a/examples/grpc-proto-loader/proto/chat.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package chat_package; - -message ServerMessage { - string user = 1; - string text = 2; -} - -message ClientMessage { - string user = 1; - string text = 2; -} - -service Chat { - rpc join(ClientMessage) returns (stream ServerMessage) {} - rpc send(ClientMessage) returns (ServerMessage) {} -} diff --git a/examples/grpc-proto-loader/proto/chat_package/Chat.ts b/examples/grpc-proto-loader/proto/chat_package/Chat.ts deleted file mode 100644 index 7d91796..0000000 --- a/examples/grpc-proto-loader/proto/chat_package/Chat.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Original file: proto/chat.proto - -import * as grpc from '@grpc/grpc-js' -import { ClientMessage as _chat_package_ClientMessage, ClientMessage__Output as _chat_package_ClientMessage__Output } from '../chat_package/ClientMessage'; -import { ServerMessage as _chat_package_ServerMessage, ServerMessage__Output as _chat_package_ServerMessage__Output } from '../chat_package/ServerMessage'; - -export interface ChatClient extends grpc.Client { - join(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; - join(argument: _chat_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; - join(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; - join(argument: _chat_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_chat_package_ServerMessage__Output>; - - send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - send(argument: _chat_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _chat_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; - -} - -export interface ChatHandlers extends grpc.UntypedServiceImplementation { - join(call: grpc.ServerWritableStream<_chat_package_ClientMessage__Output, _chat_package_ServerMessage>): void; - - send(call: grpc.ServerUnaryCall<_chat_package_ClientMessage__Output, _chat_package_ServerMessage>, callback: grpc.sendUnaryData<_chat_package_ServerMessage>): void; - -} diff --git a/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts b/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts deleted file mode 100644 index df626eb..0000000 --- a/examples/grpc-proto-loader/proto/chat_package/ClientMessage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Original file: proto/chat.proto - - -export interface ClientMessage { - 'user'?: (string); - 'text'?: (string); -} - -export interface ClientMessage__Output { - 'user': (string); - 'text': (string); -} diff --git a/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts b/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts deleted file mode 100644 index 47d1783..0000000 --- a/examples/grpc-proto-loader/proto/chat_package/ServerMessage.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Original file: proto/chat.proto - - -export interface ServerMessage { - 'user'?: (string); - 'text'?: (string); -} - -export interface ServerMessage__Output { - 'user': (string); - 'text': (string); -} diff --git a/examples/grpc-proto-loader/proto/example.proto b/examples/grpc-proto-loader/proto/example.proto new file mode 100644 index 0000000..b23d1c4 --- /dev/null +++ b/examples/grpc-proto-loader/proto/example.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package example_package; + +message ServerMessage { + string server_message = 1; +} + +message ClientMessage { + string client_message = 1; +} + +service ExampleServer { + rpc unaryCall(ClientMessage) returns (ServerMessage) {} + rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} + rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} + rpc bidirectionalStreamingCall(stream ClientMessage) returns (stream ServerMessage) {} +} diff --git a/examples/grpc-proto-loader/proto/chat.ts b/examples/grpc-proto-loader/proto/example.ts similarity index 65% rename from examples/grpc-proto-loader/proto/chat.ts rename to examples/grpc-proto-loader/proto/example.ts index 875e863..db76927 100644 --- a/examples/grpc-proto-loader/proto/chat.ts +++ b/examples/grpc-proto-loader/proto/example.ts @@ -1,7 +1,7 @@ import * as grpc from '@grpc/grpc-js'; import { ServiceDefinition, EnumTypeDefinition, MessageTypeDefinition } from '@grpc/proto-loader'; -import { ChatClient as _chat_package_ChatClient } from './chat_package/Chat'; +import { ExampleServerClient as _example_package_ExampleServerClient } from './example_package/ExampleServer'; type ConstructorArguments = Constructor extends new (...args: infer Args) => any ? Args: never; type SubtypeConstructor = { @@ -9,9 +9,9 @@ type SubtypeConstructor = { }; export interface ProtoGrpcType { - chat_package: { - Chat: SubtypeConstructor & { service: ServiceDefinition } + example_package: { ClientMessage: MessageTypeDefinition + ExampleServer: SubtypeConstructor & { service: ServiceDefinition } ServerMessage: MessageTypeDefinition } } diff --git a/examples/grpc-proto-loader/proto/example_package/ClientMessage.ts b/examples/grpc-proto-loader/proto/example_package/ClientMessage.ts new file mode 100644 index 0000000..3311bbf --- /dev/null +++ b/examples/grpc-proto-loader/proto/example_package/ClientMessage.ts @@ -0,0 +1,10 @@ +// Original file: proto/example.proto + + +export interface ClientMessage { + 'clientMessage'?: (string); +} + +export interface ClientMessage__Output { + 'clientMessage': (string); +} diff --git a/examples/grpc-proto-loader/proto/example_package/ExampleServer.ts b/examples/grpc-proto-loader/proto/example_package/ExampleServer.ts new file mode 100644 index 0000000..87ecf10 --- /dev/null +++ b/examples/grpc-proto-loader/proto/example_package/ExampleServer.ts @@ -0,0 +1,47 @@ +// Original file: proto/example.proto + +import * as grpc from '@grpc/grpc-js' +import { ClientMessage as _example_package_ClientMessage, ClientMessage__Output as _example_package_ClientMessage__Output } from '../example_package/ClientMessage'; +import { ServerMessage as _example_package_ServerMessage, ServerMessage__Output as _example_package_ServerMessage__Output } from '../example_package/ServerMessage'; + +export interface ExampleServerClient extends grpc.Client { + bidirectionalStreamingCall(metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; + bidirectionalStreamingCall(options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; + bidirectionalStreamingCall(metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; + bidirectionalStreamingCall(options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; + + clientStreamingCall(metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + clientStreamingCall(callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientWritableStream<_example_package_ServerMessage__Output>; + + serverStreamingCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_example_package_ServerMessage__Output>; + serverStreamingCall(argument: _example_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_example_package_ServerMessage__Output>; + serverStreamingCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientReadableStream<_example_package_ServerMessage__Output>; + serverStreamingCall(argument: _example_package_ClientMessage, options?: grpc.CallOptions): grpc.ClientReadableStream<_example_package_ServerMessage__Output>; + + unaryCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, metadata: grpc.Metadata, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, options: grpc.CallOptions, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + unaryCall(argument: _example_package_ClientMessage, callback: (error?: grpc.ServiceError, result?: _example_package_ServerMessage__Output) => void): grpc.ClientUnaryCall; + +} + +export interface ExampleServerHandlers extends grpc.UntypedServiceImplementation { + bidirectionalStreamingCall(call: grpc.ServerDuplexStream<_example_package_ClientMessage__Output, _example_package_ServerMessage>): void; + + clientStreamingCall(call: grpc.ServerReadableStream<_example_package_ClientMessage__Output, _example_package_ServerMessage>, callback: grpc.sendUnaryData<_example_package_ServerMessage>): void; + + serverStreamingCall(call: grpc.ServerWritableStream<_example_package_ClientMessage__Output, _example_package_ServerMessage>): void; + + unaryCall(call: grpc.ServerUnaryCall<_example_package_ClientMessage__Output, _example_package_ServerMessage>, callback: grpc.sendUnaryData<_example_package_ServerMessage>): void; + +} diff --git a/examples/grpc-proto-loader/proto/example_package/ServerMessage.ts b/examples/grpc-proto-loader/proto/example_package/ServerMessage.ts new file mode 100644 index 0000000..e59a775 --- /dev/null +++ b/examples/grpc-proto-loader/proto/example_package/ServerMessage.ts @@ -0,0 +1,10 @@ +// Original file: proto/example.proto + + +export interface ServerMessage { + 'serverMessage'?: (string); +} + +export interface ServerMessage__Output { + 'serverMessage': (string); +} diff --git a/examples/grpc-proto-loader/server.ts b/examples/grpc-proto-loader/server.ts index ec26373..b72749c 100644 --- a/examples/grpc-proto-loader/server.ts +++ b/examples/grpc-proto-loader/server.ts @@ -1,53 +1,75 @@ import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; -import { ProtoGrpcType } from './proto/chat'; -import { ChatHandlers } from './proto/chat_package/Chat'; -import { ClientMessage } from './proto/chat_package/ClientMessage'; -import { ServerMessage } from './proto/chat_package/ServerMessage'; +import { ProtoGrpcType } from './proto/example'; +import { ClientMessage } from './proto/example_package/ClientMessage'; +import { ExampleServerHandlers } from './proto/example_package/ExampleServer'; +import { ServerMessage } from './proto/example_package/ServerMessage'; -const users: grpc.ServerWritableStream[] = []; -const messages: ClientMessage[] = []; +const host = '0.0.0.0:9090'; -function notifyChat(message: ServerMessage) { - messages.push(message); - users.forEach((user) => { - user.write(message); - }); -} - -const chatService: ChatHandlers = { - join(call: grpc.ServerWritableStream): void { - users.push(call); - notifyChat({ - user: 'Server', - text: `${call.request?.user} joined`, - }); - }, - send( +const exampleServer: ExampleServerHandlers = { + unaryCall( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData - ): void { + ) { if (call.request) { - notifyChat(call.request); - callback(null, call.request); + console.log(`(server) Got client message: ${call.request.clientMessage}`); } + callback(null, { + serverMessage: 'Message from server', + }); + }, + + serverStreamingCall( + call: grpc.ServerWritableStream + ) { + call.write({ + serverMessage: 'Message from server', + }); + }, + + clientStreamingCall( + call: grpc.ServerReadableStream, + callback: grpc.sendUnaryData + ) { + callback(null, { + serverMessage: 'Message from server', + }); + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.clientMessage}` + ); + }); + }, + + bidirectionalStreamingCall( + call: grpc.ServerDuplexStream + ) { + call.write({ + serverMessage: 'Message from server', + }); + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.clientMessage}` + ); + }); }, }; -export function getServer(): grpc.Server { - const packageDefinition = protoLoader.loadSync('./proto/chat.proto'); +function getServer(): grpc.Server { + const packageDefinition = protoLoader.loadSync('./proto/example.proto'); const proto = (grpc.loadPackageDefinition( packageDefinition ) as unknown) as ProtoGrpcType; const server = new grpc.Server(); - server.addService(proto.chat_package.Chat.service, chatService); + server.addService(proto.example_package.ExampleServer.service, exampleServer); return server; } if (require.main === module) { const server = getServer(); server.bindAsync( - '0.0.0.0:9090', + host, grpc.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) { diff --git a/examples/grpc-web/.vscode/extensions.json b/examples/grpc-web/.vscode/extensions.json index 25f46e6..57aabcb 100644 --- a/examples/grpc-web/.vscode/extensions.json +++ b/examples/grpc-web/.vscode/extensions.json @@ -3,6 +3,7 @@ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker" + "streetsidesoftware.code-spell-checker", + "zxh404.vscode-proto3" ] } diff --git a/examples/grpc_tools_node_protoc_ts/.vscode/extensions.json b/examples/grpc_tools_node_protoc_ts/.vscode/extensions.json index 25f46e6..57aabcb 100644 --- a/examples/grpc_tools_node_protoc_ts/.vscode/extensions.json +++ b/examples/grpc_tools_node_protoc_ts/.vscode/extensions.json @@ -3,6 +3,7 @@ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker" + "streetsidesoftware.code-spell-checker", + "zxh404.vscode-proto3" ] } diff --git a/examples/ts-protoc-gen/.vscode/extensions.json b/examples/ts-protoc-gen/.vscode/extensions.json index 25f46e6..57aabcb 100644 --- a/examples/ts-protoc-gen/.vscode/extensions.json +++ b/examples/ts-protoc-gen/.vscode/extensions.json @@ -3,6 +3,7 @@ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker" + "streetsidesoftware.code-spell-checker", + "zxh404.vscode-proto3" ] } From 885447a84491a9e18fa55bb948d142deabda36f9 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Sun, 11 Oct 2020 11:13:57 +0100 Subject: [PATCH 3/4] More updates --- examples/gradle-ts-protoc-gen/README.md | 4 +- examples/gradle-ts-protoc-gen/client.ts | 4 +- .../gradle-ts-protoc-gen/package-lock.json | 612 ----------- examples/gradle-ts-protoc-gen/package.json | 10 +- .../gradle-ts-protoc-gen/proto/example.proto | 2 +- .../proto/example_grpc_pb.d.ts | 6 +- .../proto/example_grpc_pb.js | 12 +- examples/gradle-ts-protoc-gen/server.ts | 4 +- examples/grpc-proto-loader/README.md | 2 +- examples/grpc-proto-loader/client.ts | 3 +- .../grpc-proto-loader/proto/example.proto | 2 +- examples/grpc-proto-loader/proto/example.ts | 4 +- .../{ExampleServer.ts => Example.ts} | 4 +- examples/grpc-proto-loader/server.ts | 6 +- examples/grpc_tools_node_protoc_ts/.gitignore | 4 +- .../.vscode/settings.json | 5 +- examples/grpc_tools_node_protoc_ts/README.md | 51 +- examples/grpc_tools_node_protoc_ts/client.ts | 110 +- .../compile-proto.sh | 2 +- .../package-lock.json | 952 +++--------------- .../grpc_tools_node_protoc_ts/package.json | 13 +- .../proto/chat.proto | 18 - .../proto/example.proto | 18 + .../proto/example_grpc_pb.d.ts | 92 ++ .../proto/example_grpc_pb.js | 77 ++ .../proto/example_pb.d.ts | 49 + .../proto/example_pb.js | 319 ++++++ examples/grpc_tools_node_protoc_ts/server.ts | 93 +- 28 files changed, 889 insertions(+), 1589 deletions(-) rename examples/grpc-proto-loader/proto/example_package/{ExampleServer.ts => Example.ts} (97%) delete mode 100644 examples/grpc_tools_node_protoc_ts/proto/chat.proto create mode 100644 examples/grpc_tools_node_protoc_ts/proto/example.proto create mode 100644 examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.d.ts create mode 100644 examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.js create mode 100644 examples/grpc_tools_node_protoc_ts/proto/example_pb.d.ts create mode 100644 examples/grpc_tools_node_protoc_ts/proto/example_pb.js diff --git a/examples/gradle-ts-protoc-gen/README.md b/examples/gradle-ts-protoc-gen/README.md index e6283d6..9ccf6c3 100644 --- a/examples/gradle-ts-protoc-gen/README.md +++ b/examples/gradle-ts-protoc-gen/README.md @@ -1,6 +1,6 @@ -# gradle-ts-protoc-gen +# gradle-ts-protoc-gen example -This examples shows how to uses [Gradle](https://gradle.org/), the [proto compiler](https://www.npmjs.com/package/grpc-tools), [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a (not quite yet) fully typed gRPC CLI chat application that runs on Node.js. +This examples shows how to uses [Gradle](https://gradle.org/), the [proto compiler](https://www.npmjs.com/package/grpc-tools), [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a (not quite yet) fully typed gRPC application that runs on Node.js. The [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) compiler plugin are used to generate JavaScript & TypeScript files from the proto definitions. The [`protobuf-gradle-plugin`](https://github.com/google/protobuf-gradle-plugin) Gradle plugin is used to run the compiler from Gradle. diff --git a/examples/gradle-ts-protoc-gen/client.ts b/examples/gradle-ts-protoc-gen/client.ts index ed3c7b4..5dadbba 100644 --- a/examples/gradle-ts-protoc-gen/client.ts +++ b/examples/gradle-ts-protoc-gen/client.ts @@ -1,10 +1,10 @@ import * as grpc from '@grpc/grpc-js'; -import { ExampleServerClient } from './proto/example_grpc_pb'; +import { ExampleClient } from './proto/example_grpc_pb'; import { ClientMessage, ServerMessage } from './proto/example_pb'; const host = '0.0.0.0:9090'; -const client = new ExampleServerClient(host, grpc.credentials.createInsecure()); +const client = new ExampleClient(host, grpc.credentials.createInsecure()); const deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 5); diff --git a/examples/gradle-ts-protoc-gen/package-lock.json b/examples/gradle-ts-protoc-gen/package-lock.json index 17adfd4..0c5253f 100644 --- a/examples/gradle-ts-protoc-gen/package-lock.json +++ b/examples/gradle-ts-protoc-gen/package-lock.json @@ -226,12 +226,6 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -433,33 +427,12 @@ "sprintf-js": "~1.0.2" } }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -596,12 +569,6 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -644,15 +611,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -705,45 +663,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -824,60 +743,6 @@ "get-stdin": "^6.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -888,54 +753,6 @@ "regexpp": "^3.0.0" } }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -1184,12 +1001,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1356,12 +1167,6 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.13.0.tgz", "integrity": "sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw==" }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, "grpc-tools": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.9.1.tgz", @@ -1382,39 +1187,18 @@ "mime": "^2.2.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1486,24 +1270,6 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1524,47 +1290,17 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1613,15 +1349,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -1651,18 +1378,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -1846,26 +1561,6 @@ "osenv": "^0.1.4" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", @@ -1916,64 +1611,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2049,15 +1686,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2093,72 +1721,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2180,12 +1742,6 @@ "fast-diff": "^1.1.2" } }, - "prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2251,89 +1807,6 @@ } } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2357,11 +1830,6 @@ } } }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -2511,38 +1979,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2559,26 +1995,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2604,12 +2020,6 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2724,18 +2134,6 @@ "google-protobuf": "^3.6.1" } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -2793,16 +2191,6 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/examples/gradle-ts-protoc-gen/package.json b/examples/gradle-ts-protoc-gen/package.json index c431df3..59c74b3 100644 --- a/examples/gradle-ts-protoc-gen/package.json +++ b/examples/gradle-ts-protoc-gen/package.json @@ -23,8 +23,7 @@ "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.1.7", - "google-protobuf": "^3.13.0", - "readline": "^1.3.0" + "google-protobuf": "^3.13.0" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", @@ -34,12 +33,10 @@ "@typescript-eslint/parser": "^4.2.0", "eslint": "^7.9.0", "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.4", "grpc-tools": "^1.9.1", "prettier": "^2.1.2", - "prettier-plugin-organize-imports": "^1.1.1", "ts-protoc-gen": "^0.13.0", "typescript": "^4.0.3" }, @@ -61,10 +58,7 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "plugin:prettier/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" + "plugin:prettier/recommended" ] }, "prettier": { diff --git a/examples/gradle-ts-protoc-gen/proto/example.proto b/examples/gradle-ts-protoc-gen/proto/example.proto index b23d1c4..9339a31 100644 --- a/examples/gradle-ts-protoc-gen/proto/example.proto +++ b/examples/gradle-ts-protoc-gen/proto/example.proto @@ -10,7 +10,7 @@ message ClientMessage { string client_message = 1; } -service ExampleServer { +service Example { rpc unaryCall(ClientMessage) returns (ServerMessage) {} rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} diff --git a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts index 8b6d224..6826237 100644 --- a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts +++ b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.d.ts @@ -6,16 +6,16 @@ import * as example_pb from "./example_pb"; import * as grpc from "@grpc/grpc-js"; -interface IExampleServerService extends grpc.ServiceDefinition { +interface IExampleService extends grpc.ServiceDefinition { unaryCall: grpc.MethodDefinition; serverStreamingCall: grpc.MethodDefinition; clientStreamingCall: grpc.MethodDefinition; bidirectionalStreamingCall: grpc.MethodDefinition; } -export const ExampleServerService: IExampleServerService; +export const ExampleService: IExampleService; -export class ExampleServerClient extends grpc.Client { +export class ExampleClient extends grpc.Client { constructor(address: string, credentials: grpc.ChannelCredentials, options?: object); unaryCall(argument: example_pb.ClientMessage, callback: grpc.requestCallback): grpc.ClientUnaryCall; unaryCall(argument: example_pb.ClientMessage, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; diff --git a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js index 1a6d8be..77c0f82 100644 --- a/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js +++ b/examples/gradle-ts-protoc-gen/proto/example_grpc_pb.js @@ -27,9 +27,9 @@ function deserialize_example_package_ServerMessage(buffer_arg) { } -var ExampleServerService = exports.ExampleServerService = { +var ExampleService = exports.ExampleService = { unaryCall: { - path: '/example_package.ExampleServer/unaryCall', + path: '/example_package.Example/unaryCall', requestStream: false, responseStream: false, requestType: example_pb.ClientMessage, @@ -40,7 +40,7 @@ var ExampleServerService = exports.ExampleServerService = { responseDeserialize: deserialize_example_package_ServerMessage, }, serverStreamingCall: { - path: '/example_package.ExampleServer/serverStreamingCall', + path: '/example_package.Example/serverStreamingCall', requestStream: false, responseStream: true, requestType: example_pb.ClientMessage, @@ -51,7 +51,7 @@ var ExampleServerService = exports.ExampleServerService = { responseDeserialize: deserialize_example_package_ServerMessage, }, clientStreamingCall: { - path: '/example_package.ExampleServer/clientStreamingCall', + path: '/example_package.Example/clientStreamingCall', requestStream: true, responseStream: false, requestType: example_pb.ClientMessage, @@ -62,7 +62,7 @@ var ExampleServerService = exports.ExampleServerService = { responseDeserialize: deserialize_example_package_ServerMessage, }, bidirectionalStreamingCall: { - path: '/example_package.ExampleServer/bidirectionalStreamingCall', + path: '/example_package.Example/bidirectionalStreamingCall', requestStream: true, responseStream: true, requestType: example_pb.ClientMessage, @@ -74,4 +74,4 @@ var ExampleServerService = exports.ExampleServerService = { }, }; -exports.ExampleServerClient = grpc.makeGenericClientConstructor(ExampleServerService); +exports.ExampleClient = grpc.makeGenericClientConstructor(ExampleService); diff --git a/examples/gradle-ts-protoc-gen/server.ts b/examples/gradle-ts-protoc-gen/server.ts index a6f70fb..5c6a251 100644 --- a/examples/gradle-ts-protoc-gen/server.ts +++ b/examples/gradle-ts-protoc-gen/server.ts @@ -1,5 +1,5 @@ import * as grpc from '@grpc/grpc-js'; -import { ExampleServerService } from './proto/example_grpc_pb'; +import { ExampleService } from './proto/example_grpc_pb'; import { ClientMessage, ServerMessage } from './proto/example_pb'; const host = '0.0.0.0:9090'; @@ -59,7 +59,7 @@ const exampleServer = { function getServer(): grpc.Server { const server = new grpc.Server(); - server.addService(ExampleServerService, exampleServer); + server.addService(ExampleService, exampleServer); return server; } diff --git a/examples/grpc-proto-loader/README.md b/examples/grpc-proto-loader/README.md index d59ce58..b998e8e 100644 --- a/examples/grpc-proto-loader/README.md +++ b/examples/grpc-proto-loader/README.md @@ -1,4 +1,4 @@ -# grpc-proto-loader +# grpc-proto-loader example This example shows how to use [`@grpc/proto-loader`](https://www.npmjs.com/package/@grpc/proto-loader) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a fully typed CLI chat application that runs on Node.js. diff --git a/examples/grpc-proto-loader/client.ts b/examples/grpc-proto-loader/client.ts index b9a3ead..70604f6 100644 --- a/examples/grpc-proto-loader/client.ts +++ b/examples/grpc-proto-loader/client.ts @@ -1,6 +1,5 @@ import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; -import { argv } from 'process'; import { ProtoGrpcType } from './proto/example'; import { ServerMessage } from './proto/example_package/ServerMessage'; @@ -10,7 +9,7 @@ const proto = (grpc.loadPackageDefinition( packageDefinition ) as unknown) as ProtoGrpcType; -const client = new proto.example_package.ExampleServer( +const client = new proto.example_package.Example( host, grpc.credentials.createInsecure() ); diff --git a/examples/grpc-proto-loader/proto/example.proto b/examples/grpc-proto-loader/proto/example.proto index b23d1c4..9339a31 100644 --- a/examples/grpc-proto-loader/proto/example.proto +++ b/examples/grpc-proto-loader/proto/example.proto @@ -10,7 +10,7 @@ message ClientMessage { string client_message = 1; } -service ExampleServer { +service Example { rpc unaryCall(ClientMessage) returns (ServerMessage) {} rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} diff --git a/examples/grpc-proto-loader/proto/example.ts b/examples/grpc-proto-loader/proto/example.ts index db76927..ec93e0c 100644 --- a/examples/grpc-proto-loader/proto/example.ts +++ b/examples/grpc-proto-loader/proto/example.ts @@ -1,7 +1,7 @@ import * as grpc from '@grpc/grpc-js'; import { ServiceDefinition, EnumTypeDefinition, MessageTypeDefinition } from '@grpc/proto-loader'; -import { ExampleServerClient as _example_package_ExampleServerClient } from './example_package/ExampleServer'; +import { ExampleClient as _example_package_ExampleClient } from './example_package/Example'; type ConstructorArguments = Constructor extends new (...args: infer Args) => any ? Args: never; type SubtypeConstructor = { @@ -11,7 +11,7 @@ type SubtypeConstructor = { export interface ProtoGrpcType { example_package: { ClientMessage: MessageTypeDefinition - ExampleServer: SubtypeConstructor & { service: ServiceDefinition } + Example: SubtypeConstructor & { service: ServiceDefinition } ServerMessage: MessageTypeDefinition } } diff --git a/examples/grpc-proto-loader/proto/example_package/ExampleServer.ts b/examples/grpc-proto-loader/proto/example_package/Example.ts similarity index 97% rename from examples/grpc-proto-loader/proto/example_package/ExampleServer.ts rename to examples/grpc-proto-loader/proto/example_package/Example.ts index 87ecf10..3ff7d0e 100644 --- a/examples/grpc-proto-loader/proto/example_package/ExampleServer.ts +++ b/examples/grpc-proto-loader/proto/example_package/Example.ts @@ -4,7 +4,7 @@ import * as grpc from '@grpc/grpc-js' import { ClientMessage as _example_package_ClientMessage, ClientMessage__Output as _example_package_ClientMessage__Output } from '../example_package/ClientMessage'; import { ServerMessage as _example_package_ServerMessage, ServerMessage__Output as _example_package_ServerMessage__Output } from '../example_package/ServerMessage'; -export interface ExampleServerClient extends grpc.Client { +export interface ExampleClient extends grpc.Client { bidirectionalStreamingCall(metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; bidirectionalStreamingCall(options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; bidirectionalStreamingCall(metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientDuplexStream<_example_package_ClientMessage, _example_package_ServerMessage__Output>; @@ -35,7 +35,7 @@ export interface ExampleServerClient extends grpc.Client { } -export interface ExampleServerHandlers extends grpc.UntypedServiceImplementation { +export interface ExampleHandlers extends grpc.UntypedServiceImplementation { bidirectionalStreamingCall(call: grpc.ServerDuplexStream<_example_package_ClientMessage__Output, _example_package_ServerMessage>): void; clientStreamingCall(call: grpc.ServerReadableStream<_example_package_ClientMessage__Output, _example_package_ServerMessage>, callback: grpc.sendUnaryData<_example_package_ServerMessage>): void; diff --git a/examples/grpc-proto-loader/server.ts b/examples/grpc-proto-loader/server.ts index b72749c..12e01f7 100644 --- a/examples/grpc-proto-loader/server.ts +++ b/examples/grpc-proto-loader/server.ts @@ -2,12 +2,12 @@ import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; import { ProtoGrpcType } from './proto/example'; import { ClientMessage } from './proto/example_package/ClientMessage'; -import { ExampleServerHandlers } from './proto/example_package/ExampleServer'; +import { ExampleHandlers } from './proto/example_package/Example'; import { ServerMessage } from './proto/example_package/ServerMessage'; const host = '0.0.0.0:9090'; -const exampleServer: ExampleServerHandlers = { +const exampleServer: ExampleHandlers = { unaryCall( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData @@ -62,7 +62,7 @@ function getServer(): grpc.Server { packageDefinition ) as unknown) as ProtoGrpcType; const server = new grpc.Server(); - server.addService(proto.example_package.ExampleServer.service, exampleServer); + server.addService(proto.example_package.Example.service, exampleServer); return server; } diff --git a/examples/grpc_tools_node_protoc_ts/.gitignore b/examples/grpc_tools_node_protoc_ts/.gitignore index 270f97b..ea19c89 100644 --- a/examples/grpc_tools_node_protoc_ts/.gitignore +++ b/examples/grpc_tools_node_protoc_ts/.gitignore @@ -1,3 +1,3 @@ node_modules -*.js -proto/*.ts +**/*.js +!proto/*.js diff --git a/examples/grpc_tools_node_protoc_ts/.vscode/settings.json b/examples/grpc_tools_node_protoc_ts/.vscode/settings.json index a11e020..cf5e2fa 100644 --- a/examples/grpc_tools_node_protoc_ts/.vscode/settings.json +++ b/examples/grpc_tools_node_protoc_ts/.vscode/settings.json @@ -19,5 +19,8 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "cSpell.language": "en-GB", - "cSpell.words": ["grpc"] + "cSpell.words": [ + "Unary", + "grpc" + ] } diff --git a/examples/grpc_tools_node_protoc_ts/README.md b/examples/grpc_tools_node_protoc_ts/README.md index 02fbd40..cbded50 100644 --- a/examples/grpc_tools_node_protoc_ts/README.md +++ b/examples/grpc_tools_node_protoc_ts/README.md @@ -1,8 +1,8 @@ -# grpc-js-example +# grpc_tools_node_protoc_ts example -This example shows how to use `@grpc/grpc-js` to build a (not quite yet) fully typed CLI chat application that runs on Node.js. +This example shows how to use the [proto compiler](https://www.npmjs.com/package/grpc-tools), [`grpc_tools_node_protoc_ts`](https://www.npmjs.com/package/grpc_tools_node_protoc_ts) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a fully typed gRPC application that runs on Node.js. -It uses the proto compiler and `ts-protoc-gen` compiler plugin to generate javascript & typescript files from the proto definitions. The generated code uses `google-protobuf`. +The [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`grpc_tools_node_protoc_ts`](https://www.npmjs.com/package/grpc_tools_node_protoc_ts) compiler plugin are used to generate JavaScript & TypeScript files from the proto definitions and [`google-protobuf`](https://www.npmjs.com/package/google-protobuf) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) is used at runtime. ## App layout @@ -10,22 +10,47 @@ It uses the proto compiler and `ts-protoc-gen` compiler plugin to generate javas - [server.ts](./server.ts) - The grpc server - [client.ts](./client.ts) - The grpc client -### Running the app +## Generating the Types -Start the server: +Install dependencies: -```bash -npm i +```sh +npm install +``` + +Use [`grpc_tools_node_protoc_ts`](https://www.npmjs.com/package/grpc_tools_node_protoc_ts) to generate the TypeScript files: + +```sh +./compile-proto.sh +``` + +This is aliased as a npm script: + +```sh +npm run build:proto +``` + +### Running the App + +This simple app demonstrates the different gRPC calls you can perform. + +First generated the types and build the application files: + +```sh npm run build -npm run start:server ``` -Now run the client in different terminal sessions: +Start the server: -```bash -npm run start:client +```sh +npm run start:server ``` -## Credits +Now run the client by specifying which example you want to run: -The chat application idea is inspired from https://techblog.fexcofts.com/2018/07/20/grpc-nodejs-chat-example/ +```bash +npm run start:client -- --unary +npm run start:client -- --server-streaming +npm run start:client -- --client-streaming +npm run start:client -- --bidi-streaming +``` diff --git a/examples/grpc_tools_node_protoc_ts/client.ts b/examples/grpc_tools_node_protoc_ts/client.ts index 0349cff..5dadbba 100644 --- a/examples/grpc_tools_node_protoc_ts/client.ts +++ b/examples/grpc_tools_node_protoc_ts/client.ts @@ -1,44 +1,100 @@ import * as grpc from '@grpc/grpc-js'; -import readline from 'readline'; -import { ChatClient } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; +import { ExampleClient } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); +const host = '0.0.0.0:9090'; -const client = new ChatClient( - '0.0.0.0:9090', - grpc.credentials.createInsecure() -); +const client = new ExampleClient(host, grpc.credentials.createInsecure()); const deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 5); client.waitForReady(deadline, (error?: Error) => { if (error) { - console.log(`Client error: ${error}`); + console.log(`Client connect error: ${error.message}`); } else { - rl.question("What's your name? ", startChat); + onClientReady(); } }); -function startChat(user: string) { +function onClientReady() { + switch (process.argv[process.argv.length - 1]) { + case '--unary': + doUnaryCall(); + break; + case '--server-streaming': + doServerStreamingCall(); + break; + case '--client-streaming': + doClientStreamingCall(); + break; + case '--bidi-streaming': + doBidirectionalStreamingCallStreamingCall(); + break; + default: + throw new Error('Example not specified'); + } +} + +function doUnaryCall() { const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - const channel = client.join(clientMessage); - channel.on('data', (message: ServerMessage) => { - if (message.getUser() == user) { - return; + clientMessage.setClientMessage('Message from client'); + client.unaryCall( + clientMessage, + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } } - console.log(`${message.getUser()}: ${message.getText()}`); + ); +} + +function doServerStreamingCall() { + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + const stream = client.serverStreamingCall(clientMessage); + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); - rl.on('line', function (text) { - const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - clientMessage.setText(text); - client.send(clientMessage, () => { - // - }); +} + +function doClientStreamingCall() { + const stream = client.clientStreamingCall( + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } + } + ); + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + setTimeout(() => {}, 1000); +} + +function doBidirectionalStreamingCallStreamingCall() { + const stream = client.bidirectionalStreamingCall(); + + // Server stream + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); + + // Client stream + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); } diff --git a/examples/grpc_tools_node_protoc_ts/compile-proto.sh b/examples/grpc_tools_node_protoc_ts/compile-proto.sh index 8ae8166..601658a 100755 --- a/examples/grpc_tools_node_protoc_ts/compile-proto.sh +++ b/examples/grpc_tools_node_protoc_ts/compile-proto.sh @@ -13,5 +13,5 @@ $PROTOC \ --plugin=protoc-gen-grpc=${PROTOC_GEN_GRPC_PATH} \ --js_out=import_style=commonjs:$OUT_DIR \ --grpc_out=grpc_js:$OUT_DIR \ - --ts_out=$TS_OUT_DIR \ + --ts_out=grpc_js:$TS_OUT_DIR \ "$IN_DIR"/*.proto diff --git a/examples/grpc_tools_node_protoc_ts/package-lock.json b/examples/grpc_tools_node_protoc_ts/package-lock.json index 5f24643..0ec6e6a 100644 --- a/examples/grpc_tools_node_protoc_ts/package-lock.json +++ b/examples/grpc_tools_node_protoc_ts/package-lock.json @@ -209,15 +209,6 @@ "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", "dev": true }, - "@types/bytebuffer": { - "version": "5.0.41", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.41.tgz", - "integrity": "sha512-Mdrv4YcaHvpkx25ksqqFaezktx3yZRcd51GZY0rY/9avyaqZdiT/GiWRhfrJhMpgzXqTOSHgGvsumGxJFNiZZA==", - "requires": { - "@types/long": "*", - "@types/node": "*" - } - }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", @@ -235,12 +226,6 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -249,7 +234,8 @@ "@types/node": { "version": "14.11.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.1.tgz", - "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==" + "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==", + "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "4.1.1", @@ -353,7 +339,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "abort-controller": { "version": "3.0.0", @@ -658,12 +645,14 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -696,17 +685,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, "array-sort": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-0.1.4.tgz", @@ -738,30 +716,11 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, - "ascli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "requires": { - "colour": "~0.7.1", - "optjs": "~3.2.2" - } - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -792,7 +751,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -823,6 +783,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -842,21 +803,6 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "requires": { - "long": "~3" - }, - "dependencies": { - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" - } - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -915,7 +861,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "class-utils": { "version": "0.3.6", @@ -953,7 +900,8 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "collection-visit": { "version": "1.0.0", @@ -978,11 +926,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "colour": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", - "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -992,7 +935,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-with-sourcemaps": { "version": "1.1.0", @@ -1006,12 +950,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "copy-descriptor": { @@ -1023,7 +962,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "create-frame": { "version": "1.0.0", @@ -1107,7 +1047,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -1132,15 +1073,6 @@ } } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", @@ -1184,12 +1116,14 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true }, "dir-glob": { "version": "3.0.1", @@ -1237,51 +1171,12 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, "error-symbol": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", "integrity": "sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y=", "dev": true }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1362,60 +1257,6 @@ "get-stdin": "^6.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -1426,54 +1267,6 @@ "regexpp": "^3.0.0" } }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -1824,6 +1617,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, "requires": { "minipass": "^2.6.0" } @@ -1831,12 +1625,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "functional-red-black-tree": { @@ -1849,6 +1638,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -1863,12 +1653,14 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1877,6 +1669,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -1887,6 +1680,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1971,6 +1765,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2041,112 +1836,6 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.13.0.tgz", "integrity": "sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw==" }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "grpc": { - "version": "1.24.3", - "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.3.tgz", - "integrity": "sha512-EDemzuZTfhM0hgrXqC4PtR76O3t+hTIYJYR5vgiW0yt2WJqo4mhxUqZUirzUQz34Psz7dbLp38C6Cl7Ij2vXRQ==", - "requires": { - "@types/bytebuffer": "^5.0.40", - "lodash.camelcase": "^4.3.0", - "lodash.clone": "^4.5.0", - "nan": "^2.13.2", - "node-pre-gyp": "^0.15.0", - "protobufjs": "^5.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "protobufjs": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", - "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", - "requires": { - "ascli": "~1", - "bytebuffer": "~5", - "glob": "^7.0.5", - "yargs": "^3.10.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, "grpc-tools": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.9.1.tgz", @@ -2157,9 +1846,9 @@ } }, "grpc_tools_node_protoc_ts": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/grpc_tools_node_protoc_ts/-/grpc_tools_node_protoc_ts-4.1.5.tgz", - "integrity": "sha512-/TgYNCpaw9MtY5L4KFlobjdlC13G++llmaIjEAxKRzNrpS4ZHdX/ENujiJgqjBLqSEujRA/YEV/x9T/v4ltcMQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/grpc_tools_node_protoc_ts/-/grpc_tools_node_protoc_ts-5.0.0.tgz", + "integrity": "sha512-W+rfeaNsXKJ3qMnlFdN5L2ZaoHwC2Y6CR2bLyLng03WydFXj0/hfkwU1NHc381DUPLUE/P2c4MbYp+ODdEWDmw==", "dev": true, "requires": { "google-protobuf": "3.12.4", @@ -2456,31 +2145,17 @@ "typeof-article": "^0.1.1" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true }, "has-value": { "version": "1.0.0", @@ -2574,12 +2249,6 @@ "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", "dev": true }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "html-tag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/html-tag/-/html-tag-2.0.0.tgz", @@ -2603,6 +2272,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -2617,6 +2287,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, "requires": { "minimatch": "^3.0.4" } @@ -2641,6 +2312,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2655,17 +2327,14 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "is-accessor-descriptor": { "version": "0.1.6", @@ -2687,24 +2356,12 @@ } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", - "dev": true - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2725,12 +2382,6 @@ } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2785,12 +2436,6 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2835,15 +2480,6 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-self-closing": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-self-closing/-/is-self-closing-1.0.1.tgz", @@ -2858,21 +2494,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2882,7 +2503,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -2932,15 +2554,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -2975,14 +2588,6 @@ "set-getter": "^0.1.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2993,18 +2598,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3030,11 +2623,6 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -3179,6 +2767,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3186,12 +2775,14 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3200,7 +2791,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -3208,6 +2800,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, "requires": { "minipass": "^2.9.0" } @@ -3237,14 +2830,15 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } }, "moment": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz", - "integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", "dev": true }, "ms": { @@ -3252,11 +2846,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -3346,6 +2935,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", + "dev": true, "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -3356,6 +2946,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -3382,6 +2973,7 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", + "dev": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.3", @@ -3398,7 +2990,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -3406,35 +2999,17 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" } @@ -3442,12 +3017,14 @@ "npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "npm-packlist": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -3458,6 +3035,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -3468,12 +3046,14 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-copy": { "version": "0.1.0", @@ -3506,18 +3086,6 @@ } } }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -3527,40 +3095,6 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3570,22 +3104,11 @@ "isobject": "^3.0.1" } }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -3604,33 +3127,23 @@ "word-wrap": "^1.2.3" } }, - "optjs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -3666,15 +3179,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -3689,7 +3193,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -3715,72 +3220,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -3808,16 +3247,11 @@ "fast-diff": "^1.1.2" } }, - "prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -3862,6 +3296,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3872,89 +3307,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true } } @@ -3963,6 +3316,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3976,15 +3330,11 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -4111,6 +3461,7 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -4138,12 +3489,14 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "self-closing-tags": { "version": "1.0.1", @@ -4200,7 +3553,8 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "slash": { "version": "3.0.0", @@ -4355,38 +3709,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -4454,30 +3776,11 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" }, @@ -4485,7 +3788,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -4497,12 +3801,6 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4586,6 +3884,7 @@ "version": "4.4.13", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", @@ -4599,7 +3898,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -4732,18 +4032,6 @@ "is-number": "^7.0.0" } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -4801,9 +4089,9 @@ "dev": true }, "uglify-js": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.0.tgz", - "integrity": "sha512-e1KQFRCpOxnrJsJVqDUCjURq+wXvIn7cK2sRAx9XL3HYLL9aezOP4Pb1+Y3/o693EPk111Yj2Q+IUXxcpHlygQ==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.1.tgz", + "integrity": "sha512-OApPSuJcxcnewwjSGGfWOjx3oix5XpmrK9Z2j0fTRlHGoZ49IU6kExfZTM0++fCArOOCet+vIfWwFHbvWqwp6g==", "dev": true, "optional": true }, @@ -4883,7 +4171,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "v8-compile-cache": { "version": "2.1.1", @@ -4891,16 +4180,6 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "warning-symbol": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", @@ -4925,6 +4204,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, "requires": { "string-width": "^1.0.2 || 2" }, @@ -4932,17 +4212,20 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4952,17 +4235,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -4982,7 +4261,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", diff --git a/examples/grpc_tools_node_protoc_ts/package.json b/examples/grpc_tools_node_protoc_ts/package.json index ab8e6d9..394b805 100644 --- a/examples/grpc_tools_node_protoc_ts/package.json +++ b/examples/grpc_tools_node_protoc_ts/package.json @@ -25,9 +25,7 @@ "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.1.7", - "google-protobuf": "^3.13.0", - "grpc": "^1.24.3", - "readline": "^1.3.0" + "google-protobuf": "^3.13.0" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", @@ -37,13 +35,11 @@ "@typescript-eslint/parser": "^4.1.1", "eslint": "^7.9.0", "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.4", "grpc-tools": "^1.9.1", - "grpc_tools_node_protoc_ts": "^4.1.5", + "grpc_tools_node_protoc_ts": "^5.0.0", "prettier": "^2.1.2", - "prettier-plugin-organize-imports": "^1.1.1", "typescript": "^4.0.3" }, "eslintConfig": { @@ -64,10 +60,7 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "plugin:prettier/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" + "plugin:prettier/recommended" ] }, "prettier": { diff --git a/examples/grpc_tools_node_protoc_ts/proto/chat.proto b/examples/grpc_tools_node_protoc_ts/proto/chat.proto deleted file mode 100644 index 4ec0c7b..0000000 --- a/examples/grpc_tools_node_protoc_ts/proto/chat.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package chat_package; - -message ServerMessage { - string user = 1; - string text = 2; -} - -message ClientMessage { - string user = 1; - string text = 2; -} - -service Chat { - rpc join(ClientMessage) returns (stream ServerMessage) {} - rpc send(ClientMessage) returns (ServerMessage) {} -} diff --git a/examples/grpc_tools_node_protoc_ts/proto/example.proto b/examples/grpc_tools_node_protoc_ts/proto/example.proto new file mode 100644 index 0000000..9339a31 --- /dev/null +++ b/examples/grpc_tools_node_protoc_ts/proto/example.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package example_package; + +message ServerMessage { + string server_message = 1; +} + +message ClientMessage { + string client_message = 1; +} + +service Example { + rpc unaryCall(ClientMessage) returns (ServerMessage) {} + rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} + rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} + rpc bidirectionalStreamingCall(stream ClientMessage) returns (stream ServerMessage) {} +} diff --git a/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.d.ts b/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.d.ts new file mode 100644 index 0000000..6258971 --- /dev/null +++ b/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.d.ts @@ -0,0 +1,92 @@ +// package: example_package +// file: proto/example.proto + +/* tslint:disable */ +/* eslint-disable */ + +import * as grpc from "@grpc/grpc-js"; +import {handleClientStreamingCall} from "@grpc/grpc-js/build/src/server-call"; +import * as proto_example_pb from "../proto/example_pb"; + +interface IExampleService extends grpc.ServiceDefinition { + unaryCall: IExampleService_IunaryCall; + serverStreamingCall: IExampleService_IserverStreamingCall; + clientStreamingCall: IExampleService_IclientStreamingCall; + bidirectionalStreamingCall: IExampleService_IbidirectionalStreamingCall; +} + +interface IExampleService_IunaryCall extends grpc.MethodDefinition { + path: "/example_package.Example/unaryCall"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} +interface IExampleService_IserverStreamingCall extends grpc.MethodDefinition { + path: "/example_package.Example/serverStreamingCall"; + requestStream: false; + responseStream: true; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} +interface IExampleService_IclientStreamingCall extends grpc.MethodDefinition { + path: "/example_package.Example/clientStreamingCall"; + requestStream: true; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} +interface IExampleService_IbidirectionalStreamingCall extends grpc.MethodDefinition { + path: "/example_package.Example/bidirectionalStreamingCall"; + requestStream: true; + responseStream: true; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} + +export const ExampleService: IExampleService; + +export interface IExampleServer { + unaryCall: grpc.handleUnaryCall; + serverStreamingCall: grpc.handleServerStreamingCall; + clientStreamingCall: handleClientStreamingCall; + bidirectionalStreamingCall: grpc.handleBidiStreamingCall; +} + +export interface IExampleClient { + unaryCall(request: proto_example_pb.ClientMessage, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + unaryCall(request: proto_example_pb.ClientMessage, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + unaryCall(request: proto_example_pb.ClientMessage, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + serverStreamingCall(request: proto_example_pb.ClientMessage, options?: Partial): grpc.ClientReadableStream; + serverStreamingCall(request: proto_example_pb.ClientMessage, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; + clientStreamingCall(callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + clientStreamingCall(metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + clientStreamingCall(options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + clientStreamingCall(metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + bidirectionalStreamingCall(): grpc.ClientDuplexStream; + bidirectionalStreamingCall(options: Partial): grpc.ClientDuplexStream; + bidirectionalStreamingCall(metadata: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream; +} + +export class ExampleClient extends grpc.Client implements IExampleClient { + constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial); + public unaryCall(request: proto_example_pb.ClientMessage, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + public unaryCall(request: proto_example_pb.ClientMessage, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + public unaryCall(request: proto_example_pb.ClientMessage, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientUnaryCall; + public serverStreamingCall(request: proto_example_pb.ClientMessage, options?: Partial): grpc.ClientReadableStream; + public serverStreamingCall(request: proto_example_pb.ClientMessage, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; + public clientStreamingCall(callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + public clientStreamingCall(metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + public clientStreamingCall(options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + public clientStreamingCall(metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: proto_example_pb.ServerMessage) => void): grpc.ClientWritableStream; + public bidirectionalStreamingCall(options?: Partial): grpc.ClientDuplexStream; + public bidirectionalStreamingCall(metadata?: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream; +} diff --git a/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.js b/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.js new file mode 100644 index 0000000..b99745b --- /dev/null +++ b/examples/grpc_tools_node_protoc_ts/proto/example_grpc_pb.js @@ -0,0 +1,77 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('@grpc/grpc-js'); +var proto_example_pb = require('../proto/example_pb.js'); + +function serialize_example_package_ClientMessage(arg) { + if (!(arg instanceof proto_example_pb.ClientMessage)) { + throw new Error('Expected argument of type example_package.ClientMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ClientMessage(buffer_arg) { + return proto_example_pb.ClientMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_example_package_ServerMessage(arg) { + if (!(arg instanceof proto_example_pb.ServerMessage)) { + throw new Error('Expected argument of type example_package.ServerMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ServerMessage(buffer_arg) { + return proto_example_pb.ServerMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var ExampleService = exports.ExampleService = { + unaryCall: { + path: '/example_package.Example/unaryCall', + requestStream: false, + responseStream: false, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + serverStreamingCall: { + path: '/example_package.Example/serverStreamingCall', + requestStream: false, + responseStream: true, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + clientStreamingCall: { + path: '/example_package.Example/clientStreamingCall', + requestStream: true, + responseStream: false, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + bidirectionalStreamingCall: { + path: '/example_package.Example/bidirectionalStreamingCall', + requestStream: true, + responseStream: true, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, +}; + +exports.ExampleClient = grpc.makeGenericClientConstructor(ExampleService); diff --git a/examples/grpc_tools_node_protoc_ts/proto/example_pb.d.ts b/examples/grpc_tools_node_protoc_ts/proto/example_pb.d.ts new file mode 100644 index 0000000..03a59a0 --- /dev/null +++ b/examples/grpc_tools_node_protoc_ts/proto/example_pb.d.ts @@ -0,0 +1,49 @@ +// package: example_package +// file: proto/example.proto + +/* tslint:disable */ +/* eslint-disable */ + +import * as jspb from "google-protobuf"; + +export class ServerMessage extends jspb.Message { + getServerMessage(): string; + setServerMessage(value: string): ServerMessage; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerMessage.AsObject; + static toObject(includeInstance: boolean, msg: ServerMessage): ServerMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerMessage; + static deserializeBinaryFromReader(message: ServerMessage, reader: jspb.BinaryReader): ServerMessage; +} + +export namespace ServerMessage { + export type AsObject = { + serverMessage: string, + } +} + +export class ClientMessage extends jspb.Message { + getClientMessage(): string; + setClientMessage(value: string): ClientMessage; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ClientMessage.AsObject; + static toObject(includeInstance: boolean, msg: ClientMessage): ClientMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ClientMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ClientMessage; + static deserializeBinaryFromReader(message: ClientMessage, reader: jspb.BinaryReader): ClientMessage; +} + +export namespace ClientMessage { + export type AsObject = { + clientMessage: string, + } +} diff --git a/examples/grpc_tools_node_protoc_ts/proto/example_pb.js b/examples/grpc_tools_node_protoc_ts/proto/example_pb.js new file mode 100644 index 0000000..a8563e2 --- /dev/null +++ b/examples/grpc_tools_node_protoc_ts/proto/example_pb.js @@ -0,0 +1,319 @@ +// source: proto/example.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.example_package.ClientMessage', null, global); +goog.exportSymbol('proto.example_package.ServerMessage', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ServerMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ServerMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ServerMessage.displayName = 'proto.example_package.ServerMessage'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ClientMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ClientMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ClientMessage.displayName = 'proto.example_package.ClientMessage'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ServerMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ServerMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ServerMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.toObject = function(includeInstance, msg) { + var f, obj = { + serverMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ServerMessage; + return proto.example_package.ServerMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ServerMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setServerMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ServerMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ServerMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ServerMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getServerMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string server_message = 1; + * @return {string} + */ +proto.example_package.ServerMessage.prototype.getServerMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.example_package.ServerMessage} returns this + */ +proto.example_package.ServerMessage.prototype.setServerMessage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ClientMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ClientMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ClientMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.toObject = function(includeInstance, msg) { + var f, obj = { + clientMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ClientMessage; + return proto.example_package.ClientMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ClientMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setClientMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ClientMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ClientMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ClientMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getClientMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string client_message = 1; + * @return {string} + */ +proto.example_package.ClientMessage.prototype.getClientMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.example_package.ClientMessage} returns this + */ +proto.example_package.ClientMessage.prototype.setClientMessage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +goog.object.extend(exports, proto.example_package); diff --git a/examples/grpc_tools_node_protoc_ts/server.ts b/examples/grpc_tools_node_protoc_ts/server.ts index 8378562..702a57c 100644 --- a/examples/grpc_tools_node_protoc_ts/server.ts +++ b/examples/grpc_tools_node_protoc_ts/server.ts @@ -1,52 +1,77 @@ -import * as grpc from 'grpc'; -import { ChatService, IChatServer } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; - -const users: grpc.ServerWritableStream[] = []; -const messages: ClientMessage[] = []; - -function notifyChat(message: ServerMessage) { - messages.push(message); - users.forEach((user) => { - user.write(message); - }); -} +import * as grpc from '@grpc/grpc-js'; +import { ExampleService, IExampleServer } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const chatServer: IChatServer = { - join(call: grpc.ServerWritableStream): void { - users.push(call); - const serverMessage = new ServerMessage(); - serverMessage.setUser('Server'); - serverMessage.setText(`${call.request?.getUser()} joined`); - notifyChat(serverMessage); - }, - send( +const host = '0.0.0.0:9090'; + +const exampleServer: IExampleServer = { + unaryCall( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData - ): void { + ) { if (call.request) { - const serverMessage = new ServerMessage(); - serverMessage.setUser(call.request.getUser()); - serverMessage.setText(call.request.getText()); - notifyChat(serverMessage); - callback(null, serverMessage); + console.log( + `(server) Got client message: ${call.request.getClientMessage()}` + ); } + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); }, -}; -const server = new grpc.Server(); -server.addService(ChatService, chatServer); + serverStreamingCall( + call: grpc.ServerWritableStream + ) { + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); + }, + + clientStreamingCall( + call: grpc.ServerReadableStream, + callback: grpc.sendUnaryData + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); -export function getServer(): grpc.Server { + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); + }, + + bidirectionalStreamingCall( + call: grpc.ServerDuplexStream + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); + + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); + }, +}; + +function getServer(): grpc.Server { const server = new grpc.Server(); - server.addService(ChatService, chatServer); + // The following type is broken because `IExampleServer` does not extend from `grpc.UntypedServiceImplementation` + // This is done to allow for class implementations of `IExampleServer`. + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + server.addService(ExampleService, exampleServer); return server; } if (require.main === module) { const server = getServer(); server.bindAsync( - '0.0.0.0:9090', + host, grpc.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) { From 1105325d84533ecf08908769484f0e071e250898 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Sun, 11 Oct 2020 11:18:33 +0100 Subject: [PATCH 4/4] More updates --- examples/gradle-ts-protoc-gen/README.md | 2 +- examples/ts-protoc-gen/.gitignore | 2 +- examples/ts-protoc-gen/README.md | 40 +- examples/ts-protoc-gen/client.ts | 110 +++- examples/ts-protoc-gen/package-lock.json | 612 ------------------ examples/ts-protoc-gen/package.json | 10 +- examples/ts-protoc-gen/proto/chat.proto | 18 - examples/ts-protoc-gen/proto/example.proto | 18 + .../ts-protoc-gen/proto/example_grpc_pb.d.ts | 30 + .../ts-protoc-gen/proto/example_grpc_pb.js | 77 +++ examples/ts-protoc-gen/proto/example_pb.d.ts | 45 ++ examples/ts-protoc-gen/proto/example_pb.js | 319 +++++++++ examples/ts-protoc-gen/server.ts | 82 ++- 13 files changed, 654 insertions(+), 711 deletions(-) delete mode 100644 examples/ts-protoc-gen/proto/chat.proto create mode 100644 examples/ts-protoc-gen/proto/example.proto create mode 100644 examples/ts-protoc-gen/proto/example_grpc_pb.d.ts create mode 100644 examples/ts-protoc-gen/proto/example_grpc_pb.js create mode 100644 examples/ts-protoc-gen/proto/example_pb.d.ts create mode 100644 examples/ts-protoc-gen/proto/example_pb.js diff --git a/examples/gradle-ts-protoc-gen/README.md b/examples/gradle-ts-protoc-gen/README.md index 9ccf6c3..d70fc29 100644 --- a/examples/gradle-ts-protoc-gen/README.md +++ b/examples/gradle-ts-protoc-gen/README.md @@ -4,7 +4,7 @@ This examples shows how to uses [Gradle](https://gradle.org/), the [proto compil The [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) compiler plugin are used to generate JavaScript & TypeScript files from the proto definitions. The [`protobuf-gradle-plugin`](https://github.com/google/protobuf-gradle-plugin) Gradle plugin is used to run the compiler from Gradle. -The generated code uses [`google-protobuf`](https://www.npmjs.com/package/google-protobuf) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) at runtime. +[`google-protobuf`](https://www.npmjs.com/package/google-protobuf) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) is used at runtime. ## App layout diff --git a/examples/ts-protoc-gen/.gitignore b/examples/ts-protoc-gen/.gitignore index 270f97b..14b088c 100644 --- a/examples/ts-protoc-gen/.gitignore +++ b/examples/ts-protoc-gen/.gitignore @@ -1,3 +1,3 @@ node_modules *.js -proto/*.ts +!proto/*.js diff --git a/examples/ts-protoc-gen/README.md b/examples/ts-protoc-gen/README.md index 9a91a84..d1cfbc2 100644 --- a/examples/ts-protoc-gen/README.md +++ b/examples/ts-protoc-gen/README.md @@ -2,45 +2,57 @@ This examples shows how to use the [proto compiler](https://www.npmjs.com/package/grpc-tools), [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) to build a (not quite yet) fully typed gRPC CLI chat application that runs on Node.js. -The [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) compiler plugin are used to generate JavaScript & TypeScript files from the proto definitions. - -The generated code uses [`google-protobuf`](https://www.npmjs.com/package/google-protobuf) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) at runtime. +The [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) compiler plugin are used to generate JavaScript & TypeScript files from the proto definitions. [`google-protobuf`](https://www.npmjs.com/package/google-protobuf) & [`@grpc/grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js) is used at runtime. ## App layout - [package.json](./package.json) - Dependencies and node build scripts -- [compile-proto.sh](./compile-proto.sh) - The proto compiler script +- [build.gradle](./build.gradle) - The Gradle build file - [proto/](./proto/) - Protobuf definitions and generated types - [server.ts](./server.ts) - The grpc server - [client.ts](./client.ts) - The grpc client ## Generating the Types +Install dependencies: + ```sh npm install -./compile-proto.sh ``` -### Running the app +Use [proto compiler](https://www.npmjs.com/package/grpc-tools) and [`ts-protoc-gen`](https://www.npmjs.com/package/ts-protoc-gen) to generate the TypeScript files: + +```sh +./compile-proto.sh +``` -First build the types and application files: +This is aliased as a npm script: ```sh -npm run build # this also runs `./compile-proto.sh` +npm run build:proto ``` -Start the server: +### Running the App + +This simple app demonstrates the different gRPC calls you can perform. + +First generated the types and build the application files: ```sh -npm run start:server +npm run build ``` -Now run the client in different terminal sessions: +Start the server: ```sh -npm run start:client +npm run start:server ``` -## Credits +Now run the client by specifying which example you want to run: -The chat application idea is inspired from https://techblog.fexcofts.com/2018/07/20/grpc-nodejs-chat-example/ +```bash +npm run start:client -- --unary +npm run start:client -- --server-streaming +npm run start:client -- --client-streaming +npm run start:client -- --bidi-streaming +``` diff --git a/examples/ts-protoc-gen/client.ts b/examples/ts-protoc-gen/client.ts index 0349cff..5dadbba 100644 --- a/examples/ts-protoc-gen/client.ts +++ b/examples/ts-protoc-gen/client.ts @@ -1,44 +1,100 @@ import * as grpc from '@grpc/grpc-js'; -import readline from 'readline'; -import { ChatClient } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; +import { ExampleClient } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); +const host = '0.0.0.0:9090'; -const client = new ChatClient( - '0.0.0.0:9090', - grpc.credentials.createInsecure() -); +const client = new ExampleClient(host, grpc.credentials.createInsecure()); const deadline = new Date(); deadline.setSeconds(deadline.getSeconds() + 5); client.waitForReady(deadline, (error?: Error) => { if (error) { - console.log(`Client error: ${error}`); + console.log(`Client connect error: ${error.message}`); } else { - rl.question("What's your name? ", startChat); + onClientReady(); } }); -function startChat(user: string) { +function onClientReady() { + switch (process.argv[process.argv.length - 1]) { + case '--unary': + doUnaryCall(); + break; + case '--server-streaming': + doServerStreamingCall(); + break; + case '--client-streaming': + doClientStreamingCall(); + break; + case '--bidi-streaming': + doBidirectionalStreamingCallStreamingCall(); + break; + default: + throw new Error('Example not specified'); + } +} + +function doUnaryCall() { const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - const channel = client.join(clientMessage); - channel.on('data', (message: ServerMessage) => { - if (message.getUser() == user) { - return; + clientMessage.setClientMessage('Message from client'); + client.unaryCall( + clientMessage, + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } } - console.log(`${message.getUser()}: ${message.getText()}`); + ); +} + +function doServerStreamingCall() { + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + const stream = client.serverStreamingCall(clientMessage); + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); - rl.on('line', function (text) { - const clientMessage = new ClientMessage(); - clientMessage.setUser(user); - clientMessage.setText(text); - client.send(clientMessage, () => { - // - }); +} + +function doClientStreamingCall() { + const stream = client.clientStreamingCall( + (error: grpc.ServiceError | null, serverMessage?: ServerMessage) => { + if (error) { + console.error(error.message); + } else if (serverMessage) { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); + } + } + ); + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + setTimeout(() => {}, 1000); +} + +function doBidirectionalStreamingCallStreamingCall() { + const stream = client.bidirectionalStreamingCall(); + + // Server stream + stream.on('data', (serverMessage: ServerMessage) => { + console.log( + `(client) Got server message: ${serverMessage.getServerMessage()}` + ); }); + + // Client stream + const clientMessage = new ClientMessage(); + clientMessage.setClientMessage('Message from client'); + stream.write(clientMessage); } diff --git a/examples/ts-protoc-gen/package-lock.json b/examples/ts-protoc-gen/package-lock.json index 891bdd9..fe7c156 100644 --- a/examples/ts-protoc-gen/package-lock.json +++ b/examples/ts-protoc-gen/package-lock.json @@ -226,12 +226,6 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -433,33 +427,12 @@ "sprintf-js": "~1.0.2" } }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -596,12 +569,6 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -644,15 +611,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -705,45 +663,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -824,60 +743,6 @@ "get-stdin": "^6.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -888,54 +753,6 @@ "regexpp": "^3.0.0" } }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -1184,12 +1001,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1356,12 +1167,6 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.13.0.tgz", "integrity": "sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw==" }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, "grpc-tools": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.9.1.tgz", @@ -1382,39 +1187,18 @@ "mime": "^2.2.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1486,24 +1270,6 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1524,47 +1290,17 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1613,15 +1349,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -1651,18 +1378,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -1846,26 +1561,6 @@ "osenv": "^0.1.4" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", @@ -1916,64 +1611,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2049,15 +1686,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2093,72 +1721,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2180,12 +1742,6 @@ "fast-diff": "^1.1.2" } }, - "prettier-plugin-organize-imports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-1.1.1.tgz", - "integrity": "sha512-rFA1lnek1FYkMGthm4xBKME41qUKItTovuo24bCGZu/Vu1n3gW71UPLAkIdwewwkZCe29gRVweSOPXvAdckFuw==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2251,89 +1807,6 @@ } } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2357,11 +1830,6 @@ } } }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -2511,38 +1979,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2559,26 +1995,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2604,12 +2020,6 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2724,18 +2134,6 @@ "google-protobuf": "^3.6.1" } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -2793,16 +2191,6 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/examples/ts-protoc-gen/package.json b/examples/ts-protoc-gen/package.json index 2523e7a..6a554d1 100644 --- a/examples/ts-protoc-gen/package.json +++ b/examples/ts-protoc-gen/package.json @@ -25,8 +25,7 @@ "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.1.7", - "google-protobuf": "^3.13.0", - "readline": "^1.3.0" + "google-protobuf": "^3.13.0" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", @@ -36,12 +35,10 @@ "@typescript-eslint/parser": "^4.1.1", "eslint": "^7.9.0", "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.4", "grpc-tools": "^1.9.1", "prettier": "^2.1.2", - "prettier-plugin-organize-imports": "^1.1.1", "ts-protoc-gen": "^0.13.0", "typescript": "^4.0.3" }, @@ -63,10 +60,7 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "plugin:prettier/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" + "plugin:prettier/recommended" ] }, "prettier": { diff --git a/examples/ts-protoc-gen/proto/chat.proto b/examples/ts-protoc-gen/proto/chat.proto deleted file mode 100644 index 4ec0c7b..0000000 --- a/examples/ts-protoc-gen/proto/chat.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package chat_package; - -message ServerMessage { - string user = 1; - string text = 2; -} - -message ClientMessage { - string user = 1; - string text = 2; -} - -service Chat { - rpc join(ClientMessage) returns (stream ServerMessage) {} - rpc send(ClientMessage) returns (ServerMessage) {} -} diff --git a/examples/ts-protoc-gen/proto/example.proto b/examples/ts-protoc-gen/proto/example.proto new file mode 100644 index 0000000..9339a31 --- /dev/null +++ b/examples/ts-protoc-gen/proto/example.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package example_package; + +message ServerMessage { + string server_message = 1; +} + +message ClientMessage { + string client_message = 1; +} + +service Example { + rpc unaryCall(ClientMessage) returns (ServerMessage) {} + rpc serverStreamingCall(ClientMessage) returns (stream ServerMessage) {} + rpc clientStreamingCall(stream ClientMessage) returns (ServerMessage) {} + rpc bidirectionalStreamingCall(stream ClientMessage) returns (stream ServerMessage) {} +} diff --git a/examples/ts-protoc-gen/proto/example_grpc_pb.d.ts b/examples/ts-protoc-gen/proto/example_grpc_pb.d.ts new file mode 100644 index 0000000..7e53c30 --- /dev/null +++ b/examples/ts-protoc-gen/proto/example_grpc_pb.d.ts @@ -0,0 +1,30 @@ +// GENERATED CODE -- DO NOT EDIT! + +// package: example_package +// file: proto/example.proto + +import * as proto_example_pb from "../proto/example_pb"; +import * as grpc from "@grpc/grpc-js"; + +interface IExampleService extends grpc.ServiceDefinition { + unaryCall: grpc.MethodDefinition; + serverStreamingCall: grpc.MethodDefinition; + clientStreamingCall: grpc.MethodDefinition; + bidirectionalStreamingCall: grpc.MethodDefinition; +} + +export const ExampleService: IExampleService; + +export class ExampleClient extends grpc.Client { + constructor(address: string, credentials: grpc.ChannelCredentials, options?: object); + unaryCall(argument: proto_example_pb.ClientMessage, callback: grpc.requestCallback): grpc.ClientUnaryCall; + unaryCall(argument: proto_example_pb.ClientMessage, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + unaryCall(argument: proto_example_pb.ClientMessage, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + serverStreamingCall(argument: proto_example_pb.ClientMessage, metadataOrOptions?: grpc.Metadata | grpc.CallOptions | null): grpc.ClientReadableStream; + serverStreamingCall(argument: proto_example_pb.ClientMessage, metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientReadableStream; + clientStreamingCall(callback: grpc.requestCallback): grpc.ClientWritableStream; + clientStreamingCall(metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientWritableStream; + clientStreamingCall(metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientWritableStream; + bidirectionalStreamingCall(metadataOrOptions?: grpc.Metadata | grpc.CallOptions | null): grpc.ClientDuplexStream; + bidirectionalStreamingCall(metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientDuplexStream; +} diff --git a/examples/ts-protoc-gen/proto/example_grpc_pb.js b/examples/ts-protoc-gen/proto/example_grpc_pb.js new file mode 100644 index 0000000..b99745b --- /dev/null +++ b/examples/ts-protoc-gen/proto/example_grpc_pb.js @@ -0,0 +1,77 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('@grpc/grpc-js'); +var proto_example_pb = require('../proto/example_pb.js'); + +function serialize_example_package_ClientMessage(arg) { + if (!(arg instanceof proto_example_pb.ClientMessage)) { + throw new Error('Expected argument of type example_package.ClientMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ClientMessage(buffer_arg) { + return proto_example_pb.ClientMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_example_package_ServerMessage(arg) { + if (!(arg instanceof proto_example_pb.ServerMessage)) { + throw new Error('Expected argument of type example_package.ServerMessage'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_example_package_ServerMessage(buffer_arg) { + return proto_example_pb.ServerMessage.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var ExampleService = exports.ExampleService = { + unaryCall: { + path: '/example_package.Example/unaryCall', + requestStream: false, + responseStream: false, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + serverStreamingCall: { + path: '/example_package.Example/serverStreamingCall', + requestStream: false, + responseStream: true, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + clientStreamingCall: { + path: '/example_package.Example/clientStreamingCall', + requestStream: true, + responseStream: false, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, + bidirectionalStreamingCall: { + path: '/example_package.Example/bidirectionalStreamingCall', + requestStream: true, + responseStream: true, + requestType: proto_example_pb.ClientMessage, + responseType: proto_example_pb.ServerMessage, + requestSerialize: serialize_example_package_ClientMessage, + requestDeserialize: deserialize_example_package_ClientMessage, + responseSerialize: serialize_example_package_ServerMessage, + responseDeserialize: deserialize_example_package_ServerMessage, + }, +}; + +exports.ExampleClient = grpc.makeGenericClientConstructor(ExampleService); diff --git a/examples/ts-protoc-gen/proto/example_pb.d.ts b/examples/ts-protoc-gen/proto/example_pb.d.ts new file mode 100644 index 0000000..baf52cb --- /dev/null +++ b/examples/ts-protoc-gen/proto/example_pb.d.ts @@ -0,0 +1,45 @@ +// package: example_package +// file: proto/example.proto + +import * as jspb from "google-protobuf"; + +export class ServerMessage extends jspb.Message { + getServerMessage(): string; + setServerMessage(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerMessage.AsObject; + static toObject(includeInstance: boolean, msg: ServerMessage): ServerMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerMessage; + static deserializeBinaryFromReader(message: ServerMessage, reader: jspb.BinaryReader): ServerMessage; +} + +export namespace ServerMessage { + export type AsObject = { + serverMessage: string, + } +} + +export class ClientMessage extends jspb.Message { + getClientMessage(): string; + setClientMessage(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ClientMessage.AsObject; + static toObject(includeInstance: boolean, msg: ClientMessage): ClientMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ClientMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ClientMessage; + static deserializeBinaryFromReader(message: ClientMessage, reader: jspb.BinaryReader): ClientMessage; +} + +export namespace ClientMessage { + export type AsObject = { + clientMessage: string, + } +} + diff --git a/examples/ts-protoc-gen/proto/example_pb.js b/examples/ts-protoc-gen/proto/example_pb.js new file mode 100644 index 0000000..a8563e2 --- /dev/null +++ b/examples/ts-protoc-gen/proto/example_pb.js @@ -0,0 +1,319 @@ +// source: proto/example.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.example_package.ClientMessage', null, global); +goog.exportSymbol('proto.example_package.ServerMessage', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ServerMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ServerMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ServerMessage.displayName = 'proto.example_package.ServerMessage'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.example_package.ClientMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.example_package.ClientMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.example_package.ClientMessage.displayName = 'proto.example_package.ClientMessage'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ServerMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ServerMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ServerMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.toObject = function(includeInstance, msg) { + var f, obj = { + serverMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ServerMessage; + return proto.example_package.ServerMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ServerMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ServerMessage} + */ +proto.example_package.ServerMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setServerMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ServerMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ServerMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ServerMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ServerMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getServerMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string server_message = 1; + * @return {string} + */ +proto.example_package.ServerMessage.prototype.getServerMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.example_package.ServerMessage} returns this + */ +proto.example_package.ServerMessage.prototype.setServerMessage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.example_package.ClientMessage.prototype.toObject = function(opt_includeInstance) { + return proto.example_package.ClientMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.example_package.ClientMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.toObject = function(includeInstance, msg) { + var f, obj = { + clientMessage: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.example_package.ClientMessage; + return proto.example_package.ClientMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.example_package.ClientMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.example_package.ClientMessage} + */ +proto.example_package.ClientMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setClientMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.example_package.ClientMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.example_package.ClientMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.example_package.ClientMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.example_package.ClientMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getClientMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string client_message = 1; + * @return {string} + */ +proto.example_package.ClientMessage.prototype.getClientMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.example_package.ClientMessage} returns this + */ +proto.example_package.ClientMessage.prototype.setClientMessage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +goog.object.extend(exports, proto.example_package); diff --git a/examples/ts-protoc-gen/server.ts b/examples/ts-protoc-gen/server.ts index 2dcd91e..5c6a251 100644 --- a/examples/ts-protoc-gen/server.ts +++ b/examples/ts-protoc-gen/server.ts @@ -1,50 +1,72 @@ import * as grpc from '@grpc/grpc-js'; -import { ChatService } from './proto/chat_grpc_pb'; -import { ClientMessage, ServerMessage } from './proto/chat_pb'; +import { ExampleService } from './proto/example_grpc_pb'; +import { ClientMessage, ServerMessage } from './proto/example_pb'; -const users: grpc.ServerWritableStream[] = []; -const messages: ClientMessage[] = []; +const host = '0.0.0.0:9090'; -function notifyChat(message: ServerMessage) { - messages.push(message); - users.forEach((user) => { - user.write(message); - }); -} - -// const chatService: IChatService = { -const chatService = { - join(call: grpc.ServerWritableStream): void { - users.push(call); - const serverMessage = new ServerMessage(); - serverMessage.setUser('Server'); - serverMessage.setText(`${call.request?.getUser()} joined`); - notifyChat(serverMessage); - }, - send( +const exampleServer = { + unaryCall( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData - ): void { + ) { if (call.request) { - const serverMessage = new ServerMessage(); - serverMessage.setUser(call.request.getUser()); - serverMessage.setText(call.request.getText()); - notifyChat(serverMessage); - callback(null, serverMessage); + console.log( + `(server) Got client message: ${call.request.getClientMessage()}` + ); } + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); + }, + + serverStreamingCall( + call: grpc.ServerWritableStream + ) { + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); + }, + + clientStreamingCall( + call: grpc.ServerReadableStream, + callback: grpc.sendUnaryData + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); + + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + callback(null, serverMessage); + }, + + bidirectionalStreamingCall( + call: grpc.ServerDuplexStream + ) { + call.on('data', (clientMessage: ClientMessage) => { + console.log( + `(server) Got client message: ${clientMessage.getClientMessage()}` + ); + }); + + const serverMessage = new ServerMessage(); + serverMessage.setServerMessage('Message from server'); + call.write(serverMessage); }, }; -export function getServer(): grpc.Server { +function getServer(): grpc.Server { const server = new grpc.Server(); - server.addService(ChatService, chatService); + server.addService(ExampleService, exampleServer); return server; } if (require.main === module) { const server = getServer(); server.bindAsync( - '0.0.0.0:9090', + host, grpc.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) {