Comparing version 1.1.1 to 1.1.2
@@ -23,2 +23,5 @@ import _regeneratorRuntime from 'babel-runtime/regenerator'; | ||
var Dequest = function Dequest(requestId, request) { | ||
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, | ||
skipTransform = _ref.skipTransform; | ||
_classCallCheck(this, Dequest); | ||
@@ -28,8 +31,9 @@ | ||
this.request = request; | ||
this.options = { skipTransform: skipTransform }; | ||
}; | ||
export var HandledRequest = function HandledRequest() { | ||
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
type = _ref.type, | ||
args = _ref.args; | ||
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
type = _ref2.type, | ||
args = _ref2.args; | ||
@@ -79,3 +83,7 @@ _classCallCheck(this, HandledRequest); | ||
export var makeRequest = function makeRequest(requestId, request) { | ||
return new Dequest(requestId, request); | ||
var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, | ||
_ref3$skipTransform = _ref3.skipTransform, | ||
skipTransform = _ref3$skipTransform === undefined ? false : _ref3$skipTransform; | ||
return new Dequest(requestId, request, { skipTransform: skipTransform }); | ||
}; | ||
@@ -128,3 +136,3 @@ | ||
var resolveRequest = function () { | ||
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(api, action) { | ||
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(api, action) { | ||
var type, method; | ||
@@ -172,14 +180,16 @@ return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
return function resolveRequest(_x3, _x4) { | ||
return _ref2.apply(this, arguments); | ||
return function resolveRequest(_x5, _x6) { | ||
return _ref4.apply(this, arguments); | ||
}; | ||
}(); | ||
var noOpTransformer = function noOpTransformer(_) { | ||
return Promise.resolve(_); | ||
}; | ||
export var createMiddleware = function createMiddleware() { | ||
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
_ref3$requestTransfor = _ref3.requestTransformer, | ||
requestTransformer = _ref3$requestTransfor === undefined ? function (_) { | ||
return Promise.resolve(_); | ||
} : _ref3$requestTransfor, | ||
api = _ref3.api; | ||
var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
_ref5$requestTransfor = _ref5.requestTransformer, | ||
requestTransformer = _ref5$requestTransfor === undefined ? noOpTransformer : _ref5$requestTransfor, | ||
api = _ref5.api; | ||
@@ -212,3 +222,5 @@ return function (store) { | ||
return requestTransformer(dedupe(action.requestId, timeout(resolveRequest(api, action), DEFAULT_TIMEOUT, { | ||
var transform = action.options.skipTransform ? noOpTransformer : requestTransformer; | ||
return transform(dedupe(action.requestId, timeout(resolveRequest(api, action), DEFAULT_TIMEOUT, { | ||
errorMessage: 'Connection timeout' | ||
@@ -215,0 +227,0 @@ }))).then(function (r) { |
@@ -248,2 +248,94 @@ import _regeneratorRuntime from 'babel-runtime/regenerator'; | ||
}); | ||
describe('requestTransformer', function () { | ||
it('should transform if requestTransformer', _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() { | ||
var transformedResponse, request; | ||
return _regeneratorRuntime.wrap(function _callee5$(_context5) { | ||
while (1) { | ||
switch (_context5.prev = _context5.next) { | ||
case 0: | ||
transformedResponse = new Response({ | ||
status: 200, | ||
statusText: 'OK', | ||
ok: true, | ||
jsonBody: { transformed: Math.random() } | ||
}); | ||
store = createStore(combineReducers(Object.assign({}, dequest.reducer)), compose(applyMiddleware(dequest.createMiddleware({ | ||
requestTransformer: function requestTransformer(_) { | ||
return Promise.resolve(transformedResponse); | ||
} | ||
})))); | ||
request = store.dispatch(makeRequest('123', Promise.resolve(mockResponse))); | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { '123': expect.objectContaining({ isLoading: true }) } | ||
}); | ||
_context5.next = 6; | ||
return request; | ||
case 6: | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { | ||
'123': expect.objectContaining(Object.assign({ | ||
isUpdating: false, | ||
isLoading: false | ||
}, transformedResponse.serialize())) | ||
} | ||
}); | ||
case 7: | ||
case 'end': | ||
return _context5.stop(); | ||
} | ||
} | ||
}, _callee5, _this2); | ||
}))); | ||
it('skipTransform', _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() { | ||
var transformedResponse, request; | ||
return _regeneratorRuntime.wrap(function _callee6$(_context6) { | ||
while (1) { | ||
switch (_context6.prev = _context6.next) { | ||
case 0: | ||
transformedResponse = new Response({ | ||
status: 200, | ||
statusText: 'OK', | ||
ok: true, | ||
jsonBody: { transformed: Math.random() } | ||
}); | ||
store = createStore(combineReducers(Object.assign({}, dequest.reducer)), compose(applyMiddleware(dequest.createMiddleware({ | ||
requestTransformer: function requestTransformer(_) { | ||
return Promise.resolve(transformedResponse); | ||
} | ||
})))); | ||
request = store.dispatch(makeRequest('123', Promise.resolve(mockResponse), { | ||
skipTransform: true | ||
})); | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { '123': expect.objectContaining({ isLoading: true }) } | ||
}); | ||
_context6.next = 6; | ||
return request; | ||
case 6: | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { | ||
'123': expect.objectContaining(Object.assign({ | ||
isUpdating: false, | ||
isLoading: false | ||
}, mockResponse.serialize())) | ||
} | ||
}); | ||
case 7: | ||
case 'end': | ||
return _context6.stop(); | ||
} | ||
} | ||
}, _callee6, _this2); | ||
}))); | ||
}); | ||
}); |
{ | ||
"name": "dequest", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"main": "lib/index.js", | ||
@@ -5,0 +5,0 @@ "author": "Trung Dinh Quang <trungdq88@gmail.com>", |
@@ -9,5 +9,6 @@ import { createSelector } from 'reselect'; | ||
class Dequest { | ||
constructor(requestId, request) { | ||
constructor(requestId, request, { skipTransform } = {}) { | ||
this.requestId = requestId; | ||
this.request = request; | ||
this.options = { skipTransform }; | ||
} | ||
@@ -29,4 +30,8 @@ } | ||
export const makeRequest = (requestId, request) => { | ||
return new Dequest(requestId, request); | ||
export const makeRequest = ( | ||
requestId, | ||
request, | ||
{ skipTransform = false } = {}, | ||
) => { | ||
return new Dequest(requestId, request, { skipTransform }); | ||
}; | ||
@@ -102,4 +107,6 @@ | ||
const noOpTransformer = _ => Promise.resolve(_); | ||
export const createMiddleware = ( | ||
{ requestTransformer = _ => Promise.resolve(_), api } = {}, | ||
{ requestTransformer = noOpTransformer, api } = {}, | ||
) => store => next => action => { | ||
@@ -126,3 +133,7 @@ if (!(action instanceof Dequest)) { | ||
return requestTransformer( | ||
const transform = action.options.skipTransform | ||
? noOpTransformer | ||
: requestTransformer; | ||
return transform( | ||
dedupe( | ||
@@ -129,0 +140,0 @@ action.requestId, |
@@ -198,2 +198,80 @@ import dequest, { | ||
}); | ||
describe('requestTransformer', () => { | ||
it('should transform if requestTransformer', async () => { | ||
const transformedResponse = new Response({ | ||
status: 200, | ||
statusText: 'OK', | ||
ok: true, | ||
jsonBody: { transformed: Math.random() }, | ||
}); | ||
store = createStore( | ||
combineReducers({ | ||
...dequest.reducer, | ||
}), | ||
compose( | ||
applyMiddleware( | ||
dequest.createMiddleware({ | ||
requestTransformer: _ => Promise.resolve(transformedResponse), | ||
}), | ||
), | ||
), | ||
); | ||
const request = store.dispatch( | ||
makeRequest('123', Promise.resolve(mockResponse)), | ||
); | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { '123': expect.objectContaining({ isLoading: true }) }, | ||
}); | ||
await request; | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { | ||
'123': expect.objectContaining({ | ||
isUpdating: false, | ||
isLoading: false, | ||
...transformedResponse.serialize(), | ||
}), | ||
}, | ||
}); | ||
}); | ||
it('skipTransform', async () => { | ||
const transformedResponse = new Response({ | ||
status: 200, | ||
statusText: 'OK', | ||
ok: true, | ||
jsonBody: { transformed: Math.random() }, | ||
}); | ||
store = createStore( | ||
combineReducers({ | ||
...dequest.reducer, | ||
}), | ||
compose( | ||
applyMiddleware( | ||
dequest.createMiddleware({ | ||
requestTransformer: _ => Promise.resolve(transformedResponse), | ||
}), | ||
), | ||
), | ||
); | ||
const request = store.dispatch( | ||
makeRequest('123', Promise.resolve(mockResponse), { | ||
skipTransform: true, | ||
}), | ||
); | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { '123': expect.objectContaining({ isLoading: true }) }, | ||
}); | ||
await request; | ||
expect(store.getState()).toEqual({ | ||
'@@dequest': { | ||
'123': expect.objectContaining({ | ||
isUpdating: false, | ||
isLoading: false, | ||
...mockResponse.serialize(), | ||
}), | ||
}, | ||
}); | ||
}); | ||
}); | ||
}); |
175849
1056