UNPKG

fusion-plugin-rpc

Version:

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

42 lines (41 loc) 4.68 kB
/** Copyright (c) 2018 Uber Technologies, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ import { createPlugin, RouteTagsToken } from 'fusion-core'; import { UniversalEventsToken } from 'fusion-plugin-universal-events'; import MissingHandlerError from './missing-handler-error'; import { RPCHandlersToken } from './tokens'; class RPC { constructor(handlers) { this.handlers = handlers; } async request(method, args) { if (!this.handlers) { throw new Error('fusion-plugin-rpc requires `handlers`'); } if (!this.handlers[method]) { throw new MissingHandlerError(method); } return this.handlers[method](args); } } const plugin = createPlugin({ deps: { RouteTags: RouteTagsToken.optional, handlers: RPCHandlersToken, // $FlowFixMe emitter: UniversalEventsToken.optional }, provides: ({ handlers } = {}) => { return { from: () => new RPC(handlers) }; } }); export default plugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVQbHVnaW4iLCJSb3V0ZVRhZ3NUb2tlbiIsIlVuaXZlcnNhbEV2ZW50c1Rva2VuIiwiTWlzc2luZ0hhbmRsZXJFcnJvciIsIlJQQ0hhbmRsZXJzVG9rZW4iLCJSUEMiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXJzIiwicmVxdWVzdCIsIm1ldGhvZCIsImFyZ3MiLCJFcnJvciIsInBsdWdpbiIsImRlcHMiLCJSb3V0ZVRhZ3MiLCJvcHRpb25hbCIsImVtaXR0ZXIiLCJwcm92aWRlcyIsImZyb20iXSwic291cmNlcyI6WyJzcmMvbW9jay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29weXJpZ2h0IChjKSAyMDE4IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCB7Y3JlYXRlUGx1Z2luLCBSb3V0ZVRhZ3NUb2tlbn0gZnJvbSAnZnVzaW9uLWNvcmUnO1xuaW1wb3J0IHR5cGUge0NvbnRleHR9IGZyb20gJ2Z1c2lvbi1jb3JlJztcbmltcG9ydCB0eXBlIHtGZXRjaH0gZnJvbSAnZnVzaW9uLXRva2Vucyc7XG5pbXBvcnQge1VuaXZlcnNhbEV2ZW50c1Rva2VufSBmcm9tICdmdXNpb24tcGx1Z2luLXVuaXZlcnNhbC1ldmVudHMnO1xuXG5pbXBvcnQgTWlzc2luZ0hhbmRsZXJFcnJvciBmcm9tICcuL21pc3NpbmctaGFuZGxlci1lcnJvcic7XG5pbXBvcnQge1JQQ0hhbmRsZXJzVG9rZW59IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB0eXBlIHtIYW5kbGVyVHlwZX0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHR5cGUge1JQQ1BsdWdpblR5cGUsIElFbWl0dGVyfSBmcm9tICcuL3R5cGVzJztcblxuY2xhc3MgUlBDIHtcbiAgY3R4OiBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgZW1pdHRlcjogSUVtaXR0ZXIgfCB1bmRlZmluZWQgfCBudWxsO1xuICBoYW5kbGVyczogSGFuZGxlclR5cGUgfCB1bmRlZmluZWQgfCBudWxsO1xuICBmZXRjaDogRmV0Y2ggfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGhhbmRsZXJzOiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0PFRBcmdzLCBUUmVzdWx0PihtZXRob2Q6IHN0cmluZywgYXJnczogVEFyZ3MpOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZnVzaW9uLXBsdWdpbi1ycGMgcmVxdWlyZXMgYGhhbmRsZXJzYCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYW5kbGVyc1ttZXRob2RdKSB7XG4gICAgICB0aHJvdyBuZXcgTWlzc2luZ0hhbmRsZXJFcnJvcihtZXRob2QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyc1ttZXRob2RdKGFyZ3MpO1xuICB9XG59XG5cbmNvbnN0IHBsdWdpbjogUlBDUGx1Z2luVHlwZSA9IGNyZWF0ZVBsdWdpbih7XG4gIGRlcHM6IHtcbiAgICBSb3V0ZVRhZ3M6IFJvdXRlVGFnc1Rva2VuLm9wdGlvbmFsLFxuICAgIGhhbmRsZXJzOiBSUENIYW5kbGVyc1Rva2VuLFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBlbWl0dGVyOiBVbml2ZXJzYWxFdmVudHNUb2tlbi5vcHRpb25hbCxcbiAgfSxcbiAgcHJvdmlkZXM6ICh7aGFuZGxlcnN9ID0ge30gYXMgYW55KSA9PiB7XG4gICAgcmV0dXJuIHtmcm9tOiAoKSA9PiBuZXcgUlBDKGhhbmRsZXJzKX07XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUUEsWUFBWSxFQUFFQyxjQUFjLFFBQU8sYUFBYTtBQUd4RCxTQUFRQyxvQkFBb0IsUUFBTyxnQ0FBZ0M7QUFFbkUsT0FBT0MsbUJBQW1CLE1BQU0seUJBQXlCO0FBQ3pELFNBQVFDLGdCQUFnQixRQUFPLFVBQVU7QUFJekMsTUFBTUMsR0FBRyxDQUFDO0VBTVJDLFdBQVcsQ0FBQ0MsUUFBYSxFQUFFO0lBQ3pCLElBQUksQ0FBQ0EsUUFBUSxHQUFHQSxRQUFRO0VBQzFCO0VBRUEsTUFBTUMsT0FBTyxDQUFpQkMsTUFBYyxFQUFFQyxJQUFXLEVBQW9CO0lBQzNFLElBQUksQ0FBQyxJQUFJLENBQUNILFFBQVEsRUFBRTtNQUNsQixNQUFNLElBQUlJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztJQUMxRDtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNKLFFBQVEsQ0FBQ0UsTUFBTSxDQUFDLEVBQUU7TUFDMUIsTUFBTSxJQUFJTixtQkFBbUIsQ0FBQ00sTUFBTSxDQUFDO0lBQ3ZDO0lBQ0EsT0FBTyxJQUFJLENBQUNGLFFBQVEsQ0FBQ0UsTUFBTSxDQUFDLENBQUNDLElBQUksQ0FBQztFQUNwQztBQUNGO0FBRUEsTUFBTUUsTUFBcUIsR0FBR1osWUFBWSxDQUFDO0VBQ3pDYSxJQUFJLEVBQUU7SUFDSkMsU0FBUyxFQUFFYixjQUFjLENBQUNjLFFBQVE7SUFDbENSLFFBQVEsRUFBRUgsZ0JBQWdCO0lBQzFCO0lBQ0FZLE9BQU8sRUFBRWQsb0JBQW9CLENBQUNhO0VBQ2hDLENBQUM7RUFDREUsUUFBUSxFQUFFLENBQUM7SUFBQ1Y7RUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFRLEtBQUs7SUFDcEMsT0FBTztNQUFDVyxJQUFJLEVBQUUsTUFBTSxJQUFJYixHQUFHLENBQUNFLFFBQVE7SUFBQyxDQUFDO0VBQ3hDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsZUFBZUssTUFBTSJ9