fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
42 lines (41 loc) • 4.68 kB
JavaScript
/** 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