better-grpc 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +156 -2
- package/dist/index.cjs +24460 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +57 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.js +24454 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -8
- package/index.js +0 -4
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
declare const ScopeTag: unique symbol;
|
|
2
|
+
type AnyFn<R> = (...args: any[]) => R;
|
|
3
|
+
type serverSignature<fn extends AnyFn<any>> = fn & {
|
|
4
|
+
[ScopeTag]: "server";
|
|
5
|
+
};
|
|
6
|
+
type clientSignature<fn extends AnyFn<any>> = fn & {
|
|
7
|
+
[ScopeTag]: "client";
|
|
8
|
+
};
|
|
9
|
+
type bidiSignature<fn extends AnyFn<void>> = fn & {
|
|
10
|
+
[ScopeTag]: "bidi";
|
|
11
|
+
};
|
|
12
|
+
type RpcMethodDescriptor = {
|
|
13
|
+
serviceType: "server" | "client" | "bidi";
|
|
14
|
+
methodType: "unary" | "bidi";
|
|
15
|
+
};
|
|
16
|
+
declare function server<fn extends AnyFn<any>>(): serverSignature<(...args: Parameters<fn>) => Promise<ReturnType<fn>>>;
|
|
17
|
+
declare function client<fn extends AnyFn<any>>(): clientSignature<(...args: Parameters<fn>) => Promise<ReturnType<fn>>>;
|
|
18
|
+
type Unwrap<T> = T extends serverSignature<infer F> ? F : T extends clientSignature<infer F> ? F : T extends bidiSignature<infer F> ? F : never;
|
|
19
|
+
type ServerFn<T> = {
|
|
20
|
+
[K in keyof T as T[K] extends serverSignature<AnyFn<any>> | bidiSignature<AnyFn<void>> ? K : never]: Unwrap<T[K]>;
|
|
21
|
+
};
|
|
22
|
+
type ClientFn<T> = {
|
|
23
|
+
[K in keyof T as T[K] extends clientSignature<AnyFn<any>> | bidiSignature<AnyFn<void>> ? K : never]: Unwrap<T[K]>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
declare const ServiceNameTag: unique symbol;
|
|
27
|
+
interface ServiceInstance<N extends string = string> {
|
|
28
|
+
readonly [ServiceNameTag]: N;
|
|
29
|
+
}
|
|
30
|
+
type AbstractServiceClass<N extends string = string> = abstract new (...args: never) => ServiceInstance<N>;
|
|
31
|
+
declare class ServiceImpl<T extends AbstractServiceClass, Type extends "server" | "client"> {
|
|
32
|
+
readonly implementation: any;
|
|
33
|
+
readonly type: Type;
|
|
34
|
+
readonly serviceClass: T;
|
|
35
|
+
readonly serviceClassInstance: InstanceType<T>;
|
|
36
|
+
constructor(implementation: any, type: Type, serviceClass: T);
|
|
37
|
+
methods(): Record<string, RpcMethodDescriptor>;
|
|
38
|
+
}
|
|
39
|
+
declare function Service<N extends string>(name: N): (abstract new () => {
|
|
40
|
+
readonly [ServiceNameTag]: N;
|
|
41
|
+
}) & {
|
|
42
|
+
serviceName: N;
|
|
43
|
+
Server<T extends AbstractServiceClass, Impl extends ServerFn<InstanceType<T>>>(this: T, implementation: Impl): ServiceImpl<T, "server">;
|
|
44
|
+
Client<T extends AbstractServiceClass, Impl extends ClientFn<InstanceType<T>>>(this: T, implementation: Impl): ServiceImpl<T, "client">;
|
|
45
|
+
};
|
|
46
|
+
type ServiceNameOf<T extends ServiceImpl<any, any>> = T extends ServiceImpl<infer ServiceClass, any> ? InstanceType<ServiceClass>[typeof ServiceNameTag] : never;
|
|
47
|
+
type ServiceCallable<T> = T extends ServiceImpl<infer S, infer Mode> ? Mode extends "server" ? ClientFn<InstanceType<S>> : ServerFn<InstanceType<S>> : never;
|
|
48
|
+
|
|
49
|
+
declare function createGrpcClient<T extends ServiceImpl<any, "client">[]>(address: string, ...serviceImpls: T): Promise<{
|
|
50
|
+
[I in T[number] as ServiceNameOf<I>]: ServiceCallable<I>;
|
|
51
|
+
}>;
|
|
52
|
+
|
|
53
|
+
declare function createGrpcServer<T extends ServiceImpl<any, "server">[]>(port: number, ...serviceImpls: T): Promise<{
|
|
54
|
+
[I in T[number] as ServiceNameOf<I>]: ServiceCallable<I>;
|
|
55
|
+
}>;
|
|
56
|
+
|
|
57
|
+
export { Service, client, createGrpcClient, createGrpcServer, server };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
declare const ScopeTag: unique symbol;
|
|
2
|
+
type AnyFn<R> = (...args: any[]) => R;
|
|
3
|
+
type serverSignature<fn extends AnyFn<any>> = fn & {
|
|
4
|
+
[ScopeTag]: "server";
|
|
5
|
+
};
|
|
6
|
+
type clientSignature<fn extends AnyFn<any>> = fn & {
|
|
7
|
+
[ScopeTag]: "client";
|
|
8
|
+
};
|
|
9
|
+
type bidiSignature<fn extends AnyFn<void>> = fn & {
|
|
10
|
+
[ScopeTag]: "bidi";
|
|
11
|
+
};
|
|
12
|
+
type RpcMethodDescriptor = {
|
|
13
|
+
serviceType: "server" | "client" | "bidi";
|
|
14
|
+
methodType: "unary" | "bidi";
|
|
15
|
+
};
|
|
16
|
+
declare function server<fn extends AnyFn<any>>(): serverSignature<(...args: Parameters<fn>) => Promise<ReturnType<fn>>>;
|
|
17
|
+
declare function client<fn extends AnyFn<any>>(): clientSignature<(...args: Parameters<fn>) => Promise<ReturnType<fn>>>;
|
|
18
|
+
type Unwrap<T> = T extends serverSignature<infer F> ? F : T extends clientSignature<infer F> ? F : T extends bidiSignature<infer F> ? F : never;
|
|
19
|
+
type ServerFn<T> = {
|
|
20
|
+
[K in keyof T as T[K] extends serverSignature<AnyFn<any>> | bidiSignature<AnyFn<void>> ? K : never]: Unwrap<T[K]>;
|
|
21
|
+
};
|
|
22
|
+
type ClientFn<T> = {
|
|
23
|
+
[K in keyof T as T[K] extends clientSignature<AnyFn<any>> | bidiSignature<AnyFn<void>> ? K : never]: Unwrap<T[K]>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
declare const ServiceNameTag: unique symbol;
|
|
27
|
+
interface ServiceInstance<N extends string = string> {
|
|
28
|
+
readonly [ServiceNameTag]: N;
|
|
29
|
+
}
|
|
30
|
+
type AbstractServiceClass<N extends string = string> = abstract new (...args: never) => ServiceInstance<N>;
|
|
31
|
+
declare class ServiceImpl<T extends AbstractServiceClass, Type extends "server" | "client"> {
|
|
32
|
+
readonly implementation: any;
|
|
33
|
+
readonly type: Type;
|
|
34
|
+
readonly serviceClass: T;
|
|
35
|
+
readonly serviceClassInstance: InstanceType<T>;
|
|
36
|
+
constructor(implementation: any, type: Type, serviceClass: T);
|
|
37
|
+
methods(): Record<string, RpcMethodDescriptor>;
|
|
38
|
+
}
|
|
39
|
+
declare function Service<N extends string>(name: N): (abstract new () => {
|
|
40
|
+
readonly [ServiceNameTag]: N;
|
|
41
|
+
}) & {
|
|
42
|
+
serviceName: N;
|
|
43
|
+
Server<T extends AbstractServiceClass, Impl extends ServerFn<InstanceType<T>>>(this: T, implementation: Impl): ServiceImpl<T, "server">;
|
|
44
|
+
Client<T extends AbstractServiceClass, Impl extends ClientFn<InstanceType<T>>>(this: T, implementation: Impl): ServiceImpl<T, "client">;
|
|
45
|
+
};
|
|
46
|
+
type ServiceNameOf<T extends ServiceImpl<any, any>> = T extends ServiceImpl<infer ServiceClass, any> ? InstanceType<ServiceClass>[typeof ServiceNameTag] : never;
|
|
47
|
+
type ServiceCallable<T> = T extends ServiceImpl<infer S, infer Mode> ? Mode extends "server" ? ClientFn<InstanceType<S>> : ServerFn<InstanceType<S>> : never;
|
|
48
|
+
|
|
49
|
+
declare function createGrpcClient<T extends ServiceImpl<any, "client">[]>(address: string, ...serviceImpls: T): Promise<{
|
|
50
|
+
[I in T[number] as ServiceNameOf<I>]: ServiceCallable<I>;
|
|
51
|
+
}>;
|
|
52
|
+
|
|
53
|
+
declare function createGrpcServer<T extends ServiceImpl<any, "server">[]>(port: number, ...serviceImpls: T): Promise<{
|
|
54
|
+
[I in T[number] as ServiceNameOf<I>]: ServiceCallable<I>;
|
|
55
|
+
}>;
|
|
56
|
+
|
|
57
|
+
export { Service, client, createGrpcClient, createGrpcServer, server };
|