fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
48 lines (42 loc) • 4.66 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2NrLmpzIl0sIm5hbWVzIjpbImNyZWF0ZVBsdWdpbiIsIlJvdXRlVGFnc1Rva2VuIiwiVW5pdmVyc2FsRXZlbnRzVG9rZW4iLCJNaXNzaW5nSGFuZGxlckVycm9yIiwiUlBDSGFuZGxlcnNUb2tlbiIsIlJQQyIsImNvbnN0cnVjdG9yIiwiaGFuZGxlcnMiLCJyZXF1ZXN0IiwibWV0aG9kIiwiYXJncyIsIkVycm9yIiwicGx1Z2luIiwiZGVwcyIsIlJvdXRlVGFncyIsIm9wdGlvbmFsIiwiZW1pdHRlciIsInByb3ZpZGVzIiwiZnJvbSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxTQUFRQSxZQUFSLEVBQXNCQyxjQUF0QixRQUEyQyxhQUEzQztBQUdBLFNBQVFDLG9CQUFSLFFBQW1DLGdDQUFuQztBQUVBLE9BQU9DLG1CQUFQLE1BQWdDLHlCQUFoQztBQUNBLFNBQVFDLGdCQUFSLFFBQStCLFVBQS9COztBQUlBLE1BQU1DLEdBQU4sQ0FBVTtBQU1SQyxFQUFBQSxXQUFXLENBQUNDLFFBQUQsRUFBZ0I7QUFDekIsU0FBS0EsUUFBTCxHQUFnQkEsUUFBaEI7QUFDRDs7QUFFWSxRQUFQQyxPQUFPLENBQWlCQyxNQUFqQixFQUFpQ0MsSUFBakMsRUFBZ0U7QUFDM0UsUUFBSSxDQUFDLEtBQUtILFFBQVYsRUFBb0I7QUFDbEIsWUFBTSxJQUFJSSxLQUFKLENBQVUsdUNBQVYsQ0FBTjtBQUNEOztBQUVELFFBQUksQ0FBQyxLQUFLSixRQUFMLENBQWNFLE1BQWQsQ0FBTCxFQUE0QjtBQUMxQixZQUFNLElBQUlOLG1CQUFKLENBQXdCTSxNQUF4QixDQUFOO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLRixRQUFMLENBQWNFLE1BQWQsRUFBc0JDLElBQXRCLENBQVA7QUFDRDs7QUFuQk87O0FBc0JWLE1BQU1FLE1BQXFCLEdBQUdaLFlBQVksQ0FBQztBQUN6Q2EsRUFBQUEsSUFBSSxFQUFFO0FBQ0pDLElBQUFBLFNBQVMsRUFBRWIsY0FBYyxDQUFDYyxRQUR0QjtBQUVKUixJQUFBQSxRQUFRLEVBQUVILGdCQUZOO0FBR0o7QUFDQVksSUFBQUEsT0FBTyxFQUFFZCxvQkFBb0IsQ0FBQ2E7QUFKMUIsR0FEbUM7QUFPekNFLEVBQUFBLFFBQVEsRUFBRSxDQUFDO0FBQUNWLElBQUFBO0FBQUQsTUFBYSxFQUFkLEtBQXFCO0FBQzdCLFdBQU87QUFBQ1csTUFBQUEsSUFBSSxFQUFFLE1BQU0sSUFBSWIsR0FBSixDQUFRRSxRQUFSO0FBQWIsS0FBUDtBQUNEO0FBVHdDLENBQUQsQ0FBMUM7QUFZQSxlQUFlSyxNQUFmIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKi9cblxuaW1wb3J0IHtjcmVhdGVQbHVnaW4sIFJvdXRlVGFnc1Rva2VufSBmcm9tICdmdXNpb24tY29yZSc7XG5pbXBvcnQgdHlwZSB7Q29udGV4dH0gZnJvbSAnZnVzaW9uLWNvcmUnO1xuaW1wb3J0IHR5cGUge0ZldGNofSBmcm9tICdmdXNpb24tdG9rZW5zJztcbmltcG9ydCB7VW5pdmVyc2FsRXZlbnRzVG9rZW59IGZyb20gJ2Z1c2lvbi1wbHVnaW4tdW5pdmVyc2FsLWV2ZW50cyc7XG5cbmltcG9ydCBNaXNzaW5nSGFuZGxlckVycm9yIGZyb20gJy4vbWlzc2luZy1oYW5kbGVyLWVycm9yJztcbmltcG9ydCB7UlBDSGFuZGxlcnNUb2tlbn0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHR5cGUge0hhbmRsZXJUeXBlfSBmcm9tICcuL3Rva2Vucy5qcyc7XG5pbXBvcnQgdHlwZSB7UlBDUGx1Z2luVHlwZSwgSUVtaXR0ZXJ9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jbGFzcyBSUEMge1xuICBjdHg6ID9Db250ZXh0O1xuICBlbWl0dGVyOiA/SUVtaXR0ZXI7XG4gIGhhbmRsZXJzOiA/SGFuZGxlclR5cGU7XG4gIGZldGNoOiA/RmV0Y2g7XG5cbiAgY29uc3RydWN0b3IoaGFuZGxlcnM6IGFueSkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3Q8VEFyZ3MsIFRSZXN1bHQ+KG1ldGhvZDogc3RyaW5nLCBhcmdzOiBUQXJncyk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5oYW5kbGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmdXNpb24tcGx1Z2luLXJwYyByZXF1aXJlcyBgaGFuZGxlcnNgJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhhbmRsZXJzW21ldGhvZF0pIHtcbiAgICAgIHRocm93IG5ldyBNaXNzaW5nSGFuZGxlckVycm9yKG1ldGhvZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzW21ldGhvZF0oYXJncyk7XG4gIH1cbn1cblxuY29uc3QgcGx1Z2luOiBSUENQbHVnaW5UeXBlID0gY3JlYXRlUGx1Z2luKHtcbiAgZGVwczoge1xuICAgIFJvdXRlVGFnczogUm91dGVUYWdzVG9rZW4ub3B0aW9uYWwsXG4gICAgaGFuZGxlcnM6IFJQQ0hhbmRsZXJzVG9rZW4sXG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGVtaXR0ZXI6IFVuaXZlcnNhbEV2ZW50c1Rva2VuLm9wdGlvbmFsLFxuICB9LFxuICBwcm92aWRlczogKHtoYW5kbGVyc30gPSB7fSkgPT4ge1xuICAgIHJldHVybiB7ZnJvbTogKCkgPT4gbmV3IFJQQyhoYW5kbGVycyl9O1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpbjtcbiJdfQ==