@gastonyte/cycle-fetch-driver
Advanced tools
Comparing version 5.0.3 to 5.1.0
@@ -13,2 +13,8 @@ 'use strict'; | ||
var _assert = require('assert'); | ||
var _isFunction = require('lodash/isFunction'); | ||
var _isFunction2 = _interopRequireDefault(_isFunction); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -25,2 +31,3 @@ | ||
var coerceRequest = function coerceRequest(input) { | ||
console.log('coerceRequest', input); | ||
@@ -34,11 +41,12 @@ var request = typeof input === 'string' ? { url: input } : _extends({}, input); | ||
var filterByKey = function filterByKey(response$$, key) { | ||
return response$$.filter(function (response$) { | ||
return response$.request.key === key; | ||
var filterByKey = function filterByKey(response$, key) { | ||
return response$.filter(function (response) { | ||
return response.request.key === key; | ||
}); | ||
}; | ||
// .remember(); | ||
var filterByUrl = function filterByUrl(response$$, url) { | ||
return response$$.filter(function (response$) { | ||
return getUrl(response$.request) === url; | ||
var filterByUrl = function filterByUrl(response$, url) { | ||
return response$.filter(function (response) { | ||
return getUrl(response.request) === url; | ||
}); | ||
@@ -52,7 +60,8 @@ }; | ||
fetch = _ref2$fetch === undefined ? global.fetch : _ref2$fetch, | ||
defaultOptions = _objectWithoutProperties(_ref2, ['fetch']); | ||
defaultHeaders = _ref2.headers, | ||
defaultOptions = _objectWithoutProperties(_ref2, ['fetch', 'headers']); | ||
return function (request$) { | ||
var response$$ = _xstream2.default.create({ | ||
var response$ = _xstream2.default.createWithMemory({ | ||
start: function start(listener) { | ||
@@ -63,15 +72,18 @@ | ||
var input = request.input, | ||
url = request.url, | ||
options = request.options; | ||
url = request.url; | ||
var _request$options = request.options, | ||
options = _request$options === undefined ? {} : _request$options; | ||
var response$ = _xstream2.default.fromPromise(fetch(input || url, _extends({}, defaultOptions, options))); | ||
response$.request = request; | ||
listener.next(response$); | ||
}, | ||
error: function error(_error) { | ||
return listener.error(response$$, _error); | ||
}, | ||
complete: function complete(out) { | ||
return listener.complete(response$$, out); | ||
options = _extends({}, defaultOptions, options, { | ||
headers: _extends({}, defaultHeaders, options.headers || {}) | ||
}); | ||
console.log('FETCH', options); | ||
fetch(input || url, options).then(function (response) { | ||
response.request = request; | ||
listener.next(response); | ||
}).catch(function (err) { | ||
listener.error(err); | ||
}); | ||
} | ||
@@ -83,5 +95,65 @@ }); | ||
response$$.filterByKey = filterByKey.bind(null, response$$); | ||
response$$.filterByUrl = filterByUrl.bind(null, response$$); | ||
response$.filterByKey = filterByKey.bind(null, response$); | ||
response$.filterByUrl = filterByUrl.bind(null, response$); | ||
return response$; | ||
}; | ||
}; | ||
function normalizeRequest(input) { | ||
var request = typeof input === 'string' ? { url: input } : _extends({}, input); | ||
if (!request.key) { | ||
request.key = getUrl(request); | ||
} | ||
return request; | ||
} | ||
function byKey(response$$, key) { | ||
return response$$.filter(function (response$) { | ||
return response$.request.key === key; | ||
}); | ||
} | ||
function byUrl(response$$, url) { | ||
return response$$.filter(function (response$) { | ||
return getUrl(response$.request) === url; | ||
}); | ||
} | ||
// scheduler option is for testing because Reactive-Extensions/RxJS#976 | ||
var FetchDriver2 = function FetchDriver2() { | ||
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
var _ref3$fetch = _ref3.fetch, | ||
fetch = _ref3$fetch === undefined ? global.fetch : _ref3$fetch, | ||
headers = _ref3.headers, | ||
defaultOptions = _objectWithoutProperties(_ref3, ['fetch', 'headers']); | ||
return function fetchDriver(request$) { | ||
var response$$ = _xstream2.default.createWithMemory(); | ||
console.log('FetchDriver2()'); | ||
request$.map(normalizeRequest).addListener({ | ||
next: function next(request) { | ||
// const {input, url, init} = request | ||
var input = request.input, | ||
url = request.url; | ||
var _request$options2 = request.options, | ||
options = _request$options2 === undefined ? {} : _request$options2; | ||
var response$ = _xstream2.default.fromPromise(fetch(input || url, _extends({}, defaultOptions, options, { | ||
headers: _extends({}, headers, options.headers || {}) | ||
}))); | ||
response$.request = request; | ||
response$$.shamefullySendNext(response$); | ||
}, | ||
error: response$$.shamefullySendError.bind(response$$), | ||
complete: response$$.shamefullySendComplete.bind(response$$) | ||
}); | ||
response$$.byKey = byKey.bind(null, response$$); | ||
response$$.byUrl = byUrl.bind(null, response$$); | ||
return response$$; | ||
@@ -91,2 +163,3 @@ }; | ||
exports.default = FetchDriver; | ||
// export default FetchDriver; | ||
exports.default = FetchDriver2; |
{ | ||
"name": "@gastonyte/cycle-fetch-driver", | ||
"version": "5.0.3", | ||
"version": "5.1.0", | ||
"description": "A Cycle.js Driver for making HTTP requests through fetch", | ||
@@ -5,0 +5,0 @@ "main": "lib/driver.js", |
import Stream from 'xstream'; | ||
import { assert } from 'assert'; | ||
const getUrl = ({ input, url }) => (input && input.url) || url; | ||
const coerceRequest = input => { | ||
const normalizeRequest = input => { | ||
const request = typeof input === 'string' | ||
? { url: input } | ||
: { ...input }; | ||
: { ...input } | ||
if (!request.key) { | ||
request.key = getUrl(request) | ||
} | ||
return request | ||
}; | ||
if (!request.key) | ||
request.key = getUrl(request); | ||
const byKey = (response$$, key) => { | ||
return response$$ | ||
.filter(response$ => response$.request.key === key) | ||
}; | ||
return request; | ||
const byUrl = (response$$, url) => { | ||
return response$$ | ||
.filter(response$ => getUrl(response$.request) === url) | ||
}; | ||
const filterByKey = (response$$, key) => response$$.filter(response$ => response$.request.key === key); | ||
const FetchDriver = ({ fetch = global.fetch, headers, ...defaultOptions } = {}) => { | ||
const filterByUrl = (response$$, url) => response$$.filter(response$ => getUrl(response$.request) === url); | ||
return request$ => { | ||
const FetchDriver = ({ fetch = global.fetch, ...defaultOptions } = {}) => { | ||
const response$$ = Stream.createWithMemory(); | ||
return request$ => { | ||
request$ | ||
.map(normalizeRequest) | ||
.addListener({ | ||
next: request => { | ||
const response$$ = Stream.create({ | ||
start: listener => { | ||
const { input, url } = request; | ||
let { options = {} } = request; | ||
request$ | ||
.map(coerceRequest) | ||
.addListener({ | ||
next: request => { | ||
const response$ = Stream.fromPromise( | ||
fetch(input || url, { | ||
...defaultOptions, | ||
...options, | ||
headers: { | ||
...headers, | ||
...(options.headers || {}) | ||
} | ||
}) | ||
); | ||
const { input, url, options } = request; | ||
const response$ = Stream.fromPromise(fetch(input || url, { ...defaultOptions, ...options })); | ||
response$.request = request; | ||
response$$.shamefullySendNext(response$); | ||
}, | ||
error: response$$.shamefullySendError.bind(response$$), | ||
complete: response$$.shamefullySendComplete.bind(response$$) | ||
}); | ||
response$.request = request; | ||
listener.next(response$); | ||
}, | ||
error: error => listener.error(response$$, error), | ||
complete: out => listener.complete(response$$, out) | ||
}); | ||
}, | ||
stop: () => {} | ||
}); | ||
response$$.byKey = byKey.bind(null, response$$); | ||
response$$.byUrl = byUrl.bind(null, response$$); | ||
response$$.filterByKey = filterByKey.bind(null, response$$); | ||
response$$.filterByUrl = filterByUrl.bind(null, response$$); | ||
return response$$ | ||
} | ||
}; | ||
} | ||
export default FetchDriver; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
176924
169
3