fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
61 lines (49 loc) • 4.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fusionCore = require("fusion-core");
var _fusionPluginUniversalEvents = require("fusion-plugin-universal-events");
var _missingHandlerError = _interopRequireDefault(require("./missing-handler-error"));
var _tokens = require("./tokens");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** 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.
*
*
*/
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.default(method);
}
return this.handlers[method](args);
}
}
const plugin = (0, _fusionCore.createPlugin)({
deps: {
RouteTags: _fusionCore.RouteTagsToken.optional,
handlers: _tokens.RPCHandlersToken,
// $FlowFixMe
emitter: _fusionPluginUniversalEvents.UniversalEventsToken.optional
},
provides: ({
handlers
} = {}) => {
return {
from: () => new RPC(handlers)
};
}
});
var _default = plugin;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2NrLmpzIl0sIm5hbWVzIjpbIlJQQyIsImNvbnN0cnVjdG9yIiwiaGFuZGxlcnMiLCJyZXF1ZXN0IiwibWV0aG9kIiwiYXJncyIsIkVycm9yIiwiTWlzc2luZ0hhbmRsZXJFcnJvciIsInBsdWdpbiIsImRlcHMiLCJSb3V0ZVRhZ3MiLCJSb3V0ZVRhZ3NUb2tlbiIsIm9wdGlvbmFsIiwiUlBDSGFuZGxlcnNUb2tlbiIsImVtaXR0ZXIiLCJVbml2ZXJzYWxFdmVudHNUb2tlbiIsInByb3ZpZGVzIiwiZnJvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBOztBQUdBOztBQUVBOztBQUNBOzs7O0FBZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQSxNQUFNQSxHQUFOLENBQVU7QUFNUkMsRUFBQUEsV0FBVyxDQUFDQyxRQUFELEVBQWdCO0FBQ3pCLFNBQUtBLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0Q7O0FBRVksUUFBUEMsT0FBTyxDQUFpQkMsTUFBakIsRUFBaUNDLElBQWpDLEVBQWdFO0FBQzNFLFFBQUksQ0FBQyxLQUFLSCxRQUFWLEVBQW9CO0FBQ2xCLFlBQU0sSUFBSUksS0FBSixDQUFVLHVDQUFWLENBQU47QUFDRDs7QUFFRCxRQUFJLENBQUMsS0FBS0osUUFBTCxDQUFjRSxNQUFkLENBQUwsRUFBNEI7QUFDMUIsWUFBTSxJQUFJRyw0QkFBSixDQUF3QkgsTUFBeEIsQ0FBTjtBQUNEOztBQUNELFdBQU8sS0FBS0YsUUFBTCxDQUFjRSxNQUFkLEVBQXNCQyxJQUF0QixDQUFQO0FBQ0Q7O0FBbkJPOztBQXNCVixNQUFNRyxNQUFxQixHQUFHLDhCQUFhO0FBQ3pDQyxFQUFBQSxJQUFJLEVBQUU7QUFDSkMsSUFBQUEsU0FBUyxFQUFFQywyQkFBZUMsUUFEdEI7QUFFSlYsSUFBQUEsUUFBUSxFQUFFVyx3QkFGTjtBQUdKO0FBQ0FDLElBQUFBLE9BQU8sRUFBRUMsa0RBQXFCSDtBQUoxQixHQURtQztBQU96Q0ksRUFBQUEsUUFBUSxFQUFFLENBQUM7QUFBQ2QsSUFBQUE7QUFBRCxNQUFhLEVBQWQsS0FBcUI7QUFDN0IsV0FBTztBQUFDZSxNQUFBQSxJQUFJLEVBQUUsTUFBTSxJQUFJakIsR0FBSixDQUFRRSxRQUFSO0FBQWIsS0FBUDtBQUNEO0FBVHdDLENBQWIsQ0FBOUI7ZUFZZU0sTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB7Y3JlYXRlUGx1Z2luLCBSb3V0ZVRhZ3NUb2tlbn0gZnJvbSAnZnVzaW9uLWNvcmUnO1xuaW1wb3J0IHR5cGUge0NvbnRleHR9IGZyb20gJ2Z1c2lvbi1jb3JlJztcbmltcG9ydCB0eXBlIHtGZXRjaH0gZnJvbSAnZnVzaW9uLXRva2Vucyc7XG5pbXBvcnQge1VuaXZlcnNhbEV2ZW50c1Rva2VufSBmcm9tICdmdXNpb24tcGx1Z2luLXVuaXZlcnNhbC1ldmVudHMnO1xuXG5pbXBvcnQgTWlzc2luZ0hhbmRsZXJFcnJvciBmcm9tICcuL21pc3NpbmctaGFuZGxlci1lcnJvcic7XG5pbXBvcnQge1JQQ0hhbmRsZXJzVG9rZW59IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB0eXBlIHtIYW5kbGVyVHlwZX0gZnJvbSAnLi90b2tlbnMuanMnO1xuaW1wb3J0IHR5cGUge1JQQ1BsdWdpblR5cGUsIElFbWl0dGVyfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY2xhc3MgUlBDIHtcbiAgY3R4OiA/Q29udGV4dDtcbiAgZW1pdHRlcjogP0lFbWl0dGVyO1xuICBoYW5kbGVyczogP0hhbmRsZXJUeXBlO1xuICBmZXRjaDogP0ZldGNoO1xuXG4gIGNvbnN0cnVjdG9yKGhhbmRsZXJzOiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0PFRBcmdzLCBUUmVzdWx0PihtZXRob2Q6IHN0cmluZywgYXJnczogVEFyZ3MpOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZnVzaW9uLXBsdWdpbi1ycGMgcmVxdWlyZXMgYGhhbmRsZXJzYCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYW5kbGVyc1ttZXRob2RdKSB7XG4gICAgICB0aHJvdyBuZXcgTWlzc2luZ0hhbmRsZXJFcnJvcihtZXRob2QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyc1ttZXRob2RdKGFyZ3MpO1xuICB9XG59XG5cbmNvbnN0IHBsdWdpbjogUlBDUGx1Z2luVHlwZSA9IGNyZWF0ZVBsdWdpbih7XG4gIGRlcHM6IHtcbiAgICBSb3V0ZVRhZ3M6IFJvdXRlVGFnc1Rva2VuLm9wdGlvbmFsLFxuICAgIGhhbmRsZXJzOiBSUENIYW5kbGVyc1Rva2VuLFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBlbWl0dGVyOiBVbml2ZXJzYWxFdmVudHNUb2tlbi5vcHRpb25hbCxcbiAgfSxcbiAgcHJvdmlkZXM6ICh7aGFuZGxlcnN9ID0ge30pID0+IHtcbiAgICByZXR1cm4ge2Zyb206ICgpID0+IG5ldyBSUEMoaGFuZGxlcnMpfTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW47XG4iXX0=