@kiwa-lab/grpc
v2.1.0
Published
gRPC service mock harness for kiwa — @grpc/grpc-js / nice-grpc / twirp / ConnectRPC を統一 interface で invoke する in-process mock。 unary / server-stream / client-stream / bidi 全 4 RPC pattern + metadata + status code + deadline を real gRPC と同じ signature で叩ける
Maintainers
Readme
@kiwa-lab/grpc
gRPC service mock harness for kiwa — @grpc/grpc-js / nice-grpc / twirp / ConnectRPC を統一 interface で in-process から叩ける test infra。
Installation
pnpm add -D @kiwa-lab/grpc
# or
npm install -D @kiwa-lab/grpc
# or
yarn add -D @kiwa-lab/grpcSupported providers
| Provider | Status | RPC style | |---|---|---| | @grpc/grpc-js | ✅ Ready | HTTP/2 native | | nice-grpc | ✅ Ready | AsyncIterable stream | | twirp | ✅ Ready | HTTP/1.1 + protobuf/JSON | | ConnectRPC | ✅ Ready | HTTP/1.1 or /2 |
Quick start
import { describe, expect, it } from 'vitest';
import {
createGrpcServer,
defineService,
invokeUnary,
invokeServerStream,
} from '@kiwa-lab/grpc';
describe('user service', () => {
it('unary + server stream で response を取得', async () => {
const server = createGrpcServer({ provider: '@grpc/grpc-js' });
defineService(server, {
name: 'UserService',
methods: {
Get: { type: 'unary' },
List: { type: 'server-stream' },
},
});
const unary = await invokeUnary(server, 'UserService/Get', { id: '1' }, async () => ({ id: '1', name: 'a' }));
expect(unary.value.name).toBe('a');
const stream = await invokeServerStream(server, 'UserService/List', {}, async function* () {
yield { id: '1' }; yield { id: '2' };
});
expect(stream.messages).toHaveLength(2);
});
});API reference
createGrpcServer({ provider: GrpcProvider }): GrpcServer— provider 別 mock serverdefineService(server, def: ServiceDefinition): void— service + method 登録invokeUnary(server, path, req, handler: UnaryHandler): Promise<UnaryResult>— unary RPCinvokeServerStream(server, path, req, handler: ServerStreamHandler): Promise<StreamResult>— server streaminvokeClientStream(server, path, iter, handler): Promise<UnaryResult>— client streaminvokeBidi(server, path, iter, handler: BidiHandler): Promise<StreamResult>— bidirectionalencodeStatus(code: GrpcStatusCode, message?: string): GrpcStatus— status trailercreateMetadata(entries: MetadataEntry[]): GrpcMetadata— metadata 生成
Test integration
vitest + /kiwa-grpc skill で real HTTP/2 socket 起動なしで RPC + deadline + status code を verify。
License
UNLICENSED — see github.com/cardene777/kiwa.
