UNPKG

fusion-plugin-rpc

Version:

Fetch data on the server and client with an RPC style interface.

46 lines (39 loc) 1.15 kB
import mapObject from 'just-map-object'; import isEqual from 'just-compare'; import ResponseError from './response-error'; import {type HandlerType} from './tokens'; export type RpcResponse = any | ResponseError; export type RpcResponseMap = Array<{ args: Array<any>; response: RpcResponse; }>; export type RpcFixtureT = { [x: string]: RpcResponseMap | RpcResponse; }; type OnMockRpcCallbackT = ( handler: string, args: Array<any>, response: RpcResponse ) => void; const getMockRpcHandlers = ( fixtures: Array<RpcFixtureT>, onMockRpc?: OnMockRpcCallbackT ): HandlerType => fixtures.reduce( (rpcHandlers, fixture) => ({ ...rpcHandlers, ...mapObject(fixture, (rpcId, responseDetails) => async (...args) => { const response = Array.isArray(responseDetails) ? responseDetails.filter((item) => isEqual(item.args, args))[0] .response : responseDetails; onMockRpc && onMockRpc(rpcId, args, response); if (response instanceof Error) { throw response; } return response; }), }), {} ); export default getMockRpcHandlers;