UNPKG

apollo-client

Version:
85 lines 2.86 kB
"use strict"; var isString = require('lodash.isstring'); var assign = require('lodash.assign'); function createNetworkInterface(uri, opts) { if (opts === void 0) { opts = {}; } if (!uri) { throw new Error('A remote enpdoint is required for a network layer'); } if (!isString(uri)) { throw new Error('Remote endpoint must be a string'); } var _uri = uri; var _opts = assign({}, opts); var _middlewares = []; function applyMiddlewares(_a) { var _this = this; var request = _a.request, options = _a.options; return new Promise(function (resolve, reject) { var queue = function (funcs, scope) { var next = function () { if (funcs.length > 0) { var f = funcs.shift(); f.applyMiddleware.apply(scope, [{ request: request, options: options }, next]); } else { resolve({ request: request, options: options, }); } }; next(); }; queue(_middlewares.slice(), _this); }); } function fetchFromRemoteEndpoint(_a) { var request = _a.request, options = _a.options; return fetch(uri, assign({}, _opts, options, { body: JSON.stringify(request), headers: assign({}, options.headers, { Accept: '*/*', 'Content-Type': 'application/json', }), method: 'POST', })); } ; function query(request) { var options = assign({}, _opts); return applyMiddlewares({ request: request, options: options, }).then(fetchFromRemoteEndpoint) .then(function (result) { return result.json(); }) .then(function (payload) { if (!payload.hasOwnProperty('data') && !payload.hasOwnProperty('errors')) { throw new Error("Server response was missing for query '" + request.debugName + "'."); } else { return payload; } }); } ; function use(middlewares) { middlewares.map(function (middleware) { if (typeof middleware.applyMiddleware === 'function') { _middlewares.push(middleware); } else { throw new Error('Middleware must implement the applyMiddleware function'); } }); } return { _uri: _uri, _opts: _opts, _middlewares: _middlewares, query: query, use: use, }; } exports.createNetworkInterface = createNetworkInterface; //# sourceMappingURL=networkInterface.js.map