Move types to types.ts, rename some types

This commit is contained in:
Jerko Steiner 2019-08-02 08:27:53 +07:00
parent 9aba9000b7
commit 1cb41e4b4a
5 changed files with 20 additions and 17 deletions

View File

@ -1,3 +1,4 @@
import {FunctionPropertyNames} from './types'
import {NextFunction, Request, Response, Router} from 'express'
export const ERROR_PARSE = {
@ -34,7 +35,7 @@ export interface ISuccessResponse<T> {
error: null
}
export interface IJsonRpcError<T> {
export interface IJSONRPCError<T> {
code: number
message: string
data: T
@ -44,10 +45,10 @@ export interface IErrorResponse<T> {
jsonrpc: '2.0'
id: number | null
result: null
error: IJsonRpcError<T>
error: IJSONRPCError<T>
}
export type IRpcResponse<T> = ISuccessResponse<T> | IErrorResponse<T>
export type IRPCResponse<T> = ISuccessResponse<T> | IErrorResponse<T>
export function createSuccessResponse<T>(id: number, result: T)
: ISuccessResponse<T> {
@ -60,7 +61,7 @@ export function createSuccessResponse<T>(id: number, result: T)
}
export function createErrorResponse<T>(
id: number | null, error: IJsonRpcError<T>)
id: number | null, error: IJSONRPCError<T>)
: IErrorResponse<T> {
return {
jsonrpc: '2.0',
@ -70,11 +71,6 @@ export function createErrorResponse<T>(
}
}
export type FunctionPropertyNames<T> = {
// tslint:disable-next-line
[K in keyof T]: T[K] extends Function ? K : never
}[keyof T]
export function pick<T, K extends FunctionPropertyNames<T>>(t: T, keys: K[])
: Pick<T, K> {
return keys.reduce((obj, key) => {
@ -91,16 +87,18 @@ function isPromise(value: any): value is Promise<unknown> {
typeof value.then === 'function' && typeof value.catch === 'function'
}
export type TGetContext<Context> = (req: Request) => Context
/**
* Adds middleware for handling JSON RPC requests. Expects JSON middleware to
* already be configured.
*/
export function jsonrpc<T, F extends FunctionPropertyNames<T>, Ctx>(
export function jsonrpc<T, F extends FunctionPropertyNames<T>, Context>(
service: T,
functions: F[],
getContext: (req: Request) => Ctx,
methods: F[],
getContext: TGetContext<Context>,
) {
const rpcService = pick(service, functions)
const rpcService = pick(service, methods)
const router = Router()

View File

@ -2,3 +2,4 @@ export * from './express'
export * from './local'
export * from './redux'
export * from './remote'
export * from './types'

View File

@ -7,7 +7,7 @@ import express from 'express'
import {AddressInfo} from 'net'
import {Server} from 'http'
import {createRemoteClient} from './remote'
import {jsonrpc} from './server'
import {jsonrpc} from './express'
import {keys} from 'ts-transformer-keys'
describe('remote', () => {

View File

@ -1,10 +1,10 @@
import Axios from 'axios'
import {TAsyncified} from './types'
import {FunctionPropertyNames, TAsyncified} from './types'
export function createRemoteClient<T>(
baseUrl: string,
url: string,
methods: Array<keyof T>,
methods: Array<FunctionPropertyNames<T>>,
) {
const axios = Axios.create({
baseURL: baseUrl,

View File

@ -1,3 +1,5 @@
import {IPendingAction, IResolvedAction, IRejectedAction} from '@rondo/client'
type ArgumentTypes<T> =
T extends (...args: infer U) => infer R ? U : never
type RetType<T> = T extends (...args: any[]) => infer R ? R : never
@ -7,7 +9,9 @@ type RetProm<T> = T extends Promise<any> ? T : Promise<T>
type PromisifyReturnType<T> = (...a: ArgumentTypes<T>) =>
RetProm<UnwrapHOC<RetType<T>>>
import {IPendingAction, IResolvedAction, IRejectedAction} from '@rondo/client'
export type FunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any ? K : never
}[keyof T]
export type TAsyncified<T> = {
[K in keyof T]: PromisifyReturnType<T[K]>